|[a-z]:|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,h=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i,i=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\/.*?|\[native code\]|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i,k=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,l=/\((\S*)(?::(\d+))(?::(\d+))\)/,m=a.stack.split("\n"),n=[],o=(/^(.*) is undefined$/.exec(a.message),
+0),p=m.length;o eval")>-1;r&&(b=k.exec(c[3]))?(c[3]=b[1],c[4]=b[2],c[5]=null):0!==o||c[5]||"undefined"==typeof a.columnNumber||(n[0].column=a.columnNumber+1),f={url:c[3],func:c[1]||j,args:c[2]?c[2].split(","):[],line:c[4]?+c[4]:null,column:c[5]?+c[5]:null}}if(!f.func&&f.line&&(f.func=j),f.url&&"blob:"===f.url.substr(0,5)){var s=new XMLHttpRequest;if(s.open("GET",f.url,!1),s.send(null),200===s.status){var t=s.responseText||"";t=t.slice(-300);var u=t.match(/\/\/# sourceMappingURL=(.*)$/);if(u){var v=u[1];"~"===v.charAt(0)&&(v=e()+v.slice(1)),f.url=v.slice(0,-4)}}}n.push(f)}return n.length?{name:a.name,message:a.message,url:d(),stack:n}:null}}function b(a,b,c,d){var e={url:b,line:c};if(e.url&&e.line){if(a.incomplete=!1,e.func||(e.func=j),a.stack.length>0&&a.stack[0].url===e.url){if(a.stack[0].line===e.line)return!1;if(!a.stack[0].line&&a.stack[0].func===e.func)return a.stack[0].line=e.line,!1}return a.stack.unshift(e),a.partial=!0,!0}return a.incomplete=!0,!1}function c(a,e){for(var h,i,k=/function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,l=[],m={},n=!1,o=c.caller;o&&!n;o=o.caller)if(o!==f&&o!==g.report){if(i={url:null,func:j,line:null,column:null},o.name?i.func=o.name:(h=k.exec(o.toString()))&&(i.func=h[1]),"undefined"==typeof i.func)try{i.func=h.input.substring(0,h.input.indexOf("{"))}catch(p){}m[""+o]?n=!0:m[""+o]=!0,l.push(i)}e&&l.splice(0,e);var q={name:a.name,message:a.message,url:d(),stack:l};return b(q,a.sourceURL||a.fileName,a.line||a.lineNumber,a.message||a.description),q}function f(b,e){var f=null;e=null==e?0:+e;try{if(f=a(b))return f}catch(h){if(g.debug)throw h}try{if(f=c(b,e+1))return f}catch(h){if(g.debug)throw h}return{name:b.name,message:b.message,url:d()}}return f.augmentStackTraceWithInitialElement=b,f.computeStackTraceFromStackProp=a,f}(),b.exports=g}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{10:10}],12:[function(a,b,c){function d(a,b){for(var c=0;c0){var i=d(c,this);~i?c.splice(i+1):c.push(this),~i?e.splice(i,1/0,g):e.push(g),~d(c,h)&&(h=b.call(this,g,h))}else c.push(h);return null==a?h instanceof Error?f(h):h:a.call(this,g,h)}}c=b.exports=e,c.getSerialize=g},{}],13:[function(a,b,c){function d(a,b){var c=(65535&a)+(65535&b),d=(a>>16)+(b>>16)+(c>>16);return d<<16|65535&c}function e(a,b){return a<>>32-b}function f(a,b,c,f,g,h){return d(e(d(d(b,a),d(f,h)),g),c)}function g(a,b,c,d,e,g,h){return f(b&c|~b&d,a,b,e,g,h)}function h(a,b,c,d,e,g,h){return f(b&d|c&~d,a,b,e,g,h)}function i(a,b,c,d,e,g,h){return f(b^c^d,a,b,e,g,h)}function j(a,b,c,d,e,g,h){return f(c^(b|~d),a,b,e,g,h)}function k(a,b){a[b>>5]|=128<>>9<<4)+14]=b;var c,e,f,k,l,m=1732584193,n=-271733879,o=-1732584194,p=271733878;for(c=0;c>5]>>>b%32&255);return c}function m(a){var b,c=[];for(c[(a.length>>2)-1]=void 0,b=0;b>5]|=(255&a.charCodeAt(b/8))<16&&(e=k(e,8*a.length)),c=0;c<16;c+=1)f[c]=909522486^e[c],g[c]=1549556828^e[c];return d=k(f.concat(m(b)),512+8*b.length),l(k(g.concat(d),640))}function p(a){var b,c,d="0123456789abcdef",e="";for(c=0;c>>4&15)+d.charAt(15&b);return e}function q(a){return unescape(encodeURIComponent(a))}function r(a){return n(q(a))}function s(a){return p(r(a))}function t(a,b){return o(q(a),q(b))}function u(a,b){return p(t(a,b))}function v(a,b,c){return b?c?t(b,a):u(b,a):c?r(a):s(a)}b.exports=v},{}]},{},[9,1,2,3,4,5])(9)});
+//# sourceMappingURL=raven.min.js.map
\ No newline at end of file
diff --git a/packages/raven-js/dist/angular,console,ember,require,vue/raven.min.js.map b/packages/raven-js/dist/angular,console,ember,require,vue/raven.min.js.map
new file mode 100644
index 000000000000..482791ea468e
--- /dev/null
+++ b/packages/raven-js/dist/angular,console,ember,require,vue/raven.min.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["raven.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Raven","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length","1","_dereq_","angularPlugin","angular","RavenProvider","$get","$window","ExceptionHandlerProvider","$provide","decorator","exceptionHandler","R","$delegate","ex","cause","captureException","extra","moduleName","provider","config","setDataCallback","wrappedCallback","data","_normalizeData","angularPattern","exception","values","matches","exec","value","type","message","angularDocs","substr","addPlugin","10","9","2","consolePlugin","console","pluginOptions","logLevels","levels","push","callback","msg","captureMessage","level","pop","wrapConsoleMethod","wrapMethod","7","3","emberPlugin","Ember","_oldOnError","onerror","error","RSVP","on","reason","context","4","requirePlugin","wrap","deep","5","formatComponentName","vm","$root","name","_isVue","$options","_componentTag","__file","vuePlugin","Vue","errorHandler","info","metaData","Object","prototype","toString","componentName","propsData","lifecycleHook","6","RavenConfigError","constructor","utils","originalConsoleLevel","originalConsole","sentryLevel","args","slice","arguments","safeJoin","logger","Function","apply","8","now","Date","keepOriginalCallback","original","isFunction","_hasJSON","JSON","stringify","_hasDocument","isUndefined","_document","_hasNavigator","_navigator","_lastCapturedException","_lastData","_lastEventId","_globalServer","_globalKey","_globalProject","_globalContext","_globalOptions","release","_window","SENTRY_RELEASE","id","ignoreErrors","ignoreUrls","whitelistUrls","includePaths","headers","collectWindowErrors","captureUnhandledRejections","maxMessageLength","maxUrlLength","stackTraceLimit","autoBreadcrumbs","instrument","sampleRate","sanitizeKeys","_fetchDefaults","method","keepalive","referrerPolicy","supportsReferrerPolicy","_ignoreOnError","_isRavenInstalled","_originalErrorStackTraceLimit","_originalConsole","_originalConsoleMethods","_plugins","_startTime","_wrappedBuiltIns","_breadcrumbs","_lastCapturedEvent","_location","location","_lastHref","href","_resetBackoff","TraceKit","md5","isErrorEvent","isDOMError","isDOMException","isError","isObject","isPlainObject","isString","isArray","isEmptyObject","each","objectMerge","truncate","objectFrozen","hasKey","joinRegExp","urlencode","uuid4","htmlTreeAsString","isSameException","isSameStacktrace","parseUrl","fill","supportsFetch","serializeKeysForMessage","serializeException","sanitize","dsnKeys","split","dsnPattern","document","navigator","VERSION","debug","dsn","options","_logDebug","globalOptions","key","setDSN","maxBreadcrumbs","Math","max","min","autoBreadcrumbDefaults","xhr","dom","sentry","instrumentDefaults","tryCatch","install","isSetup","report","subscribe","_handleOnErrorStackInfo","_attachPromiseRejectionHandler","_patchFunctionToString","_instrumentTryCatch","_instrumentBreadcrumbs","_drainPlugins","uri","_parseDSN","lastSlash","path","lastIndexOf","_dsn","user","_globalSecret","pass","_getGlobalServer","_globalEndpoint","func","undefined","_before","wrapped","_ignoreNextOnError","__raven__","__raven_wrapper__","property","__orig__","uninstall","_detachPromiseRejectionHandler","_unpatchFunctionToString","_restoreBuiltIns","_restoreConsole","U","event","unhandledPromiseRejection","C","_promiseRejectionHandler","bind","addEventListener","Q","removeEventListener","trimHeadFrames","stacktrace","_getCaptureExceptionOptionsFromPlainObject","stack","computeStackTrace","_handleStackInfo","ex1","V","currentOptions","exKeys","keys","sort","fingerprint","__serialized__","test","initialCall","fileurl","url","frames","_prepareFrames","reverse","_send","captureBreadcrumb","obj","crumb","timestamp","breadcrumbCallback","result","shift","plugin","pluginArgs","setUserContext","setExtraContext","_mergeContext","setTagsContext","tags","clearContext","getContext","parse","setEnvironment","environment","setRelease","dataCallback","setBreadcrumbCallback","setShouldSendCallback","shouldSendCallback","setTransport","transport","lastException","lastEventId","ravenNotConfiguredError","afterLoad","RavenConfig","showReportDialog","eventId","encode","encodeURIComponent","qs","email","globalServer","script","createElement","async","src","head","body","appendChild","M","setTimeout","_","eventType","evt","toUpperCase","createEvent","initEvent","createEventObject","dispatchEvent","fireEvent","toLowerCase","aa","evtName","_keypressTimeout","target","category","ca","debounceDuration","tagName","isContentEditable","timeout","_breadcrumbEventHandler","clearTimeout","da","from","to","parsedLoc","parsedTo","parsedFrom","protocol","host","relative","D","_originalFunctionToString","E","wrapTimeFn","orig","fn","Array","originalCallback","wrapEventTarget","proto","hasOwnProperty","capture","secure","handleEvent","err","before","clickHandler","keypressHandler","_keypressEventHandler","wrappedBuiltIns","requestAnimationFrame","cb","eventTargets","F","wrapProp","prop","xhrproto","XMLHttpRequest","origOpen","indexOf","__raven_xhr","status_code","origSend","onreadystatechangeHandler","readyState","status","props","j","onreadystatechange","origFetch","fetchInput","Request","fetchData","then","response","attachEvent","chrome","isChromePackagedApp","app","runtime","hasPushAndReplaceState","history","pushState","replaceState","oldOnPopState","onpopstate","currentHref","_captureUrlChange","historyReplacementFunction","origHistFunction","log","consoleMethodCallback","S","builtin","T","G","installer","concat","H","str","m","allowSecretKey","K","port","B","W","stackInfo","_triggerEvent","_processException","lineno","Y","frame","_normalizeFrame","in_app","ha","stackInfoUrl","normalized","filename","line","colno","column","function","ga","prefixedMessage","transaction","ia","request","Referer","breadcrumbs","_trimBreadcrumbs","ja","urlProp","urlProps","ka","httpData","userAgent","User-Agent","referrer","z","_backoffDuration","_backoffStart","na","oa","current","last","pa","_shouldBackoff","retry","get","getResponseHeader","parseInt","Z","baseData","project","platform","_getHttpData","serverName","server_name","_sanitizeData","forEach","random","_sendProcessedPayload","qa","sa","ra","_trimPacket","allowDuplicates","_isRepeatData","event_id","_getUuid","auth","sentry_version","sentry_client","sentry_key","sentry_secret","_makeRequest","onSuccess","onError","_setBackoffState","ta","opts","evaluatedHeaders","evaluatedFetchParameters","_evaluateHash","fetchParameters","defaultFetchOptions","fetchOptions","fetch","ok","hasCORS","XDomainRequest","replace","onload","open","setRequestHeader","send","ua","hash","evaluated","A","$","setUser","setReleaseContext","11","12","13","RavenConstructor","_Raven","noConflict","Client","what","supportsErrorEvent","ErrorEvent","supportsDOMError","DOMError","supportsDOMException","DOMException","Headers","Response","supportsPromiseRejectionEvent","PromiseRejectionEvent","normalizedData","obj1","obj2","isFrozen","object","patterns","pattern","sources","len","source","RegExp","join","pairs","match","query","fragment","crypto","msCrypto","getRandomValues","arr","Uint16Array","pad","num","v","c","elem","nextStr","MAX_TRAVERSE_HEIGHT","MAX_OUTPUT_LEN","out","height","separator","sepLength","htmlElementAsString","parentNode","className","classes","attr","attrWhitelist","getAttribute","isOnlyOneTruthy","b","isBothUndefined","ex2","stack1","stack2","frames1","frames2","replacement","track","input","delimiter","output","String","utf8Length","encodeURI","jsonSize","serializeValue","maxLength","serializeObject","depth","reduce","acc","map","val","maxSize","MAX_SERIALIZE_EXCEPTION_DEPTH","MAX_SERIALIZE_EXCEPTION_SIZE","serialized","filter","MAX_SERIALIZE_KEYS_LENGTH","usedKeys","sanitizeWorker","workerInput","k","sanitizeRegExp","sanitizeMask","safeInput","o_O","getLocationHref","getLocationOrigin","origin","hostname","_slice","UNKNOWN_FUNCTION","ERROR_TYPES_RE","handler","installGlobalHandler","handlers","unsubscribe","splice","unsubscribeAll","uninstallGlobalHandler","notifyHandlers","isWindowError","inner","traceKitWindowOnError","lineNo","colNo","lastExceptionStack","augmentStackTraceWithInitialElement","processLastException","groups","_oldOnerrorHandler","_onErrorHandlerInstalled","_lastExceptionStack","_lastArgs","lastArgs","rethrow","incomplete","computeStackTraceFromStackProp","submatch","parts","element","winjs","gecko","geckoEval","chromeEval","lines","isNative","isEval","columnNumber","responseText","sourceMaps","sourceMapAddress","charAt","initial","unshift","partial","computeStackTraceByWalkingCallerChain","item","functionName","funcs","recursion","curr","caller","substring","sourceURL","fileName","lineNumber","description","haystack","needle","replacer","spaces","cycleReplacer","serializer","stringifyError","thisPos","Infinity","getSerialize","safeAdd","x","y","lsw","msw","bitRotateLeft","cnt","md5cmn","q","md5ff","d","md5gg","md5hh","md5ii","binlMD5","olda","oldb","oldc","oldd","binl2rstr","length32","fromCharCode","rstr2binl","length8","charCodeAt","rstrMD5","rstrHMACMD5","bkey","ipad","opad","rstr2hex","hexTab","str2rstrUTF8","unescape","rawMD5","hexMD5","rawHMACMD5","hexHMACMD5","string","raw"],"mappings":"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","file":"raven.min.js"}
\ No newline at end of file
diff --git a/packages/raven-js/dist/angular,console,ember,require/raven.js b/packages/raven-js/dist/angular,console,ember,require/raven.js
new file mode 100644
index 000000000000..fc4268ab274f
--- /dev/null
+++ b/packages/raven-js/dist/angular,console,ember,require/raven.js
@@ -0,0 +1,4172 @@
+/*! Raven.js 3.25.2 (30b6d4e) | github.com/getsentry/raven-js */
+
+/*
+ * Includes TraceKit
+ * https://github.com/getsentry/TraceKit
+ *
+ * Copyright 2018 Matt Robenolt and other contributors
+ * Released under the BSD license
+ * https://github.com/getsentry/raven-js/blob/master/LICENSE
+ *
+ */
+
+(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Raven = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o captureException(string) => captureMessage(string)
+ if (initialCall && initialCall.func === 'Raven.captureException') {
+ initialCall = stack.stack[2];
+ }
+
+ var fileurl = (initialCall && initialCall.url) || '';
+
+ if (
+ !!this._globalOptions.ignoreUrls.test &&
+ this._globalOptions.ignoreUrls.test(fileurl)
+ ) {
+ return;
+ }
+
+ if (
+ !!this._globalOptions.whitelistUrls.test &&
+ !this._globalOptions.whitelistUrls.test(fileurl)
+ ) {
+ return;
+ }
+
+ if (this._globalOptions.stacktrace || (options && options.stacktrace)) {
+ // fingerprint on msg, not stack trace (legacy behavior, could be revisited)
+ data.fingerprint = data.fingerprint == null ? msg : data.fingerprint;
+
+ options = objectMerge(
+ {
+ trimHeadFrames: 0
+ },
+ options
+ );
+ // Since we know this is a synthetic trace, the top frame (this function call)
+ // MUST be from Raven.js, so mark it for trimming
+ // We add to the trim counter so that callers can choose to trim extra frames, such
+ // as utility functions.
+ options.trimHeadFrames += 1;
+
+ var frames = this._prepareFrames(stack, options);
+ data.stacktrace = {
+ // Sentry expects frames oldest to newest
+ frames: frames.reverse()
+ };
+ }
+
+ // Make sure that fingerprint is always wrapped in an array
+ if (data.fingerprint) {
+ data.fingerprint = isArray(data.fingerprint)
+ ? data.fingerprint
+ : [data.fingerprint];
+ }
+
+ // Fire away!
+ this._send(data);
+
+ return this;
+ },
+
+ captureBreadcrumb: function(obj) {
+ var crumb = objectMerge(
+ {
+ timestamp: now() / 1000
+ },
+ obj
+ );
+
+ if (isFunction(this._globalOptions.breadcrumbCallback)) {
+ var result = this._globalOptions.breadcrumbCallback(crumb);
+
+ if (isObject(result) && !isEmptyObject(result)) {
+ crumb = result;
+ } else if (result === false) {
+ return this;
+ }
+ }
+
+ this._breadcrumbs.push(crumb);
+ if (this._breadcrumbs.length > this._globalOptions.maxBreadcrumbs) {
+ this._breadcrumbs.shift();
+ }
+ return this;
+ },
+
+ addPlugin: function(plugin /*arg1, arg2, ... argN*/) {
+ var pluginArgs = [].slice.call(arguments, 1);
+
+ this._plugins.push([plugin, pluginArgs]);
+ if (this._isRavenInstalled) {
+ this._drainPlugins();
+ }
+
+ return this;
+ },
+
+ /*
+ * Set/clear a user to be sent along with the payload.
+ *
+ * @param {object} user An object representing user data [optional]
+ * @return {Raven}
+ */
+ setUserContext: function(user) {
+ // Intentionally do not merge here since that's an unexpected behavior.
+ this._globalContext.user = user;
+
+ return this;
+ },
+
+ /*
+ * Merge extra attributes to be sent along with the payload.
+ *
+ * @param {object} extra An object representing extra data [optional]
+ * @return {Raven}
+ */
+ setExtraContext: function(extra) {
+ this._mergeContext('extra', extra);
+
+ return this;
+ },
+
+ /*
+ * Merge tags to be sent along with the payload.
+ *
+ * @param {object} tags An object representing tags [optional]
+ * @return {Raven}
+ */
+ setTagsContext: function(tags) {
+ this._mergeContext('tags', tags);
+
+ return this;
+ },
+
+ /*
+ * Clear all of the context.
+ *
+ * @return {Raven}
+ */
+ clearContext: function() {
+ this._globalContext = {};
+
+ return this;
+ },
+
+ /*
+ * Get a copy of the current context. This cannot be mutated.
+ *
+ * @return {object} copy of context
+ */
+ getContext: function() {
+ // lol javascript
+ return JSON.parse(stringify(this._globalContext));
+ },
+
+ /*
+ * Set environment of application
+ *
+ * @param {string} environment Typically something like 'production'.
+ * @return {Raven}
+ */
+ setEnvironment: function(environment) {
+ this._globalOptions.environment = environment;
+
+ return this;
+ },
+
+ /*
+ * Set release version of application
+ *
+ * @param {string} release Typically something like a git SHA to identify version
+ * @return {Raven}
+ */
+ setRelease: function(release) {
+ this._globalOptions.release = release;
+
+ return this;
+ },
+
+ /*
+ * Set the dataCallback option
+ *
+ * @param {function} callback The callback to run which allows the
+ * data blob to be mutated before sending
+ * @return {Raven}
+ */
+ setDataCallback: function(callback) {
+ var original = this._globalOptions.dataCallback;
+ this._globalOptions.dataCallback = keepOriginalCallback(original, callback);
+ return this;
+ },
+
+ /*
+ * Set the breadcrumbCallback option
+ *
+ * @param {function} callback The callback to run which allows filtering
+ * or mutating breadcrumbs
+ * @return {Raven}
+ */
+ setBreadcrumbCallback: function(callback) {
+ var original = this._globalOptions.breadcrumbCallback;
+ this._globalOptions.breadcrumbCallback = keepOriginalCallback(original, callback);
+ return this;
+ },
+
+ /*
+ * Set the shouldSendCallback option
+ *
+ * @param {function} callback The callback to run which allows
+ * introspecting the blob before sending
+ * @return {Raven}
+ */
+ setShouldSendCallback: function(callback) {
+ var original = this._globalOptions.shouldSendCallback;
+ this._globalOptions.shouldSendCallback = keepOriginalCallback(original, callback);
+ return this;
+ },
+
+ /**
+ * Override the default HTTP transport mechanism that transmits data
+ * to the Sentry server.
+ *
+ * @param {function} transport Function invoked instead of the default
+ * `makeRequest` handler.
+ *
+ * @return {Raven}
+ */
+ setTransport: function(transport) {
+ this._globalOptions.transport = transport;
+
+ return this;
+ },
+
+ /*
+ * Get the latest raw exception that was captured by Raven.
+ *
+ * @return {error}
+ */
+ lastException: function() {
+ return this._lastCapturedException;
+ },
+
+ /*
+ * Get the last event id
+ *
+ * @return {string}
+ */
+ lastEventId: function() {
+ return this._lastEventId;
+ },
+
+ /*
+ * Determine if Raven is setup and ready to go.
+ *
+ * @return {boolean}
+ */
+ isSetup: function() {
+ if (!this._hasJSON) return false; // needs JSON support
+ if (!this._globalServer) {
+ if (!this.ravenNotConfiguredError) {
+ this.ravenNotConfiguredError = true;
+ this._logDebug('error', 'Error: Raven has not been configured.');
+ }
+ return false;
+ }
+ return true;
+ },
+
+ afterLoad: function() {
+ // TODO: remove window dependence?
+
+ // Attempt to initialize Raven on load
+ var RavenConfig = _window.RavenConfig;
+ if (RavenConfig) {
+ this.config(RavenConfig.dsn, RavenConfig.config).install();
+ }
+ },
+
+ showReportDialog: function(options) {
+ if (
+ !_document // doesn't work without a document (React native)
+ )
+ return;
+
+ options = options || {};
+
+ var lastEventId = options.eventId || this.lastEventId();
+ if (!lastEventId) {
+ throw new RavenConfigError('Missing eventId');
+ }
+
+ var dsn = options.dsn || this._dsn;
+ if (!dsn) {
+ throw new RavenConfigError('Missing DSN');
+ }
+
+ var encode = encodeURIComponent;
+ var qs = '';
+ qs += '?eventId=' + encode(lastEventId);
+ qs += '&dsn=' + encode(dsn);
+
+ var user = options.user || this._globalContext.user;
+ if (user) {
+ if (user.name) qs += '&name=' + encode(user.name);
+ if (user.email) qs += '&email=' + encode(user.email);
+ }
+
+ var globalServer = this._getGlobalServer(this._parseDSN(dsn));
+
+ var script = _document.createElement('script');
+ script.async = true;
+ script.src = globalServer + '/api/embed/error-page/' + qs;
+ (_document.head || _document.body).appendChild(script);
+ },
+
+ /**** Private functions ****/
+ _ignoreNextOnError: function() {
+ var self = this;
+ this._ignoreOnError += 1;
+ setTimeout(function() {
+ // onerror should trigger before setTimeout
+ self._ignoreOnError -= 1;
+ });
+ },
+
+ _triggerEvent: function(eventType, options) {
+ // NOTE: `event` is a native browser thing, so let's avoid conflicting wiht it
+ var evt, key;
+
+ if (!this._hasDocument) return;
+
+ options = options || {};
+
+ eventType = 'raven' + eventType.substr(0, 1).toUpperCase() + eventType.substr(1);
+
+ if (_document.createEvent) {
+ evt = _document.createEvent('HTMLEvents');
+ evt.initEvent(eventType, true, true);
+ } else {
+ evt = _document.createEventObject();
+ evt.eventType = eventType;
+ }
+
+ for (key in options)
+ if (hasKey(options, key)) {
+ evt[key] = options[key];
+ }
+
+ if (_document.createEvent) {
+ // IE9 if standards
+ _document.dispatchEvent(evt);
+ } else {
+ // IE8 regardless of Quirks or Standards
+ // IE9 if quirks
+ try {
+ _document.fireEvent('on' + evt.eventType.toLowerCase(), evt);
+ } catch (e) {
+ // Do nothing
+ }
+ }
+ },
+
+ /**
+ * Wraps addEventListener to capture UI breadcrumbs
+ * @param evtName the event name (e.g. "click")
+ * @returns {Function}
+ * @private
+ */
+ _breadcrumbEventHandler: function(evtName) {
+ var self = this;
+ return function(evt) {
+ // reset keypress timeout; e.g. triggering a 'click' after
+ // a 'keypress' will reset the keypress debounce so that a new
+ // set of keypresses can be recorded
+ self._keypressTimeout = null;
+
+ // It's possible this handler might trigger multiple times for the same
+ // event (e.g. event propagation through node ancestors). Ignore if we've
+ // already captured the event.
+ if (self._lastCapturedEvent === evt) return;
+
+ self._lastCapturedEvent = evt;
+
+ // try/catch both:
+ // - accessing evt.target (see getsentry/raven-js#838, #768)
+ // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly
+ // can throw an exception in some circumstances.
+ var target;
+ try {
+ target = htmlTreeAsString(evt.target);
+ } catch (e) {
+ target = '';
+ }
+
+ self.captureBreadcrumb({
+ category: 'ui.' + evtName, // e.g. ui.click, ui.input
+ message: target
+ });
+ };
+ },
+
+ /**
+ * Wraps addEventListener to capture keypress UI events
+ * @returns {Function}
+ * @private
+ */
+ _keypressEventHandler: function() {
+ var self = this,
+ debounceDuration = 1000; // milliseconds
+
+ // TODO: if somehow user switches keypress target before
+ // debounce timeout is triggered, we will only capture
+ // a single breadcrumb from the FIRST target (acceptable?)
+ return function(evt) {
+ var target;
+ try {
+ target = evt.target;
+ } catch (e) {
+ // just accessing event properties can throw an exception in some rare circumstances
+ // see: https://github.com/getsentry/raven-js/issues/838
+ return;
+ }
+ var tagName = target && target.tagName;
+
+ // only consider keypress events on actual input elements
+ // this will disregard keypresses targeting body (e.g. tabbing
+ // through elements, hotkeys, etc)
+ if (
+ !tagName ||
+ (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && !target.isContentEditable)
+ )
+ return;
+
+ // record first keypress in a series, but ignore subsequent
+ // keypresses until debounce clears
+ var timeout = self._keypressTimeout;
+ if (!timeout) {
+ self._breadcrumbEventHandler('input')(evt);
+ }
+ clearTimeout(timeout);
+ self._keypressTimeout = setTimeout(function() {
+ self._keypressTimeout = null;
+ }, debounceDuration);
+ };
+ },
+
+ /**
+ * Captures a breadcrumb of type "navigation", normalizing input URLs
+ * @param to the originating URL
+ * @param from the target URL
+ * @private
+ */
+ _captureUrlChange: function(from, to) {
+ var parsedLoc = parseUrl(this._location.href);
+ var parsedTo = parseUrl(to);
+ var parsedFrom = parseUrl(from);
+
+ // because onpopstate only tells you the "new" (to) value of location.href, and
+ // not the previous (from) value, we need to track the value of the current URL
+ // state ourselves
+ this._lastHref = to;
+
+ // Use only the path component of the URL if the URL matches the current
+ // document (almost all the time when using pushState)
+ if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host)
+ to = parsedTo.relative;
+ if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host)
+ from = parsedFrom.relative;
+
+ this.captureBreadcrumb({
+ category: 'navigation',
+ data: {
+ to: to,
+ from: from
+ }
+ });
+ },
+
+ _patchFunctionToString: function() {
+ var self = this;
+ self._originalFunctionToString = Function.prototype.toString;
+ // eslint-disable-next-line no-extend-native
+ Function.prototype.toString = function() {
+ if (typeof this === 'function' && this.__raven__) {
+ return self._originalFunctionToString.apply(this.__orig__, arguments);
+ }
+ return self._originalFunctionToString.apply(this, arguments);
+ };
+ },
+
+ _unpatchFunctionToString: function() {
+ if (this._originalFunctionToString) {
+ // eslint-disable-next-line no-extend-native
+ Function.prototype.toString = this._originalFunctionToString;
+ }
+ },
+
+ /**
+ * Wrap timer functions and event targets to catch errors and provide
+ * better metadata.
+ */
+ _instrumentTryCatch: function() {
+ var self = this;
+
+ var wrappedBuiltIns = self._wrappedBuiltIns;
+
+ function wrapTimeFn(orig) {
+ return function(fn, t) {
+ // preserve arity
+ // Make a copy of the arguments to prevent deoptimization
+ // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments
+ var args = new Array(arguments.length);
+ for (var i = 0; i < args.length; ++i) {
+ args[i] = arguments[i];
+ }
+ var originalCallback = args[0];
+ if (isFunction(originalCallback)) {
+ args[0] = self.wrap(originalCallback);
+ }
+
+ // IE < 9 doesn't support .call/.apply on setInterval/setTimeout, but it
+ // also supports only two arguments and doesn't care what this is, so we
+ // can just call the original function directly.
+ if (orig.apply) {
+ return orig.apply(this, args);
+ } else {
+ return orig(args[0], args[1]);
+ }
+ };
+ }
+
+ var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;
+
+ function wrapEventTarget(global) {
+ var proto = _window[global] && _window[global].prototype;
+ if (proto && proto.hasOwnProperty && proto.hasOwnProperty('addEventListener')) {
+ fill(
+ proto,
+ 'addEventListener',
+ function(orig) {
+ return function(evtName, fn, capture, secure) {
+ // preserve arity
+ try {
+ if (fn && fn.handleEvent) {
+ fn.handleEvent = self.wrap(fn.handleEvent);
+ }
+ } catch (err) {
+ // can sometimes get 'Permission denied to access property "handle Event'
+ }
+
+ // More breadcrumb DOM capture ... done here and not in `_instrumentBreadcrumbs`
+ // so that we don't have more than one wrapper function
+ var before, clickHandler, keypressHandler;
+
+ if (
+ autoBreadcrumbs &&
+ autoBreadcrumbs.dom &&
+ (global === 'EventTarget' || global === 'Node')
+ ) {
+ // NOTE: generating multiple handlers per addEventListener invocation, should
+ // revisit and verify we can just use one (almost certainly)
+ clickHandler = self._breadcrumbEventHandler('click');
+ keypressHandler = self._keypressEventHandler();
+ before = function(evt) {
+ // need to intercept every DOM event in `before` argument, in case that
+ // same wrapped method is re-used for different events (e.g. mousemove THEN click)
+ // see #724
+ if (!evt) return;
+
+ var eventType;
+ try {
+ eventType = evt.type;
+ } catch (e) {
+ // just accessing event properties can throw an exception in some rare circumstances
+ // see: https://github.com/getsentry/raven-js/issues/838
+ return;
+ }
+ if (eventType === 'click') return clickHandler(evt);
+ else if (eventType === 'keypress') return keypressHandler(evt);
+ };
+ }
+ return orig.call(
+ this,
+ evtName,
+ self.wrap(fn, undefined, before),
+ capture,
+ secure
+ );
+ };
+ },
+ wrappedBuiltIns
+ );
+ fill(
+ proto,
+ 'removeEventListener',
+ function(orig) {
+ return function(evt, fn, capture, secure) {
+ try {
+ fn = fn && (fn.__raven_wrapper__ ? fn.__raven_wrapper__ : fn);
+ } catch (e) {
+ // ignore, accessing __raven_wrapper__ will throw in some Selenium environments
+ }
+ return orig.call(this, evt, fn, capture, secure);
+ };
+ },
+ wrappedBuiltIns
+ );
+ }
+ }
+
+ fill(_window, 'setTimeout', wrapTimeFn, wrappedBuiltIns);
+ fill(_window, 'setInterval', wrapTimeFn, wrappedBuiltIns);
+ if (_window.requestAnimationFrame) {
+ fill(
+ _window,
+ 'requestAnimationFrame',
+ function(orig) {
+ return function(cb) {
+ return orig(self.wrap(cb));
+ };
+ },
+ wrappedBuiltIns
+ );
+ }
+
+ // event targets borrowed from bugsnag-js:
+ // https://github.com/bugsnag/bugsnag-js/blob/master/src/bugsnag.js#L666
+ var eventTargets = [
+ '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'
+ ];
+ for (var i = 0; i < eventTargets.length; i++) {
+ wrapEventTarget(eventTargets[i]);
+ }
+ },
+
+ /**
+ * Instrument browser built-ins w/ breadcrumb capturing
+ * - XMLHttpRequests
+ * - DOM interactions (click/typing)
+ * - window.location changes
+ * - console
+ *
+ * Can be disabled or individually configured via the `autoBreadcrumbs` config option
+ */
+ _instrumentBreadcrumbs: function() {
+ var self = this;
+ var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;
+
+ var wrappedBuiltIns = self._wrappedBuiltIns;
+
+ function wrapProp(prop, xhr) {
+ if (prop in xhr && isFunction(xhr[prop])) {
+ fill(xhr, prop, function(orig) {
+ return self.wrap(orig);
+ }); // intentionally don't track filled methods on XHR instances
+ }
+ }
+
+ if (autoBreadcrumbs.xhr && 'XMLHttpRequest' in _window) {
+ var xhrproto = _window.XMLHttpRequest && _window.XMLHttpRequest.prototype;
+ fill(
+ xhrproto,
+ 'open',
+ function(origOpen) {
+ return function(method, url) {
+ // preserve arity
+
+ // if Sentry key appears in URL, don't capture
+ if (isString(url) && url.indexOf(self._globalKey) === -1) {
+ this.__raven_xhr = {
+ method: method,
+ url: url,
+ status_code: null
+ };
+ }
+
+ return origOpen.apply(this, arguments);
+ };
+ },
+ wrappedBuiltIns
+ );
+
+ fill(
+ xhrproto,
+ 'send',
+ function(origSend) {
+ return function() {
+ // preserve arity
+ var xhr = this;
+
+ function onreadystatechangeHandler() {
+ if (xhr.__raven_xhr && xhr.readyState === 4) {
+ try {
+ // touching statusCode in some platforms throws
+ // an exception
+ xhr.__raven_xhr.status_code = xhr.status;
+ } catch (e) {
+ /* do nothing */
+ }
+
+ self.captureBreadcrumb({
+ type: 'http',
+ category: 'xhr',
+ data: xhr.__raven_xhr
+ });
+ }
+ }
+
+ var props = ['onload', 'onerror', 'onprogress'];
+ for (var j = 0; j < props.length; j++) {
+ wrapProp(props[j], xhr);
+ }
+
+ if ('onreadystatechange' in xhr && isFunction(xhr.onreadystatechange)) {
+ fill(
+ xhr,
+ 'onreadystatechange',
+ function(orig) {
+ return self.wrap(orig, undefined, onreadystatechangeHandler);
+ } /* intentionally don't track this instrumentation */
+ );
+ } else {
+ // if onreadystatechange wasn't actually set by the page on this xhr, we
+ // are free to set our own and capture the breadcrumb
+ xhr.onreadystatechange = onreadystatechangeHandler;
+ }
+
+ return origSend.apply(this, arguments);
+ };
+ },
+ wrappedBuiltIns
+ );
+ }
+
+ if (autoBreadcrumbs.xhr && supportsFetch()) {
+ fill(
+ _window,
+ 'fetch',
+ function(origFetch) {
+ return function() {
+ // preserve arity
+ // Make a copy of the arguments to prevent deoptimization
+ // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments
+ var args = new Array(arguments.length);
+ for (var i = 0; i < args.length; ++i) {
+ args[i] = arguments[i];
+ }
+
+ var fetchInput = args[0];
+ var method = 'GET';
+ var url;
+
+ if (typeof fetchInput === 'string') {
+ url = fetchInput;
+ } else if ('Request' in _window && fetchInput instanceof _window.Request) {
+ url = fetchInput.url;
+ if (fetchInput.method) {
+ method = fetchInput.method;
+ }
+ } else {
+ url = '' + fetchInput;
+ }
+
+ // if Sentry key appears in URL, don't capture, as it's our own request
+ if (url.indexOf(self._globalKey) !== -1) {
+ return origFetch.apply(this, args);
+ }
+
+ if (args[1] && args[1].method) {
+ method = args[1].method;
+ }
+
+ var fetchData = {
+ method: method,
+ url: url,
+ status_code: null
+ };
+
+ return origFetch
+ .apply(this, args)
+ .then(function(response) {
+ fetchData.status_code = response.status;
+
+ self.captureBreadcrumb({
+ type: 'http',
+ category: 'fetch',
+ data: fetchData
+ });
+
+ return response;
+ })
+ ['catch'](function(err) {
+ // if there is an error performing the request
+ self.captureBreadcrumb({
+ type: 'http',
+ category: 'fetch',
+ data: fetchData,
+ level: 'error'
+ });
+
+ throw err;
+ });
+ };
+ },
+ wrappedBuiltIns
+ );
+ }
+
+ // Capture breadcrumbs from any click that is unhandled / bubbled up all the way
+ // to the document. Do this before we instrument addEventListener.
+ if (autoBreadcrumbs.dom && this._hasDocument) {
+ if (_document.addEventListener) {
+ _document.addEventListener('click', self._breadcrumbEventHandler('click'), false);
+ _document.addEventListener('keypress', self._keypressEventHandler(), false);
+ } else if (_document.attachEvent) {
+ // IE8 Compatibility
+ _document.attachEvent('onclick', self._breadcrumbEventHandler('click'));
+ _document.attachEvent('onkeypress', self._keypressEventHandler());
+ }
+ }
+
+ // record navigation (URL) changes
+ // NOTE: in Chrome App environment, touching history.pushState, *even inside
+ // a try/catch block*, will cause Chrome to output an error to console.error
+ // borrowed from: https://github.com/angular/angular.js/pull/13945/files
+ var chrome = _window.chrome;
+ var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime;
+ var hasPushAndReplaceState =
+ !isChromePackagedApp &&
+ _window.history &&
+ _window.history.pushState &&
+ _window.history.replaceState;
+ if (autoBreadcrumbs.location && hasPushAndReplaceState) {
+ // TODO: remove onpopstate handler on uninstall()
+ var oldOnPopState = _window.onpopstate;
+ _window.onpopstate = function() {
+ var currentHref = self._location.href;
+ self._captureUrlChange(self._lastHref, currentHref);
+
+ if (oldOnPopState) {
+ return oldOnPopState.apply(this, arguments);
+ }
+ };
+
+ var historyReplacementFunction = function(origHistFunction) {
+ // note history.pushState.length is 0; intentionally not declaring
+ // params to preserve 0 arity
+ return function(/* state, title, url */) {
+ var url = arguments.length > 2 ? arguments[2] : undefined;
+
+ // url argument is optional
+ if (url) {
+ // coerce to string (this is what pushState does)
+ self._captureUrlChange(self._lastHref, url + '');
+ }
+
+ return origHistFunction.apply(this, arguments);
+ };
+ };
+
+ fill(_window.history, 'pushState', historyReplacementFunction, wrappedBuiltIns);
+ fill(_window.history, 'replaceState', historyReplacementFunction, wrappedBuiltIns);
+ }
+
+ if (autoBreadcrumbs.console && 'console' in _window && console.log) {
+ // console
+ var consoleMethodCallback = function(msg, data) {
+ self.captureBreadcrumb({
+ message: msg,
+ level: data.level,
+ category: 'console'
+ });
+ };
+
+ each(['debug', 'info', 'warn', 'error', 'log'], function(_, level) {
+ wrapConsoleMethod(console, level, consoleMethodCallback);
+ });
+ }
+ },
+
+ _restoreBuiltIns: function() {
+ // restore any wrapped builtins
+ var builtin;
+ while (this._wrappedBuiltIns.length) {
+ builtin = this._wrappedBuiltIns.shift();
+
+ var obj = builtin[0],
+ name = builtin[1],
+ orig = builtin[2];
+
+ obj[name] = orig;
+ }
+ },
+
+ _restoreConsole: function() {
+ // eslint-disable-next-line guard-for-in
+ for (var method in this._originalConsoleMethods) {
+ this._originalConsole[method] = this._originalConsoleMethods[method];
+ }
+ },
+
+ _drainPlugins: function() {
+ var self = this;
+
+ // FIX ME TODO
+ each(this._plugins, function(_, plugin) {
+ var installer = plugin[0];
+ var args = plugin[1];
+ installer.apply(self, [self].concat(args));
+ });
+ },
+
+ _parseDSN: function(str) {
+ var m = dsnPattern.exec(str),
+ dsn = {},
+ i = 7;
+
+ try {
+ while (i--) dsn[dsnKeys[i]] = m[i] || '';
+ } catch (e) {
+ throw new RavenConfigError('Invalid DSN: ' + str);
+ }
+
+ if (dsn.pass && !this._globalOptions.allowSecretKey) {
+ throw new RavenConfigError(
+ 'Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key'
+ );
+ }
+
+ return dsn;
+ },
+
+ _getGlobalServer: function(uri) {
+ // assemble the endpoint from the uri pieces
+ var globalServer = '//' + uri.host + (uri.port ? ':' + uri.port : '');
+
+ if (uri.protocol) {
+ globalServer = uri.protocol + ':' + globalServer;
+ }
+ return globalServer;
+ },
+
+ _handleOnErrorStackInfo: function() {
+ // if we are intentionally ignoring errors via onerror, bail out
+ if (!this._ignoreOnError) {
+ this._handleStackInfo.apply(this, arguments);
+ }
+ },
+
+ _handleStackInfo: function(stackInfo, options) {
+ var frames = this._prepareFrames(stackInfo, options);
+
+ this._triggerEvent('handle', {
+ stackInfo: stackInfo,
+ options: options
+ });
+
+ this._processException(
+ stackInfo.name,
+ stackInfo.message,
+ stackInfo.url,
+ stackInfo.lineno,
+ frames,
+ options
+ );
+ },
+
+ _prepareFrames: function(stackInfo, options) {
+ var self = this;
+ var frames = [];
+ if (stackInfo.stack && stackInfo.stack.length) {
+ each(stackInfo.stack, function(i, stack) {
+ var frame = self._normalizeFrame(stack, stackInfo.url);
+ if (frame) {
+ frames.push(frame);
+ }
+ });
+
+ // e.g. frames captured via captureMessage throw
+ if (options && options.trimHeadFrames) {
+ for (var j = 0; j < options.trimHeadFrames && j < frames.length; j++) {
+ frames[j].in_app = false;
+ }
+ }
+ }
+ frames = frames.slice(0, this._globalOptions.stackTraceLimit);
+ return frames;
+ },
+
+ _normalizeFrame: function(frame, stackInfoUrl) {
+ // normalize the frames data
+ var normalized = {
+ filename: frame.url,
+ lineno: frame.line,
+ colno: frame.column,
+ function: frame.func || '?'
+ };
+
+ // Case when we don't have any information about the error
+ // E.g. throwing a string or raw object, instead of an `Error` in Firefox
+ // Generating synthetic error doesn't add any value here
+ //
+ // We should probably somehow let a user know that they should fix their code
+ if (!frame.url) {
+ normalized.filename = stackInfoUrl; // fallback to whole stacks url from onerror handler
+ }
+
+ normalized.in_app = !// determine if an exception came from outside of our app
+ // first we check the global includePaths list.
+ (
+ (!!this._globalOptions.includePaths.test &&
+ !this._globalOptions.includePaths.test(normalized.filename)) ||
+ // Now we check for fun, if the function name is Raven or TraceKit
+ /(Raven|TraceKit)\./.test(normalized['function']) ||
+ // finally, we do a last ditch effort and check for raven.min.js
+ /raven\.(min\.)?js$/.test(normalized.filename)
+ );
+
+ return normalized;
+ },
+
+ _processException: function(type, message, fileurl, lineno, frames, options) {
+ var prefixedMessage = (type ? type + ': ' : '') + (message || '');
+ if (
+ !!this._globalOptions.ignoreErrors.test &&
+ (this._globalOptions.ignoreErrors.test(message) ||
+ this._globalOptions.ignoreErrors.test(prefixedMessage))
+ ) {
+ return;
+ }
+
+ var stacktrace;
+
+ if (frames && frames.length) {
+ fileurl = frames[0].filename || fileurl;
+ // Sentry expects frames oldest to newest
+ // and JS sends them as newest to oldest
+ frames.reverse();
+ stacktrace = {frames: frames};
+ } else if (fileurl) {
+ stacktrace = {
+ frames: [
+ {
+ filename: fileurl,
+ lineno: lineno,
+ in_app: true
+ }
+ ]
+ };
+ }
+
+ if (
+ !!this._globalOptions.ignoreUrls.test &&
+ this._globalOptions.ignoreUrls.test(fileurl)
+ ) {
+ return;
+ }
+
+ if (
+ !!this._globalOptions.whitelistUrls.test &&
+ !this._globalOptions.whitelistUrls.test(fileurl)
+ ) {
+ return;
+ }
+
+ var data = objectMerge(
+ {
+ // sentry.interfaces.Exception
+ exception: {
+ values: [
+ {
+ type: type,
+ value: message,
+ stacktrace: stacktrace
+ }
+ ]
+ },
+ transaction: fileurl
+ },
+ options
+ );
+
+ // Fire away!
+ this._send(data);
+ },
+
+ _trimPacket: function(data) {
+ // For now, we only want to truncate the two different messages
+ // but this could/should be expanded to just trim everything
+ var max = this._globalOptions.maxMessageLength;
+ if (data.message) {
+ data.message = truncate(data.message, max);
+ }
+ if (data.exception) {
+ var exception = data.exception.values[0];
+ exception.value = truncate(exception.value, max);
+ }
+
+ var request = data.request;
+ if (request) {
+ if (request.url) {
+ request.url = truncate(request.url, this._globalOptions.maxUrlLength);
+ }
+ if (request.Referer) {
+ request.Referer = truncate(request.Referer, this._globalOptions.maxUrlLength);
+ }
+ }
+
+ if (data.breadcrumbs && data.breadcrumbs.values)
+ this._trimBreadcrumbs(data.breadcrumbs);
+
+ return data;
+ },
+
+ /**
+ * Truncate breadcrumb values (right now just URLs)
+ */
+ _trimBreadcrumbs: function(breadcrumbs) {
+ // known breadcrumb properties with urls
+ // TODO: also consider arbitrary prop values that start with (https?)?://
+ var urlProps = ['to', 'from', 'url'],
+ urlProp,
+ crumb,
+ data;
+
+ for (var i = 0; i < breadcrumbs.values.length; ++i) {
+ crumb = breadcrumbs.values[i];
+ if (
+ !crumb.hasOwnProperty('data') ||
+ !isObject(crumb.data) ||
+ objectFrozen(crumb.data)
+ )
+ continue;
+
+ data = objectMerge({}, crumb.data);
+ for (var j = 0; j < urlProps.length; ++j) {
+ urlProp = urlProps[j];
+ if (data.hasOwnProperty(urlProp) && data[urlProp]) {
+ data[urlProp] = truncate(data[urlProp], this._globalOptions.maxUrlLength);
+ }
+ }
+ breadcrumbs.values[i].data = data;
+ }
+ },
+
+ _getHttpData: function() {
+ if (!this._hasNavigator && !this._hasDocument) return;
+ var httpData = {};
+
+ if (this._hasNavigator && _navigator.userAgent) {
+ httpData.headers = {
+ 'User-Agent': _navigator.userAgent
+ };
+ }
+
+ // Check in `window` instead of `document`, as we may be in ServiceWorker environment
+ if (_window.location && _window.location.href) {
+ httpData.url = _window.location.href;
+ }
+
+ if (this._hasDocument && _document.referrer) {
+ if (!httpData.headers) httpData.headers = {};
+ httpData.headers.Referer = _document.referrer;
+ }
+
+ return httpData;
+ },
+
+ _resetBackoff: function() {
+ this._backoffDuration = 0;
+ this._backoffStart = null;
+ },
+
+ _shouldBackoff: function() {
+ return this._backoffDuration && now() - this._backoffStart < this._backoffDuration;
+ },
+
+ /**
+ * Returns true if the in-process data payload matches the signature
+ * of the previously-sent data
+ *
+ * NOTE: This has to be done at this level because TraceKit can generate
+ * data from window.onerror WITHOUT an exception object (IE8, IE9,
+ * other old browsers). This can take the form of an "exception"
+ * data object with a single frame (derived from the onerror args).
+ */
+ _isRepeatData: function(current) {
+ var last = this._lastData;
+
+ if (
+ !last ||
+ current.message !== last.message || // defined for captureMessage
+ current.transaction !== last.transaction // defined for captureException/onerror
+ )
+ return false;
+
+ // Stacktrace interface (i.e. from captureMessage)
+ if (current.stacktrace || last.stacktrace) {
+ return isSameStacktrace(current.stacktrace, last.stacktrace);
+ } else if (current.exception || last.exception) {
+ // Exception interface (i.e. from captureException/onerror)
+ return isSameException(current.exception, last.exception);
+ }
+
+ return true;
+ },
+
+ _setBackoffState: function(request) {
+ // If we are already in a backoff state, don't change anything
+ if (this._shouldBackoff()) {
+ return;
+ }
+
+ var status = request.status;
+
+ // 400 - project_id doesn't exist or some other fatal
+ // 401 - invalid/revoked dsn
+ // 429 - too many requests
+ if (!(status === 400 || status === 401 || status === 429)) return;
+
+ var retry;
+ try {
+ // If Retry-After is not in Access-Control-Expose-Headers, most
+ // browsers will throw an exception trying to access it
+ if (supportsFetch()) {
+ retry = request.headers.get('Retry-After');
+ } else {
+ retry = request.getResponseHeader('Retry-After');
+ }
+
+ // Retry-After is returned in seconds
+ retry = parseInt(retry, 10) * 1000;
+ } catch (e) {
+ /* eslint no-empty:0 */
+ }
+
+ this._backoffDuration = retry
+ ? // If Sentry server returned a Retry-After value, use it
+ retry
+ : // Otherwise, double the last backoff duration (starts at 1 sec)
+ this._backoffDuration * 2 || 1000;
+
+ this._backoffStart = now();
+ },
+
+ _send: function(data) {
+ var globalOptions = this._globalOptions;
+
+ var baseData = {
+ project: this._globalProject,
+ logger: globalOptions.logger,
+ platform: 'javascript'
+ },
+ httpData = this._getHttpData();
+
+ if (httpData) {
+ baseData.request = httpData;
+ }
+
+ // HACK: delete `trimHeadFrames` to prevent from appearing in outbound payload
+ if (data.trimHeadFrames) delete data.trimHeadFrames;
+
+ data = objectMerge(baseData, data);
+
+ // Merge in the tags and extra separately since objectMerge doesn't handle a deep merge
+ data.tags = objectMerge(objectMerge({}, this._globalContext.tags), data.tags);
+ data.extra = objectMerge(objectMerge({}, this._globalContext.extra), data.extra);
+
+ // Send along our own collected metadata with extra
+ data.extra['session:duration'] = now() - this._startTime;
+
+ if (this._breadcrumbs && this._breadcrumbs.length > 0) {
+ // intentionally make shallow copy so that additions
+ // to breadcrumbs aren't accidentally sent in this request
+ data.breadcrumbs = {
+ values: [].slice.call(this._breadcrumbs, 0)
+ };
+ }
+
+ if (this._globalContext.user) {
+ // sentry.interfaces.User
+ data.user = this._globalContext.user;
+ }
+
+ // Include the environment if it's defined in globalOptions
+ if (globalOptions.environment) data.environment = globalOptions.environment;
+
+ // Include the release if it's defined in globalOptions
+ if (globalOptions.release) data.release = globalOptions.release;
+
+ // Include server_name if it's defined in globalOptions
+ if (globalOptions.serverName) data.server_name = globalOptions.serverName;
+
+ data = this._sanitizeData(data);
+
+ // Cleanup empty properties before sending them to the server
+ Object.keys(data).forEach(function(key) {
+ if (data[key] == null || data[key] === '' || isEmptyObject(data[key])) {
+ delete data[key];
+ }
+ });
+
+ if (isFunction(globalOptions.dataCallback)) {
+ data = globalOptions.dataCallback(data) || data;
+ }
+
+ // Why??????????
+ if (!data || isEmptyObject(data)) {
+ return;
+ }
+
+ // Check if the request should be filtered or not
+ if (
+ isFunction(globalOptions.shouldSendCallback) &&
+ !globalOptions.shouldSendCallback(data)
+ ) {
+ return;
+ }
+
+ // Backoff state: Sentry server previously responded w/ an error (e.g. 429 - too many requests),
+ // so drop requests until "cool-off" period has elapsed.
+ if (this._shouldBackoff()) {
+ this._logDebug('warn', 'Raven dropped error due to backoff: ', data);
+ return;
+ }
+
+ if (typeof globalOptions.sampleRate === 'number') {
+ if (Math.random() < globalOptions.sampleRate) {
+ this._sendProcessedPayload(data);
+ }
+ } else {
+ this._sendProcessedPayload(data);
+ }
+ },
+
+ _sanitizeData: function(data) {
+ return sanitize(data, this._globalOptions.sanitizeKeys);
+ },
+
+ _getUuid: function() {
+ return uuid4();
+ },
+
+ _sendProcessedPayload: function(data, callback) {
+ var self = this;
+ var globalOptions = this._globalOptions;
+
+ if (!this.isSetup()) return;
+
+ // Try and clean up the packet before sending by truncating long values
+ data = this._trimPacket(data);
+
+ // ideally duplicate error testing should occur *before* dataCallback/shouldSendCallback,
+ // but this would require copying an un-truncated copy of the data packet, which can be
+ // arbitrarily deep (extra_data) -- could be worthwhile? will revisit
+ if (!this._globalOptions.allowDuplicates && this._isRepeatData(data)) {
+ this._logDebug('warn', 'Raven dropped repeat event: ', data);
+ return;
+ }
+
+ // Send along an event_id if not explicitly passed.
+ // This event_id can be used to reference the error within Sentry itself.
+ // Set lastEventId after we know the error should actually be sent
+ this._lastEventId = data.event_id || (data.event_id = this._getUuid());
+
+ // Store outbound payload after trim
+ this._lastData = data;
+
+ this._logDebug('debug', 'Raven about to send:', data);
+
+ var auth = {
+ sentry_version: '7',
+ sentry_client: 'raven-js/' + this.VERSION,
+ sentry_key: this._globalKey
+ };
+
+ if (this._globalSecret) {
+ auth.sentry_secret = this._globalSecret;
+ }
+
+ var exception = data.exception && data.exception.values[0];
+
+ // only capture 'sentry' breadcrumb is autoBreadcrumbs is truthy
+ if (
+ this._globalOptions.autoBreadcrumbs &&
+ this._globalOptions.autoBreadcrumbs.sentry
+ ) {
+ this.captureBreadcrumb({
+ category: 'sentry',
+ message: exception
+ ? (exception.type ? exception.type + ': ' : '') + exception.value
+ : data.message,
+ event_id: data.event_id,
+ level: data.level || 'error' // presume error unless specified
+ });
+ }
+
+ var url = this._globalEndpoint;
+ (globalOptions.transport || this._makeRequest).call(this, {
+ url: url,
+ auth: auth,
+ data: data,
+ options: globalOptions,
+ onSuccess: function success() {
+ self._resetBackoff();
+
+ self._triggerEvent('success', {
+ data: data,
+ src: url
+ });
+ callback && callback();
+ },
+ onError: function failure(error) {
+ self._logDebug('error', 'Raven transport failed to send: ', error);
+
+ if (error.request) {
+ self._setBackoffState(error.request);
+ }
+
+ self._triggerEvent('failure', {
+ data: data,
+ src: url
+ });
+ error = error || new Error('Raven send failed (no additional details provided)');
+ callback && callback(error);
+ }
+ });
+ },
+
+ _makeRequest: function(opts) {
+ // Auth is intentionally sent as part of query string (NOT as custom HTTP header) to avoid preflight CORS requests
+ var url = opts.url + '?' + urlencode(opts.auth);
+
+ var evaluatedHeaders = null;
+ var evaluatedFetchParameters = {};
+
+ if (opts.options.headers) {
+ evaluatedHeaders = this._evaluateHash(opts.options.headers);
+ }
+
+ if (opts.options.fetchParameters) {
+ evaluatedFetchParameters = this._evaluateHash(opts.options.fetchParameters);
+ }
+
+ if (supportsFetch()) {
+ evaluatedFetchParameters.body = stringify(opts.data);
+
+ var defaultFetchOptions = objectMerge({}, this._fetchDefaults);
+ var fetchOptions = objectMerge(defaultFetchOptions, evaluatedFetchParameters);
+
+ if (evaluatedHeaders) {
+ fetchOptions.headers = evaluatedHeaders;
+ }
+
+ return _window
+ .fetch(url, fetchOptions)
+ .then(function(response) {
+ if (response.ok) {
+ opts.onSuccess && opts.onSuccess();
+ } else {
+ var error = new Error('Sentry error code: ' + response.status);
+ // It's called request only to keep compatibility with XHR interface
+ // and not add more redundant checks in setBackoffState method
+ error.request = response;
+ opts.onError && opts.onError(error);
+ }
+ })
+ ['catch'](function() {
+ opts.onError &&
+ opts.onError(new Error('Sentry error code: network unavailable'));
+ });
+ }
+
+ var request = _window.XMLHttpRequest && new _window.XMLHttpRequest();
+ if (!request) return;
+
+ // if browser doesn't support CORS (e.g. IE7), we are out of luck
+ var hasCORS = 'withCredentials' in request || typeof XDomainRequest !== 'undefined';
+
+ if (!hasCORS) return;
+
+ if ('withCredentials' in request) {
+ request.onreadystatechange = function() {
+ if (request.readyState !== 4) {
+ return;
+ } else if (request.status === 200) {
+ opts.onSuccess && opts.onSuccess();
+ } else if (opts.onError) {
+ var err = new Error('Sentry error code: ' + request.status);
+ err.request = request;
+ opts.onError(err);
+ }
+ };
+ } else {
+ request = new XDomainRequest();
+ // xdomainrequest cannot go http -> https (or vice versa),
+ // so always use protocol relative
+ url = url.replace(/^https?:/, '');
+
+ // onreadystatechange not supported by XDomainRequest
+ if (opts.onSuccess) {
+ request.onload = opts.onSuccess;
+ }
+ if (opts.onError) {
+ request.onerror = function() {
+ var err = new Error('Sentry error code: XDomainRequest');
+ err.request = request;
+ opts.onError(err);
+ };
+ }
+ }
+
+ request.open('POST', url);
+
+ if (evaluatedHeaders) {
+ each(evaluatedHeaders, function(key, value) {
+ request.setRequestHeader(key, value);
+ });
+ }
+
+ request.send(stringify(opts.data));
+ },
+
+ _evaluateHash: function(hash) {
+ var evaluated = {};
+
+ for (var key in hash) {
+ if (hash.hasOwnProperty(key)) {
+ var value = hash[key];
+ evaluated[key] = typeof value === 'function' ? value() : value;
+ }
+ }
+
+ return evaluated;
+ },
+
+ _logDebug: function(level) {
+ // We allow `Raven.debug` and `Raven.config(DSN, { debug: true })` to not make backward incompatible API change
+ if (
+ this._originalConsoleMethods[level] &&
+ (this.debug || this._globalOptions.debug)
+ ) {
+ // In IE<10 console methods do not have their own 'apply' method
+ Function.prototype.apply.call(
+ this._originalConsoleMethods[level],
+ this._originalConsole,
+ [].slice.call(arguments, 1)
+ );
+ }
+ },
+
+ _mergeContext: function(key, context) {
+ if (isUndefined(context)) {
+ delete this._globalContext[key];
+ } else {
+ this._globalContext[key] = objectMerge(this._globalContext[key] || {}, context);
+ }
+ }
+};
+
+// Deprecations
+Raven.prototype.setUser = Raven.prototype.setUserContext;
+Raven.prototype.setReleaseContext = Raven.prototype.setRelease;
+
+module.exports = Raven;
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"10":10,"11":11,"12":12,"5":5,"6":6,"9":9}],8:[function(_dereq_,module,exports){
+(function (global){
+/**
+ * Enforces a single instance of the Raven client, and the
+ * main entry point for Raven. If you are a consumer of the
+ * Raven library, you SHOULD load this file (vs raven.js).
+ **/
+
+var RavenConstructor = _dereq_(7);
+
+// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)
+var _window =
+ typeof window !== 'undefined'
+ ? window
+ : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
+var _Raven = _window.Raven;
+
+var Raven = new RavenConstructor();
+
+/*
+ * Allow multiple versions of Raven to be installed.
+ * Strip Raven from the global context and returns the instance.
+ *
+ * @return {Raven}
+ */
+Raven.noConflict = function() {
+ _window.Raven = _Raven;
+ return Raven;
+};
+
+Raven.afterLoad();
+
+module.exports = Raven;
+
+/**
+ * DISCLAIMER:
+ *
+ * Expose `Client` constructor for cases where user want to track multiple "sub-applications" in one larger app.
+ * It's not meant to be used by a wide audience, so pleaaase make sure that you know what you're doing before using it.
+ * Accidentally calling `install` multiple times, may result in an unexpected behavior that's very hard to debug.
+ *
+ * It's called `Client' to be in-line with Raven Node implementation.
+ *
+ * HOWTO:
+ *
+ * import Raven from 'raven-js';
+ *
+ * const someAppReporter = new Raven.Client();
+ * const someOtherAppReporter = new Raven.Client();
+ *
+ * someAppReporter.config('__DSN__', {
+ * ...config goes here
+ * });
+ *
+ * someOtherAppReporter.config('__OTHER_DSN__', {
+ * ...config goes here
+ * });
+ *
+ * someAppReporter.captureMessage(...);
+ * someAppReporter.captureException(...);
+ * someAppReporter.captureBreadcrumb(...);
+ *
+ * someOtherAppReporter.captureMessage(...);
+ * someOtherAppReporter.captureException(...);
+ * someOtherAppReporter.captureBreadcrumb(...);
+ *
+ * It should "just work".
+ */
+module.exports.Client = RavenConstructor;
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"7":7}],9:[function(_dereq_,module,exports){
+(function (global){
+var stringify = _dereq_(11);
+
+var _window =
+ typeof window !== 'undefined'
+ ? window
+ : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
+
+function isObject(what) {
+ return typeof what === 'object' && what !== null;
+}
+
+// Yanked from https://git.io/vS8DV re-used under CC0
+// with some tiny modifications
+function isError(value) {
+ switch (Object.prototype.toString.call(value)) {
+ case '[object Error]':
+ return true;
+ case '[object Exception]':
+ return true;
+ case '[object DOMException]':
+ return true;
+ default:
+ return value instanceof Error;
+ }
+}
+
+function isErrorEvent(value) {
+ return Object.prototype.toString.call(value) === '[object ErrorEvent]';
+}
+
+function isDOMError(value) {
+ return Object.prototype.toString.call(value) === '[object DOMError]';
+}
+
+function isDOMException(value) {
+ return Object.prototype.toString.call(value) === '[object DOMException]';
+}
+
+function isUndefined(what) {
+ return what === void 0;
+}
+
+function isFunction(what) {
+ return typeof what === 'function';
+}
+
+function isPlainObject(what) {
+ return Object.prototype.toString.call(what) === '[object Object]';
+}
+
+function isString(what) {
+ return Object.prototype.toString.call(what) === '[object String]';
+}
+
+function isArray(what) {
+ return Object.prototype.toString.call(what) === '[object Array]';
+}
+
+function isEmptyObject(what) {
+ if (!isPlainObject(what)) return false;
+
+ for (var _ in what) {
+ if (what.hasOwnProperty(_)) {
+ return false;
+ }
+ }
+ return true;
+}
+
+function supportsErrorEvent() {
+ try {
+ new ErrorEvent(''); // eslint-disable-line no-new
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+function supportsDOMError() {
+ try {
+ new DOMError(''); // eslint-disable-line no-new
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+function supportsDOMException() {
+ try {
+ new DOMException(''); // eslint-disable-line no-new
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+function supportsFetch() {
+ if (!('fetch' in _window)) return false;
+
+ try {
+ new Headers(); // eslint-disable-line no-new
+ new Request(''); // eslint-disable-line no-new
+ new Response(); // eslint-disable-line no-new
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+// Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default
+// https://caniuse.com/#feat=referrer-policy
+// It doesn't. And it throw exception instead of ignoring this parameter...
+// REF: https://github.com/getsentry/raven-js/issues/1233
+function supportsReferrerPolicy() {
+ if (!supportsFetch()) return false;
+
+ try {
+ // eslint-disable-next-line no-new
+ new Request('pickleRick', {
+ referrerPolicy: 'origin'
+ });
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+function supportsPromiseRejectionEvent() {
+ return typeof PromiseRejectionEvent === 'function';
+}
+
+function wrappedCallback(callback) {
+ function dataCallback(data, original) {
+ var normalizedData = callback(data) || data;
+ if (original) {
+ return original(normalizedData) || normalizedData;
+ }
+ return normalizedData;
+ }
+
+ return dataCallback;
+}
+
+function each(obj, callback) {
+ var i, j;
+
+ if (isUndefined(obj.length)) {
+ for (i in obj) {
+ if (hasKey(obj, i)) {
+ callback.call(null, i, obj[i]);
+ }
+ }
+ } else {
+ j = obj.length;
+ if (j) {
+ for (i = 0; i < j; i++) {
+ callback.call(null, i, obj[i]);
+ }
+ }
+ }
+}
+
+function objectMerge(obj1, obj2) {
+ if (!obj2) {
+ return obj1;
+ }
+ each(obj2, function(key, value) {
+ obj1[key] = value;
+ });
+ return obj1;
+}
+
+/**
+ * This function is only used for react-native.
+ * react-native freezes object that have already been sent over the
+ * js bridge. We need this function in order to check if the object is frozen.
+ * So it's ok that objectFrozen returns false if Object.isFrozen is not
+ * supported because it's not relevant for other "platforms". See related issue:
+ * https://github.com/getsentry/react-native-sentry/issues/57
+ */
+function objectFrozen(obj) {
+ if (!Object.isFrozen) {
+ return false;
+ }
+ return Object.isFrozen(obj);
+}
+
+function truncate(str, max) {
+ if (typeof max !== 'number') {
+ throw new Error('2nd argument to `truncate` function should be a number');
+ }
+ if (typeof str !== 'string' || max === 0) {
+ return str;
+ }
+ return str.length <= max ? str : str.substr(0, max) + '\u2026';
+}
+
+/**
+ * hasKey, a better form of hasOwnProperty
+ * Example: hasKey(MainHostObject, property) === true/false
+ *
+ * @param {Object} host object to check property
+ * @param {string} key to check
+ */
+function hasKey(object, key) {
+ return Object.prototype.hasOwnProperty.call(object, key);
+}
+
+function joinRegExp(patterns) {
+ // Combine an array of regular expressions and strings into one large regexp
+ // Be mad.
+ var sources = [],
+ i = 0,
+ len = patterns.length,
+ pattern;
+
+ for (; i < len; i++) {
+ pattern = patterns[i];
+ if (isString(pattern)) {
+ // If it's a string, we need to escape it
+ // Taken from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
+ sources.push(pattern.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, '\\$1'));
+ } else if (pattern && pattern.source) {
+ // If it's a regexp already, we want to extract the source
+ sources.push(pattern.source);
+ }
+ // Intentionally skip other cases
+ }
+ return new RegExp(sources.join('|'), 'i');
+}
+
+function urlencode(o) {
+ var pairs = [];
+ each(o, function(key, value) {
+ pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));
+ });
+ return pairs.join('&');
+}
+
+// borrowed from https://tools.ietf.org/html/rfc3986#appendix-B
+// intentionally using regex and not href parsing trick because React Native and other
+// environments where DOM might not be available
+function parseUrl(url) {
+ if (typeof url !== 'string') return {};
+ var match = url.match(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/);
+
+ // coerce to undefined values to empty string so we don't get 'undefined'
+ var query = match[6] || '';
+ var fragment = match[8] || '';
+ return {
+ protocol: match[2],
+ host: match[4],
+ path: match[5],
+ relative: match[5] + query + fragment // everything minus origin
+ };
+}
+function uuid4() {
+ var crypto = _window.crypto || _window.msCrypto;
+
+ if (!isUndefined(crypto) && crypto.getRandomValues) {
+ // Use window.crypto API if available
+ // eslint-disable-next-line no-undef
+ var arr = new Uint16Array(8);
+ crypto.getRandomValues(arr);
+
+ // set 4 in byte 7
+ arr[3] = (arr[3] & 0xfff) | 0x4000;
+ // set 2 most significant bits of byte 9 to '10'
+ arr[4] = (arr[4] & 0x3fff) | 0x8000;
+
+ var pad = function(num) {
+ var v = num.toString(16);
+ while (v.length < 4) {
+ v = '0' + v;
+ }
+ return v;
+ };
+
+ return (
+ pad(arr[0]) +
+ pad(arr[1]) +
+ pad(arr[2]) +
+ pad(arr[3]) +
+ pad(arr[4]) +
+ pad(arr[5]) +
+ pad(arr[6]) +
+ pad(arr[7])
+ );
+ } else {
+ // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523
+ return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
+ var r = (Math.random() * 16) | 0,
+ v = c === 'x' ? r : (r & 0x3) | 0x8;
+ return v.toString(16);
+ });
+ }
+}
+
+/**
+ * Given a child DOM element, returns a query-selector statement describing that
+ * and its ancestors
+ * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]
+ * @param elem
+ * @returns {string}
+ */
+function htmlTreeAsString(elem) {
+ /* eslint no-extra-parens:0*/
+ var MAX_TRAVERSE_HEIGHT = 5,
+ MAX_OUTPUT_LEN = 80,
+ out = [],
+ height = 0,
+ len = 0,
+ separator = ' > ',
+ sepLength = separator.length,
+ nextStr;
+
+ while (elem && height++ < MAX_TRAVERSE_HEIGHT) {
+ nextStr = htmlElementAsString(elem);
+ // bail out if
+ // - nextStr is the 'html' element
+ // - the length of the string that would be created exceeds MAX_OUTPUT_LEN
+ // (ignore this limit if we are on the first iteration)
+ if (
+ nextStr === 'html' ||
+ (height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN)
+ ) {
+ break;
+ }
+
+ out.push(nextStr);
+
+ len += nextStr.length;
+ elem = elem.parentNode;
+ }
+
+ return out.reverse().join(separator);
+}
+
+/**
+ * Returns a simple, query-selector representation of a DOM element
+ * e.g. [HTMLElement] => input#foo.btn[name=baz]
+ * @param HTMLElement
+ * @returns {string}
+ */
+function htmlElementAsString(elem) {
+ var out = [],
+ className,
+ classes,
+ key,
+ attr,
+ i;
+
+ if (!elem || !elem.tagName) {
+ return '';
+ }
+
+ out.push(elem.tagName.toLowerCase());
+ if (elem.id) {
+ out.push('#' + elem.id);
+ }
+
+ className = elem.className;
+ if (className && isString(className)) {
+ classes = className.split(/\s+/);
+ for (i = 0; i < classes.length; i++) {
+ out.push('.' + classes[i]);
+ }
+ }
+ var attrWhitelist = ['type', 'name', 'title', 'alt'];
+ for (i = 0; i < attrWhitelist.length; i++) {
+ key = attrWhitelist[i];
+ attr = elem.getAttribute(key);
+ if (attr) {
+ out.push('[' + key + '="' + attr + '"]');
+ }
+ }
+ return out.join('');
+}
+
+/**
+ * Returns true if either a OR b is truthy, but not both
+ */
+function isOnlyOneTruthy(a, b) {
+ return !!(!!a ^ !!b);
+}
+
+/**
+ * Returns true if both parameters are undefined
+ */
+function isBothUndefined(a, b) {
+ return isUndefined(a) && isUndefined(b);
+}
+
+/**
+ * Returns true if the two input exception interfaces have the same content
+ */
+function isSameException(ex1, ex2) {
+ if (isOnlyOneTruthy(ex1, ex2)) return false;
+
+ ex1 = ex1.values[0];
+ ex2 = ex2.values[0];
+
+ if (ex1.type !== ex2.type || ex1.value !== ex2.value) return false;
+
+ // in case both stacktraces are undefined, we can't decide so default to false
+ if (isBothUndefined(ex1.stacktrace, ex2.stacktrace)) return false;
+
+ return isSameStacktrace(ex1.stacktrace, ex2.stacktrace);
+}
+
+/**
+ * Returns true if the two input stack trace interfaces have the same content
+ */
+function isSameStacktrace(stack1, stack2) {
+ if (isOnlyOneTruthy(stack1, stack2)) return false;
+
+ var frames1 = stack1.frames;
+ var frames2 = stack2.frames;
+
+ // Exit early if frame count differs
+ if (frames1.length !== frames2.length) return false;
+
+ // Iterate through every frame; bail out if anything differs
+ var a, b;
+ for (var i = 0; i < frames1.length; i++) {
+ a = frames1[i];
+ b = frames2[i];
+ if (
+ a.filename !== b.filename ||
+ a.lineno !== b.lineno ||
+ a.colno !== b.colno ||
+ a['function'] !== b['function']
+ )
+ return false;
+ }
+ return true;
+}
+
+/**
+ * Polyfill a method
+ * @param obj object e.g. `document`
+ * @param name method name present on object e.g. `addEventListener`
+ * @param replacement replacement function
+ * @param track {optional} record instrumentation to an array
+ */
+function fill(obj, name, replacement, track) {
+ if (obj == null) return;
+ var orig = obj[name];
+ obj[name] = replacement(orig);
+ obj[name].__raven__ = true;
+ obj[name].__orig__ = orig;
+ if (track) {
+ track.push([obj, name, orig]);
+ }
+}
+
+/**
+ * Join values in array
+ * @param input array of values to be joined together
+ * @param delimiter string to be placed in-between values
+ * @returns {string}
+ */
+function safeJoin(input, delimiter) {
+ if (!isArray(input)) return '';
+
+ var output = [];
+
+ for (var i = 0; i < input.length; i++) {
+ try {
+ output.push(String(input[i]));
+ } catch (e) {
+ output.push('[value cannot be serialized]');
+ }
+ }
+
+ return output.join(delimiter);
+}
+
+// Default Node.js REPL depth
+var MAX_SERIALIZE_EXCEPTION_DEPTH = 3;
+// 50kB, as 100kB is max payload size, so half sounds reasonable
+var MAX_SERIALIZE_EXCEPTION_SIZE = 50 * 1024;
+var MAX_SERIALIZE_KEYS_LENGTH = 40;
+
+function utf8Length(value) {
+ return ~-encodeURI(value).split(/%..|./).length;
+}
+
+function jsonSize(value) {
+ return utf8Length(JSON.stringify(value));
+}
+
+function serializeValue(value) {
+ if (typeof value === 'string') {
+ var maxLength = 40;
+ return truncate(value, maxLength);
+ } else if (
+ typeof value === 'number' ||
+ typeof value === 'boolean' ||
+ typeof value === 'undefined'
+ ) {
+ return value;
+ }
+
+ var type = Object.prototype.toString.call(value);
+
+ // Node.js REPL notation
+ if (type === '[object Object]') return '[Object]';
+ if (type === '[object Array]') return '[Array]';
+ if (type === '[object Function]')
+ return value.name ? '[Function: ' + value.name + ']' : '[Function]';
+
+ return value;
+}
+
+function serializeObject(value, depth) {
+ if (depth === 0) return serializeValue(value);
+
+ if (isPlainObject(value)) {
+ return Object.keys(value).reduce(function(acc, key) {
+ acc[key] = serializeObject(value[key], depth - 1);
+ return acc;
+ }, {});
+ } else if (Array.isArray(value)) {
+ return value.map(function(val) {
+ return serializeObject(val, depth - 1);
+ });
+ }
+
+ return serializeValue(value);
+}
+
+function serializeException(ex, depth, maxSize) {
+ if (!isPlainObject(ex)) return ex;
+
+ depth = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_DEPTH : depth;
+ maxSize = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_SIZE : maxSize;
+
+ var serialized = serializeObject(ex, depth);
+
+ if (jsonSize(stringify(serialized)) > maxSize) {
+ return serializeException(ex, depth - 1);
+ }
+
+ return serialized;
+}
+
+function serializeKeysForMessage(keys, maxLength) {
+ if (typeof keys === 'number' || typeof keys === 'string') return keys.toString();
+ if (!Array.isArray(keys)) return '';
+
+ keys = keys.filter(function(key) {
+ return typeof key === 'string';
+ });
+ if (keys.length === 0) return '[object has no keys]';
+
+ maxLength = typeof maxLength !== 'number' ? MAX_SERIALIZE_KEYS_LENGTH : maxLength;
+ if (keys[0].length >= maxLength) return keys[0];
+
+ for (var usedKeys = keys.length; usedKeys > 0; usedKeys--) {
+ var serialized = keys.slice(0, usedKeys).join(', ');
+ if (serialized.length > maxLength) continue;
+ if (usedKeys === keys.length) return serialized;
+ return serialized + '\u2026';
+ }
+
+ return '';
+}
+
+function sanitize(input, sanitizeKeys) {
+ if (!isArray(sanitizeKeys) || (isArray(sanitizeKeys) && sanitizeKeys.length === 0))
+ return input;
+
+ var sanitizeRegExp = joinRegExp(sanitizeKeys);
+ var sanitizeMask = '********';
+ var safeInput;
+
+ try {
+ safeInput = JSON.parse(stringify(input));
+ } catch (o_O) {
+ return input;
+ }
+
+ function sanitizeWorker(workerInput) {
+ if (isArray(workerInput)) {
+ return workerInput.map(function(val) {
+ return sanitizeWorker(val);
+ });
+ }
+
+ if (isPlainObject(workerInput)) {
+ return Object.keys(workerInput).reduce(function(acc, k) {
+ if (sanitizeRegExp.test(k)) {
+ acc[k] = sanitizeMask;
+ } else {
+ acc[k] = sanitizeWorker(workerInput[k]);
+ }
+ return acc;
+ }, {});
+ }
+
+ return workerInput;
+ }
+
+ return sanitizeWorker(safeInput);
+}
+
+module.exports = {
+ isObject: isObject,
+ isError: isError,
+ isErrorEvent: isErrorEvent,
+ isDOMError: isDOMError,
+ isDOMException: isDOMException,
+ isUndefined: isUndefined,
+ isFunction: isFunction,
+ isPlainObject: isPlainObject,
+ isString: isString,
+ isArray: isArray,
+ isEmptyObject: isEmptyObject,
+ supportsErrorEvent: supportsErrorEvent,
+ supportsDOMError: supportsDOMError,
+ supportsDOMException: supportsDOMException,
+ supportsFetch: supportsFetch,
+ supportsReferrerPolicy: supportsReferrerPolicy,
+ supportsPromiseRejectionEvent: supportsPromiseRejectionEvent,
+ wrappedCallback: wrappedCallback,
+ each: each,
+ objectMerge: objectMerge,
+ truncate: truncate,
+ objectFrozen: objectFrozen,
+ hasKey: hasKey,
+ joinRegExp: joinRegExp,
+ urlencode: urlencode,
+ uuid4: uuid4,
+ htmlTreeAsString: htmlTreeAsString,
+ htmlElementAsString: htmlElementAsString,
+ isSameException: isSameException,
+ isSameStacktrace: isSameStacktrace,
+ parseUrl: parseUrl,
+ fill: fill,
+ safeJoin: safeJoin,
+ serializeException: serializeException,
+ serializeKeysForMessage: serializeKeysForMessage,
+ sanitize: sanitize
+};
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"11":11}],10:[function(_dereq_,module,exports){
+(function (global){
+var utils = _dereq_(9);
+
+/*
+ TraceKit - Cross brower stack traces
+
+ This was originally forked from github.com/occ/TraceKit, but has since been
+ largely re-written and is now maintained as part of raven-js. Tests for
+ this are in test/vendor.
+
+ MIT license
+*/
+
+var TraceKit = {
+ collectWindowErrors: true,
+ debug: false
+};
+
+// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)
+var _window =
+ typeof window !== 'undefined'
+ ? window
+ : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
+
+// global reference to slice
+var _slice = [].slice;
+var UNKNOWN_FUNCTION = '?';
+
+// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types
+var ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;
+
+function getLocationHref() {
+ if (typeof document === 'undefined' || document.location == null) return '';
+ return document.location.href;
+}
+
+function getLocationOrigin() {
+ if (typeof document === 'undefined' || document.location == null) return '';
+
+ // Oh dear IE10...
+ if (!document.location.origin) {
+ document.location.origin =
+ document.location.protocol +
+ '//' +
+ document.location.hostname +
+ (document.location.port ? ':' + document.location.port : '');
+ }
+
+ return document.location.origin;
+}
+
+/**
+ * TraceKit.report: cross-browser processing of unhandled exceptions
+ *
+ * Syntax:
+ * TraceKit.report.subscribe(function(stackInfo) { ... })
+ * TraceKit.report.unsubscribe(function(stackInfo) { ... })
+ * TraceKit.report(exception)
+ * try { ...code... } catch(ex) { TraceKit.report(ex); }
+ *
+ * Supports:
+ * - Firefox: full stack trace with line numbers, plus column number
+ * on top frame; column number is not guaranteed
+ * - Opera: full stack trace with line and column numbers
+ * - Chrome: full stack trace with line and column numbers
+ * - Safari: line and column number for the top frame only; some frames
+ * may be missing, and column number is not guaranteed
+ * - IE: line and column number for the top frame only; some frames
+ * may be missing, and column number is not guaranteed
+ *
+ * In theory, TraceKit should work on all of the following versions:
+ * - IE5.5+ (only 8.0 tested)
+ * - Firefox 0.9+ (only 3.5+ tested)
+ * - Opera 7+ (only 10.50 tested; versions 9 and earlier may require
+ * Exceptions Have Stacktrace to be enabled in opera:config)
+ * - Safari 3+ (only 4+ tested)
+ * - Chrome 1+ (only 5+ tested)
+ * - Konqueror 3.5+ (untested)
+ *
+ * Requires TraceKit.computeStackTrace.
+ *
+ * Tries to catch all unhandled exceptions and report them to the
+ * subscribed handlers. Please note that TraceKit.report will rethrow the
+ * exception. This is REQUIRED in order to get a useful stack trace in IE.
+ * If the exception does not reach the top of the browser, you will only
+ * get a stack trace from the point where TraceKit.report was called.
+ *
+ * Handlers receive a stackInfo object as described in the
+ * TraceKit.computeStackTrace docs.
+ */
+TraceKit.report = (function reportModuleWrapper() {
+ var handlers = [],
+ lastArgs = null,
+ lastException = null,
+ lastExceptionStack = null;
+
+ /**
+ * Add a crash handler.
+ * @param {Function} handler
+ */
+ function subscribe(handler) {
+ installGlobalHandler();
+ handlers.push(handler);
+ }
+
+ /**
+ * Remove a crash handler.
+ * @param {Function} handler
+ */
+ function unsubscribe(handler) {
+ for (var i = handlers.length - 1; i >= 0; --i) {
+ if (handlers[i] === handler) {
+ handlers.splice(i, 1);
+ }
+ }
+ }
+
+ /**
+ * Remove all crash handlers.
+ */
+ function unsubscribeAll() {
+ uninstallGlobalHandler();
+ handlers = [];
+ }
+
+ /**
+ * Dispatch stack information to all handlers.
+ * @param {Object.} stack
+ */
+ function notifyHandlers(stack, isWindowError) {
+ var exception = null;
+ if (isWindowError && !TraceKit.collectWindowErrors) {
+ return;
+ }
+ for (var i in handlers) {
+ if (handlers.hasOwnProperty(i)) {
+ try {
+ handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2)));
+ } catch (inner) {
+ exception = inner;
+ }
+ }
+ }
+
+ if (exception) {
+ throw exception;
+ }
+ }
+
+ var _oldOnerrorHandler, _onErrorHandlerInstalled;
+
+ /**
+ * Ensures all global unhandled exceptions are recorded.
+ * Supported by Gecko and IE.
+ * @param {string} msg Error message.
+ * @param {string} url URL of script that generated the exception.
+ * @param {(number|string)} lineNo The line number at which the error
+ * occurred.
+ * @param {?(number|string)} colNo The column number at which the error
+ * occurred.
+ * @param {?Error} ex The actual Error object.
+ */
+ function traceKitWindowOnError(msg, url, lineNo, colNo, ex) {
+ var stack = null;
+ // If 'ex' is ErrorEvent, get real Error from inside
+ var exception = utils.isErrorEvent(ex) ? ex.error : ex;
+ // If 'msg' is ErrorEvent, get real message from inside
+ var message = utils.isErrorEvent(msg) ? msg.message : msg;
+
+ if (lastExceptionStack) {
+ TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(
+ lastExceptionStack,
+ url,
+ lineNo,
+ message
+ );
+ processLastException();
+ } else if (exception && utils.isError(exception)) {
+ // non-string `exception` arg; attempt to extract stack trace
+
+ // New chrome and blink send along a real error object
+ // Let's just report that like a normal error.
+ // See: https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror
+ stack = TraceKit.computeStackTrace(exception);
+ notifyHandlers(stack, true);
+ } else {
+ var location = {
+ url: url,
+ line: lineNo,
+ column: colNo
+ };
+
+ var name = undefined;
+ var groups;
+
+ if ({}.toString.call(message) === '[object String]') {
+ var groups = message.match(ERROR_TYPES_RE);
+ if (groups) {
+ name = groups[1];
+ message = groups[2];
+ }
+ }
+
+ location.func = UNKNOWN_FUNCTION;
+
+ stack = {
+ name: name,
+ message: message,
+ url: getLocationHref(),
+ stack: [location]
+ };
+ notifyHandlers(stack, true);
+ }
+
+ if (_oldOnerrorHandler) {
+ return _oldOnerrorHandler.apply(this, arguments);
+ }
+
+ return false;
+ }
+
+ function installGlobalHandler() {
+ if (_onErrorHandlerInstalled) {
+ return;
+ }
+ _oldOnerrorHandler = _window.onerror;
+ _window.onerror = traceKitWindowOnError;
+ _onErrorHandlerInstalled = true;
+ }
+
+ function uninstallGlobalHandler() {
+ if (!_onErrorHandlerInstalled) {
+ return;
+ }
+ _window.onerror = _oldOnerrorHandler;
+ _onErrorHandlerInstalled = false;
+ _oldOnerrorHandler = undefined;
+ }
+
+ function processLastException() {
+ var _lastExceptionStack = lastExceptionStack,
+ _lastArgs = lastArgs;
+ lastArgs = null;
+ lastExceptionStack = null;
+ lastException = null;
+ notifyHandlers.apply(null, [_lastExceptionStack, false].concat(_lastArgs));
+ }
+
+ /**
+ * Reports an unhandled Error to TraceKit.
+ * @param {Error} ex
+ * @param {?boolean} rethrow If false, do not re-throw the exception.
+ * Only used for window.onerror to not cause an infinite loop of
+ * rethrowing.
+ */
+ function report(ex, rethrow) {
+ var args = _slice.call(arguments, 1);
+ if (lastExceptionStack) {
+ if (lastException === ex) {
+ return; // already caught by an inner catch block, ignore
+ } else {
+ processLastException();
+ }
+ }
+
+ var stack = TraceKit.computeStackTrace(ex);
+ lastExceptionStack = stack;
+ lastException = ex;
+ lastArgs = args;
+
+ // If the stack trace is incomplete, wait for 2 seconds for
+ // slow slow IE to see if onerror occurs or not before reporting
+ // this exception; otherwise, we will end up with an incomplete
+ // stack trace
+ setTimeout(function() {
+ if (lastException === ex) {
+ processLastException();
+ }
+ }, stack.incomplete ? 2000 : 0);
+
+ if (rethrow !== false) {
+ throw ex; // re-throw to propagate to the top level (and cause window.onerror)
+ }
+ }
+
+ report.subscribe = subscribe;
+ report.unsubscribe = unsubscribe;
+ report.uninstall = unsubscribeAll;
+ return report;
+})();
+
+/**
+ * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript
+ *
+ * Syntax:
+ * s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below)
+ * Returns:
+ * s.name - exception name
+ * s.message - exception message
+ * s.stack[i].url - JavaScript or HTML file URL
+ * s.stack[i].func - function name, or empty for anonymous functions (if guessing did not work)
+ * s.stack[i].args - arguments passed to the function, if known
+ * s.stack[i].line - line number, if known
+ * s.stack[i].column - column number, if known
+ *
+ * Supports:
+ * - Firefox: full stack trace with line numbers and unreliable column
+ * number on top frame
+ * - Opera 10: full stack trace with line and column numbers
+ * - Opera 9-: full stack trace with line numbers
+ * - Chrome: full stack trace with line and column numbers
+ * - Safari: line and column number for the topmost stacktrace element
+ * only
+ * - IE: no line numbers whatsoever
+ *
+ * Tries to guess names of anonymous functions by looking for assignments
+ * in the source code. In IE and Safari, we have to guess source file names
+ * by searching for function bodies inside all page scripts. This will not
+ * work for scripts that are loaded cross-domain.
+ * Here be dragons: some function names may be guessed incorrectly, and
+ * duplicate functions may be mismatched.
+ *
+ * TraceKit.computeStackTrace should only be used for tracing purposes.
+ * Logging of unhandled exceptions should be done with TraceKit.report,
+ * which builds on top of TraceKit.computeStackTrace and provides better
+ * IE support by utilizing the window.onerror event to retrieve information
+ * about the top of the stack.
+ *
+ * Note: In IE and Safari, no stack trace is recorded on the Error object,
+ * so computeStackTrace instead walks its *own* chain of callers.
+ * This means that:
+ * * in Safari, some methods may be missing from the stack trace;
+ * * in IE, the topmost function in the stack trace will always be the
+ * caller of computeStackTrace.
+ *
+ * This is okay for tracing (because you are likely to be calling
+ * computeStackTrace from the function you want to be the topmost element
+ * of the stack trace anyway), but not okay for logging unhandled
+ * exceptions (because your catch block will likely be far away from the
+ * inner function that actually caused the exception).
+ *
+ */
+TraceKit.computeStackTrace = (function computeStackTraceWrapper() {
+ // Contents of Exception in various browsers.
+ //
+ // SAFARI:
+ // ex.message = Can't find variable: qq
+ // ex.line = 59
+ // ex.sourceId = 580238192
+ // ex.sourceURL = http://...
+ // ex.expressionBeginOffset = 96
+ // ex.expressionCaretOffset = 98
+ // ex.expressionEndOffset = 98
+ // ex.name = ReferenceError
+ //
+ // FIREFOX:
+ // ex.message = qq is not defined
+ // ex.fileName = http://...
+ // ex.lineNumber = 59
+ // ex.columnNumber = 69
+ // ex.stack = ...stack trace... (see the example below)
+ // ex.name = ReferenceError
+ //
+ // CHROME:
+ // ex.message = qq is not defined
+ // ex.name = ReferenceError
+ // ex.type = not_defined
+ // ex.arguments = ['aa']
+ // ex.stack = ...stack trace...
+ //
+ // INTERNET EXPLORER:
+ // ex.message = ...
+ // ex.name = ReferenceError
+ //
+ // OPERA:
+ // ex.message = ...message... (see the example below)
+ // ex.name = ReferenceError
+ // ex.opera#sourceloc = 11 (pretty much useless, duplicates the info in ex.message)
+ // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'
+
+ /**
+ * Computes stack trace information from the stack property.
+ * Chrome and Gecko use this property.
+ * @param {Error} ex
+ * @return {?Object.} Stack trace information.
+ */
+ function computeStackTraceFromStackProp(ex) {
+ if (typeof ex.stack === 'undefined' || !ex.stack) return;
+
+ var chrome = /^\s*at (?:(.*?) ?\()?((?:file|https?|blob|chrome-extension|native|eval|webpack||[a-z]:|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i;
+ var winjs = /^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i;
+ // NOTE: blob urls are now supposed to always have an origin, therefore it's format
+ // which is `blob:http://url/path/with-some-uuid`, is matched by `blob.*?:\/` as well
+ var gecko = /^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\/.*?|\[native code\]|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i;
+ // Used to additionally parse URL/line/column from eval frames
+ var geckoEval = /(\S+) line (\d+)(?: > eval line \d+)* > eval/i;
+ var chromeEval = /\((\S*)(?::(\d+))(?::(\d+))\)/;
+ var lines = ex.stack.split('\n');
+ var stack = [];
+ var submatch;
+ var parts;
+ var element;
+ var reference = /^(.*) is undefined$/.exec(ex.message);
+
+ for (var i = 0, j = lines.length; i < j; ++i) {
+ if ((parts = chrome.exec(lines[i]))) {
+ var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line
+ var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line
+ if (isEval && (submatch = chromeEval.exec(parts[2]))) {
+ // throw out eval line/column and use top-most line/column number
+ parts[2] = submatch[1]; // url
+ parts[3] = submatch[2]; // line
+ parts[4] = submatch[3]; // column
+ }
+ element = {
+ url: !isNative ? parts[2] : null,
+ func: parts[1] || UNKNOWN_FUNCTION,
+ args: isNative ? [parts[2]] : [],
+ line: parts[3] ? +parts[3] : null,
+ column: parts[4] ? +parts[4] : null
+ };
+ } else if ((parts = winjs.exec(lines[i]))) {
+ element = {
+ url: parts[2],
+ func: parts[1] || UNKNOWN_FUNCTION,
+ args: [],
+ line: +parts[3],
+ column: parts[4] ? +parts[4] : null
+ };
+ } else if ((parts = gecko.exec(lines[i]))) {
+ var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;
+ if (isEval && (submatch = geckoEval.exec(parts[3]))) {
+ // throw out eval line/column and use top-most line number
+ parts[3] = submatch[1];
+ parts[4] = submatch[2];
+ parts[5] = null; // no column when eval
+ } else if (i === 0 && !parts[5] && typeof ex.columnNumber !== 'undefined') {
+ // FireFox uses this awesome columnNumber property for its top frame
+ // Also note, Firefox's column number is 0-based and everything else expects 1-based,
+ // so adding 1
+ // NOTE: this hack doesn't work if top-most frame is eval
+ stack[0].column = ex.columnNumber + 1;
+ }
+ element = {
+ url: parts[3],
+ func: parts[1] || UNKNOWN_FUNCTION,
+ args: parts[2] ? parts[2].split(',') : [],
+ line: parts[4] ? +parts[4] : null,
+ column: parts[5] ? +parts[5] : null
+ };
+ } else {
+ continue;
+ }
+
+ if (!element.func && element.line) {
+ element.func = UNKNOWN_FUNCTION;
+ }
+
+ if (element.url && element.url.substr(0, 5) === 'blob:') {
+ // Special case for handling JavaScript loaded into a blob.
+ // We use a synchronous AJAX request here as a blob is already in
+ // memory - it's not making a network request. This will generate a warning
+ // in the browser console, but there has already been an error so that's not
+ // that much of an issue.
+ var xhr = new XMLHttpRequest();
+ xhr.open('GET', element.url, false);
+ xhr.send(null);
+
+ // If we failed to download the source, skip this patch
+ if (xhr.status === 200) {
+ var source = xhr.responseText || '';
+
+ // We trim the source down to the last 300 characters as sourceMappingURL is always at the end of the file.
+ // Why 300? To be in line with: https://github.com/getsentry/sentry/blob/4af29e8f2350e20c28a6933354e4f42437b4ba42/src/sentry/lang/javascript/processor.py#L164-L175
+ source = source.slice(-300);
+
+ // Now we dig out the source map URL
+ var sourceMaps = source.match(/\/\/# sourceMappingURL=(.*)$/);
+
+ // If we don't find a source map comment or we find more than one, continue on to the next element.
+ if (sourceMaps) {
+ var sourceMapAddress = sourceMaps[1];
+
+ // Now we check to see if it's a relative URL.
+ // If it is, convert it to an absolute one.
+ if (sourceMapAddress.charAt(0) === '~') {
+ sourceMapAddress = getLocationOrigin() + sourceMapAddress.slice(1);
+ }
+
+ // Now we strip the '.map' off of the end of the URL and update the
+ // element so that Sentry can match the map to the blob.
+ element.url = sourceMapAddress.slice(0, -4);
+ }
+ }
+ }
+
+ stack.push(element);
+ }
+
+ if (!stack.length) {
+ return null;
+ }
+
+ return {
+ name: ex.name,
+ message: ex.message,
+ url: getLocationHref(),
+ stack: stack
+ };
+ }
+
+ /**
+ * Adds information about the first frame to incomplete stack traces.
+ * Safari and IE require this to get complete data on the first frame.
+ * @param {Object.} stackInfo Stack trace information from
+ * one of the compute* methods.
+ * @param {string} url The URL of the script that caused an error.
+ * @param {(number|string)} lineNo The line number of the script that
+ * caused an error.
+ * @param {string=} message The error generated by the browser, which
+ * hopefully contains the name of the object that caused the error.
+ * @return {boolean} Whether or not the stack information was
+ * augmented.
+ */
+ function augmentStackTraceWithInitialElement(stackInfo, url, lineNo, message) {
+ var initial = {
+ url: url,
+ line: lineNo
+ };
+
+ if (initial.url && initial.line) {
+ stackInfo.incomplete = false;
+
+ if (!initial.func) {
+ initial.func = UNKNOWN_FUNCTION;
+ }
+
+ if (stackInfo.stack.length > 0) {
+ if (stackInfo.stack[0].url === initial.url) {
+ if (stackInfo.stack[0].line === initial.line) {
+ return false; // already in stack trace
+ } else if (
+ !stackInfo.stack[0].line &&
+ stackInfo.stack[0].func === initial.func
+ ) {
+ stackInfo.stack[0].line = initial.line;
+ return false;
+ }
+ }
+ }
+
+ stackInfo.stack.unshift(initial);
+ stackInfo.partial = true;
+ return true;
+ } else {
+ stackInfo.incomplete = true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Computes stack trace information by walking the arguments.caller
+ * chain at the time the exception occurred. This will cause earlier
+ * frames to be missed but is the only way to get any stack trace in
+ * Safari and IE. The top frame is restored by
+ * {@link augmentStackTraceWithInitialElement}.
+ * @param {Error} ex
+ * @return {?Object.} Stack trace information.
+ */
+ function computeStackTraceByWalkingCallerChain(ex, depth) {
+ var functionName = /function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,
+ stack = [],
+ funcs = {},
+ recursion = false,
+ parts,
+ item,
+ source;
+
+ for (
+ var curr = computeStackTraceByWalkingCallerChain.caller;
+ curr && !recursion;
+ curr = curr.caller
+ ) {
+ if (curr === computeStackTrace || curr === TraceKit.report) {
+ // console.log('skipping internal function');
+ continue;
+ }
+
+ item = {
+ url: null,
+ func: UNKNOWN_FUNCTION,
+ line: null,
+ column: null
+ };
+
+ if (curr.name) {
+ item.func = curr.name;
+ } else if ((parts = functionName.exec(curr.toString()))) {
+ item.func = parts[1];
+ }
+
+ if (typeof item.func === 'undefined') {
+ try {
+ item.func = parts.input.substring(0, parts.input.indexOf('{'));
+ } catch (e) {}
+ }
+
+ if (funcs['' + curr]) {
+ recursion = true;
+ } else {
+ funcs['' + curr] = true;
+ }
+
+ stack.push(item);
+ }
+
+ if (depth) {
+ // console.log('depth is ' + depth);
+ // console.log('stack is ' + stack.length);
+ stack.splice(0, depth);
+ }
+
+ var result = {
+ name: ex.name,
+ message: ex.message,
+ url: getLocationHref(),
+ stack: stack
+ };
+ augmentStackTraceWithInitialElement(
+ result,
+ ex.sourceURL || ex.fileName,
+ ex.line || ex.lineNumber,
+ ex.message || ex.description
+ );
+ return result;
+ }
+
+ /**
+ * Computes a stack trace for an exception.
+ * @param {Error} ex
+ * @param {(string|number)=} depth
+ */
+ function computeStackTrace(ex, depth) {
+ var stack = null;
+ depth = depth == null ? 0 : +depth;
+
+ try {
+ stack = computeStackTraceFromStackProp(ex);
+ if (stack) {
+ return stack;
+ }
+ } catch (e) {
+ if (TraceKit.debug) {
+ throw e;
+ }
+ }
+
+ try {
+ stack = computeStackTraceByWalkingCallerChain(ex, depth + 1);
+ if (stack) {
+ return stack;
+ }
+ } catch (e) {
+ if (TraceKit.debug) {
+ throw e;
+ }
+ }
+ return {
+ name: ex.name,
+ message: ex.message,
+ url: getLocationHref()
+ };
+ }
+
+ computeStackTrace.augmentStackTraceWithInitialElement = augmentStackTraceWithInitialElement;
+ computeStackTrace.computeStackTraceFromStackProp = computeStackTraceFromStackProp;
+
+ return computeStackTrace;
+})();
+
+module.exports = TraceKit;
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"9":9}],11:[function(_dereq_,module,exports){
+/*
+ json-stringify-safe
+ Like JSON.stringify, but doesn't throw on circular references.
+
+ Originally forked from https://github.com/isaacs/json-stringify-safe
+ version 5.0.1 on 3/8/2017 and modified to handle Errors serialization
+ and IE8 compatibility. Tests for this are in test/vendor.
+
+ ISC license: https://github.com/isaacs/json-stringify-safe/blob/master/LICENSE
+*/
+
+exports = module.exports = stringify;
+exports.getSerialize = serializer;
+
+function indexOf(haystack, needle) {
+ for (var i = 0; i < haystack.length; ++i) {
+ if (haystack[i] === needle) return i;
+ }
+ return -1;
+}
+
+function stringify(obj, replacer, spaces, cycleReplacer) {
+ return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces);
+}
+
+// https://github.com/ftlabs/js-abbreviate/blob/fa709e5f139e7770a71827b1893f22418097fbda/index.js#L95-L106
+function stringifyError(value) {
+ var err = {
+ // These properties are implemented as magical getters and don't show up in for in
+ stack: value.stack,
+ message: value.message,
+ name: value.name
+ };
+
+ for (var i in value) {
+ if (Object.prototype.hasOwnProperty.call(value, i)) {
+ err[i] = value[i];
+ }
+ }
+
+ return err;
+}
+
+function serializer(replacer, cycleReplacer) {
+ var stack = [];
+ var keys = [];
+
+ if (cycleReplacer == null) {
+ cycleReplacer = function(key, value) {
+ if (stack[0] === value) {
+ return '[Circular ~]';
+ }
+ return '[Circular ~.' + keys.slice(0, indexOf(stack, value)).join('.') + ']';
+ };
+ }
+
+ return function(key, value) {
+ if (stack.length > 0) {
+ var thisPos = indexOf(stack, this);
+ ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);
+ ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);
+
+ if (~indexOf(stack, value)) {
+ value = cycleReplacer.call(this, key, value);
+ }
+ } else {
+ stack.push(value);
+ }
+
+ return replacer == null
+ ? value instanceof Error ? stringifyError(value) : value
+ : replacer.call(this, key, value);
+ };
+}
+
+},{}],12:[function(_dereq_,module,exports){
+/*
+ * JavaScript MD5
+ * https://github.com/blueimp/JavaScript-MD5
+ *
+ * Copyright 2011, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * https://opensource.org/licenses/MIT
+ *
+ * Based on
+ * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
+ * Digest Algorithm, as defined in RFC 1321.
+ * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
+ * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
+ * Distributed under the BSD License
+ * See http://pajhome.org.uk/crypt/md5 for more info.
+ */
+
+/*
+* Add integers, wrapping at 2^32. This uses 16-bit operations internally
+* to work around bugs in some JS interpreters.
+*/
+function safeAdd(x, y) {
+ var lsw = (x & 0xffff) + (y & 0xffff);
+ var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
+ return (msw << 16) | (lsw & 0xffff);
+}
+
+/*
+* Bitwise rotate a 32-bit number to the left.
+*/
+function bitRotateLeft(num, cnt) {
+ return (num << cnt) | (num >>> (32 - cnt));
+}
+
+/*
+* These functions implement the four basic operations the algorithm uses.
+*/
+function md5cmn(q, a, b, x, s, t) {
+ return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);
+}
+function md5ff(a, b, c, d, x, s, t) {
+ return md5cmn((b & c) | (~b & d), a, b, x, s, t);
+}
+function md5gg(a, b, c, d, x, s, t) {
+ return md5cmn((b & d) | (c & ~d), a, b, x, s, t);
+}
+function md5hh(a, b, c, d, x, s, t) {
+ return md5cmn(b ^ c ^ d, a, b, x, s, t);
+}
+function md5ii(a, b, c, d, x, s, t) {
+ return md5cmn(c ^ (b | ~d), a, b, x, s, t);
+}
+
+/*
+* Calculate the MD5 of an array of little-endian words, and a bit length.
+*/
+function binlMD5(x, len) {
+ /* append padding */
+ x[len >> 5] |= 0x80 << (len % 32);
+ x[(((len + 64) >>> 9) << 4) + 14] = len;
+
+ var i;
+ var olda;
+ var oldb;
+ var oldc;
+ var oldd;
+ var a = 1732584193;
+ var b = -271733879;
+ var c = -1732584194;
+ var d = 271733878;
+
+ for (i = 0; i < x.length; i += 16) {
+ olda = a;
+ oldb = b;
+ oldc = c;
+ oldd = d;
+
+ a = md5ff(a, b, c, d, x[i], 7, -680876936);
+ d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);
+ c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);
+ b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);
+ a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);
+ d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);
+ c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);
+ b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);
+ a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);
+ d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);
+ c = md5ff(c, d, a, b, x[i + 10], 17, -42063);
+ b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);
+ a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);
+ d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);
+ c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);
+ b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);
+
+ a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);
+ d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);
+ c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);
+ b = md5gg(b, c, d, a, x[i], 20, -373897302);
+ a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);
+ d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);
+ c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);
+ b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);
+ a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);
+ d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);
+ c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);
+ b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);
+ a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);
+ d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);
+ c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);
+ b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);
+
+ a = md5hh(a, b, c, d, x[i + 5], 4, -378558);
+ d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);
+ c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);
+ b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);
+ a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);
+ d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);
+ c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);
+ b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);
+ a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);
+ d = md5hh(d, a, b, c, x[i], 11, -358537222);
+ c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);
+ b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);
+ a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);
+ d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);
+ c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);
+ b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);
+
+ a = md5ii(a, b, c, d, x[i], 6, -198630844);
+ d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);
+ c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);
+ b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);
+ a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);
+ d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);
+ c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);
+ b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);
+ a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);
+ d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);
+ c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);
+ b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);
+ a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);
+ d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);
+ c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);
+ b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);
+
+ a = safeAdd(a, olda);
+ b = safeAdd(b, oldb);
+ c = safeAdd(c, oldc);
+ d = safeAdd(d, oldd);
+ }
+ return [a, b, c, d];
+}
+
+/*
+* Convert an array of little-endian words to a string
+*/
+function binl2rstr(input) {
+ var i;
+ var output = '';
+ var length32 = input.length * 32;
+ for (i = 0; i < length32; i += 8) {
+ output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xff);
+ }
+ return output;
+}
+
+/*
+* Convert a raw string to an array of little-endian words
+* Characters >255 have their high-byte silently ignored.
+*/
+function rstr2binl(input) {
+ var i;
+ var output = [];
+ output[(input.length >> 2) - 1] = undefined;
+ for (i = 0; i < output.length; i += 1) {
+ output[i] = 0;
+ }
+ var length8 = input.length * 8;
+ for (i = 0; i < length8; i += 8) {
+ output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << (i % 32);
+ }
+ return output;
+}
+
+/*
+* Calculate the MD5 of a raw string
+*/
+function rstrMD5(s) {
+ return binl2rstr(binlMD5(rstr2binl(s), s.length * 8));
+}
+
+/*
+* Calculate the HMAC-MD5, of a key and some data (raw strings)
+*/
+function rstrHMACMD5(key, data) {
+ var i;
+ var bkey = rstr2binl(key);
+ var ipad = [];
+ var opad = [];
+ var hash;
+ ipad[15] = opad[15] = undefined;
+ if (bkey.length > 16) {
+ bkey = binlMD5(bkey, key.length * 8);
+ }
+ for (i = 0; i < 16; i += 1) {
+ ipad[i] = bkey[i] ^ 0x36363636;
+ opad[i] = bkey[i] ^ 0x5c5c5c5c;
+ }
+ hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);
+ return binl2rstr(binlMD5(opad.concat(hash), 512 + 128));
+}
+
+/*
+* Convert a raw string to a hex string
+*/
+function rstr2hex(input) {
+ var hexTab = '0123456789abcdef';
+ var output = '';
+ var x;
+ var i;
+ for (i = 0; i < input.length; i += 1) {
+ x = input.charCodeAt(i);
+ output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f);
+ }
+ return output;
+}
+
+/*
+* Encode a string as utf-8
+*/
+function str2rstrUTF8(input) {
+ return unescape(encodeURIComponent(input));
+}
+
+/*
+* Take string arguments and return either raw or hex encoded strings
+*/
+function rawMD5(s) {
+ return rstrMD5(str2rstrUTF8(s));
+}
+function hexMD5(s) {
+ return rstr2hex(rawMD5(s));
+}
+function rawHMACMD5(k, d) {
+ return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d));
+}
+function hexHMACMD5(k, d) {
+ return rstr2hex(rawHMACMD5(k, d));
+}
+
+function md5(string, key, raw) {
+ if (!key) {
+ if (!raw) {
+ return hexMD5(string);
+ }
+ return rawMD5(string);
+ }
+ if (!raw) {
+ return hexHMACMD5(key, string);
+ }
+ return rawHMACMD5(key, string);
+}
+
+module.exports = md5;
+
+},{}]},{},[8,1,2,3,4])(8)
+});
\ No newline at end of file
diff --git a/packages/raven-js/dist/angular,console,ember,require/raven.min.js b/packages/raven-js/dist/angular,console,ember,require/raven.min.js
new file mode 100644
index 000000000000..7673bdea749b
--- /dev/null
+++ b/packages/raven-js/dist/angular,console,ember,require/raven.min.js
@@ -0,0 +1,4 @@
+/*! Raven.js 3.25.2 (30b6d4e) | github.com/getsentry/raven-js */
+!function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,b.Raven=a()}}(function(){var a;return function b(a,c,d){function e(g,h){if(!c[g]){if(!a[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};a[g][0].call(k.exports,function(b){var c=a[g][1][b];return e(c?c:b)},k,k.exports,b,a,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;gthis.l.maxBreadcrumbs&&this.v.shift(),this},addPlugin:function(a){var b=[].slice.call(arguments,1);return this.s.push([a,b]),this.o&&this.G(),this},setUserContext:function(a){return this.k.user=a,this},setExtraContext:function(a){return this.$("extra",a),this},setTagsContext:function(a){return this.$("tags",a),this},clearContext:function(){return this.k={},this},getContext:function(){return JSON.parse(h(this.k))},setEnvironment:function(a){return this.l.environment=a,this},setRelease:function(a){return this.l.release=a,this},setDataCallback:function(a){var b=this.l.dataCallback;return this.l.dataCallback=e(b,a),this},setBreadcrumbCallback:function(a){var b=this.l.breadcrumbCallback;return this.l.breadcrumbCallback=e(b,a),this},setShouldSendCallback:function(a){var b=this.l.shouldSendCallback;return this.l.shouldSendCallback=e(b,a),this},setTransport:function(a){return this.l.transport=a,this},lastException:function(){return this.e},lastEventId:function(){return this.g},isSetup:function(){return!!this.b&&(!!this.h||(this.ravenNotConfiguredError||(this.ravenNotConfiguredError=!0,this.A("error","Error: Raven has not been configured.")),!1))},afterLoad:function(){var a=R.RavenConfig;a&&this.config(a.dsn,a.config).install()},showReportDialog:function(a){if(S){a=a||{};var b=a.eventId||this.lastEventId();if(!b)throw new j("Missing eventId");var c=a.dsn||this.I;if(!c)throw new j("Missing DSN");var d=encodeURIComponent,e="";e+="?eventId="+d(b),e+="&dsn="+d(c);var f=a.user||this.k.user;f&&(f.name&&(e+="&name="+d(f.name)),f.email&&(e+="&email="+d(f.email)));var g=this.K(this.H(c)),h=S.createElement("script");h.async=!0,h.src=g+"/api/embed/error-page/"+e,(S.head||S.body).appendChild(h)}},M:function(){var a=this;this.n+=1,setTimeout(function(){a.n-=1})},_:function(a,b){var c,d;if(this.c){b=b||{},a="raven"+a.substr(0,1).toUpperCase()+a.substr(1),S.createEvent?(c=S.createEvent("HTMLEvents"),c.initEvent(a,!0,!0)):(c=S.createEventObject(),c.eventType=a);for(d in b)A(b,d)&&(c[d]=b[d]);if(S.createEvent)S.dispatchEvent(c);else try{S.fireEvent("on"+c.eventType.toLowerCase(),c)}catch(e){}}},aa:function(a){var b=this;return function(c){if(b.ba=null,b.w!==c){b.w=c;var d;try{d=E(c.target)}catch(e){d=""}b.captureBreadcrumb({category:"ui."+a,message:d})}}},ca:function(){var a=this,b=1e3;return function(c){var d;try{d=c.target}catch(e){return}var f=d&&d.tagName;if(f&&("INPUT"===f||"TEXTAREA"===f||d.isContentEditable)){var g=a.ba;g||a.aa("input")(c),clearTimeout(g),a.ba=setTimeout(function(){a.ba=null},b)}}},da:function(a,b){var c=H(this.x.href),d=H(b),e=H(a);this.y=b,c.protocol===d.protocol&&c.host===d.host&&(b=d.relative),c.protocol===e.protocol&&c.host===e.host&&(a=e.relative),this.captureBreadcrumb({category:"navigation",data:{to:b,from:a}})},D:function(){var a=this;a.ea=Function.prototype.toString,Function.prototype.toString=function(){return"function"==typeof this&&this.N?a.ea.apply(this.P,arguments):a.ea.apply(this,arguments)}},R:function(){this.ea&&(Function.prototype.toString=this.ea)},E:function(){function a(a){return function(b,d){for(var e=new Array(arguments.length),f=0;f2?arguments[2]:void 0;return c&&b.da(b.y,c+""),a.apply(this,arguments)}};I(R.history,"pushState",j,d),I(R.history,"replaceState",j,d)}if(c.console&&"console"in R&&console.log){var k=function(a,c){b.captureBreadcrumb({message:a,level:c.level,category:"console"})};w(["debug","info","warn","error","log"],function(a,b){O(console,b,k)})}},S:function(){for(var a;this.u.length;){a=this.u.shift();var b=a[0],c=a[1],d=a[2];b[c]=d}},T:function(){for(var a in this.r)this.q[a]=this.r[a]},G:function(){var a=this;w(this.s,function(b,c){var d=c[0],e=c[1];d.apply(a,[a].concat(e))})},H:function(a){var b=Q.exec(a),c={},d=7;try{for(;d--;)c[P[d]]=b[d]||""}catch(e){throw new j("Invalid DSN: "+a)}if(c.pass&&!this.l.allowSecretKey)throw new j("Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key");return c},K:function(a){var b="//"+a.host+(a.port?":"+a.port:"");return a.protocol&&(b=a.protocol+":"+b),b},B:function(){this.n||this.W.apply(this,arguments)},W:function(a,b){var c=this.Y(a,b);this._("handle",{stackInfo:a,options:b}),this.ga(a.name,a.message,a.url,a.lineno,c,b)},Y:function(a,b){var c=this,d=[];if(a.stack&&a.stack.length&&(w(a.stack,function(b,e){var f=c.ha(e,a.url);f&&d.push(f)}),b&&b.trimHeadFrames))for(var e=0;e0&&(a.breadcrumbs={values:[].slice.call(this.v,0)}),this.k.user&&(a.user=this.k.user),b.environment&&(a.environment=b.environment),b.release&&(a.release=b.release),b.serverName&&(a.server_name=b.serverName),a=this.qa(a),Object.keys(a).forEach(function(b){(null==a[b]||""===a[b]||v(a[b]))&&delete a[b]}),s(b.dataCallback)&&(a=b.dataCallback(a)||a),a&&!v(a)&&(!s(b.shouldSendCallback)||b.shouldSendCallback(a)))return this.na()?void this.A("warn","Raven dropped error due to backoff: ",a):void("number"==typeof b.sampleRate?Math.random() ",i=h.length;a&&f++1&&g+e.length*i+b.length>=d));)e.push(b),g+=b.length,a=a.parentNode;return e.reverse().join(h)}function F(a){var b,c,d,e,f,g=[];if(!a||!a.tagName)return"";if(g.push(a.tagName.toLowerCase()),a.id&&g.push("#"+a.id),b=a.className,b&&l(b))for(c=b.split(/\s+/),f=0;fc?Q(a,b-1):d}function R(a,b){if("number"==typeof a||"string"==typeof a)return a.toString();if(!Array.isArray(a))return"";if(a=a.filter(function(a){return"string"==typeof a}),0===a.length)return"[object has no keys]";if(b="number"!=typeof b?X:b,a[0].length>=b)return a[0];for(var c=a.length;c>0;c--){var d=a.slice(0,c).join(", ");if(!(d.length>b))return c===a.length?d:d+"…"}return""}function S(a,b){function c(a){return m(a)?a.map(function(a){return c(a)}):k(a)?Object.keys(a).reduce(function(b,d){return b[d]=e.test(d)?f:c(a[d]),b},{}):a}if(!m(b)||m(b)&&0===b.length)return a;var d,e=A(b),f="********";try{d=JSON.parse(T(a))}catch(g){return a}return c(d)}var T=a(11),U="undefined"!=typeof window?window:"undefined"!=typeof c?c:"undefined"!=typeof self?self:{},V=3,W=51200,X=40;b.exports={isObject:d,isError:e,isErrorEvent:f,isDOMError:g,isDOMException:h,isUndefined:i,isFunction:j,isPlainObject:k,isString:l,isArray:m,isEmptyObject:n,supportsErrorEvent:o,supportsDOMError:p,supportsDOMException:q,supportsFetch:r,supportsReferrerPolicy:s,supportsPromiseRejectionEvent:t,wrappedCallback:u,each:v,objectMerge:w,truncate:y,objectFrozen:x,hasKey:z,joinRegExp:A,urlencode:B,uuid4:D,htmlTreeAsString:E,htmlElementAsString:F,isSameException:I,isSameStacktrace:J,parseUrl:C,fill:K,safeJoin:L,serializeException:Q,serializeKeysForMessage:R,sanitize:S}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{11:11}],10:[function(a,b,c){(function(c){function d(){return"undefined"==typeof document||null==document.location?"":document.location.href}function e(){return"undefined"==typeof document||null==document.location?"":(document.location.origin||(document.location.origin=document.location.protocol+"//"+document.location.hostname+(document.location.port?":"+document.location.port:"")),document.location.origin)}var f=a(9),g={collectWindowErrors:!0,debug:!1},h="undefined"!=typeof window?window:"undefined"!=typeof c?c:"undefined"!=typeof self?self:{},i=[].slice,j="?",k=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;g.report=function(){function a(a){m(),s.push(a)}function b(a){for(var b=s.length-1;b>=0;--b)s[b]===a&&s.splice(b,1)}function c(){n(),s=[]}function e(a,b){var c=null;if(!b||g.collectWindowErrors){for(var d in s)if(s.hasOwnProperty(d))try{s[d].apply(null,[a].concat(i.call(arguments,2)))}catch(e){c=e}if(c)throw c}}function l(a,b,c,h,i){var l=null,m=f.isErrorEvent(i)?i.error:i,n=f.isErrorEvent(a)?a.message:a;if(v)g.computeStackTrace.augmentStackTraceWithInitialElement(v,b,c,n),o();else if(m&&f.isError(m))l=g.computeStackTrace(m),e(l,!0);else{var p,r={url:b,line:c,column:h},s=void 0;if("[object String]"==={}.toString.call(n)){var p=n.match(k);p&&(s=p[1],n=p[2])}r.func=j,l={name:s,message:n,url:d(),stack:[r]},e(l,!0)}return!!q&&q.apply(this,arguments)}function m(){r||(q=h.onerror,h.onerror=l,r=!0)}function n(){r&&(h.onerror=q,r=!1,q=void 0)}function o(){var a=v,b=t;t=null,v=null,u=null,e.apply(null,[a,!1].concat(b))}function p(a,b){var c=i.call(arguments,1);if(v){if(u===a)return;o()}var d=g.computeStackTrace(a);if(v=d,u=a,t=c,setTimeout(function(){u===a&&o()},d.incomplete?2e3:0),b!==!1)throw a}var q,r,s=[],t=null,u=null,v=null;return p.subscribe=a,p.unsubscribe=b,p.uninstall=c,p}(),g.computeStackTrace=function(){function a(a){if("undefined"!=typeof a.stack&&a.stack){for(var b,c,f,g=/^\s*at (?:(.*?) ?\()?((?:file|https?|blob|chrome-extension|native|eval|webpack||[a-z]:|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,h=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i,i=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\/.*?|\[native code\]|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i,k=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,l=/\((\S*)(?::(\d+))(?::(\d+))\)/,m=a.stack.split("\n"),n=[],o=(/^(.*) is undefined$/.exec(a.message),0),p=m.length;o eval")>-1;r&&(b=k.exec(c[3]))?(c[3]=b[1],c[4]=b[2],c[5]=null):0!==o||c[5]||"undefined"==typeof a.columnNumber||(n[0].column=a.columnNumber+1),f={url:c[3],func:c[1]||j,args:c[2]?c[2].split(","):[],
+line:c[4]?+c[4]:null,column:c[5]?+c[5]:null}}if(!f.func&&f.line&&(f.func=j),f.url&&"blob:"===f.url.substr(0,5)){var s=new XMLHttpRequest;if(s.open("GET",f.url,!1),s.send(null),200===s.status){var t=s.responseText||"";t=t.slice(-300);var u=t.match(/\/\/# sourceMappingURL=(.*)$/);if(u){var v=u[1];"~"===v.charAt(0)&&(v=e()+v.slice(1)),f.url=v.slice(0,-4)}}}n.push(f)}return n.length?{name:a.name,message:a.message,url:d(),stack:n}:null}}function b(a,b,c,d){var e={url:b,line:c};if(e.url&&e.line){if(a.incomplete=!1,e.func||(e.func=j),a.stack.length>0&&a.stack[0].url===e.url){if(a.stack[0].line===e.line)return!1;if(!a.stack[0].line&&a.stack[0].func===e.func)return a.stack[0].line=e.line,!1}return a.stack.unshift(e),a.partial=!0,!0}return a.incomplete=!0,!1}function c(a,e){for(var h,i,k=/function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,l=[],m={},n=!1,o=c.caller;o&&!n;o=o.caller)if(o!==f&&o!==g.report){if(i={url:null,func:j,line:null,column:null},o.name?i.func=o.name:(h=k.exec(o.toString()))&&(i.func=h[1]),"undefined"==typeof i.func)try{i.func=h.input.substring(0,h.input.indexOf("{"))}catch(p){}m[""+o]?n=!0:m[""+o]=!0,l.push(i)}e&&l.splice(0,e);var q={name:a.name,message:a.message,url:d(),stack:l};return b(q,a.sourceURL||a.fileName,a.line||a.lineNumber,a.message||a.description),q}function f(b,e){var f=null;e=null==e?0:+e;try{if(f=a(b))return f}catch(h){if(g.debug)throw h}try{if(f=c(b,e+1))return f}catch(h){if(g.debug)throw h}return{name:b.name,message:b.message,url:d()}}return f.augmentStackTraceWithInitialElement=b,f.computeStackTraceFromStackProp=a,f}(),b.exports=g}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{9:9}],11:[function(a,b,c){function d(a,b){for(var c=0;c0){var i=d(c,this);~i?c.splice(i+1):c.push(this),~i?e.splice(i,1/0,g):e.push(g),~d(c,h)&&(h=b.call(this,g,h))}else c.push(h);return null==a?h instanceof Error?f(h):h:a.call(this,g,h)}}c=b.exports=e,c.getSerialize=g},{}],12:[function(a,b,c){function d(a,b){var c=(65535&a)+(65535&b),d=(a>>16)+(b>>16)+(c>>16);return d<<16|65535&c}function e(a,b){return a<>>32-b}function f(a,b,c,f,g,h){return d(e(d(d(b,a),d(f,h)),g),c)}function g(a,b,c,d,e,g,h){return f(b&c|~b&d,a,b,e,g,h)}function h(a,b,c,d,e,g,h){return f(b&d|c&~d,a,b,e,g,h)}function i(a,b,c,d,e,g,h){return f(b^c^d,a,b,e,g,h)}function j(a,b,c,d,e,g,h){return f(c^(b|~d),a,b,e,g,h)}function k(a,b){a[b>>5]|=128<>>9<<4)+14]=b;var c,e,f,k,l,m=1732584193,n=-271733879,o=-1732584194,p=271733878;for(c=0;c>5]>>>b%32&255);return c}function m(a){var b,c=[];for(c[(a.length>>2)-1]=void 0,b=0;b>5]|=(255&a.charCodeAt(b/8))<16&&(e=k(e,8*a.length)),c=0;c<16;c+=1)f[c]=909522486^e[c],g[c]=1549556828^e[c];return d=k(f.concat(m(b)),512+8*b.length),l(k(g.concat(d),640))}function p(a){var b,c,d="0123456789abcdef",e="";for(c=0;c>>4&15)+d.charAt(15&b);return e}function q(a){return unescape(encodeURIComponent(a))}function r(a){return n(q(a))}function s(a){return p(r(a))}function t(a,b){return o(q(a),q(b))}function u(a,b){return p(t(a,b))}function v(a,b,c){return b?c?t(b,a):u(b,a):c?r(a):s(a)}b.exports=v},{}]},{},[8,1,2,3,4])(8)});
+//# sourceMappingURL=raven.min.js.map
\ No newline at end of file
diff --git a/packages/raven-js/dist/angular,console,ember,require/raven.min.js.map b/packages/raven-js/dist/angular,console,ember,require/raven.min.js.map
new file mode 100644
index 000000000000..e14b4d6d0bd4
--- /dev/null
+++ b/packages/raven-js/dist/angular,console,ember,require/raven.min.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["raven.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Raven","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length","1","_dereq_","angularPlugin","angular","RavenProvider","$get","$window","ExceptionHandlerProvider","$provide","decorator","exceptionHandler","R","$delegate","ex","cause","captureException","extra","moduleName","provider","config","setDataCallback","wrappedCallback","data","_normalizeData","angularPattern","exception","values","matches","exec","value","type","message","angularDocs","substr","addPlugin","8","9","2","consolePlugin","console","pluginOptions","logLevels","levels","push","callback","msg","captureMessage","level","pop","wrapConsoleMethod","wrapMethod","6","3","emberPlugin","Ember","_oldOnError","onerror","error","RSVP","on","reason","context","4","requirePlugin","wrap","deep","5","RavenConfigError","name","prototype","constructor","utils","originalConsoleLevel","originalConsole","sentryLevel","args","slice","arguments","safeJoin","logger","Function","apply","7","now","Date","keepOriginalCallback","original","isFunction","_hasJSON","JSON","stringify","_hasDocument","isUndefined","_document","_hasNavigator","_navigator","_lastCapturedException","_lastData","_lastEventId","_globalServer","_globalKey","_globalProject","_globalContext","_globalOptions","release","_window","SENTRY_RELEASE","id","ignoreErrors","ignoreUrls","whitelistUrls","includePaths","headers","collectWindowErrors","captureUnhandledRejections","maxMessageLength","maxUrlLength","stackTraceLimit","autoBreadcrumbs","instrument","sampleRate","sanitizeKeys","_fetchDefaults","method","keepalive","referrerPolicy","supportsReferrerPolicy","_ignoreOnError","_isRavenInstalled","_originalErrorStackTraceLimit","_originalConsole","_originalConsoleMethods","_plugins","_startTime","_wrappedBuiltIns","_breadcrumbs","_lastCapturedEvent","_location","location","_lastHref","href","_resetBackoff","TraceKit","md5","isErrorEvent","isDOMError","isDOMException","isError","isObject","isPlainObject","isString","isArray","isEmptyObject","each","objectMerge","truncate","objectFrozen","hasKey","joinRegExp","urlencode","uuid4","htmlTreeAsString","isSameException","isSameStacktrace","parseUrl","fill","supportsFetch","serializeKeysForMessage","serializeException","sanitize","dsnKeys","split","dsnPattern","document","navigator","VERSION","debug","dsn","options","_logDebug","globalOptions","key","setDSN","maxBreadcrumbs","Math","max","min","autoBreadcrumbDefaults","xhr","dom","sentry","toString","instrumentDefaults","tryCatch","install","isSetup","report","subscribe","_handleOnErrorStackInfo","_attachPromiseRejectionHandler","_patchFunctionToString","_instrumentTryCatch","_instrumentBreadcrumbs","_drainPlugins","uri","_parseDSN","lastSlash","path","lastIndexOf","_dsn","user","_globalSecret","pass","_getGlobalServer","_globalEndpoint","func","undefined","_before","wrapped","_ignoreNextOnError","__raven__","__raven_wrapper__","property","__orig__","uninstall","_detachPromiseRejectionHandler","_unpatchFunctionToString","_restoreBuiltIns","_restoreConsole","U","event","unhandledPromiseRejection","C","_promiseRejectionHandler","bind","addEventListener","Q","removeEventListener","trimHeadFrames","stacktrace","_getCaptureExceptionOptionsFromPlainObject","stack","computeStackTrace","_handleStackInfo","ex1","V","currentOptions","exKeys","Object","keys","sort","fingerprint","__serialized__","test","initialCall","fileurl","url","frames","_prepareFrames","reverse","_send","captureBreadcrumb","obj","crumb","timestamp","breadcrumbCallback","result","shift","plugin","pluginArgs","setUserContext","setExtraContext","_mergeContext","setTagsContext","tags","clearContext","getContext","parse","setEnvironment","environment","setRelease","dataCallback","setBreadcrumbCallback","setShouldSendCallback","shouldSendCallback","setTransport","transport","lastException","lastEventId","ravenNotConfiguredError","afterLoad","RavenConfig","showReportDialog","eventId","encode","encodeURIComponent","qs","email","globalServer","script","createElement","async","src","head","body","appendChild","M","setTimeout","_","eventType","evt","toUpperCase","createEvent","initEvent","createEventObject","dispatchEvent","fireEvent","toLowerCase","aa","evtName","_keypressTimeout","target","category","ca","debounceDuration","tagName","isContentEditable","timeout","_breadcrumbEventHandler","clearTimeout","da","from","to","parsedLoc","parsedTo","parsedFrom","protocol","host","relative","D","_originalFunctionToString","E","wrapTimeFn","orig","fn","Array","originalCallback","wrapEventTarget","proto","hasOwnProperty","capture","secure","handleEvent","err","before","clickHandler","keypressHandler","_keypressEventHandler","wrappedBuiltIns","requestAnimationFrame","cb","eventTargets","F","wrapProp","prop","xhrproto","XMLHttpRequest","origOpen","indexOf","__raven_xhr","status_code","origSend","onreadystatechangeHandler","readyState","status","props","j","onreadystatechange","origFetch","fetchInput","Request","fetchData","then","response","attachEvent","chrome","isChromePackagedApp","app","runtime","hasPushAndReplaceState","history","pushState","replaceState","oldOnPopState","onpopstate","currentHref","_captureUrlChange","historyReplacementFunction","origHistFunction","log","consoleMethodCallback","S","builtin","T","G","installer","concat","H","str","m","allowSecretKey","K","port","B","W","stackInfo","_triggerEvent","_processException","lineno","Y","frame","_normalizeFrame","in_app","ha","stackInfoUrl","normalized","filename","line","colno","column","function","ga","prefixedMessage","transaction","ia","request","Referer","breadcrumbs","_trimBreadcrumbs","ja","urlProp","urlProps","ka","httpData","userAgent","User-Agent","referrer","z","_backoffDuration","_backoffStart","na","oa","current","last","pa","_shouldBackoff","retry","get","getResponseHeader","parseInt","Z","baseData","project","platform","_getHttpData","serverName","server_name","_sanitizeData","forEach","random","_sendProcessedPayload","qa","sa","ra","_trimPacket","allowDuplicates","_isRepeatData","event_id","_getUuid","auth","sentry_version","sentry_client","sentry_key","sentry_secret","_makeRequest","onSuccess","onError","_setBackoffState","ta","opts","evaluatedHeaders","evaluatedFetchParameters","_evaluateHash","fetchParameters","defaultFetchOptions","fetchOptions","fetch","ok","hasCORS","XDomainRequest","replace","onload","open","setRequestHeader","send","ua","hash","evaluated","A","$","setUser","setReleaseContext","10","11","12","RavenConstructor","_Raven","noConflict","Client","what","supportsErrorEvent","ErrorEvent","supportsDOMError","DOMError","supportsDOMException","DOMException","Headers","Response","supportsPromiseRejectionEvent","PromiseRejectionEvent","normalizedData","obj1","obj2","isFrozen","object","patterns","pattern","sources","len","source","RegExp","join","pairs","match","query","fragment","crypto","msCrypto","getRandomValues","arr","Uint16Array","pad","num","v","c","elem","nextStr","MAX_TRAVERSE_HEIGHT","MAX_OUTPUT_LEN","out","height","separator","sepLength","htmlElementAsString","parentNode","className","classes","attr","attrWhitelist","getAttribute","isOnlyOneTruthy","b","isBothUndefined","ex2","stack1","stack2","frames1","frames2","replacement","track","input","delimiter","output","String","utf8Length","encodeURI","jsonSize","serializeValue","maxLength","serializeObject","depth","reduce","acc","map","val","maxSize","MAX_SERIALIZE_EXCEPTION_DEPTH","MAX_SERIALIZE_EXCEPTION_SIZE","serialized","filter","MAX_SERIALIZE_KEYS_LENGTH","usedKeys","sanitizeWorker","workerInput","k","sanitizeRegExp","sanitizeMask","safeInput","o_O","getLocationHref","getLocationOrigin","origin","hostname","_slice","UNKNOWN_FUNCTION","ERROR_TYPES_RE","handler","installGlobalHandler","handlers","unsubscribe","splice","unsubscribeAll","uninstallGlobalHandler","notifyHandlers","isWindowError","inner","traceKitWindowOnError","lineNo","colNo","lastExceptionStack","augmentStackTraceWithInitialElement","processLastException","groups","_oldOnerrorHandler","_onErrorHandlerInstalled","_lastExceptionStack","_lastArgs","lastArgs","rethrow","incomplete","computeStackTraceFromStackProp","submatch","parts","element","winjs","gecko","geckoEval","chromeEval","lines","isNative","isEval","columnNumber","responseText","sourceMaps","sourceMapAddress","charAt","initial","unshift","partial","computeStackTraceByWalkingCallerChain","item","functionName","funcs","recursion","curr","caller","substring","sourceURL","fileName","lineNumber","description","haystack","needle","replacer","spaces","cycleReplacer","serializer","stringifyError","thisPos","Infinity","getSerialize","safeAdd","x","y","lsw","msw","bitRotateLeft","cnt","md5cmn","q","md5ff","d","md5gg","md5hh","md5ii","binlMD5","olda","oldb","oldc","oldd","binl2rstr","length32","fromCharCode","rstr2binl","length8","charCodeAt","rstrMD5","rstrHMACMD5","bkey","ipad","opad","rstr2hex","hexTab","str2rstrUTF8","unescape","rawMD5","hexMD5","rawHMACMD5","hexHMACMD5","string","raw"],"mappings":"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","file":"raven.min.js"}
\ No newline at end of file
diff --git a/packages/raven-js/dist/angular,console,ember,vue/raven.js b/packages/raven-js/dist/angular,console,ember,vue/raven.js
new file mode 100644
index 000000000000..0d10c7b44faf
--- /dev/null
+++ b/packages/raven-js/dist/angular,console,ember,vue/raven.js
@@ -0,0 +1,4205 @@
+/*! Raven.js 3.25.2 (30b6d4e) | github.com/getsentry/raven-js */
+
+/*
+ * Includes TraceKit
+ * https://github.com/getsentry/TraceKit
+ *
+ * Copyright 2018 Matt Robenolt and other contributors
+ * Released under the BSD license
+ * https://github.com/getsentry/raven-js/blob/master/LICENSE
+ *
+ */
+
+(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Raven = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o' : 'anonymous component') +
+ (vm._isVue && vm.$options.__file ? ' at ' + vm.$options.__file : '')
+ );
+}
+
+function vuePlugin(Raven, Vue) {
+ Vue = Vue || window.Vue;
+
+ // quit if Vue isn't on the page
+ if (!Vue || !Vue.config) return;
+
+ var _oldOnError = Vue.config.errorHandler;
+ Vue.config.errorHandler = function VueErrorHandler(error, vm, info) {
+ var metaData = {};
+
+ // vm and lifecycleHook are not always available
+ if (Object.prototype.toString.call(vm) === '[object Object]') {
+ metaData.componentName = formatComponentName(vm);
+ metaData.propsData = vm.$options.propsData;
+ }
+
+ if (typeof info !== 'undefined') {
+ metaData.lifecycleHook = info;
+ }
+
+ Raven.captureException(error, {
+ extra: metaData
+ });
+
+ if (typeof _oldOnError === 'function') {
+ _oldOnError.call(this, error, vm, info);
+ }
+ };
+}
+
+module.exports = vuePlugin;
+
+_dereq_(8).addPlugin(module.exports);
+},{"8":8}],5:[function(_dereq_,module,exports){
+function RavenConfigError(message) {
+ this.name = 'RavenConfigError';
+ this.message = message;
+}
+RavenConfigError.prototype = new Error();
+RavenConfigError.prototype.constructor = RavenConfigError;
+
+module.exports = RavenConfigError;
+
+},{}],6:[function(_dereq_,module,exports){
+var utils = _dereq_(9);
+
+var wrapMethod = function(console, level, callback) {
+ var originalConsoleLevel = console[level];
+ var originalConsole = console;
+
+ if (!(level in console)) {
+ return;
+ }
+
+ var sentryLevel = level === 'warn' ? 'warning' : level;
+
+ console[level] = function() {
+ var args = [].slice.call(arguments);
+
+ var msg = utils.safeJoin(args, ' ');
+ var data = {level: sentryLevel, logger: 'console', extra: {arguments: args}};
+
+ if (level === 'assert') {
+ if (args[0] === false) {
+ // Default browsers message
+ msg =
+ 'Assertion failed: ' + (utils.safeJoin(args.slice(1), ' ') || 'console.assert');
+ data.extra.arguments = args.slice(1);
+ callback && callback(msg, data);
+ }
+ } else {
+ callback && callback(msg, data);
+ }
+
+ // this fails for some browsers. :(
+ if (originalConsoleLevel) {
+ // IE9 doesn't allow calling apply on console functions directly
+ // See: https://stackoverflow.com/questions/5472938/does-ie9-support-console-log-and-is-it-a-real-function#answer-5473193
+ Function.prototype.apply.call(originalConsoleLevel, originalConsole, args);
+ }
+ };
+};
+
+module.exports = {
+ wrapMethod: wrapMethod
+};
+
+},{"9":9}],7:[function(_dereq_,module,exports){
+(function (global){
+/*global XDomainRequest:false */
+
+var TraceKit = _dereq_(10);
+var stringify = _dereq_(11);
+var md5 = _dereq_(12);
+var RavenConfigError = _dereq_(5);
+
+var utils = _dereq_(9);
+var isErrorEvent = utils.isErrorEvent;
+var isDOMError = utils.isDOMError;
+var isDOMException = utils.isDOMException;
+var isError = utils.isError;
+var isObject = utils.isObject;
+var isPlainObject = utils.isPlainObject;
+var isUndefined = utils.isUndefined;
+var isFunction = utils.isFunction;
+var isString = utils.isString;
+var isArray = utils.isArray;
+var isEmptyObject = utils.isEmptyObject;
+var each = utils.each;
+var objectMerge = utils.objectMerge;
+var truncate = utils.truncate;
+var objectFrozen = utils.objectFrozen;
+var hasKey = utils.hasKey;
+var joinRegExp = utils.joinRegExp;
+var urlencode = utils.urlencode;
+var uuid4 = utils.uuid4;
+var htmlTreeAsString = utils.htmlTreeAsString;
+var isSameException = utils.isSameException;
+var isSameStacktrace = utils.isSameStacktrace;
+var parseUrl = utils.parseUrl;
+var fill = utils.fill;
+var supportsFetch = utils.supportsFetch;
+var supportsReferrerPolicy = utils.supportsReferrerPolicy;
+var serializeKeysForMessage = utils.serializeKeysForMessage;
+var serializeException = utils.serializeException;
+var sanitize = utils.sanitize;
+
+var wrapConsoleMethod = _dereq_(6).wrapMethod;
+
+var dsnKeys = 'source protocol user pass host port path'.split(' '),
+ dsnPattern = /^(?:(\w+):)?\/\/(?:(\w+)(:\w+)?@)?([\w\.-]+)(?::(\d+))?(\/.*)/;
+
+function now() {
+ return +new Date();
+}
+
+// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)
+var _window =
+ typeof window !== 'undefined'
+ ? window
+ : typeof global !== 'undefined'
+ ? global
+ : typeof self !== 'undefined'
+ ? self
+ : {};
+var _document = _window.document;
+var _navigator = _window.navigator;
+
+function keepOriginalCallback(original, callback) {
+ return isFunction(callback)
+ ? function(data) {
+ return callback(data, original);
+ }
+ : callback;
+}
+
+// First, check for JSON support
+// If there is no JSON, we no-op the core features of Raven
+// since JSON is required to encode the payload
+function Raven() {
+ this._hasJSON = !!(typeof JSON === 'object' && JSON.stringify);
+ // Raven can run in contexts where there's no document (react-native)
+ this._hasDocument = !isUndefined(_document);
+ this._hasNavigator = !isUndefined(_navigator);
+ this._lastCapturedException = null;
+ this._lastData = null;
+ this._lastEventId = null;
+ this._globalServer = null;
+ this._globalKey = null;
+ this._globalProject = null;
+ this._globalContext = {};
+ this._globalOptions = {
+ // SENTRY_RELEASE can be injected by https://github.com/getsentry/sentry-webpack-plugin
+ release: _window.SENTRY_RELEASE && _window.SENTRY_RELEASE.id,
+ logger: 'javascript',
+ ignoreErrors: [],
+ ignoreUrls: [],
+ whitelistUrls: [],
+ includePaths: [],
+ headers: null,
+ collectWindowErrors: true,
+ captureUnhandledRejections: true,
+ maxMessageLength: 0,
+ // By default, truncates URL values to 250 chars
+ maxUrlLength: 250,
+ stackTraceLimit: 50,
+ autoBreadcrumbs: true,
+ instrument: true,
+ sampleRate: 1,
+ sanitizeKeys: []
+ };
+ this._fetchDefaults = {
+ method: 'POST',
+ keepalive: true,
+ // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default
+ // https://caniuse.com/#feat=referrer-policy
+ // It doesn't. And it throw exception instead of ignoring this parameter...
+ // REF: https://github.com/getsentry/raven-js/issues/1233
+ referrerPolicy: supportsReferrerPolicy() ? 'origin' : ''
+ };
+ this._ignoreOnError = 0;
+ this._isRavenInstalled = false;
+ this._originalErrorStackTraceLimit = Error.stackTraceLimit;
+ // capture references to window.console *and* all its methods first
+ // before the console plugin has a chance to monkey patch
+ this._originalConsole = _window.console || {};
+ this._originalConsoleMethods = {};
+ this._plugins = [];
+ this._startTime = now();
+ this._wrappedBuiltIns = [];
+ this._breadcrumbs = [];
+ this._lastCapturedEvent = null;
+ this._keypressTimeout;
+ this._location = _window.location;
+ this._lastHref = this._location && this._location.href;
+ this._resetBackoff();
+
+ // eslint-disable-next-line guard-for-in
+ for (var method in this._originalConsole) {
+ this._originalConsoleMethods[method] = this._originalConsole[method];
+ }
+}
+
+/*
+ * The core Raven singleton
+ *
+ * @this {Raven}
+ */
+
+Raven.prototype = {
+ // Hardcode version string so that raven source can be loaded directly via
+ // webpack (using a build step causes webpack #1617). Grunt verifies that
+ // this value matches package.json during build.
+ // See: https://github.com/getsentry/raven-js/issues/465
+ VERSION: '3.25.2',
+
+ debug: false,
+
+ TraceKit: TraceKit, // alias to TraceKit
+
+ /*
+ * Configure Raven with a DSN and extra options
+ *
+ * @param {string} dsn The public Sentry DSN
+ * @param {object} options Set of global options [optional]
+ * @return {Raven}
+ */
+ config: function(dsn, options) {
+ var self = this;
+
+ if (self._globalServer) {
+ this._logDebug('error', 'Error: Raven has already been configured');
+ return self;
+ }
+ if (!dsn) return self;
+
+ var globalOptions = self._globalOptions;
+
+ // merge in options
+ if (options) {
+ each(options, function(key, value) {
+ // tags and extra are special and need to be put into context
+ if (key === 'tags' || key === 'extra' || key === 'user') {
+ self._globalContext[key] = value;
+ } else {
+ globalOptions[key] = value;
+ }
+ });
+ }
+
+ self.setDSN(dsn);
+
+ // "Script error." is hard coded into browsers for errors that it can't read.
+ // this is the result of a script being pulled in from an external domain and CORS.
+ globalOptions.ignoreErrors.push(/^Script error\.?$/);
+ globalOptions.ignoreErrors.push(/^Javascript error: Script error\.? on line 0$/);
+
+ // join regexp rules into one big rule
+ globalOptions.ignoreErrors = joinRegExp(globalOptions.ignoreErrors);
+ globalOptions.ignoreUrls = globalOptions.ignoreUrls.length
+ ? joinRegExp(globalOptions.ignoreUrls)
+ : false;
+ globalOptions.whitelistUrls = globalOptions.whitelistUrls.length
+ ? joinRegExp(globalOptions.whitelistUrls)
+ : false;
+ globalOptions.includePaths = joinRegExp(globalOptions.includePaths);
+ globalOptions.maxBreadcrumbs = Math.max(
+ 0,
+ Math.min(globalOptions.maxBreadcrumbs || 100, 100)
+ ); // default and hard limit is 100
+
+ var autoBreadcrumbDefaults = {
+ xhr: true,
+ console: true,
+ dom: true,
+ location: true,
+ sentry: true
+ };
+
+ var autoBreadcrumbs = globalOptions.autoBreadcrumbs;
+ if ({}.toString.call(autoBreadcrumbs) === '[object Object]') {
+ autoBreadcrumbs = objectMerge(autoBreadcrumbDefaults, autoBreadcrumbs);
+ } else if (autoBreadcrumbs !== false) {
+ autoBreadcrumbs = autoBreadcrumbDefaults;
+ }
+ globalOptions.autoBreadcrumbs = autoBreadcrumbs;
+
+ var instrumentDefaults = {
+ tryCatch: true
+ };
+
+ var instrument = globalOptions.instrument;
+ if ({}.toString.call(instrument) === '[object Object]') {
+ instrument = objectMerge(instrumentDefaults, instrument);
+ } else if (instrument !== false) {
+ instrument = instrumentDefaults;
+ }
+ globalOptions.instrument = instrument;
+
+ TraceKit.collectWindowErrors = !!globalOptions.collectWindowErrors;
+
+ // return for chaining
+ return self;
+ },
+
+ /*
+ * Installs a global window.onerror error handler
+ * to capture and report uncaught exceptions.
+ * At this point, install() is required to be called due
+ * to the way TraceKit is set up.
+ *
+ * @return {Raven}
+ */
+ install: function() {
+ var self = this;
+ if (self.isSetup() && !self._isRavenInstalled) {
+ TraceKit.report.subscribe(function() {
+ self._handleOnErrorStackInfo.apply(self, arguments);
+ });
+
+ if (self._globalOptions.captureUnhandledRejections) {
+ self._attachPromiseRejectionHandler();
+ }
+
+ self._patchFunctionToString();
+
+ if (self._globalOptions.instrument && self._globalOptions.instrument.tryCatch) {
+ self._instrumentTryCatch();
+ }
+
+ if (self._globalOptions.autoBreadcrumbs) self._instrumentBreadcrumbs();
+
+ // Install all of the plugins
+ self._drainPlugins();
+
+ self._isRavenInstalled = true;
+ }
+
+ Error.stackTraceLimit = self._globalOptions.stackTraceLimit;
+ return this;
+ },
+
+ /*
+ * Set the DSN (can be called multiple time unlike config)
+ *
+ * @param {string} dsn The public Sentry DSN
+ */
+ setDSN: function(dsn) {
+ var self = this,
+ uri = self._parseDSN(dsn),
+ lastSlash = uri.path.lastIndexOf('/'),
+ path = uri.path.substr(1, lastSlash);
+
+ self._dsn = dsn;
+ self._globalKey = uri.user;
+ self._globalSecret = uri.pass && uri.pass.substr(1);
+ self._globalProject = uri.path.substr(lastSlash + 1);
+
+ self._globalServer = self._getGlobalServer(uri);
+
+ self._globalEndpoint =
+ self._globalServer + '/' + path + 'api/' + self._globalProject + '/store/';
+
+ // Reset backoff state since we may be pointing at a
+ // new project/server
+ this._resetBackoff();
+ },
+
+ /*
+ * Wrap code within a context so Raven can capture errors
+ * reliably across domains that is executed immediately.
+ *
+ * @param {object} options A specific set of options for this context [optional]
+ * @param {function} func The callback to be immediately executed within the context
+ * @param {array} args An array of arguments to be called with the callback [optional]
+ */
+ context: function(options, func, args) {
+ if (isFunction(options)) {
+ args = func || [];
+ func = options;
+ options = undefined;
+ }
+
+ return this.wrap(options, func).apply(this, args);
+ },
+
+ /*
+ * Wrap code within a context and returns back a new function to be executed
+ *
+ * @param {object} options A specific set of options for this context [optional]
+ * @param {function} func The function to be wrapped in a new context
+ * @param {function} func A function to call before the try/catch wrapper [optional, private]
+ * @return {function} The newly wrapped functions with a context
+ */
+ wrap: function(options, func, _before) {
+ var self = this;
+ // 1 argument has been passed, and it's not a function
+ // so just return it
+ if (isUndefined(func) && !isFunction(options)) {
+ return options;
+ }
+
+ // options is optional
+ if (isFunction(options)) {
+ func = options;
+ options = undefined;
+ }
+
+ // At this point, we've passed along 2 arguments, and the second one
+ // is not a function either, so we'll just return the second argument.
+ if (!isFunction(func)) {
+ return func;
+ }
+
+ // We don't wanna wrap it twice!
+ try {
+ if (func.__raven__) {
+ return func;
+ }
+
+ // If this has already been wrapped in the past, return that
+ if (func.__raven_wrapper__) {
+ return func.__raven_wrapper__;
+ }
+ } catch (e) {
+ // Just accessing custom props in some Selenium environments
+ // can cause a "Permission denied" exception (see raven-js#495).
+ // Bail on wrapping and return the function as-is (defers to window.onerror).
+ return func;
+ }
+
+ function wrapped() {
+ var args = [],
+ i = arguments.length,
+ deep = !options || (options && options.deep !== false);
+
+ if (_before && isFunction(_before)) {
+ _before.apply(this, arguments);
+ }
+
+ // Recursively wrap all of a function's arguments that are
+ // functions themselves.
+ while (i--) args[i] = deep ? self.wrap(options, arguments[i]) : arguments[i];
+
+ try {
+ // Attempt to invoke user-land function
+ // NOTE: If you are a Sentry user, and you are seeing this stack frame, it
+ // means Raven caught an error invoking your application code. This is
+ // expected behavior and NOT indicative of a bug with Raven.js.
+ return func.apply(this, args);
+ } catch (e) {
+ self._ignoreNextOnError();
+ self.captureException(e, options);
+ throw e;
+ }
+ }
+
+ // copy over properties of the old function
+ for (var property in func) {
+ if (hasKey(func, property)) {
+ wrapped[property] = func[property];
+ }
+ }
+ wrapped.prototype = func.prototype;
+
+ func.__raven_wrapper__ = wrapped;
+ // Signal that this function has been wrapped/filled already
+ // for both debugging and to prevent it to being wrapped/filled twice
+ wrapped.__raven__ = true;
+ wrapped.__orig__ = func;
+
+ return wrapped;
+ },
+
+ /**
+ * Uninstalls the global error handler.
+ *
+ * @return {Raven}
+ */
+ uninstall: function() {
+ TraceKit.report.uninstall();
+
+ this._detachPromiseRejectionHandler();
+ this._unpatchFunctionToString();
+ this._restoreBuiltIns();
+ this._restoreConsole();
+
+ Error.stackTraceLimit = this._originalErrorStackTraceLimit;
+ this._isRavenInstalled = false;
+
+ return this;
+ },
+
+ /**
+ * Callback used for `unhandledrejection` event
+ *
+ * @param {PromiseRejectionEvent} event An object containing
+ * promise: the Promise that was rejected
+ * reason: the value with which the Promise was rejected
+ * @return void
+ */
+ _promiseRejectionHandler: function(event) {
+ this._logDebug('debug', 'Raven caught unhandled promise rejection:', event);
+ this.captureException(event.reason, {
+ extra: {
+ unhandledPromiseRejection: true
+ }
+ });
+ },
+
+ /**
+ * Installs the global promise rejection handler.
+ *
+ * @return {raven}
+ */
+ _attachPromiseRejectionHandler: function() {
+ this._promiseRejectionHandler = this._promiseRejectionHandler.bind(this);
+ _window.addEventListener &&
+ _window.addEventListener('unhandledrejection', this._promiseRejectionHandler);
+ return this;
+ },
+
+ /**
+ * Uninstalls the global promise rejection handler.
+ *
+ * @return {raven}
+ */
+ _detachPromiseRejectionHandler: function() {
+ _window.removeEventListener &&
+ _window.removeEventListener('unhandledrejection', this._promiseRejectionHandler);
+ return this;
+ },
+
+ /**
+ * Manually capture an exception and send it over to Sentry
+ *
+ * @param {error} ex An exception to be logged
+ * @param {object} options A specific set of options for this error [optional]
+ * @return {Raven}
+ */
+ captureException: function(ex, options) {
+ options = objectMerge({trimHeadFrames: 0}, options ? options : {});
+
+ if (isErrorEvent(ex) && ex.error) {
+ // If it is an ErrorEvent with `error` property, extract it to get actual Error
+ ex = ex.error;
+ } else if (isDOMError(ex) || isDOMException(ex)) {
+ // If it is a DOMError or DOMException (which are legacy APIs, but still supported in some browsers)
+ // then we just extract the name and message, as they don't provide anything else
+ // https://developer.mozilla.org/en-US/docs/Web/API/DOMError
+ // https://developer.mozilla.org/en-US/docs/Web/API/DOMException
+ var name = ex.name || (isDOMError(ex) ? 'DOMError' : 'DOMException');
+ var message = ex.message ? name + ': ' + ex.message : name;
+
+ return this.captureMessage(
+ message,
+ objectMerge(options, {
+ // neither DOMError or DOMException provide stack trace and we most likely wont get it this way as well
+ // but it's barely any overhead so we may at least try
+ stacktrace: true,
+ trimHeadFrames: options.trimHeadFrames + 1
+ })
+ );
+ } else if (isError(ex)) {
+ // we have a real Error object
+ ex = ex;
+ } else if (isPlainObject(ex)) {
+ // If it is plain Object, serialize it manually and extract options
+ // This will allow us to group events based on top-level keys
+ // which is much better than creating new group when any key/value change
+ options = this._getCaptureExceptionOptionsFromPlainObject(options, ex);
+ ex = new Error(options.message);
+ } else {
+ // If none of previous checks were valid, then it means that
+ // it's not a DOMError/DOMException
+ // it's not a plain Object
+ // it's not a valid ErrorEvent (one with an error property)
+ // it's not an Error
+ // So bail out and capture it as a simple message:
+ return this.captureMessage(
+ ex,
+ objectMerge(options, {
+ stacktrace: true, // if we fall back to captureMessage, default to attempting a new trace
+ trimHeadFrames: options.trimHeadFrames + 1
+ })
+ );
+ }
+
+ // Store the raw exception object for potential debugging and introspection
+ this._lastCapturedException = ex;
+
+ // TraceKit.report will re-raise any exception passed to it,
+ // which means you have to wrap it in try/catch. Instead, we
+ // can wrap it here and only re-raise if TraceKit.report
+ // raises an exception different from the one we asked to
+ // report on.
+ try {
+ var stack = TraceKit.computeStackTrace(ex);
+ this._handleStackInfo(stack, options);
+ } catch (ex1) {
+ if (ex !== ex1) {
+ throw ex1;
+ }
+ }
+
+ return this;
+ },
+
+ _getCaptureExceptionOptionsFromPlainObject: function(currentOptions, ex) {
+ var exKeys = Object.keys(ex).sort();
+ var options = objectMerge(currentOptions, {
+ message:
+ 'Non-Error exception captured with keys: ' + serializeKeysForMessage(exKeys),
+ fingerprint: [md5(exKeys)],
+ extra: currentOptions.extra || {}
+ });
+ options.extra.__serialized__ = serializeException(ex);
+
+ return options;
+ },
+
+ /*
+ * Manually send a message to Sentry
+ *
+ * @param {string} msg A plain message to be captured in Sentry
+ * @param {object} options A specific set of options for this message [optional]
+ * @return {Raven}
+ */
+ captureMessage: function(msg, options) {
+ // config() automagically converts ignoreErrors from a list to a RegExp so we need to test for an
+ // early call; we'll error on the side of logging anything called before configuration since it's
+ // probably something you should see:
+ if (
+ !!this._globalOptions.ignoreErrors.test &&
+ this._globalOptions.ignoreErrors.test(msg)
+ ) {
+ return;
+ }
+
+ options = options || {};
+ msg = msg + ''; // Make sure it's actually a string
+
+ var data = objectMerge(
+ {
+ message: msg
+ },
+ options
+ );
+
+ var ex;
+ // Generate a "synthetic" stack trace from this point.
+ // NOTE: If you are a Sentry user, and you are seeing this stack frame, it is NOT indicative
+ // of a bug with Raven.js. Sentry generates synthetic traces either by configuration,
+ // or if it catches a thrown object without a "stack" property.
+ try {
+ throw new Error(msg);
+ } catch (ex1) {
+ ex = ex1;
+ }
+
+ // null exception name so `Error` isn't prefixed to msg
+ ex.name = null;
+ var stack = TraceKit.computeStackTrace(ex);
+
+ // stack[0] is `throw new Error(msg)` call itself, we are interested in the frame that was just before that, stack[1]
+ var initialCall = isArray(stack.stack) && stack.stack[1];
+
+ // if stack[1] is `Raven.captureException`, it means that someone passed a string to it and we redirected that call
+ // to be handled by `captureMessage`, thus `initialCall` is the 3rd one, not 2nd
+ // initialCall => captureException(string) => captureMessage(string)
+ if (initialCall && initialCall.func === 'Raven.captureException') {
+ initialCall = stack.stack[2];
+ }
+
+ var fileurl = (initialCall && initialCall.url) || '';
+
+ if (
+ !!this._globalOptions.ignoreUrls.test &&
+ this._globalOptions.ignoreUrls.test(fileurl)
+ ) {
+ return;
+ }
+
+ if (
+ !!this._globalOptions.whitelistUrls.test &&
+ !this._globalOptions.whitelistUrls.test(fileurl)
+ ) {
+ return;
+ }
+
+ if (this._globalOptions.stacktrace || (options && options.stacktrace)) {
+ // fingerprint on msg, not stack trace (legacy behavior, could be revisited)
+ data.fingerprint = data.fingerprint == null ? msg : data.fingerprint;
+
+ options = objectMerge(
+ {
+ trimHeadFrames: 0
+ },
+ options
+ );
+ // Since we know this is a synthetic trace, the top frame (this function call)
+ // MUST be from Raven.js, so mark it for trimming
+ // We add to the trim counter so that callers can choose to trim extra frames, such
+ // as utility functions.
+ options.trimHeadFrames += 1;
+
+ var frames = this._prepareFrames(stack, options);
+ data.stacktrace = {
+ // Sentry expects frames oldest to newest
+ frames: frames.reverse()
+ };
+ }
+
+ // Make sure that fingerprint is always wrapped in an array
+ if (data.fingerprint) {
+ data.fingerprint = isArray(data.fingerprint)
+ ? data.fingerprint
+ : [data.fingerprint];
+ }
+
+ // Fire away!
+ this._send(data);
+
+ return this;
+ },
+
+ captureBreadcrumb: function(obj) {
+ var crumb = objectMerge(
+ {
+ timestamp: now() / 1000
+ },
+ obj
+ );
+
+ if (isFunction(this._globalOptions.breadcrumbCallback)) {
+ var result = this._globalOptions.breadcrumbCallback(crumb);
+
+ if (isObject(result) && !isEmptyObject(result)) {
+ crumb = result;
+ } else if (result === false) {
+ return this;
+ }
+ }
+
+ this._breadcrumbs.push(crumb);
+ if (this._breadcrumbs.length > this._globalOptions.maxBreadcrumbs) {
+ this._breadcrumbs.shift();
+ }
+ return this;
+ },
+
+ addPlugin: function(plugin /*arg1, arg2, ... argN*/) {
+ var pluginArgs = [].slice.call(arguments, 1);
+
+ this._plugins.push([plugin, pluginArgs]);
+ if (this._isRavenInstalled) {
+ this._drainPlugins();
+ }
+
+ return this;
+ },
+
+ /*
+ * Set/clear a user to be sent along with the payload.
+ *
+ * @param {object} user An object representing user data [optional]
+ * @return {Raven}
+ */
+ setUserContext: function(user) {
+ // Intentionally do not merge here since that's an unexpected behavior.
+ this._globalContext.user = user;
+
+ return this;
+ },
+
+ /*
+ * Merge extra attributes to be sent along with the payload.
+ *
+ * @param {object} extra An object representing extra data [optional]
+ * @return {Raven}
+ */
+ setExtraContext: function(extra) {
+ this._mergeContext('extra', extra);
+
+ return this;
+ },
+
+ /*
+ * Merge tags to be sent along with the payload.
+ *
+ * @param {object} tags An object representing tags [optional]
+ * @return {Raven}
+ */
+ setTagsContext: function(tags) {
+ this._mergeContext('tags', tags);
+
+ return this;
+ },
+
+ /*
+ * Clear all of the context.
+ *
+ * @return {Raven}
+ */
+ clearContext: function() {
+ this._globalContext = {};
+
+ return this;
+ },
+
+ /*
+ * Get a copy of the current context. This cannot be mutated.
+ *
+ * @return {object} copy of context
+ */
+ getContext: function() {
+ // lol javascript
+ return JSON.parse(stringify(this._globalContext));
+ },
+
+ /*
+ * Set environment of application
+ *
+ * @param {string} environment Typically something like 'production'.
+ * @return {Raven}
+ */
+ setEnvironment: function(environment) {
+ this._globalOptions.environment = environment;
+
+ return this;
+ },
+
+ /*
+ * Set release version of application
+ *
+ * @param {string} release Typically something like a git SHA to identify version
+ * @return {Raven}
+ */
+ setRelease: function(release) {
+ this._globalOptions.release = release;
+
+ return this;
+ },
+
+ /*
+ * Set the dataCallback option
+ *
+ * @param {function} callback The callback to run which allows the
+ * data blob to be mutated before sending
+ * @return {Raven}
+ */
+ setDataCallback: function(callback) {
+ var original = this._globalOptions.dataCallback;
+ this._globalOptions.dataCallback = keepOriginalCallback(original, callback);
+ return this;
+ },
+
+ /*
+ * Set the breadcrumbCallback option
+ *
+ * @param {function} callback The callback to run which allows filtering
+ * or mutating breadcrumbs
+ * @return {Raven}
+ */
+ setBreadcrumbCallback: function(callback) {
+ var original = this._globalOptions.breadcrumbCallback;
+ this._globalOptions.breadcrumbCallback = keepOriginalCallback(original, callback);
+ return this;
+ },
+
+ /*
+ * Set the shouldSendCallback option
+ *
+ * @param {function} callback The callback to run which allows
+ * introspecting the blob before sending
+ * @return {Raven}
+ */
+ setShouldSendCallback: function(callback) {
+ var original = this._globalOptions.shouldSendCallback;
+ this._globalOptions.shouldSendCallback = keepOriginalCallback(original, callback);
+ return this;
+ },
+
+ /**
+ * Override the default HTTP transport mechanism that transmits data
+ * to the Sentry server.
+ *
+ * @param {function} transport Function invoked instead of the default
+ * `makeRequest` handler.
+ *
+ * @return {Raven}
+ */
+ setTransport: function(transport) {
+ this._globalOptions.transport = transport;
+
+ return this;
+ },
+
+ /*
+ * Get the latest raw exception that was captured by Raven.
+ *
+ * @return {error}
+ */
+ lastException: function() {
+ return this._lastCapturedException;
+ },
+
+ /*
+ * Get the last event id
+ *
+ * @return {string}
+ */
+ lastEventId: function() {
+ return this._lastEventId;
+ },
+
+ /*
+ * Determine if Raven is setup and ready to go.
+ *
+ * @return {boolean}
+ */
+ isSetup: function() {
+ if (!this._hasJSON) return false; // needs JSON support
+ if (!this._globalServer) {
+ if (!this.ravenNotConfiguredError) {
+ this.ravenNotConfiguredError = true;
+ this._logDebug('error', 'Error: Raven has not been configured.');
+ }
+ return false;
+ }
+ return true;
+ },
+
+ afterLoad: function() {
+ // TODO: remove window dependence?
+
+ // Attempt to initialize Raven on load
+ var RavenConfig = _window.RavenConfig;
+ if (RavenConfig) {
+ this.config(RavenConfig.dsn, RavenConfig.config).install();
+ }
+ },
+
+ showReportDialog: function(options) {
+ if (
+ !_document // doesn't work without a document (React native)
+ )
+ return;
+
+ options = options || {};
+
+ var lastEventId = options.eventId || this.lastEventId();
+ if (!lastEventId) {
+ throw new RavenConfigError('Missing eventId');
+ }
+
+ var dsn = options.dsn || this._dsn;
+ if (!dsn) {
+ throw new RavenConfigError('Missing DSN');
+ }
+
+ var encode = encodeURIComponent;
+ var qs = '';
+ qs += '?eventId=' + encode(lastEventId);
+ qs += '&dsn=' + encode(dsn);
+
+ var user = options.user || this._globalContext.user;
+ if (user) {
+ if (user.name) qs += '&name=' + encode(user.name);
+ if (user.email) qs += '&email=' + encode(user.email);
+ }
+
+ var globalServer = this._getGlobalServer(this._parseDSN(dsn));
+
+ var script = _document.createElement('script');
+ script.async = true;
+ script.src = globalServer + '/api/embed/error-page/' + qs;
+ (_document.head || _document.body).appendChild(script);
+ },
+
+ /**** Private functions ****/
+ _ignoreNextOnError: function() {
+ var self = this;
+ this._ignoreOnError += 1;
+ setTimeout(function() {
+ // onerror should trigger before setTimeout
+ self._ignoreOnError -= 1;
+ });
+ },
+
+ _triggerEvent: function(eventType, options) {
+ // NOTE: `event` is a native browser thing, so let's avoid conflicting wiht it
+ var evt, key;
+
+ if (!this._hasDocument) return;
+
+ options = options || {};
+
+ eventType = 'raven' + eventType.substr(0, 1).toUpperCase() + eventType.substr(1);
+
+ if (_document.createEvent) {
+ evt = _document.createEvent('HTMLEvents');
+ evt.initEvent(eventType, true, true);
+ } else {
+ evt = _document.createEventObject();
+ evt.eventType = eventType;
+ }
+
+ for (key in options)
+ if (hasKey(options, key)) {
+ evt[key] = options[key];
+ }
+
+ if (_document.createEvent) {
+ // IE9 if standards
+ _document.dispatchEvent(evt);
+ } else {
+ // IE8 regardless of Quirks or Standards
+ // IE9 if quirks
+ try {
+ _document.fireEvent('on' + evt.eventType.toLowerCase(), evt);
+ } catch (e) {
+ // Do nothing
+ }
+ }
+ },
+
+ /**
+ * Wraps addEventListener to capture UI breadcrumbs
+ * @param evtName the event name (e.g. "click")
+ * @returns {Function}
+ * @private
+ */
+ _breadcrumbEventHandler: function(evtName) {
+ var self = this;
+ return function(evt) {
+ // reset keypress timeout; e.g. triggering a 'click' after
+ // a 'keypress' will reset the keypress debounce so that a new
+ // set of keypresses can be recorded
+ self._keypressTimeout = null;
+
+ // It's possible this handler might trigger multiple times for the same
+ // event (e.g. event propagation through node ancestors). Ignore if we've
+ // already captured the event.
+ if (self._lastCapturedEvent === evt) return;
+
+ self._lastCapturedEvent = evt;
+
+ // try/catch both:
+ // - accessing evt.target (see getsentry/raven-js#838, #768)
+ // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly
+ // can throw an exception in some circumstances.
+ var target;
+ try {
+ target = htmlTreeAsString(evt.target);
+ } catch (e) {
+ target = '';
+ }
+
+ self.captureBreadcrumb({
+ category: 'ui.' + evtName, // e.g. ui.click, ui.input
+ message: target
+ });
+ };
+ },
+
+ /**
+ * Wraps addEventListener to capture keypress UI events
+ * @returns {Function}
+ * @private
+ */
+ _keypressEventHandler: function() {
+ var self = this,
+ debounceDuration = 1000; // milliseconds
+
+ // TODO: if somehow user switches keypress target before
+ // debounce timeout is triggered, we will only capture
+ // a single breadcrumb from the FIRST target (acceptable?)
+ return function(evt) {
+ var target;
+ try {
+ target = evt.target;
+ } catch (e) {
+ // just accessing event properties can throw an exception in some rare circumstances
+ // see: https://github.com/getsentry/raven-js/issues/838
+ return;
+ }
+ var tagName = target && target.tagName;
+
+ // only consider keypress events on actual input elements
+ // this will disregard keypresses targeting body (e.g. tabbing
+ // through elements, hotkeys, etc)
+ if (
+ !tagName ||
+ (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && !target.isContentEditable)
+ )
+ return;
+
+ // record first keypress in a series, but ignore subsequent
+ // keypresses until debounce clears
+ var timeout = self._keypressTimeout;
+ if (!timeout) {
+ self._breadcrumbEventHandler('input')(evt);
+ }
+ clearTimeout(timeout);
+ self._keypressTimeout = setTimeout(function() {
+ self._keypressTimeout = null;
+ }, debounceDuration);
+ };
+ },
+
+ /**
+ * Captures a breadcrumb of type "navigation", normalizing input URLs
+ * @param to the originating URL
+ * @param from the target URL
+ * @private
+ */
+ _captureUrlChange: function(from, to) {
+ var parsedLoc = parseUrl(this._location.href);
+ var parsedTo = parseUrl(to);
+ var parsedFrom = parseUrl(from);
+
+ // because onpopstate only tells you the "new" (to) value of location.href, and
+ // not the previous (from) value, we need to track the value of the current URL
+ // state ourselves
+ this._lastHref = to;
+
+ // Use only the path component of the URL if the URL matches the current
+ // document (almost all the time when using pushState)
+ if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host)
+ to = parsedTo.relative;
+ if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host)
+ from = parsedFrom.relative;
+
+ this.captureBreadcrumb({
+ category: 'navigation',
+ data: {
+ to: to,
+ from: from
+ }
+ });
+ },
+
+ _patchFunctionToString: function() {
+ var self = this;
+ self._originalFunctionToString = Function.prototype.toString;
+ // eslint-disable-next-line no-extend-native
+ Function.prototype.toString = function() {
+ if (typeof this === 'function' && this.__raven__) {
+ return self._originalFunctionToString.apply(this.__orig__, arguments);
+ }
+ return self._originalFunctionToString.apply(this, arguments);
+ };
+ },
+
+ _unpatchFunctionToString: function() {
+ if (this._originalFunctionToString) {
+ // eslint-disable-next-line no-extend-native
+ Function.prototype.toString = this._originalFunctionToString;
+ }
+ },
+
+ /**
+ * Wrap timer functions and event targets to catch errors and provide
+ * better metadata.
+ */
+ _instrumentTryCatch: function() {
+ var self = this;
+
+ var wrappedBuiltIns = self._wrappedBuiltIns;
+
+ function wrapTimeFn(orig) {
+ return function(fn, t) {
+ // preserve arity
+ // Make a copy of the arguments to prevent deoptimization
+ // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments
+ var args = new Array(arguments.length);
+ for (var i = 0; i < args.length; ++i) {
+ args[i] = arguments[i];
+ }
+ var originalCallback = args[0];
+ if (isFunction(originalCallback)) {
+ args[0] = self.wrap(originalCallback);
+ }
+
+ // IE < 9 doesn't support .call/.apply on setInterval/setTimeout, but it
+ // also supports only two arguments and doesn't care what this is, so we
+ // can just call the original function directly.
+ if (orig.apply) {
+ return orig.apply(this, args);
+ } else {
+ return orig(args[0], args[1]);
+ }
+ };
+ }
+
+ var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;
+
+ function wrapEventTarget(global) {
+ var proto = _window[global] && _window[global].prototype;
+ if (proto && proto.hasOwnProperty && proto.hasOwnProperty('addEventListener')) {
+ fill(
+ proto,
+ 'addEventListener',
+ function(orig) {
+ return function(evtName, fn, capture, secure) {
+ // preserve arity
+ try {
+ if (fn && fn.handleEvent) {
+ fn.handleEvent = self.wrap(fn.handleEvent);
+ }
+ } catch (err) {
+ // can sometimes get 'Permission denied to access property "handle Event'
+ }
+
+ // More breadcrumb DOM capture ... done here and not in `_instrumentBreadcrumbs`
+ // so that we don't have more than one wrapper function
+ var before, clickHandler, keypressHandler;
+
+ if (
+ autoBreadcrumbs &&
+ autoBreadcrumbs.dom &&
+ (global === 'EventTarget' || global === 'Node')
+ ) {
+ // NOTE: generating multiple handlers per addEventListener invocation, should
+ // revisit and verify we can just use one (almost certainly)
+ clickHandler = self._breadcrumbEventHandler('click');
+ keypressHandler = self._keypressEventHandler();
+ before = function(evt) {
+ // need to intercept every DOM event in `before` argument, in case that
+ // same wrapped method is re-used for different events (e.g. mousemove THEN click)
+ // see #724
+ if (!evt) return;
+
+ var eventType;
+ try {
+ eventType = evt.type;
+ } catch (e) {
+ // just accessing event properties can throw an exception in some rare circumstances
+ // see: https://github.com/getsentry/raven-js/issues/838
+ return;
+ }
+ if (eventType === 'click') return clickHandler(evt);
+ else if (eventType === 'keypress') return keypressHandler(evt);
+ };
+ }
+ return orig.call(
+ this,
+ evtName,
+ self.wrap(fn, undefined, before),
+ capture,
+ secure
+ );
+ };
+ },
+ wrappedBuiltIns
+ );
+ fill(
+ proto,
+ 'removeEventListener',
+ function(orig) {
+ return function(evt, fn, capture, secure) {
+ try {
+ fn = fn && (fn.__raven_wrapper__ ? fn.__raven_wrapper__ : fn);
+ } catch (e) {
+ // ignore, accessing __raven_wrapper__ will throw in some Selenium environments
+ }
+ return orig.call(this, evt, fn, capture, secure);
+ };
+ },
+ wrappedBuiltIns
+ );
+ }
+ }
+
+ fill(_window, 'setTimeout', wrapTimeFn, wrappedBuiltIns);
+ fill(_window, 'setInterval', wrapTimeFn, wrappedBuiltIns);
+ if (_window.requestAnimationFrame) {
+ fill(
+ _window,
+ 'requestAnimationFrame',
+ function(orig) {
+ return function(cb) {
+ return orig(self.wrap(cb));
+ };
+ },
+ wrappedBuiltIns
+ );
+ }
+
+ // event targets borrowed from bugsnag-js:
+ // https://github.com/bugsnag/bugsnag-js/blob/master/src/bugsnag.js#L666
+ var eventTargets = [
+ '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'
+ ];
+ for (var i = 0; i < eventTargets.length; i++) {
+ wrapEventTarget(eventTargets[i]);
+ }
+ },
+
+ /**
+ * Instrument browser built-ins w/ breadcrumb capturing
+ * - XMLHttpRequests
+ * - DOM interactions (click/typing)
+ * - window.location changes
+ * - console
+ *
+ * Can be disabled or individually configured via the `autoBreadcrumbs` config option
+ */
+ _instrumentBreadcrumbs: function() {
+ var self = this;
+ var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;
+
+ var wrappedBuiltIns = self._wrappedBuiltIns;
+
+ function wrapProp(prop, xhr) {
+ if (prop in xhr && isFunction(xhr[prop])) {
+ fill(xhr, prop, function(orig) {
+ return self.wrap(orig);
+ }); // intentionally don't track filled methods on XHR instances
+ }
+ }
+
+ if (autoBreadcrumbs.xhr && 'XMLHttpRequest' in _window) {
+ var xhrproto = _window.XMLHttpRequest && _window.XMLHttpRequest.prototype;
+ fill(
+ xhrproto,
+ 'open',
+ function(origOpen) {
+ return function(method, url) {
+ // preserve arity
+
+ // if Sentry key appears in URL, don't capture
+ if (isString(url) && url.indexOf(self._globalKey) === -1) {
+ this.__raven_xhr = {
+ method: method,
+ url: url,
+ status_code: null
+ };
+ }
+
+ return origOpen.apply(this, arguments);
+ };
+ },
+ wrappedBuiltIns
+ );
+
+ fill(
+ xhrproto,
+ 'send',
+ function(origSend) {
+ return function() {
+ // preserve arity
+ var xhr = this;
+
+ function onreadystatechangeHandler() {
+ if (xhr.__raven_xhr && xhr.readyState === 4) {
+ try {
+ // touching statusCode in some platforms throws
+ // an exception
+ xhr.__raven_xhr.status_code = xhr.status;
+ } catch (e) {
+ /* do nothing */
+ }
+
+ self.captureBreadcrumb({
+ type: 'http',
+ category: 'xhr',
+ data: xhr.__raven_xhr
+ });
+ }
+ }
+
+ var props = ['onload', 'onerror', 'onprogress'];
+ for (var j = 0; j < props.length; j++) {
+ wrapProp(props[j], xhr);
+ }
+
+ if ('onreadystatechange' in xhr && isFunction(xhr.onreadystatechange)) {
+ fill(
+ xhr,
+ 'onreadystatechange',
+ function(orig) {
+ return self.wrap(orig, undefined, onreadystatechangeHandler);
+ } /* intentionally don't track this instrumentation */
+ );
+ } else {
+ // if onreadystatechange wasn't actually set by the page on this xhr, we
+ // are free to set our own and capture the breadcrumb
+ xhr.onreadystatechange = onreadystatechangeHandler;
+ }
+
+ return origSend.apply(this, arguments);
+ };
+ },
+ wrappedBuiltIns
+ );
+ }
+
+ if (autoBreadcrumbs.xhr && supportsFetch()) {
+ fill(
+ _window,
+ 'fetch',
+ function(origFetch) {
+ return function() {
+ // preserve arity
+ // Make a copy of the arguments to prevent deoptimization
+ // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments
+ var args = new Array(arguments.length);
+ for (var i = 0; i < args.length; ++i) {
+ args[i] = arguments[i];
+ }
+
+ var fetchInput = args[0];
+ var method = 'GET';
+ var url;
+
+ if (typeof fetchInput === 'string') {
+ url = fetchInput;
+ } else if ('Request' in _window && fetchInput instanceof _window.Request) {
+ url = fetchInput.url;
+ if (fetchInput.method) {
+ method = fetchInput.method;
+ }
+ } else {
+ url = '' + fetchInput;
+ }
+
+ // if Sentry key appears in URL, don't capture, as it's our own request
+ if (url.indexOf(self._globalKey) !== -1) {
+ return origFetch.apply(this, args);
+ }
+
+ if (args[1] && args[1].method) {
+ method = args[1].method;
+ }
+
+ var fetchData = {
+ method: method,
+ url: url,
+ status_code: null
+ };
+
+ return origFetch
+ .apply(this, args)
+ .then(function(response) {
+ fetchData.status_code = response.status;
+
+ self.captureBreadcrumb({
+ type: 'http',
+ category: 'fetch',
+ data: fetchData
+ });
+
+ return response;
+ })
+ ['catch'](function(err) {
+ // if there is an error performing the request
+ self.captureBreadcrumb({
+ type: 'http',
+ category: 'fetch',
+ data: fetchData,
+ level: 'error'
+ });
+
+ throw err;
+ });
+ };
+ },
+ wrappedBuiltIns
+ );
+ }
+
+ // Capture breadcrumbs from any click that is unhandled / bubbled up all the way
+ // to the document. Do this before we instrument addEventListener.
+ if (autoBreadcrumbs.dom && this._hasDocument) {
+ if (_document.addEventListener) {
+ _document.addEventListener('click', self._breadcrumbEventHandler('click'), false);
+ _document.addEventListener('keypress', self._keypressEventHandler(), false);
+ } else if (_document.attachEvent) {
+ // IE8 Compatibility
+ _document.attachEvent('onclick', self._breadcrumbEventHandler('click'));
+ _document.attachEvent('onkeypress', self._keypressEventHandler());
+ }
+ }
+
+ // record navigation (URL) changes
+ // NOTE: in Chrome App environment, touching history.pushState, *even inside
+ // a try/catch block*, will cause Chrome to output an error to console.error
+ // borrowed from: https://github.com/angular/angular.js/pull/13945/files
+ var chrome = _window.chrome;
+ var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime;
+ var hasPushAndReplaceState =
+ !isChromePackagedApp &&
+ _window.history &&
+ _window.history.pushState &&
+ _window.history.replaceState;
+ if (autoBreadcrumbs.location && hasPushAndReplaceState) {
+ // TODO: remove onpopstate handler on uninstall()
+ var oldOnPopState = _window.onpopstate;
+ _window.onpopstate = function() {
+ var currentHref = self._location.href;
+ self._captureUrlChange(self._lastHref, currentHref);
+
+ if (oldOnPopState) {
+ return oldOnPopState.apply(this, arguments);
+ }
+ };
+
+ var historyReplacementFunction = function(origHistFunction) {
+ // note history.pushState.length is 0; intentionally not declaring
+ // params to preserve 0 arity
+ return function(/* state, title, url */) {
+ var url = arguments.length > 2 ? arguments[2] : undefined;
+
+ // url argument is optional
+ if (url) {
+ // coerce to string (this is what pushState does)
+ self._captureUrlChange(self._lastHref, url + '');
+ }
+
+ return origHistFunction.apply(this, arguments);
+ };
+ };
+
+ fill(_window.history, 'pushState', historyReplacementFunction, wrappedBuiltIns);
+ fill(_window.history, 'replaceState', historyReplacementFunction, wrappedBuiltIns);
+ }
+
+ if (autoBreadcrumbs.console && 'console' in _window && console.log) {
+ // console
+ var consoleMethodCallback = function(msg, data) {
+ self.captureBreadcrumb({
+ message: msg,
+ level: data.level,
+ category: 'console'
+ });
+ };
+
+ each(['debug', 'info', 'warn', 'error', 'log'], function(_, level) {
+ wrapConsoleMethod(console, level, consoleMethodCallback);
+ });
+ }
+ },
+
+ _restoreBuiltIns: function() {
+ // restore any wrapped builtins
+ var builtin;
+ while (this._wrappedBuiltIns.length) {
+ builtin = this._wrappedBuiltIns.shift();
+
+ var obj = builtin[0],
+ name = builtin[1],
+ orig = builtin[2];
+
+ obj[name] = orig;
+ }
+ },
+
+ _restoreConsole: function() {
+ // eslint-disable-next-line guard-for-in
+ for (var method in this._originalConsoleMethods) {
+ this._originalConsole[method] = this._originalConsoleMethods[method];
+ }
+ },
+
+ _drainPlugins: function() {
+ var self = this;
+
+ // FIX ME TODO
+ each(this._plugins, function(_, plugin) {
+ var installer = plugin[0];
+ var args = plugin[1];
+ installer.apply(self, [self].concat(args));
+ });
+ },
+
+ _parseDSN: function(str) {
+ var m = dsnPattern.exec(str),
+ dsn = {},
+ i = 7;
+
+ try {
+ while (i--) dsn[dsnKeys[i]] = m[i] || '';
+ } catch (e) {
+ throw new RavenConfigError('Invalid DSN: ' + str);
+ }
+
+ if (dsn.pass && !this._globalOptions.allowSecretKey) {
+ throw new RavenConfigError(
+ 'Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key'
+ );
+ }
+
+ return dsn;
+ },
+
+ _getGlobalServer: function(uri) {
+ // assemble the endpoint from the uri pieces
+ var globalServer = '//' + uri.host + (uri.port ? ':' + uri.port : '');
+
+ if (uri.protocol) {
+ globalServer = uri.protocol + ':' + globalServer;
+ }
+ return globalServer;
+ },
+
+ _handleOnErrorStackInfo: function() {
+ // if we are intentionally ignoring errors via onerror, bail out
+ if (!this._ignoreOnError) {
+ this._handleStackInfo.apply(this, arguments);
+ }
+ },
+
+ _handleStackInfo: function(stackInfo, options) {
+ var frames = this._prepareFrames(stackInfo, options);
+
+ this._triggerEvent('handle', {
+ stackInfo: stackInfo,
+ options: options
+ });
+
+ this._processException(
+ stackInfo.name,
+ stackInfo.message,
+ stackInfo.url,
+ stackInfo.lineno,
+ frames,
+ options
+ );
+ },
+
+ _prepareFrames: function(stackInfo, options) {
+ var self = this;
+ var frames = [];
+ if (stackInfo.stack && stackInfo.stack.length) {
+ each(stackInfo.stack, function(i, stack) {
+ var frame = self._normalizeFrame(stack, stackInfo.url);
+ if (frame) {
+ frames.push(frame);
+ }
+ });
+
+ // e.g. frames captured via captureMessage throw
+ if (options && options.trimHeadFrames) {
+ for (var j = 0; j < options.trimHeadFrames && j < frames.length; j++) {
+ frames[j].in_app = false;
+ }
+ }
+ }
+ frames = frames.slice(0, this._globalOptions.stackTraceLimit);
+ return frames;
+ },
+
+ _normalizeFrame: function(frame, stackInfoUrl) {
+ // normalize the frames data
+ var normalized = {
+ filename: frame.url,
+ lineno: frame.line,
+ colno: frame.column,
+ function: frame.func || '?'
+ };
+
+ // Case when we don't have any information about the error
+ // E.g. throwing a string or raw object, instead of an `Error` in Firefox
+ // Generating synthetic error doesn't add any value here
+ //
+ // We should probably somehow let a user know that they should fix their code
+ if (!frame.url) {
+ normalized.filename = stackInfoUrl; // fallback to whole stacks url from onerror handler
+ }
+
+ normalized.in_app = !// determine if an exception came from outside of our app
+ // first we check the global includePaths list.
+ (
+ (!!this._globalOptions.includePaths.test &&
+ !this._globalOptions.includePaths.test(normalized.filename)) ||
+ // Now we check for fun, if the function name is Raven or TraceKit
+ /(Raven|TraceKit)\./.test(normalized['function']) ||
+ // finally, we do a last ditch effort and check for raven.min.js
+ /raven\.(min\.)?js$/.test(normalized.filename)
+ );
+
+ return normalized;
+ },
+
+ _processException: function(type, message, fileurl, lineno, frames, options) {
+ var prefixedMessage = (type ? type + ': ' : '') + (message || '');
+ if (
+ !!this._globalOptions.ignoreErrors.test &&
+ (this._globalOptions.ignoreErrors.test(message) ||
+ this._globalOptions.ignoreErrors.test(prefixedMessage))
+ ) {
+ return;
+ }
+
+ var stacktrace;
+
+ if (frames && frames.length) {
+ fileurl = frames[0].filename || fileurl;
+ // Sentry expects frames oldest to newest
+ // and JS sends them as newest to oldest
+ frames.reverse();
+ stacktrace = {frames: frames};
+ } else if (fileurl) {
+ stacktrace = {
+ frames: [
+ {
+ filename: fileurl,
+ lineno: lineno,
+ in_app: true
+ }
+ ]
+ };
+ }
+
+ if (
+ !!this._globalOptions.ignoreUrls.test &&
+ this._globalOptions.ignoreUrls.test(fileurl)
+ ) {
+ return;
+ }
+
+ if (
+ !!this._globalOptions.whitelistUrls.test &&
+ !this._globalOptions.whitelistUrls.test(fileurl)
+ ) {
+ return;
+ }
+
+ var data = objectMerge(
+ {
+ // sentry.interfaces.Exception
+ exception: {
+ values: [
+ {
+ type: type,
+ value: message,
+ stacktrace: stacktrace
+ }
+ ]
+ },
+ transaction: fileurl
+ },
+ options
+ );
+
+ // Fire away!
+ this._send(data);
+ },
+
+ _trimPacket: function(data) {
+ // For now, we only want to truncate the two different messages
+ // but this could/should be expanded to just trim everything
+ var max = this._globalOptions.maxMessageLength;
+ if (data.message) {
+ data.message = truncate(data.message, max);
+ }
+ if (data.exception) {
+ var exception = data.exception.values[0];
+ exception.value = truncate(exception.value, max);
+ }
+
+ var request = data.request;
+ if (request) {
+ if (request.url) {
+ request.url = truncate(request.url, this._globalOptions.maxUrlLength);
+ }
+ if (request.Referer) {
+ request.Referer = truncate(request.Referer, this._globalOptions.maxUrlLength);
+ }
+ }
+
+ if (data.breadcrumbs && data.breadcrumbs.values)
+ this._trimBreadcrumbs(data.breadcrumbs);
+
+ return data;
+ },
+
+ /**
+ * Truncate breadcrumb values (right now just URLs)
+ */
+ _trimBreadcrumbs: function(breadcrumbs) {
+ // known breadcrumb properties with urls
+ // TODO: also consider arbitrary prop values that start with (https?)?://
+ var urlProps = ['to', 'from', 'url'],
+ urlProp,
+ crumb,
+ data;
+
+ for (var i = 0; i < breadcrumbs.values.length; ++i) {
+ crumb = breadcrumbs.values[i];
+ if (
+ !crumb.hasOwnProperty('data') ||
+ !isObject(crumb.data) ||
+ objectFrozen(crumb.data)
+ )
+ continue;
+
+ data = objectMerge({}, crumb.data);
+ for (var j = 0; j < urlProps.length; ++j) {
+ urlProp = urlProps[j];
+ if (data.hasOwnProperty(urlProp) && data[urlProp]) {
+ data[urlProp] = truncate(data[urlProp], this._globalOptions.maxUrlLength);
+ }
+ }
+ breadcrumbs.values[i].data = data;
+ }
+ },
+
+ _getHttpData: function() {
+ if (!this._hasNavigator && !this._hasDocument) return;
+ var httpData = {};
+
+ if (this._hasNavigator && _navigator.userAgent) {
+ httpData.headers = {
+ 'User-Agent': _navigator.userAgent
+ };
+ }
+
+ // Check in `window` instead of `document`, as we may be in ServiceWorker environment
+ if (_window.location && _window.location.href) {
+ httpData.url = _window.location.href;
+ }
+
+ if (this._hasDocument && _document.referrer) {
+ if (!httpData.headers) httpData.headers = {};
+ httpData.headers.Referer = _document.referrer;
+ }
+
+ return httpData;
+ },
+
+ _resetBackoff: function() {
+ this._backoffDuration = 0;
+ this._backoffStart = null;
+ },
+
+ _shouldBackoff: function() {
+ return this._backoffDuration && now() - this._backoffStart < this._backoffDuration;
+ },
+
+ /**
+ * Returns true if the in-process data payload matches the signature
+ * of the previously-sent data
+ *
+ * NOTE: This has to be done at this level because TraceKit can generate
+ * data from window.onerror WITHOUT an exception object (IE8, IE9,
+ * other old browsers). This can take the form of an "exception"
+ * data object with a single frame (derived from the onerror args).
+ */
+ _isRepeatData: function(current) {
+ var last = this._lastData;
+
+ if (
+ !last ||
+ current.message !== last.message || // defined for captureMessage
+ current.transaction !== last.transaction // defined for captureException/onerror
+ )
+ return false;
+
+ // Stacktrace interface (i.e. from captureMessage)
+ if (current.stacktrace || last.stacktrace) {
+ return isSameStacktrace(current.stacktrace, last.stacktrace);
+ } else if (current.exception || last.exception) {
+ // Exception interface (i.e. from captureException/onerror)
+ return isSameException(current.exception, last.exception);
+ }
+
+ return true;
+ },
+
+ _setBackoffState: function(request) {
+ // If we are already in a backoff state, don't change anything
+ if (this._shouldBackoff()) {
+ return;
+ }
+
+ var status = request.status;
+
+ // 400 - project_id doesn't exist or some other fatal
+ // 401 - invalid/revoked dsn
+ // 429 - too many requests
+ if (!(status === 400 || status === 401 || status === 429)) return;
+
+ var retry;
+ try {
+ // If Retry-After is not in Access-Control-Expose-Headers, most
+ // browsers will throw an exception trying to access it
+ if (supportsFetch()) {
+ retry = request.headers.get('Retry-After');
+ } else {
+ retry = request.getResponseHeader('Retry-After');
+ }
+
+ // Retry-After is returned in seconds
+ retry = parseInt(retry, 10) * 1000;
+ } catch (e) {
+ /* eslint no-empty:0 */
+ }
+
+ this._backoffDuration = retry
+ ? // If Sentry server returned a Retry-After value, use it
+ retry
+ : // Otherwise, double the last backoff duration (starts at 1 sec)
+ this._backoffDuration * 2 || 1000;
+
+ this._backoffStart = now();
+ },
+
+ _send: function(data) {
+ var globalOptions = this._globalOptions;
+
+ var baseData = {
+ project: this._globalProject,
+ logger: globalOptions.logger,
+ platform: 'javascript'
+ },
+ httpData = this._getHttpData();
+
+ if (httpData) {
+ baseData.request = httpData;
+ }
+
+ // HACK: delete `trimHeadFrames` to prevent from appearing in outbound payload
+ if (data.trimHeadFrames) delete data.trimHeadFrames;
+
+ data = objectMerge(baseData, data);
+
+ // Merge in the tags and extra separately since objectMerge doesn't handle a deep merge
+ data.tags = objectMerge(objectMerge({}, this._globalContext.tags), data.tags);
+ data.extra = objectMerge(objectMerge({}, this._globalContext.extra), data.extra);
+
+ // Send along our own collected metadata with extra
+ data.extra['session:duration'] = now() - this._startTime;
+
+ if (this._breadcrumbs && this._breadcrumbs.length > 0) {
+ // intentionally make shallow copy so that additions
+ // to breadcrumbs aren't accidentally sent in this request
+ data.breadcrumbs = {
+ values: [].slice.call(this._breadcrumbs, 0)
+ };
+ }
+
+ if (this._globalContext.user) {
+ // sentry.interfaces.User
+ data.user = this._globalContext.user;
+ }
+
+ // Include the environment if it's defined in globalOptions
+ if (globalOptions.environment) data.environment = globalOptions.environment;
+
+ // Include the release if it's defined in globalOptions
+ if (globalOptions.release) data.release = globalOptions.release;
+
+ // Include server_name if it's defined in globalOptions
+ if (globalOptions.serverName) data.server_name = globalOptions.serverName;
+
+ data = this._sanitizeData(data);
+
+ // Cleanup empty properties before sending them to the server
+ Object.keys(data).forEach(function(key) {
+ if (data[key] == null || data[key] === '' || isEmptyObject(data[key])) {
+ delete data[key];
+ }
+ });
+
+ if (isFunction(globalOptions.dataCallback)) {
+ data = globalOptions.dataCallback(data) || data;
+ }
+
+ // Why??????????
+ if (!data || isEmptyObject(data)) {
+ return;
+ }
+
+ // Check if the request should be filtered or not
+ if (
+ isFunction(globalOptions.shouldSendCallback) &&
+ !globalOptions.shouldSendCallback(data)
+ ) {
+ return;
+ }
+
+ // Backoff state: Sentry server previously responded w/ an error (e.g. 429 - too many requests),
+ // so drop requests until "cool-off" period has elapsed.
+ if (this._shouldBackoff()) {
+ this._logDebug('warn', 'Raven dropped error due to backoff: ', data);
+ return;
+ }
+
+ if (typeof globalOptions.sampleRate === 'number') {
+ if (Math.random() < globalOptions.sampleRate) {
+ this._sendProcessedPayload(data);
+ }
+ } else {
+ this._sendProcessedPayload(data);
+ }
+ },
+
+ _sanitizeData: function(data) {
+ return sanitize(data, this._globalOptions.sanitizeKeys);
+ },
+
+ _getUuid: function() {
+ return uuid4();
+ },
+
+ _sendProcessedPayload: function(data, callback) {
+ var self = this;
+ var globalOptions = this._globalOptions;
+
+ if (!this.isSetup()) return;
+
+ // Try and clean up the packet before sending by truncating long values
+ data = this._trimPacket(data);
+
+ // ideally duplicate error testing should occur *before* dataCallback/shouldSendCallback,
+ // but this would require copying an un-truncated copy of the data packet, which can be
+ // arbitrarily deep (extra_data) -- could be worthwhile? will revisit
+ if (!this._globalOptions.allowDuplicates && this._isRepeatData(data)) {
+ this._logDebug('warn', 'Raven dropped repeat event: ', data);
+ return;
+ }
+
+ // Send along an event_id if not explicitly passed.
+ // This event_id can be used to reference the error within Sentry itself.
+ // Set lastEventId after we know the error should actually be sent
+ this._lastEventId = data.event_id || (data.event_id = this._getUuid());
+
+ // Store outbound payload after trim
+ this._lastData = data;
+
+ this._logDebug('debug', 'Raven about to send:', data);
+
+ var auth = {
+ sentry_version: '7',
+ sentry_client: 'raven-js/' + this.VERSION,
+ sentry_key: this._globalKey
+ };
+
+ if (this._globalSecret) {
+ auth.sentry_secret = this._globalSecret;
+ }
+
+ var exception = data.exception && data.exception.values[0];
+
+ // only capture 'sentry' breadcrumb is autoBreadcrumbs is truthy
+ if (
+ this._globalOptions.autoBreadcrumbs &&
+ this._globalOptions.autoBreadcrumbs.sentry
+ ) {
+ this.captureBreadcrumb({
+ category: 'sentry',
+ message: exception
+ ? (exception.type ? exception.type + ': ' : '') + exception.value
+ : data.message,
+ event_id: data.event_id,
+ level: data.level || 'error' // presume error unless specified
+ });
+ }
+
+ var url = this._globalEndpoint;
+ (globalOptions.transport || this._makeRequest).call(this, {
+ url: url,
+ auth: auth,
+ data: data,
+ options: globalOptions,
+ onSuccess: function success() {
+ self._resetBackoff();
+
+ self._triggerEvent('success', {
+ data: data,
+ src: url
+ });
+ callback && callback();
+ },
+ onError: function failure(error) {
+ self._logDebug('error', 'Raven transport failed to send: ', error);
+
+ if (error.request) {
+ self._setBackoffState(error.request);
+ }
+
+ self._triggerEvent('failure', {
+ data: data,
+ src: url
+ });
+ error = error || new Error('Raven send failed (no additional details provided)');
+ callback && callback(error);
+ }
+ });
+ },
+
+ _makeRequest: function(opts) {
+ // Auth is intentionally sent as part of query string (NOT as custom HTTP header) to avoid preflight CORS requests
+ var url = opts.url + '?' + urlencode(opts.auth);
+
+ var evaluatedHeaders = null;
+ var evaluatedFetchParameters = {};
+
+ if (opts.options.headers) {
+ evaluatedHeaders = this._evaluateHash(opts.options.headers);
+ }
+
+ if (opts.options.fetchParameters) {
+ evaluatedFetchParameters = this._evaluateHash(opts.options.fetchParameters);
+ }
+
+ if (supportsFetch()) {
+ evaluatedFetchParameters.body = stringify(opts.data);
+
+ var defaultFetchOptions = objectMerge({}, this._fetchDefaults);
+ var fetchOptions = objectMerge(defaultFetchOptions, evaluatedFetchParameters);
+
+ if (evaluatedHeaders) {
+ fetchOptions.headers = evaluatedHeaders;
+ }
+
+ return _window
+ .fetch(url, fetchOptions)
+ .then(function(response) {
+ if (response.ok) {
+ opts.onSuccess && opts.onSuccess();
+ } else {
+ var error = new Error('Sentry error code: ' + response.status);
+ // It's called request only to keep compatibility with XHR interface
+ // and not add more redundant checks in setBackoffState method
+ error.request = response;
+ opts.onError && opts.onError(error);
+ }
+ })
+ ['catch'](function() {
+ opts.onError &&
+ opts.onError(new Error('Sentry error code: network unavailable'));
+ });
+ }
+
+ var request = _window.XMLHttpRequest && new _window.XMLHttpRequest();
+ if (!request) return;
+
+ // if browser doesn't support CORS (e.g. IE7), we are out of luck
+ var hasCORS = 'withCredentials' in request || typeof XDomainRequest !== 'undefined';
+
+ if (!hasCORS) return;
+
+ if ('withCredentials' in request) {
+ request.onreadystatechange = function() {
+ if (request.readyState !== 4) {
+ return;
+ } else if (request.status === 200) {
+ opts.onSuccess && opts.onSuccess();
+ } else if (opts.onError) {
+ var err = new Error('Sentry error code: ' + request.status);
+ err.request = request;
+ opts.onError(err);
+ }
+ };
+ } else {
+ request = new XDomainRequest();
+ // xdomainrequest cannot go http -> https (or vice versa),
+ // so always use protocol relative
+ url = url.replace(/^https?:/, '');
+
+ // onreadystatechange not supported by XDomainRequest
+ if (opts.onSuccess) {
+ request.onload = opts.onSuccess;
+ }
+ if (opts.onError) {
+ request.onerror = function() {
+ var err = new Error('Sentry error code: XDomainRequest');
+ err.request = request;
+ opts.onError(err);
+ };
+ }
+ }
+
+ request.open('POST', url);
+
+ if (evaluatedHeaders) {
+ each(evaluatedHeaders, function(key, value) {
+ request.setRequestHeader(key, value);
+ });
+ }
+
+ request.send(stringify(opts.data));
+ },
+
+ _evaluateHash: function(hash) {
+ var evaluated = {};
+
+ for (var key in hash) {
+ if (hash.hasOwnProperty(key)) {
+ var value = hash[key];
+ evaluated[key] = typeof value === 'function' ? value() : value;
+ }
+ }
+
+ return evaluated;
+ },
+
+ _logDebug: function(level) {
+ // We allow `Raven.debug` and `Raven.config(DSN, { debug: true })` to not make backward incompatible API change
+ if (
+ this._originalConsoleMethods[level] &&
+ (this.debug || this._globalOptions.debug)
+ ) {
+ // In IE<10 console methods do not have their own 'apply' method
+ Function.prototype.apply.call(
+ this._originalConsoleMethods[level],
+ this._originalConsole,
+ [].slice.call(arguments, 1)
+ );
+ }
+ },
+
+ _mergeContext: function(key, context) {
+ if (isUndefined(context)) {
+ delete this._globalContext[key];
+ } else {
+ this._globalContext[key] = objectMerge(this._globalContext[key] || {}, context);
+ }
+ }
+};
+
+// Deprecations
+Raven.prototype.setUser = Raven.prototype.setUserContext;
+Raven.prototype.setReleaseContext = Raven.prototype.setRelease;
+
+module.exports = Raven;
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"10":10,"11":11,"12":12,"5":5,"6":6,"9":9}],8:[function(_dereq_,module,exports){
+(function (global){
+/**
+ * Enforces a single instance of the Raven client, and the
+ * main entry point for Raven. If you are a consumer of the
+ * Raven library, you SHOULD load this file (vs raven.js).
+ **/
+
+var RavenConstructor = _dereq_(7);
+
+// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)
+var _window =
+ typeof window !== 'undefined'
+ ? window
+ : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
+var _Raven = _window.Raven;
+
+var Raven = new RavenConstructor();
+
+/*
+ * Allow multiple versions of Raven to be installed.
+ * Strip Raven from the global context and returns the instance.
+ *
+ * @return {Raven}
+ */
+Raven.noConflict = function() {
+ _window.Raven = _Raven;
+ return Raven;
+};
+
+Raven.afterLoad();
+
+module.exports = Raven;
+
+/**
+ * DISCLAIMER:
+ *
+ * Expose `Client` constructor for cases where user want to track multiple "sub-applications" in one larger app.
+ * It's not meant to be used by a wide audience, so pleaaase make sure that you know what you're doing before using it.
+ * Accidentally calling `install` multiple times, may result in an unexpected behavior that's very hard to debug.
+ *
+ * It's called `Client' to be in-line with Raven Node implementation.
+ *
+ * HOWTO:
+ *
+ * import Raven from 'raven-js';
+ *
+ * const someAppReporter = new Raven.Client();
+ * const someOtherAppReporter = new Raven.Client();
+ *
+ * someAppReporter.config('__DSN__', {
+ * ...config goes here
+ * });
+ *
+ * someOtherAppReporter.config('__OTHER_DSN__', {
+ * ...config goes here
+ * });
+ *
+ * someAppReporter.captureMessage(...);
+ * someAppReporter.captureException(...);
+ * someAppReporter.captureBreadcrumb(...);
+ *
+ * someOtherAppReporter.captureMessage(...);
+ * someOtherAppReporter.captureException(...);
+ * someOtherAppReporter.captureBreadcrumb(...);
+ *
+ * It should "just work".
+ */
+module.exports.Client = RavenConstructor;
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"7":7}],9:[function(_dereq_,module,exports){
+(function (global){
+var stringify = _dereq_(11);
+
+var _window =
+ typeof window !== 'undefined'
+ ? window
+ : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
+
+function isObject(what) {
+ return typeof what === 'object' && what !== null;
+}
+
+// Yanked from https://git.io/vS8DV re-used under CC0
+// with some tiny modifications
+function isError(value) {
+ switch (Object.prototype.toString.call(value)) {
+ case '[object Error]':
+ return true;
+ case '[object Exception]':
+ return true;
+ case '[object DOMException]':
+ return true;
+ default:
+ return value instanceof Error;
+ }
+}
+
+function isErrorEvent(value) {
+ return Object.prototype.toString.call(value) === '[object ErrorEvent]';
+}
+
+function isDOMError(value) {
+ return Object.prototype.toString.call(value) === '[object DOMError]';
+}
+
+function isDOMException(value) {
+ return Object.prototype.toString.call(value) === '[object DOMException]';
+}
+
+function isUndefined(what) {
+ return what === void 0;
+}
+
+function isFunction(what) {
+ return typeof what === 'function';
+}
+
+function isPlainObject(what) {
+ return Object.prototype.toString.call(what) === '[object Object]';
+}
+
+function isString(what) {
+ return Object.prototype.toString.call(what) === '[object String]';
+}
+
+function isArray(what) {
+ return Object.prototype.toString.call(what) === '[object Array]';
+}
+
+function isEmptyObject(what) {
+ if (!isPlainObject(what)) return false;
+
+ for (var _ in what) {
+ if (what.hasOwnProperty(_)) {
+ return false;
+ }
+ }
+ return true;
+}
+
+function supportsErrorEvent() {
+ try {
+ new ErrorEvent(''); // eslint-disable-line no-new
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+function supportsDOMError() {
+ try {
+ new DOMError(''); // eslint-disable-line no-new
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+function supportsDOMException() {
+ try {
+ new DOMException(''); // eslint-disable-line no-new
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+function supportsFetch() {
+ if (!('fetch' in _window)) return false;
+
+ try {
+ new Headers(); // eslint-disable-line no-new
+ new Request(''); // eslint-disable-line no-new
+ new Response(); // eslint-disable-line no-new
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+// Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default
+// https://caniuse.com/#feat=referrer-policy
+// It doesn't. And it throw exception instead of ignoring this parameter...
+// REF: https://github.com/getsentry/raven-js/issues/1233
+function supportsReferrerPolicy() {
+ if (!supportsFetch()) return false;
+
+ try {
+ // eslint-disable-next-line no-new
+ new Request('pickleRick', {
+ referrerPolicy: 'origin'
+ });
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+function supportsPromiseRejectionEvent() {
+ return typeof PromiseRejectionEvent === 'function';
+}
+
+function wrappedCallback(callback) {
+ function dataCallback(data, original) {
+ var normalizedData = callback(data) || data;
+ if (original) {
+ return original(normalizedData) || normalizedData;
+ }
+ return normalizedData;
+ }
+
+ return dataCallback;
+}
+
+function each(obj, callback) {
+ var i, j;
+
+ if (isUndefined(obj.length)) {
+ for (i in obj) {
+ if (hasKey(obj, i)) {
+ callback.call(null, i, obj[i]);
+ }
+ }
+ } else {
+ j = obj.length;
+ if (j) {
+ for (i = 0; i < j; i++) {
+ callback.call(null, i, obj[i]);
+ }
+ }
+ }
+}
+
+function objectMerge(obj1, obj2) {
+ if (!obj2) {
+ return obj1;
+ }
+ each(obj2, function(key, value) {
+ obj1[key] = value;
+ });
+ return obj1;
+}
+
+/**
+ * This function is only used for react-native.
+ * react-native freezes object that have already been sent over the
+ * js bridge. We need this function in order to check if the object is frozen.
+ * So it's ok that objectFrozen returns false if Object.isFrozen is not
+ * supported because it's not relevant for other "platforms". See related issue:
+ * https://github.com/getsentry/react-native-sentry/issues/57
+ */
+function objectFrozen(obj) {
+ if (!Object.isFrozen) {
+ return false;
+ }
+ return Object.isFrozen(obj);
+}
+
+function truncate(str, max) {
+ if (typeof max !== 'number') {
+ throw new Error('2nd argument to `truncate` function should be a number');
+ }
+ if (typeof str !== 'string' || max === 0) {
+ return str;
+ }
+ return str.length <= max ? str : str.substr(0, max) + '\u2026';
+}
+
+/**
+ * hasKey, a better form of hasOwnProperty
+ * Example: hasKey(MainHostObject, property) === true/false
+ *
+ * @param {Object} host object to check property
+ * @param {string} key to check
+ */
+function hasKey(object, key) {
+ return Object.prototype.hasOwnProperty.call(object, key);
+}
+
+function joinRegExp(patterns) {
+ // Combine an array of regular expressions and strings into one large regexp
+ // Be mad.
+ var sources = [],
+ i = 0,
+ len = patterns.length,
+ pattern;
+
+ for (; i < len; i++) {
+ pattern = patterns[i];
+ if (isString(pattern)) {
+ // If it's a string, we need to escape it
+ // Taken from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
+ sources.push(pattern.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, '\\$1'));
+ } else if (pattern && pattern.source) {
+ // If it's a regexp already, we want to extract the source
+ sources.push(pattern.source);
+ }
+ // Intentionally skip other cases
+ }
+ return new RegExp(sources.join('|'), 'i');
+}
+
+function urlencode(o) {
+ var pairs = [];
+ each(o, function(key, value) {
+ pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));
+ });
+ return pairs.join('&');
+}
+
+// borrowed from https://tools.ietf.org/html/rfc3986#appendix-B
+// intentionally using regex and not href parsing trick because React Native and other
+// environments where DOM might not be available
+function parseUrl(url) {
+ if (typeof url !== 'string') return {};
+ var match = url.match(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/);
+
+ // coerce to undefined values to empty string so we don't get 'undefined'
+ var query = match[6] || '';
+ var fragment = match[8] || '';
+ return {
+ protocol: match[2],
+ host: match[4],
+ path: match[5],
+ relative: match[5] + query + fragment // everything minus origin
+ };
+}
+function uuid4() {
+ var crypto = _window.crypto || _window.msCrypto;
+
+ if (!isUndefined(crypto) && crypto.getRandomValues) {
+ // Use window.crypto API if available
+ // eslint-disable-next-line no-undef
+ var arr = new Uint16Array(8);
+ crypto.getRandomValues(arr);
+
+ // set 4 in byte 7
+ arr[3] = (arr[3] & 0xfff) | 0x4000;
+ // set 2 most significant bits of byte 9 to '10'
+ arr[4] = (arr[4] & 0x3fff) | 0x8000;
+
+ var pad = function(num) {
+ var v = num.toString(16);
+ while (v.length < 4) {
+ v = '0' + v;
+ }
+ return v;
+ };
+
+ return (
+ pad(arr[0]) +
+ pad(arr[1]) +
+ pad(arr[2]) +
+ pad(arr[3]) +
+ pad(arr[4]) +
+ pad(arr[5]) +
+ pad(arr[6]) +
+ pad(arr[7])
+ );
+ } else {
+ // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523
+ return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
+ var r = (Math.random() * 16) | 0,
+ v = c === 'x' ? r : (r & 0x3) | 0x8;
+ return v.toString(16);
+ });
+ }
+}
+
+/**
+ * Given a child DOM element, returns a query-selector statement describing that
+ * and its ancestors
+ * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]
+ * @param elem
+ * @returns {string}
+ */
+function htmlTreeAsString(elem) {
+ /* eslint no-extra-parens:0*/
+ var MAX_TRAVERSE_HEIGHT = 5,
+ MAX_OUTPUT_LEN = 80,
+ out = [],
+ height = 0,
+ len = 0,
+ separator = ' > ',
+ sepLength = separator.length,
+ nextStr;
+
+ while (elem && height++ < MAX_TRAVERSE_HEIGHT) {
+ nextStr = htmlElementAsString(elem);
+ // bail out if
+ // - nextStr is the 'html' element
+ // - the length of the string that would be created exceeds MAX_OUTPUT_LEN
+ // (ignore this limit if we are on the first iteration)
+ if (
+ nextStr === 'html' ||
+ (height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN)
+ ) {
+ break;
+ }
+
+ out.push(nextStr);
+
+ len += nextStr.length;
+ elem = elem.parentNode;
+ }
+
+ return out.reverse().join(separator);
+}
+
+/**
+ * Returns a simple, query-selector representation of a DOM element
+ * e.g. [HTMLElement] => input#foo.btn[name=baz]
+ * @param HTMLElement
+ * @returns {string}
+ */
+function htmlElementAsString(elem) {
+ var out = [],
+ className,
+ classes,
+ key,
+ attr,
+ i;
+
+ if (!elem || !elem.tagName) {
+ return '';
+ }
+
+ out.push(elem.tagName.toLowerCase());
+ if (elem.id) {
+ out.push('#' + elem.id);
+ }
+
+ className = elem.className;
+ if (className && isString(className)) {
+ classes = className.split(/\s+/);
+ for (i = 0; i < classes.length; i++) {
+ out.push('.' + classes[i]);
+ }
+ }
+ var attrWhitelist = ['type', 'name', 'title', 'alt'];
+ for (i = 0; i < attrWhitelist.length; i++) {
+ key = attrWhitelist[i];
+ attr = elem.getAttribute(key);
+ if (attr) {
+ out.push('[' + key + '="' + attr + '"]');
+ }
+ }
+ return out.join('');
+}
+
+/**
+ * Returns true if either a OR b is truthy, but not both
+ */
+function isOnlyOneTruthy(a, b) {
+ return !!(!!a ^ !!b);
+}
+
+/**
+ * Returns true if both parameters are undefined
+ */
+function isBothUndefined(a, b) {
+ return isUndefined(a) && isUndefined(b);
+}
+
+/**
+ * Returns true if the two input exception interfaces have the same content
+ */
+function isSameException(ex1, ex2) {
+ if (isOnlyOneTruthy(ex1, ex2)) return false;
+
+ ex1 = ex1.values[0];
+ ex2 = ex2.values[0];
+
+ if (ex1.type !== ex2.type || ex1.value !== ex2.value) return false;
+
+ // in case both stacktraces are undefined, we can't decide so default to false
+ if (isBothUndefined(ex1.stacktrace, ex2.stacktrace)) return false;
+
+ return isSameStacktrace(ex1.stacktrace, ex2.stacktrace);
+}
+
+/**
+ * Returns true if the two input stack trace interfaces have the same content
+ */
+function isSameStacktrace(stack1, stack2) {
+ if (isOnlyOneTruthy(stack1, stack2)) return false;
+
+ var frames1 = stack1.frames;
+ var frames2 = stack2.frames;
+
+ // Exit early if frame count differs
+ if (frames1.length !== frames2.length) return false;
+
+ // Iterate through every frame; bail out if anything differs
+ var a, b;
+ for (var i = 0; i < frames1.length; i++) {
+ a = frames1[i];
+ b = frames2[i];
+ if (
+ a.filename !== b.filename ||
+ a.lineno !== b.lineno ||
+ a.colno !== b.colno ||
+ a['function'] !== b['function']
+ )
+ return false;
+ }
+ return true;
+}
+
+/**
+ * Polyfill a method
+ * @param obj object e.g. `document`
+ * @param name method name present on object e.g. `addEventListener`
+ * @param replacement replacement function
+ * @param track {optional} record instrumentation to an array
+ */
+function fill(obj, name, replacement, track) {
+ if (obj == null) return;
+ var orig = obj[name];
+ obj[name] = replacement(orig);
+ obj[name].__raven__ = true;
+ obj[name].__orig__ = orig;
+ if (track) {
+ track.push([obj, name, orig]);
+ }
+}
+
+/**
+ * Join values in array
+ * @param input array of values to be joined together
+ * @param delimiter string to be placed in-between values
+ * @returns {string}
+ */
+function safeJoin(input, delimiter) {
+ if (!isArray(input)) return '';
+
+ var output = [];
+
+ for (var i = 0; i < input.length; i++) {
+ try {
+ output.push(String(input[i]));
+ } catch (e) {
+ output.push('[value cannot be serialized]');
+ }
+ }
+
+ return output.join(delimiter);
+}
+
+// Default Node.js REPL depth
+var MAX_SERIALIZE_EXCEPTION_DEPTH = 3;
+// 50kB, as 100kB is max payload size, so half sounds reasonable
+var MAX_SERIALIZE_EXCEPTION_SIZE = 50 * 1024;
+var MAX_SERIALIZE_KEYS_LENGTH = 40;
+
+function utf8Length(value) {
+ return ~-encodeURI(value).split(/%..|./).length;
+}
+
+function jsonSize(value) {
+ return utf8Length(JSON.stringify(value));
+}
+
+function serializeValue(value) {
+ if (typeof value === 'string') {
+ var maxLength = 40;
+ return truncate(value, maxLength);
+ } else if (
+ typeof value === 'number' ||
+ typeof value === 'boolean' ||
+ typeof value === 'undefined'
+ ) {
+ return value;
+ }
+
+ var type = Object.prototype.toString.call(value);
+
+ // Node.js REPL notation
+ if (type === '[object Object]') return '[Object]';
+ if (type === '[object Array]') return '[Array]';
+ if (type === '[object Function]')
+ return value.name ? '[Function: ' + value.name + ']' : '[Function]';
+
+ return value;
+}
+
+function serializeObject(value, depth) {
+ if (depth === 0) return serializeValue(value);
+
+ if (isPlainObject(value)) {
+ return Object.keys(value).reduce(function(acc, key) {
+ acc[key] = serializeObject(value[key], depth - 1);
+ return acc;
+ }, {});
+ } else if (Array.isArray(value)) {
+ return value.map(function(val) {
+ return serializeObject(val, depth - 1);
+ });
+ }
+
+ return serializeValue(value);
+}
+
+function serializeException(ex, depth, maxSize) {
+ if (!isPlainObject(ex)) return ex;
+
+ depth = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_DEPTH : depth;
+ maxSize = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_SIZE : maxSize;
+
+ var serialized = serializeObject(ex, depth);
+
+ if (jsonSize(stringify(serialized)) > maxSize) {
+ return serializeException(ex, depth - 1);
+ }
+
+ return serialized;
+}
+
+function serializeKeysForMessage(keys, maxLength) {
+ if (typeof keys === 'number' || typeof keys === 'string') return keys.toString();
+ if (!Array.isArray(keys)) return '';
+
+ keys = keys.filter(function(key) {
+ return typeof key === 'string';
+ });
+ if (keys.length === 0) return '[object has no keys]';
+
+ maxLength = typeof maxLength !== 'number' ? MAX_SERIALIZE_KEYS_LENGTH : maxLength;
+ if (keys[0].length >= maxLength) return keys[0];
+
+ for (var usedKeys = keys.length; usedKeys > 0; usedKeys--) {
+ var serialized = keys.slice(0, usedKeys).join(', ');
+ if (serialized.length > maxLength) continue;
+ if (usedKeys === keys.length) return serialized;
+ return serialized + '\u2026';
+ }
+
+ return '';
+}
+
+function sanitize(input, sanitizeKeys) {
+ if (!isArray(sanitizeKeys) || (isArray(sanitizeKeys) && sanitizeKeys.length === 0))
+ return input;
+
+ var sanitizeRegExp = joinRegExp(sanitizeKeys);
+ var sanitizeMask = '********';
+ var safeInput;
+
+ try {
+ safeInput = JSON.parse(stringify(input));
+ } catch (o_O) {
+ return input;
+ }
+
+ function sanitizeWorker(workerInput) {
+ if (isArray(workerInput)) {
+ return workerInput.map(function(val) {
+ return sanitizeWorker(val);
+ });
+ }
+
+ if (isPlainObject(workerInput)) {
+ return Object.keys(workerInput).reduce(function(acc, k) {
+ if (sanitizeRegExp.test(k)) {
+ acc[k] = sanitizeMask;
+ } else {
+ acc[k] = sanitizeWorker(workerInput[k]);
+ }
+ return acc;
+ }, {});
+ }
+
+ return workerInput;
+ }
+
+ return sanitizeWorker(safeInput);
+}
+
+module.exports = {
+ isObject: isObject,
+ isError: isError,
+ isErrorEvent: isErrorEvent,
+ isDOMError: isDOMError,
+ isDOMException: isDOMException,
+ isUndefined: isUndefined,
+ isFunction: isFunction,
+ isPlainObject: isPlainObject,
+ isString: isString,
+ isArray: isArray,
+ isEmptyObject: isEmptyObject,
+ supportsErrorEvent: supportsErrorEvent,
+ supportsDOMError: supportsDOMError,
+ supportsDOMException: supportsDOMException,
+ supportsFetch: supportsFetch,
+ supportsReferrerPolicy: supportsReferrerPolicy,
+ supportsPromiseRejectionEvent: supportsPromiseRejectionEvent,
+ wrappedCallback: wrappedCallback,
+ each: each,
+ objectMerge: objectMerge,
+ truncate: truncate,
+ objectFrozen: objectFrozen,
+ hasKey: hasKey,
+ joinRegExp: joinRegExp,
+ urlencode: urlencode,
+ uuid4: uuid4,
+ htmlTreeAsString: htmlTreeAsString,
+ htmlElementAsString: htmlElementAsString,
+ isSameException: isSameException,
+ isSameStacktrace: isSameStacktrace,
+ parseUrl: parseUrl,
+ fill: fill,
+ safeJoin: safeJoin,
+ serializeException: serializeException,
+ serializeKeysForMessage: serializeKeysForMessage,
+ sanitize: sanitize
+};
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"11":11}],10:[function(_dereq_,module,exports){
+(function (global){
+var utils = _dereq_(9);
+
+/*
+ TraceKit - Cross brower stack traces
+
+ This was originally forked from github.com/occ/TraceKit, but has since been
+ largely re-written and is now maintained as part of raven-js. Tests for
+ this are in test/vendor.
+
+ MIT license
+*/
+
+var TraceKit = {
+ collectWindowErrors: true,
+ debug: false
+};
+
+// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)
+var _window =
+ typeof window !== 'undefined'
+ ? window
+ : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
+
+// global reference to slice
+var _slice = [].slice;
+var UNKNOWN_FUNCTION = '?';
+
+// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types
+var ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;
+
+function getLocationHref() {
+ if (typeof document === 'undefined' || document.location == null) return '';
+ return document.location.href;
+}
+
+function getLocationOrigin() {
+ if (typeof document === 'undefined' || document.location == null) return '';
+
+ // Oh dear IE10...
+ if (!document.location.origin) {
+ document.location.origin =
+ document.location.protocol +
+ '//' +
+ document.location.hostname +
+ (document.location.port ? ':' + document.location.port : '');
+ }
+
+ return document.location.origin;
+}
+
+/**
+ * TraceKit.report: cross-browser processing of unhandled exceptions
+ *
+ * Syntax:
+ * TraceKit.report.subscribe(function(stackInfo) { ... })
+ * TraceKit.report.unsubscribe(function(stackInfo) { ... })
+ * TraceKit.report(exception)
+ * try { ...code... } catch(ex) { TraceKit.report(ex); }
+ *
+ * Supports:
+ * - Firefox: full stack trace with line numbers, plus column number
+ * on top frame; column number is not guaranteed
+ * - Opera: full stack trace with line and column numbers
+ * - Chrome: full stack trace with line and column numbers
+ * - Safari: line and column number for the top frame only; some frames
+ * may be missing, and column number is not guaranteed
+ * - IE: line and column number for the top frame only; some frames
+ * may be missing, and column number is not guaranteed
+ *
+ * In theory, TraceKit should work on all of the following versions:
+ * - IE5.5+ (only 8.0 tested)
+ * - Firefox 0.9+ (only 3.5+ tested)
+ * - Opera 7+ (only 10.50 tested; versions 9 and earlier may require
+ * Exceptions Have Stacktrace to be enabled in opera:config)
+ * - Safari 3+ (only 4+ tested)
+ * - Chrome 1+ (only 5+ tested)
+ * - Konqueror 3.5+ (untested)
+ *
+ * Requires TraceKit.computeStackTrace.
+ *
+ * Tries to catch all unhandled exceptions and report them to the
+ * subscribed handlers. Please note that TraceKit.report will rethrow the
+ * exception. This is REQUIRED in order to get a useful stack trace in IE.
+ * If the exception does not reach the top of the browser, you will only
+ * get a stack trace from the point where TraceKit.report was called.
+ *
+ * Handlers receive a stackInfo object as described in the
+ * TraceKit.computeStackTrace docs.
+ */
+TraceKit.report = (function reportModuleWrapper() {
+ var handlers = [],
+ lastArgs = null,
+ lastException = null,
+ lastExceptionStack = null;
+
+ /**
+ * Add a crash handler.
+ * @param {Function} handler
+ */
+ function subscribe(handler) {
+ installGlobalHandler();
+ handlers.push(handler);
+ }
+
+ /**
+ * Remove a crash handler.
+ * @param {Function} handler
+ */
+ function unsubscribe(handler) {
+ for (var i = handlers.length - 1; i >= 0; --i) {
+ if (handlers[i] === handler) {
+ handlers.splice(i, 1);
+ }
+ }
+ }
+
+ /**
+ * Remove all crash handlers.
+ */
+ function unsubscribeAll() {
+ uninstallGlobalHandler();
+ handlers = [];
+ }
+
+ /**
+ * Dispatch stack information to all handlers.
+ * @param {Object.} stack
+ */
+ function notifyHandlers(stack, isWindowError) {
+ var exception = null;
+ if (isWindowError && !TraceKit.collectWindowErrors) {
+ return;
+ }
+ for (var i in handlers) {
+ if (handlers.hasOwnProperty(i)) {
+ try {
+ handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2)));
+ } catch (inner) {
+ exception = inner;
+ }
+ }
+ }
+
+ if (exception) {
+ throw exception;
+ }
+ }
+
+ var _oldOnerrorHandler, _onErrorHandlerInstalled;
+
+ /**
+ * Ensures all global unhandled exceptions are recorded.
+ * Supported by Gecko and IE.
+ * @param {string} msg Error message.
+ * @param {string} url URL of script that generated the exception.
+ * @param {(number|string)} lineNo The line number at which the error
+ * occurred.
+ * @param {?(number|string)} colNo The column number at which the error
+ * occurred.
+ * @param {?Error} ex The actual Error object.
+ */
+ function traceKitWindowOnError(msg, url, lineNo, colNo, ex) {
+ var stack = null;
+ // If 'ex' is ErrorEvent, get real Error from inside
+ var exception = utils.isErrorEvent(ex) ? ex.error : ex;
+ // If 'msg' is ErrorEvent, get real message from inside
+ var message = utils.isErrorEvent(msg) ? msg.message : msg;
+
+ if (lastExceptionStack) {
+ TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(
+ lastExceptionStack,
+ url,
+ lineNo,
+ message
+ );
+ processLastException();
+ } else if (exception && utils.isError(exception)) {
+ // non-string `exception` arg; attempt to extract stack trace
+
+ // New chrome and blink send along a real error object
+ // Let's just report that like a normal error.
+ // See: https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror
+ stack = TraceKit.computeStackTrace(exception);
+ notifyHandlers(stack, true);
+ } else {
+ var location = {
+ url: url,
+ line: lineNo,
+ column: colNo
+ };
+
+ var name = undefined;
+ var groups;
+
+ if ({}.toString.call(message) === '[object String]') {
+ var groups = message.match(ERROR_TYPES_RE);
+ if (groups) {
+ name = groups[1];
+ message = groups[2];
+ }
+ }
+
+ location.func = UNKNOWN_FUNCTION;
+
+ stack = {
+ name: name,
+ message: message,
+ url: getLocationHref(),
+ stack: [location]
+ };
+ notifyHandlers(stack, true);
+ }
+
+ if (_oldOnerrorHandler) {
+ return _oldOnerrorHandler.apply(this, arguments);
+ }
+
+ return false;
+ }
+
+ function installGlobalHandler() {
+ if (_onErrorHandlerInstalled) {
+ return;
+ }
+ _oldOnerrorHandler = _window.onerror;
+ _window.onerror = traceKitWindowOnError;
+ _onErrorHandlerInstalled = true;
+ }
+
+ function uninstallGlobalHandler() {
+ if (!_onErrorHandlerInstalled) {
+ return;
+ }
+ _window.onerror = _oldOnerrorHandler;
+ _onErrorHandlerInstalled = false;
+ _oldOnerrorHandler = undefined;
+ }
+
+ function processLastException() {
+ var _lastExceptionStack = lastExceptionStack,
+ _lastArgs = lastArgs;
+ lastArgs = null;
+ lastExceptionStack = null;
+ lastException = null;
+ notifyHandlers.apply(null, [_lastExceptionStack, false].concat(_lastArgs));
+ }
+
+ /**
+ * Reports an unhandled Error to TraceKit.
+ * @param {Error} ex
+ * @param {?boolean} rethrow If false, do not re-throw the exception.
+ * Only used for window.onerror to not cause an infinite loop of
+ * rethrowing.
+ */
+ function report(ex, rethrow) {
+ var args = _slice.call(arguments, 1);
+ if (lastExceptionStack) {
+ if (lastException === ex) {
+ return; // already caught by an inner catch block, ignore
+ } else {
+ processLastException();
+ }
+ }
+
+ var stack = TraceKit.computeStackTrace(ex);
+ lastExceptionStack = stack;
+ lastException = ex;
+ lastArgs = args;
+
+ // If the stack trace is incomplete, wait for 2 seconds for
+ // slow slow IE to see if onerror occurs or not before reporting
+ // this exception; otherwise, we will end up with an incomplete
+ // stack trace
+ setTimeout(function() {
+ if (lastException === ex) {
+ processLastException();
+ }
+ }, stack.incomplete ? 2000 : 0);
+
+ if (rethrow !== false) {
+ throw ex; // re-throw to propagate to the top level (and cause window.onerror)
+ }
+ }
+
+ report.subscribe = subscribe;
+ report.unsubscribe = unsubscribe;
+ report.uninstall = unsubscribeAll;
+ return report;
+})();
+
+/**
+ * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript
+ *
+ * Syntax:
+ * s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below)
+ * Returns:
+ * s.name - exception name
+ * s.message - exception message
+ * s.stack[i].url - JavaScript or HTML file URL
+ * s.stack[i].func - function name, or empty for anonymous functions (if guessing did not work)
+ * s.stack[i].args - arguments passed to the function, if known
+ * s.stack[i].line - line number, if known
+ * s.stack[i].column - column number, if known
+ *
+ * Supports:
+ * - Firefox: full stack trace with line numbers and unreliable column
+ * number on top frame
+ * - Opera 10: full stack trace with line and column numbers
+ * - Opera 9-: full stack trace with line numbers
+ * - Chrome: full stack trace with line and column numbers
+ * - Safari: line and column number for the topmost stacktrace element
+ * only
+ * - IE: no line numbers whatsoever
+ *
+ * Tries to guess names of anonymous functions by looking for assignments
+ * in the source code. In IE and Safari, we have to guess source file names
+ * by searching for function bodies inside all page scripts. This will not
+ * work for scripts that are loaded cross-domain.
+ * Here be dragons: some function names may be guessed incorrectly, and
+ * duplicate functions may be mismatched.
+ *
+ * TraceKit.computeStackTrace should only be used for tracing purposes.
+ * Logging of unhandled exceptions should be done with TraceKit.report,
+ * which builds on top of TraceKit.computeStackTrace and provides better
+ * IE support by utilizing the window.onerror event to retrieve information
+ * about the top of the stack.
+ *
+ * Note: In IE and Safari, no stack trace is recorded on the Error object,
+ * so computeStackTrace instead walks its *own* chain of callers.
+ * This means that:
+ * * in Safari, some methods may be missing from the stack trace;
+ * * in IE, the topmost function in the stack trace will always be the
+ * caller of computeStackTrace.
+ *
+ * This is okay for tracing (because you are likely to be calling
+ * computeStackTrace from the function you want to be the topmost element
+ * of the stack trace anyway), but not okay for logging unhandled
+ * exceptions (because your catch block will likely be far away from the
+ * inner function that actually caused the exception).
+ *
+ */
+TraceKit.computeStackTrace = (function computeStackTraceWrapper() {
+ // Contents of Exception in various browsers.
+ //
+ // SAFARI:
+ // ex.message = Can't find variable: qq
+ // ex.line = 59
+ // ex.sourceId = 580238192
+ // ex.sourceURL = http://...
+ // ex.expressionBeginOffset = 96
+ // ex.expressionCaretOffset = 98
+ // ex.expressionEndOffset = 98
+ // ex.name = ReferenceError
+ //
+ // FIREFOX:
+ // ex.message = qq is not defined
+ // ex.fileName = http://...
+ // ex.lineNumber = 59
+ // ex.columnNumber = 69
+ // ex.stack = ...stack trace... (see the example below)
+ // ex.name = ReferenceError
+ //
+ // CHROME:
+ // ex.message = qq is not defined
+ // ex.name = ReferenceError
+ // ex.type = not_defined
+ // ex.arguments = ['aa']
+ // ex.stack = ...stack trace...
+ //
+ // INTERNET EXPLORER:
+ // ex.message = ...
+ // ex.name = ReferenceError
+ //
+ // OPERA:
+ // ex.message = ...message... (see the example below)
+ // ex.name = ReferenceError
+ // ex.opera#sourceloc = 11 (pretty much useless, duplicates the info in ex.message)
+ // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'
+
+ /**
+ * Computes stack trace information from the stack property.
+ * Chrome and Gecko use this property.
+ * @param {Error} ex
+ * @return {?Object.} Stack trace information.
+ */
+ function computeStackTraceFromStackProp(ex) {
+ if (typeof ex.stack === 'undefined' || !ex.stack) return;
+
+ var chrome = /^\s*at (?:(.*?) ?\()?((?:file|https?|blob|chrome-extension|native|eval|webpack||[a-z]:|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i;
+ var winjs = /^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i;
+ // NOTE: blob urls are now supposed to always have an origin, therefore it's format
+ // which is `blob:http://url/path/with-some-uuid`, is matched by `blob.*?:\/` as well
+ var gecko = /^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\/.*?|\[native code\]|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i;
+ // Used to additionally parse URL/line/column from eval frames
+ var geckoEval = /(\S+) line (\d+)(?: > eval line \d+)* > eval/i;
+ var chromeEval = /\((\S*)(?::(\d+))(?::(\d+))\)/;
+ var lines = ex.stack.split('\n');
+ var stack = [];
+ var submatch;
+ var parts;
+ var element;
+ var reference = /^(.*) is undefined$/.exec(ex.message);
+
+ for (var i = 0, j = lines.length; i < j; ++i) {
+ if ((parts = chrome.exec(lines[i]))) {
+ var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line
+ var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line
+ if (isEval && (submatch = chromeEval.exec(parts[2]))) {
+ // throw out eval line/column and use top-most line/column number
+ parts[2] = submatch[1]; // url
+ parts[3] = submatch[2]; // line
+ parts[4] = submatch[3]; // column
+ }
+ element = {
+ url: !isNative ? parts[2] : null,
+ func: parts[1] || UNKNOWN_FUNCTION,
+ args: isNative ? [parts[2]] : [],
+ line: parts[3] ? +parts[3] : null,
+ column: parts[4] ? +parts[4] : null
+ };
+ } else if ((parts = winjs.exec(lines[i]))) {
+ element = {
+ url: parts[2],
+ func: parts[1] || UNKNOWN_FUNCTION,
+ args: [],
+ line: +parts[3],
+ column: parts[4] ? +parts[4] : null
+ };
+ } else if ((parts = gecko.exec(lines[i]))) {
+ var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;
+ if (isEval && (submatch = geckoEval.exec(parts[3]))) {
+ // throw out eval line/column and use top-most line number
+ parts[3] = submatch[1];
+ parts[4] = submatch[2];
+ parts[5] = null; // no column when eval
+ } else if (i === 0 && !parts[5] && typeof ex.columnNumber !== 'undefined') {
+ // FireFox uses this awesome columnNumber property for its top frame
+ // Also note, Firefox's column number is 0-based and everything else expects 1-based,
+ // so adding 1
+ // NOTE: this hack doesn't work if top-most frame is eval
+ stack[0].column = ex.columnNumber + 1;
+ }
+ element = {
+ url: parts[3],
+ func: parts[1] || UNKNOWN_FUNCTION,
+ args: parts[2] ? parts[2].split(',') : [],
+ line: parts[4] ? +parts[4] : null,
+ column: parts[5] ? +parts[5] : null
+ };
+ } else {
+ continue;
+ }
+
+ if (!element.func && element.line) {
+ element.func = UNKNOWN_FUNCTION;
+ }
+
+ if (element.url && element.url.substr(0, 5) === 'blob:') {
+ // Special case for handling JavaScript loaded into a blob.
+ // We use a synchronous AJAX request here as a blob is already in
+ // memory - it's not making a network request. This will generate a warning
+ // in the browser console, but there has already been an error so that's not
+ // that much of an issue.
+ var xhr = new XMLHttpRequest();
+ xhr.open('GET', element.url, false);
+ xhr.send(null);
+
+ // If we failed to download the source, skip this patch
+ if (xhr.status === 200) {
+ var source = xhr.responseText || '';
+
+ // We trim the source down to the last 300 characters as sourceMappingURL is always at the end of the file.
+ // Why 300? To be in line with: https://github.com/getsentry/sentry/blob/4af29e8f2350e20c28a6933354e4f42437b4ba42/src/sentry/lang/javascript/processor.py#L164-L175
+ source = source.slice(-300);
+
+ // Now we dig out the source map URL
+ var sourceMaps = source.match(/\/\/# sourceMappingURL=(.*)$/);
+
+ // If we don't find a source map comment or we find more than one, continue on to the next element.
+ if (sourceMaps) {
+ var sourceMapAddress = sourceMaps[1];
+
+ // Now we check to see if it's a relative URL.
+ // If it is, convert it to an absolute one.
+ if (sourceMapAddress.charAt(0) === '~') {
+ sourceMapAddress = getLocationOrigin() + sourceMapAddress.slice(1);
+ }
+
+ // Now we strip the '.map' off of the end of the URL and update the
+ // element so that Sentry can match the map to the blob.
+ element.url = sourceMapAddress.slice(0, -4);
+ }
+ }
+ }
+
+ stack.push(element);
+ }
+
+ if (!stack.length) {
+ return null;
+ }
+
+ return {
+ name: ex.name,
+ message: ex.message,
+ url: getLocationHref(),
+ stack: stack
+ };
+ }
+
+ /**
+ * Adds information about the first frame to incomplete stack traces.
+ * Safari and IE require this to get complete data on the first frame.
+ * @param {Object.} stackInfo Stack trace information from
+ * one of the compute* methods.
+ * @param {string} url The URL of the script that caused an error.
+ * @param {(number|string)} lineNo The line number of the script that
+ * caused an error.
+ * @param {string=} message The error generated by the browser, which
+ * hopefully contains the name of the object that caused the error.
+ * @return {boolean} Whether or not the stack information was
+ * augmented.
+ */
+ function augmentStackTraceWithInitialElement(stackInfo, url, lineNo, message) {
+ var initial = {
+ url: url,
+ line: lineNo
+ };
+
+ if (initial.url && initial.line) {
+ stackInfo.incomplete = false;
+
+ if (!initial.func) {
+ initial.func = UNKNOWN_FUNCTION;
+ }
+
+ if (stackInfo.stack.length > 0) {
+ if (stackInfo.stack[0].url === initial.url) {
+ if (stackInfo.stack[0].line === initial.line) {
+ return false; // already in stack trace
+ } else if (
+ !stackInfo.stack[0].line &&
+ stackInfo.stack[0].func === initial.func
+ ) {
+ stackInfo.stack[0].line = initial.line;
+ return false;
+ }
+ }
+ }
+
+ stackInfo.stack.unshift(initial);
+ stackInfo.partial = true;
+ return true;
+ } else {
+ stackInfo.incomplete = true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Computes stack trace information by walking the arguments.caller
+ * chain at the time the exception occurred. This will cause earlier
+ * frames to be missed but is the only way to get any stack trace in
+ * Safari and IE. The top frame is restored by
+ * {@link augmentStackTraceWithInitialElement}.
+ * @param {Error} ex
+ * @return {?Object.} Stack trace information.
+ */
+ function computeStackTraceByWalkingCallerChain(ex, depth) {
+ var functionName = /function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,
+ stack = [],
+ funcs = {},
+ recursion = false,
+ parts,
+ item,
+ source;
+
+ for (
+ var curr = computeStackTraceByWalkingCallerChain.caller;
+ curr && !recursion;
+ curr = curr.caller
+ ) {
+ if (curr === computeStackTrace || curr === TraceKit.report) {
+ // console.log('skipping internal function');
+ continue;
+ }
+
+ item = {
+ url: null,
+ func: UNKNOWN_FUNCTION,
+ line: null,
+ column: null
+ };
+
+ if (curr.name) {
+ item.func = curr.name;
+ } else if ((parts = functionName.exec(curr.toString()))) {
+ item.func = parts[1];
+ }
+
+ if (typeof item.func === 'undefined') {
+ try {
+ item.func = parts.input.substring(0, parts.input.indexOf('{'));
+ } catch (e) {}
+ }
+
+ if (funcs['' + curr]) {
+ recursion = true;
+ } else {
+ funcs['' + curr] = true;
+ }
+
+ stack.push(item);
+ }
+
+ if (depth) {
+ // console.log('depth is ' + depth);
+ // console.log('stack is ' + stack.length);
+ stack.splice(0, depth);
+ }
+
+ var result = {
+ name: ex.name,
+ message: ex.message,
+ url: getLocationHref(),
+ stack: stack
+ };
+ augmentStackTraceWithInitialElement(
+ result,
+ ex.sourceURL || ex.fileName,
+ ex.line || ex.lineNumber,
+ ex.message || ex.description
+ );
+ return result;
+ }
+
+ /**
+ * Computes a stack trace for an exception.
+ * @param {Error} ex
+ * @param {(string|number)=} depth
+ */
+ function computeStackTrace(ex, depth) {
+ var stack = null;
+ depth = depth == null ? 0 : +depth;
+
+ try {
+ stack = computeStackTraceFromStackProp(ex);
+ if (stack) {
+ return stack;
+ }
+ } catch (e) {
+ if (TraceKit.debug) {
+ throw e;
+ }
+ }
+
+ try {
+ stack = computeStackTraceByWalkingCallerChain(ex, depth + 1);
+ if (stack) {
+ return stack;
+ }
+ } catch (e) {
+ if (TraceKit.debug) {
+ throw e;
+ }
+ }
+ return {
+ name: ex.name,
+ message: ex.message,
+ url: getLocationHref()
+ };
+ }
+
+ computeStackTrace.augmentStackTraceWithInitialElement = augmentStackTraceWithInitialElement;
+ computeStackTrace.computeStackTraceFromStackProp = computeStackTraceFromStackProp;
+
+ return computeStackTrace;
+})();
+
+module.exports = TraceKit;
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"9":9}],11:[function(_dereq_,module,exports){
+/*
+ json-stringify-safe
+ Like JSON.stringify, but doesn't throw on circular references.
+
+ Originally forked from https://github.com/isaacs/json-stringify-safe
+ version 5.0.1 on 3/8/2017 and modified to handle Errors serialization
+ and IE8 compatibility. Tests for this are in test/vendor.
+
+ ISC license: https://github.com/isaacs/json-stringify-safe/blob/master/LICENSE
+*/
+
+exports = module.exports = stringify;
+exports.getSerialize = serializer;
+
+function indexOf(haystack, needle) {
+ for (var i = 0; i < haystack.length; ++i) {
+ if (haystack[i] === needle) return i;
+ }
+ return -1;
+}
+
+function stringify(obj, replacer, spaces, cycleReplacer) {
+ return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces);
+}
+
+// https://github.com/ftlabs/js-abbreviate/blob/fa709e5f139e7770a71827b1893f22418097fbda/index.js#L95-L106
+function stringifyError(value) {
+ var err = {
+ // These properties are implemented as magical getters and don't show up in for in
+ stack: value.stack,
+ message: value.message,
+ name: value.name
+ };
+
+ for (var i in value) {
+ if (Object.prototype.hasOwnProperty.call(value, i)) {
+ err[i] = value[i];
+ }
+ }
+
+ return err;
+}
+
+function serializer(replacer, cycleReplacer) {
+ var stack = [];
+ var keys = [];
+
+ if (cycleReplacer == null) {
+ cycleReplacer = function(key, value) {
+ if (stack[0] === value) {
+ return '[Circular ~]';
+ }
+ return '[Circular ~.' + keys.slice(0, indexOf(stack, value)).join('.') + ']';
+ };
+ }
+
+ return function(key, value) {
+ if (stack.length > 0) {
+ var thisPos = indexOf(stack, this);
+ ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);
+ ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);
+
+ if (~indexOf(stack, value)) {
+ value = cycleReplacer.call(this, key, value);
+ }
+ } else {
+ stack.push(value);
+ }
+
+ return replacer == null
+ ? value instanceof Error ? stringifyError(value) : value
+ : replacer.call(this, key, value);
+ };
+}
+
+},{}],12:[function(_dereq_,module,exports){
+/*
+ * JavaScript MD5
+ * https://github.com/blueimp/JavaScript-MD5
+ *
+ * Copyright 2011, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * https://opensource.org/licenses/MIT
+ *
+ * Based on
+ * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
+ * Digest Algorithm, as defined in RFC 1321.
+ * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
+ * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
+ * Distributed under the BSD License
+ * See http://pajhome.org.uk/crypt/md5 for more info.
+ */
+
+/*
+* Add integers, wrapping at 2^32. This uses 16-bit operations internally
+* to work around bugs in some JS interpreters.
+*/
+function safeAdd(x, y) {
+ var lsw = (x & 0xffff) + (y & 0xffff);
+ var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
+ return (msw << 16) | (lsw & 0xffff);
+}
+
+/*
+* Bitwise rotate a 32-bit number to the left.
+*/
+function bitRotateLeft(num, cnt) {
+ return (num << cnt) | (num >>> (32 - cnt));
+}
+
+/*
+* These functions implement the four basic operations the algorithm uses.
+*/
+function md5cmn(q, a, b, x, s, t) {
+ return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);
+}
+function md5ff(a, b, c, d, x, s, t) {
+ return md5cmn((b & c) | (~b & d), a, b, x, s, t);
+}
+function md5gg(a, b, c, d, x, s, t) {
+ return md5cmn((b & d) | (c & ~d), a, b, x, s, t);
+}
+function md5hh(a, b, c, d, x, s, t) {
+ return md5cmn(b ^ c ^ d, a, b, x, s, t);
+}
+function md5ii(a, b, c, d, x, s, t) {
+ return md5cmn(c ^ (b | ~d), a, b, x, s, t);
+}
+
+/*
+* Calculate the MD5 of an array of little-endian words, and a bit length.
+*/
+function binlMD5(x, len) {
+ /* append padding */
+ x[len >> 5] |= 0x80 << (len % 32);
+ x[(((len + 64) >>> 9) << 4) + 14] = len;
+
+ var i;
+ var olda;
+ var oldb;
+ var oldc;
+ var oldd;
+ var a = 1732584193;
+ var b = -271733879;
+ var c = -1732584194;
+ var d = 271733878;
+
+ for (i = 0; i < x.length; i += 16) {
+ olda = a;
+ oldb = b;
+ oldc = c;
+ oldd = d;
+
+ a = md5ff(a, b, c, d, x[i], 7, -680876936);
+ d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);
+ c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);
+ b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);
+ a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);
+ d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);
+ c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);
+ b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);
+ a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);
+ d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);
+ c = md5ff(c, d, a, b, x[i + 10], 17, -42063);
+ b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);
+ a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);
+ d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);
+ c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);
+ b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);
+
+ a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);
+ d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);
+ c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);
+ b = md5gg(b, c, d, a, x[i], 20, -373897302);
+ a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);
+ d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);
+ c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);
+ b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);
+ a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);
+ d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);
+ c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);
+ b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);
+ a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);
+ d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);
+ c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);
+ b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);
+
+ a = md5hh(a, b, c, d, x[i + 5], 4, -378558);
+ d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);
+ c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);
+ b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);
+ a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);
+ d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);
+ c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);
+ b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);
+ a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);
+ d = md5hh(d, a, b, c, x[i], 11, -358537222);
+ c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);
+ b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);
+ a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);
+ d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);
+ c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);
+ b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);
+
+ a = md5ii(a, b, c, d, x[i], 6, -198630844);
+ d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);
+ c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);
+ b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);
+ a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);
+ d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);
+ c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);
+ b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);
+ a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);
+ d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);
+ c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);
+ b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);
+ a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);
+ d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);
+ c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);
+ b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);
+
+ a = safeAdd(a, olda);
+ b = safeAdd(b, oldb);
+ c = safeAdd(c, oldc);
+ d = safeAdd(d, oldd);
+ }
+ return [a, b, c, d];
+}
+
+/*
+* Convert an array of little-endian words to a string
+*/
+function binl2rstr(input) {
+ var i;
+ var output = '';
+ var length32 = input.length * 32;
+ for (i = 0; i < length32; i += 8) {
+ output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xff);
+ }
+ return output;
+}
+
+/*
+* Convert a raw string to an array of little-endian words
+* Characters >255 have their high-byte silently ignored.
+*/
+function rstr2binl(input) {
+ var i;
+ var output = [];
+ output[(input.length >> 2) - 1] = undefined;
+ for (i = 0; i < output.length; i += 1) {
+ output[i] = 0;
+ }
+ var length8 = input.length * 8;
+ for (i = 0; i < length8; i += 8) {
+ output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << (i % 32);
+ }
+ return output;
+}
+
+/*
+* Calculate the MD5 of a raw string
+*/
+function rstrMD5(s) {
+ return binl2rstr(binlMD5(rstr2binl(s), s.length * 8));
+}
+
+/*
+* Calculate the HMAC-MD5, of a key and some data (raw strings)
+*/
+function rstrHMACMD5(key, data) {
+ var i;
+ var bkey = rstr2binl(key);
+ var ipad = [];
+ var opad = [];
+ var hash;
+ ipad[15] = opad[15] = undefined;
+ if (bkey.length > 16) {
+ bkey = binlMD5(bkey, key.length * 8);
+ }
+ for (i = 0; i < 16; i += 1) {
+ ipad[i] = bkey[i] ^ 0x36363636;
+ opad[i] = bkey[i] ^ 0x5c5c5c5c;
+ }
+ hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);
+ return binl2rstr(binlMD5(opad.concat(hash), 512 + 128));
+}
+
+/*
+* Convert a raw string to a hex string
+*/
+function rstr2hex(input) {
+ var hexTab = '0123456789abcdef';
+ var output = '';
+ var x;
+ var i;
+ for (i = 0; i < input.length; i += 1) {
+ x = input.charCodeAt(i);
+ output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f);
+ }
+ return output;
+}
+
+/*
+* Encode a string as utf-8
+*/
+function str2rstrUTF8(input) {
+ return unescape(encodeURIComponent(input));
+}
+
+/*
+* Take string arguments and return either raw or hex encoded strings
+*/
+function rawMD5(s) {
+ return rstrMD5(str2rstrUTF8(s));
+}
+function hexMD5(s) {
+ return rstr2hex(rawMD5(s));
+}
+function rawHMACMD5(k, d) {
+ return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d));
+}
+function hexHMACMD5(k, d) {
+ return rstr2hex(rawHMACMD5(k, d));
+}
+
+function md5(string, key, raw) {
+ if (!key) {
+ if (!raw) {
+ return hexMD5(string);
+ }
+ return rawMD5(string);
+ }
+ if (!raw) {
+ return hexHMACMD5(key, string);
+ }
+ return rawHMACMD5(key, string);
+}
+
+module.exports = md5;
+
+},{}]},{},[8,1,2,3,4])(8)
+});
\ No newline at end of file
diff --git a/packages/raven-js/dist/angular,console,ember,vue/raven.min.js b/packages/raven-js/dist/angular,console,ember,vue/raven.min.js
new file mode 100644
index 000000000000..758649cc0b32
--- /dev/null
+++ b/packages/raven-js/dist/angular,console,ember,vue/raven.min.js
@@ -0,0 +1,4 @@
+/*! Raven.js 3.25.2 (30b6d4e) | github.com/getsentry/raven-js */
+!function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,b.Raven=a()}}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c?c:a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g":"anonymous component")+(a._isVue&&a.$options.__file?" at "+a.$options.__file:"")}function e(a,b){if(b=b||window.Vue,b&&b.config){var c=b.config.errorHandler;b.config.errorHandler=function(b,e,f){var g={};"[object Object]"===Object.prototype.toString.call(e)&&(g.componentName=d(e),g.propsData=e.$options.propsData),"undefined"!=typeof f&&(g.lifecycleHook=f),a.captureException(b,{extra:g}),"function"==typeof c&&c.call(this,b,e,f)}}}b.exports=e,a(8).addPlugin(b.exports)},{8:8}],5:[function(a,b,c){function d(a){this.name="RavenConfigError",this.message=a}d.prototype=new Error,d.prototype.constructor=d,b.exports=d},{}],6:[function(a,b,c){var d=a(9),e=function(a,b,c){var e=a[b],f=a;if(b in a){var g="warn"===b?"warning":b;a[b]=function(){var a=[].slice.call(arguments),h=d.safeJoin(a," "),i={level:g,logger:"console",extra:{arguments:a}};"assert"===b?a[0]===!1&&(h="Assertion failed: "+(d.safeJoin(a.slice(1)," ")||"console.assert"),i.extra.arguments=a.slice(1),c&&c(h,i)):c&&c(h,i),e&&Function.prototype.apply.call(e,f,a)}}};b.exports={wrapMethod:e}},{9:9}],7:[function(a,b,c){(function(c){function d(){return+new Date}function e(a,b){return s(b)?function(c){return b(c,a)}:b}function f(){this.b=!("object"!=typeof JSON||!JSON.stringify),this.c=!r(S),this.d=!r(T),this.e=null,this.f=null,this.g=null,this.h=null,this.i=null,this.j=null,this.k={},this.l={release:R.SENTRY_RELEASE&&R.SENTRY_RELEASE.id,logger:"javascript",ignoreErrors:[],ignoreUrls:[],whitelistUrls:[],includePaths:[],headers:null,collectWindowErrors:!0,captureUnhandledRejections:!0,maxMessageLength:0,maxUrlLength:250,stackTraceLimit:50,autoBreadcrumbs:!0,instrument:!0,sampleRate:1,sanitizeKeys:[]},this.m={method:"POST",keepalive:!0,referrerPolicy:K()?"origin":""},this.n=0,this.o=!1,this.p=Error.stackTraceLimit,this.q=R.console||{},this.r={},this.s=[],this.t=d(),this.u=[],this.v=[],this.w=null,this.x=R.location,this.y=this.x&&this.x.href,this.z();for(var a in this.q)this.r[a]=this.q[a]}var g=a(10),h=a(11),i=a(12),j=a(5),k=a(9),l=k.isErrorEvent,m=k.isDOMError,n=k.isDOMException,o=k.isError,p=k.isObject,q=k.isPlainObject,r=k.isUndefined,s=k.isFunction,t=k.isString,u=k.isArray,v=k.isEmptyObject,w=k.each,x=k.objectMerge,y=k.truncate,z=k.objectFrozen,A=k.hasKey,B=k.joinRegExp,C=k.urlencode,D=k.uuid4,E=k.htmlTreeAsString,F=k.isSameException,G=k.isSameStacktrace,H=k.parseUrl,I=k.fill,J=k.supportsFetch,K=k.supportsReferrerPolicy,L=k.serializeKeysForMessage,M=k.serializeException,N=k.sanitize,O=a(6).wrapMethod,P="source protocol user pass host port path".split(" "),Q=/^(?:(\w+):)?\/\/(?:(\w+)(:\w+)?@)?([\w\.-]+)(?::(\d+))?(\/.*)/,R="undefined"!=typeof window?window:"undefined"!=typeof c?c:"undefined"!=typeof self?self:{},S=R.document,T=R.navigator;f.prototype={VERSION:"3.25.2",debug:!1,TraceKit:g,config:function(a,b){var c=this;if(c.h)return this.A("error","Error: Raven has already been configured"),c;if(!a)return c;var d=c.l;b&&w(b,function(a,b){"tags"===a||"extra"===a||"user"===a?c.k[a]=b:d[a]=b}),c.setDSN(a),d.ignoreErrors.push(/^Script error\.?$/),d.ignoreErrors.push(/^Javascript error: Script error\.? on line 0$/),d.ignoreErrors=B(d.ignoreErrors),d.ignoreUrls=!!d.ignoreUrls.length&&B(d.ignoreUrls),d.whitelistUrls=!!d.whitelistUrls.length&&B(d.whitelistUrls),d.includePaths=B(d.includePaths),d.maxBreadcrumbs=Math.max(0,Math.min(d.maxBreadcrumbs||100,100));var e={xhr:!0,console:!0,dom:!0,location:!0,sentry:!0},f=d.autoBreadcrumbs;"[object Object]"==={}.toString.call(f)?f=x(e,f):f!==!1&&(f=e),d.autoBreadcrumbs=f;var h={tryCatch:!0},i=d.instrument;return"[object Object]"==={}.toString.call(i)?i=x(h,i):i!==!1&&(i=h),d.instrument=i,g.collectWindowErrors=!!d.collectWindowErrors,c},install:function(){var a=this;return a.isSetup()&&!a.o&&(g.report.subscribe(function(){a.B.apply(a,arguments)}),a.l.captureUnhandledRejections&&a.C(),a.D(),a.l.instrument&&a.l.instrument.tryCatch&&a.E(),a.l.autoBreadcrumbs&&a.F(),a.G(),a.o=!0),Error.stackTraceLimit=a.l.stackTraceLimit,this},setDSN:function(a){var b=this,c=b.H(a),d=c.path.lastIndexOf("/"),e=c.path.substr(1,d);b.I=a,b.i=c.user,b.J=c.pass&&c.pass.substr(1),b.j=c.path.substr(d+1),b.h=b.K(c),b.L=b.h+"/"+e+"api/"+b.j+"/store/",this.z()},context:function(a,b,c){return s(a)&&(c=b||[],b=a,a=void 0),this.wrap(a,b).apply(this,c)},wrap:function(a,b,c){function d(){var d=[],f=arguments.length,g=!a||a&&a.deep!==!1;for(c&&s(c)&&c.apply(this,arguments);f--;)d[f]=g?e.wrap(a,arguments[f]):arguments[f];try{return b.apply(this,d)}catch(h){throw e.M(),e.captureException(h,a),h}}var e=this;if(r(b)&&!s(a))return a;if(s(a)&&(b=a,a=void 0),!s(b))return b;try{if(b.N)return b;if(b.O)return b.O}catch(f){return b}for(var g in b)A(b,g)&&(d[g]=b[g]);return d.prototype=b.prototype,b.O=d,d.N=!0,d.P=b,d},uninstall:function(){return g.report.uninstall(),this.Q(),this.R(),this.S(),this.T(),Error.stackTraceLimit=this.p,this.o=!1,this},U:function(a){this.A("debug","Raven caught unhandled promise rejection:",a),this.captureException(a.reason,{extra:{unhandledPromiseRejection:!0}})},C:function(){return this.U=this.U.bind(this),R.addEventListener&&R.addEventListener("unhandledrejection",this.U),this},Q:function(){return R.removeEventListener&&R.removeEventListener("unhandledrejection",this.U),this},captureException:function(a,b){if(b=x({trimHeadFrames:0},b?b:{}),l(a)&&a.error)a=a.error;else{if(m(a)||n(a)){var c=a.name||(m(a)?"DOMError":"DOMException"),d=a.message?c+": "+a.message:c;return this.captureMessage(d,x(b,{stacktrace:!0,trimHeadFrames:b.trimHeadFrames+1}))}if(o(a))a=a;else{if(!q(a))return this.captureMessage(a,x(b,{stacktrace:!0,trimHeadFrames:b.trimHeadFrames+1}));b=this.V(b,a),a=new Error(b.message)}}this.e=a;try{var e=g.computeStackTrace(a);this.W(e,b)}catch(f){if(a!==f)throw f}return this},V:function(a,b){var c=Object.keys(b).sort(),d=x(a,{message:"Non-Error exception captured with keys: "+L(c),fingerprint:[i(c)],extra:a.extra||{}});return d.extra.X=M(b),d},captureMessage:function(a,b){if(!this.l.ignoreErrors.test||!this.l.ignoreErrors.test(a)){b=b||{},a+="";var c,d=x({message:a},b);try{throw new Error(a)}catch(e){c=e}c.name=null;var f=g.computeStackTrace(c),h=u(f.stack)&&f.stack[1];h&&"Raven.captureException"===h.func&&(h=f.stack[2]);var i=h&&h.url||"";if((!this.l.ignoreUrls.test||!this.l.ignoreUrls.test(i))&&(!this.l.whitelistUrls.test||this.l.whitelistUrls.test(i))){if(this.l.stacktrace||b&&b.stacktrace){d.fingerprint=null==d.fingerprint?a:d.fingerprint,b=x({trimHeadFrames:0},b),b.trimHeadFrames+=1;var j=this.Y(f,b);d.stacktrace={frames:j.reverse()}}return d.fingerprint&&(d.fingerprint=u(d.fingerprint)?d.fingerprint:[d.fingerprint]),this.Z(d),this}}},captureBreadcrumb:function(a){var b=x({timestamp:d()/1e3},a);if(s(this.l.breadcrumbCallback)){var c=this.l.breadcrumbCallback(b);if(p(c)&&!v(c))b=c;else if(c===!1)return this}return this.v.push(b),this.v.length>this.l.maxBreadcrumbs&&this.v.shift(),this},addPlugin:function(a){var b=[].slice.call(arguments,1);return this.s.push([a,b]),this.o&&this.G(),this},setUserContext:function(a){return this.k.user=a,this},setExtraContext:function(a){return this.$("extra",a),this},setTagsContext:function(a){return this.$("tags",a),this},clearContext:function(){return this.k={},this},getContext:function(){return JSON.parse(h(this.k))},setEnvironment:function(a){return this.l.environment=a,this},setRelease:function(a){return this.l.release=a,this},setDataCallback:function(a){var b=this.l.dataCallback;return this.l.dataCallback=e(b,a),this},setBreadcrumbCallback:function(a){var b=this.l.breadcrumbCallback;return this.l.breadcrumbCallback=e(b,a),this},setShouldSendCallback:function(a){var b=this.l.shouldSendCallback;return this.l.shouldSendCallback=e(b,a),this},setTransport:function(a){return this.l.transport=a,this},lastException:function(){return this.e},lastEventId:function(){return this.g},isSetup:function(){return!!this.b&&(!!this.h||(this.ravenNotConfiguredError||(this.ravenNotConfiguredError=!0,this.A("error","Error: Raven has not been configured.")),!1))},afterLoad:function(){var a=R.RavenConfig;a&&this.config(a.dsn,a.config).install()},showReportDialog:function(a){if(S){a=a||{};var b=a.eventId||this.lastEventId();if(!b)throw new j("Missing eventId");var c=a.dsn||this.I;if(!c)throw new j("Missing DSN");var d=encodeURIComponent,e="";e+="?eventId="+d(b),e+="&dsn="+d(c);var f=a.user||this.k.user;f&&(f.name&&(e+="&name="+d(f.name)),f.email&&(e+="&email="+d(f.email)));var g=this.K(this.H(c)),h=S.createElement("script");h.async=!0,h.src=g+"/api/embed/error-page/"+e,(S.head||S.body).appendChild(h)}},M:function(){var a=this;this.n+=1,setTimeout(function(){a.n-=1})},_:function(a,b){var c,d;if(this.c){b=b||{},a="raven"+a.substr(0,1).toUpperCase()+a.substr(1),S.createEvent?(c=S.createEvent("HTMLEvents"),c.initEvent(a,!0,!0)):(c=S.createEventObject(),c.eventType=a);for(d in b)A(b,d)&&(c[d]=b[d]);if(S.createEvent)S.dispatchEvent(c);else try{S.fireEvent("on"+c.eventType.toLowerCase(),c)}catch(e){}}},aa:function(a){var b=this;return function(c){if(b.ba=null,b.w!==c){b.w=c;var d;try{d=E(c.target)}catch(e){d=""}b.captureBreadcrumb({category:"ui."+a,message:d})}}},ca:function(){var a=this,b=1e3;return function(c){var d;try{d=c.target}catch(e){return}var f=d&&d.tagName;if(f&&("INPUT"===f||"TEXTAREA"===f||d.isContentEditable)){var g=a.ba;g||a.aa("input")(c),clearTimeout(g),a.ba=setTimeout(function(){a.ba=null},b)}}},da:function(a,b){var c=H(this.x.href),d=H(b),e=H(a);this.y=b,c.protocol===d.protocol&&c.host===d.host&&(b=d.relative),c.protocol===e.protocol&&c.host===e.host&&(a=e.relative),this.captureBreadcrumb({category:"navigation",data:{to:b,from:a}})},D:function(){var a=this;a.ea=Function.prototype.toString,Function.prototype.toString=function(){return"function"==typeof this&&this.N?a.ea.apply(this.P,arguments):a.ea.apply(this,arguments)}},R:function(){this.ea&&(Function.prototype.toString=this.ea)},E:function(){function a(a){return function(b,d){for(var e=new Array(arguments.length),f=0;f2?arguments[2]:void 0;return c&&b.da(b.y,c+""),a.apply(this,arguments)}};I(R.history,"pushState",j,d),I(R.history,"replaceState",j,d)}if(c.console&&"console"in R&&console.log){var k=function(a,c){b.captureBreadcrumb({message:a,level:c.level,category:"console"})};w(["debug","info","warn","error","log"],function(a,b){O(console,b,k)})}},S:function(){for(var a;this.u.length;){a=this.u.shift();var b=a[0],c=a[1],d=a[2];b[c]=d}},T:function(){for(var a in this.r)this.q[a]=this.r[a]},G:function(){var a=this;w(this.s,function(b,c){var d=c[0],e=c[1];d.apply(a,[a].concat(e))})},H:function(a){var b=Q.exec(a),c={},d=7;try{for(;d--;)c[P[d]]=b[d]||""}catch(e){throw new j("Invalid DSN: "+a)}if(c.pass&&!this.l.allowSecretKey)throw new j("Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key");return c},K:function(a){var b="//"+a.host+(a.port?":"+a.port:"");return a.protocol&&(b=a.protocol+":"+b),b},B:function(){this.n||this.W.apply(this,arguments)},W:function(a,b){var c=this.Y(a,b);this._("handle",{stackInfo:a,options:b}),this.ga(a.name,a.message,a.url,a.lineno,c,b)},Y:function(a,b){var c=this,d=[];if(a.stack&&a.stack.length&&(w(a.stack,function(b,e){var f=c.ha(e,a.url);f&&d.push(f)}),b&&b.trimHeadFrames))for(var e=0;e0&&(a.breadcrumbs={values:[].slice.call(this.v,0)}),this.k.user&&(a.user=this.k.user),b.environment&&(a.environment=b.environment),b.release&&(a.release=b.release),b.serverName&&(a.server_name=b.serverName),a=this.qa(a),Object.keys(a).forEach(function(b){(null==a[b]||""===a[b]||v(a[b]))&&delete a[b]}),s(b.dataCallback)&&(a=b.dataCallback(a)||a),a&&!v(a)&&(!s(b.shouldSendCallback)||b.shouldSendCallback(a)))return this.na()?void this.A("warn","Raven dropped error due to backoff: ",a):void("number"==typeof b.sampleRate?Math.random() ",i=h.length;a&&f++1&&g+e.length*i+b.length>=d));)e.push(b),g+=b.length,a=a.parentNode;return e.reverse().join(h)}function F(a){var b,c,d,e,f,g=[];if(!a||!a.tagName)return"";if(g.push(a.tagName.toLowerCase()),a.id&&g.push("#"+a.id),b=a.className,b&&l(b))for(c=b.split(/\s+/),f=0;fc?Q(a,b-1):d}function R(a,b){if("number"==typeof a||"string"==typeof a)return a.toString();if(!Array.isArray(a))return"";if(a=a.filter(function(a){return"string"==typeof a}),0===a.length)return"[object has no keys]";if(b="number"!=typeof b?X:b,a[0].length>=b)return a[0];for(var c=a.length;c>0;c--){var d=a.slice(0,c).join(", ");if(!(d.length>b))return c===a.length?d:d+"…"}return""}function S(a,b){function c(a){return m(a)?a.map(function(a){return c(a)}):k(a)?Object.keys(a).reduce(function(b,d){return b[d]=e.test(d)?f:c(a[d]),b},{}):a}if(!m(b)||m(b)&&0===b.length)return a;var d,e=A(b),f="********";try{d=JSON.parse(T(a))}catch(g){return a}return c(d)}var T=a(11),U="undefined"!=typeof window?window:"undefined"!=typeof c?c:"undefined"!=typeof self?self:{},V=3,W=51200,X=40;b.exports={isObject:d,isError:e,isErrorEvent:f,isDOMError:g,isDOMException:h,isUndefined:i,isFunction:j,isPlainObject:k,isString:l,isArray:m,isEmptyObject:n,supportsErrorEvent:o,supportsDOMError:p,supportsDOMException:q,supportsFetch:r,supportsReferrerPolicy:s,supportsPromiseRejectionEvent:t,wrappedCallback:u,each:v,objectMerge:w,truncate:y,objectFrozen:x,hasKey:z,joinRegExp:A,urlencode:B,uuid4:D,htmlTreeAsString:E,htmlElementAsString:F,isSameException:I,isSameStacktrace:J,parseUrl:C,fill:K,safeJoin:L,serializeException:Q,serializeKeysForMessage:R,sanitize:S}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{11:11}],10:[function(a,b,c){(function(c){function d(){return"undefined"==typeof document||null==document.location?"":document.location.href}function e(){return"undefined"==typeof document||null==document.location?"":(document.location.origin||(document.location.origin=document.location.protocol+"//"+document.location.hostname+(document.location.port?":"+document.location.port:"")),document.location.origin)}var f=a(9),g={collectWindowErrors:!0,debug:!1},h="undefined"!=typeof window?window:"undefined"!=typeof c?c:"undefined"!=typeof self?self:{},i=[].slice,j="?",k=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;g.report=function(){function a(a){m(),s.push(a)}function b(a){for(var b=s.length-1;b>=0;--b)s[b]===a&&s.splice(b,1)}function c(){n(),s=[]}function e(a,b){var c=null;if(!b||g.collectWindowErrors){for(var d in s)if(s.hasOwnProperty(d))try{s[d].apply(null,[a].concat(i.call(arguments,2)))}catch(e){c=e}if(c)throw c}}function l(a,b,c,h,i){var l=null,m=f.isErrorEvent(i)?i.error:i,n=f.isErrorEvent(a)?a.message:a;if(v)g.computeStackTrace.augmentStackTraceWithInitialElement(v,b,c,n),o();else if(m&&f.isError(m))l=g.computeStackTrace(m),e(l,!0);else{var p,r={url:b,line:c,column:h},s=void 0;if("[object String]"==={}.toString.call(n)){var p=n.match(k);p&&(s=p[1],n=p[2])}r.func=j,l={name:s,message:n,url:d(),stack:[r]},e(l,!0)}return!!q&&q.apply(this,arguments)}function m(){r||(q=h.onerror,h.onerror=l,r=!0)}function n(){r&&(h.onerror=q,r=!1,q=void 0)}function o(){var a=v,b=t;t=null,v=null,u=null,e.apply(null,[a,!1].concat(b))}function p(a,b){var c=i.call(arguments,1);if(v){if(u===a)return;o()}var d=g.computeStackTrace(a);if(v=d,u=a,t=c,setTimeout(function(){u===a&&o()},d.incomplete?2e3:0),b!==!1)throw a}var q,r,s=[],t=null,u=null,v=null;return p.subscribe=a,p.unsubscribe=b,p.uninstall=c,p}(),g.computeStackTrace=function(){function a(a){if("undefined"!=typeof a.stack&&a.stack){for(var b,c,f,g=/^\s*at (?:(.*?) ?\()?((?:file|https?|blob|chrome-extension|native|eval|webpack||[a-z]:|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,h=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i,i=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\/.*?|\[native code\]|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i,k=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,l=/\((\S*)(?::(\d+))(?::(\d+))\)/,m=a.stack.split("\n"),n=[],o=(/^(.*) is undefined$/.exec(a.message),0),p=m.length;o eval")>-1;r&&(b=k.exec(c[3]))?(c[3]=b[1],c[4]=b[2],c[5]=null):0!==o||c[5]||"undefined"==typeof a.columnNumber||(n[0].column=a.columnNumber+1),f={url:c[3],func:c[1]||j,args:c[2]?c[2].split(","):[],line:c[4]?+c[4]:null,column:c[5]?+c[5]:null}}if(!f.func&&f.line&&(f.func=j),f.url&&"blob:"===f.url.substr(0,5)){var s=new XMLHttpRequest;if(s.open("GET",f.url,!1),s.send(null),200===s.status){var t=s.responseText||"";t=t.slice(-300);var u=t.match(/\/\/# sourceMappingURL=(.*)$/);if(u){var v=u[1];"~"===v.charAt(0)&&(v=e()+v.slice(1)),f.url=v.slice(0,-4)}}}n.push(f)}return n.length?{name:a.name,message:a.message,url:d(),stack:n}:null}}function b(a,b,c,d){var e={url:b,line:c};if(e.url&&e.line){if(a.incomplete=!1,e.func||(e.func=j),a.stack.length>0&&a.stack[0].url===e.url){if(a.stack[0].line===e.line)return!1;if(!a.stack[0].line&&a.stack[0].func===e.func)return a.stack[0].line=e.line,!1}return a.stack.unshift(e),a.partial=!0,!0}return a.incomplete=!0,!1}function c(a,e){for(var h,i,k=/function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,l=[],m={},n=!1,o=c.caller;o&&!n;o=o.caller)if(o!==f&&o!==g.report){if(i={url:null,func:j,line:null,column:null},o.name?i.func=o.name:(h=k.exec(o.toString()))&&(i.func=h[1]),"undefined"==typeof i.func)try{i.func=h.input.substring(0,h.input.indexOf("{"))}catch(p){}m[""+o]?n=!0:m[""+o]=!0,l.push(i)}e&&l.splice(0,e);var q={name:a.name,message:a.message,url:d(),stack:l};return b(q,a.sourceURL||a.fileName,a.line||a.lineNumber,a.message||a.description),q}function f(b,e){var f=null;e=null==e?0:+e;try{if(f=a(b))return f}catch(h){if(g.debug)throw h}try{if(f=c(b,e+1))return f}catch(h){if(g.debug)throw h}return{name:b.name,message:b.message,url:d()}}return f.augmentStackTraceWithInitialElement=b,f.computeStackTraceFromStackProp=a,f}(),b.exports=g}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{9:9}],11:[function(a,b,c){function d(a,b){for(var c=0;c0){var i=d(c,this);~i?c.splice(i+1):c.push(this),~i?e.splice(i,1/0,g):e.push(g),~d(c,h)&&(h=b.call(this,g,h))}else c.push(h);return null==a?h instanceof Error?f(h):h:a.call(this,g,h)}}c=b.exports=e,c.getSerialize=g},{}],12:[function(a,b,c){function d(a,b){var c=(65535&a)+(65535&b),d=(a>>16)+(b>>16)+(c>>16);return d<<16|65535&c}function e(a,b){return a<>>32-b}function f(a,b,c,f,g,h){return d(e(d(d(b,a),d(f,h)),g),c)}function g(a,b,c,d,e,g,h){return f(b&c|~b&d,a,b,e,g,h)}function h(a,b,c,d,e,g,h){return f(b&d|c&~d,a,b,e,g,h)}function i(a,b,c,d,e,g,h){return f(b^c^d,a,b,e,g,h)}function j(a,b,c,d,e,g,h){return f(c^(b|~d),a,b,e,g,h)}function k(a,b){a[b>>5]|=128<>>9<<4)+14]=b;var c,e,f,k,l,m=1732584193,n=-271733879,o=-1732584194,p=271733878;for(c=0;c>5]>>>b%32&255);return c}function m(a){var b,c=[];for(c[(a.length>>2)-1]=void 0,b=0;b>5]|=(255&a.charCodeAt(b/8))<16&&(e=k(e,8*a.length)),c=0;c<16;c+=1)f[c]=909522486^e[c],g[c]=1549556828^e[c];return d=k(f.concat(m(b)),512+8*b.length),l(k(g.concat(d),640))}function p(a){var b,c,d="0123456789abcdef",e="";for(c=0;c>>4&15)+d.charAt(15&b);return e}function q(a){return unescape(encodeURIComponent(a))}function r(a){return n(q(a))}function s(a){return p(r(a))}function t(a,b){return o(q(a),q(b))}function u(a,b){return p(t(a,b))}function v(a,b,c){return b?c?t(b,a):u(b,a):c?r(a):s(a)}b.exports=v},{}]},{},[8,1,2,3,4])(8)});
+//# sourceMappingURL=raven.min.js.map
\ No newline at end of file
diff --git a/packages/raven-js/dist/angular,console,ember,vue/raven.min.js.map b/packages/raven-js/dist/angular,console,ember,vue/raven.min.js.map
new file mode 100644
index 000000000000..01d0c11c4c2f
--- /dev/null
+++ b/packages/raven-js/dist/angular,console,ember,vue/raven.min.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["raven.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Raven","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length","1","_dereq_","angularPlugin","angular","RavenProvider","$get","$window","ExceptionHandlerProvider","$provide","decorator","exceptionHandler","R","$delegate","ex","cause","captureException","extra","moduleName","provider","config","setDataCallback","wrappedCallback","data","_normalizeData","angularPattern","exception","values","matches","exec","value","type","message","angularDocs","substr","addPlugin","8","9","2","consolePlugin","console","pluginOptions","logLevels","levels","push","callback","msg","captureMessage","level","pop","wrapConsoleMethod","wrapMethod","6","3","emberPlugin","Ember","_oldOnError","onerror","error","RSVP","on","reason","context","4","formatComponentName","vm","$root","name","_isVue","$options","_componentTag","__file","vuePlugin","Vue","errorHandler","info","metaData","Object","prototype","toString","componentName","propsData","lifecycleHook","5","RavenConfigError","constructor","utils","originalConsoleLevel","originalConsole","sentryLevel","args","slice","arguments","safeJoin","logger","Function","apply","7","now","Date","keepOriginalCallback","original","isFunction","_hasJSON","JSON","stringify","_hasDocument","isUndefined","_document","_hasNavigator","_navigator","_lastCapturedException","_lastData","_lastEventId","_globalServer","_globalKey","_globalProject","_globalContext","_globalOptions","release","_window","SENTRY_RELEASE","id","ignoreErrors","ignoreUrls","whitelistUrls","includePaths","headers","collectWindowErrors","captureUnhandledRejections","maxMessageLength","maxUrlLength","stackTraceLimit","autoBreadcrumbs","instrument","sampleRate","sanitizeKeys","_fetchDefaults","method","keepalive","referrerPolicy","supportsReferrerPolicy","_ignoreOnError","_isRavenInstalled","_originalErrorStackTraceLimit","_originalConsole","_originalConsoleMethods","_plugins","_startTime","_wrappedBuiltIns","_breadcrumbs","_lastCapturedEvent","_location","location","_lastHref","href","_resetBackoff","TraceKit","md5","isErrorEvent","isDOMError","isDOMException","isError","isObject","isPlainObject","isString","isArray","isEmptyObject","each","objectMerge","truncate","objectFrozen","hasKey","joinRegExp","urlencode","uuid4","htmlTreeAsString","isSameException","isSameStacktrace","parseUrl","fill","supportsFetch","serializeKeysForMessage","serializeException","sanitize","dsnKeys","split","dsnPattern","document","navigator","VERSION","debug","dsn","options","_logDebug","globalOptions","key","setDSN","maxBreadcrumbs","Math","max","min","autoBreadcrumbDefaults","xhr","dom","sentry","instrumentDefaults","tryCatch","install","isSetup","report","subscribe","_handleOnErrorStackInfo","_attachPromiseRejectionHandler","_patchFunctionToString","_instrumentTryCatch","_instrumentBreadcrumbs","_drainPlugins","uri","_parseDSN","lastSlash","path","lastIndexOf","_dsn","user","_globalSecret","pass","_getGlobalServer","_globalEndpoint","func","undefined","wrap","_before","wrapped","deep","_ignoreNextOnError","__raven__","__raven_wrapper__","property","__orig__","uninstall","_detachPromiseRejectionHandler","_unpatchFunctionToString","_restoreBuiltIns","_restoreConsole","U","event","unhandledPromiseRejection","C","_promiseRejectionHandler","bind","addEventListener","Q","removeEventListener","trimHeadFrames","stacktrace","_getCaptureExceptionOptionsFromPlainObject","stack","computeStackTrace","_handleStackInfo","ex1","V","currentOptions","exKeys","keys","sort","fingerprint","__serialized__","test","initialCall","fileurl","url","frames","_prepareFrames","reverse","_send","captureBreadcrumb","obj","crumb","timestamp","breadcrumbCallback","result","shift","plugin","pluginArgs","setUserContext","setExtraContext","_mergeContext","setTagsContext","tags","clearContext","getContext","parse","setEnvironment","environment","setRelease","dataCallback","setBreadcrumbCallback","setShouldSendCallback","shouldSendCallback","setTransport","transport","lastException","lastEventId","ravenNotConfiguredError","afterLoad","RavenConfig","showReportDialog","eventId","encode","encodeURIComponent","qs","email","globalServer","script","createElement","async","src","head","body","appendChild","M","setTimeout","_","eventType","evt","toUpperCase","createEvent","initEvent","createEventObject","dispatchEvent","fireEvent","toLowerCase","aa","evtName","_keypressTimeout","target","category","ca","debounceDuration","tagName","isContentEditable","timeout","_breadcrumbEventHandler","clearTimeout","da","from","to","parsedLoc","parsedTo","parsedFrom","protocol","host","relative","D","_originalFunctionToString","E","wrapTimeFn","orig","fn","Array","originalCallback","wrapEventTarget","proto","hasOwnProperty","capture","secure","handleEvent","err","before","clickHandler","keypressHandler","_keypressEventHandler","wrappedBuiltIns","requestAnimationFrame","cb","eventTargets","F","wrapProp","prop","xhrproto","XMLHttpRequest","origOpen","indexOf","__raven_xhr","status_code","origSend","onreadystatechangeHandler","readyState","status","props","j","onreadystatechange","origFetch","fetchInput","Request","fetchData","then","response","attachEvent","chrome","isChromePackagedApp","app","runtime","hasPushAndReplaceState","history","pushState","replaceState","oldOnPopState","onpopstate","currentHref","_captureUrlChange","historyReplacementFunction","origHistFunction","log","consoleMethodCallback","S","builtin","T","G","installer","concat","H","str","m","allowSecretKey","K","port","B","W","stackInfo","_triggerEvent","_processException","lineno","Y","frame","_normalizeFrame","in_app","ha","stackInfoUrl","normalized","filename","line","colno","column","function","ga","prefixedMessage","transaction","ia","request","Referer","breadcrumbs","_trimBreadcrumbs","ja","urlProp","urlProps","ka","httpData","userAgent","User-Agent","referrer","z","_backoffDuration","_backoffStart","na","oa","current","last","pa","_shouldBackoff","retry","get","getResponseHeader","parseInt","Z","baseData","project","platform","_getHttpData","serverName","server_name","_sanitizeData","forEach","random","_sendProcessedPayload","qa","sa","ra","_trimPacket","allowDuplicates","_isRepeatData","event_id","_getUuid","auth","sentry_version","sentry_client","sentry_key","sentry_secret","_makeRequest","onSuccess","onError","_setBackoffState","ta","opts","evaluatedHeaders","evaluatedFetchParameters","_evaluateHash","fetchParameters","defaultFetchOptions","fetchOptions","fetch","ok","hasCORS","XDomainRequest","replace","onload","open","setRequestHeader","send","ua","hash","evaluated","A","$","setUser","setReleaseContext","10","11","12","RavenConstructor","_Raven","noConflict","Client","what","supportsErrorEvent","ErrorEvent","supportsDOMError","DOMError","supportsDOMException","DOMException","Headers","Response","supportsPromiseRejectionEvent","PromiseRejectionEvent","normalizedData","obj1","obj2","isFrozen","object","patterns","pattern","sources","len","source","RegExp","join","pairs","match","query","fragment","crypto","msCrypto","getRandomValues","arr","Uint16Array","pad","num","v","c","elem","nextStr","MAX_TRAVERSE_HEIGHT","MAX_OUTPUT_LEN","out","height","separator","sepLength","htmlElementAsString","parentNode","className","classes","attr","attrWhitelist","getAttribute","isOnlyOneTruthy","b","isBothUndefined","ex2","stack1","stack2","frames1","frames2","replacement","track","input","delimiter","output","String","utf8Length","encodeURI","jsonSize","serializeValue","maxLength","serializeObject","depth","reduce","acc","map","val","maxSize","MAX_SERIALIZE_EXCEPTION_DEPTH","MAX_SERIALIZE_EXCEPTION_SIZE","serialized","filter","MAX_SERIALIZE_KEYS_LENGTH","usedKeys","sanitizeWorker","workerInput","k","sanitizeRegExp","sanitizeMask","safeInput","o_O","getLocationHref","getLocationOrigin","origin","hostname","_slice","UNKNOWN_FUNCTION","ERROR_TYPES_RE","handler","installGlobalHandler","handlers","unsubscribe","splice","unsubscribeAll","uninstallGlobalHandler","notifyHandlers","isWindowError","inner","traceKitWindowOnError","lineNo","colNo","lastExceptionStack","augmentStackTraceWithInitialElement","processLastException","groups","_oldOnerrorHandler","_onErrorHandlerInstalled","_lastExceptionStack","_lastArgs","lastArgs","rethrow","incomplete","computeStackTraceFromStackProp","submatch","parts","element","winjs","gecko","geckoEval","chromeEval","lines","isNative","isEval","columnNumber","responseText","sourceMaps","sourceMapAddress","charAt","initial","unshift","partial","computeStackTraceByWalkingCallerChain","item","functionName","funcs","recursion","curr","caller","substring","sourceURL","fileName","lineNumber","description","haystack","needle","replacer","spaces","cycleReplacer","serializer","stringifyError","thisPos","Infinity","getSerialize","safeAdd","x","y","lsw","msw","bitRotateLeft","cnt","md5cmn","q","md5ff","d","md5gg","md5hh","md5ii","binlMD5","olda","oldb","oldc","oldd","binl2rstr","length32","fromCharCode","rstr2binl","length8","charCodeAt","rstrMD5","rstrHMACMD5","bkey","ipad","opad","rstr2hex","hexTab","str2rstrUTF8","unescape","rawMD5","hexMD5","rawHMACMD5","hexHMACMD5","string","raw"],"mappings":"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","file":"raven.min.js"}
\ No newline at end of file
diff --git a/packages/raven-js/dist/angular,console,ember/raven.js b/packages/raven-js/dist/angular,console,ember/raven.js
new file mode 100644
index 000000000000..05bfcb6e2499
--- /dev/null
+++ b/packages/raven-js/dist/angular,console,ember/raven.js
@@ -0,0 +1,4155 @@
+/*! Raven.js 3.25.2 (30b6d4e) | github.com/getsentry/raven-js */
+
+/*
+ * Includes TraceKit
+ * https://github.com/getsentry/TraceKit
+ *
+ * Copyright 2018 Matt Robenolt and other contributors
+ * Released under the BSD license
+ * https://github.com/getsentry/raven-js/blob/master/LICENSE
+ *
+ */
+
+(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Raven = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o captureException(string) => captureMessage(string)
+ if (initialCall && initialCall.func === 'Raven.captureException') {
+ initialCall = stack.stack[2];
+ }
+
+ var fileurl = (initialCall && initialCall.url) || '';
+
+ if (
+ !!this._globalOptions.ignoreUrls.test &&
+ this._globalOptions.ignoreUrls.test(fileurl)
+ ) {
+ return;
+ }
+
+ if (
+ !!this._globalOptions.whitelistUrls.test &&
+ !this._globalOptions.whitelistUrls.test(fileurl)
+ ) {
+ return;
+ }
+
+ if (this._globalOptions.stacktrace || (options && options.stacktrace)) {
+ // fingerprint on msg, not stack trace (legacy behavior, could be revisited)
+ data.fingerprint = data.fingerprint == null ? msg : data.fingerprint;
+
+ options = objectMerge(
+ {
+ trimHeadFrames: 0
+ },
+ options
+ );
+ // Since we know this is a synthetic trace, the top frame (this function call)
+ // MUST be from Raven.js, so mark it for trimming
+ // We add to the trim counter so that callers can choose to trim extra frames, such
+ // as utility functions.
+ options.trimHeadFrames += 1;
+
+ var frames = this._prepareFrames(stack, options);
+ data.stacktrace = {
+ // Sentry expects frames oldest to newest
+ frames: frames.reverse()
+ };
+ }
+
+ // Make sure that fingerprint is always wrapped in an array
+ if (data.fingerprint) {
+ data.fingerprint = isArray(data.fingerprint)
+ ? data.fingerprint
+ : [data.fingerprint];
+ }
+
+ // Fire away!
+ this._send(data);
+
+ return this;
+ },
+
+ captureBreadcrumb: function(obj) {
+ var crumb = objectMerge(
+ {
+ timestamp: now() / 1000
+ },
+ obj
+ );
+
+ if (isFunction(this._globalOptions.breadcrumbCallback)) {
+ var result = this._globalOptions.breadcrumbCallback(crumb);
+
+ if (isObject(result) && !isEmptyObject(result)) {
+ crumb = result;
+ } else if (result === false) {
+ return this;
+ }
+ }
+
+ this._breadcrumbs.push(crumb);
+ if (this._breadcrumbs.length > this._globalOptions.maxBreadcrumbs) {
+ this._breadcrumbs.shift();
+ }
+ return this;
+ },
+
+ addPlugin: function(plugin /*arg1, arg2, ... argN*/) {
+ var pluginArgs = [].slice.call(arguments, 1);
+
+ this._plugins.push([plugin, pluginArgs]);
+ if (this._isRavenInstalled) {
+ this._drainPlugins();
+ }
+
+ return this;
+ },
+
+ /*
+ * Set/clear a user to be sent along with the payload.
+ *
+ * @param {object} user An object representing user data [optional]
+ * @return {Raven}
+ */
+ setUserContext: function(user) {
+ // Intentionally do not merge here since that's an unexpected behavior.
+ this._globalContext.user = user;
+
+ return this;
+ },
+
+ /*
+ * Merge extra attributes to be sent along with the payload.
+ *
+ * @param {object} extra An object representing extra data [optional]
+ * @return {Raven}
+ */
+ setExtraContext: function(extra) {
+ this._mergeContext('extra', extra);
+
+ return this;
+ },
+
+ /*
+ * Merge tags to be sent along with the payload.
+ *
+ * @param {object} tags An object representing tags [optional]
+ * @return {Raven}
+ */
+ setTagsContext: function(tags) {
+ this._mergeContext('tags', tags);
+
+ return this;
+ },
+
+ /*
+ * Clear all of the context.
+ *
+ * @return {Raven}
+ */
+ clearContext: function() {
+ this._globalContext = {};
+
+ return this;
+ },
+
+ /*
+ * Get a copy of the current context. This cannot be mutated.
+ *
+ * @return {object} copy of context
+ */
+ getContext: function() {
+ // lol javascript
+ return JSON.parse(stringify(this._globalContext));
+ },
+
+ /*
+ * Set environment of application
+ *
+ * @param {string} environment Typically something like 'production'.
+ * @return {Raven}
+ */
+ setEnvironment: function(environment) {
+ this._globalOptions.environment = environment;
+
+ return this;
+ },
+
+ /*
+ * Set release version of application
+ *
+ * @param {string} release Typically something like a git SHA to identify version
+ * @return {Raven}
+ */
+ setRelease: function(release) {
+ this._globalOptions.release = release;
+
+ return this;
+ },
+
+ /*
+ * Set the dataCallback option
+ *
+ * @param {function} callback The callback to run which allows the
+ * data blob to be mutated before sending
+ * @return {Raven}
+ */
+ setDataCallback: function(callback) {
+ var original = this._globalOptions.dataCallback;
+ this._globalOptions.dataCallback = keepOriginalCallback(original, callback);
+ return this;
+ },
+
+ /*
+ * Set the breadcrumbCallback option
+ *
+ * @param {function} callback The callback to run which allows filtering
+ * or mutating breadcrumbs
+ * @return {Raven}
+ */
+ setBreadcrumbCallback: function(callback) {
+ var original = this._globalOptions.breadcrumbCallback;
+ this._globalOptions.breadcrumbCallback = keepOriginalCallback(original, callback);
+ return this;
+ },
+
+ /*
+ * Set the shouldSendCallback option
+ *
+ * @param {function} callback The callback to run which allows
+ * introspecting the blob before sending
+ * @return {Raven}
+ */
+ setShouldSendCallback: function(callback) {
+ var original = this._globalOptions.shouldSendCallback;
+ this._globalOptions.shouldSendCallback = keepOriginalCallback(original, callback);
+ return this;
+ },
+
+ /**
+ * Override the default HTTP transport mechanism that transmits data
+ * to the Sentry server.
+ *
+ * @param {function} transport Function invoked instead of the default
+ * `makeRequest` handler.
+ *
+ * @return {Raven}
+ */
+ setTransport: function(transport) {
+ this._globalOptions.transport = transport;
+
+ return this;
+ },
+
+ /*
+ * Get the latest raw exception that was captured by Raven.
+ *
+ * @return {error}
+ */
+ lastException: function() {
+ return this._lastCapturedException;
+ },
+
+ /*
+ * Get the last event id
+ *
+ * @return {string}
+ */
+ lastEventId: function() {
+ return this._lastEventId;
+ },
+
+ /*
+ * Determine if Raven is setup and ready to go.
+ *
+ * @return {boolean}
+ */
+ isSetup: function() {
+ if (!this._hasJSON) return false; // needs JSON support
+ if (!this._globalServer) {
+ if (!this.ravenNotConfiguredError) {
+ this.ravenNotConfiguredError = true;
+ this._logDebug('error', 'Error: Raven has not been configured.');
+ }
+ return false;
+ }
+ return true;
+ },
+
+ afterLoad: function() {
+ // TODO: remove window dependence?
+
+ // Attempt to initialize Raven on load
+ var RavenConfig = _window.RavenConfig;
+ if (RavenConfig) {
+ this.config(RavenConfig.dsn, RavenConfig.config).install();
+ }
+ },
+
+ showReportDialog: function(options) {
+ if (
+ !_document // doesn't work without a document (React native)
+ )
+ return;
+
+ options = options || {};
+
+ var lastEventId = options.eventId || this.lastEventId();
+ if (!lastEventId) {
+ throw new RavenConfigError('Missing eventId');
+ }
+
+ var dsn = options.dsn || this._dsn;
+ if (!dsn) {
+ throw new RavenConfigError('Missing DSN');
+ }
+
+ var encode = encodeURIComponent;
+ var qs = '';
+ qs += '?eventId=' + encode(lastEventId);
+ qs += '&dsn=' + encode(dsn);
+
+ var user = options.user || this._globalContext.user;
+ if (user) {
+ if (user.name) qs += '&name=' + encode(user.name);
+ if (user.email) qs += '&email=' + encode(user.email);
+ }
+
+ var globalServer = this._getGlobalServer(this._parseDSN(dsn));
+
+ var script = _document.createElement('script');
+ script.async = true;
+ script.src = globalServer + '/api/embed/error-page/' + qs;
+ (_document.head || _document.body).appendChild(script);
+ },
+
+ /**** Private functions ****/
+ _ignoreNextOnError: function() {
+ var self = this;
+ this._ignoreOnError += 1;
+ setTimeout(function() {
+ // onerror should trigger before setTimeout
+ self._ignoreOnError -= 1;
+ });
+ },
+
+ _triggerEvent: function(eventType, options) {
+ // NOTE: `event` is a native browser thing, so let's avoid conflicting wiht it
+ var evt, key;
+
+ if (!this._hasDocument) return;
+
+ options = options || {};
+
+ eventType = 'raven' + eventType.substr(0, 1).toUpperCase() + eventType.substr(1);
+
+ if (_document.createEvent) {
+ evt = _document.createEvent('HTMLEvents');
+ evt.initEvent(eventType, true, true);
+ } else {
+ evt = _document.createEventObject();
+ evt.eventType = eventType;
+ }
+
+ for (key in options)
+ if (hasKey(options, key)) {
+ evt[key] = options[key];
+ }
+
+ if (_document.createEvent) {
+ // IE9 if standards
+ _document.dispatchEvent(evt);
+ } else {
+ // IE8 regardless of Quirks or Standards
+ // IE9 if quirks
+ try {
+ _document.fireEvent('on' + evt.eventType.toLowerCase(), evt);
+ } catch (e) {
+ // Do nothing
+ }
+ }
+ },
+
+ /**
+ * Wraps addEventListener to capture UI breadcrumbs
+ * @param evtName the event name (e.g. "click")
+ * @returns {Function}
+ * @private
+ */
+ _breadcrumbEventHandler: function(evtName) {
+ var self = this;
+ return function(evt) {
+ // reset keypress timeout; e.g. triggering a 'click' after
+ // a 'keypress' will reset the keypress debounce so that a new
+ // set of keypresses can be recorded
+ self._keypressTimeout = null;
+
+ // It's possible this handler might trigger multiple times for the same
+ // event (e.g. event propagation through node ancestors). Ignore if we've
+ // already captured the event.
+ if (self._lastCapturedEvent === evt) return;
+
+ self._lastCapturedEvent = evt;
+
+ // try/catch both:
+ // - accessing evt.target (see getsentry/raven-js#838, #768)
+ // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly
+ // can throw an exception in some circumstances.
+ var target;
+ try {
+ target = htmlTreeAsString(evt.target);
+ } catch (e) {
+ target = '';
+ }
+
+ self.captureBreadcrumb({
+ category: 'ui.' + evtName, // e.g. ui.click, ui.input
+ message: target
+ });
+ };
+ },
+
+ /**
+ * Wraps addEventListener to capture keypress UI events
+ * @returns {Function}
+ * @private
+ */
+ _keypressEventHandler: function() {
+ var self = this,
+ debounceDuration = 1000; // milliseconds
+
+ // TODO: if somehow user switches keypress target before
+ // debounce timeout is triggered, we will only capture
+ // a single breadcrumb from the FIRST target (acceptable?)
+ return function(evt) {
+ var target;
+ try {
+ target = evt.target;
+ } catch (e) {
+ // just accessing event properties can throw an exception in some rare circumstances
+ // see: https://github.com/getsentry/raven-js/issues/838
+ return;
+ }
+ var tagName = target && target.tagName;
+
+ // only consider keypress events on actual input elements
+ // this will disregard keypresses targeting body (e.g. tabbing
+ // through elements, hotkeys, etc)
+ if (
+ !tagName ||
+ (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && !target.isContentEditable)
+ )
+ return;
+
+ // record first keypress in a series, but ignore subsequent
+ // keypresses until debounce clears
+ var timeout = self._keypressTimeout;
+ if (!timeout) {
+ self._breadcrumbEventHandler('input')(evt);
+ }
+ clearTimeout(timeout);
+ self._keypressTimeout = setTimeout(function() {
+ self._keypressTimeout = null;
+ }, debounceDuration);
+ };
+ },
+
+ /**
+ * Captures a breadcrumb of type "navigation", normalizing input URLs
+ * @param to the originating URL
+ * @param from the target URL
+ * @private
+ */
+ _captureUrlChange: function(from, to) {
+ var parsedLoc = parseUrl(this._location.href);
+ var parsedTo = parseUrl(to);
+ var parsedFrom = parseUrl(from);
+
+ // because onpopstate only tells you the "new" (to) value of location.href, and
+ // not the previous (from) value, we need to track the value of the current URL
+ // state ourselves
+ this._lastHref = to;
+
+ // Use only the path component of the URL if the URL matches the current
+ // document (almost all the time when using pushState)
+ if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host)
+ to = parsedTo.relative;
+ if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host)
+ from = parsedFrom.relative;
+
+ this.captureBreadcrumb({
+ category: 'navigation',
+ data: {
+ to: to,
+ from: from
+ }
+ });
+ },
+
+ _patchFunctionToString: function() {
+ var self = this;
+ self._originalFunctionToString = Function.prototype.toString;
+ // eslint-disable-next-line no-extend-native
+ Function.prototype.toString = function() {
+ if (typeof this === 'function' && this.__raven__) {
+ return self._originalFunctionToString.apply(this.__orig__, arguments);
+ }
+ return self._originalFunctionToString.apply(this, arguments);
+ };
+ },
+
+ _unpatchFunctionToString: function() {
+ if (this._originalFunctionToString) {
+ // eslint-disable-next-line no-extend-native
+ Function.prototype.toString = this._originalFunctionToString;
+ }
+ },
+
+ /**
+ * Wrap timer functions and event targets to catch errors and provide
+ * better metadata.
+ */
+ _instrumentTryCatch: function() {
+ var self = this;
+
+ var wrappedBuiltIns = self._wrappedBuiltIns;
+
+ function wrapTimeFn(orig) {
+ return function(fn, t) {
+ // preserve arity
+ // Make a copy of the arguments to prevent deoptimization
+ // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments
+ var args = new Array(arguments.length);
+ for (var i = 0; i < args.length; ++i) {
+ args[i] = arguments[i];
+ }
+ var originalCallback = args[0];
+ if (isFunction(originalCallback)) {
+ args[0] = self.wrap(originalCallback);
+ }
+
+ // IE < 9 doesn't support .call/.apply on setInterval/setTimeout, but it
+ // also supports only two arguments and doesn't care what this is, so we
+ // can just call the original function directly.
+ if (orig.apply) {
+ return orig.apply(this, args);
+ } else {
+ return orig(args[0], args[1]);
+ }
+ };
+ }
+
+ var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;
+
+ function wrapEventTarget(global) {
+ var proto = _window[global] && _window[global].prototype;
+ if (proto && proto.hasOwnProperty && proto.hasOwnProperty('addEventListener')) {
+ fill(
+ proto,
+ 'addEventListener',
+ function(orig) {
+ return function(evtName, fn, capture, secure) {
+ // preserve arity
+ try {
+ if (fn && fn.handleEvent) {
+ fn.handleEvent = self.wrap(fn.handleEvent);
+ }
+ } catch (err) {
+ // can sometimes get 'Permission denied to access property "handle Event'
+ }
+
+ // More breadcrumb DOM capture ... done here and not in `_instrumentBreadcrumbs`
+ // so that we don't have more than one wrapper function
+ var before, clickHandler, keypressHandler;
+
+ if (
+ autoBreadcrumbs &&
+ autoBreadcrumbs.dom &&
+ (global === 'EventTarget' || global === 'Node')
+ ) {
+ // NOTE: generating multiple handlers per addEventListener invocation, should
+ // revisit and verify we can just use one (almost certainly)
+ clickHandler = self._breadcrumbEventHandler('click');
+ keypressHandler = self._keypressEventHandler();
+ before = function(evt) {
+ // need to intercept every DOM event in `before` argument, in case that
+ // same wrapped method is re-used for different events (e.g. mousemove THEN click)
+ // see #724
+ if (!evt) return;
+
+ var eventType;
+ try {
+ eventType = evt.type;
+ } catch (e) {
+ // just accessing event properties can throw an exception in some rare circumstances
+ // see: https://github.com/getsentry/raven-js/issues/838
+ return;
+ }
+ if (eventType === 'click') return clickHandler(evt);
+ else if (eventType === 'keypress') return keypressHandler(evt);
+ };
+ }
+ return orig.call(
+ this,
+ evtName,
+ self.wrap(fn, undefined, before),
+ capture,
+ secure
+ );
+ };
+ },
+ wrappedBuiltIns
+ );
+ fill(
+ proto,
+ 'removeEventListener',
+ function(orig) {
+ return function(evt, fn, capture, secure) {
+ try {
+ fn = fn && (fn.__raven_wrapper__ ? fn.__raven_wrapper__ : fn);
+ } catch (e) {
+ // ignore, accessing __raven_wrapper__ will throw in some Selenium environments
+ }
+ return orig.call(this, evt, fn, capture, secure);
+ };
+ },
+ wrappedBuiltIns
+ );
+ }
+ }
+
+ fill(_window, 'setTimeout', wrapTimeFn, wrappedBuiltIns);
+ fill(_window, 'setInterval', wrapTimeFn, wrappedBuiltIns);
+ if (_window.requestAnimationFrame) {
+ fill(
+ _window,
+ 'requestAnimationFrame',
+ function(orig) {
+ return function(cb) {
+ return orig(self.wrap(cb));
+ };
+ },
+ wrappedBuiltIns
+ );
+ }
+
+ // event targets borrowed from bugsnag-js:
+ // https://github.com/bugsnag/bugsnag-js/blob/master/src/bugsnag.js#L666
+ var eventTargets = [
+ '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'
+ ];
+ for (var i = 0; i < eventTargets.length; i++) {
+ wrapEventTarget(eventTargets[i]);
+ }
+ },
+
+ /**
+ * Instrument browser built-ins w/ breadcrumb capturing
+ * - XMLHttpRequests
+ * - DOM interactions (click/typing)
+ * - window.location changes
+ * - console
+ *
+ * Can be disabled or individually configured via the `autoBreadcrumbs` config option
+ */
+ _instrumentBreadcrumbs: function() {
+ var self = this;
+ var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;
+
+ var wrappedBuiltIns = self._wrappedBuiltIns;
+
+ function wrapProp(prop, xhr) {
+ if (prop in xhr && isFunction(xhr[prop])) {
+ fill(xhr, prop, function(orig) {
+ return self.wrap(orig);
+ }); // intentionally don't track filled methods on XHR instances
+ }
+ }
+
+ if (autoBreadcrumbs.xhr && 'XMLHttpRequest' in _window) {
+ var xhrproto = _window.XMLHttpRequest && _window.XMLHttpRequest.prototype;
+ fill(
+ xhrproto,
+ 'open',
+ function(origOpen) {
+ return function(method, url) {
+ // preserve arity
+
+ // if Sentry key appears in URL, don't capture
+ if (isString(url) && url.indexOf(self._globalKey) === -1) {
+ this.__raven_xhr = {
+ method: method,
+ url: url,
+ status_code: null
+ };
+ }
+
+ return origOpen.apply(this, arguments);
+ };
+ },
+ wrappedBuiltIns
+ );
+
+ fill(
+ xhrproto,
+ 'send',
+ function(origSend) {
+ return function() {
+ // preserve arity
+ var xhr = this;
+
+ function onreadystatechangeHandler() {
+ if (xhr.__raven_xhr && xhr.readyState === 4) {
+ try {
+ // touching statusCode in some platforms throws
+ // an exception
+ xhr.__raven_xhr.status_code = xhr.status;
+ } catch (e) {
+ /* do nothing */
+ }
+
+ self.captureBreadcrumb({
+ type: 'http',
+ category: 'xhr',
+ data: xhr.__raven_xhr
+ });
+ }
+ }
+
+ var props = ['onload', 'onerror', 'onprogress'];
+ for (var j = 0; j < props.length; j++) {
+ wrapProp(props[j], xhr);
+ }
+
+ if ('onreadystatechange' in xhr && isFunction(xhr.onreadystatechange)) {
+ fill(
+ xhr,
+ 'onreadystatechange',
+ function(orig) {
+ return self.wrap(orig, undefined, onreadystatechangeHandler);
+ } /* intentionally don't track this instrumentation */
+ );
+ } else {
+ // if onreadystatechange wasn't actually set by the page on this xhr, we
+ // are free to set our own and capture the breadcrumb
+ xhr.onreadystatechange = onreadystatechangeHandler;
+ }
+
+ return origSend.apply(this, arguments);
+ };
+ },
+ wrappedBuiltIns
+ );
+ }
+
+ if (autoBreadcrumbs.xhr && supportsFetch()) {
+ fill(
+ _window,
+ 'fetch',
+ function(origFetch) {
+ return function() {
+ // preserve arity
+ // Make a copy of the arguments to prevent deoptimization
+ // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments
+ var args = new Array(arguments.length);
+ for (var i = 0; i < args.length; ++i) {
+ args[i] = arguments[i];
+ }
+
+ var fetchInput = args[0];
+ var method = 'GET';
+ var url;
+
+ if (typeof fetchInput === 'string') {
+ url = fetchInput;
+ } else if ('Request' in _window && fetchInput instanceof _window.Request) {
+ url = fetchInput.url;
+ if (fetchInput.method) {
+ method = fetchInput.method;
+ }
+ } else {
+ url = '' + fetchInput;
+ }
+
+ // if Sentry key appears in URL, don't capture, as it's our own request
+ if (url.indexOf(self._globalKey) !== -1) {
+ return origFetch.apply(this, args);
+ }
+
+ if (args[1] && args[1].method) {
+ method = args[1].method;
+ }
+
+ var fetchData = {
+ method: method,
+ url: url,
+ status_code: null
+ };
+
+ return origFetch
+ .apply(this, args)
+ .then(function(response) {
+ fetchData.status_code = response.status;
+
+ self.captureBreadcrumb({
+ type: 'http',
+ category: 'fetch',
+ data: fetchData
+ });
+
+ return response;
+ })
+ ['catch'](function(err) {
+ // if there is an error performing the request
+ self.captureBreadcrumb({
+ type: 'http',
+ category: 'fetch',
+ data: fetchData,
+ level: 'error'
+ });
+
+ throw err;
+ });
+ };
+ },
+ wrappedBuiltIns
+ );
+ }
+
+ // Capture breadcrumbs from any click that is unhandled / bubbled up all the way
+ // to the document. Do this before we instrument addEventListener.
+ if (autoBreadcrumbs.dom && this._hasDocument) {
+ if (_document.addEventListener) {
+ _document.addEventListener('click', self._breadcrumbEventHandler('click'), false);
+ _document.addEventListener('keypress', self._keypressEventHandler(), false);
+ } else if (_document.attachEvent) {
+ // IE8 Compatibility
+ _document.attachEvent('onclick', self._breadcrumbEventHandler('click'));
+ _document.attachEvent('onkeypress', self._keypressEventHandler());
+ }
+ }
+
+ // record navigation (URL) changes
+ // NOTE: in Chrome App environment, touching history.pushState, *even inside
+ // a try/catch block*, will cause Chrome to output an error to console.error
+ // borrowed from: https://github.com/angular/angular.js/pull/13945/files
+ var chrome = _window.chrome;
+ var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime;
+ var hasPushAndReplaceState =
+ !isChromePackagedApp &&
+ _window.history &&
+ _window.history.pushState &&
+ _window.history.replaceState;
+ if (autoBreadcrumbs.location && hasPushAndReplaceState) {
+ // TODO: remove onpopstate handler on uninstall()
+ var oldOnPopState = _window.onpopstate;
+ _window.onpopstate = function() {
+ var currentHref = self._location.href;
+ self._captureUrlChange(self._lastHref, currentHref);
+
+ if (oldOnPopState) {
+ return oldOnPopState.apply(this, arguments);
+ }
+ };
+
+ var historyReplacementFunction = function(origHistFunction) {
+ // note history.pushState.length is 0; intentionally not declaring
+ // params to preserve 0 arity
+ return function(/* state, title, url */) {
+ var url = arguments.length > 2 ? arguments[2] : undefined;
+
+ // url argument is optional
+ if (url) {
+ // coerce to string (this is what pushState does)
+ self._captureUrlChange(self._lastHref, url + '');
+ }
+
+ return origHistFunction.apply(this, arguments);
+ };
+ };
+
+ fill(_window.history, 'pushState', historyReplacementFunction, wrappedBuiltIns);
+ fill(_window.history, 'replaceState', historyReplacementFunction, wrappedBuiltIns);
+ }
+
+ if (autoBreadcrumbs.console && 'console' in _window && console.log) {
+ // console
+ var consoleMethodCallback = function(msg, data) {
+ self.captureBreadcrumb({
+ message: msg,
+ level: data.level,
+ category: 'console'
+ });
+ };
+
+ each(['debug', 'info', 'warn', 'error', 'log'], function(_, level) {
+ wrapConsoleMethod(console, level, consoleMethodCallback);
+ });
+ }
+ },
+
+ _restoreBuiltIns: function() {
+ // restore any wrapped builtins
+ var builtin;
+ while (this._wrappedBuiltIns.length) {
+ builtin = this._wrappedBuiltIns.shift();
+
+ var obj = builtin[0],
+ name = builtin[1],
+ orig = builtin[2];
+
+ obj[name] = orig;
+ }
+ },
+
+ _restoreConsole: function() {
+ // eslint-disable-next-line guard-for-in
+ for (var method in this._originalConsoleMethods) {
+ this._originalConsole[method] = this._originalConsoleMethods[method];
+ }
+ },
+
+ _drainPlugins: function() {
+ var self = this;
+
+ // FIX ME TODO
+ each(this._plugins, function(_, plugin) {
+ var installer = plugin[0];
+ var args = plugin[1];
+ installer.apply(self, [self].concat(args));
+ });
+ },
+
+ _parseDSN: function(str) {
+ var m = dsnPattern.exec(str),
+ dsn = {},
+ i = 7;
+
+ try {
+ while (i--) dsn[dsnKeys[i]] = m[i] || '';
+ } catch (e) {
+ throw new RavenConfigError('Invalid DSN: ' + str);
+ }
+
+ if (dsn.pass && !this._globalOptions.allowSecretKey) {
+ throw new RavenConfigError(
+ 'Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key'
+ );
+ }
+
+ return dsn;
+ },
+
+ _getGlobalServer: function(uri) {
+ // assemble the endpoint from the uri pieces
+ var globalServer = '//' + uri.host + (uri.port ? ':' + uri.port : '');
+
+ if (uri.protocol) {
+ globalServer = uri.protocol + ':' + globalServer;
+ }
+ return globalServer;
+ },
+
+ _handleOnErrorStackInfo: function() {
+ // if we are intentionally ignoring errors via onerror, bail out
+ if (!this._ignoreOnError) {
+ this._handleStackInfo.apply(this, arguments);
+ }
+ },
+
+ _handleStackInfo: function(stackInfo, options) {
+ var frames = this._prepareFrames(stackInfo, options);
+
+ this._triggerEvent('handle', {
+ stackInfo: stackInfo,
+ options: options
+ });
+
+ this._processException(
+ stackInfo.name,
+ stackInfo.message,
+ stackInfo.url,
+ stackInfo.lineno,
+ frames,
+ options
+ );
+ },
+
+ _prepareFrames: function(stackInfo, options) {
+ var self = this;
+ var frames = [];
+ if (stackInfo.stack && stackInfo.stack.length) {
+ each(stackInfo.stack, function(i, stack) {
+ var frame = self._normalizeFrame(stack, stackInfo.url);
+ if (frame) {
+ frames.push(frame);
+ }
+ });
+
+ // e.g. frames captured via captureMessage throw
+ if (options && options.trimHeadFrames) {
+ for (var j = 0; j < options.trimHeadFrames && j < frames.length; j++) {
+ frames[j].in_app = false;
+ }
+ }
+ }
+ frames = frames.slice(0, this._globalOptions.stackTraceLimit);
+ return frames;
+ },
+
+ _normalizeFrame: function(frame, stackInfoUrl) {
+ // normalize the frames data
+ var normalized = {
+ filename: frame.url,
+ lineno: frame.line,
+ colno: frame.column,
+ function: frame.func || '?'
+ };
+
+ // Case when we don't have any information about the error
+ // E.g. throwing a string or raw object, instead of an `Error` in Firefox
+ // Generating synthetic error doesn't add any value here
+ //
+ // We should probably somehow let a user know that they should fix their code
+ if (!frame.url) {
+ normalized.filename = stackInfoUrl; // fallback to whole stacks url from onerror handler
+ }
+
+ normalized.in_app = !// determine if an exception came from outside of our app
+ // first we check the global includePaths list.
+ (
+ (!!this._globalOptions.includePaths.test &&
+ !this._globalOptions.includePaths.test(normalized.filename)) ||
+ // Now we check for fun, if the function name is Raven or TraceKit
+ /(Raven|TraceKit)\./.test(normalized['function']) ||
+ // finally, we do a last ditch effort and check for raven.min.js
+ /raven\.(min\.)?js$/.test(normalized.filename)
+ );
+
+ return normalized;
+ },
+
+ _processException: function(type, message, fileurl, lineno, frames, options) {
+ var prefixedMessage = (type ? type + ': ' : '') + (message || '');
+ if (
+ !!this._globalOptions.ignoreErrors.test &&
+ (this._globalOptions.ignoreErrors.test(message) ||
+ this._globalOptions.ignoreErrors.test(prefixedMessage))
+ ) {
+ return;
+ }
+
+ var stacktrace;
+
+ if (frames && frames.length) {
+ fileurl = frames[0].filename || fileurl;
+ // Sentry expects frames oldest to newest
+ // and JS sends them as newest to oldest
+ frames.reverse();
+ stacktrace = {frames: frames};
+ } else if (fileurl) {
+ stacktrace = {
+ frames: [
+ {
+ filename: fileurl,
+ lineno: lineno,
+ in_app: true
+ }
+ ]
+ };
+ }
+
+ if (
+ !!this._globalOptions.ignoreUrls.test &&
+ this._globalOptions.ignoreUrls.test(fileurl)
+ ) {
+ return;
+ }
+
+ if (
+ !!this._globalOptions.whitelistUrls.test &&
+ !this._globalOptions.whitelistUrls.test(fileurl)
+ ) {
+ return;
+ }
+
+ var data = objectMerge(
+ {
+ // sentry.interfaces.Exception
+ exception: {
+ values: [
+ {
+ type: type,
+ value: message,
+ stacktrace: stacktrace
+ }
+ ]
+ },
+ transaction: fileurl
+ },
+ options
+ );
+
+ // Fire away!
+ this._send(data);
+ },
+
+ _trimPacket: function(data) {
+ // For now, we only want to truncate the two different messages
+ // but this could/should be expanded to just trim everything
+ var max = this._globalOptions.maxMessageLength;
+ if (data.message) {
+ data.message = truncate(data.message, max);
+ }
+ if (data.exception) {
+ var exception = data.exception.values[0];
+ exception.value = truncate(exception.value, max);
+ }
+
+ var request = data.request;
+ if (request) {
+ if (request.url) {
+ request.url = truncate(request.url, this._globalOptions.maxUrlLength);
+ }
+ if (request.Referer) {
+ request.Referer = truncate(request.Referer, this._globalOptions.maxUrlLength);
+ }
+ }
+
+ if (data.breadcrumbs && data.breadcrumbs.values)
+ this._trimBreadcrumbs(data.breadcrumbs);
+
+ return data;
+ },
+
+ /**
+ * Truncate breadcrumb values (right now just URLs)
+ */
+ _trimBreadcrumbs: function(breadcrumbs) {
+ // known breadcrumb properties with urls
+ // TODO: also consider arbitrary prop values that start with (https?)?://
+ var urlProps = ['to', 'from', 'url'],
+ urlProp,
+ crumb,
+ data;
+
+ for (var i = 0; i < breadcrumbs.values.length; ++i) {
+ crumb = breadcrumbs.values[i];
+ if (
+ !crumb.hasOwnProperty('data') ||
+ !isObject(crumb.data) ||
+ objectFrozen(crumb.data)
+ )
+ continue;
+
+ data = objectMerge({}, crumb.data);
+ for (var j = 0; j < urlProps.length; ++j) {
+ urlProp = urlProps[j];
+ if (data.hasOwnProperty(urlProp) && data[urlProp]) {
+ data[urlProp] = truncate(data[urlProp], this._globalOptions.maxUrlLength);
+ }
+ }
+ breadcrumbs.values[i].data = data;
+ }
+ },
+
+ _getHttpData: function() {
+ if (!this._hasNavigator && !this._hasDocument) return;
+ var httpData = {};
+
+ if (this._hasNavigator && _navigator.userAgent) {
+ httpData.headers = {
+ 'User-Agent': _navigator.userAgent
+ };
+ }
+
+ // Check in `window` instead of `document`, as we may be in ServiceWorker environment
+ if (_window.location && _window.location.href) {
+ httpData.url = _window.location.href;
+ }
+
+ if (this._hasDocument && _document.referrer) {
+ if (!httpData.headers) httpData.headers = {};
+ httpData.headers.Referer = _document.referrer;
+ }
+
+ return httpData;
+ },
+
+ _resetBackoff: function() {
+ this._backoffDuration = 0;
+ this._backoffStart = null;
+ },
+
+ _shouldBackoff: function() {
+ return this._backoffDuration && now() - this._backoffStart < this._backoffDuration;
+ },
+
+ /**
+ * Returns true if the in-process data payload matches the signature
+ * of the previously-sent data
+ *
+ * NOTE: This has to be done at this level because TraceKit can generate
+ * data from window.onerror WITHOUT an exception object (IE8, IE9,
+ * other old browsers). This can take the form of an "exception"
+ * data object with a single frame (derived from the onerror args).
+ */
+ _isRepeatData: function(current) {
+ var last = this._lastData;
+
+ if (
+ !last ||
+ current.message !== last.message || // defined for captureMessage
+ current.transaction !== last.transaction // defined for captureException/onerror
+ )
+ return false;
+
+ // Stacktrace interface (i.e. from captureMessage)
+ if (current.stacktrace || last.stacktrace) {
+ return isSameStacktrace(current.stacktrace, last.stacktrace);
+ } else if (current.exception || last.exception) {
+ // Exception interface (i.e. from captureException/onerror)
+ return isSameException(current.exception, last.exception);
+ }
+
+ return true;
+ },
+
+ _setBackoffState: function(request) {
+ // If we are already in a backoff state, don't change anything
+ if (this._shouldBackoff()) {
+ return;
+ }
+
+ var status = request.status;
+
+ // 400 - project_id doesn't exist or some other fatal
+ // 401 - invalid/revoked dsn
+ // 429 - too many requests
+ if (!(status === 400 || status === 401 || status === 429)) return;
+
+ var retry;
+ try {
+ // If Retry-After is not in Access-Control-Expose-Headers, most
+ // browsers will throw an exception trying to access it
+ if (supportsFetch()) {
+ retry = request.headers.get('Retry-After');
+ } else {
+ retry = request.getResponseHeader('Retry-After');
+ }
+
+ // Retry-After is returned in seconds
+ retry = parseInt(retry, 10) * 1000;
+ } catch (e) {
+ /* eslint no-empty:0 */
+ }
+
+ this._backoffDuration = retry
+ ? // If Sentry server returned a Retry-After value, use it
+ retry
+ : // Otherwise, double the last backoff duration (starts at 1 sec)
+ this._backoffDuration * 2 || 1000;
+
+ this._backoffStart = now();
+ },
+
+ _send: function(data) {
+ var globalOptions = this._globalOptions;
+
+ var baseData = {
+ project: this._globalProject,
+ logger: globalOptions.logger,
+ platform: 'javascript'
+ },
+ httpData = this._getHttpData();
+
+ if (httpData) {
+ baseData.request = httpData;
+ }
+
+ // HACK: delete `trimHeadFrames` to prevent from appearing in outbound payload
+ if (data.trimHeadFrames) delete data.trimHeadFrames;
+
+ data = objectMerge(baseData, data);
+
+ // Merge in the tags and extra separately since objectMerge doesn't handle a deep merge
+ data.tags = objectMerge(objectMerge({}, this._globalContext.tags), data.tags);
+ data.extra = objectMerge(objectMerge({}, this._globalContext.extra), data.extra);
+
+ // Send along our own collected metadata with extra
+ data.extra['session:duration'] = now() - this._startTime;
+
+ if (this._breadcrumbs && this._breadcrumbs.length > 0) {
+ // intentionally make shallow copy so that additions
+ // to breadcrumbs aren't accidentally sent in this request
+ data.breadcrumbs = {
+ values: [].slice.call(this._breadcrumbs, 0)
+ };
+ }
+
+ if (this._globalContext.user) {
+ // sentry.interfaces.User
+ data.user = this._globalContext.user;
+ }
+
+ // Include the environment if it's defined in globalOptions
+ if (globalOptions.environment) data.environment = globalOptions.environment;
+
+ // Include the release if it's defined in globalOptions
+ if (globalOptions.release) data.release = globalOptions.release;
+
+ // Include server_name if it's defined in globalOptions
+ if (globalOptions.serverName) data.server_name = globalOptions.serverName;
+
+ data = this._sanitizeData(data);
+
+ // Cleanup empty properties before sending them to the server
+ Object.keys(data).forEach(function(key) {
+ if (data[key] == null || data[key] === '' || isEmptyObject(data[key])) {
+ delete data[key];
+ }
+ });
+
+ if (isFunction(globalOptions.dataCallback)) {
+ data = globalOptions.dataCallback(data) || data;
+ }
+
+ // Why??????????
+ if (!data || isEmptyObject(data)) {
+ return;
+ }
+
+ // Check if the request should be filtered or not
+ if (
+ isFunction(globalOptions.shouldSendCallback) &&
+ !globalOptions.shouldSendCallback(data)
+ ) {
+ return;
+ }
+
+ // Backoff state: Sentry server previously responded w/ an error (e.g. 429 - too many requests),
+ // so drop requests until "cool-off" period has elapsed.
+ if (this._shouldBackoff()) {
+ this._logDebug('warn', 'Raven dropped error due to backoff: ', data);
+ return;
+ }
+
+ if (typeof globalOptions.sampleRate === 'number') {
+ if (Math.random() < globalOptions.sampleRate) {
+ this._sendProcessedPayload(data);
+ }
+ } else {
+ this._sendProcessedPayload(data);
+ }
+ },
+
+ _sanitizeData: function(data) {
+ return sanitize(data, this._globalOptions.sanitizeKeys);
+ },
+
+ _getUuid: function() {
+ return uuid4();
+ },
+
+ _sendProcessedPayload: function(data, callback) {
+ var self = this;
+ var globalOptions = this._globalOptions;
+
+ if (!this.isSetup()) return;
+
+ // Try and clean up the packet before sending by truncating long values
+ data = this._trimPacket(data);
+
+ // ideally duplicate error testing should occur *before* dataCallback/shouldSendCallback,
+ // but this would require copying an un-truncated copy of the data packet, which can be
+ // arbitrarily deep (extra_data) -- could be worthwhile? will revisit
+ if (!this._globalOptions.allowDuplicates && this._isRepeatData(data)) {
+ this._logDebug('warn', 'Raven dropped repeat event: ', data);
+ return;
+ }
+
+ // Send along an event_id if not explicitly passed.
+ // This event_id can be used to reference the error within Sentry itself.
+ // Set lastEventId after we know the error should actually be sent
+ this._lastEventId = data.event_id || (data.event_id = this._getUuid());
+
+ // Store outbound payload after trim
+ this._lastData = data;
+
+ this._logDebug('debug', 'Raven about to send:', data);
+
+ var auth = {
+ sentry_version: '7',
+ sentry_client: 'raven-js/' + this.VERSION,
+ sentry_key: this._globalKey
+ };
+
+ if (this._globalSecret) {
+ auth.sentry_secret = this._globalSecret;
+ }
+
+ var exception = data.exception && data.exception.values[0];
+
+ // only capture 'sentry' breadcrumb is autoBreadcrumbs is truthy
+ if (
+ this._globalOptions.autoBreadcrumbs &&
+ this._globalOptions.autoBreadcrumbs.sentry
+ ) {
+ this.captureBreadcrumb({
+ category: 'sentry',
+ message: exception
+ ? (exception.type ? exception.type + ': ' : '') + exception.value
+ : data.message,
+ event_id: data.event_id,
+ level: data.level || 'error' // presume error unless specified
+ });
+ }
+
+ var url = this._globalEndpoint;
+ (globalOptions.transport || this._makeRequest).call(this, {
+ url: url,
+ auth: auth,
+ data: data,
+ options: globalOptions,
+ onSuccess: function success() {
+ self._resetBackoff();
+
+ self._triggerEvent('success', {
+ data: data,
+ src: url
+ });
+ callback && callback();
+ },
+ onError: function failure(error) {
+ self._logDebug('error', 'Raven transport failed to send: ', error);
+
+ if (error.request) {
+ self._setBackoffState(error.request);
+ }
+
+ self._triggerEvent('failure', {
+ data: data,
+ src: url
+ });
+ error = error || new Error('Raven send failed (no additional details provided)');
+ callback && callback(error);
+ }
+ });
+ },
+
+ _makeRequest: function(opts) {
+ // Auth is intentionally sent as part of query string (NOT as custom HTTP header) to avoid preflight CORS requests
+ var url = opts.url + '?' + urlencode(opts.auth);
+
+ var evaluatedHeaders = null;
+ var evaluatedFetchParameters = {};
+
+ if (opts.options.headers) {
+ evaluatedHeaders = this._evaluateHash(opts.options.headers);
+ }
+
+ if (opts.options.fetchParameters) {
+ evaluatedFetchParameters = this._evaluateHash(opts.options.fetchParameters);
+ }
+
+ if (supportsFetch()) {
+ evaluatedFetchParameters.body = stringify(opts.data);
+
+ var defaultFetchOptions = objectMerge({}, this._fetchDefaults);
+ var fetchOptions = objectMerge(defaultFetchOptions, evaluatedFetchParameters);
+
+ if (evaluatedHeaders) {
+ fetchOptions.headers = evaluatedHeaders;
+ }
+
+ return _window
+ .fetch(url, fetchOptions)
+ .then(function(response) {
+ if (response.ok) {
+ opts.onSuccess && opts.onSuccess();
+ } else {
+ var error = new Error('Sentry error code: ' + response.status);
+ // It's called request only to keep compatibility with XHR interface
+ // and not add more redundant checks in setBackoffState method
+ error.request = response;
+ opts.onError && opts.onError(error);
+ }
+ })
+ ['catch'](function() {
+ opts.onError &&
+ opts.onError(new Error('Sentry error code: network unavailable'));
+ });
+ }
+
+ var request = _window.XMLHttpRequest && new _window.XMLHttpRequest();
+ if (!request) return;
+
+ // if browser doesn't support CORS (e.g. IE7), we are out of luck
+ var hasCORS = 'withCredentials' in request || typeof XDomainRequest !== 'undefined';
+
+ if (!hasCORS) return;
+
+ if ('withCredentials' in request) {
+ request.onreadystatechange = function() {
+ if (request.readyState !== 4) {
+ return;
+ } else if (request.status === 200) {
+ opts.onSuccess && opts.onSuccess();
+ } else if (opts.onError) {
+ var err = new Error('Sentry error code: ' + request.status);
+ err.request = request;
+ opts.onError(err);
+ }
+ };
+ } else {
+ request = new XDomainRequest();
+ // xdomainrequest cannot go http -> https (or vice versa),
+ // so always use protocol relative
+ url = url.replace(/^https?:/, '');
+
+ // onreadystatechange not supported by XDomainRequest
+ if (opts.onSuccess) {
+ request.onload = opts.onSuccess;
+ }
+ if (opts.onError) {
+ request.onerror = function() {
+ var err = new Error('Sentry error code: XDomainRequest');
+ err.request = request;
+ opts.onError(err);
+ };
+ }
+ }
+
+ request.open('POST', url);
+
+ if (evaluatedHeaders) {
+ each(evaluatedHeaders, function(key, value) {
+ request.setRequestHeader(key, value);
+ });
+ }
+
+ request.send(stringify(opts.data));
+ },
+
+ _evaluateHash: function(hash) {
+ var evaluated = {};
+
+ for (var key in hash) {
+ if (hash.hasOwnProperty(key)) {
+ var value = hash[key];
+ evaluated[key] = typeof value === 'function' ? value() : value;
+ }
+ }
+
+ return evaluated;
+ },
+
+ _logDebug: function(level) {
+ // We allow `Raven.debug` and `Raven.config(DSN, { debug: true })` to not make backward incompatible API change
+ if (
+ this._originalConsoleMethods[level] &&
+ (this.debug || this._globalOptions.debug)
+ ) {
+ // In IE<10 console methods do not have their own 'apply' method
+ Function.prototype.apply.call(
+ this._originalConsoleMethods[level],
+ this._originalConsole,
+ [].slice.call(arguments, 1)
+ );
+ }
+ },
+
+ _mergeContext: function(key, context) {
+ if (isUndefined(context)) {
+ delete this._globalContext[key];
+ } else {
+ this._globalContext[key] = objectMerge(this._globalContext[key] || {}, context);
+ }
+ }
+};
+
+// Deprecations
+Raven.prototype.setUser = Raven.prototype.setUserContext;
+Raven.prototype.setReleaseContext = Raven.prototype.setRelease;
+
+module.exports = Raven;
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"10":10,"11":11,"4":4,"5":5,"8":8,"9":9}],7:[function(_dereq_,module,exports){
+(function (global){
+/**
+ * Enforces a single instance of the Raven client, and the
+ * main entry point for Raven. If you are a consumer of the
+ * Raven library, you SHOULD load this file (vs raven.js).
+ **/
+
+var RavenConstructor = _dereq_(6);
+
+// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)
+var _window =
+ typeof window !== 'undefined'
+ ? window
+ : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
+var _Raven = _window.Raven;
+
+var Raven = new RavenConstructor();
+
+/*
+ * Allow multiple versions of Raven to be installed.
+ * Strip Raven from the global context and returns the instance.
+ *
+ * @return {Raven}
+ */
+Raven.noConflict = function() {
+ _window.Raven = _Raven;
+ return Raven;
+};
+
+Raven.afterLoad();
+
+module.exports = Raven;
+
+/**
+ * DISCLAIMER:
+ *
+ * Expose `Client` constructor for cases where user want to track multiple "sub-applications" in one larger app.
+ * It's not meant to be used by a wide audience, so pleaaase make sure that you know what you're doing before using it.
+ * Accidentally calling `install` multiple times, may result in an unexpected behavior that's very hard to debug.
+ *
+ * It's called `Client' to be in-line with Raven Node implementation.
+ *
+ * HOWTO:
+ *
+ * import Raven from 'raven-js';
+ *
+ * const someAppReporter = new Raven.Client();
+ * const someOtherAppReporter = new Raven.Client();
+ *
+ * someAppReporter.config('__DSN__', {
+ * ...config goes here
+ * });
+ *
+ * someOtherAppReporter.config('__OTHER_DSN__', {
+ * ...config goes here
+ * });
+ *
+ * someAppReporter.captureMessage(...);
+ * someAppReporter.captureException(...);
+ * someAppReporter.captureBreadcrumb(...);
+ *
+ * someOtherAppReporter.captureMessage(...);
+ * someOtherAppReporter.captureException(...);
+ * someOtherAppReporter.captureBreadcrumb(...);
+ *
+ * It should "just work".
+ */
+module.exports.Client = RavenConstructor;
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"6":6}],8:[function(_dereq_,module,exports){
+(function (global){
+var stringify = _dereq_(10);
+
+var _window =
+ typeof window !== 'undefined'
+ ? window
+ : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
+
+function isObject(what) {
+ return typeof what === 'object' && what !== null;
+}
+
+// Yanked from https://git.io/vS8DV re-used under CC0
+// with some tiny modifications
+function isError(value) {
+ switch (Object.prototype.toString.call(value)) {
+ case '[object Error]':
+ return true;
+ case '[object Exception]':
+ return true;
+ case '[object DOMException]':
+ return true;
+ default:
+ return value instanceof Error;
+ }
+}
+
+function isErrorEvent(value) {
+ return Object.prototype.toString.call(value) === '[object ErrorEvent]';
+}
+
+function isDOMError(value) {
+ return Object.prototype.toString.call(value) === '[object DOMError]';
+}
+
+function isDOMException(value) {
+ return Object.prototype.toString.call(value) === '[object DOMException]';
+}
+
+function isUndefined(what) {
+ return what === void 0;
+}
+
+function isFunction(what) {
+ return typeof what === 'function';
+}
+
+function isPlainObject(what) {
+ return Object.prototype.toString.call(what) === '[object Object]';
+}
+
+function isString(what) {
+ return Object.prototype.toString.call(what) === '[object String]';
+}
+
+function isArray(what) {
+ return Object.prototype.toString.call(what) === '[object Array]';
+}
+
+function isEmptyObject(what) {
+ if (!isPlainObject(what)) return false;
+
+ for (var _ in what) {
+ if (what.hasOwnProperty(_)) {
+ return false;
+ }
+ }
+ return true;
+}
+
+function supportsErrorEvent() {
+ try {
+ new ErrorEvent(''); // eslint-disable-line no-new
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+function supportsDOMError() {
+ try {
+ new DOMError(''); // eslint-disable-line no-new
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+function supportsDOMException() {
+ try {
+ new DOMException(''); // eslint-disable-line no-new
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+function supportsFetch() {
+ if (!('fetch' in _window)) return false;
+
+ try {
+ new Headers(); // eslint-disable-line no-new
+ new Request(''); // eslint-disable-line no-new
+ new Response(); // eslint-disable-line no-new
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+// Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default
+// https://caniuse.com/#feat=referrer-policy
+// It doesn't. And it throw exception instead of ignoring this parameter...
+// REF: https://github.com/getsentry/raven-js/issues/1233
+function supportsReferrerPolicy() {
+ if (!supportsFetch()) return false;
+
+ try {
+ // eslint-disable-next-line no-new
+ new Request('pickleRick', {
+ referrerPolicy: 'origin'
+ });
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+function supportsPromiseRejectionEvent() {
+ return typeof PromiseRejectionEvent === 'function';
+}
+
+function wrappedCallback(callback) {
+ function dataCallback(data, original) {
+ var normalizedData = callback(data) || data;
+ if (original) {
+ return original(normalizedData) || normalizedData;
+ }
+ return normalizedData;
+ }
+
+ return dataCallback;
+}
+
+function each(obj, callback) {
+ var i, j;
+
+ if (isUndefined(obj.length)) {
+ for (i in obj) {
+ if (hasKey(obj, i)) {
+ callback.call(null, i, obj[i]);
+ }
+ }
+ } else {
+ j = obj.length;
+ if (j) {
+ for (i = 0; i < j; i++) {
+ callback.call(null, i, obj[i]);
+ }
+ }
+ }
+}
+
+function objectMerge(obj1, obj2) {
+ if (!obj2) {
+ return obj1;
+ }
+ each(obj2, function(key, value) {
+ obj1[key] = value;
+ });
+ return obj1;
+}
+
+/**
+ * This function is only used for react-native.
+ * react-native freezes object that have already been sent over the
+ * js bridge. We need this function in order to check if the object is frozen.
+ * So it's ok that objectFrozen returns false if Object.isFrozen is not
+ * supported because it's not relevant for other "platforms". See related issue:
+ * https://github.com/getsentry/react-native-sentry/issues/57
+ */
+function objectFrozen(obj) {
+ if (!Object.isFrozen) {
+ return false;
+ }
+ return Object.isFrozen(obj);
+}
+
+function truncate(str, max) {
+ if (typeof max !== 'number') {
+ throw new Error('2nd argument to `truncate` function should be a number');
+ }
+ if (typeof str !== 'string' || max === 0) {
+ return str;
+ }
+ return str.length <= max ? str : str.substr(0, max) + '\u2026';
+}
+
+/**
+ * hasKey, a better form of hasOwnProperty
+ * Example: hasKey(MainHostObject, property) === true/false
+ *
+ * @param {Object} host object to check property
+ * @param {string} key to check
+ */
+function hasKey(object, key) {
+ return Object.prototype.hasOwnProperty.call(object, key);
+}
+
+function joinRegExp(patterns) {
+ // Combine an array of regular expressions and strings into one large regexp
+ // Be mad.
+ var sources = [],
+ i = 0,
+ len = patterns.length,
+ pattern;
+
+ for (; i < len; i++) {
+ pattern = patterns[i];
+ if (isString(pattern)) {
+ // If it's a string, we need to escape it
+ // Taken from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
+ sources.push(pattern.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, '\\$1'));
+ } else if (pattern && pattern.source) {
+ // If it's a regexp already, we want to extract the source
+ sources.push(pattern.source);
+ }
+ // Intentionally skip other cases
+ }
+ return new RegExp(sources.join('|'), 'i');
+}
+
+function urlencode(o) {
+ var pairs = [];
+ each(o, function(key, value) {
+ pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));
+ });
+ return pairs.join('&');
+}
+
+// borrowed from https://tools.ietf.org/html/rfc3986#appendix-B
+// intentionally using regex and not href parsing trick because React Native and other
+// environments where DOM might not be available
+function parseUrl(url) {
+ if (typeof url !== 'string') return {};
+ var match = url.match(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/);
+
+ // coerce to undefined values to empty string so we don't get 'undefined'
+ var query = match[6] || '';
+ var fragment = match[8] || '';
+ return {
+ protocol: match[2],
+ host: match[4],
+ path: match[5],
+ relative: match[5] + query + fragment // everything minus origin
+ };
+}
+function uuid4() {
+ var crypto = _window.crypto || _window.msCrypto;
+
+ if (!isUndefined(crypto) && crypto.getRandomValues) {
+ // Use window.crypto API if available
+ // eslint-disable-next-line no-undef
+ var arr = new Uint16Array(8);
+ crypto.getRandomValues(arr);
+
+ // set 4 in byte 7
+ arr[3] = (arr[3] & 0xfff) | 0x4000;
+ // set 2 most significant bits of byte 9 to '10'
+ arr[4] = (arr[4] & 0x3fff) | 0x8000;
+
+ var pad = function(num) {
+ var v = num.toString(16);
+ while (v.length < 4) {
+ v = '0' + v;
+ }
+ return v;
+ };
+
+ return (
+ pad(arr[0]) +
+ pad(arr[1]) +
+ pad(arr[2]) +
+ pad(arr[3]) +
+ pad(arr[4]) +
+ pad(arr[5]) +
+ pad(arr[6]) +
+ pad(arr[7])
+ );
+ } else {
+ // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523
+ return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
+ var r = (Math.random() * 16) | 0,
+ v = c === 'x' ? r : (r & 0x3) | 0x8;
+ return v.toString(16);
+ });
+ }
+}
+
+/**
+ * Given a child DOM element, returns a query-selector statement describing that
+ * and its ancestors
+ * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]
+ * @param elem
+ * @returns {string}
+ */
+function htmlTreeAsString(elem) {
+ /* eslint no-extra-parens:0*/
+ var MAX_TRAVERSE_HEIGHT = 5,
+ MAX_OUTPUT_LEN = 80,
+ out = [],
+ height = 0,
+ len = 0,
+ separator = ' > ',
+ sepLength = separator.length,
+ nextStr;
+
+ while (elem && height++ < MAX_TRAVERSE_HEIGHT) {
+ nextStr = htmlElementAsString(elem);
+ // bail out if
+ // - nextStr is the 'html' element
+ // - the length of the string that would be created exceeds MAX_OUTPUT_LEN
+ // (ignore this limit if we are on the first iteration)
+ if (
+ nextStr === 'html' ||
+ (height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN)
+ ) {
+ break;
+ }
+
+ out.push(nextStr);
+
+ len += nextStr.length;
+ elem = elem.parentNode;
+ }
+
+ return out.reverse().join(separator);
+}
+
+/**
+ * Returns a simple, query-selector representation of a DOM element
+ * e.g. [HTMLElement] => input#foo.btn[name=baz]
+ * @param HTMLElement
+ * @returns {string}
+ */
+function htmlElementAsString(elem) {
+ var out = [],
+ className,
+ classes,
+ key,
+ attr,
+ i;
+
+ if (!elem || !elem.tagName) {
+ return '';
+ }
+
+ out.push(elem.tagName.toLowerCase());
+ if (elem.id) {
+ out.push('#' + elem.id);
+ }
+
+ className = elem.className;
+ if (className && isString(className)) {
+ classes = className.split(/\s+/);
+ for (i = 0; i < classes.length; i++) {
+ out.push('.' + classes[i]);
+ }
+ }
+ var attrWhitelist = ['type', 'name', 'title', 'alt'];
+ for (i = 0; i < attrWhitelist.length; i++) {
+ key = attrWhitelist[i];
+ attr = elem.getAttribute(key);
+ if (attr) {
+ out.push('[' + key + '="' + attr + '"]');
+ }
+ }
+ return out.join('');
+}
+
+/**
+ * Returns true if either a OR b is truthy, but not both
+ */
+function isOnlyOneTruthy(a, b) {
+ return !!(!!a ^ !!b);
+}
+
+/**
+ * Returns true if both parameters are undefined
+ */
+function isBothUndefined(a, b) {
+ return isUndefined(a) && isUndefined(b);
+}
+
+/**
+ * Returns true if the two input exception interfaces have the same content
+ */
+function isSameException(ex1, ex2) {
+ if (isOnlyOneTruthy(ex1, ex2)) return false;
+
+ ex1 = ex1.values[0];
+ ex2 = ex2.values[0];
+
+ if (ex1.type !== ex2.type || ex1.value !== ex2.value) return false;
+
+ // in case both stacktraces are undefined, we can't decide so default to false
+ if (isBothUndefined(ex1.stacktrace, ex2.stacktrace)) return false;
+
+ return isSameStacktrace(ex1.stacktrace, ex2.stacktrace);
+}
+
+/**
+ * Returns true if the two input stack trace interfaces have the same content
+ */
+function isSameStacktrace(stack1, stack2) {
+ if (isOnlyOneTruthy(stack1, stack2)) return false;
+
+ var frames1 = stack1.frames;
+ var frames2 = stack2.frames;
+
+ // Exit early if frame count differs
+ if (frames1.length !== frames2.length) return false;
+
+ // Iterate through every frame; bail out if anything differs
+ var a, b;
+ for (var i = 0; i < frames1.length; i++) {
+ a = frames1[i];
+ b = frames2[i];
+ if (
+ a.filename !== b.filename ||
+ a.lineno !== b.lineno ||
+ a.colno !== b.colno ||
+ a['function'] !== b['function']
+ )
+ return false;
+ }
+ return true;
+}
+
+/**
+ * Polyfill a method
+ * @param obj object e.g. `document`
+ * @param name method name present on object e.g. `addEventListener`
+ * @param replacement replacement function
+ * @param track {optional} record instrumentation to an array
+ */
+function fill(obj, name, replacement, track) {
+ if (obj == null) return;
+ var orig = obj[name];
+ obj[name] = replacement(orig);
+ obj[name].__raven__ = true;
+ obj[name].__orig__ = orig;
+ if (track) {
+ track.push([obj, name, orig]);
+ }
+}
+
+/**
+ * Join values in array
+ * @param input array of values to be joined together
+ * @param delimiter string to be placed in-between values
+ * @returns {string}
+ */
+function safeJoin(input, delimiter) {
+ if (!isArray(input)) return '';
+
+ var output = [];
+
+ for (var i = 0; i < input.length; i++) {
+ try {
+ output.push(String(input[i]));
+ } catch (e) {
+ output.push('[value cannot be serialized]');
+ }
+ }
+
+ return output.join(delimiter);
+}
+
+// Default Node.js REPL depth
+var MAX_SERIALIZE_EXCEPTION_DEPTH = 3;
+// 50kB, as 100kB is max payload size, so half sounds reasonable
+var MAX_SERIALIZE_EXCEPTION_SIZE = 50 * 1024;
+var MAX_SERIALIZE_KEYS_LENGTH = 40;
+
+function utf8Length(value) {
+ return ~-encodeURI(value).split(/%..|./).length;
+}
+
+function jsonSize(value) {
+ return utf8Length(JSON.stringify(value));
+}
+
+function serializeValue(value) {
+ if (typeof value === 'string') {
+ var maxLength = 40;
+ return truncate(value, maxLength);
+ } else if (
+ typeof value === 'number' ||
+ typeof value === 'boolean' ||
+ typeof value === 'undefined'
+ ) {
+ return value;
+ }
+
+ var type = Object.prototype.toString.call(value);
+
+ // Node.js REPL notation
+ if (type === '[object Object]') return '[Object]';
+ if (type === '[object Array]') return '[Array]';
+ if (type === '[object Function]')
+ return value.name ? '[Function: ' + value.name + ']' : '[Function]';
+
+ return value;
+}
+
+function serializeObject(value, depth) {
+ if (depth === 0) return serializeValue(value);
+
+ if (isPlainObject(value)) {
+ return Object.keys(value).reduce(function(acc, key) {
+ acc[key] = serializeObject(value[key], depth - 1);
+ return acc;
+ }, {});
+ } else if (Array.isArray(value)) {
+ return value.map(function(val) {
+ return serializeObject(val, depth - 1);
+ });
+ }
+
+ return serializeValue(value);
+}
+
+function serializeException(ex, depth, maxSize) {
+ if (!isPlainObject(ex)) return ex;
+
+ depth = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_DEPTH : depth;
+ maxSize = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_SIZE : maxSize;
+
+ var serialized = serializeObject(ex, depth);
+
+ if (jsonSize(stringify(serialized)) > maxSize) {
+ return serializeException(ex, depth - 1);
+ }
+
+ return serialized;
+}
+
+function serializeKeysForMessage(keys, maxLength) {
+ if (typeof keys === 'number' || typeof keys === 'string') return keys.toString();
+ if (!Array.isArray(keys)) return '';
+
+ keys = keys.filter(function(key) {
+ return typeof key === 'string';
+ });
+ if (keys.length === 0) return '[object has no keys]';
+
+ maxLength = typeof maxLength !== 'number' ? MAX_SERIALIZE_KEYS_LENGTH : maxLength;
+ if (keys[0].length >= maxLength) return keys[0];
+
+ for (var usedKeys = keys.length; usedKeys > 0; usedKeys--) {
+ var serialized = keys.slice(0, usedKeys).join(', ');
+ if (serialized.length > maxLength) continue;
+ if (usedKeys === keys.length) return serialized;
+ return serialized + '\u2026';
+ }
+
+ return '';
+}
+
+function sanitize(input, sanitizeKeys) {
+ if (!isArray(sanitizeKeys) || (isArray(sanitizeKeys) && sanitizeKeys.length === 0))
+ return input;
+
+ var sanitizeRegExp = joinRegExp(sanitizeKeys);
+ var sanitizeMask = '********';
+ var safeInput;
+
+ try {
+ safeInput = JSON.parse(stringify(input));
+ } catch (o_O) {
+ return input;
+ }
+
+ function sanitizeWorker(workerInput) {
+ if (isArray(workerInput)) {
+ return workerInput.map(function(val) {
+ return sanitizeWorker(val);
+ });
+ }
+
+ if (isPlainObject(workerInput)) {
+ return Object.keys(workerInput).reduce(function(acc, k) {
+ if (sanitizeRegExp.test(k)) {
+ acc[k] = sanitizeMask;
+ } else {
+ acc[k] = sanitizeWorker(workerInput[k]);
+ }
+ return acc;
+ }, {});
+ }
+
+ return workerInput;
+ }
+
+ return sanitizeWorker(safeInput);
+}
+
+module.exports = {
+ isObject: isObject,
+ isError: isError,
+ isErrorEvent: isErrorEvent,
+ isDOMError: isDOMError,
+ isDOMException: isDOMException,
+ isUndefined: isUndefined,
+ isFunction: isFunction,
+ isPlainObject: isPlainObject,
+ isString: isString,
+ isArray: isArray,
+ isEmptyObject: isEmptyObject,
+ supportsErrorEvent: supportsErrorEvent,
+ supportsDOMError: supportsDOMError,
+ supportsDOMException: supportsDOMException,
+ supportsFetch: supportsFetch,
+ supportsReferrerPolicy: supportsReferrerPolicy,
+ supportsPromiseRejectionEvent: supportsPromiseRejectionEvent,
+ wrappedCallback: wrappedCallback,
+ each: each,
+ objectMerge: objectMerge,
+ truncate: truncate,
+ objectFrozen: objectFrozen,
+ hasKey: hasKey,
+ joinRegExp: joinRegExp,
+ urlencode: urlencode,
+ uuid4: uuid4,
+ htmlTreeAsString: htmlTreeAsString,
+ htmlElementAsString: htmlElementAsString,
+ isSameException: isSameException,
+ isSameStacktrace: isSameStacktrace,
+ parseUrl: parseUrl,
+ fill: fill,
+ safeJoin: safeJoin,
+ serializeException: serializeException,
+ serializeKeysForMessage: serializeKeysForMessage,
+ sanitize: sanitize
+};
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"10":10}],9:[function(_dereq_,module,exports){
+(function (global){
+var utils = _dereq_(8);
+
+/*
+ TraceKit - Cross brower stack traces
+
+ This was originally forked from github.com/occ/TraceKit, but has since been
+ largely re-written and is now maintained as part of raven-js. Tests for
+ this are in test/vendor.
+
+ MIT license
+*/
+
+var TraceKit = {
+ collectWindowErrors: true,
+ debug: false
+};
+
+// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)
+var _window =
+ typeof window !== 'undefined'
+ ? window
+ : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
+
+// global reference to slice
+var _slice = [].slice;
+var UNKNOWN_FUNCTION = '?';
+
+// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types
+var ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;
+
+function getLocationHref() {
+ if (typeof document === 'undefined' || document.location == null) return '';
+ return document.location.href;
+}
+
+function getLocationOrigin() {
+ if (typeof document === 'undefined' || document.location == null) return '';
+
+ // Oh dear IE10...
+ if (!document.location.origin) {
+ document.location.origin =
+ document.location.protocol +
+ '//' +
+ document.location.hostname +
+ (document.location.port ? ':' + document.location.port : '');
+ }
+
+ return document.location.origin;
+}
+
+/**
+ * TraceKit.report: cross-browser processing of unhandled exceptions
+ *
+ * Syntax:
+ * TraceKit.report.subscribe(function(stackInfo) { ... })
+ * TraceKit.report.unsubscribe(function(stackInfo) { ... })
+ * TraceKit.report(exception)
+ * try { ...code... } catch(ex) { TraceKit.report(ex); }
+ *
+ * Supports:
+ * - Firefox: full stack trace with line numbers, plus column number
+ * on top frame; column number is not guaranteed
+ * - Opera: full stack trace with line and column numbers
+ * - Chrome: full stack trace with line and column numbers
+ * - Safari: line and column number for the top frame only; some frames
+ * may be missing, and column number is not guaranteed
+ * - IE: line and column number for the top frame only; some frames
+ * may be missing, and column number is not guaranteed
+ *
+ * In theory, TraceKit should work on all of the following versions:
+ * - IE5.5+ (only 8.0 tested)
+ * - Firefox 0.9+ (only 3.5+ tested)
+ * - Opera 7+ (only 10.50 tested; versions 9 and earlier may require
+ * Exceptions Have Stacktrace to be enabled in opera:config)
+ * - Safari 3+ (only 4+ tested)
+ * - Chrome 1+ (only 5+ tested)
+ * - Konqueror 3.5+ (untested)
+ *
+ * Requires TraceKit.computeStackTrace.
+ *
+ * Tries to catch all unhandled exceptions and report them to the
+ * subscribed handlers. Please note that TraceKit.report will rethrow the
+ * exception. This is REQUIRED in order to get a useful stack trace in IE.
+ * If the exception does not reach the top of the browser, you will only
+ * get a stack trace from the point where TraceKit.report was called.
+ *
+ * Handlers receive a stackInfo object as described in the
+ * TraceKit.computeStackTrace docs.
+ */
+TraceKit.report = (function reportModuleWrapper() {
+ var handlers = [],
+ lastArgs = null,
+ lastException = null,
+ lastExceptionStack = null;
+
+ /**
+ * Add a crash handler.
+ * @param {Function} handler
+ */
+ function subscribe(handler) {
+ installGlobalHandler();
+ handlers.push(handler);
+ }
+
+ /**
+ * Remove a crash handler.
+ * @param {Function} handler
+ */
+ function unsubscribe(handler) {
+ for (var i = handlers.length - 1; i >= 0; --i) {
+ if (handlers[i] === handler) {
+ handlers.splice(i, 1);
+ }
+ }
+ }
+
+ /**
+ * Remove all crash handlers.
+ */
+ function unsubscribeAll() {
+ uninstallGlobalHandler();
+ handlers = [];
+ }
+
+ /**
+ * Dispatch stack information to all handlers.
+ * @param {Object.} stack
+ */
+ function notifyHandlers(stack, isWindowError) {
+ var exception = null;
+ if (isWindowError && !TraceKit.collectWindowErrors) {
+ return;
+ }
+ for (var i in handlers) {
+ if (handlers.hasOwnProperty(i)) {
+ try {
+ handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2)));
+ } catch (inner) {
+ exception = inner;
+ }
+ }
+ }
+
+ if (exception) {
+ throw exception;
+ }
+ }
+
+ var _oldOnerrorHandler, _onErrorHandlerInstalled;
+
+ /**
+ * Ensures all global unhandled exceptions are recorded.
+ * Supported by Gecko and IE.
+ * @param {string} msg Error message.
+ * @param {string} url URL of script that generated the exception.
+ * @param {(number|string)} lineNo The line number at which the error
+ * occurred.
+ * @param {?(number|string)} colNo The column number at which the error
+ * occurred.
+ * @param {?Error} ex The actual Error object.
+ */
+ function traceKitWindowOnError(msg, url, lineNo, colNo, ex) {
+ var stack = null;
+ // If 'ex' is ErrorEvent, get real Error from inside
+ var exception = utils.isErrorEvent(ex) ? ex.error : ex;
+ // If 'msg' is ErrorEvent, get real message from inside
+ var message = utils.isErrorEvent(msg) ? msg.message : msg;
+
+ if (lastExceptionStack) {
+ TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(
+ lastExceptionStack,
+ url,
+ lineNo,
+ message
+ );
+ processLastException();
+ } else if (exception && utils.isError(exception)) {
+ // non-string `exception` arg; attempt to extract stack trace
+
+ // New chrome and blink send along a real error object
+ // Let's just report that like a normal error.
+ // See: https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror
+ stack = TraceKit.computeStackTrace(exception);
+ notifyHandlers(stack, true);
+ } else {
+ var location = {
+ url: url,
+ line: lineNo,
+ column: colNo
+ };
+
+ var name = undefined;
+ var groups;
+
+ if ({}.toString.call(message) === '[object String]') {
+ var groups = message.match(ERROR_TYPES_RE);
+ if (groups) {
+ name = groups[1];
+ message = groups[2];
+ }
+ }
+
+ location.func = UNKNOWN_FUNCTION;
+
+ stack = {
+ name: name,
+ message: message,
+ url: getLocationHref(),
+ stack: [location]
+ };
+ notifyHandlers(stack, true);
+ }
+
+ if (_oldOnerrorHandler) {
+ return _oldOnerrorHandler.apply(this, arguments);
+ }
+
+ return false;
+ }
+
+ function installGlobalHandler() {
+ if (_onErrorHandlerInstalled) {
+ return;
+ }
+ _oldOnerrorHandler = _window.onerror;
+ _window.onerror = traceKitWindowOnError;
+ _onErrorHandlerInstalled = true;
+ }
+
+ function uninstallGlobalHandler() {
+ if (!_onErrorHandlerInstalled) {
+ return;
+ }
+ _window.onerror = _oldOnerrorHandler;
+ _onErrorHandlerInstalled = false;
+ _oldOnerrorHandler = undefined;
+ }
+
+ function processLastException() {
+ var _lastExceptionStack = lastExceptionStack,
+ _lastArgs = lastArgs;
+ lastArgs = null;
+ lastExceptionStack = null;
+ lastException = null;
+ notifyHandlers.apply(null, [_lastExceptionStack, false].concat(_lastArgs));
+ }
+
+ /**
+ * Reports an unhandled Error to TraceKit.
+ * @param {Error} ex
+ * @param {?boolean} rethrow If false, do not re-throw the exception.
+ * Only used for window.onerror to not cause an infinite loop of
+ * rethrowing.
+ */
+ function report(ex, rethrow) {
+ var args = _slice.call(arguments, 1);
+ if (lastExceptionStack) {
+ if (lastException === ex) {
+ return; // already caught by an inner catch block, ignore
+ } else {
+ processLastException();
+ }
+ }
+
+ var stack = TraceKit.computeStackTrace(ex);
+ lastExceptionStack = stack;
+ lastException = ex;
+ lastArgs = args;
+
+ // If the stack trace is incomplete, wait for 2 seconds for
+ // slow slow IE to see if onerror occurs or not before reporting
+ // this exception; otherwise, we will end up with an incomplete
+ // stack trace
+ setTimeout(function() {
+ if (lastException === ex) {
+ processLastException();
+ }
+ }, stack.incomplete ? 2000 : 0);
+
+ if (rethrow !== false) {
+ throw ex; // re-throw to propagate to the top level (and cause window.onerror)
+ }
+ }
+
+ report.subscribe = subscribe;
+ report.unsubscribe = unsubscribe;
+ report.uninstall = unsubscribeAll;
+ return report;
+})();
+
+/**
+ * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript
+ *
+ * Syntax:
+ * s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below)
+ * Returns:
+ * s.name - exception name
+ * s.message - exception message
+ * s.stack[i].url - JavaScript or HTML file URL
+ * s.stack[i].func - function name, or empty for anonymous functions (if guessing did not work)
+ * s.stack[i].args - arguments passed to the function, if known
+ * s.stack[i].line - line number, if known
+ * s.stack[i].column - column number, if known
+ *
+ * Supports:
+ * - Firefox: full stack trace with line numbers and unreliable column
+ * number on top frame
+ * - Opera 10: full stack trace with line and column numbers
+ * - Opera 9-: full stack trace with line numbers
+ * - Chrome: full stack trace with line and column numbers
+ * - Safari: line and column number for the topmost stacktrace element
+ * only
+ * - IE: no line numbers whatsoever
+ *
+ * Tries to guess names of anonymous functions by looking for assignments
+ * in the source code. In IE and Safari, we have to guess source file names
+ * by searching for function bodies inside all page scripts. This will not
+ * work for scripts that are loaded cross-domain.
+ * Here be dragons: some function names may be guessed incorrectly, and
+ * duplicate functions may be mismatched.
+ *
+ * TraceKit.computeStackTrace should only be used for tracing purposes.
+ * Logging of unhandled exceptions should be done with TraceKit.report,
+ * which builds on top of TraceKit.computeStackTrace and provides better
+ * IE support by utilizing the window.onerror event to retrieve information
+ * about the top of the stack.
+ *
+ * Note: In IE and Safari, no stack trace is recorded on the Error object,
+ * so computeStackTrace instead walks its *own* chain of callers.
+ * This means that:
+ * * in Safari, some methods may be missing from the stack trace;
+ * * in IE, the topmost function in the stack trace will always be the
+ * caller of computeStackTrace.
+ *
+ * This is okay for tracing (because you are likely to be calling
+ * computeStackTrace from the function you want to be the topmost element
+ * of the stack trace anyway), but not okay for logging unhandled
+ * exceptions (because your catch block will likely be far away from the
+ * inner function that actually caused the exception).
+ *
+ */
+TraceKit.computeStackTrace = (function computeStackTraceWrapper() {
+ // Contents of Exception in various browsers.
+ //
+ // SAFARI:
+ // ex.message = Can't find variable: qq
+ // ex.line = 59
+ // ex.sourceId = 580238192
+ // ex.sourceURL = http://...
+ // ex.expressionBeginOffset = 96
+ // ex.expressionCaretOffset = 98
+ // ex.expressionEndOffset = 98
+ // ex.name = ReferenceError
+ //
+ // FIREFOX:
+ // ex.message = qq is not defined
+ // ex.fileName = http://...
+ // ex.lineNumber = 59
+ // ex.columnNumber = 69
+ // ex.stack = ...stack trace... (see the example below)
+ // ex.name = ReferenceError
+ //
+ // CHROME:
+ // ex.message = qq is not defined
+ // ex.name = ReferenceError
+ // ex.type = not_defined
+ // ex.arguments = ['aa']
+ // ex.stack = ...stack trace...
+ //
+ // INTERNET EXPLORER:
+ // ex.message = ...
+ // ex.name = ReferenceError
+ //
+ // OPERA:
+ // ex.message = ...message... (see the example below)
+ // ex.name = ReferenceError
+ // ex.opera#sourceloc = 11 (pretty much useless, duplicates the info in ex.message)
+ // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'
+
+ /**
+ * Computes stack trace information from the stack property.
+ * Chrome and Gecko use this property.
+ * @param {Error} ex
+ * @return {?Object.} Stack trace information.
+ */
+ function computeStackTraceFromStackProp(ex) {
+ if (typeof ex.stack === 'undefined' || !ex.stack) return;
+
+ var chrome = /^\s*at (?:(.*?) ?\()?((?:file|https?|blob|chrome-extension|native|eval|webpack||[a-z]:|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i;
+ var winjs = /^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i;
+ // NOTE: blob urls are now supposed to always have an origin, therefore it's format
+ // which is `blob:http://url/path/with-some-uuid`, is matched by `blob.*?:\/` as well
+ var gecko = /^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\/.*?|\[native code\]|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i;
+ // Used to additionally parse URL/line/column from eval frames
+ var geckoEval = /(\S+) line (\d+)(?: > eval line \d+)* > eval/i;
+ var chromeEval = /\((\S*)(?::(\d+))(?::(\d+))\)/;
+ var lines = ex.stack.split('\n');
+ var stack = [];
+ var submatch;
+ var parts;
+ var element;
+ var reference = /^(.*) is undefined$/.exec(ex.message);
+
+ for (var i = 0, j = lines.length; i < j; ++i) {
+ if ((parts = chrome.exec(lines[i]))) {
+ var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line
+ var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line
+ if (isEval && (submatch = chromeEval.exec(parts[2]))) {
+ // throw out eval line/column and use top-most line/column number
+ parts[2] = submatch[1]; // url
+ parts[3] = submatch[2]; // line
+ parts[4] = submatch[3]; // column
+ }
+ element = {
+ url: !isNative ? parts[2] : null,
+ func: parts[1] || UNKNOWN_FUNCTION,
+ args: isNative ? [parts[2]] : [],
+ line: parts[3] ? +parts[3] : null,
+ column: parts[4] ? +parts[4] : null
+ };
+ } else if ((parts = winjs.exec(lines[i]))) {
+ element = {
+ url: parts[2],
+ func: parts[1] || UNKNOWN_FUNCTION,
+ args: [],
+ line: +parts[3],
+ column: parts[4] ? +parts[4] : null
+ };
+ } else if ((parts = gecko.exec(lines[i]))) {
+ var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;
+ if (isEval && (submatch = geckoEval.exec(parts[3]))) {
+ // throw out eval line/column and use top-most line number
+ parts[3] = submatch[1];
+ parts[4] = submatch[2];
+ parts[5] = null; // no column when eval
+ } else if (i === 0 && !parts[5] && typeof ex.columnNumber !== 'undefined') {
+ // FireFox uses this awesome columnNumber property for its top frame
+ // Also note, Firefox's column number is 0-based and everything else expects 1-based,
+ // so adding 1
+ // NOTE: this hack doesn't work if top-most frame is eval
+ stack[0].column = ex.columnNumber + 1;
+ }
+ element = {
+ url: parts[3],
+ func: parts[1] || UNKNOWN_FUNCTION,
+ args: parts[2] ? parts[2].split(',') : [],
+ line: parts[4] ? +parts[4] : null,
+ column: parts[5] ? +parts[5] : null
+ };
+ } else {
+ continue;
+ }
+
+ if (!element.func && element.line) {
+ element.func = UNKNOWN_FUNCTION;
+ }
+
+ if (element.url && element.url.substr(0, 5) === 'blob:') {
+ // Special case for handling JavaScript loaded into a blob.
+ // We use a synchronous AJAX request here as a blob is already in
+ // memory - it's not making a network request. This will generate a warning
+ // in the browser console, but there has already been an error so that's not
+ // that much of an issue.
+ var xhr = new XMLHttpRequest();
+ xhr.open('GET', element.url, false);
+ xhr.send(null);
+
+ // If we failed to download the source, skip this patch
+ if (xhr.status === 200) {
+ var source = xhr.responseText || '';
+
+ // We trim the source down to the last 300 characters as sourceMappingURL is always at the end of the file.
+ // Why 300? To be in line with: https://github.com/getsentry/sentry/blob/4af29e8f2350e20c28a6933354e4f42437b4ba42/src/sentry/lang/javascript/processor.py#L164-L175
+ source = source.slice(-300);
+
+ // Now we dig out the source map URL
+ var sourceMaps = source.match(/\/\/# sourceMappingURL=(.*)$/);
+
+ // If we don't find a source map comment or we find more than one, continue on to the next element.
+ if (sourceMaps) {
+ var sourceMapAddress = sourceMaps[1];
+
+ // Now we check to see if it's a relative URL.
+ // If it is, convert it to an absolute one.
+ if (sourceMapAddress.charAt(0) === '~') {
+ sourceMapAddress = getLocationOrigin() + sourceMapAddress.slice(1);
+ }
+
+ // Now we strip the '.map' off of the end of the URL and update the
+ // element so that Sentry can match the map to the blob.
+ element.url = sourceMapAddress.slice(0, -4);
+ }
+ }
+ }
+
+ stack.push(element);
+ }
+
+ if (!stack.length) {
+ return null;
+ }
+
+ return {
+ name: ex.name,
+ message: ex.message,
+ url: getLocationHref(),
+ stack: stack
+ };
+ }
+
+ /**
+ * Adds information about the first frame to incomplete stack traces.
+ * Safari and IE require this to get complete data on the first frame.
+ * @param {Object.} stackInfo Stack trace information from
+ * one of the compute* methods.
+ * @param {string} url The URL of the script that caused an error.
+ * @param {(number|string)} lineNo The line number of the script that
+ * caused an error.
+ * @param {string=} message The error generated by the browser, which
+ * hopefully contains the name of the object that caused the error.
+ * @return {boolean} Whether or not the stack information was
+ * augmented.
+ */
+ function augmentStackTraceWithInitialElement(stackInfo, url, lineNo, message) {
+ var initial = {
+ url: url,
+ line: lineNo
+ };
+
+ if (initial.url && initial.line) {
+ stackInfo.incomplete = false;
+
+ if (!initial.func) {
+ initial.func = UNKNOWN_FUNCTION;
+ }
+
+ if (stackInfo.stack.length > 0) {
+ if (stackInfo.stack[0].url === initial.url) {
+ if (stackInfo.stack[0].line === initial.line) {
+ return false; // already in stack trace
+ } else if (
+ !stackInfo.stack[0].line &&
+ stackInfo.stack[0].func === initial.func
+ ) {
+ stackInfo.stack[0].line = initial.line;
+ return false;
+ }
+ }
+ }
+
+ stackInfo.stack.unshift(initial);
+ stackInfo.partial = true;
+ return true;
+ } else {
+ stackInfo.incomplete = true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Computes stack trace information by walking the arguments.caller
+ * chain at the time the exception occurred. This will cause earlier
+ * frames to be missed but is the only way to get any stack trace in
+ * Safari and IE. The top frame is restored by
+ * {@link augmentStackTraceWithInitialElement}.
+ * @param {Error} ex
+ * @return {?Object.} Stack trace information.
+ */
+ function computeStackTraceByWalkingCallerChain(ex, depth) {
+ var functionName = /function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,
+ stack = [],
+ funcs = {},
+ recursion = false,
+ parts,
+ item,
+ source;
+
+ for (
+ var curr = computeStackTraceByWalkingCallerChain.caller;
+ curr && !recursion;
+ curr = curr.caller
+ ) {
+ if (curr === computeStackTrace || curr === TraceKit.report) {
+ // console.log('skipping internal function');
+ continue;
+ }
+
+ item = {
+ url: null,
+ func: UNKNOWN_FUNCTION,
+ line: null,
+ column: null
+ };
+
+ if (curr.name) {
+ item.func = curr.name;
+ } else if ((parts = functionName.exec(curr.toString()))) {
+ item.func = parts[1];
+ }
+
+ if (typeof item.func === 'undefined') {
+ try {
+ item.func = parts.input.substring(0, parts.input.indexOf('{'));
+ } catch (e) {}
+ }
+
+ if (funcs['' + curr]) {
+ recursion = true;
+ } else {
+ funcs['' + curr] = true;
+ }
+
+ stack.push(item);
+ }
+
+ if (depth) {
+ // console.log('depth is ' + depth);
+ // console.log('stack is ' + stack.length);
+ stack.splice(0, depth);
+ }
+
+ var result = {
+ name: ex.name,
+ message: ex.message,
+ url: getLocationHref(),
+ stack: stack
+ };
+ augmentStackTraceWithInitialElement(
+ result,
+ ex.sourceURL || ex.fileName,
+ ex.line || ex.lineNumber,
+ ex.message || ex.description
+ );
+ return result;
+ }
+
+ /**
+ * Computes a stack trace for an exception.
+ * @param {Error} ex
+ * @param {(string|number)=} depth
+ */
+ function computeStackTrace(ex, depth) {
+ var stack = null;
+ depth = depth == null ? 0 : +depth;
+
+ try {
+ stack = computeStackTraceFromStackProp(ex);
+ if (stack) {
+ return stack;
+ }
+ } catch (e) {
+ if (TraceKit.debug) {
+ throw e;
+ }
+ }
+
+ try {
+ stack = computeStackTraceByWalkingCallerChain(ex, depth + 1);
+ if (stack) {
+ return stack;
+ }
+ } catch (e) {
+ if (TraceKit.debug) {
+ throw e;
+ }
+ }
+ return {
+ name: ex.name,
+ message: ex.message,
+ url: getLocationHref()
+ };
+ }
+
+ computeStackTrace.augmentStackTraceWithInitialElement = augmentStackTraceWithInitialElement;
+ computeStackTrace.computeStackTraceFromStackProp = computeStackTraceFromStackProp;
+
+ return computeStackTrace;
+})();
+
+module.exports = TraceKit;
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"8":8}],10:[function(_dereq_,module,exports){
+/*
+ json-stringify-safe
+ Like JSON.stringify, but doesn't throw on circular references.
+
+ Originally forked from https://github.com/isaacs/json-stringify-safe
+ version 5.0.1 on 3/8/2017 and modified to handle Errors serialization
+ and IE8 compatibility. Tests for this are in test/vendor.
+
+ ISC license: https://github.com/isaacs/json-stringify-safe/blob/master/LICENSE
+*/
+
+exports = module.exports = stringify;
+exports.getSerialize = serializer;
+
+function indexOf(haystack, needle) {
+ for (var i = 0; i < haystack.length; ++i) {
+ if (haystack[i] === needle) return i;
+ }
+ return -1;
+}
+
+function stringify(obj, replacer, spaces, cycleReplacer) {
+ return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces);
+}
+
+// https://github.com/ftlabs/js-abbreviate/blob/fa709e5f139e7770a71827b1893f22418097fbda/index.js#L95-L106
+function stringifyError(value) {
+ var err = {
+ // These properties are implemented as magical getters and don't show up in for in
+ stack: value.stack,
+ message: value.message,
+ name: value.name
+ };
+
+ for (var i in value) {
+ if (Object.prototype.hasOwnProperty.call(value, i)) {
+ err[i] = value[i];
+ }
+ }
+
+ return err;
+}
+
+function serializer(replacer, cycleReplacer) {
+ var stack = [];
+ var keys = [];
+
+ if (cycleReplacer == null) {
+ cycleReplacer = function(key, value) {
+ if (stack[0] === value) {
+ return '[Circular ~]';
+ }
+ return '[Circular ~.' + keys.slice(0, indexOf(stack, value)).join('.') + ']';
+ };
+ }
+
+ return function(key, value) {
+ if (stack.length > 0) {
+ var thisPos = indexOf(stack, this);
+ ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);
+ ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);
+
+ if (~indexOf(stack, value)) {
+ value = cycleReplacer.call(this, key, value);
+ }
+ } else {
+ stack.push(value);
+ }
+
+ return replacer == null
+ ? value instanceof Error ? stringifyError(value) : value
+ : replacer.call(this, key, value);
+ };
+}
+
+},{}],11:[function(_dereq_,module,exports){
+/*
+ * JavaScript MD5
+ * https://github.com/blueimp/JavaScript-MD5
+ *
+ * Copyright 2011, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * https://opensource.org/licenses/MIT
+ *
+ * Based on
+ * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
+ * Digest Algorithm, as defined in RFC 1321.
+ * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
+ * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
+ * Distributed under the BSD License
+ * See http://pajhome.org.uk/crypt/md5 for more info.
+ */
+
+/*
+* Add integers, wrapping at 2^32. This uses 16-bit operations internally
+* to work around bugs in some JS interpreters.
+*/
+function safeAdd(x, y) {
+ var lsw = (x & 0xffff) + (y & 0xffff);
+ var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
+ return (msw << 16) | (lsw & 0xffff);
+}
+
+/*
+* Bitwise rotate a 32-bit number to the left.
+*/
+function bitRotateLeft(num, cnt) {
+ return (num << cnt) | (num >>> (32 - cnt));
+}
+
+/*
+* These functions implement the four basic operations the algorithm uses.
+*/
+function md5cmn(q, a, b, x, s, t) {
+ return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);
+}
+function md5ff(a, b, c, d, x, s, t) {
+ return md5cmn((b & c) | (~b & d), a, b, x, s, t);
+}
+function md5gg(a, b, c, d, x, s, t) {
+ return md5cmn((b & d) | (c & ~d), a, b, x, s, t);
+}
+function md5hh(a, b, c, d, x, s, t) {
+ return md5cmn(b ^ c ^ d, a, b, x, s, t);
+}
+function md5ii(a, b, c, d, x, s, t) {
+ return md5cmn(c ^ (b | ~d), a, b, x, s, t);
+}
+
+/*
+* Calculate the MD5 of an array of little-endian words, and a bit length.
+*/
+function binlMD5(x, len) {
+ /* append padding */
+ x[len >> 5] |= 0x80 << (len % 32);
+ x[(((len + 64) >>> 9) << 4) + 14] = len;
+
+ var i;
+ var olda;
+ var oldb;
+ var oldc;
+ var oldd;
+ var a = 1732584193;
+ var b = -271733879;
+ var c = -1732584194;
+ var d = 271733878;
+
+ for (i = 0; i < x.length; i += 16) {
+ olda = a;
+ oldb = b;
+ oldc = c;
+ oldd = d;
+
+ a = md5ff(a, b, c, d, x[i], 7, -680876936);
+ d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);
+ c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);
+ b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);
+ a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);
+ d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);
+ c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);
+ b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);
+ a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);
+ d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);
+ c = md5ff(c, d, a, b, x[i + 10], 17, -42063);
+ b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);
+ a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);
+ d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);
+ c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);
+ b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);
+
+ a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);
+ d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);
+ c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);
+ b = md5gg(b, c, d, a, x[i], 20, -373897302);
+ a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);
+ d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);
+ c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);
+ b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);
+ a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);
+ d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);
+ c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);
+ b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);
+ a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);
+ d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);
+ c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);
+ b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);
+
+ a = md5hh(a, b, c, d, x[i + 5], 4, -378558);
+ d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);
+ c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);
+ b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);
+ a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);
+ d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);
+ c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);
+ b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);
+ a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);
+ d = md5hh(d, a, b, c, x[i], 11, -358537222);
+ c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);
+ b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);
+ a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);
+ d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);
+ c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);
+ b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);
+
+ a = md5ii(a, b, c, d, x[i], 6, -198630844);
+ d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);
+ c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);
+ b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);
+ a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);
+ d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);
+ c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);
+ b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);
+ a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);
+ d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);
+ c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);
+ b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);
+ a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);
+ d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);
+ c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);
+ b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);
+
+ a = safeAdd(a, olda);
+ b = safeAdd(b, oldb);
+ c = safeAdd(c, oldc);
+ d = safeAdd(d, oldd);
+ }
+ return [a, b, c, d];
+}
+
+/*
+* Convert an array of little-endian words to a string
+*/
+function binl2rstr(input) {
+ var i;
+ var output = '';
+ var length32 = input.length * 32;
+ for (i = 0; i < length32; i += 8) {
+ output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xff);
+ }
+ return output;
+}
+
+/*
+* Convert a raw string to an array of little-endian words
+* Characters >255 have their high-byte silently ignored.
+*/
+function rstr2binl(input) {
+ var i;
+ var output = [];
+ output[(input.length >> 2) - 1] = undefined;
+ for (i = 0; i < output.length; i += 1) {
+ output[i] = 0;
+ }
+ var length8 = input.length * 8;
+ for (i = 0; i < length8; i += 8) {
+ output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << (i % 32);
+ }
+ return output;
+}
+
+/*
+* Calculate the MD5 of a raw string
+*/
+function rstrMD5(s) {
+ return binl2rstr(binlMD5(rstr2binl(s), s.length * 8));
+}
+
+/*
+* Calculate the HMAC-MD5, of a key and some data (raw strings)
+*/
+function rstrHMACMD5(key, data) {
+ var i;
+ var bkey = rstr2binl(key);
+ var ipad = [];
+ var opad = [];
+ var hash;
+ ipad[15] = opad[15] = undefined;
+ if (bkey.length > 16) {
+ bkey = binlMD5(bkey, key.length * 8);
+ }
+ for (i = 0; i < 16; i += 1) {
+ ipad[i] = bkey[i] ^ 0x36363636;
+ opad[i] = bkey[i] ^ 0x5c5c5c5c;
+ }
+ hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);
+ return binl2rstr(binlMD5(opad.concat(hash), 512 + 128));
+}
+
+/*
+* Convert a raw string to a hex string
+*/
+function rstr2hex(input) {
+ var hexTab = '0123456789abcdef';
+ var output = '';
+ var x;
+ var i;
+ for (i = 0; i < input.length; i += 1) {
+ x = input.charCodeAt(i);
+ output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f);
+ }
+ return output;
+}
+
+/*
+* Encode a string as utf-8
+*/
+function str2rstrUTF8(input) {
+ return unescape(encodeURIComponent(input));
+}
+
+/*
+* Take string arguments and return either raw or hex encoded strings
+*/
+function rawMD5(s) {
+ return rstrMD5(str2rstrUTF8(s));
+}
+function hexMD5(s) {
+ return rstr2hex(rawMD5(s));
+}
+function rawHMACMD5(k, d) {
+ return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d));
+}
+function hexHMACMD5(k, d) {
+ return rstr2hex(rawHMACMD5(k, d));
+}
+
+function md5(string, key, raw) {
+ if (!key) {
+ if (!raw) {
+ return hexMD5(string);
+ }
+ return rawMD5(string);
+ }
+ if (!raw) {
+ return hexHMACMD5(key, string);
+ }
+ return rawHMACMD5(key, string);
+}
+
+module.exports = md5;
+
+},{}]},{},[7,1,2,3])(7)
+});
\ No newline at end of file
diff --git a/packages/raven-js/dist/angular,console,ember/raven.min.js b/packages/raven-js/dist/angular,console,ember/raven.min.js
new file mode 100644
index 000000000000..0553c597f03f
--- /dev/null
+++ b/packages/raven-js/dist/angular,console,ember/raven.min.js
@@ -0,0 +1,4 @@
+/*! Raven.js 3.25.2 (30b6d4e) | github.com/getsentry/raven-js */
+!function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,b.Raven=a()}}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c?c:a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;gthis.l.maxBreadcrumbs&&this.v.shift(),this},addPlugin:function(a){var b=[].slice.call(arguments,1);return this.s.push([a,b]),this.o&&this.G(),this},setUserContext:function(a){return this.k.user=a,this},setExtraContext:function(a){return this.$("extra",a),this},setTagsContext:function(a){return this.$("tags",a),this},clearContext:function(){return this.k={},this},getContext:function(){return JSON.parse(h(this.k))},setEnvironment:function(a){return this.l.environment=a,this},setRelease:function(a){return this.l.release=a,this},setDataCallback:function(a){var b=this.l.dataCallback;return this.l.dataCallback=e(b,a),this},setBreadcrumbCallback:function(a){var b=this.l.breadcrumbCallback;return this.l.breadcrumbCallback=e(b,a),this},setShouldSendCallback:function(a){var b=this.l.shouldSendCallback;return this.l.shouldSendCallback=e(b,a),this},setTransport:function(a){return this.l.transport=a,this},lastException:function(){return this.e},lastEventId:function(){return this.g},isSetup:function(){return!!this.b&&(!!this.h||(this.ravenNotConfiguredError||(this.ravenNotConfiguredError=!0,this.A("error","Error: Raven has not been configured.")),!1))},afterLoad:function(){var a=R.RavenConfig;a&&this.config(a.dsn,a.config).install()},showReportDialog:function(a){if(S){a=a||{};var b=a.eventId||this.lastEventId();if(!b)throw new j("Missing eventId");var c=a.dsn||this.I;if(!c)throw new j("Missing DSN");var d=encodeURIComponent,e="";e+="?eventId="+d(b),e+="&dsn="+d(c);var f=a.user||this.k.user;f&&(f.name&&(e+="&name="+d(f.name)),f.email&&(e+="&email="+d(f.email)));var g=this.K(this.H(c)),h=S.createElement("script");h.async=!0,h.src=g+"/api/embed/error-page/"+e,(S.head||S.body).appendChild(h)}},M:function(){var a=this;this.n+=1,setTimeout(function(){a.n-=1})},_:function(a,b){var c,d;if(this.c){b=b||{},a="raven"+a.substr(0,1).toUpperCase()+a.substr(1),S.createEvent?(c=S.createEvent("HTMLEvents"),c.initEvent(a,!0,!0)):(c=S.createEventObject(),c.eventType=a);for(d in b)A(b,d)&&(c[d]=b[d]);if(S.createEvent)S.dispatchEvent(c);else try{S.fireEvent("on"+c.eventType.toLowerCase(),c)}catch(e){}}},aa:function(a){var b=this;return function(c){if(b.ba=null,b.w!==c){b.w=c;var d;try{d=E(c.target)}catch(e){d=""}b.captureBreadcrumb({category:"ui."+a,message:d})}}},ca:function(){var a=this,b=1e3;return function(c){var d;try{d=c.target}catch(e){return}var f=d&&d.tagName;if(f&&("INPUT"===f||"TEXTAREA"===f||d.isContentEditable)){var g=a.ba;g||a.aa("input")(c),clearTimeout(g),a.ba=setTimeout(function(){a.ba=null},b)}}},da:function(a,b){var c=H(this.x.href),d=H(b),e=H(a);this.y=b,c.protocol===d.protocol&&c.host===d.host&&(b=d.relative),c.protocol===e.protocol&&c.host===e.host&&(a=e.relative),this.captureBreadcrumb({category:"navigation",data:{to:b,from:a}})},D:function(){var a=this;a.ea=Function.prototype.toString,Function.prototype.toString=function(){return"function"==typeof this&&this.N?a.ea.apply(this.P,arguments):a.ea.apply(this,arguments)}},R:function(){this.ea&&(Function.prototype.toString=this.ea)},E:function(){function a(a){return function(b,d){for(var e=new Array(arguments.length),f=0;f2?arguments[2]:void 0;return c&&b.da(b.y,c+""),a.apply(this,arguments)}};I(R.history,"pushState",j,d),I(R.history,"replaceState",j,d)}if(c.console&&"console"in R&&console.log){var k=function(a,c){b.captureBreadcrumb({message:a,level:c.level,category:"console"})};w(["debug","info","warn","error","log"],function(a,b){O(console,b,k)})}},S:function(){for(var a;this.u.length;){a=this.u.shift();var b=a[0],c=a[1],d=a[2];b[c]=d}},T:function(){for(var a in this.r)this.q[a]=this.r[a]},G:function(){var a=this;w(this.s,function(b,c){var d=c[0],e=c[1];d.apply(a,[a].concat(e))})},H:function(a){var b=Q.exec(a),c={},d=7;try{for(;d--;)c[P[d]]=b[d]||""}catch(e){throw new j("Invalid DSN: "+a)}if(c.pass&&!this.l.allowSecretKey)throw new j("Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key");return c},K:function(a){var b="//"+a.host+(a.port?":"+a.port:"");return a.protocol&&(b=a.protocol+":"+b),b},B:function(){this.n||this.W.apply(this,arguments)},W:function(a,b){var c=this.Y(a,b);this._("handle",{stackInfo:a,options:b}),this.ga(a.name,a.message,a.url,a.lineno,c,b)},Y:function(a,b){var c=this,d=[];if(a.stack&&a.stack.length&&(w(a.stack,function(b,e){var f=c.ha(e,a.url);f&&d.push(f)}),b&&b.trimHeadFrames))for(var e=0;e0&&(a.breadcrumbs={values:[].slice.call(this.v,0)}),this.k.user&&(a.user=this.k.user),b.environment&&(a.environment=b.environment),b.release&&(a.release=b.release),b.serverName&&(a.server_name=b.serverName),a=this.qa(a),Object.keys(a).forEach(function(b){(null==a[b]||""===a[b]||v(a[b]))&&delete a[b]}),s(b.dataCallback)&&(a=b.dataCallback(a)||a),a&&!v(a)&&(!s(b.shouldSendCallback)||b.shouldSendCallback(a)))return this.na()?void this.A("warn","Raven dropped error due to backoff: ",a):void("number"==typeof b.sampleRate?Math.random() ",i=h.length;a&&f++1&&g+e.length*i+b.length>=d));)e.push(b),g+=b.length,a=a.parentNode;return e.reverse().join(h)}function F(a){var b,c,d,e,f,g=[];if(!a||!a.tagName)return"";if(g.push(a.tagName.toLowerCase()),a.id&&g.push("#"+a.id),b=a.className,b&&l(b))for(c=b.split(/\s+/),f=0;fc?Q(a,b-1):d}function R(a,b){if("number"==typeof a||"string"==typeof a)return a.toString();if(!Array.isArray(a))return"";if(a=a.filter(function(a){return"string"==typeof a}),0===a.length)return"[object has no keys]";if(b="number"!=typeof b?X:b,a[0].length>=b)return a[0];for(var c=a.length;c>0;c--){var d=a.slice(0,c).join(", ");if(!(d.length>b))return c===a.length?d:d+"…"}return""}function S(a,b){function c(a){return m(a)?a.map(function(a){return c(a)}):k(a)?Object.keys(a).reduce(function(b,d){return b[d]=e.test(d)?f:c(a[d]),b},{}):a}if(!m(b)||m(b)&&0===b.length)return a;var d,e=A(b),f="********";try{d=JSON.parse(T(a))}catch(g){return a}return c(d)}var T=a(10),U="undefined"!=typeof window?window:"undefined"!=typeof c?c:"undefined"!=typeof self?self:{},V=3,W=51200,X=40;b.exports={isObject:d,isError:e,isErrorEvent:f,isDOMError:g,isDOMException:h,isUndefined:i,isFunction:j,isPlainObject:k,isString:l,isArray:m,isEmptyObject:n,supportsErrorEvent:o,supportsDOMError:p,supportsDOMException:q,supportsFetch:r,supportsReferrerPolicy:s,supportsPromiseRejectionEvent:t,wrappedCallback:u,each:v,objectMerge:w,truncate:y,objectFrozen:x,hasKey:z,joinRegExp:A,urlencode:B,uuid4:D,htmlTreeAsString:E,htmlElementAsString:F,isSameException:I,isSameStacktrace:J,parseUrl:C,fill:K,safeJoin:L,serializeException:Q,serializeKeysForMessage:R,sanitize:S}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{10:10}],9:[function(a,b,c){(function(c){function d(){return"undefined"==typeof document||null==document.location?"":document.location.href}function e(){return"undefined"==typeof document||null==document.location?"":(document.location.origin||(document.location.origin=document.location.protocol+"//"+document.location.hostname+(document.location.port?":"+document.location.port:"")),document.location.origin)}var f=a(8),g={collectWindowErrors:!0,debug:!1},h="undefined"!=typeof window?window:"undefined"!=typeof c?c:"undefined"!=typeof self?self:{},i=[].slice,j="?",k=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;g.report=function(){function a(a){m(),s.push(a)}function b(a){for(var b=s.length-1;b>=0;--b)s[b]===a&&s.splice(b,1)}function c(){n(),s=[]}function e(a,b){var c=null;if(!b||g.collectWindowErrors){for(var d in s)if(s.hasOwnProperty(d))try{s[d].apply(null,[a].concat(i.call(arguments,2)))}catch(e){c=e}if(c)throw c}}function l(a,b,c,h,i){var l=null,m=f.isErrorEvent(i)?i.error:i,n=f.isErrorEvent(a)?a.message:a;if(v)g.computeStackTrace.augmentStackTraceWithInitialElement(v,b,c,n),o();else if(m&&f.isError(m))l=g.computeStackTrace(m),e(l,!0);else{var p,r={url:b,line:c,column:h},s=void 0;if("[object String]"==={}.toString.call(n)){var p=n.match(k);p&&(s=p[1],n=p[2])}r.func=j,l={name:s,message:n,url:d(),stack:[r]},e(l,!0)}return!!q&&q.apply(this,arguments)}function m(){r||(q=h.onerror,h.onerror=l,r=!0)}function n(){r&&(h.onerror=q,r=!1,q=void 0)}function o(){var a=v,b=t;t=null,v=null,u=null,e.apply(null,[a,!1].concat(b))}function p(a,b){var c=i.call(arguments,1);if(v){if(u===a)return;o()}var d=g.computeStackTrace(a);if(v=d,u=a,t=c,setTimeout(function(){u===a&&o()},d.incomplete?2e3:0),b!==!1)throw a}var q,r,s=[],t=null,u=null,v=null;return p.subscribe=a,p.unsubscribe=b,p.uninstall=c,p}(),g.computeStackTrace=function(){function a(a){if("undefined"!=typeof a.stack&&a.stack){for(var b,c,f,g=/^\s*at (?:(.*?) ?\()?((?:file|https?|blob|chrome-extension|native|eval|webpack||[a-z]:|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,h=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i,i=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\/.*?|\[native code\]|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i,k=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,l=/\((\S*)(?::(\d+))(?::(\d+))\)/,m=a.stack.split("\n"),n=[],o=(/^(.*) is undefined$/.exec(a.message),0),p=m.length;o eval")>-1;r&&(b=k.exec(c[3]))?(c[3]=b[1],c[4]=b[2],c[5]=null):0!==o||c[5]||"undefined"==typeof a.columnNumber||(n[0].column=a.columnNumber+1),f={url:c[3],func:c[1]||j,args:c[2]?c[2].split(","):[],line:c[4]?+c[4]:null,column:c[5]?+c[5]:null}}if(!f.func&&f.line&&(f.func=j),f.url&&"blob:"===f.url.substr(0,5)){var s=new XMLHttpRequest;if(s.open("GET",f.url,!1),s.send(null),200===s.status){
+var t=s.responseText||"";t=t.slice(-300);var u=t.match(/\/\/# sourceMappingURL=(.*)$/);if(u){var v=u[1];"~"===v.charAt(0)&&(v=e()+v.slice(1)),f.url=v.slice(0,-4)}}}n.push(f)}return n.length?{name:a.name,message:a.message,url:d(),stack:n}:null}}function b(a,b,c,d){var e={url:b,line:c};if(e.url&&e.line){if(a.incomplete=!1,e.func||(e.func=j),a.stack.length>0&&a.stack[0].url===e.url){if(a.stack[0].line===e.line)return!1;if(!a.stack[0].line&&a.stack[0].func===e.func)return a.stack[0].line=e.line,!1}return a.stack.unshift(e),a.partial=!0,!0}return a.incomplete=!0,!1}function c(a,e){for(var h,i,k=/function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,l=[],m={},n=!1,o=c.caller;o&&!n;o=o.caller)if(o!==f&&o!==g.report){if(i={url:null,func:j,line:null,column:null},o.name?i.func=o.name:(h=k.exec(o.toString()))&&(i.func=h[1]),"undefined"==typeof i.func)try{i.func=h.input.substring(0,h.input.indexOf("{"))}catch(p){}m[""+o]?n=!0:m[""+o]=!0,l.push(i)}e&&l.splice(0,e);var q={name:a.name,message:a.message,url:d(),stack:l};return b(q,a.sourceURL||a.fileName,a.line||a.lineNumber,a.message||a.description),q}function f(b,e){var f=null;e=null==e?0:+e;try{if(f=a(b))return f}catch(h){if(g.debug)throw h}try{if(f=c(b,e+1))return f}catch(h){if(g.debug)throw h}return{name:b.name,message:b.message,url:d()}}return f.augmentStackTraceWithInitialElement=b,f.computeStackTraceFromStackProp=a,f}(),b.exports=g}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{8:8}],10:[function(a,b,c){function d(a,b){for(var c=0;c0){var i=d(c,this);~i?c.splice(i+1):c.push(this),~i?e.splice(i,1/0,g):e.push(g),~d(c,h)&&(h=b.call(this,g,h))}else c.push(h);return null==a?h instanceof Error?f(h):h:a.call(this,g,h)}}c=b.exports=e,c.getSerialize=g},{}],11:[function(a,b,c){function d(a,b){var c=(65535&a)+(65535&b),d=(a>>16)+(b>>16)+(c>>16);return d<<16|65535&c}function e(a,b){return a<>>32-b}function f(a,b,c,f,g,h){return d(e(d(d(b,a),d(f,h)),g),c)}function g(a,b,c,d,e,g,h){return f(b&c|~b&d,a,b,e,g,h)}function h(a,b,c,d,e,g,h){return f(b&d|c&~d,a,b,e,g,h)}function i(a,b,c,d,e,g,h){return f(b^c^d,a,b,e,g,h)}function j(a,b,c,d,e,g,h){return f(c^(b|~d),a,b,e,g,h)}function k(a,b){a[b>>5]|=128<>>9<<4)+14]=b;var c,e,f,k,l,m=1732584193,n=-271733879,o=-1732584194,p=271733878;for(c=0;c>5]>>>b%32&255);return c}function m(a){var b,c=[];for(c[(a.length>>2)-1]=void 0,b=0;b>5]|=(255&a.charCodeAt(b/8))<16&&(e=k(e,8*a.length)),c=0;c<16;c+=1)f[c]=909522486^e[c],g[c]=1549556828^e[c];return d=k(f.concat(m(b)),512+8*b.length),l(k(g.concat(d),640))}function p(a){var b,c,d="0123456789abcdef",e="";for(c=0;c>>4&15)+d.charAt(15&b);return e}function q(a){return unescape(encodeURIComponent(a))}function r(a){return n(q(a))}function s(a){return p(r(a))}function t(a,b){return o(q(a),q(b))}function u(a,b){return p(t(a,b))}function v(a,b,c){return b?c?t(b,a):u(b,a):c?r(a):s(a)}b.exports=v},{}]},{},[7,1,2,3])(7)});
+//# sourceMappingURL=raven.min.js.map
\ No newline at end of file
diff --git a/packages/raven-js/dist/angular,console,ember/raven.min.js.map b/packages/raven-js/dist/angular,console,ember/raven.min.js.map
new file mode 100644
index 000000000000..4a8c573bceb5
--- /dev/null
+++ b/packages/raven-js/dist/angular,console,ember/raven.min.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["raven.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Raven","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length","1","_dereq_","angularPlugin","angular","RavenProvider","$get","$window","ExceptionHandlerProvider","$provide","decorator","exceptionHandler","R","$delegate","ex","cause","captureException","extra","moduleName","provider","config","setDataCallback","wrappedCallback","data","_normalizeData","angularPattern","exception","values","matches","exec","value","type","message","angularDocs","substr","addPlugin","7","8","2","consolePlugin","console","pluginOptions","logLevels","levels","push","callback","msg","captureMessage","level","pop","wrapConsoleMethod","wrapMethod","5","3","emberPlugin","Ember","_oldOnError","onerror","error","RSVP","on","reason","context","4","RavenConfigError","name","prototype","constructor","utils","originalConsoleLevel","originalConsole","sentryLevel","args","slice","arguments","safeJoin","logger","Function","apply","6","now","Date","keepOriginalCallback","original","isFunction","_hasJSON","JSON","stringify","_hasDocument","isUndefined","_document","_hasNavigator","_navigator","_lastCapturedException","_lastData","_lastEventId","_globalServer","_globalKey","_globalProject","_globalContext","_globalOptions","release","_window","SENTRY_RELEASE","id","ignoreErrors","ignoreUrls","whitelistUrls","includePaths","headers","collectWindowErrors","captureUnhandledRejections","maxMessageLength","maxUrlLength","stackTraceLimit","autoBreadcrumbs","instrument","sampleRate","sanitizeKeys","_fetchDefaults","method","keepalive","referrerPolicy","supportsReferrerPolicy","_ignoreOnError","_isRavenInstalled","_originalErrorStackTraceLimit","_originalConsole","_originalConsoleMethods","_plugins","_startTime","_wrappedBuiltIns","_breadcrumbs","_lastCapturedEvent","_location","location","_lastHref","href","_resetBackoff","TraceKit","md5","isErrorEvent","isDOMError","isDOMException","isError","isObject","isPlainObject","isString","isArray","isEmptyObject","each","objectMerge","truncate","objectFrozen","hasKey","joinRegExp","urlencode","uuid4","htmlTreeAsString","isSameException","isSameStacktrace","parseUrl","fill","supportsFetch","serializeKeysForMessage","serializeException","sanitize","dsnKeys","split","dsnPattern","document","navigator","VERSION","debug","dsn","options","_logDebug","globalOptions","key","setDSN","maxBreadcrumbs","Math","max","min","autoBreadcrumbDefaults","xhr","dom","sentry","toString","instrumentDefaults","tryCatch","install","isSetup","report","subscribe","_handleOnErrorStackInfo","_attachPromiseRejectionHandler","_patchFunctionToString","_instrumentTryCatch","_instrumentBreadcrumbs","_drainPlugins","uri","_parseDSN","lastSlash","path","lastIndexOf","_dsn","user","_globalSecret","pass","_getGlobalServer","_globalEndpoint","func","undefined","wrap","_before","wrapped","deep","_ignoreNextOnError","__raven__","__raven_wrapper__","property","__orig__","uninstall","_detachPromiseRejectionHandler","_unpatchFunctionToString","_restoreBuiltIns","_restoreConsole","U","event","unhandledPromiseRejection","C","_promiseRejectionHandler","bind","addEventListener","Q","removeEventListener","trimHeadFrames","stacktrace","_getCaptureExceptionOptionsFromPlainObject","stack","computeStackTrace","_handleStackInfo","ex1","V","currentOptions","exKeys","Object","keys","sort","fingerprint","__serialized__","test","initialCall","fileurl","url","frames","_prepareFrames","reverse","_send","captureBreadcrumb","obj","crumb","timestamp","breadcrumbCallback","result","shift","plugin","pluginArgs","setUserContext","setExtraContext","_mergeContext","setTagsContext","tags","clearContext","getContext","parse","setEnvironment","environment","setRelease","dataCallback","setBreadcrumbCallback","setShouldSendCallback","shouldSendCallback","setTransport","transport","lastException","lastEventId","ravenNotConfiguredError","afterLoad","RavenConfig","showReportDialog","eventId","encode","encodeURIComponent","qs","email","globalServer","script","createElement","async","src","head","body","appendChild","M","setTimeout","_","eventType","evt","toUpperCase","createEvent","initEvent","createEventObject","dispatchEvent","fireEvent","toLowerCase","aa","evtName","_keypressTimeout","target","category","ca","debounceDuration","tagName","isContentEditable","timeout","_breadcrumbEventHandler","clearTimeout","da","from","to","parsedLoc","parsedTo","parsedFrom","protocol","host","relative","D","_originalFunctionToString","E","wrapTimeFn","orig","fn","Array","originalCallback","wrapEventTarget","proto","hasOwnProperty","capture","secure","handleEvent","err","before","clickHandler","keypressHandler","_keypressEventHandler","wrappedBuiltIns","requestAnimationFrame","cb","eventTargets","F","wrapProp","prop","xhrproto","XMLHttpRequest","origOpen","indexOf","__raven_xhr","status_code","origSend","onreadystatechangeHandler","readyState","status","props","j","onreadystatechange","origFetch","fetchInput","Request","fetchData","then","response","attachEvent","chrome","isChromePackagedApp","app","runtime","hasPushAndReplaceState","history","pushState","replaceState","oldOnPopState","onpopstate","currentHref","_captureUrlChange","historyReplacementFunction","origHistFunction","log","consoleMethodCallback","S","builtin","T","G","installer","concat","H","str","m","allowSecretKey","K","port","B","W","stackInfo","_triggerEvent","_processException","lineno","Y","frame","_normalizeFrame","in_app","ha","stackInfoUrl","normalized","filename","line","colno","column","function","ga","prefixedMessage","transaction","ia","request","Referer","breadcrumbs","_trimBreadcrumbs","ja","urlProp","urlProps","ka","httpData","userAgent","User-Agent","referrer","z","_backoffDuration","_backoffStart","na","oa","current","last","pa","_shouldBackoff","retry","get","getResponseHeader","parseInt","Z","baseData","project","platform","_getHttpData","serverName","server_name","_sanitizeData","forEach","random","_sendProcessedPayload","qa","sa","ra","_trimPacket","allowDuplicates","_isRepeatData","event_id","_getUuid","auth","sentry_version","sentry_client","sentry_key","sentry_secret","_makeRequest","onSuccess","onError","_setBackoffState","ta","opts","evaluatedHeaders","evaluatedFetchParameters","_evaluateHash","fetchParameters","defaultFetchOptions","fetchOptions","fetch","ok","hasCORS","XDomainRequest","replace","onload","open","setRequestHeader","send","ua","hash","evaluated","A","$","setUser","setReleaseContext","10","11","9","RavenConstructor","_Raven","noConflict","Client","what","supportsErrorEvent","ErrorEvent","supportsDOMError","DOMError","supportsDOMException","DOMException","Headers","Response","supportsPromiseRejectionEvent","PromiseRejectionEvent","normalizedData","obj1","obj2","isFrozen","object","patterns","pattern","sources","len","source","RegExp","join","pairs","match","query","fragment","crypto","msCrypto","getRandomValues","arr","Uint16Array","pad","num","v","c","elem","nextStr","MAX_TRAVERSE_HEIGHT","MAX_OUTPUT_LEN","out","height","separator","sepLength","htmlElementAsString","parentNode","className","classes","attr","attrWhitelist","getAttribute","isOnlyOneTruthy","b","isBothUndefined","ex2","stack1","stack2","frames1","frames2","replacement","track","input","delimiter","output","String","utf8Length","encodeURI","jsonSize","serializeValue","maxLength","serializeObject","depth","reduce","acc","map","val","maxSize","MAX_SERIALIZE_EXCEPTION_DEPTH","MAX_SERIALIZE_EXCEPTION_SIZE","serialized","filter","MAX_SERIALIZE_KEYS_LENGTH","usedKeys","sanitizeWorker","workerInput","k","sanitizeRegExp","sanitizeMask","safeInput","o_O","getLocationHref","getLocationOrigin","origin","hostname","_slice","UNKNOWN_FUNCTION","ERROR_TYPES_RE","handler","installGlobalHandler","handlers","unsubscribe","splice","unsubscribeAll","uninstallGlobalHandler","notifyHandlers","isWindowError","inner","traceKitWindowOnError","lineNo","colNo","lastExceptionStack","augmentStackTraceWithInitialElement","processLastException","groups","_oldOnerrorHandler","_onErrorHandlerInstalled","_lastExceptionStack","_lastArgs","lastArgs","rethrow","incomplete","computeStackTraceFromStackProp","submatch","parts","element","winjs","gecko","geckoEval","chromeEval","lines","isNative","isEval","columnNumber","responseText","sourceMaps","sourceMapAddress","charAt","initial","unshift","partial","computeStackTraceByWalkingCallerChain","item","functionName","funcs","recursion","curr","caller","substring","sourceURL","fileName","lineNumber","description","haystack","needle","replacer","spaces","cycleReplacer","serializer","stringifyError","thisPos","Infinity","getSerialize","safeAdd","x","y","lsw","msw","bitRotateLeft","cnt","md5cmn","q","md5ff","d","md5gg","md5hh","md5ii","binlMD5","olda","oldb","oldc","oldd","binl2rstr","length32","fromCharCode","rstr2binl","length8","charCodeAt","rstrMD5","rstrHMACMD5","bkey","ipad","opad","rstr2hex","hexTab","str2rstrUTF8","unescape","rawMD5","hexMD5","rawHMACMD5","hexHMACMD5","string","raw"],"mappings":"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","file":"raven.min.js"}
\ No newline at end of file
diff --git a/packages/raven-js/dist/angular,console,require,vue/raven.js b/packages/raven-js/dist/angular,console,require,vue/raven.js
new file mode 100644
index 000000000000..1256d4341043
--- /dev/null
+++ b/packages/raven-js/dist/angular,console,require,vue/raven.js
@@ -0,0 +1,4189 @@
+/*! Raven.js 3.25.2 (30b6d4e) | github.com/getsentry/raven-js */
+
+/*
+ * Includes TraceKit
+ * https://github.com/getsentry/TraceKit
+ *
+ * Copyright 2018 Matt Robenolt and other contributors
+ * Released under the BSD license
+ * https://github.com/getsentry/raven-js/blob/master/LICENSE
+ *
+ */
+
+(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Raven = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o' : 'anonymous component') +
+ (vm._isVue && vm.$options.__file ? ' at ' + vm.$options.__file : '')
+ );
+}
+
+function vuePlugin(Raven, Vue) {
+ Vue = Vue || window.Vue;
+
+ // quit if Vue isn't on the page
+ if (!Vue || !Vue.config) return;
+
+ var _oldOnError = Vue.config.errorHandler;
+ Vue.config.errorHandler = function VueErrorHandler(error, vm, info) {
+ var metaData = {};
+
+ // vm and lifecycleHook are not always available
+ if (Object.prototype.toString.call(vm) === '[object Object]') {
+ metaData.componentName = formatComponentName(vm);
+ metaData.propsData = vm.$options.propsData;
+ }
+
+ if (typeof info !== 'undefined') {
+ metaData.lifecycleHook = info;
+ }
+
+ Raven.captureException(error, {
+ extra: metaData
+ });
+
+ if (typeof _oldOnError === 'function') {
+ _oldOnError.call(this, error, vm, info);
+ }
+ };
+}
+
+module.exports = vuePlugin;
+
+_dereq_(8).addPlugin(module.exports);
+},{"8":8}],5:[function(_dereq_,module,exports){
+function RavenConfigError(message) {
+ this.name = 'RavenConfigError';
+ this.message = message;
+}
+RavenConfigError.prototype = new Error();
+RavenConfigError.prototype.constructor = RavenConfigError;
+
+module.exports = RavenConfigError;
+
+},{}],6:[function(_dereq_,module,exports){
+var utils = _dereq_(9);
+
+var wrapMethod = function(console, level, callback) {
+ var originalConsoleLevel = console[level];
+ var originalConsole = console;
+
+ if (!(level in console)) {
+ return;
+ }
+
+ var sentryLevel = level === 'warn' ? 'warning' : level;
+
+ console[level] = function() {
+ var args = [].slice.call(arguments);
+
+ var msg = utils.safeJoin(args, ' ');
+ var data = {level: sentryLevel, logger: 'console', extra: {arguments: args}};
+
+ if (level === 'assert') {
+ if (args[0] === false) {
+ // Default browsers message
+ msg =
+ 'Assertion failed: ' + (utils.safeJoin(args.slice(1), ' ') || 'console.assert');
+ data.extra.arguments = args.slice(1);
+ callback && callback(msg, data);
+ }
+ } else {
+ callback && callback(msg, data);
+ }
+
+ // this fails for some browsers. :(
+ if (originalConsoleLevel) {
+ // IE9 doesn't allow calling apply on console functions directly
+ // See: https://stackoverflow.com/questions/5472938/does-ie9-support-console-log-and-is-it-a-real-function#answer-5473193
+ Function.prototype.apply.call(originalConsoleLevel, originalConsole, args);
+ }
+ };
+};
+
+module.exports = {
+ wrapMethod: wrapMethod
+};
+
+},{"9":9}],7:[function(_dereq_,module,exports){
+(function (global){
+/*global XDomainRequest:false */
+
+var TraceKit = _dereq_(10);
+var stringify = _dereq_(11);
+var md5 = _dereq_(12);
+var RavenConfigError = _dereq_(5);
+
+var utils = _dereq_(9);
+var isErrorEvent = utils.isErrorEvent;
+var isDOMError = utils.isDOMError;
+var isDOMException = utils.isDOMException;
+var isError = utils.isError;
+var isObject = utils.isObject;
+var isPlainObject = utils.isPlainObject;
+var isUndefined = utils.isUndefined;
+var isFunction = utils.isFunction;
+var isString = utils.isString;
+var isArray = utils.isArray;
+var isEmptyObject = utils.isEmptyObject;
+var each = utils.each;
+var objectMerge = utils.objectMerge;
+var truncate = utils.truncate;
+var objectFrozen = utils.objectFrozen;
+var hasKey = utils.hasKey;
+var joinRegExp = utils.joinRegExp;
+var urlencode = utils.urlencode;
+var uuid4 = utils.uuid4;
+var htmlTreeAsString = utils.htmlTreeAsString;
+var isSameException = utils.isSameException;
+var isSameStacktrace = utils.isSameStacktrace;
+var parseUrl = utils.parseUrl;
+var fill = utils.fill;
+var supportsFetch = utils.supportsFetch;
+var supportsReferrerPolicy = utils.supportsReferrerPolicy;
+var serializeKeysForMessage = utils.serializeKeysForMessage;
+var serializeException = utils.serializeException;
+var sanitize = utils.sanitize;
+
+var wrapConsoleMethod = _dereq_(6).wrapMethod;
+
+var dsnKeys = 'source protocol user pass host port path'.split(' '),
+ dsnPattern = /^(?:(\w+):)?\/\/(?:(\w+)(:\w+)?@)?([\w\.-]+)(?::(\d+))?(\/.*)/;
+
+function now() {
+ return +new Date();
+}
+
+// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)
+var _window =
+ typeof window !== 'undefined'
+ ? window
+ : typeof global !== 'undefined'
+ ? global
+ : typeof self !== 'undefined'
+ ? self
+ : {};
+var _document = _window.document;
+var _navigator = _window.navigator;
+
+function keepOriginalCallback(original, callback) {
+ return isFunction(callback)
+ ? function(data) {
+ return callback(data, original);
+ }
+ : callback;
+}
+
+// First, check for JSON support
+// If there is no JSON, we no-op the core features of Raven
+// since JSON is required to encode the payload
+function Raven() {
+ this._hasJSON = !!(typeof JSON === 'object' && JSON.stringify);
+ // Raven can run in contexts where there's no document (react-native)
+ this._hasDocument = !isUndefined(_document);
+ this._hasNavigator = !isUndefined(_navigator);
+ this._lastCapturedException = null;
+ this._lastData = null;
+ this._lastEventId = null;
+ this._globalServer = null;
+ this._globalKey = null;
+ this._globalProject = null;
+ this._globalContext = {};
+ this._globalOptions = {
+ // SENTRY_RELEASE can be injected by https://github.com/getsentry/sentry-webpack-plugin
+ release: _window.SENTRY_RELEASE && _window.SENTRY_RELEASE.id,
+ logger: 'javascript',
+ ignoreErrors: [],
+ ignoreUrls: [],
+ whitelistUrls: [],
+ includePaths: [],
+ headers: null,
+ collectWindowErrors: true,
+ captureUnhandledRejections: true,
+ maxMessageLength: 0,
+ // By default, truncates URL values to 250 chars
+ maxUrlLength: 250,
+ stackTraceLimit: 50,
+ autoBreadcrumbs: true,
+ instrument: true,
+ sampleRate: 1,
+ sanitizeKeys: []
+ };
+ this._fetchDefaults = {
+ method: 'POST',
+ keepalive: true,
+ // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default
+ // https://caniuse.com/#feat=referrer-policy
+ // It doesn't. And it throw exception instead of ignoring this parameter...
+ // REF: https://github.com/getsentry/raven-js/issues/1233
+ referrerPolicy: supportsReferrerPolicy() ? 'origin' : ''
+ };
+ this._ignoreOnError = 0;
+ this._isRavenInstalled = false;
+ this._originalErrorStackTraceLimit = Error.stackTraceLimit;
+ // capture references to window.console *and* all its methods first
+ // before the console plugin has a chance to monkey patch
+ this._originalConsole = _window.console || {};
+ this._originalConsoleMethods = {};
+ this._plugins = [];
+ this._startTime = now();
+ this._wrappedBuiltIns = [];
+ this._breadcrumbs = [];
+ this._lastCapturedEvent = null;
+ this._keypressTimeout;
+ this._location = _window.location;
+ this._lastHref = this._location && this._location.href;
+ this._resetBackoff();
+
+ // eslint-disable-next-line guard-for-in
+ for (var method in this._originalConsole) {
+ this._originalConsoleMethods[method] = this._originalConsole[method];
+ }
+}
+
+/*
+ * The core Raven singleton
+ *
+ * @this {Raven}
+ */
+
+Raven.prototype = {
+ // Hardcode version string so that raven source can be loaded directly via
+ // webpack (using a build step causes webpack #1617). Grunt verifies that
+ // this value matches package.json during build.
+ // See: https://github.com/getsentry/raven-js/issues/465
+ VERSION: '3.25.2',
+
+ debug: false,
+
+ TraceKit: TraceKit, // alias to TraceKit
+
+ /*
+ * Configure Raven with a DSN and extra options
+ *
+ * @param {string} dsn The public Sentry DSN
+ * @param {object} options Set of global options [optional]
+ * @return {Raven}
+ */
+ config: function(dsn, options) {
+ var self = this;
+
+ if (self._globalServer) {
+ this._logDebug('error', 'Error: Raven has already been configured');
+ return self;
+ }
+ if (!dsn) return self;
+
+ var globalOptions = self._globalOptions;
+
+ // merge in options
+ if (options) {
+ each(options, function(key, value) {
+ // tags and extra are special and need to be put into context
+ if (key === 'tags' || key === 'extra' || key === 'user') {
+ self._globalContext[key] = value;
+ } else {
+ globalOptions[key] = value;
+ }
+ });
+ }
+
+ self.setDSN(dsn);
+
+ // "Script error." is hard coded into browsers for errors that it can't read.
+ // this is the result of a script being pulled in from an external domain and CORS.
+ globalOptions.ignoreErrors.push(/^Script error\.?$/);
+ globalOptions.ignoreErrors.push(/^Javascript error: Script error\.? on line 0$/);
+
+ // join regexp rules into one big rule
+ globalOptions.ignoreErrors = joinRegExp(globalOptions.ignoreErrors);
+ globalOptions.ignoreUrls = globalOptions.ignoreUrls.length
+ ? joinRegExp(globalOptions.ignoreUrls)
+ : false;
+ globalOptions.whitelistUrls = globalOptions.whitelistUrls.length
+ ? joinRegExp(globalOptions.whitelistUrls)
+ : false;
+ globalOptions.includePaths = joinRegExp(globalOptions.includePaths);
+ globalOptions.maxBreadcrumbs = Math.max(
+ 0,
+ Math.min(globalOptions.maxBreadcrumbs || 100, 100)
+ ); // default and hard limit is 100
+
+ var autoBreadcrumbDefaults = {
+ xhr: true,
+ console: true,
+ dom: true,
+ location: true,
+ sentry: true
+ };
+
+ var autoBreadcrumbs = globalOptions.autoBreadcrumbs;
+ if ({}.toString.call(autoBreadcrumbs) === '[object Object]') {
+ autoBreadcrumbs = objectMerge(autoBreadcrumbDefaults, autoBreadcrumbs);
+ } else if (autoBreadcrumbs !== false) {
+ autoBreadcrumbs = autoBreadcrumbDefaults;
+ }
+ globalOptions.autoBreadcrumbs = autoBreadcrumbs;
+
+ var instrumentDefaults = {
+ tryCatch: true
+ };
+
+ var instrument = globalOptions.instrument;
+ if ({}.toString.call(instrument) === '[object Object]') {
+ instrument = objectMerge(instrumentDefaults, instrument);
+ } else if (instrument !== false) {
+ instrument = instrumentDefaults;
+ }
+ globalOptions.instrument = instrument;
+
+ TraceKit.collectWindowErrors = !!globalOptions.collectWindowErrors;
+
+ // return for chaining
+ return self;
+ },
+
+ /*
+ * Installs a global window.onerror error handler
+ * to capture and report uncaught exceptions.
+ * At this point, install() is required to be called due
+ * to the way TraceKit is set up.
+ *
+ * @return {Raven}
+ */
+ install: function() {
+ var self = this;
+ if (self.isSetup() && !self._isRavenInstalled) {
+ TraceKit.report.subscribe(function() {
+ self._handleOnErrorStackInfo.apply(self, arguments);
+ });
+
+ if (self._globalOptions.captureUnhandledRejections) {
+ self._attachPromiseRejectionHandler();
+ }
+
+ self._patchFunctionToString();
+
+ if (self._globalOptions.instrument && self._globalOptions.instrument.tryCatch) {
+ self._instrumentTryCatch();
+ }
+
+ if (self._globalOptions.autoBreadcrumbs) self._instrumentBreadcrumbs();
+
+ // Install all of the plugins
+ self._drainPlugins();
+
+ self._isRavenInstalled = true;
+ }
+
+ Error.stackTraceLimit = self._globalOptions.stackTraceLimit;
+ return this;
+ },
+
+ /*
+ * Set the DSN (can be called multiple time unlike config)
+ *
+ * @param {string} dsn The public Sentry DSN
+ */
+ setDSN: function(dsn) {
+ var self = this,
+ uri = self._parseDSN(dsn),
+ lastSlash = uri.path.lastIndexOf('/'),
+ path = uri.path.substr(1, lastSlash);
+
+ self._dsn = dsn;
+ self._globalKey = uri.user;
+ self._globalSecret = uri.pass && uri.pass.substr(1);
+ self._globalProject = uri.path.substr(lastSlash + 1);
+
+ self._globalServer = self._getGlobalServer(uri);
+
+ self._globalEndpoint =
+ self._globalServer + '/' + path + 'api/' + self._globalProject + '/store/';
+
+ // Reset backoff state since we may be pointing at a
+ // new project/server
+ this._resetBackoff();
+ },
+
+ /*
+ * Wrap code within a context so Raven can capture errors
+ * reliably across domains that is executed immediately.
+ *
+ * @param {object} options A specific set of options for this context [optional]
+ * @param {function} func The callback to be immediately executed within the context
+ * @param {array} args An array of arguments to be called with the callback [optional]
+ */
+ context: function(options, func, args) {
+ if (isFunction(options)) {
+ args = func || [];
+ func = options;
+ options = undefined;
+ }
+
+ return this.wrap(options, func).apply(this, args);
+ },
+
+ /*
+ * Wrap code within a context and returns back a new function to be executed
+ *
+ * @param {object} options A specific set of options for this context [optional]
+ * @param {function} func The function to be wrapped in a new context
+ * @param {function} func A function to call before the try/catch wrapper [optional, private]
+ * @return {function} The newly wrapped functions with a context
+ */
+ wrap: function(options, func, _before) {
+ var self = this;
+ // 1 argument has been passed, and it's not a function
+ // so just return it
+ if (isUndefined(func) && !isFunction(options)) {
+ return options;
+ }
+
+ // options is optional
+ if (isFunction(options)) {
+ func = options;
+ options = undefined;
+ }
+
+ // At this point, we've passed along 2 arguments, and the second one
+ // is not a function either, so we'll just return the second argument.
+ if (!isFunction(func)) {
+ return func;
+ }
+
+ // We don't wanna wrap it twice!
+ try {
+ if (func.__raven__) {
+ return func;
+ }
+
+ // If this has already been wrapped in the past, return that
+ if (func.__raven_wrapper__) {
+ return func.__raven_wrapper__;
+ }
+ } catch (e) {
+ // Just accessing custom props in some Selenium environments
+ // can cause a "Permission denied" exception (see raven-js#495).
+ // Bail on wrapping and return the function as-is (defers to window.onerror).
+ return func;
+ }
+
+ function wrapped() {
+ var args = [],
+ i = arguments.length,
+ deep = !options || (options && options.deep !== false);
+
+ if (_before && isFunction(_before)) {
+ _before.apply(this, arguments);
+ }
+
+ // Recursively wrap all of a function's arguments that are
+ // functions themselves.
+ while (i--) args[i] = deep ? self.wrap(options, arguments[i]) : arguments[i];
+
+ try {
+ // Attempt to invoke user-land function
+ // NOTE: If you are a Sentry user, and you are seeing this stack frame, it
+ // means Raven caught an error invoking your application code. This is
+ // expected behavior and NOT indicative of a bug with Raven.js.
+ return func.apply(this, args);
+ } catch (e) {
+ self._ignoreNextOnError();
+ self.captureException(e, options);
+ throw e;
+ }
+ }
+
+ // copy over properties of the old function
+ for (var property in func) {
+ if (hasKey(func, property)) {
+ wrapped[property] = func[property];
+ }
+ }
+ wrapped.prototype = func.prototype;
+
+ func.__raven_wrapper__ = wrapped;
+ // Signal that this function has been wrapped/filled already
+ // for both debugging and to prevent it to being wrapped/filled twice
+ wrapped.__raven__ = true;
+ wrapped.__orig__ = func;
+
+ return wrapped;
+ },
+
+ /**
+ * Uninstalls the global error handler.
+ *
+ * @return {Raven}
+ */
+ uninstall: function() {
+ TraceKit.report.uninstall();
+
+ this._detachPromiseRejectionHandler();
+ this._unpatchFunctionToString();
+ this._restoreBuiltIns();
+ this._restoreConsole();
+
+ Error.stackTraceLimit = this._originalErrorStackTraceLimit;
+ this._isRavenInstalled = false;
+
+ return this;
+ },
+
+ /**
+ * Callback used for `unhandledrejection` event
+ *
+ * @param {PromiseRejectionEvent} event An object containing
+ * promise: the Promise that was rejected
+ * reason: the value with which the Promise was rejected
+ * @return void
+ */
+ _promiseRejectionHandler: function(event) {
+ this._logDebug('debug', 'Raven caught unhandled promise rejection:', event);
+ this.captureException(event.reason, {
+ extra: {
+ unhandledPromiseRejection: true
+ }
+ });
+ },
+
+ /**
+ * Installs the global promise rejection handler.
+ *
+ * @return {raven}
+ */
+ _attachPromiseRejectionHandler: function() {
+ this._promiseRejectionHandler = this._promiseRejectionHandler.bind(this);
+ _window.addEventListener &&
+ _window.addEventListener('unhandledrejection', this._promiseRejectionHandler);
+ return this;
+ },
+
+ /**
+ * Uninstalls the global promise rejection handler.
+ *
+ * @return {raven}
+ */
+ _detachPromiseRejectionHandler: function() {
+ _window.removeEventListener &&
+ _window.removeEventListener('unhandledrejection', this._promiseRejectionHandler);
+ return this;
+ },
+
+ /**
+ * Manually capture an exception and send it over to Sentry
+ *
+ * @param {error} ex An exception to be logged
+ * @param {object} options A specific set of options for this error [optional]
+ * @return {Raven}
+ */
+ captureException: function(ex, options) {
+ options = objectMerge({trimHeadFrames: 0}, options ? options : {});
+
+ if (isErrorEvent(ex) && ex.error) {
+ // If it is an ErrorEvent with `error` property, extract it to get actual Error
+ ex = ex.error;
+ } else if (isDOMError(ex) || isDOMException(ex)) {
+ // If it is a DOMError or DOMException (which are legacy APIs, but still supported in some browsers)
+ // then we just extract the name and message, as they don't provide anything else
+ // https://developer.mozilla.org/en-US/docs/Web/API/DOMError
+ // https://developer.mozilla.org/en-US/docs/Web/API/DOMException
+ var name = ex.name || (isDOMError(ex) ? 'DOMError' : 'DOMException');
+ var message = ex.message ? name + ': ' + ex.message : name;
+
+ return this.captureMessage(
+ message,
+ objectMerge(options, {
+ // neither DOMError or DOMException provide stack trace and we most likely wont get it this way as well
+ // but it's barely any overhead so we may at least try
+ stacktrace: true,
+ trimHeadFrames: options.trimHeadFrames + 1
+ })
+ );
+ } else if (isError(ex)) {
+ // we have a real Error object
+ ex = ex;
+ } else if (isPlainObject(ex)) {
+ // If it is plain Object, serialize it manually and extract options
+ // This will allow us to group events based on top-level keys
+ // which is much better than creating new group when any key/value change
+ options = this._getCaptureExceptionOptionsFromPlainObject(options, ex);
+ ex = new Error(options.message);
+ } else {
+ // If none of previous checks were valid, then it means that
+ // it's not a DOMError/DOMException
+ // it's not a plain Object
+ // it's not a valid ErrorEvent (one with an error property)
+ // it's not an Error
+ // So bail out and capture it as a simple message:
+ return this.captureMessage(
+ ex,
+ objectMerge(options, {
+ stacktrace: true, // if we fall back to captureMessage, default to attempting a new trace
+ trimHeadFrames: options.trimHeadFrames + 1
+ })
+ );
+ }
+
+ // Store the raw exception object for potential debugging and introspection
+ this._lastCapturedException = ex;
+
+ // TraceKit.report will re-raise any exception passed to it,
+ // which means you have to wrap it in try/catch. Instead, we
+ // can wrap it here and only re-raise if TraceKit.report
+ // raises an exception different from the one we asked to
+ // report on.
+ try {
+ var stack = TraceKit.computeStackTrace(ex);
+ this._handleStackInfo(stack, options);
+ } catch (ex1) {
+ if (ex !== ex1) {
+ throw ex1;
+ }
+ }
+
+ return this;
+ },
+
+ _getCaptureExceptionOptionsFromPlainObject: function(currentOptions, ex) {
+ var exKeys = Object.keys(ex).sort();
+ var options = objectMerge(currentOptions, {
+ message:
+ 'Non-Error exception captured with keys: ' + serializeKeysForMessage(exKeys),
+ fingerprint: [md5(exKeys)],
+ extra: currentOptions.extra || {}
+ });
+ options.extra.__serialized__ = serializeException(ex);
+
+ return options;
+ },
+
+ /*
+ * Manually send a message to Sentry
+ *
+ * @param {string} msg A plain message to be captured in Sentry
+ * @param {object} options A specific set of options for this message [optional]
+ * @return {Raven}
+ */
+ captureMessage: function(msg, options) {
+ // config() automagically converts ignoreErrors from a list to a RegExp so we need to test for an
+ // early call; we'll error on the side of logging anything called before configuration since it's
+ // probably something you should see:
+ if (
+ !!this._globalOptions.ignoreErrors.test &&
+ this._globalOptions.ignoreErrors.test(msg)
+ ) {
+ return;
+ }
+
+ options = options || {};
+ msg = msg + ''; // Make sure it's actually a string
+
+ var data = objectMerge(
+ {
+ message: msg
+ },
+ options
+ );
+
+ var ex;
+ // Generate a "synthetic" stack trace from this point.
+ // NOTE: If you are a Sentry user, and you are seeing this stack frame, it is NOT indicative
+ // of a bug with Raven.js. Sentry generates synthetic traces either by configuration,
+ // or if it catches a thrown object without a "stack" property.
+ try {
+ throw new Error(msg);
+ } catch (ex1) {
+ ex = ex1;
+ }
+
+ // null exception name so `Error` isn't prefixed to msg
+ ex.name = null;
+ var stack = TraceKit.computeStackTrace(ex);
+
+ // stack[0] is `throw new Error(msg)` call itself, we are interested in the frame that was just before that, stack[1]
+ var initialCall = isArray(stack.stack) && stack.stack[1];
+
+ // if stack[1] is `Raven.captureException`, it means that someone passed a string to it and we redirected that call
+ // to be handled by `captureMessage`, thus `initialCall` is the 3rd one, not 2nd
+ // initialCall => captureException(string) => captureMessage(string)
+ if (initialCall && initialCall.func === 'Raven.captureException') {
+ initialCall = stack.stack[2];
+ }
+
+ var fileurl = (initialCall && initialCall.url) || '';
+
+ if (
+ !!this._globalOptions.ignoreUrls.test &&
+ this._globalOptions.ignoreUrls.test(fileurl)
+ ) {
+ return;
+ }
+
+ if (
+ !!this._globalOptions.whitelistUrls.test &&
+ !this._globalOptions.whitelistUrls.test(fileurl)
+ ) {
+ return;
+ }
+
+ if (this._globalOptions.stacktrace || (options && options.stacktrace)) {
+ // fingerprint on msg, not stack trace (legacy behavior, could be revisited)
+ data.fingerprint = data.fingerprint == null ? msg : data.fingerprint;
+
+ options = objectMerge(
+ {
+ trimHeadFrames: 0
+ },
+ options
+ );
+ // Since we know this is a synthetic trace, the top frame (this function call)
+ // MUST be from Raven.js, so mark it for trimming
+ // We add to the trim counter so that callers can choose to trim extra frames, such
+ // as utility functions.
+ options.trimHeadFrames += 1;
+
+ var frames = this._prepareFrames(stack, options);
+ data.stacktrace = {
+ // Sentry expects frames oldest to newest
+ frames: frames.reverse()
+ };
+ }
+
+ // Make sure that fingerprint is always wrapped in an array
+ if (data.fingerprint) {
+ data.fingerprint = isArray(data.fingerprint)
+ ? data.fingerprint
+ : [data.fingerprint];
+ }
+
+ // Fire away!
+ this._send(data);
+
+ return this;
+ },
+
+ captureBreadcrumb: function(obj) {
+ var crumb = objectMerge(
+ {
+ timestamp: now() / 1000
+ },
+ obj
+ );
+
+ if (isFunction(this._globalOptions.breadcrumbCallback)) {
+ var result = this._globalOptions.breadcrumbCallback(crumb);
+
+ if (isObject(result) && !isEmptyObject(result)) {
+ crumb = result;
+ } else if (result === false) {
+ return this;
+ }
+ }
+
+ this._breadcrumbs.push(crumb);
+ if (this._breadcrumbs.length > this._globalOptions.maxBreadcrumbs) {
+ this._breadcrumbs.shift();
+ }
+ return this;
+ },
+
+ addPlugin: function(plugin /*arg1, arg2, ... argN*/) {
+ var pluginArgs = [].slice.call(arguments, 1);
+
+ this._plugins.push([plugin, pluginArgs]);
+ if (this._isRavenInstalled) {
+ this._drainPlugins();
+ }
+
+ return this;
+ },
+
+ /*
+ * Set/clear a user to be sent along with the payload.
+ *
+ * @param {object} user An object representing user data [optional]
+ * @return {Raven}
+ */
+ setUserContext: function(user) {
+ // Intentionally do not merge here since that's an unexpected behavior.
+ this._globalContext.user = user;
+
+ return this;
+ },
+
+ /*
+ * Merge extra attributes to be sent along with the payload.
+ *
+ * @param {object} extra An object representing extra data [optional]
+ * @return {Raven}
+ */
+ setExtraContext: function(extra) {
+ this._mergeContext('extra', extra);
+
+ return this;
+ },
+
+ /*
+ * Merge tags to be sent along with the payload.
+ *
+ * @param {object} tags An object representing tags [optional]
+ * @return {Raven}
+ */
+ setTagsContext: function(tags) {
+ this._mergeContext('tags', tags);
+
+ return this;
+ },
+
+ /*
+ * Clear all of the context.
+ *
+ * @return {Raven}
+ */
+ clearContext: function() {
+ this._globalContext = {};
+
+ return this;
+ },
+
+ /*
+ * Get a copy of the current context. This cannot be mutated.
+ *
+ * @return {object} copy of context
+ */
+ getContext: function() {
+ // lol javascript
+ return JSON.parse(stringify(this._globalContext));
+ },
+
+ /*
+ * Set environment of application
+ *
+ * @param {string} environment Typically something like 'production'.
+ * @return {Raven}
+ */
+ setEnvironment: function(environment) {
+ this._globalOptions.environment = environment;
+
+ return this;
+ },
+
+ /*
+ * Set release version of application
+ *
+ * @param {string} release Typically something like a git SHA to identify version
+ * @return {Raven}
+ */
+ setRelease: function(release) {
+ this._globalOptions.release = release;
+
+ return this;
+ },
+
+ /*
+ * Set the dataCallback option
+ *
+ * @param {function} callback The callback to run which allows the
+ * data blob to be mutated before sending
+ * @return {Raven}
+ */
+ setDataCallback: function(callback) {
+ var original = this._globalOptions.dataCallback;
+ this._globalOptions.dataCallback = keepOriginalCallback(original, callback);
+ return this;
+ },
+
+ /*
+ * Set the breadcrumbCallback option
+ *
+ * @param {function} callback The callback to run which allows filtering
+ * or mutating breadcrumbs
+ * @return {Raven}
+ */
+ setBreadcrumbCallback: function(callback) {
+ var original = this._globalOptions.breadcrumbCallback;
+ this._globalOptions.breadcrumbCallback = keepOriginalCallback(original, callback);
+ return this;
+ },
+
+ /*
+ * Set the shouldSendCallback option
+ *
+ * @param {function} callback The callback to run which allows
+ * introspecting the blob before sending
+ * @return {Raven}
+ */
+ setShouldSendCallback: function(callback) {
+ var original = this._globalOptions.shouldSendCallback;
+ this._globalOptions.shouldSendCallback = keepOriginalCallback(original, callback);
+ return this;
+ },
+
+ /**
+ * Override the default HTTP transport mechanism that transmits data
+ * to the Sentry server.
+ *
+ * @param {function} transport Function invoked instead of the default
+ * `makeRequest` handler.
+ *
+ * @return {Raven}
+ */
+ setTransport: function(transport) {
+ this._globalOptions.transport = transport;
+
+ return this;
+ },
+
+ /*
+ * Get the latest raw exception that was captured by Raven.
+ *
+ * @return {error}
+ */
+ lastException: function() {
+ return this._lastCapturedException;
+ },
+
+ /*
+ * Get the last event id
+ *
+ * @return {string}
+ */
+ lastEventId: function() {
+ return this._lastEventId;
+ },
+
+ /*
+ * Determine if Raven is setup and ready to go.
+ *
+ * @return {boolean}
+ */
+ isSetup: function() {
+ if (!this._hasJSON) return false; // needs JSON support
+ if (!this._globalServer) {
+ if (!this.ravenNotConfiguredError) {
+ this.ravenNotConfiguredError = true;
+ this._logDebug('error', 'Error: Raven has not been configured.');
+ }
+ return false;
+ }
+ return true;
+ },
+
+ afterLoad: function() {
+ // TODO: remove window dependence?
+
+ // Attempt to initialize Raven on load
+ var RavenConfig = _window.RavenConfig;
+ if (RavenConfig) {
+ this.config(RavenConfig.dsn, RavenConfig.config).install();
+ }
+ },
+
+ showReportDialog: function(options) {
+ if (
+ !_document // doesn't work without a document (React native)
+ )
+ return;
+
+ options = options || {};
+
+ var lastEventId = options.eventId || this.lastEventId();
+ if (!lastEventId) {
+ throw new RavenConfigError('Missing eventId');
+ }
+
+ var dsn = options.dsn || this._dsn;
+ if (!dsn) {
+ throw new RavenConfigError('Missing DSN');
+ }
+
+ var encode = encodeURIComponent;
+ var qs = '';
+ qs += '?eventId=' + encode(lastEventId);
+ qs += '&dsn=' + encode(dsn);
+
+ var user = options.user || this._globalContext.user;
+ if (user) {
+ if (user.name) qs += '&name=' + encode(user.name);
+ if (user.email) qs += '&email=' + encode(user.email);
+ }
+
+ var globalServer = this._getGlobalServer(this._parseDSN(dsn));
+
+ var script = _document.createElement('script');
+ script.async = true;
+ script.src = globalServer + '/api/embed/error-page/' + qs;
+ (_document.head || _document.body).appendChild(script);
+ },
+
+ /**** Private functions ****/
+ _ignoreNextOnError: function() {
+ var self = this;
+ this._ignoreOnError += 1;
+ setTimeout(function() {
+ // onerror should trigger before setTimeout
+ self._ignoreOnError -= 1;
+ });
+ },
+
+ _triggerEvent: function(eventType, options) {
+ // NOTE: `event` is a native browser thing, so let's avoid conflicting wiht it
+ var evt, key;
+
+ if (!this._hasDocument) return;
+
+ options = options || {};
+
+ eventType = 'raven' + eventType.substr(0, 1).toUpperCase() + eventType.substr(1);
+
+ if (_document.createEvent) {
+ evt = _document.createEvent('HTMLEvents');
+ evt.initEvent(eventType, true, true);
+ } else {
+ evt = _document.createEventObject();
+ evt.eventType = eventType;
+ }
+
+ for (key in options)
+ if (hasKey(options, key)) {
+ evt[key] = options[key];
+ }
+
+ if (_document.createEvent) {
+ // IE9 if standards
+ _document.dispatchEvent(evt);
+ } else {
+ // IE8 regardless of Quirks or Standards
+ // IE9 if quirks
+ try {
+ _document.fireEvent('on' + evt.eventType.toLowerCase(), evt);
+ } catch (e) {
+ // Do nothing
+ }
+ }
+ },
+
+ /**
+ * Wraps addEventListener to capture UI breadcrumbs
+ * @param evtName the event name (e.g. "click")
+ * @returns {Function}
+ * @private
+ */
+ _breadcrumbEventHandler: function(evtName) {
+ var self = this;
+ return function(evt) {
+ // reset keypress timeout; e.g. triggering a 'click' after
+ // a 'keypress' will reset the keypress debounce so that a new
+ // set of keypresses can be recorded
+ self._keypressTimeout = null;
+
+ // It's possible this handler might trigger multiple times for the same
+ // event (e.g. event propagation through node ancestors). Ignore if we've
+ // already captured the event.
+ if (self._lastCapturedEvent === evt) return;
+
+ self._lastCapturedEvent = evt;
+
+ // try/catch both:
+ // - accessing evt.target (see getsentry/raven-js#838, #768)
+ // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly
+ // can throw an exception in some circumstances.
+ var target;
+ try {
+ target = htmlTreeAsString(evt.target);
+ } catch (e) {
+ target = '';
+ }
+
+ self.captureBreadcrumb({
+ category: 'ui.' + evtName, // e.g. ui.click, ui.input
+ message: target
+ });
+ };
+ },
+
+ /**
+ * Wraps addEventListener to capture keypress UI events
+ * @returns {Function}
+ * @private
+ */
+ _keypressEventHandler: function() {
+ var self = this,
+ debounceDuration = 1000; // milliseconds
+
+ // TODO: if somehow user switches keypress target before
+ // debounce timeout is triggered, we will only capture
+ // a single breadcrumb from the FIRST target (acceptable?)
+ return function(evt) {
+ var target;
+ try {
+ target = evt.target;
+ } catch (e) {
+ // just accessing event properties can throw an exception in some rare circumstances
+ // see: https://github.com/getsentry/raven-js/issues/838
+ return;
+ }
+ var tagName = target && target.tagName;
+
+ // only consider keypress events on actual input elements
+ // this will disregard keypresses targeting body (e.g. tabbing
+ // through elements, hotkeys, etc)
+ if (
+ !tagName ||
+ (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && !target.isContentEditable)
+ )
+ return;
+
+ // record first keypress in a series, but ignore subsequent
+ // keypresses until debounce clears
+ var timeout = self._keypressTimeout;
+ if (!timeout) {
+ self._breadcrumbEventHandler('input')(evt);
+ }
+ clearTimeout(timeout);
+ self._keypressTimeout = setTimeout(function() {
+ self._keypressTimeout = null;
+ }, debounceDuration);
+ };
+ },
+
+ /**
+ * Captures a breadcrumb of type "navigation", normalizing input URLs
+ * @param to the originating URL
+ * @param from the target URL
+ * @private
+ */
+ _captureUrlChange: function(from, to) {
+ var parsedLoc = parseUrl(this._location.href);
+ var parsedTo = parseUrl(to);
+ var parsedFrom = parseUrl(from);
+
+ // because onpopstate only tells you the "new" (to) value of location.href, and
+ // not the previous (from) value, we need to track the value of the current URL
+ // state ourselves
+ this._lastHref = to;
+
+ // Use only the path component of the URL if the URL matches the current
+ // document (almost all the time when using pushState)
+ if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host)
+ to = parsedTo.relative;
+ if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host)
+ from = parsedFrom.relative;
+
+ this.captureBreadcrumb({
+ category: 'navigation',
+ data: {
+ to: to,
+ from: from
+ }
+ });
+ },
+
+ _patchFunctionToString: function() {
+ var self = this;
+ self._originalFunctionToString = Function.prototype.toString;
+ // eslint-disable-next-line no-extend-native
+ Function.prototype.toString = function() {
+ if (typeof this === 'function' && this.__raven__) {
+ return self._originalFunctionToString.apply(this.__orig__, arguments);
+ }
+ return self._originalFunctionToString.apply(this, arguments);
+ };
+ },
+
+ _unpatchFunctionToString: function() {
+ if (this._originalFunctionToString) {
+ // eslint-disable-next-line no-extend-native
+ Function.prototype.toString = this._originalFunctionToString;
+ }
+ },
+
+ /**
+ * Wrap timer functions and event targets to catch errors and provide
+ * better metadata.
+ */
+ _instrumentTryCatch: function() {
+ var self = this;
+
+ var wrappedBuiltIns = self._wrappedBuiltIns;
+
+ function wrapTimeFn(orig) {
+ return function(fn, t) {
+ // preserve arity
+ // Make a copy of the arguments to prevent deoptimization
+ // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments
+ var args = new Array(arguments.length);
+ for (var i = 0; i < args.length; ++i) {
+ args[i] = arguments[i];
+ }
+ var originalCallback = args[0];
+ if (isFunction(originalCallback)) {
+ args[0] = self.wrap(originalCallback);
+ }
+
+ // IE < 9 doesn't support .call/.apply on setInterval/setTimeout, but it
+ // also supports only two arguments and doesn't care what this is, so we
+ // can just call the original function directly.
+ if (orig.apply) {
+ return orig.apply(this, args);
+ } else {
+ return orig(args[0], args[1]);
+ }
+ };
+ }
+
+ var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;
+
+ function wrapEventTarget(global) {
+ var proto = _window[global] && _window[global].prototype;
+ if (proto && proto.hasOwnProperty && proto.hasOwnProperty('addEventListener')) {
+ fill(
+ proto,
+ 'addEventListener',
+ function(orig) {
+ return function(evtName, fn, capture, secure) {
+ // preserve arity
+ try {
+ if (fn && fn.handleEvent) {
+ fn.handleEvent = self.wrap(fn.handleEvent);
+ }
+ } catch (err) {
+ // can sometimes get 'Permission denied to access property "handle Event'
+ }
+
+ // More breadcrumb DOM capture ... done here and not in `_instrumentBreadcrumbs`
+ // so that we don't have more than one wrapper function
+ var before, clickHandler, keypressHandler;
+
+ if (
+ autoBreadcrumbs &&
+ autoBreadcrumbs.dom &&
+ (global === 'EventTarget' || global === 'Node')
+ ) {
+ // NOTE: generating multiple handlers per addEventListener invocation, should
+ // revisit and verify we can just use one (almost certainly)
+ clickHandler = self._breadcrumbEventHandler('click');
+ keypressHandler = self._keypressEventHandler();
+ before = function(evt) {
+ // need to intercept every DOM event in `before` argument, in case that
+ // same wrapped method is re-used for different events (e.g. mousemove THEN click)
+ // see #724
+ if (!evt) return;
+
+ var eventType;
+ try {
+ eventType = evt.type;
+ } catch (e) {
+ // just accessing event properties can throw an exception in some rare circumstances
+ // see: https://github.com/getsentry/raven-js/issues/838
+ return;
+ }
+ if (eventType === 'click') return clickHandler(evt);
+ else if (eventType === 'keypress') return keypressHandler(evt);
+ };
+ }
+ return orig.call(
+ this,
+ evtName,
+ self.wrap(fn, undefined, before),
+ capture,
+ secure
+ );
+ };
+ },
+ wrappedBuiltIns
+ );
+ fill(
+ proto,
+ 'removeEventListener',
+ function(orig) {
+ return function(evt, fn, capture, secure) {
+ try {
+ fn = fn && (fn.__raven_wrapper__ ? fn.__raven_wrapper__ : fn);
+ } catch (e) {
+ // ignore, accessing __raven_wrapper__ will throw in some Selenium environments
+ }
+ return orig.call(this, evt, fn, capture, secure);
+ };
+ },
+ wrappedBuiltIns
+ );
+ }
+ }
+
+ fill(_window, 'setTimeout', wrapTimeFn, wrappedBuiltIns);
+ fill(_window, 'setInterval', wrapTimeFn, wrappedBuiltIns);
+ if (_window.requestAnimationFrame) {
+ fill(
+ _window,
+ 'requestAnimationFrame',
+ function(orig) {
+ return function(cb) {
+ return orig(self.wrap(cb));
+ };
+ },
+ wrappedBuiltIns
+ );
+ }
+
+ // event targets borrowed from bugsnag-js:
+ // https://github.com/bugsnag/bugsnag-js/blob/master/src/bugsnag.js#L666
+ var eventTargets = [
+ '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'
+ ];
+ for (var i = 0; i < eventTargets.length; i++) {
+ wrapEventTarget(eventTargets[i]);
+ }
+ },
+
+ /**
+ * Instrument browser built-ins w/ breadcrumb capturing
+ * - XMLHttpRequests
+ * - DOM interactions (click/typing)
+ * - window.location changes
+ * - console
+ *
+ * Can be disabled or individually configured via the `autoBreadcrumbs` config option
+ */
+ _instrumentBreadcrumbs: function() {
+ var self = this;
+ var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;
+
+ var wrappedBuiltIns = self._wrappedBuiltIns;
+
+ function wrapProp(prop, xhr) {
+ if (prop in xhr && isFunction(xhr[prop])) {
+ fill(xhr, prop, function(orig) {
+ return self.wrap(orig);
+ }); // intentionally don't track filled methods on XHR instances
+ }
+ }
+
+ if (autoBreadcrumbs.xhr && 'XMLHttpRequest' in _window) {
+ var xhrproto = _window.XMLHttpRequest && _window.XMLHttpRequest.prototype;
+ fill(
+ xhrproto,
+ 'open',
+ function(origOpen) {
+ return function(method, url) {
+ // preserve arity
+
+ // if Sentry key appears in URL, don't capture
+ if (isString(url) && url.indexOf(self._globalKey) === -1) {
+ this.__raven_xhr = {
+ method: method,
+ url: url,
+ status_code: null
+ };
+ }
+
+ return origOpen.apply(this, arguments);
+ };
+ },
+ wrappedBuiltIns
+ );
+
+ fill(
+ xhrproto,
+ 'send',
+ function(origSend) {
+ return function() {
+ // preserve arity
+ var xhr = this;
+
+ function onreadystatechangeHandler() {
+ if (xhr.__raven_xhr && xhr.readyState === 4) {
+ try {
+ // touching statusCode in some platforms throws
+ // an exception
+ xhr.__raven_xhr.status_code = xhr.status;
+ } catch (e) {
+ /* do nothing */
+ }
+
+ self.captureBreadcrumb({
+ type: 'http',
+ category: 'xhr',
+ data: xhr.__raven_xhr
+ });
+ }
+ }
+
+ var props = ['onload', 'onerror', 'onprogress'];
+ for (var j = 0; j < props.length; j++) {
+ wrapProp(props[j], xhr);
+ }
+
+ if ('onreadystatechange' in xhr && isFunction(xhr.onreadystatechange)) {
+ fill(
+ xhr,
+ 'onreadystatechange',
+ function(orig) {
+ return self.wrap(orig, undefined, onreadystatechangeHandler);
+ } /* intentionally don't track this instrumentation */
+ );
+ } else {
+ // if onreadystatechange wasn't actually set by the page on this xhr, we
+ // are free to set our own and capture the breadcrumb
+ xhr.onreadystatechange = onreadystatechangeHandler;
+ }
+
+ return origSend.apply(this, arguments);
+ };
+ },
+ wrappedBuiltIns
+ );
+ }
+
+ if (autoBreadcrumbs.xhr && supportsFetch()) {
+ fill(
+ _window,
+ 'fetch',
+ function(origFetch) {
+ return function() {
+ // preserve arity
+ // Make a copy of the arguments to prevent deoptimization
+ // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments
+ var args = new Array(arguments.length);
+ for (var i = 0; i < args.length; ++i) {
+ args[i] = arguments[i];
+ }
+
+ var fetchInput = args[0];
+ var method = 'GET';
+ var url;
+
+ if (typeof fetchInput === 'string') {
+ url = fetchInput;
+ } else if ('Request' in _window && fetchInput instanceof _window.Request) {
+ url = fetchInput.url;
+ if (fetchInput.method) {
+ method = fetchInput.method;
+ }
+ } else {
+ url = '' + fetchInput;
+ }
+
+ // if Sentry key appears in URL, don't capture, as it's our own request
+ if (url.indexOf(self._globalKey) !== -1) {
+ return origFetch.apply(this, args);
+ }
+
+ if (args[1] && args[1].method) {
+ method = args[1].method;
+ }
+
+ var fetchData = {
+ method: method,
+ url: url,
+ status_code: null
+ };
+
+ return origFetch
+ .apply(this, args)
+ .then(function(response) {
+ fetchData.status_code = response.status;
+
+ self.captureBreadcrumb({
+ type: 'http',
+ category: 'fetch',
+ data: fetchData
+ });
+
+ return response;
+ })
+ ['catch'](function(err) {
+ // if there is an error performing the request
+ self.captureBreadcrumb({
+ type: 'http',
+ category: 'fetch',
+ data: fetchData,
+ level: 'error'
+ });
+
+ throw err;
+ });
+ };
+ },
+ wrappedBuiltIns
+ );
+ }
+
+ // Capture breadcrumbs from any click that is unhandled / bubbled up all the way
+ // to the document. Do this before we instrument addEventListener.
+ if (autoBreadcrumbs.dom && this._hasDocument) {
+ if (_document.addEventListener) {
+ _document.addEventListener('click', self._breadcrumbEventHandler('click'), false);
+ _document.addEventListener('keypress', self._keypressEventHandler(), false);
+ } else if (_document.attachEvent) {
+ // IE8 Compatibility
+ _document.attachEvent('onclick', self._breadcrumbEventHandler('click'));
+ _document.attachEvent('onkeypress', self._keypressEventHandler());
+ }
+ }
+
+ // record navigation (URL) changes
+ // NOTE: in Chrome App environment, touching history.pushState, *even inside
+ // a try/catch block*, will cause Chrome to output an error to console.error
+ // borrowed from: https://github.com/angular/angular.js/pull/13945/files
+ var chrome = _window.chrome;
+ var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime;
+ var hasPushAndReplaceState =
+ !isChromePackagedApp &&
+ _window.history &&
+ _window.history.pushState &&
+ _window.history.replaceState;
+ if (autoBreadcrumbs.location && hasPushAndReplaceState) {
+ // TODO: remove onpopstate handler on uninstall()
+ var oldOnPopState = _window.onpopstate;
+ _window.onpopstate = function() {
+ var currentHref = self._location.href;
+ self._captureUrlChange(self._lastHref, currentHref);
+
+ if (oldOnPopState) {
+ return oldOnPopState.apply(this, arguments);
+ }
+ };
+
+ var historyReplacementFunction = function(origHistFunction) {
+ // note history.pushState.length is 0; intentionally not declaring
+ // params to preserve 0 arity
+ return function(/* state, title, url */) {
+ var url = arguments.length > 2 ? arguments[2] : undefined;
+
+ // url argument is optional
+ if (url) {
+ // coerce to string (this is what pushState does)
+ self._captureUrlChange(self._lastHref, url + '');
+ }
+
+ return origHistFunction.apply(this, arguments);
+ };
+ };
+
+ fill(_window.history, 'pushState', historyReplacementFunction, wrappedBuiltIns);
+ fill(_window.history, 'replaceState', historyReplacementFunction, wrappedBuiltIns);
+ }
+
+ if (autoBreadcrumbs.console && 'console' in _window && console.log) {
+ // console
+ var consoleMethodCallback = function(msg, data) {
+ self.captureBreadcrumb({
+ message: msg,
+ level: data.level,
+ category: 'console'
+ });
+ };
+
+ each(['debug', 'info', 'warn', 'error', 'log'], function(_, level) {
+ wrapConsoleMethod(console, level, consoleMethodCallback);
+ });
+ }
+ },
+
+ _restoreBuiltIns: function() {
+ // restore any wrapped builtins
+ var builtin;
+ while (this._wrappedBuiltIns.length) {
+ builtin = this._wrappedBuiltIns.shift();
+
+ var obj = builtin[0],
+ name = builtin[1],
+ orig = builtin[2];
+
+ obj[name] = orig;
+ }
+ },
+
+ _restoreConsole: function() {
+ // eslint-disable-next-line guard-for-in
+ for (var method in this._originalConsoleMethods) {
+ this._originalConsole[method] = this._originalConsoleMethods[method];
+ }
+ },
+
+ _drainPlugins: function() {
+ var self = this;
+
+ // FIX ME TODO
+ each(this._plugins, function(_, plugin) {
+ var installer = plugin[0];
+ var args = plugin[1];
+ installer.apply(self, [self].concat(args));
+ });
+ },
+
+ _parseDSN: function(str) {
+ var m = dsnPattern.exec(str),
+ dsn = {},
+ i = 7;
+
+ try {
+ while (i--) dsn[dsnKeys[i]] = m[i] || '';
+ } catch (e) {
+ throw new RavenConfigError('Invalid DSN: ' + str);
+ }
+
+ if (dsn.pass && !this._globalOptions.allowSecretKey) {
+ throw new RavenConfigError(
+ 'Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key'
+ );
+ }
+
+ return dsn;
+ },
+
+ _getGlobalServer: function(uri) {
+ // assemble the endpoint from the uri pieces
+ var globalServer = '//' + uri.host + (uri.port ? ':' + uri.port : '');
+
+ if (uri.protocol) {
+ globalServer = uri.protocol + ':' + globalServer;
+ }
+ return globalServer;
+ },
+
+ _handleOnErrorStackInfo: function() {
+ // if we are intentionally ignoring errors via onerror, bail out
+ if (!this._ignoreOnError) {
+ this._handleStackInfo.apply(this, arguments);
+ }
+ },
+
+ _handleStackInfo: function(stackInfo, options) {
+ var frames = this._prepareFrames(stackInfo, options);
+
+ this._triggerEvent('handle', {
+ stackInfo: stackInfo,
+ options: options
+ });
+
+ this._processException(
+ stackInfo.name,
+ stackInfo.message,
+ stackInfo.url,
+ stackInfo.lineno,
+ frames,
+ options
+ );
+ },
+
+ _prepareFrames: function(stackInfo, options) {
+ var self = this;
+ var frames = [];
+ if (stackInfo.stack && stackInfo.stack.length) {
+ each(stackInfo.stack, function(i, stack) {
+ var frame = self._normalizeFrame(stack, stackInfo.url);
+ if (frame) {
+ frames.push(frame);
+ }
+ });
+
+ // e.g. frames captured via captureMessage throw
+ if (options && options.trimHeadFrames) {
+ for (var j = 0; j < options.trimHeadFrames && j < frames.length; j++) {
+ frames[j].in_app = false;
+ }
+ }
+ }
+ frames = frames.slice(0, this._globalOptions.stackTraceLimit);
+ return frames;
+ },
+
+ _normalizeFrame: function(frame, stackInfoUrl) {
+ // normalize the frames data
+ var normalized = {
+ filename: frame.url,
+ lineno: frame.line,
+ colno: frame.column,
+ function: frame.func || '?'
+ };
+
+ // Case when we don't have any information about the error
+ // E.g. throwing a string or raw object, instead of an `Error` in Firefox
+ // Generating synthetic error doesn't add any value here
+ //
+ // We should probably somehow let a user know that they should fix their code
+ if (!frame.url) {
+ normalized.filename = stackInfoUrl; // fallback to whole stacks url from onerror handler
+ }
+
+ normalized.in_app = !// determine if an exception came from outside of our app
+ // first we check the global includePaths list.
+ (
+ (!!this._globalOptions.includePaths.test &&
+ !this._globalOptions.includePaths.test(normalized.filename)) ||
+ // Now we check for fun, if the function name is Raven or TraceKit
+ /(Raven|TraceKit)\./.test(normalized['function']) ||
+ // finally, we do a last ditch effort and check for raven.min.js
+ /raven\.(min\.)?js$/.test(normalized.filename)
+ );
+
+ return normalized;
+ },
+
+ _processException: function(type, message, fileurl, lineno, frames, options) {
+ var prefixedMessage = (type ? type + ': ' : '') + (message || '');
+ if (
+ !!this._globalOptions.ignoreErrors.test &&
+ (this._globalOptions.ignoreErrors.test(message) ||
+ this._globalOptions.ignoreErrors.test(prefixedMessage))
+ ) {
+ return;
+ }
+
+ var stacktrace;
+
+ if (frames && frames.length) {
+ fileurl = frames[0].filename || fileurl;
+ // Sentry expects frames oldest to newest
+ // and JS sends them as newest to oldest
+ frames.reverse();
+ stacktrace = {frames: frames};
+ } else if (fileurl) {
+ stacktrace = {
+ frames: [
+ {
+ filename: fileurl,
+ lineno: lineno,
+ in_app: true
+ }
+ ]
+ };
+ }
+
+ if (
+ !!this._globalOptions.ignoreUrls.test &&
+ this._globalOptions.ignoreUrls.test(fileurl)
+ ) {
+ return;
+ }
+
+ if (
+ !!this._globalOptions.whitelistUrls.test &&
+ !this._globalOptions.whitelistUrls.test(fileurl)
+ ) {
+ return;
+ }
+
+ var data = objectMerge(
+ {
+ // sentry.interfaces.Exception
+ exception: {
+ values: [
+ {
+ type: type,
+ value: message,
+ stacktrace: stacktrace
+ }
+ ]
+ },
+ transaction: fileurl
+ },
+ options
+ );
+
+ // Fire away!
+ this._send(data);
+ },
+
+ _trimPacket: function(data) {
+ // For now, we only want to truncate the two different messages
+ // but this could/should be expanded to just trim everything
+ var max = this._globalOptions.maxMessageLength;
+ if (data.message) {
+ data.message = truncate(data.message, max);
+ }
+ if (data.exception) {
+ var exception = data.exception.values[0];
+ exception.value = truncate(exception.value, max);
+ }
+
+ var request = data.request;
+ if (request) {
+ if (request.url) {
+ request.url = truncate(request.url, this._globalOptions.maxUrlLength);
+ }
+ if (request.Referer) {
+ request.Referer = truncate(request.Referer, this._globalOptions.maxUrlLength);
+ }
+ }
+
+ if (data.breadcrumbs && data.breadcrumbs.values)
+ this._trimBreadcrumbs(data.breadcrumbs);
+
+ return data;
+ },
+
+ /**
+ * Truncate breadcrumb values (right now just URLs)
+ */
+ _trimBreadcrumbs: function(breadcrumbs) {
+ // known breadcrumb properties with urls
+ // TODO: also consider arbitrary prop values that start with (https?)?://
+ var urlProps = ['to', 'from', 'url'],
+ urlProp,
+ crumb,
+ data;
+
+ for (var i = 0; i < breadcrumbs.values.length; ++i) {
+ crumb = breadcrumbs.values[i];
+ if (
+ !crumb.hasOwnProperty('data') ||
+ !isObject(crumb.data) ||
+ objectFrozen(crumb.data)
+ )
+ continue;
+
+ data = objectMerge({}, crumb.data);
+ for (var j = 0; j < urlProps.length; ++j) {
+ urlProp = urlProps[j];
+ if (data.hasOwnProperty(urlProp) && data[urlProp]) {
+ data[urlProp] = truncate(data[urlProp], this._globalOptions.maxUrlLength);
+ }
+ }
+ breadcrumbs.values[i].data = data;
+ }
+ },
+
+ _getHttpData: function() {
+ if (!this._hasNavigator && !this._hasDocument) return;
+ var httpData = {};
+
+ if (this._hasNavigator && _navigator.userAgent) {
+ httpData.headers = {
+ 'User-Agent': _navigator.userAgent
+ };
+ }
+
+ // Check in `window` instead of `document`, as we may be in ServiceWorker environment
+ if (_window.location && _window.location.href) {
+ httpData.url = _window.location.href;
+ }
+
+ if (this._hasDocument && _document.referrer) {
+ if (!httpData.headers) httpData.headers = {};
+ httpData.headers.Referer = _document.referrer;
+ }
+
+ return httpData;
+ },
+
+ _resetBackoff: function() {
+ this._backoffDuration = 0;
+ this._backoffStart = null;
+ },
+
+ _shouldBackoff: function() {
+ return this._backoffDuration && now() - this._backoffStart < this._backoffDuration;
+ },
+
+ /**
+ * Returns true if the in-process data payload matches the signature
+ * of the previously-sent data
+ *
+ * NOTE: This has to be done at this level because TraceKit can generate
+ * data from window.onerror WITHOUT an exception object (IE8, IE9,
+ * other old browsers). This can take the form of an "exception"
+ * data object with a single frame (derived from the onerror args).
+ */
+ _isRepeatData: function(current) {
+ var last = this._lastData;
+
+ if (
+ !last ||
+ current.message !== last.message || // defined for captureMessage
+ current.transaction !== last.transaction // defined for captureException/onerror
+ )
+ return false;
+
+ // Stacktrace interface (i.e. from captureMessage)
+ if (current.stacktrace || last.stacktrace) {
+ return isSameStacktrace(current.stacktrace, last.stacktrace);
+ } else if (current.exception || last.exception) {
+ // Exception interface (i.e. from captureException/onerror)
+ return isSameException(current.exception, last.exception);
+ }
+
+ return true;
+ },
+
+ _setBackoffState: function(request) {
+ // If we are already in a backoff state, don't change anything
+ if (this._shouldBackoff()) {
+ return;
+ }
+
+ var status = request.status;
+
+ // 400 - project_id doesn't exist or some other fatal
+ // 401 - invalid/revoked dsn
+ // 429 - too many requests
+ if (!(status === 400 || status === 401 || status === 429)) return;
+
+ var retry;
+ try {
+ // If Retry-After is not in Access-Control-Expose-Headers, most
+ // browsers will throw an exception trying to access it
+ if (supportsFetch()) {
+ retry = request.headers.get('Retry-After');
+ } else {
+ retry = request.getResponseHeader('Retry-After');
+ }
+
+ // Retry-After is returned in seconds
+ retry = parseInt(retry, 10) * 1000;
+ } catch (e) {
+ /* eslint no-empty:0 */
+ }
+
+ this._backoffDuration = retry
+ ? // If Sentry server returned a Retry-After value, use it
+ retry
+ : // Otherwise, double the last backoff duration (starts at 1 sec)
+ this._backoffDuration * 2 || 1000;
+
+ this._backoffStart = now();
+ },
+
+ _send: function(data) {
+ var globalOptions = this._globalOptions;
+
+ var baseData = {
+ project: this._globalProject,
+ logger: globalOptions.logger,
+ platform: 'javascript'
+ },
+ httpData = this._getHttpData();
+
+ if (httpData) {
+ baseData.request = httpData;
+ }
+
+ // HACK: delete `trimHeadFrames` to prevent from appearing in outbound payload
+ if (data.trimHeadFrames) delete data.trimHeadFrames;
+
+ data = objectMerge(baseData, data);
+
+ // Merge in the tags and extra separately since objectMerge doesn't handle a deep merge
+ data.tags = objectMerge(objectMerge({}, this._globalContext.tags), data.tags);
+ data.extra = objectMerge(objectMerge({}, this._globalContext.extra), data.extra);
+
+ // Send along our own collected metadata with extra
+ data.extra['session:duration'] = now() - this._startTime;
+
+ if (this._breadcrumbs && this._breadcrumbs.length > 0) {
+ // intentionally make shallow copy so that additions
+ // to breadcrumbs aren't accidentally sent in this request
+ data.breadcrumbs = {
+ values: [].slice.call(this._breadcrumbs, 0)
+ };
+ }
+
+ if (this._globalContext.user) {
+ // sentry.interfaces.User
+ data.user = this._globalContext.user;
+ }
+
+ // Include the environment if it's defined in globalOptions
+ if (globalOptions.environment) data.environment = globalOptions.environment;
+
+ // Include the release if it's defined in globalOptions
+ if (globalOptions.release) data.release = globalOptions.release;
+
+ // Include server_name if it's defined in globalOptions
+ if (globalOptions.serverName) data.server_name = globalOptions.serverName;
+
+ data = this._sanitizeData(data);
+
+ // Cleanup empty properties before sending them to the server
+ Object.keys(data).forEach(function(key) {
+ if (data[key] == null || data[key] === '' || isEmptyObject(data[key])) {
+ delete data[key];
+ }
+ });
+
+ if (isFunction(globalOptions.dataCallback)) {
+ data = globalOptions.dataCallback(data) || data;
+ }
+
+ // Why??????????
+ if (!data || isEmptyObject(data)) {
+ return;
+ }
+
+ // Check if the request should be filtered or not
+ if (
+ isFunction(globalOptions.shouldSendCallback) &&
+ !globalOptions.shouldSendCallback(data)
+ ) {
+ return;
+ }
+
+ // Backoff state: Sentry server previously responded w/ an error (e.g. 429 - too many requests),
+ // so drop requests until "cool-off" period has elapsed.
+ if (this._shouldBackoff()) {
+ this._logDebug('warn', 'Raven dropped error due to backoff: ', data);
+ return;
+ }
+
+ if (typeof globalOptions.sampleRate === 'number') {
+ if (Math.random() < globalOptions.sampleRate) {
+ this._sendProcessedPayload(data);
+ }
+ } else {
+ this._sendProcessedPayload(data);
+ }
+ },
+
+ _sanitizeData: function(data) {
+ return sanitize(data, this._globalOptions.sanitizeKeys);
+ },
+
+ _getUuid: function() {
+ return uuid4();
+ },
+
+ _sendProcessedPayload: function(data, callback) {
+ var self = this;
+ var globalOptions = this._globalOptions;
+
+ if (!this.isSetup()) return;
+
+ // Try and clean up the packet before sending by truncating long values
+ data = this._trimPacket(data);
+
+ // ideally duplicate error testing should occur *before* dataCallback/shouldSendCallback,
+ // but this would require copying an un-truncated copy of the data packet, which can be
+ // arbitrarily deep (extra_data) -- could be worthwhile? will revisit
+ if (!this._globalOptions.allowDuplicates && this._isRepeatData(data)) {
+ this._logDebug('warn', 'Raven dropped repeat event: ', data);
+ return;
+ }
+
+ // Send along an event_id if not explicitly passed.
+ // This event_id can be used to reference the error within Sentry itself.
+ // Set lastEventId after we know the error should actually be sent
+ this._lastEventId = data.event_id || (data.event_id = this._getUuid());
+
+ // Store outbound payload after trim
+ this._lastData = data;
+
+ this._logDebug('debug', 'Raven about to send:', data);
+
+ var auth = {
+ sentry_version: '7',
+ sentry_client: 'raven-js/' + this.VERSION,
+ sentry_key: this._globalKey
+ };
+
+ if (this._globalSecret) {
+ auth.sentry_secret = this._globalSecret;
+ }
+
+ var exception = data.exception && data.exception.values[0];
+
+ // only capture 'sentry' breadcrumb is autoBreadcrumbs is truthy
+ if (
+ this._globalOptions.autoBreadcrumbs &&
+ this._globalOptions.autoBreadcrumbs.sentry
+ ) {
+ this.captureBreadcrumb({
+ category: 'sentry',
+ message: exception
+ ? (exception.type ? exception.type + ': ' : '') + exception.value
+ : data.message,
+ event_id: data.event_id,
+ level: data.level || 'error' // presume error unless specified
+ });
+ }
+
+ var url = this._globalEndpoint;
+ (globalOptions.transport || this._makeRequest).call(this, {
+ url: url,
+ auth: auth,
+ data: data,
+ options: globalOptions,
+ onSuccess: function success() {
+ self._resetBackoff();
+
+ self._triggerEvent('success', {
+ data: data,
+ src: url
+ });
+ callback && callback();
+ },
+ onError: function failure(error) {
+ self._logDebug('error', 'Raven transport failed to send: ', error);
+
+ if (error.request) {
+ self._setBackoffState(error.request);
+ }
+
+ self._triggerEvent('failure', {
+ data: data,
+ src: url
+ });
+ error = error || new Error('Raven send failed (no additional details provided)');
+ callback && callback(error);
+ }
+ });
+ },
+
+ _makeRequest: function(opts) {
+ // Auth is intentionally sent as part of query string (NOT as custom HTTP header) to avoid preflight CORS requests
+ var url = opts.url + '?' + urlencode(opts.auth);
+
+ var evaluatedHeaders = null;
+ var evaluatedFetchParameters = {};
+
+ if (opts.options.headers) {
+ evaluatedHeaders = this._evaluateHash(opts.options.headers);
+ }
+
+ if (opts.options.fetchParameters) {
+ evaluatedFetchParameters = this._evaluateHash(opts.options.fetchParameters);
+ }
+
+ if (supportsFetch()) {
+ evaluatedFetchParameters.body = stringify(opts.data);
+
+ var defaultFetchOptions = objectMerge({}, this._fetchDefaults);
+ var fetchOptions = objectMerge(defaultFetchOptions, evaluatedFetchParameters);
+
+ if (evaluatedHeaders) {
+ fetchOptions.headers = evaluatedHeaders;
+ }
+
+ return _window
+ .fetch(url, fetchOptions)
+ .then(function(response) {
+ if (response.ok) {
+ opts.onSuccess && opts.onSuccess();
+ } else {
+ var error = new Error('Sentry error code: ' + response.status);
+ // It's called request only to keep compatibility with XHR interface
+ // and not add more redundant checks in setBackoffState method
+ error.request = response;
+ opts.onError && opts.onError(error);
+ }
+ })
+ ['catch'](function() {
+ opts.onError &&
+ opts.onError(new Error('Sentry error code: network unavailable'));
+ });
+ }
+
+ var request = _window.XMLHttpRequest && new _window.XMLHttpRequest();
+ if (!request) return;
+
+ // if browser doesn't support CORS (e.g. IE7), we are out of luck
+ var hasCORS = 'withCredentials' in request || typeof XDomainRequest !== 'undefined';
+
+ if (!hasCORS) return;
+
+ if ('withCredentials' in request) {
+ request.onreadystatechange = function() {
+ if (request.readyState !== 4) {
+ return;
+ } else if (request.status === 200) {
+ opts.onSuccess && opts.onSuccess();
+ } else if (opts.onError) {
+ var err = new Error('Sentry error code: ' + request.status);
+ err.request = request;
+ opts.onError(err);
+ }
+ };
+ } else {
+ request = new XDomainRequest();
+ // xdomainrequest cannot go http -> https (or vice versa),
+ // so always use protocol relative
+ url = url.replace(/^https?:/, '');
+
+ // onreadystatechange not supported by XDomainRequest
+ if (opts.onSuccess) {
+ request.onload = opts.onSuccess;
+ }
+ if (opts.onError) {
+ request.onerror = function() {
+ var err = new Error('Sentry error code: XDomainRequest');
+ err.request = request;
+ opts.onError(err);
+ };
+ }
+ }
+
+ request.open('POST', url);
+
+ if (evaluatedHeaders) {
+ each(evaluatedHeaders, function(key, value) {
+ request.setRequestHeader(key, value);
+ });
+ }
+
+ request.send(stringify(opts.data));
+ },
+
+ _evaluateHash: function(hash) {
+ var evaluated = {};
+
+ for (var key in hash) {
+ if (hash.hasOwnProperty(key)) {
+ var value = hash[key];
+ evaluated[key] = typeof value === 'function' ? value() : value;
+ }
+ }
+
+ return evaluated;
+ },
+
+ _logDebug: function(level) {
+ // We allow `Raven.debug` and `Raven.config(DSN, { debug: true })` to not make backward incompatible API change
+ if (
+ this._originalConsoleMethods[level] &&
+ (this.debug || this._globalOptions.debug)
+ ) {
+ // In IE<10 console methods do not have their own 'apply' method
+ Function.prototype.apply.call(
+ this._originalConsoleMethods[level],
+ this._originalConsole,
+ [].slice.call(arguments, 1)
+ );
+ }
+ },
+
+ _mergeContext: function(key, context) {
+ if (isUndefined(context)) {
+ delete this._globalContext[key];
+ } else {
+ this._globalContext[key] = objectMerge(this._globalContext[key] || {}, context);
+ }
+ }
+};
+
+// Deprecations
+Raven.prototype.setUser = Raven.prototype.setUserContext;
+Raven.prototype.setReleaseContext = Raven.prototype.setRelease;
+
+module.exports = Raven;
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"10":10,"11":11,"12":12,"5":5,"6":6,"9":9}],8:[function(_dereq_,module,exports){
+(function (global){
+/**
+ * Enforces a single instance of the Raven client, and the
+ * main entry point for Raven. If you are a consumer of the
+ * Raven library, you SHOULD load this file (vs raven.js).
+ **/
+
+var RavenConstructor = _dereq_(7);
+
+// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)
+var _window =
+ typeof window !== 'undefined'
+ ? window
+ : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
+var _Raven = _window.Raven;
+
+var Raven = new RavenConstructor();
+
+/*
+ * Allow multiple versions of Raven to be installed.
+ * Strip Raven from the global context and returns the instance.
+ *
+ * @return {Raven}
+ */
+Raven.noConflict = function() {
+ _window.Raven = _Raven;
+ return Raven;
+};
+
+Raven.afterLoad();
+
+module.exports = Raven;
+
+/**
+ * DISCLAIMER:
+ *
+ * Expose `Client` constructor for cases where user want to track multiple "sub-applications" in one larger app.
+ * It's not meant to be used by a wide audience, so pleaaase make sure that you know what you're doing before using it.
+ * Accidentally calling `install` multiple times, may result in an unexpected behavior that's very hard to debug.
+ *
+ * It's called `Client' to be in-line with Raven Node implementation.
+ *
+ * HOWTO:
+ *
+ * import Raven from 'raven-js';
+ *
+ * const someAppReporter = new Raven.Client();
+ * const someOtherAppReporter = new Raven.Client();
+ *
+ * someAppReporter.config('__DSN__', {
+ * ...config goes here
+ * });
+ *
+ * someOtherAppReporter.config('__OTHER_DSN__', {
+ * ...config goes here
+ * });
+ *
+ * someAppReporter.captureMessage(...);
+ * someAppReporter.captureException(...);
+ * someAppReporter.captureBreadcrumb(...);
+ *
+ * someOtherAppReporter.captureMessage(...);
+ * someOtherAppReporter.captureException(...);
+ * someOtherAppReporter.captureBreadcrumb(...);
+ *
+ * It should "just work".
+ */
+module.exports.Client = RavenConstructor;
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"7":7}],9:[function(_dereq_,module,exports){
+(function (global){
+var stringify = _dereq_(11);
+
+var _window =
+ typeof window !== 'undefined'
+ ? window
+ : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
+
+function isObject(what) {
+ return typeof what === 'object' && what !== null;
+}
+
+// Yanked from https://git.io/vS8DV re-used under CC0
+// with some tiny modifications
+function isError(value) {
+ switch (Object.prototype.toString.call(value)) {
+ case '[object Error]':
+ return true;
+ case '[object Exception]':
+ return true;
+ case '[object DOMException]':
+ return true;
+ default:
+ return value instanceof Error;
+ }
+}
+
+function isErrorEvent(value) {
+ return Object.prototype.toString.call(value) === '[object ErrorEvent]';
+}
+
+function isDOMError(value) {
+ return Object.prototype.toString.call(value) === '[object DOMError]';
+}
+
+function isDOMException(value) {
+ return Object.prototype.toString.call(value) === '[object DOMException]';
+}
+
+function isUndefined(what) {
+ return what === void 0;
+}
+
+function isFunction(what) {
+ return typeof what === 'function';
+}
+
+function isPlainObject(what) {
+ return Object.prototype.toString.call(what) === '[object Object]';
+}
+
+function isString(what) {
+ return Object.prototype.toString.call(what) === '[object String]';
+}
+
+function isArray(what) {
+ return Object.prototype.toString.call(what) === '[object Array]';
+}
+
+function isEmptyObject(what) {
+ if (!isPlainObject(what)) return false;
+
+ for (var _ in what) {
+ if (what.hasOwnProperty(_)) {
+ return false;
+ }
+ }
+ return true;
+}
+
+function supportsErrorEvent() {
+ try {
+ new ErrorEvent(''); // eslint-disable-line no-new
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+function supportsDOMError() {
+ try {
+ new DOMError(''); // eslint-disable-line no-new
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+function supportsDOMException() {
+ try {
+ new DOMException(''); // eslint-disable-line no-new
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+function supportsFetch() {
+ if (!('fetch' in _window)) return false;
+
+ try {
+ new Headers(); // eslint-disable-line no-new
+ new Request(''); // eslint-disable-line no-new
+ new Response(); // eslint-disable-line no-new
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+// Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default
+// https://caniuse.com/#feat=referrer-policy
+// It doesn't. And it throw exception instead of ignoring this parameter...
+// REF: https://github.com/getsentry/raven-js/issues/1233
+function supportsReferrerPolicy() {
+ if (!supportsFetch()) return false;
+
+ try {
+ // eslint-disable-next-line no-new
+ new Request('pickleRick', {
+ referrerPolicy: 'origin'
+ });
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+function supportsPromiseRejectionEvent() {
+ return typeof PromiseRejectionEvent === 'function';
+}
+
+function wrappedCallback(callback) {
+ function dataCallback(data, original) {
+ var normalizedData = callback(data) || data;
+ if (original) {
+ return original(normalizedData) || normalizedData;
+ }
+ return normalizedData;
+ }
+
+ return dataCallback;
+}
+
+function each(obj, callback) {
+ var i, j;
+
+ if (isUndefined(obj.length)) {
+ for (i in obj) {
+ if (hasKey(obj, i)) {
+ callback.call(null, i, obj[i]);
+ }
+ }
+ } else {
+ j = obj.length;
+ if (j) {
+ for (i = 0; i < j; i++) {
+ callback.call(null, i, obj[i]);
+ }
+ }
+ }
+}
+
+function objectMerge(obj1, obj2) {
+ if (!obj2) {
+ return obj1;
+ }
+ each(obj2, function(key, value) {
+ obj1[key] = value;
+ });
+ return obj1;
+}
+
+/**
+ * This function is only used for react-native.
+ * react-native freezes object that have already been sent over the
+ * js bridge. We need this function in order to check if the object is frozen.
+ * So it's ok that objectFrozen returns false if Object.isFrozen is not
+ * supported because it's not relevant for other "platforms". See related issue:
+ * https://github.com/getsentry/react-native-sentry/issues/57
+ */
+function objectFrozen(obj) {
+ if (!Object.isFrozen) {
+ return false;
+ }
+ return Object.isFrozen(obj);
+}
+
+function truncate(str, max) {
+ if (typeof max !== 'number') {
+ throw new Error('2nd argument to `truncate` function should be a number');
+ }
+ if (typeof str !== 'string' || max === 0) {
+ return str;
+ }
+ return str.length <= max ? str : str.substr(0, max) + '\u2026';
+}
+
+/**
+ * hasKey, a better form of hasOwnProperty
+ * Example: hasKey(MainHostObject, property) === true/false
+ *
+ * @param {Object} host object to check property
+ * @param {string} key to check
+ */
+function hasKey(object, key) {
+ return Object.prototype.hasOwnProperty.call(object, key);
+}
+
+function joinRegExp(patterns) {
+ // Combine an array of regular expressions and strings into one large regexp
+ // Be mad.
+ var sources = [],
+ i = 0,
+ len = patterns.length,
+ pattern;
+
+ for (; i < len; i++) {
+ pattern = patterns[i];
+ if (isString(pattern)) {
+ // If it's a string, we need to escape it
+ // Taken from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
+ sources.push(pattern.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, '\\$1'));
+ } else if (pattern && pattern.source) {
+ // If it's a regexp already, we want to extract the source
+ sources.push(pattern.source);
+ }
+ // Intentionally skip other cases
+ }
+ return new RegExp(sources.join('|'), 'i');
+}
+
+function urlencode(o) {
+ var pairs = [];
+ each(o, function(key, value) {
+ pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));
+ });
+ return pairs.join('&');
+}
+
+// borrowed from https://tools.ietf.org/html/rfc3986#appendix-B
+// intentionally using regex and not href parsing trick because React Native and other
+// environments where DOM might not be available
+function parseUrl(url) {
+ if (typeof url !== 'string') return {};
+ var match = url.match(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/);
+
+ // coerce to undefined values to empty string so we don't get 'undefined'
+ var query = match[6] || '';
+ var fragment = match[8] || '';
+ return {
+ protocol: match[2],
+ host: match[4],
+ path: match[5],
+ relative: match[5] + query + fragment // everything minus origin
+ };
+}
+function uuid4() {
+ var crypto = _window.crypto || _window.msCrypto;
+
+ if (!isUndefined(crypto) && crypto.getRandomValues) {
+ // Use window.crypto API if available
+ // eslint-disable-next-line no-undef
+ var arr = new Uint16Array(8);
+ crypto.getRandomValues(arr);
+
+ // set 4 in byte 7
+ arr[3] = (arr[3] & 0xfff) | 0x4000;
+ // set 2 most significant bits of byte 9 to '10'
+ arr[4] = (arr[4] & 0x3fff) | 0x8000;
+
+ var pad = function(num) {
+ var v = num.toString(16);
+ while (v.length < 4) {
+ v = '0' + v;
+ }
+ return v;
+ };
+
+ return (
+ pad(arr[0]) +
+ pad(arr[1]) +
+ pad(arr[2]) +
+ pad(arr[3]) +
+ pad(arr[4]) +
+ pad(arr[5]) +
+ pad(arr[6]) +
+ pad(arr[7])
+ );
+ } else {
+ // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523
+ return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
+ var r = (Math.random() * 16) | 0,
+ v = c === 'x' ? r : (r & 0x3) | 0x8;
+ return v.toString(16);
+ });
+ }
+}
+
+/**
+ * Given a child DOM element, returns a query-selector statement describing that
+ * and its ancestors
+ * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]
+ * @param elem
+ * @returns {string}
+ */
+function htmlTreeAsString(elem) {
+ /* eslint no-extra-parens:0*/
+ var MAX_TRAVERSE_HEIGHT = 5,
+ MAX_OUTPUT_LEN = 80,
+ out = [],
+ height = 0,
+ len = 0,
+ separator = ' > ',
+ sepLength = separator.length,
+ nextStr;
+
+ while (elem && height++ < MAX_TRAVERSE_HEIGHT) {
+ nextStr = htmlElementAsString(elem);
+ // bail out if
+ // - nextStr is the 'html' element
+ // - the length of the string that would be created exceeds MAX_OUTPUT_LEN
+ // (ignore this limit if we are on the first iteration)
+ if (
+ nextStr === 'html' ||
+ (height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN)
+ ) {
+ break;
+ }
+
+ out.push(nextStr);
+
+ len += nextStr.length;
+ elem = elem.parentNode;
+ }
+
+ return out.reverse().join(separator);
+}
+
+/**
+ * Returns a simple, query-selector representation of a DOM element
+ * e.g. [HTMLElement] => input#foo.btn[name=baz]
+ * @param HTMLElement
+ * @returns {string}
+ */
+function htmlElementAsString(elem) {
+ var out = [],
+ className,
+ classes,
+ key,
+ attr,
+ i;
+
+ if (!elem || !elem.tagName) {
+ return '';
+ }
+
+ out.push(elem.tagName.toLowerCase());
+ if (elem.id) {
+ out.push('#' + elem.id);
+ }
+
+ className = elem.className;
+ if (className && isString(className)) {
+ classes = className.split(/\s+/);
+ for (i = 0; i < classes.length; i++) {
+ out.push('.' + classes[i]);
+ }
+ }
+ var attrWhitelist = ['type', 'name', 'title', 'alt'];
+ for (i = 0; i < attrWhitelist.length; i++) {
+ key = attrWhitelist[i];
+ attr = elem.getAttribute(key);
+ if (attr) {
+ out.push('[' + key + '="' + attr + '"]');
+ }
+ }
+ return out.join('');
+}
+
+/**
+ * Returns true if either a OR b is truthy, but not both
+ */
+function isOnlyOneTruthy(a, b) {
+ return !!(!!a ^ !!b);
+}
+
+/**
+ * Returns true if both parameters are undefined
+ */
+function isBothUndefined(a, b) {
+ return isUndefined(a) && isUndefined(b);
+}
+
+/**
+ * Returns true if the two input exception interfaces have the same content
+ */
+function isSameException(ex1, ex2) {
+ if (isOnlyOneTruthy(ex1, ex2)) return false;
+
+ ex1 = ex1.values[0];
+ ex2 = ex2.values[0];
+
+ if (ex1.type !== ex2.type || ex1.value !== ex2.value) return false;
+
+ // in case both stacktraces are undefined, we can't decide so default to false
+ if (isBothUndefined(ex1.stacktrace, ex2.stacktrace)) return false;
+
+ return isSameStacktrace(ex1.stacktrace, ex2.stacktrace);
+}
+
+/**
+ * Returns true if the two input stack trace interfaces have the same content
+ */
+function isSameStacktrace(stack1, stack2) {
+ if (isOnlyOneTruthy(stack1, stack2)) return false;
+
+ var frames1 = stack1.frames;
+ var frames2 = stack2.frames;
+
+ // Exit early if frame count differs
+ if (frames1.length !== frames2.length) return false;
+
+ // Iterate through every frame; bail out if anything differs
+ var a, b;
+ for (var i = 0; i < frames1.length; i++) {
+ a = frames1[i];
+ b = frames2[i];
+ if (
+ a.filename !== b.filename ||
+ a.lineno !== b.lineno ||
+ a.colno !== b.colno ||
+ a['function'] !== b['function']
+ )
+ return false;
+ }
+ return true;
+}
+
+/**
+ * Polyfill a method
+ * @param obj object e.g. `document`
+ * @param name method name present on object e.g. `addEventListener`
+ * @param replacement replacement function
+ * @param track {optional} record instrumentation to an array
+ */
+function fill(obj, name, replacement, track) {
+ if (obj == null) return;
+ var orig = obj[name];
+ obj[name] = replacement(orig);
+ obj[name].__raven__ = true;
+ obj[name].__orig__ = orig;
+ if (track) {
+ track.push([obj, name, orig]);
+ }
+}
+
+/**
+ * Join values in array
+ * @param input array of values to be joined together
+ * @param delimiter string to be placed in-between values
+ * @returns {string}
+ */
+function safeJoin(input, delimiter) {
+ if (!isArray(input)) return '';
+
+ var output = [];
+
+ for (var i = 0; i < input.length; i++) {
+ try {
+ output.push(String(input[i]));
+ } catch (e) {
+ output.push('[value cannot be serialized]');
+ }
+ }
+
+ return output.join(delimiter);
+}
+
+// Default Node.js REPL depth
+var MAX_SERIALIZE_EXCEPTION_DEPTH = 3;
+// 50kB, as 100kB is max payload size, so half sounds reasonable
+var MAX_SERIALIZE_EXCEPTION_SIZE = 50 * 1024;
+var MAX_SERIALIZE_KEYS_LENGTH = 40;
+
+function utf8Length(value) {
+ return ~-encodeURI(value).split(/%..|./).length;
+}
+
+function jsonSize(value) {
+ return utf8Length(JSON.stringify(value));
+}
+
+function serializeValue(value) {
+ if (typeof value === 'string') {
+ var maxLength = 40;
+ return truncate(value, maxLength);
+ } else if (
+ typeof value === 'number' ||
+ typeof value === 'boolean' ||
+ typeof value === 'undefined'
+ ) {
+ return value;
+ }
+
+ var type = Object.prototype.toString.call(value);
+
+ // Node.js REPL notation
+ if (type === '[object Object]') return '[Object]';
+ if (type === '[object Array]') return '[Array]';
+ if (type === '[object Function]')
+ return value.name ? '[Function: ' + value.name + ']' : '[Function]';
+
+ return value;
+}
+
+function serializeObject(value, depth) {
+ if (depth === 0) return serializeValue(value);
+
+ if (isPlainObject(value)) {
+ return Object.keys(value).reduce(function(acc, key) {
+ acc[key] = serializeObject(value[key], depth - 1);
+ return acc;
+ }, {});
+ } else if (Array.isArray(value)) {
+ return value.map(function(val) {
+ return serializeObject(val, depth - 1);
+ });
+ }
+
+ return serializeValue(value);
+}
+
+function serializeException(ex, depth, maxSize) {
+ if (!isPlainObject(ex)) return ex;
+
+ depth = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_DEPTH : depth;
+ maxSize = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_SIZE : maxSize;
+
+ var serialized = serializeObject(ex, depth);
+
+ if (jsonSize(stringify(serialized)) > maxSize) {
+ return serializeException(ex, depth - 1);
+ }
+
+ return serialized;
+}
+
+function serializeKeysForMessage(keys, maxLength) {
+ if (typeof keys === 'number' || typeof keys === 'string') return keys.toString();
+ if (!Array.isArray(keys)) return '';
+
+ keys = keys.filter(function(key) {
+ return typeof key === 'string';
+ });
+ if (keys.length === 0) return '[object has no keys]';
+
+ maxLength = typeof maxLength !== 'number' ? MAX_SERIALIZE_KEYS_LENGTH : maxLength;
+ if (keys[0].length >= maxLength) return keys[0];
+
+ for (var usedKeys = keys.length; usedKeys > 0; usedKeys--) {
+ var serialized = keys.slice(0, usedKeys).join(', ');
+ if (serialized.length > maxLength) continue;
+ if (usedKeys === keys.length) return serialized;
+ return serialized + '\u2026';
+ }
+
+ return '';
+}
+
+function sanitize(input, sanitizeKeys) {
+ if (!isArray(sanitizeKeys) || (isArray(sanitizeKeys) && sanitizeKeys.length === 0))
+ return input;
+
+ var sanitizeRegExp = joinRegExp(sanitizeKeys);
+ var sanitizeMask = '********';
+ var safeInput;
+
+ try {
+ safeInput = JSON.parse(stringify(input));
+ } catch (o_O) {
+ return input;
+ }
+
+ function sanitizeWorker(workerInput) {
+ if (isArray(workerInput)) {
+ return workerInput.map(function(val) {
+ return sanitizeWorker(val);
+ });
+ }
+
+ if (isPlainObject(workerInput)) {
+ return Object.keys(workerInput).reduce(function(acc, k) {
+ if (sanitizeRegExp.test(k)) {
+ acc[k] = sanitizeMask;
+ } else {
+ acc[k] = sanitizeWorker(workerInput[k]);
+ }
+ return acc;
+ }, {});
+ }
+
+ return workerInput;
+ }
+
+ return sanitizeWorker(safeInput);
+}
+
+module.exports = {
+ isObject: isObject,
+ isError: isError,
+ isErrorEvent: isErrorEvent,
+ isDOMError: isDOMError,
+ isDOMException: isDOMException,
+ isUndefined: isUndefined,
+ isFunction: isFunction,
+ isPlainObject: isPlainObject,
+ isString: isString,
+ isArray: isArray,
+ isEmptyObject: isEmptyObject,
+ supportsErrorEvent: supportsErrorEvent,
+ supportsDOMError: supportsDOMError,
+ supportsDOMException: supportsDOMException,
+ supportsFetch: supportsFetch,
+ supportsReferrerPolicy: supportsReferrerPolicy,
+ supportsPromiseRejectionEvent: supportsPromiseRejectionEvent,
+ wrappedCallback: wrappedCallback,
+ each: each,
+ objectMerge: objectMerge,
+ truncate: truncate,
+ objectFrozen: objectFrozen,
+ hasKey: hasKey,
+ joinRegExp: joinRegExp,
+ urlencode: urlencode,
+ uuid4: uuid4,
+ htmlTreeAsString: htmlTreeAsString,
+ htmlElementAsString: htmlElementAsString,
+ isSameException: isSameException,
+ isSameStacktrace: isSameStacktrace,
+ parseUrl: parseUrl,
+ fill: fill,
+ safeJoin: safeJoin,
+ serializeException: serializeException,
+ serializeKeysForMessage: serializeKeysForMessage,
+ sanitize: sanitize
+};
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"11":11}],10:[function(_dereq_,module,exports){
+(function (global){
+var utils = _dereq_(9);
+
+/*
+ TraceKit - Cross brower stack traces
+
+ This was originally forked from github.com/occ/TraceKit, but has since been
+ largely re-written and is now maintained as part of raven-js. Tests for
+ this are in test/vendor.
+
+ MIT license
+*/
+
+var TraceKit = {
+ collectWindowErrors: true,
+ debug: false
+};
+
+// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)
+var _window =
+ typeof window !== 'undefined'
+ ? window
+ : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
+
+// global reference to slice
+var _slice = [].slice;
+var UNKNOWN_FUNCTION = '?';
+
+// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types
+var ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;
+
+function getLocationHref() {
+ if (typeof document === 'undefined' || document.location == null) return '';
+ return document.location.href;
+}
+
+function getLocationOrigin() {
+ if (typeof document === 'undefined' || document.location == null) return '';
+
+ // Oh dear IE10...
+ if (!document.location.origin) {
+ document.location.origin =
+ document.location.protocol +
+ '//' +
+ document.location.hostname +
+ (document.location.port ? ':' + document.location.port : '');
+ }
+
+ return document.location.origin;
+}
+
+/**
+ * TraceKit.report: cross-browser processing of unhandled exceptions
+ *
+ * Syntax:
+ * TraceKit.report.subscribe(function(stackInfo) { ... })
+ * TraceKit.report.unsubscribe(function(stackInfo) { ... })
+ * TraceKit.report(exception)
+ * try { ...code... } catch(ex) { TraceKit.report(ex); }
+ *
+ * Supports:
+ * - Firefox: full stack trace with line numbers, plus column number
+ * on top frame; column number is not guaranteed
+ * - Opera: full stack trace with line and column numbers
+ * - Chrome: full stack trace with line and column numbers
+ * - Safari: line and column number for the top frame only; some frames
+ * may be missing, and column number is not guaranteed
+ * - IE: line and column number for the top frame only; some frames
+ * may be missing, and column number is not guaranteed
+ *
+ * In theory, TraceKit should work on all of the following versions:
+ * - IE5.5+ (only 8.0 tested)
+ * - Firefox 0.9+ (only 3.5+ tested)
+ * - Opera 7+ (only 10.50 tested; versions 9 and earlier may require
+ * Exceptions Have Stacktrace to be enabled in opera:config)
+ * - Safari 3+ (only 4+ tested)
+ * - Chrome 1+ (only 5+ tested)
+ * - Konqueror 3.5+ (untested)
+ *
+ * Requires TraceKit.computeStackTrace.
+ *
+ * Tries to catch all unhandled exceptions and report them to the
+ * subscribed handlers. Please note that TraceKit.report will rethrow the
+ * exception. This is REQUIRED in order to get a useful stack trace in IE.
+ * If the exception does not reach the top of the browser, you will only
+ * get a stack trace from the point where TraceKit.report was called.
+ *
+ * Handlers receive a stackInfo object as described in the
+ * TraceKit.computeStackTrace docs.
+ */
+TraceKit.report = (function reportModuleWrapper() {
+ var handlers = [],
+ lastArgs = null,
+ lastException = null,
+ lastExceptionStack = null;
+
+ /**
+ * Add a crash handler.
+ * @param {Function} handler
+ */
+ function subscribe(handler) {
+ installGlobalHandler();
+ handlers.push(handler);
+ }
+
+ /**
+ * Remove a crash handler.
+ * @param {Function} handler
+ */
+ function unsubscribe(handler) {
+ for (var i = handlers.length - 1; i >= 0; --i) {
+ if (handlers[i] === handler) {
+ handlers.splice(i, 1);
+ }
+ }
+ }
+
+ /**
+ * Remove all crash handlers.
+ */
+ function unsubscribeAll() {
+ uninstallGlobalHandler();
+ handlers = [];
+ }
+
+ /**
+ * Dispatch stack information to all handlers.
+ * @param {Object.} stack
+ */
+ function notifyHandlers(stack, isWindowError) {
+ var exception = null;
+ if (isWindowError && !TraceKit.collectWindowErrors) {
+ return;
+ }
+ for (var i in handlers) {
+ if (handlers.hasOwnProperty(i)) {
+ try {
+ handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2)));
+ } catch (inner) {
+ exception = inner;
+ }
+ }
+ }
+
+ if (exception) {
+ throw exception;
+ }
+ }
+
+ var _oldOnerrorHandler, _onErrorHandlerInstalled;
+
+ /**
+ * Ensures all global unhandled exceptions are recorded.
+ * Supported by Gecko and IE.
+ * @param {string} msg Error message.
+ * @param {string} url URL of script that generated the exception.
+ * @param {(number|string)} lineNo The line number at which the error
+ * occurred.
+ * @param {?(number|string)} colNo The column number at which the error
+ * occurred.
+ * @param {?Error} ex The actual Error object.
+ */
+ function traceKitWindowOnError(msg, url, lineNo, colNo, ex) {
+ var stack = null;
+ // If 'ex' is ErrorEvent, get real Error from inside
+ var exception = utils.isErrorEvent(ex) ? ex.error : ex;
+ // If 'msg' is ErrorEvent, get real message from inside
+ var message = utils.isErrorEvent(msg) ? msg.message : msg;
+
+ if (lastExceptionStack) {
+ TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(
+ lastExceptionStack,
+ url,
+ lineNo,
+ message
+ );
+ processLastException();
+ } else if (exception && utils.isError(exception)) {
+ // non-string `exception` arg; attempt to extract stack trace
+
+ // New chrome and blink send along a real error object
+ // Let's just report that like a normal error.
+ // See: https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror
+ stack = TraceKit.computeStackTrace(exception);
+ notifyHandlers(stack, true);
+ } else {
+ var location = {
+ url: url,
+ line: lineNo,
+ column: colNo
+ };
+
+ var name = undefined;
+ var groups;
+
+ if ({}.toString.call(message) === '[object String]') {
+ var groups = message.match(ERROR_TYPES_RE);
+ if (groups) {
+ name = groups[1];
+ message = groups[2];
+ }
+ }
+
+ location.func = UNKNOWN_FUNCTION;
+
+ stack = {
+ name: name,
+ message: message,
+ url: getLocationHref(),
+ stack: [location]
+ };
+ notifyHandlers(stack, true);
+ }
+
+ if (_oldOnerrorHandler) {
+ return _oldOnerrorHandler.apply(this, arguments);
+ }
+
+ return false;
+ }
+
+ function installGlobalHandler() {
+ if (_onErrorHandlerInstalled) {
+ return;
+ }
+ _oldOnerrorHandler = _window.onerror;
+ _window.onerror = traceKitWindowOnError;
+ _onErrorHandlerInstalled = true;
+ }
+
+ function uninstallGlobalHandler() {
+ if (!_onErrorHandlerInstalled) {
+ return;
+ }
+ _window.onerror = _oldOnerrorHandler;
+ _onErrorHandlerInstalled = false;
+ _oldOnerrorHandler = undefined;
+ }
+
+ function processLastException() {
+ var _lastExceptionStack = lastExceptionStack,
+ _lastArgs = lastArgs;
+ lastArgs = null;
+ lastExceptionStack = null;
+ lastException = null;
+ notifyHandlers.apply(null, [_lastExceptionStack, false].concat(_lastArgs));
+ }
+
+ /**
+ * Reports an unhandled Error to TraceKit.
+ * @param {Error} ex
+ * @param {?boolean} rethrow If false, do not re-throw the exception.
+ * Only used for window.onerror to not cause an infinite loop of
+ * rethrowing.
+ */
+ function report(ex, rethrow) {
+ var args = _slice.call(arguments, 1);
+ if (lastExceptionStack) {
+ if (lastException === ex) {
+ return; // already caught by an inner catch block, ignore
+ } else {
+ processLastException();
+ }
+ }
+
+ var stack = TraceKit.computeStackTrace(ex);
+ lastExceptionStack = stack;
+ lastException = ex;
+ lastArgs = args;
+
+ // If the stack trace is incomplete, wait for 2 seconds for
+ // slow slow IE to see if onerror occurs or not before reporting
+ // this exception; otherwise, we will end up with an incomplete
+ // stack trace
+ setTimeout(function() {
+ if (lastException === ex) {
+ processLastException();
+ }
+ }, stack.incomplete ? 2000 : 0);
+
+ if (rethrow !== false) {
+ throw ex; // re-throw to propagate to the top level (and cause window.onerror)
+ }
+ }
+
+ report.subscribe = subscribe;
+ report.unsubscribe = unsubscribe;
+ report.uninstall = unsubscribeAll;
+ return report;
+})();
+
+/**
+ * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript
+ *
+ * Syntax:
+ * s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below)
+ * Returns:
+ * s.name - exception name
+ * s.message - exception message
+ * s.stack[i].url - JavaScript or HTML file URL
+ * s.stack[i].func - function name, or empty for anonymous functions (if guessing did not work)
+ * s.stack[i].args - arguments passed to the function, if known
+ * s.stack[i].line - line number, if known
+ * s.stack[i].column - column number, if known
+ *
+ * Supports:
+ * - Firefox: full stack trace with line numbers and unreliable column
+ * number on top frame
+ * - Opera 10: full stack trace with line and column numbers
+ * - Opera 9-: full stack trace with line numbers
+ * - Chrome: full stack trace with line and column numbers
+ * - Safari: line and column number for the topmost stacktrace element
+ * only
+ * - IE: no line numbers whatsoever
+ *
+ * Tries to guess names of anonymous functions by looking for assignments
+ * in the source code. In IE and Safari, we have to guess source file names
+ * by searching for function bodies inside all page scripts. This will not
+ * work for scripts that are loaded cross-domain.
+ * Here be dragons: some function names may be guessed incorrectly, and
+ * duplicate functions may be mismatched.
+ *
+ * TraceKit.computeStackTrace should only be used for tracing purposes.
+ * Logging of unhandled exceptions should be done with TraceKit.report,
+ * which builds on top of TraceKit.computeStackTrace and provides better
+ * IE support by utilizing the window.onerror event to retrieve information
+ * about the top of the stack.
+ *
+ * Note: In IE and Safari, no stack trace is recorded on the Error object,
+ * so computeStackTrace instead walks its *own* chain of callers.
+ * This means that:
+ * * in Safari, some methods may be missing from the stack trace;
+ * * in IE, the topmost function in the stack trace will always be the
+ * caller of computeStackTrace.
+ *
+ * This is okay for tracing (because you are likely to be calling
+ * computeStackTrace from the function you want to be the topmost element
+ * of the stack trace anyway), but not okay for logging unhandled
+ * exceptions (because your catch block will likely be far away from the
+ * inner function that actually caused the exception).
+ *
+ */
+TraceKit.computeStackTrace = (function computeStackTraceWrapper() {
+ // Contents of Exception in various browsers.
+ //
+ // SAFARI:
+ // ex.message = Can't find variable: qq
+ // ex.line = 59
+ // ex.sourceId = 580238192
+ // ex.sourceURL = http://...
+ // ex.expressionBeginOffset = 96
+ // ex.expressionCaretOffset = 98
+ // ex.expressionEndOffset = 98
+ // ex.name = ReferenceError
+ //
+ // FIREFOX:
+ // ex.message = qq is not defined
+ // ex.fileName = http://...
+ // ex.lineNumber = 59
+ // ex.columnNumber = 69
+ // ex.stack = ...stack trace... (see the example below)
+ // ex.name = ReferenceError
+ //
+ // CHROME:
+ // ex.message = qq is not defined
+ // ex.name = ReferenceError
+ // ex.type = not_defined
+ // ex.arguments = ['aa']
+ // ex.stack = ...stack trace...
+ //
+ // INTERNET EXPLORER:
+ // ex.message = ...
+ // ex.name = ReferenceError
+ //
+ // OPERA:
+ // ex.message = ...message... (see the example below)
+ // ex.name = ReferenceError
+ // ex.opera#sourceloc = 11 (pretty much useless, duplicates the info in ex.message)
+ // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'
+
+ /**
+ * Computes stack trace information from the stack property.
+ * Chrome and Gecko use this property.
+ * @param {Error} ex
+ * @return {?Object.} Stack trace information.
+ */
+ function computeStackTraceFromStackProp(ex) {
+ if (typeof ex.stack === 'undefined' || !ex.stack) return;
+
+ var chrome = /^\s*at (?:(.*?) ?\()?((?:file|https?|blob|chrome-extension|native|eval|webpack||[a-z]:|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i;
+ var winjs = /^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i;
+ // NOTE: blob urls are now supposed to always have an origin, therefore it's format
+ // which is `blob:http://url/path/with-some-uuid`, is matched by `blob.*?:\/` as well
+ var gecko = /^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\/.*?|\[native code\]|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i;
+ // Used to additionally parse URL/line/column from eval frames
+ var geckoEval = /(\S+) line (\d+)(?: > eval line \d+)* > eval/i;
+ var chromeEval = /\((\S*)(?::(\d+))(?::(\d+))\)/;
+ var lines = ex.stack.split('\n');
+ var stack = [];
+ var submatch;
+ var parts;
+ var element;
+ var reference = /^(.*) is undefined$/.exec(ex.message);
+
+ for (var i = 0, j = lines.length; i < j; ++i) {
+ if ((parts = chrome.exec(lines[i]))) {
+ var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line
+ var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line
+ if (isEval && (submatch = chromeEval.exec(parts[2]))) {
+ // throw out eval line/column and use top-most line/column number
+ parts[2] = submatch[1]; // url
+ parts[3] = submatch[2]; // line
+ parts[4] = submatch[3]; // column
+ }
+ element = {
+ url: !isNative ? parts[2] : null,
+ func: parts[1] || UNKNOWN_FUNCTION,
+ args: isNative ? [parts[2]] : [],
+ line: parts[3] ? +parts[3] : null,
+ column: parts[4] ? +parts[4] : null
+ };
+ } else if ((parts = winjs.exec(lines[i]))) {
+ element = {
+ url: parts[2],
+ func: parts[1] || UNKNOWN_FUNCTION,
+ args: [],
+ line: +parts[3],
+ column: parts[4] ? +parts[4] : null
+ };
+ } else if ((parts = gecko.exec(lines[i]))) {
+ var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;
+ if (isEval && (submatch = geckoEval.exec(parts[3]))) {
+ // throw out eval line/column and use top-most line number
+ parts[3] = submatch[1];
+ parts[4] = submatch[2];
+ parts[5] = null; // no column when eval
+ } else if (i === 0 && !parts[5] && typeof ex.columnNumber !== 'undefined') {
+ // FireFox uses this awesome columnNumber property for its top frame
+ // Also note, Firefox's column number is 0-based and everything else expects 1-based,
+ // so adding 1
+ // NOTE: this hack doesn't work if top-most frame is eval
+ stack[0].column = ex.columnNumber + 1;
+ }
+ element = {
+ url: parts[3],
+ func: parts[1] || UNKNOWN_FUNCTION,
+ args: parts[2] ? parts[2].split(',') : [],
+ line: parts[4] ? +parts[4] : null,
+ column: parts[5] ? +parts[5] : null
+ };
+ } else {
+ continue;
+ }
+
+ if (!element.func && element.line) {
+ element.func = UNKNOWN_FUNCTION;
+ }
+
+ if (element.url && element.url.substr(0, 5) === 'blob:') {
+ // Special case for handling JavaScript loaded into a blob.
+ // We use a synchronous AJAX request here as a blob is already in
+ // memory - it's not making a network request. This will generate a warning
+ // in the browser console, but there has already been an error so that's not
+ // that much of an issue.
+ var xhr = new XMLHttpRequest();
+ xhr.open('GET', element.url, false);
+ xhr.send(null);
+
+ // If we failed to download the source, skip this patch
+ if (xhr.status === 200) {
+ var source = xhr.responseText || '';
+
+ // We trim the source down to the last 300 characters as sourceMappingURL is always at the end of the file.
+ // Why 300? To be in line with: https://github.com/getsentry/sentry/blob/4af29e8f2350e20c28a6933354e4f42437b4ba42/src/sentry/lang/javascript/processor.py#L164-L175
+ source = source.slice(-300);
+
+ // Now we dig out the source map URL
+ var sourceMaps = source.match(/\/\/# sourceMappingURL=(.*)$/);
+
+ // If we don't find a source map comment or we find more than one, continue on to the next element.
+ if (sourceMaps) {
+ var sourceMapAddress = sourceMaps[1];
+
+ // Now we check to see if it's a relative URL.
+ // If it is, convert it to an absolute one.
+ if (sourceMapAddress.charAt(0) === '~') {
+ sourceMapAddress = getLocationOrigin() + sourceMapAddress.slice(1);
+ }
+
+ // Now we strip the '.map' off of the end of the URL and update the
+ // element so that Sentry can match the map to the blob.
+ element.url = sourceMapAddress.slice(0, -4);
+ }
+ }
+ }
+
+ stack.push(element);
+ }
+
+ if (!stack.length) {
+ return null;
+ }
+
+ return {
+ name: ex.name,
+ message: ex.message,
+ url: getLocationHref(),
+ stack: stack
+ };
+ }
+
+ /**
+ * Adds information about the first frame to incomplete stack traces.
+ * Safari and IE require this to get complete data on the first frame.
+ * @param {Object.} stackInfo Stack trace information from
+ * one of the compute* methods.
+ * @param {string} url The URL of the script that caused an error.
+ * @param {(number|string)} lineNo The line number of the script that
+ * caused an error.
+ * @param {string=} message The error generated by the browser, which
+ * hopefully contains the name of the object that caused the error.
+ * @return {boolean} Whether or not the stack information was
+ * augmented.
+ */
+ function augmentStackTraceWithInitialElement(stackInfo, url, lineNo, message) {
+ var initial = {
+ url: url,
+ line: lineNo
+ };
+
+ if (initial.url && initial.line) {
+ stackInfo.incomplete = false;
+
+ if (!initial.func) {
+ initial.func = UNKNOWN_FUNCTION;
+ }
+
+ if (stackInfo.stack.length > 0) {
+ if (stackInfo.stack[0].url === initial.url) {
+ if (stackInfo.stack[0].line === initial.line) {
+ return false; // already in stack trace
+ } else if (
+ !stackInfo.stack[0].line &&
+ stackInfo.stack[0].func === initial.func
+ ) {
+ stackInfo.stack[0].line = initial.line;
+ return false;
+ }
+ }
+ }
+
+ stackInfo.stack.unshift(initial);
+ stackInfo.partial = true;
+ return true;
+ } else {
+ stackInfo.incomplete = true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Computes stack trace information by walking the arguments.caller
+ * chain at the time the exception occurred. This will cause earlier
+ * frames to be missed but is the only way to get any stack trace in
+ * Safari and IE. The top frame is restored by
+ * {@link augmentStackTraceWithInitialElement}.
+ * @param {Error} ex
+ * @return {?Object.} Stack trace information.
+ */
+ function computeStackTraceByWalkingCallerChain(ex, depth) {
+ var functionName = /function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,
+ stack = [],
+ funcs = {},
+ recursion = false,
+ parts,
+ item,
+ source;
+
+ for (
+ var curr = computeStackTraceByWalkingCallerChain.caller;
+ curr && !recursion;
+ curr = curr.caller
+ ) {
+ if (curr === computeStackTrace || curr === TraceKit.report) {
+ // console.log('skipping internal function');
+ continue;
+ }
+
+ item = {
+ url: null,
+ func: UNKNOWN_FUNCTION,
+ line: null,
+ column: null
+ };
+
+ if (curr.name) {
+ item.func = curr.name;
+ } else if ((parts = functionName.exec(curr.toString()))) {
+ item.func = parts[1];
+ }
+
+ if (typeof item.func === 'undefined') {
+ try {
+ item.func = parts.input.substring(0, parts.input.indexOf('{'));
+ } catch (e) {}
+ }
+
+ if (funcs['' + curr]) {
+ recursion = true;
+ } else {
+ funcs['' + curr] = true;
+ }
+
+ stack.push(item);
+ }
+
+ if (depth) {
+ // console.log('depth is ' + depth);
+ // console.log('stack is ' + stack.length);
+ stack.splice(0, depth);
+ }
+
+ var result = {
+ name: ex.name,
+ message: ex.message,
+ url: getLocationHref(),
+ stack: stack
+ };
+ augmentStackTraceWithInitialElement(
+ result,
+ ex.sourceURL || ex.fileName,
+ ex.line || ex.lineNumber,
+ ex.message || ex.description
+ );
+ return result;
+ }
+
+ /**
+ * Computes a stack trace for an exception.
+ * @param {Error} ex
+ * @param {(string|number)=} depth
+ */
+ function computeStackTrace(ex, depth) {
+ var stack = null;
+ depth = depth == null ? 0 : +depth;
+
+ try {
+ stack = computeStackTraceFromStackProp(ex);
+ if (stack) {
+ return stack;
+ }
+ } catch (e) {
+ if (TraceKit.debug) {
+ throw e;
+ }
+ }
+
+ try {
+ stack = computeStackTraceByWalkingCallerChain(ex, depth + 1);
+ if (stack) {
+ return stack;
+ }
+ } catch (e) {
+ if (TraceKit.debug) {
+ throw e;
+ }
+ }
+ return {
+ name: ex.name,
+ message: ex.message,
+ url: getLocationHref()
+ };
+ }
+
+ computeStackTrace.augmentStackTraceWithInitialElement = augmentStackTraceWithInitialElement;
+ computeStackTrace.computeStackTraceFromStackProp = computeStackTraceFromStackProp;
+
+ return computeStackTrace;
+})();
+
+module.exports = TraceKit;
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"9":9}],11:[function(_dereq_,module,exports){
+/*
+ json-stringify-safe
+ Like JSON.stringify, but doesn't throw on circular references.
+
+ Originally forked from https://github.com/isaacs/json-stringify-safe
+ version 5.0.1 on 3/8/2017 and modified to handle Errors serialization
+ and IE8 compatibility. Tests for this are in test/vendor.
+
+ ISC license: https://github.com/isaacs/json-stringify-safe/blob/master/LICENSE
+*/
+
+exports = module.exports = stringify;
+exports.getSerialize = serializer;
+
+function indexOf(haystack, needle) {
+ for (var i = 0; i < haystack.length; ++i) {
+ if (haystack[i] === needle) return i;
+ }
+ return -1;
+}
+
+function stringify(obj, replacer, spaces, cycleReplacer) {
+ return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces);
+}
+
+// https://github.com/ftlabs/js-abbreviate/blob/fa709e5f139e7770a71827b1893f22418097fbda/index.js#L95-L106
+function stringifyError(value) {
+ var err = {
+ // These properties are implemented as magical getters and don't show up in for in
+ stack: value.stack,
+ message: value.message,
+ name: value.name
+ };
+
+ for (var i in value) {
+ if (Object.prototype.hasOwnProperty.call(value, i)) {
+ err[i] = value[i];
+ }
+ }
+
+ return err;
+}
+
+function serializer(replacer, cycleReplacer) {
+ var stack = [];
+ var keys = [];
+
+ if (cycleReplacer == null) {
+ cycleReplacer = function(key, value) {
+ if (stack[0] === value) {
+ return '[Circular ~]';
+ }
+ return '[Circular ~.' + keys.slice(0, indexOf(stack, value)).join('.') + ']';
+ };
+ }
+
+ return function(key, value) {
+ if (stack.length > 0) {
+ var thisPos = indexOf(stack, this);
+ ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);
+ ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);
+
+ if (~indexOf(stack, value)) {
+ value = cycleReplacer.call(this, key, value);
+ }
+ } else {
+ stack.push(value);
+ }
+
+ return replacer == null
+ ? value instanceof Error ? stringifyError(value) : value
+ : replacer.call(this, key, value);
+ };
+}
+
+},{}],12:[function(_dereq_,module,exports){
+/*
+ * JavaScript MD5
+ * https://github.com/blueimp/JavaScript-MD5
+ *
+ * Copyright 2011, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * https://opensource.org/licenses/MIT
+ *
+ * Based on
+ * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
+ * Digest Algorithm, as defined in RFC 1321.
+ * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
+ * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
+ * Distributed under the BSD License
+ * See http://pajhome.org.uk/crypt/md5 for more info.
+ */
+
+/*
+* Add integers, wrapping at 2^32. This uses 16-bit operations internally
+* to work around bugs in some JS interpreters.
+*/
+function safeAdd(x, y) {
+ var lsw = (x & 0xffff) + (y & 0xffff);
+ var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
+ return (msw << 16) | (lsw & 0xffff);
+}
+
+/*
+* Bitwise rotate a 32-bit number to the left.
+*/
+function bitRotateLeft(num, cnt) {
+ return (num << cnt) | (num >>> (32 - cnt));
+}
+
+/*
+* These functions implement the four basic operations the algorithm uses.
+*/
+function md5cmn(q, a, b, x, s, t) {
+ return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);
+}
+function md5ff(a, b, c, d, x, s, t) {
+ return md5cmn((b & c) | (~b & d), a, b, x, s, t);
+}
+function md5gg(a, b, c, d, x, s, t) {
+ return md5cmn((b & d) | (c & ~d), a, b, x, s, t);
+}
+function md5hh(a, b, c, d, x, s, t) {
+ return md5cmn(b ^ c ^ d, a, b, x, s, t);
+}
+function md5ii(a, b, c, d, x, s, t) {
+ return md5cmn(c ^ (b | ~d), a, b, x, s, t);
+}
+
+/*
+* Calculate the MD5 of an array of little-endian words, and a bit length.
+*/
+function binlMD5(x, len) {
+ /* append padding */
+ x[len >> 5] |= 0x80 << (len % 32);
+ x[(((len + 64) >>> 9) << 4) + 14] = len;
+
+ var i;
+ var olda;
+ var oldb;
+ var oldc;
+ var oldd;
+ var a = 1732584193;
+ var b = -271733879;
+ var c = -1732584194;
+ var d = 271733878;
+
+ for (i = 0; i < x.length; i += 16) {
+ olda = a;
+ oldb = b;
+ oldc = c;
+ oldd = d;
+
+ a = md5ff(a, b, c, d, x[i], 7, -680876936);
+ d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);
+ c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);
+ b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);
+ a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);
+ d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);
+ c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);
+ b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);
+ a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);
+ d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);
+ c = md5ff(c, d, a, b, x[i + 10], 17, -42063);
+ b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);
+ a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);
+ d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);
+ c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);
+ b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);
+
+ a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);
+ d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);
+ c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);
+ b = md5gg(b, c, d, a, x[i], 20, -373897302);
+ a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);
+ d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);
+ c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);
+ b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);
+ a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);
+ d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);
+ c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);
+ b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);
+ a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);
+ d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);
+ c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);
+ b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);
+
+ a = md5hh(a, b, c, d, x[i + 5], 4, -378558);
+ d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);
+ c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);
+ b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);
+ a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);
+ d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);
+ c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);
+ b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);
+ a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);
+ d = md5hh(d, a, b, c, x[i], 11, -358537222);
+ c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);
+ b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);
+ a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);
+ d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);
+ c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);
+ b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);
+
+ a = md5ii(a, b, c, d, x[i], 6, -198630844);
+ d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);
+ c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);
+ b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);
+ a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);
+ d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);
+ c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);
+ b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);
+ a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);
+ d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);
+ c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);
+ b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);
+ a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);
+ d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);
+ c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);
+ b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);
+
+ a = safeAdd(a, olda);
+ b = safeAdd(b, oldb);
+ c = safeAdd(c, oldc);
+ d = safeAdd(d, oldd);
+ }
+ return [a, b, c, d];
+}
+
+/*
+* Convert an array of little-endian words to a string
+*/
+function binl2rstr(input) {
+ var i;
+ var output = '';
+ var length32 = input.length * 32;
+ for (i = 0; i < length32; i += 8) {
+ output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xff);
+ }
+ return output;
+}
+
+/*
+* Convert a raw string to an array of little-endian words
+* Characters >255 have their high-byte silently ignored.
+*/
+function rstr2binl(input) {
+ var i;
+ var output = [];
+ output[(input.length >> 2) - 1] = undefined;
+ for (i = 0; i < output.length; i += 1) {
+ output[i] = 0;
+ }
+ var length8 = input.length * 8;
+ for (i = 0; i < length8; i += 8) {
+ output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << (i % 32);
+ }
+ return output;
+}
+
+/*
+* Calculate the MD5 of a raw string
+*/
+function rstrMD5(s) {
+ return binl2rstr(binlMD5(rstr2binl(s), s.length * 8));
+}
+
+/*
+* Calculate the HMAC-MD5, of a key and some data (raw strings)
+*/
+function rstrHMACMD5(key, data) {
+ var i;
+ var bkey = rstr2binl(key);
+ var ipad = [];
+ var opad = [];
+ var hash;
+ ipad[15] = opad[15] = undefined;
+ if (bkey.length > 16) {
+ bkey = binlMD5(bkey, key.length * 8);
+ }
+ for (i = 0; i < 16; i += 1) {
+ ipad[i] = bkey[i] ^ 0x36363636;
+ opad[i] = bkey[i] ^ 0x5c5c5c5c;
+ }
+ hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);
+ return binl2rstr(binlMD5(opad.concat(hash), 512 + 128));
+}
+
+/*
+* Convert a raw string to a hex string
+*/
+function rstr2hex(input) {
+ var hexTab = '0123456789abcdef';
+ var output = '';
+ var x;
+ var i;
+ for (i = 0; i < input.length; i += 1) {
+ x = input.charCodeAt(i);
+ output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f);
+ }
+ return output;
+}
+
+/*
+* Encode a string as utf-8
+*/
+function str2rstrUTF8(input) {
+ return unescape(encodeURIComponent(input));
+}
+
+/*
+* Take string arguments and return either raw or hex encoded strings
+*/
+function rawMD5(s) {
+ return rstrMD5(str2rstrUTF8(s));
+}
+function hexMD5(s) {
+ return rstr2hex(rawMD5(s));
+}
+function rawHMACMD5(k, d) {
+ return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d));
+}
+function hexHMACMD5(k, d) {
+ return rstr2hex(rawHMACMD5(k, d));
+}
+
+function md5(string, key, raw) {
+ if (!key) {
+ if (!raw) {
+ return hexMD5(string);
+ }
+ return rawMD5(string);
+ }
+ if (!raw) {
+ return hexHMACMD5(key, string);
+ }
+ return rawHMACMD5(key, string);
+}
+
+module.exports = md5;
+
+},{}]},{},[8,1,2,3,4])(8)
+});
\ No newline at end of file
diff --git a/packages/raven-js/dist/angular,console,require,vue/raven.min.js b/packages/raven-js/dist/angular,console,require,vue/raven.min.js
new file mode 100644
index 000000000000..b3a974234f57
--- /dev/null
+++ b/packages/raven-js/dist/angular,console,require,vue/raven.min.js
@@ -0,0 +1,4 @@
+/*! Raven.js 3.25.2 (30b6d4e) | github.com/getsentry/raven-js */
+!function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,b.Raven=a()}}(function(){var a;return function b(a,c,d){function e(g,h){if(!c[g]){if(!a[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};a[g][0].call(k.exports,function(b){var c=a[g][1][b];return e(c?c:b)},k,k.exports,b,a,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g":"anonymous component")+(a._isVue&&a.$options.__file?" at "+a.$options.__file:"")}function e(a,b){if(b=b||window.Vue,b&&b.config){var c=b.config.errorHandler;b.config.errorHandler=function(b,e,f){var g={};"[object Object]"===Object.prototype.toString.call(e)&&(g.componentName=d(e),g.propsData=e.$options.propsData),"undefined"!=typeof f&&(g.lifecycleHook=f),a.captureException(b,{extra:g}),"function"==typeof c&&c.call(this,b,e,f)}}}b.exports=e,a(8).addPlugin(b.exports)},{8:8}],5:[function(a,b,c){function d(a){this.name="RavenConfigError",this.message=a}d.prototype=new Error,d.prototype.constructor=d,b.exports=d},{}],6:[function(a,b,c){var d=a(9),e=function(a,b,c){var e=a[b],f=a;if(b in a){var g="warn"===b?"warning":b;a[b]=function(){var a=[].slice.call(arguments),h=d.safeJoin(a," "),i={level:g,logger:"console",extra:{arguments:a}};"assert"===b?a[0]===!1&&(h="Assertion failed: "+(d.safeJoin(a.slice(1)," ")||"console.assert"),i.extra.arguments=a.slice(1),c&&c(h,i)):c&&c(h,i),e&&Function.prototype.apply.call(e,f,a)}}};b.exports={wrapMethod:e}},{9:9}],7:[function(a,b,c){(function(c){function d(){return+new Date}function e(a,b){return s(b)?function(c){return b(c,a)}:b}function f(){this.b=!("object"!=typeof JSON||!JSON.stringify),this.c=!r(S),this.d=!r(T),this.e=null,this.f=null,this.g=null,this.h=null,this.i=null,this.j=null,this.k={},this.l={release:R.SENTRY_RELEASE&&R.SENTRY_RELEASE.id,logger:"javascript",ignoreErrors:[],ignoreUrls:[],whitelistUrls:[],includePaths:[],headers:null,collectWindowErrors:!0,captureUnhandledRejections:!0,maxMessageLength:0,maxUrlLength:250,stackTraceLimit:50,autoBreadcrumbs:!0,instrument:!0,sampleRate:1,sanitizeKeys:[]},this.m={method:"POST",keepalive:!0,referrerPolicy:K()?"origin":""},this.n=0,this.o=!1,this.p=Error.stackTraceLimit,this.q=R.console||{},this.r={},this.s=[],this.t=d(),this.u=[],this.v=[],this.w=null,this.x=R.location,this.y=this.x&&this.x.href,this.z();for(var a in this.q)this.r[a]=this.q[a]}var g=a(10),h=a(11),i=a(12),j=a(5),k=a(9),l=k.isErrorEvent,m=k.isDOMError,n=k.isDOMException,o=k.isError,p=k.isObject,q=k.isPlainObject,r=k.isUndefined,s=k.isFunction,t=k.isString,u=k.isArray,v=k.isEmptyObject,w=k.each,x=k.objectMerge,y=k.truncate,z=k.objectFrozen,A=k.hasKey,B=k.joinRegExp,C=k.urlencode,D=k.uuid4,E=k.htmlTreeAsString,F=k.isSameException,G=k.isSameStacktrace,H=k.parseUrl,I=k.fill,J=k.supportsFetch,K=k.supportsReferrerPolicy,L=k.serializeKeysForMessage,M=k.serializeException,N=k.sanitize,O=a(6).wrapMethod,P="source protocol user pass host port path".split(" "),Q=/^(?:(\w+):)?\/\/(?:(\w+)(:\w+)?@)?([\w\.-]+)(?::(\d+))?(\/.*)/,R="undefined"!=typeof window?window:"undefined"!=typeof c?c:"undefined"!=typeof self?self:{},S=R.document,T=R.navigator;f.prototype={VERSION:"3.25.2",debug:!1,TraceKit:g,config:function(a,b){var c=this;if(c.h)return this.A("error","Error: Raven has already been configured"),c;if(!a)return c;var d=c.l;b&&w(b,function(a,b){"tags"===a||"extra"===a||"user"===a?c.k[a]=b:d[a]=b}),c.setDSN(a),d.ignoreErrors.push(/^Script error\.?$/),d.ignoreErrors.push(/^Javascript error: Script error\.? on line 0$/),d.ignoreErrors=B(d.ignoreErrors),d.ignoreUrls=!!d.ignoreUrls.length&&B(d.ignoreUrls),d.whitelistUrls=!!d.whitelistUrls.length&&B(d.whitelistUrls),d.includePaths=B(d.includePaths),d.maxBreadcrumbs=Math.max(0,Math.min(d.maxBreadcrumbs||100,100));var e={xhr:!0,console:!0,dom:!0,location:!0,sentry:!0},f=d.autoBreadcrumbs;"[object Object]"==={}.toString.call(f)?f=x(e,f):f!==!1&&(f=e),d.autoBreadcrumbs=f;var h={tryCatch:!0},i=d.instrument;return"[object Object]"==={}.toString.call(i)?i=x(h,i):i!==!1&&(i=h),d.instrument=i,g.collectWindowErrors=!!d.collectWindowErrors,c},install:function(){var a=this;return a.isSetup()&&!a.o&&(g.report.subscribe(function(){a.B.apply(a,arguments)}),a.l.captureUnhandledRejections&&a.C(),a.D(),a.l.instrument&&a.l.instrument.tryCatch&&a.E(),a.l.autoBreadcrumbs&&a.F(),a.G(),a.o=!0),Error.stackTraceLimit=a.l.stackTraceLimit,this},setDSN:function(a){var b=this,c=b.H(a),d=c.path.lastIndexOf("/"),e=c.path.substr(1,d);b.I=a,b.i=c.user,b.J=c.pass&&c.pass.substr(1),b.j=c.path.substr(d+1),b.h=b.K(c),b.L=b.h+"/"+e+"api/"+b.j+"/store/",this.z()},context:function(a,b,c){return s(a)&&(c=b||[],b=a,a=void 0),this.wrap(a,b).apply(this,c)},wrap:function(a,b,c){function d(){var d=[],f=arguments.length,g=!a||a&&a.deep!==!1;for(c&&s(c)&&c.apply(this,arguments);f--;)d[f]=g?e.wrap(a,arguments[f]):arguments[f];try{return b.apply(this,d)}catch(h){throw e.M(),e.captureException(h,a),h}}var e=this;if(r(b)&&!s(a))return a;if(s(a)&&(b=a,a=void 0),!s(b))return b;try{if(b.N)return b;if(b.O)return b.O}catch(f){return b}for(var g in b)A(b,g)&&(d[g]=b[g]);return d.prototype=b.prototype,b.O=d,d.N=!0,d.P=b,d},uninstall:function(){return g.report.uninstall(),this.Q(),this.R(),this.S(),this.T(),Error.stackTraceLimit=this.p,this.o=!1,this},U:function(a){this.A("debug","Raven caught unhandled promise rejection:",a),this.captureException(a.reason,{extra:{unhandledPromiseRejection:!0}})},C:function(){return this.U=this.U.bind(this),R.addEventListener&&R.addEventListener("unhandledrejection",this.U),this},Q:function(){return R.removeEventListener&&R.removeEventListener("unhandledrejection",this.U),this},captureException:function(a,b){if(b=x({trimHeadFrames:0},b?b:{}),l(a)&&a.error)a=a.error;else{if(m(a)||n(a)){var c=a.name||(m(a)?"DOMError":"DOMException"),d=a.message?c+": "+a.message:c;return this.captureMessage(d,x(b,{stacktrace:!0,trimHeadFrames:b.trimHeadFrames+1}))}if(o(a))a=a;else{if(!q(a))return this.captureMessage(a,x(b,{stacktrace:!0,trimHeadFrames:b.trimHeadFrames+1}));b=this.V(b,a),a=new Error(b.message)}}this.e=a;try{var e=g.computeStackTrace(a);this.W(e,b)}catch(f){if(a!==f)throw f}return this},V:function(a,b){var c=Object.keys(b).sort(),d=x(a,{message:"Non-Error exception captured with keys: "+L(c),fingerprint:[i(c)],extra:a.extra||{}});return d.extra.X=M(b),d},captureMessage:function(a,b){if(!this.l.ignoreErrors.test||!this.l.ignoreErrors.test(a)){b=b||{},a+="";var c,d=x({message:a},b);try{throw new Error(a)}catch(e){c=e}c.name=null;var f=g.computeStackTrace(c),h=u(f.stack)&&f.stack[1];h&&"Raven.captureException"===h.func&&(h=f.stack[2]);var i=h&&h.url||"";if((!this.l.ignoreUrls.test||!this.l.ignoreUrls.test(i))&&(!this.l.whitelistUrls.test||this.l.whitelistUrls.test(i))){if(this.l.stacktrace||b&&b.stacktrace){d.fingerprint=null==d.fingerprint?a:d.fingerprint,b=x({trimHeadFrames:0},b),b.trimHeadFrames+=1;var j=this.Y(f,b);d.stacktrace={frames:j.reverse()}}return d.fingerprint&&(d.fingerprint=u(d.fingerprint)?d.fingerprint:[d.fingerprint]),this.Z(d),this}}},captureBreadcrumb:function(a){var b=x({timestamp:d()/1e3},a);if(s(this.l.breadcrumbCallback)){var c=this.l.breadcrumbCallback(b);if(p(c)&&!v(c))b=c;else if(c===!1)return this}return this.v.push(b),this.v.length>this.l.maxBreadcrumbs&&this.v.shift(),this},addPlugin:function(a){var b=[].slice.call(arguments,1);return this.s.push([a,b]),this.o&&this.G(),this},setUserContext:function(a){return this.k.user=a,this},setExtraContext:function(a){return this.$("extra",a),this},setTagsContext:function(a){return this.$("tags",a),this},clearContext:function(){return this.k={},this},getContext:function(){return JSON.parse(h(this.k))},setEnvironment:function(a){return this.l.environment=a,this},setRelease:function(a){return this.l.release=a,this},setDataCallback:function(a){var b=this.l.dataCallback;return this.l.dataCallback=e(b,a),this},setBreadcrumbCallback:function(a){var b=this.l.breadcrumbCallback;return this.l.breadcrumbCallback=e(b,a),this},setShouldSendCallback:function(a){var b=this.l.shouldSendCallback;return this.l.shouldSendCallback=e(b,a),this},setTransport:function(a){return this.l.transport=a,this},lastException:function(){return this.e},lastEventId:function(){return this.g},isSetup:function(){return!!this.b&&(!!this.h||(this.ravenNotConfiguredError||(this.ravenNotConfiguredError=!0,this.A("error","Error: Raven has not been configured.")),!1))},afterLoad:function(){var a=R.RavenConfig;a&&this.config(a.dsn,a.config).install()},showReportDialog:function(a){if(S){a=a||{};var b=a.eventId||this.lastEventId();if(!b)throw new j("Missing eventId");var c=a.dsn||this.I;if(!c)throw new j("Missing DSN");var d=encodeURIComponent,e="";e+="?eventId="+d(b),e+="&dsn="+d(c);var f=a.user||this.k.user;f&&(f.name&&(e+="&name="+d(f.name)),f.email&&(e+="&email="+d(f.email)));var g=this.K(this.H(c)),h=S.createElement("script");h.async=!0,h.src=g+"/api/embed/error-page/"+e,(S.head||S.body).appendChild(h)}},M:function(){var a=this;this.n+=1,setTimeout(function(){a.n-=1})},_:function(a,b){var c,d;if(this.c){b=b||{},a="raven"+a.substr(0,1).toUpperCase()+a.substr(1),S.createEvent?(c=S.createEvent("HTMLEvents"),c.initEvent(a,!0,!0)):(c=S.createEventObject(),c.eventType=a);for(d in b)A(b,d)&&(c[d]=b[d]);if(S.createEvent)S.dispatchEvent(c);else try{S.fireEvent("on"+c.eventType.toLowerCase(),c)}catch(e){}}},aa:function(a){var b=this;return function(c){if(b.ba=null,b.w!==c){b.w=c;var d;try{d=E(c.target)}catch(e){d=""}b.captureBreadcrumb({category:"ui."+a,message:d})}}},ca:function(){var a=this,b=1e3;return function(c){var d;try{d=c.target}catch(e){return}var f=d&&d.tagName;if(f&&("INPUT"===f||"TEXTAREA"===f||d.isContentEditable)){var g=a.ba;g||a.aa("input")(c),clearTimeout(g),a.ba=setTimeout(function(){a.ba=null},b)}}},da:function(a,b){var c=H(this.x.href),d=H(b),e=H(a);this.y=b,c.protocol===d.protocol&&c.host===d.host&&(b=d.relative),c.protocol===e.protocol&&c.host===e.host&&(a=e.relative),this.captureBreadcrumb({category:"navigation",data:{to:b,from:a}})},D:function(){var a=this;a.ea=Function.prototype.toString,Function.prototype.toString=function(){return"function"==typeof this&&this.N?a.ea.apply(this.P,arguments):a.ea.apply(this,arguments)}},R:function(){this.ea&&(Function.prototype.toString=this.ea)},E:function(){function a(a){return function(b,d){for(var e=new Array(arguments.length),f=0;f2?arguments[2]:void 0;return c&&b.da(b.y,c+""),a.apply(this,arguments)}};I(R.history,"pushState",j,d),I(R.history,"replaceState",j,d)}if(c.console&&"console"in R&&console.log){var k=function(a,c){b.captureBreadcrumb({message:a,level:c.level,category:"console"})};w(["debug","info","warn","error","log"],function(a,b){O(console,b,k)})}},S:function(){for(var a;this.u.length;){a=this.u.shift();var b=a[0],c=a[1],d=a[2];b[c]=d}},T:function(){for(var a in this.r)this.q[a]=this.r[a]},G:function(){var a=this;w(this.s,function(b,c){var d=c[0],e=c[1];d.apply(a,[a].concat(e))})},H:function(a){var b=Q.exec(a),c={},d=7;try{for(;d--;)c[P[d]]=b[d]||""}catch(e){throw new j("Invalid DSN: "+a)}if(c.pass&&!this.l.allowSecretKey)throw new j("Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key");return c},K:function(a){var b="//"+a.host+(a.port?":"+a.port:"");return a.protocol&&(b=a.protocol+":"+b),b},B:function(){this.n||this.W.apply(this,arguments)},W:function(a,b){var c=this.Y(a,b);this._("handle",{stackInfo:a,options:b}),this.ga(a.name,a.message,a.url,a.lineno,c,b)},Y:function(a,b){var c=this,d=[];if(a.stack&&a.stack.length&&(w(a.stack,function(b,e){var f=c.ha(e,a.url);f&&d.push(f)}),b&&b.trimHeadFrames))for(var e=0;e0&&(a.breadcrumbs={values:[].slice.call(this.v,0)}),this.k.user&&(a.user=this.k.user),b.environment&&(a.environment=b.environment),b.release&&(a.release=b.release),b.serverName&&(a.server_name=b.serverName),a=this.qa(a),Object.keys(a).forEach(function(b){(null==a[b]||""===a[b]||v(a[b]))&&delete a[b]}),s(b.dataCallback)&&(a=b.dataCallback(a)||a),a&&!v(a)&&(!s(b.shouldSendCallback)||b.shouldSendCallback(a)))return this.na()?void this.A("warn","Raven dropped error due to backoff: ",a):void("number"==typeof b.sampleRate?Math.random() ",i=h.length;a&&f++1&&g+e.length*i+b.length>=d));)e.push(b),g+=b.length,a=a.parentNode;return e.reverse().join(h)}function F(a){var b,c,d,e,f,g=[];if(!a||!a.tagName)return"";if(g.push(a.tagName.toLowerCase()),a.id&&g.push("#"+a.id),b=a.className,b&&l(b))for(c=b.split(/\s+/),f=0;fc?Q(a,b-1):d}function R(a,b){if("number"==typeof a||"string"==typeof a)return a.toString();if(!Array.isArray(a))return"";if(a=a.filter(function(a){return"string"==typeof a}),0===a.length)return"[object has no keys]";if(b="number"!=typeof b?X:b,a[0].length>=b)return a[0];for(var c=a.length;c>0;c--){var d=a.slice(0,c).join(", ");if(!(d.length>b))return c===a.length?d:d+"…"}return""}function S(a,b){function c(a){return m(a)?a.map(function(a){return c(a)}):k(a)?Object.keys(a).reduce(function(b,d){return b[d]=e.test(d)?f:c(a[d]),b},{}):a}if(!m(b)||m(b)&&0===b.length)return a;var d,e=A(b),f="********";try{d=JSON.parse(T(a))}catch(g){return a}return c(d)}var T=a(11),U="undefined"!=typeof window?window:"undefined"!=typeof c?c:"undefined"!=typeof self?self:{},V=3,W=51200,X=40;b.exports={isObject:d,isError:e,isErrorEvent:f,isDOMError:g,isDOMException:h,isUndefined:i,isFunction:j,isPlainObject:k,isString:l,isArray:m,isEmptyObject:n,supportsErrorEvent:o,supportsDOMError:p,supportsDOMException:q,supportsFetch:r,supportsReferrerPolicy:s,supportsPromiseRejectionEvent:t,wrappedCallback:u,each:v,objectMerge:w,truncate:y,objectFrozen:x,hasKey:z,joinRegExp:A,urlencode:B,uuid4:D,htmlTreeAsString:E,htmlElementAsString:F,isSameException:I,isSameStacktrace:J,parseUrl:C,fill:K,safeJoin:L,serializeException:Q,serializeKeysForMessage:R,sanitize:S}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{11:11}],10:[function(a,b,c){(function(c){function d(){return"undefined"==typeof document||null==document.location?"":document.location.href}function e(){return"undefined"==typeof document||null==document.location?"":(document.location.origin||(document.location.origin=document.location.protocol+"//"+document.location.hostname+(document.location.port?":"+document.location.port:"")),document.location.origin)}var f=a(9),g={collectWindowErrors:!0,debug:!1},h="undefined"!=typeof window?window:"undefined"!=typeof c?c:"undefined"!=typeof self?self:{},i=[].slice,j="?",k=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;g.report=function(){function a(a){m(),s.push(a)}function b(a){for(var b=s.length-1;b>=0;--b)s[b]===a&&s.splice(b,1)}function c(){n(),s=[]}function e(a,b){var c=null;if(!b||g.collectWindowErrors){for(var d in s)if(s.hasOwnProperty(d))try{s[d].apply(null,[a].concat(i.call(arguments,2)))}catch(e){c=e}if(c)throw c}}function l(a,b,c,h,i){var l=null,m=f.isErrorEvent(i)?i.error:i,n=f.isErrorEvent(a)?a.message:a;if(v)g.computeStackTrace.augmentStackTraceWithInitialElement(v,b,c,n),o();else if(m&&f.isError(m))l=g.computeStackTrace(m),e(l,!0);else{var p,r={url:b,line:c,column:h},s=void 0;if("[object String]"==={}.toString.call(n)){var p=n.match(k);p&&(s=p[1],n=p[2])}r.func=j,l={name:s,message:n,url:d(),stack:[r]},e(l,!0)}return!!q&&q.apply(this,arguments)}function m(){r||(q=h.onerror,h.onerror=l,r=!0)}function n(){r&&(h.onerror=q,r=!1,q=void 0)}function o(){var a=v,b=t;t=null,v=null,u=null,e.apply(null,[a,!1].concat(b))}function p(a,b){var c=i.call(arguments,1);if(v){if(u===a)return;o()}var d=g.computeStackTrace(a);if(v=d,u=a,t=c,setTimeout(function(){u===a&&o()},d.incomplete?2e3:0),b!==!1)throw a}var q,r,s=[],t=null,u=null,v=null;return p.subscribe=a,p.unsubscribe=b,p.uninstall=c,p}(),g.computeStackTrace=function(){function a(a){if("undefined"!=typeof a.stack&&a.stack){for(var b,c,f,g=/^\s*at (?:(.*?) ?\()?((?:file|https?|blob|chrome-extension|native|eval|webpack||[a-z]:|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,h=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i,i=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\/.*?|\[native code\]|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i,k=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,l=/\((\S*)(?::(\d+))(?::(\d+))\)/,m=a.stack.split("\n"),n=[],o=(/^(.*) is undefined$/.exec(a.message),0),p=m.length;o eval")>-1;r&&(b=k.exec(c[3]))?(c[3]=b[1],c[4]=b[2],c[5]=null):0!==o||c[5]||"undefined"==typeof a.columnNumber||(n[0].column=a.columnNumber+1),f={url:c[3],func:c[1]||j,args:c[2]?c[2].split(","):[],line:c[4]?+c[4]:null,column:c[5]?+c[5]:null}}if(!f.func&&f.line&&(f.func=j),f.url&&"blob:"===f.url.substr(0,5)){var s=new XMLHttpRequest;if(s.open("GET",f.url,!1),s.send(null),200===s.status){var t=s.responseText||"";t=t.slice(-300);var u=t.match(/\/\/# sourceMappingURL=(.*)$/);if(u){var v=u[1];"~"===v.charAt(0)&&(v=e()+v.slice(1)),f.url=v.slice(0,-4)}}}n.push(f)}return n.length?{name:a.name,message:a.message,url:d(),stack:n}:null}}function b(a,b,c,d){var e={url:b,line:c};if(e.url&&e.line){if(a.incomplete=!1,e.func||(e.func=j),a.stack.length>0&&a.stack[0].url===e.url){if(a.stack[0].line===e.line)return!1;if(!a.stack[0].line&&a.stack[0].func===e.func)return a.stack[0].line=e.line,!1}return a.stack.unshift(e),a.partial=!0,!0}return a.incomplete=!0,!1}function c(a,e){for(var h,i,k=/function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,l=[],m={},n=!1,o=c.caller;o&&!n;o=o.caller)if(o!==f&&o!==g.report){if(i={url:null,func:j,line:null,column:null},o.name?i.func=o.name:(h=k.exec(o.toString()))&&(i.func=h[1]),"undefined"==typeof i.func)try{i.func=h.input.substring(0,h.input.indexOf("{"))}catch(p){}m[""+o]?n=!0:m[""+o]=!0,l.push(i)}e&&l.splice(0,e);var q={name:a.name,message:a.message,url:d(),stack:l};return b(q,a.sourceURL||a.fileName,a.line||a.lineNumber,a.message||a.description),q}function f(b,e){var f=null;e=null==e?0:+e;try{if(f=a(b))return f}catch(h){if(g.debug)throw h}try{if(f=c(b,e+1))return f}catch(h){if(g.debug)throw h}return{name:b.name,message:b.message,url:d()}}return f.augmentStackTraceWithInitialElement=b,f.computeStackTraceFromStackProp=a,f}(),b.exports=g}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{9:9}],11:[function(a,b,c){function d(a,b){for(var c=0;c0){var i=d(c,this);~i?c.splice(i+1):c.push(this),~i?e.splice(i,1/0,g):e.push(g),~d(c,h)&&(h=b.call(this,g,h))}else c.push(h);return null==a?h instanceof Error?f(h):h:a.call(this,g,h)}}c=b.exports=e,c.getSerialize=g},{}],12:[function(a,b,c){function d(a,b){var c=(65535&a)+(65535&b),d=(a>>16)+(b>>16)+(c>>16);return d<<16|65535&c}function e(a,b){return a<>>32-b}function f(a,b,c,f,g,h){return d(e(d(d(b,a),d(f,h)),g),c)}function g(a,b,c,d,e,g,h){return f(b&c|~b&d,a,b,e,g,h)}function h(a,b,c,d,e,g,h){return f(b&d|c&~d,a,b,e,g,h)}function i(a,b,c,d,e,g,h){return f(b^c^d,a,b,e,g,h)}function j(a,b,c,d,e,g,h){return f(c^(b|~d),a,b,e,g,h)}function k(a,b){a[b>>5]|=128<>>9<<4)+14]=b;var c,e,f,k,l,m=1732584193,n=-271733879,o=-1732584194,p=271733878;for(c=0;c>5]>>>b%32&255);return c}function m(a){var b,c=[];for(c[(a.length>>2)-1]=void 0,b=0;b>5]|=(255&a.charCodeAt(b/8))<16&&(e=k(e,8*a.length)),c=0;c<16;c+=1)f[c]=909522486^e[c],g[c]=1549556828^e[c];return d=k(f.concat(m(b)),512+8*b.length),l(k(g.concat(d),640))}function p(a){var b,c,d="0123456789abcdef",e="";for(c=0;c>>4&15)+d.charAt(15&b);return e}function q(a){return unescape(encodeURIComponent(a))}function r(a){return n(q(a))}function s(a){return p(r(a))}function t(a,b){return o(q(a),q(b))}function u(a,b){return p(t(a,b))}function v(a,b,c){return b?c?t(b,a):u(b,a):c?r(a):s(a)}b.exports=v},{}]},{},[8,1,2,3,4])(8)});
+//# sourceMappingURL=raven.min.js.map
\ No newline at end of file
diff --git a/packages/raven-js/dist/angular,console,require,vue/raven.min.js.map b/packages/raven-js/dist/angular,console,require,vue/raven.min.js.map
new file mode 100644
index 000000000000..8417907bb4e5
--- /dev/null
+++ b/packages/raven-js/dist/angular,console,require,vue/raven.min.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["raven.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Raven","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length","1","_dereq_","angularPlugin","angular","RavenProvider","$get","$window","ExceptionHandlerProvider","$provide","decorator","exceptionHandler","R","$delegate","ex","cause","captureException","extra","moduleName","provider","config","setDataCallback","wrappedCallback","data","_normalizeData","angularPattern","exception","values","matches","exec","value","type","message","angularDocs","substr","addPlugin","8","9","2","consolePlugin","console","pluginOptions","logLevels","levels","push","callback","msg","captureMessage","level","pop","wrapConsoleMethod","wrapMethod","6","3","requirePlugin","wrap","deep","4","formatComponentName","vm","$root","name","_isVue","$options","_componentTag","__file","vuePlugin","Vue","_oldOnError","errorHandler","error","info","metaData","Object","prototype","toString","componentName","propsData","lifecycleHook","5","RavenConfigError","constructor","utils","originalConsoleLevel","originalConsole","sentryLevel","args","slice","arguments","safeJoin","logger","Function","apply","7","now","Date","keepOriginalCallback","original","isFunction","_hasJSON","JSON","stringify","_hasDocument","isUndefined","_document","_hasNavigator","_navigator","_lastCapturedException","_lastData","_lastEventId","_globalServer","_globalKey","_globalProject","_globalContext","_globalOptions","release","_window","SENTRY_RELEASE","id","ignoreErrors","ignoreUrls","whitelistUrls","includePaths","headers","collectWindowErrors","captureUnhandledRejections","maxMessageLength","maxUrlLength","stackTraceLimit","autoBreadcrumbs","instrument","sampleRate","sanitizeKeys","_fetchDefaults","method","keepalive","referrerPolicy","supportsReferrerPolicy","_ignoreOnError","_isRavenInstalled","_originalErrorStackTraceLimit","_originalConsole","_originalConsoleMethods","_plugins","_startTime","_wrappedBuiltIns","_breadcrumbs","_lastCapturedEvent","_location","location","_lastHref","href","_resetBackoff","TraceKit","md5","isErrorEvent","isDOMError","isDOMException","isError","isObject","isPlainObject","isString","isArray","isEmptyObject","each","objectMerge","truncate","objectFrozen","hasKey","joinRegExp","urlencode","uuid4","htmlTreeAsString","isSameException","isSameStacktrace","parseUrl","fill","supportsFetch","serializeKeysForMessage","serializeException","sanitize","dsnKeys","split","dsnPattern","document","navigator","VERSION","debug","dsn","options","_logDebug","globalOptions","key","setDSN","maxBreadcrumbs","Math","max","min","autoBreadcrumbDefaults","xhr","dom","sentry","instrumentDefaults","tryCatch","install","isSetup","report","subscribe","_handleOnErrorStackInfo","_attachPromiseRejectionHandler","_patchFunctionToString","_instrumentTryCatch","_instrumentBreadcrumbs","_drainPlugins","uri","_parseDSN","lastSlash","path","lastIndexOf","_dsn","user","_globalSecret","pass","_getGlobalServer","_globalEndpoint","context","func","undefined","_before","wrapped","_ignoreNextOnError","__raven__","__raven_wrapper__","property","__orig__","uninstall","_detachPromiseRejectionHandler","_unpatchFunctionToString","_restoreBuiltIns","_restoreConsole","U","event","reason","unhandledPromiseRejection","C","_promiseRejectionHandler","bind","addEventListener","Q","removeEventListener","trimHeadFrames","stacktrace","_getCaptureExceptionOptionsFromPlainObject","stack","computeStackTrace","_handleStackInfo","ex1","V","currentOptions","exKeys","keys","sort","fingerprint","__serialized__","test","initialCall","fileurl","url","frames","_prepareFrames","reverse","_send","captureBreadcrumb","obj","crumb","timestamp","breadcrumbCallback","result","shift","plugin","pluginArgs","setUserContext","setExtraContext","_mergeContext","setTagsContext","tags","clearContext","getContext","parse","setEnvironment","environment","setRelease","dataCallback","setBreadcrumbCallback","setShouldSendCallback","shouldSendCallback","setTransport","transport","lastException","lastEventId","ravenNotConfiguredError","afterLoad","RavenConfig","showReportDialog","eventId","encode","encodeURIComponent","qs","email","globalServer","script","createElement","async","src","head","body","appendChild","M","setTimeout","_","eventType","evt","toUpperCase","createEvent","initEvent","createEventObject","dispatchEvent","fireEvent","toLowerCase","aa","evtName","_keypressTimeout","target","category","ca","debounceDuration","tagName","isContentEditable","timeout","_breadcrumbEventHandler","clearTimeout","da","from","to","parsedLoc","parsedTo","parsedFrom","protocol","host","relative","D","_originalFunctionToString","E","wrapTimeFn","orig","fn","Array","originalCallback","wrapEventTarget","proto","hasOwnProperty","capture","secure","handleEvent","err","before","clickHandler","keypressHandler","_keypressEventHandler","wrappedBuiltIns","requestAnimationFrame","cb","eventTargets","F","wrapProp","prop","xhrproto","XMLHttpRequest","origOpen","indexOf","__raven_xhr","status_code","origSend","onreadystatechangeHandler","readyState","status","props","j","onreadystatechange","origFetch","fetchInput","Request","fetchData","then","response","attachEvent","chrome","isChromePackagedApp","app","runtime","hasPushAndReplaceState","history","pushState","replaceState","oldOnPopState","onpopstate","currentHref","_captureUrlChange","historyReplacementFunction","origHistFunction","log","consoleMethodCallback","S","builtin","T","G","installer","concat","H","str","m","allowSecretKey","K","port","B","W","stackInfo","_triggerEvent","_processException","lineno","Y","frame","_normalizeFrame","in_app","ha","stackInfoUrl","normalized","filename","line","colno","column","function","ga","prefixedMessage","transaction","ia","request","Referer","breadcrumbs","_trimBreadcrumbs","ja","urlProp","urlProps","ka","httpData","userAgent","User-Agent","referrer","z","_backoffDuration","_backoffStart","na","oa","current","last","pa","_shouldBackoff","retry","get","getResponseHeader","parseInt","Z","baseData","project","platform","_getHttpData","serverName","server_name","_sanitizeData","forEach","random","_sendProcessedPayload","qa","sa","ra","_trimPacket","allowDuplicates","_isRepeatData","event_id","_getUuid","auth","sentry_version","sentry_client","sentry_key","sentry_secret","_makeRequest","onSuccess","onError","_setBackoffState","ta","opts","evaluatedHeaders","evaluatedFetchParameters","_evaluateHash","fetchParameters","defaultFetchOptions","fetchOptions","fetch","ok","hasCORS","XDomainRequest","replace","onload","onerror","open","setRequestHeader","send","ua","hash","evaluated","A","$","setUser","setReleaseContext","10","11","12","RavenConstructor","_Raven","noConflict","Client","what","supportsErrorEvent","ErrorEvent","supportsDOMError","DOMError","supportsDOMException","DOMException","Headers","Response","supportsPromiseRejectionEvent","PromiseRejectionEvent","normalizedData","obj1","obj2","isFrozen","object","patterns","pattern","sources","len","source","RegExp","join","pairs","match","query","fragment","crypto","msCrypto","getRandomValues","arr","Uint16Array","pad","num","v","c","elem","nextStr","MAX_TRAVERSE_HEIGHT","MAX_OUTPUT_LEN","out","height","separator","sepLength","htmlElementAsString","parentNode","className","classes","attr","attrWhitelist","getAttribute","isOnlyOneTruthy","b","isBothUndefined","ex2","stack1","stack2","frames1","frames2","replacement","track","input","delimiter","output","String","utf8Length","encodeURI","jsonSize","serializeValue","maxLength","serializeObject","depth","reduce","acc","map","val","maxSize","MAX_SERIALIZE_EXCEPTION_DEPTH","MAX_SERIALIZE_EXCEPTION_SIZE","serialized","filter","MAX_SERIALIZE_KEYS_LENGTH","usedKeys","sanitizeWorker","workerInput","k","sanitizeRegExp","sanitizeMask","safeInput","o_O","getLocationHref","getLocationOrigin","origin","hostname","_slice","UNKNOWN_FUNCTION","ERROR_TYPES_RE","handler","installGlobalHandler","handlers","unsubscribe","splice","unsubscribeAll","uninstallGlobalHandler","notifyHandlers","isWindowError","inner","traceKitWindowOnError","lineNo","colNo","lastExceptionStack","augmentStackTraceWithInitialElement","processLastException","groups","_oldOnerrorHandler","_onErrorHandlerInstalled","_lastExceptionStack","_lastArgs","lastArgs","rethrow","incomplete","computeStackTraceFromStackProp","submatch","parts","element","winjs","gecko","geckoEval","chromeEval","lines","isNative","isEval","columnNumber","responseText","sourceMaps","sourceMapAddress","charAt","initial","unshift","partial","computeStackTraceByWalkingCallerChain","item","functionName","funcs","recursion","curr","caller","substring","sourceURL","fileName","lineNumber","description","haystack","needle","replacer","spaces","cycleReplacer","serializer","stringifyError","thisPos","Infinity","getSerialize","safeAdd","x","y","lsw","msw","bitRotateLeft","cnt","md5cmn","q","md5ff","d","md5gg","md5hh","md5ii","binlMD5","olda","oldb","oldc","oldd","binl2rstr","length32","fromCharCode","rstr2binl","length8","charCodeAt","rstrMD5","rstrHMACMD5","bkey","ipad","opad","rstr2hex","hexTab","str2rstrUTF8","unescape","rawMD5","hexMD5","rawHMACMD5","hexHMACMD5","string","raw"],"mappings":"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","file":"raven.min.js"}
\ No newline at end of file
diff --git a/packages/raven-js/dist/angular,console,require/raven.js b/packages/raven-js/dist/angular,console,require/raven.js
new file mode 100644
index 000000000000..8cfe6da0a7b8
--- /dev/null
+++ b/packages/raven-js/dist/angular,console,require/raven.js
@@ -0,0 +1,4139 @@
+/*! Raven.js 3.25.2 (30b6d4e) | github.com/getsentry/raven-js */
+
+/*
+ * Includes TraceKit
+ * https://github.com/getsentry/TraceKit
+ *
+ * Copyright 2018 Matt Robenolt and other contributors
+ * Released under the BSD license
+ * https://github.com/getsentry/raven-js/blob/master/LICENSE
+ *
+ */
+
+(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Raven = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o captureException(string) => captureMessage(string)
+ if (initialCall && initialCall.func === 'Raven.captureException') {
+ initialCall = stack.stack[2];
+ }
+
+ var fileurl = (initialCall && initialCall.url) || '';
+
+ if (
+ !!this._globalOptions.ignoreUrls.test &&
+ this._globalOptions.ignoreUrls.test(fileurl)
+ ) {
+ return;
+ }
+
+ if (
+ !!this._globalOptions.whitelistUrls.test &&
+ !this._globalOptions.whitelistUrls.test(fileurl)
+ ) {
+ return;
+ }
+
+ if (this._globalOptions.stacktrace || (options && options.stacktrace)) {
+ // fingerprint on msg, not stack trace (legacy behavior, could be revisited)
+ data.fingerprint = data.fingerprint == null ? msg : data.fingerprint;
+
+ options = objectMerge(
+ {
+ trimHeadFrames: 0
+ },
+ options
+ );
+ // Since we know this is a synthetic trace, the top frame (this function call)
+ // MUST be from Raven.js, so mark it for trimming
+ // We add to the trim counter so that callers can choose to trim extra frames, such
+ // as utility functions.
+ options.trimHeadFrames += 1;
+
+ var frames = this._prepareFrames(stack, options);
+ data.stacktrace = {
+ // Sentry expects frames oldest to newest
+ frames: frames.reverse()
+ };
+ }
+
+ // Make sure that fingerprint is always wrapped in an array
+ if (data.fingerprint) {
+ data.fingerprint = isArray(data.fingerprint)
+ ? data.fingerprint
+ : [data.fingerprint];
+ }
+
+ // Fire away!
+ this._send(data);
+
+ return this;
+ },
+
+ captureBreadcrumb: function(obj) {
+ var crumb = objectMerge(
+ {
+ timestamp: now() / 1000
+ },
+ obj
+ );
+
+ if (isFunction(this._globalOptions.breadcrumbCallback)) {
+ var result = this._globalOptions.breadcrumbCallback(crumb);
+
+ if (isObject(result) && !isEmptyObject(result)) {
+ crumb = result;
+ } else if (result === false) {
+ return this;
+ }
+ }
+
+ this._breadcrumbs.push(crumb);
+ if (this._breadcrumbs.length > this._globalOptions.maxBreadcrumbs) {
+ this._breadcrumbs.shift();
+ }
+ return this;
+ },
+
+ addPlugin: function(plugin /*arg1, arg2, ... argN*/) {
+ var pluginArgs = [].slice.call(arguments, 1);
+
+ this._plugins.push([plugin, pluginArgs]);
+ if (this._isRavenInstalled) {
+ this._drainPlugins();
+ }
+
+ return this;
+ },
+
+ /*
+ * Set/clear a user to be sent along with the payload.
+ *
+ * @param {object} user An object representing user data [optional]
+ * @return {Raven}
+ */
+ setUserContext: function(user) {
+ // Intentionally do not merge here since that's an unexpected behavior.
+ this._globalContext.user = user;
+
+ return this;
+ },
+
+ /*
+ * Merge extra attributes to be sent along with the payload.
+ *
+ * @param {object} extra An object representing extra data [optional]
+ * @return {Raven}
+ */
+ setExtraContext: function(extra) {
+ this._mergeContext('extra', extra);
+
+ return this;
+ },
+
+ /*
+ * Merge tags to be sent along with the payload.
+ *
+ * @param {object} tags An object representing tags [optional]
+ * @return {Raven}
+ */
+ setTagsContext: function(tags) {
+ this._mergeContext('tags', tags);
+
+ return this;
+ },
+
+ /*
+ * Clear all of the context.
+ *
+ * @return {Raven}
+ */
+ clearContext: function() {
+ this._globalContext = {};
+
+ return this;
+ },
+
+ /*
+ * Get a copy of the current context. This cannot be mutated.
+ *
+ * @return {object} copy of context
+ */
+ getContext: function() {
+ // lol javascript
+ return JSON.parse(stringify(this._globalContext));
+ },
+
+ /*
+ * Set environment of application
+ *
+ * @param {string} environment Typically something like 'production'.
+ * @return {Raven}
+ */
+ setEnvironment: function(environment) {
+ this._globalOptions.environment = environment;
+
+ return this;
+ },
+
+ /*
+ * Set release version of application
+ *
+ * @param {string} release Typically something like a git SHA to identify version
+ * @return {Raven}
+ */
+ setRelease: function(release) {
+ this._globalOptions.release = release;
+
+ return this;
+ },
+
+ /*
+ * Set the dataCallback option
+ *
+ * @param {function} callback The callback to run which allows the
+ * data blob to be mutated before sending
+ * @return {Raven}
+ */
+ setDataCallback: function(callback) {
+ var original = this._globalOptions.dataCallback;
+ this._globalOptions.dataCallback = keepOriginalCallback(original, callback);
+ return this;
+ },
+
+ /*
+ * Set the breadcrumbCallback option
+ *
+ * @param {function} callback The callback to run which allows filtering
+ * or mutating breadcrumbs
+ * @return {Raven}
+ */
+ setBreadcrumbCallback: function(callback) {
+ var original = this._globalOptions.breadcrumbCallback;
+ this._globalOptions.breadcrumbCallback = keepOriginalCallback(original, callback);
+ return this;
+ },
+
+ /*
+ * Set the shouldSendCallback option
+ *
+ * @param {function} callback The callback to run which allows
+ * introspecting the blob before sending
+ * @return {Raven}
+ */
+ setShouldSendCallback: function(callback) {
+ var original = this._globalOptions.shouldSendCallback;
+ this._globalOptions.shouldSendCallback = keepOriginalCallback(original, callback);
+ return this;
+ },
+
+ /**
+ * Override the default HTTP transport mechanism that transmits data
+ * to the Sentry server.
+ *
+ * @param {function} transport Function invoked instead of the default
+ * `makeRequest` handler.
+ *
+ * @return {Raven}
+ */
+ setTransport: function(transport) {
+ this._globalOptions.transport = transport;
+
+ return this;
+ },
+
+ /*
+ * Get the latest raw exception that was captured by Raven.
+ *
+ * @return {error}
+ */
+ lastException: function() {
+ return this._lastCapturedException;
+ },
+
+ /*
+ * Get the last event id
+ *
+ * @return {string}
+ */
+ lastEventId: function() {
+ return this._lastEventId;
+ },
+
+ /*
+ * Determine if Raven is setup and ready to go.
+ *
+ * @return {boolean}
+ */
+ isSetup: function() {
+ if (!this._hasJSON) return false; // needs JSON support
+ if (!this._globalServer) {
+ if (!this.ravenNotConfiguredError) {
+ this.ravenNotConfiguredError = true;
+ this._logDebug('error', 'Error: Raven has not been configured.');
+ }
+ return false;
+ }
+ return true;
+ },
+
+ afterLoad: function() {
+ // TODO: remove window dependence?
+
+ // Attempt to initialize Raven on load
+ var RavenConfig = _window.RavenConfig;
+ if (RavenConfig) {
+ this.config(RavenConfig.dsn, RavenConfig.config).install();
+ }
+ },
+
+ showReportDialog: function(options) {
+ if (
+ !_document // doesn't work without a document (React native)
+ )
+ return;
+
+ options = options || {};
+
+ var lastEventId = options.eventId || this.lastEventId();
+ if (!lastEventId) {
+ throw new RavenConfigError('Missing eventId');
+ }
+
+ var dsn = options.dsn || this._dsn;
+ if (!dsn) {
+ throw new RavenConfigError('Missing DSN');
+ }
+
+ var encode = encodeURIComponent;
+ var qs = '';
+ qs += '?eventId=' + encode(lastEventId);
+ qs += '&dsn=' + encode(dsn);
+
+ var user = options.user || this._globalContext.user;
+ if (user) {
+ if (user.name) qs += '&name=' + encode(user.name);
+ if (user.email) qs += '&email=' + encode(user.email);
+ }
+
+ var globalServer = this._getGlobalServer(this._parseDSN(dsn));
+
+ var script = _document.createElement('script');
+ script.async = true;
+ script.src = globalServer + '/api/embed/error-page/' + qs;
+ (_document.head || _document.body).appendChild(script);
+ },
+
+ /**** Private functions ****/
+ _ignoreNextOnError: function() {
+ var self = this;
+ this._ignoreOnError += 1;
+ setTimeout(function() {
+ // onerror should trigger before setTimeout
+ self._ignoreOnError -= 1;
+ });
+ },
+
+ _triggerEvent: function(eventType, options) {
+ // NOTE: `event` is a native browser thing, so let's avoid conflicting wiht it
+ var evt, key;
+
+ if (!this._hasDocument) return;
+
+ options = options || {};
+
+ eventType = 'raven' + eventType.substr(0, 1).toUpperCase() + eventType.substr(1);
+
+ if (_document.createEvent) {
+ evt = _document.createEvent('HTMLEvents');
+ evt.initEvent(eventType, true, true);
+ } else {
+ evt = _document.createEventObject();
+ evt.eventType = eventType;
+ }
+
+ for (key in options)
+ if (hasKey(options, key)) {
+ evt[key] = options[key];
+ }
+
+ if (_document.createEvent) {
+ // IE9 if standards
+ _document.dispatchEvent(evt);
+ } else {
+ // IE8 regardless of Quirks or Standards
+ // IE9 if quirks
+ try {
+ _document.fireEvent('on' + evt.eventType.toLowerCase(), evt);
+ } catch (e) {
+ // Do nothing
+ }
+ }
+ },
+
+ /**
+ * Wraps addEventListener to capture UI breadcrumbs
+ * @param evtName the event name (e.g. "click")
+ * @returns {Function}
+ * @private
+ */
+ _breadcrumbEventHandler: function(evtName) {
+ var self = this;
+ return function(evt) {
+ // reset keypress timeout; e.g. triggering a 'click' after
+ // a 'keypress' will reset the keypress debounce so that a new
+ // set of keypresses can be recorded
+ self._keypressTimeout = null;
+
+ // It's possible this handler might trigger multiple times for the same
+ // event (e.g. event propagation through node ancestors). Ignore if we've
+ // already captured the event.
+ if (self._lastCapturedEvent === evt) return;
+
+ self._lastCapturedEvent = evt;
+
+ // try/catch both:
+ // - accessing evt.target (see getsentry/raven-js#838, #768)
+ // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly
+ // can throw an exception in some circumstances.
+ var target;
+ try {
+ target = htmlTreeAsString(evt.target);
+ } catch (e) {
+ target = '';
+ }
+
+ self.captureBreadcrumb({
+ category: 'ui.' + evtName, // e.g. ui.click, ui.input
+ message: target
+ });
+ };
+ },
+
+ /**
+ * Wraps addEventListener to capture keypress UI events
+ * @returns {Function}
+ * @private
+ */
+ _keypressEventHandler: function() {
+ var self = this,
+ debounceDuration = 1000; // milliseconds
+
+ // TODO: if somehow user switches keypress target before
+ // debounce timeout is triggered, we will only capture
+ // a single breadcrumb from the FIRST target (acceptable?)
+ return function(evt) {
+ var target;
+ try {
+ target = evt.target;
+ } catch (e) {
+ // just accessing event properties can throw an exception in some rare circumstances
+ // see: https://github.com/getsentry/raven-js/issues/838
+ return;
+ }
+ var tagName = target && target.tagName;
+
+ // only consider keypress events on actual input elements
+ // this will disregard keypresses targeting body (e.g. tabbing
+ // through elements, hotkeys, etc)
+ if (
+ !tagName ||
+ (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && !target.isContentEditable)
+ )
+ return;
+
+ // record first keypress in a series, but ignore subsequent
+ // keypresses until debounce clears
+ var timeout = self._keypressTimeout;
+ if (!timeout) {
+ self._breadcrumbEventHandler('input')(evt);
+ }
+ clearTimeout(timeout);
+ self._keypressTimeout = setTimeout(function() {
+ self._keypressTimeout = null;
+ }, debounceDuration);
+ };
+ },
+
+ /**
+ * Captures a breadcrumb of type "navigation", normalizing input URLs
+ * @param to the originating URL
+ * @param from the target URL
+ * @private
+ */
+ _captureUrlChange: function(from, to) {
+ var parsedLoc = parseUrl(this._location.href);
+ var parsedTo = parseUrl(to);
+ var parsedFrom = parseUrl(from);
+
+ // because onpopstate only tells you the "new" (to) value of location.href, and
+ // not the previous (from) value, we need to track the value of the current URL
+ // state ourselves
+ this._lastHref = to;
+
+ // Use only the path component of the URL if the URL matches the current
+ // document (almost all the time when using pushState)
+ if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host)
+ to = parsedTo.relative;
+ if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host)
+ from = parsedFrom.relative;
+
+ this.captureBreadcrumb({
+ category: 'navigation',
+ data: {
+ to: to,
+ from: from
+ }
+ });
+ },
+
+ _patchFunctionToString: function() {
+ var self = this;
+ self._originalFunctionToString = Function.prototype.toString;
+ // eslint-disable-next-line no-extend-native
+ Function.prototype.toString = function() {
+ if (typeof this === 'function' && this.__raven__) {
+ return self._originalFunctionToString.apply(this.__orig__, arguments);
+ }
+ return self._originalFunctionToString.apply(this, arguments);
+ };
+ },
+
+ _unpatchFunctionToString: function() {
+ if (this._originalFunctionToString) {
+ // eslint-disable-next-line no-extend-native
+ Function.prototype.toString = this._originalFunctionToString;
+ }
+ },
+
+ /**
+ * Wrap timer functions and event targets to catch errors and provide
+ * better metadata.
+ */
+ _instrumentTryCatch: function() {
+ var self = this;
+
+ var wrappedBuiltIns = self._wrappedBuiltIns;
+
+ function wrapTimeFn(orig) {
+ return function(fn, t) {
+ // preserve arity
+ // Make a copy of the arguments to prevent deoptimization
+ // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments
+ var args = new Array(arguments.length);
+ for (var i = 0; i < args.length; ++i) {
+ args[i] = arguments[i];
+ }
+ var originalCallback = args[0];
+ if (isFunction(originalCallback)) {
+ args[0] = self.wrap(originalCallback);
+ }
+
+ // IE < 9 doesn't support .call/.apply on setInterval/setTimeout, but it
+ // also supports only two arguments and doesn't care what this is, so we
+ // can just call the original function directly.
+ if (orig.apply) {
+ return orig.apply(this, args);
+ } else {
+ return orig(args[0], args[1]);
+ }
+ };
+ }
+
+ var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;
+
+ function wrapEventTarget(global) {
+ var proto = _window[global] && _window[global].prototype;
+ if (proto && proto.hasOwnProperty && proto.hasOwnProperty('addEventListener')) {
+ fill(
+ proto,
+ 'addEventListener',
+ function(orig) {
+ return function(evtName, fn, capture, secure) {
+ // preserve arity
+ try {
+ if (fn && fn.handleEvent) {
+ fn.handleEvent = self.wrap(fn.handleEvent);
+ }
+ } catch (err) {
+ // can sometimes get 'Permission denied to access property "handle Event'
+ }
+
+ // More breadcrumb DOM capture ... done here and not in `_instrumentBreadcrumbs`
+ // so that we don't have more than one wrapper function
+ var before, clickHandler, keypressHandler;
+
+ if (
+ autoBreadcrumbs &&
+ autoBreadcrumbs.dom &&
+ (global === 'EventTarget' || global === 'Node')
+ ) {
+ // NOTE: generating multiple handlers per addEventListener invocation, should
+ // revisit and verify we can just use one (almost certainly)
+ clickHandler = self._breadcrumbEventHandler('click');
+ keypressHandler = self._keypressEventHandler();
+ before = function(evt) {
+ // need to intercept every DOM event in `before` argument, in case that
+ // same wrapped method is re-used for different events (e.g. mousemove THEN click)
+ // see #724
+ if (!evt) return;
+
+ var eventType;
+ try {
+ eventType = evt.type;
+ } catch (e) {
+ // just accessing event properties can throw an exception in some rare circumstances
+ // see: https://github.com/getsentry/raven-js/issues/838
+ return;
+ }
+ if (eventType === 'click') return clickHandler(evt);
+ else if (eventType === 'keypress') return keypressHandler(evt);
+ };
+ }
+ return orig.call(
+ this,
+ evtName,
+ self.wrap(fn, undefined, before),
+ capture,
+ secure
+ );
+ };
+ },
+ wrappedBuiltIns
+ );
+ fill(
+ proto,
+ 'removeEventListener',
+ function(orig) {
+ return function(evt, fn, capture, secure) {
+ try {
+ fn = fn && (fn.__raven_wrapper__ ? fn.__raven_wrapper__ : fn);
+ } catch (e) {
+ // ignore, accessing __raven_wrapper__ will throw in some Selenium environments
+ }
+ return orig.call(this, evt, fn, capture, secure);
+ };
+ },
+ wrappedBuiltIns
+ );
+ }
+ }
+
+ fill(_window, 'setTimeout', wrapTimeFn, wrappedBuiltIns);
+ fill(_window, 'setInterval', wrapTimeFn, wrappedBuiltIns);
+ if (_window.requestAnimationFrame) {
+ fill(
+ _window,
+ 'requestAnimationFrame',
+ function(orig) {
+ return function(cb) {
+ return orig(self.wrap(cb));
+ };
+ },
+ wrappedBuiltIns
+ );
+ }
+
+ // event targets borrowed from bugsnag-js:
+ // https://github.com/bugsnag/bugsnag-js/blob/master/src/bugsnag.js#L666
+ var eventTargets = [
+ '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'
+ ];
+ for (var i = 0; i < eventTargets.length; i++) {
+ wrapEventTarget(eventTargets[i]);
+ }
+ },
+
+ /**
+ * Instrument browser built-ins w/ breadcrumb capturing
+ * - XMLHttpRequests
+ * - DOM interactions (click/typing)
+ * - window.location changes
+ * - console
+ *
+ * Can be disabled or individually configured via the `autoBreadcrumbs` config option
+ */
+ _instrumentBreadcrumbs: function() {
+ var self = this;
+ var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;
+
+ var wrappedBuiltIns = self._wrappedBuiltIns;
+
+ function wrapProp(prop, xhr) {
+ if (prop in xhr && isFunction(xhr[prop])) {
+ fill(xhr, prop, function(orig) {
+ return self.wrap(orig);
+ }); // intentionally don't track filled methods on XHR instances
+ }
+ }
+
+ if (autoBreadcrumbs.xhr && 'XMLHttpRequest' in _window) {
+ var xhrproto = _window.XMLHttpRequest && _window.XMLHttpRequest.prototype;
+ fill(
+ xhrproto,
+ 'open',
+ function(origOpen) {
+ return function(method, url) {
+ // preserve arity
+
+ // if Sentry key appears in URL, don't capture
+ if (isString(url) && url.indexOf(self._globalKey) === -1) {
+ this.__raven_xhr = {
+ method: method,
+ url: url,
+ status_code: null
+ };
+ }
+
+ return origOpen.apply(this, arguments);
+ };
+ },
+ wrappedBuiltIns
+ );
+
+ fill(
+ xhrproto,
+ 'send',
+ function(origSend) {
+ return function() {
+ // preserve arity
+ var xhr = this;
+
+ function onreadystatechangeHandler() {
+ if (xhr.__raven_xhr && xhr.readyState === 4) {
+ try {
+ // touching statusCode in some platforms throws
+ // an exception
+ xhr.__raven_xhr.status_code = xhr.status;
+ } catch (e) {
+ /* do nothing */
+ }
+
+ self.captureBreadcrumb({
+ type: 'http',
+ category: 'xhr',
+ data: xhr.__raven_xhr
+ });
+ }
+ }
+
+ var props = ['onload', 'onerror', 'onprogress'];
+ for (var j = 0; j < props.length; j++) {
+ wrapProp(props[j], xhr);
+ }
+
+ if ('onreadystatechange' in xhr && isFunction(xhr.onreadystatechange)) {
+ fill(
+ xhr,
+ 'onreadystatechange',
+ function(orig) {
+ return self.wrap(orig, undefined, onreadystatechangeHandler);
+ } /* intentionally don't track this instrumentation */
+ );
+ } else {
+ // if onreadystatechange wasn't actually set by the page on this xhr, we
+ // are free to set our own and capture the breadcrumb
+ xhr.onreadystatechange = onreadystatechangeHandler;
+ }
+
+ return origSend.apply(this, arguments);
+ };
+ },
+ wrappedBuiltIns
+ );
+ }
+
+ if (autoBreadcrumbs.xhr && supportsFetch()) {
+ fill(
+ _window,
+ 'fetch',
+ function(origFetch) {
+ return function() {
+ // preserve arity
+ // Make a copy of the arguments to prevent deoptimization
+ // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments
+ var args = new Array(arguments.length);
+ for (var i = 0; i < args.length; ++i) {
+ args[i] = arguments[i];
+ }
+
+ var fetchInput = args[0];
+ var method = 'GET';
+ var url;
+
+ if (typeof fetchInput === 'string') {
+ url = fetchInput;
+ } else if ('Request' in _window && fetchInput instanceof _window.Request) {
+ url = fetchInput.url;
+ if (fetchInput.method) {
+ method = fetchInput.method;
+ }
+ } else {
+ url = '' + fetchInput;
+ }
+
+ // if Sentry key appears in URL, don't capture, as it's our own request
+ if (url.indexOf(self._globalKey) !== -1) {
+ return origFetch.apply(this, args);
+ }
+
+ if (args[1] && args[1].method) {
+ method = args[1].method;
+ }
+
+ var fetchData = {
+ method: method,
+ url: url,
+ status_code: null
+ };
+
+ return origFetch
+ .apply(this, args)
+ .then(function(response) {
+ fetchData.status_code = response.status;
+
+ self.captureBreadcrumb({
+ type: 'http',
+ category: 'fetch',
+ data: fetchData
+ });
+
+ return response;
+ })
+ ['catch'](function(err) {
+ // if there is an error performing the request
+ self.captureBreadcrumb({
+ type: 'http',
+ category: 'fetch',
+ data: fetchData,
+ level: 'error'
+ });
+
+ throw err;
+ });
+ };
+ },
+ wrappedBuiltIns
+ );
+ }
+
+ // Capture breadcrumbs from any click that is unhandled / bubbled up all the way
+ // to the document. Do this before we instrument addEventListener.
+ if (autoBreadcrumbs.dom && this._hasDocument) {
+ if (_document.addEventListener) {
+ _document.addEventListener('click', self._breadcrumbEventHandler('click'), false);
+ _document.addEventListener('keypress', self._keypressEventHandler(), false);
+ } else if (_document.attachEvent) {
+ // IE8 Compatibility
+ _document.attachEvent('onclick', self._breadcrumbEventHandler('click'));
+ _document.attachEvent('onkeypress', self._keypressEventHandler());
+ }
+ }
+
+ // record navigation (URL) changes
+ // NOTE: in Chrome App environment, touching history.pushState, *even inside
+ // a try/catch block*, will cause Chrome to output an error to console.error
+ // borrowed from: https://github.com/angular/angular.js/pull/13945/files
+ var chrome = _window.chrome;
+ var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime;
+ var hasPushAndReplaceState =
+ !isChromePackagedApp &&
+ _window.history &&
+ _window.history.pushState &&
+ _window.history.replaceState;
+ if (autoBreadcrumbs.location && hasPushAndReplaceState) {
+ // TODO: remove onpopstate handler on uninstall()
+ var oldOnPopState = _window.onpopstate;
+ _window.onpopstate = function() {
+ var currentHref = self._location.href;
+ self._captureUrlChange(self._lastHref, currentHref);
+
+ if (oldOnPopState) {
+ return oldOnPopState.apply(this, arguments);
+ }
+ };
+
+ var historyReplacementFunction = function(origHistFunction) {
+ // note history.pushState.length is 0; intentionally not declaring
+ // params to preserve 0 arity
+ return function(/* state, title, url */) {
+ var url = arguments.length > 2 ? arguments[2] : undefined;
+
+ // url argument is optional
+ if (url) {
+ // coerce to string (this is what pushState does)
+ self._captureUrlChange(self._lastHref, url + '');
+ }
+
+ return origHistFunction.apply(this, arguments);
+ };
+ };
+
+ fill(_window.history, 'pushState', historyReplacementFunction, wrappedBuiltIns);
+ fill(_window.history, 'replaceState', historyReplacementFunction, wrappedBuiltIns);
+ }
+
+ if (autoBreadcrumbs.console && 'console' in _window && console.log) {
+ // console
+ var consoleMethodCallback = function(msg, data) {
+ self.captureBreadcrumb({
+ message: msg,
+ level: data.level,
+ category: 'console'
+ });
+ };
+
+ each(['debug', 'info', 'warn', 'error', 'log'], function(_, level) {
+ wrapConsoleMethod(console, level, consoleMethodCallback);
+ });
+ }
+ },
+
+ _restoreBuiltIns: function() {
+ // restore any wrapped builtins
+ var builtin;
+ while (this._wrappedBuiltIns.length) {
+ builtin = this._wrappedBuiltIns.shift();
+
+ var obj = builtin[0],
+ name = builtin[1],
+ orig = builtin[2];
+
+ obj[name] = orig;
+ }
+ },
+
+ _restoreConsole: function() {
+ // eslint-disable-next-line guard-for-in
+ for (var method in this._originalConsoleMethods) {
+ this._originalConsole[method] = this._originalConsoleMethods[method];
+ }
+ },
+
+ _drainPlugins: function() {
+ var self = this;
+
+ // FIX ME TODO
+ each(this._plugins, function(_, plugin) {
+ var installer = plugin[0];
+ var args = plugin[1];
+ installer.apply(self, [self].concat(args));
+ });
+ },
+
+ _parseDSN: function(str) {
+ var m = dsnPattern.exec(str),
+ dsn = {},
+ i = 7;
+
+ try {
+ while (i--) dsn[dsnKeys[i]] = m[i] || '';
+ } catch (e) {
+ throw new RavenConfigError('Invalid DSN: ' + str);
+ }
+
+ if (dsn.pass && !this._globalOptions.allowSecretKey) {
+ throw new RavenConfigError(
+ 'Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key'
+ );
+ }
+
+ return dsn;
+ },
+
+ _getGlobalServer: function(uri) {
+ // assemble the endpoint from the uri pieces
+ var globalServer = '//' + uri.host + (uri.port ? ':' + uri.port : '');
+
+ if (uri.protocol) {
+ globalServer = uri.protocol + ':' + globalServer;
+ }
+ return globalServer;
+ },
+
+ _handleOnErrorStackInfo: function() {
+ // if we are intentionally ignoring errors via onerror, bail out
+ if (!this._ignoreOnError) {
+ this._handleStackInfo.apply(this, arguments);
+ }
+ },
+
+ _handleStackInfo: function(stackInfo, options) {
+ var frames = this._prepareFrames(stackInfo, options);
+
+ this._triggerEvent('handle', {
+ stackInfo: stackInfo,
+ options: options
+ });
+
+ this._processException(
+ stackInfo.name,
+ stackInfo.message,
+ stackInfo.url,
+ stackInfo.lineno,
+ frames,
+ options
+ );
+ },
+
+ _prepareFrames: function(stackInfo, options) {
+ var self = this;
+ var frames = [];
+ if (stackInfo.stack && stackInfo.stack.length) {
+ each(stackInfo.stack, function(i, stack) {
+ var frame = self._normalizeFrame(stack, stackInfo.url);
+ if (frame) {
+ frames.push(frame);
+ }
+ });
+
+ // e.g. frames captured via captureMessage throw
+ if (options && options.trimHeadFrames) {
+ for (var j = 0; j < options.trimHeadFrames && j < frames.length; j++) {
+ frames[j].in_app = false;
+ }
+ }
+ }
+ frames = frames.slice(0, this._globalOptions.stackTraceLimit);
+ return frames;
+ },
+
+ _normalizeFrame: function(frame, stackInfoUrl) {
+ // normalize the frames data
+ var normalized = {
+ filename: frame.url,
+ lineno: frame.line,
+ colno: frame.column,
+ function: frame.func || '?'
+ };
+
+ // Case when we don't have any information about the error
+ // E.g. throwing a string or raw object, instead of an `Error` in Firefox
+ // Generating synthetic error doesn't add any value here
+ //
+ // We should probably somehow let a user know that they should fix their code
+ if (!frame.url) {
+ normalized.filename = stackInfoUrl; // fallback to whole stacks url from onerror handler
+ }
+
+ normalized.in_app = !// determine if an exception came from outside of our app
+ // first we check the global includePaths list.
+ (
+ (!!this._globalOptions.includePaths.test &&
+ !this._globalOptions.includePaths.test(normalized.filename)) ||
+ // Now we check for fun, if the function name is Raven or TraceKit
+ /(Raven|TraceKit)\./.test(normalized['function']) ||
+ // finally, we do a last ditch effort and check for raven.min.js
+ /raven\.(min\.)?js$/.test(normalized.filename)
+ );
+
+ return normalized;
+ },
+
+ _processException: function(type, message, fileurl, lineno, frames, options) {
+ var prefixedMessage = (type ? type + ': ' : '') + (message || '');
+ if (
+ !!this._globalOptions.ignoreErrors.test &&
+ (this._globalOptions.ignoreErrors.test(message) ||
+ this._globalOptions.ignoreErrors.test(prefixedMessage))
+ ) {
+ return;
+ }
+
+ var stacktrace;
+
+ if (frames && frames.length) {
+ fileurl = frames[0].filename || fileurl;
+ // Sentry expects frames oldest to newest
+ // and JS sends them as newest to oldest
+ frames.reverse();
+ stacktrace = {frames: frames};
+ } else if (fileurl) {
+ stacktrace = {
+ frames: [
+ {
+ filename: fileurl,
+ lineno: lineno,
+ in_app: true
+ }
+ ]
+ };
+ }
+
+ if (
+ !!this._globalOptions.ignoreUrls.test &&
+ this._globalOptions.ignoreUrls.test(fileurl)
+ ) {
+ return;
+ }
+
+ if (
+ !!this._globalOptions.whitelistUrls.test &&
+ !this._globalOptions.whitelistUrls.test(fileurl)
+ ) {
+ return;
+ }
+
+ var data = objectMerge(
+ {
+ // sentry.interfaces.Exception
+ exception: {
+ values: [
+ {
+ type: type,
+ value: message,
+ stacktrace: stacktrace
+ }
+ ]
+ },
+ transaction: fileurl
+ },
+ options
+ );
+
+ // Fire away!
+ this._send(data);
+ },
+
+ _trimPacket: function(data) {
+ // For now, we only want to truncate the two different messages
+ // but this could/should be expanded to just trim everything
+ var max = this._globalOptions.maxMessageLength;
+ if (data.message) {
+ data.message = truncate(data.message, max);
+ }
+ if (data.exception) {
+ var exception = data.exception.values[0];
+ exception.value = truncate(exception.value, max);
+ }
+
+ var request = data.request;
+ if (request) {
+ if (request.url) {
+ request.url = truncate(request.url, this._globalOptions.maxUrlLength);
+ }
+ if (request.Referer) {
+ request.Referer = truncate(request.Referer, this._globalOptions.maxUrlLength);
+ }
+ }
+
+ if (data.breadcrumbs && data.breadcrumbs.values)
+ this._trimBreadcrumbs(data.breadcrumbs);
+
+ return data;
+ },
+
+ /**
+ * Truncate breadcrumb values (right now just URLs)
+ */
+ _trimBreadcrumbs: function(breadcrumbs) {
+ // known breadcrumb properties with urls
+ // TODO: also consider arbitrary prop values that start with (https?)?://
+ var urlProps = ['to', 'from', 'url'],
+ urlProp,
+ crumb,
+ data;
+
+ for (var i = 0; i < breadcrumbs.values.length; ++i) {
+ crumb = breadcrumbs.values[i];
+ if (
+ !crumb.hasOwnProperty('data') ||
+ !isObject(crumb.data) ||
+ objectFrozen(crumb.data)
+ )
+ continue;
+
+ data = objectMerge({}, crumb.data);
+ for (var j = 0; j < urlProps.length; ++j) {
+ urlProp = urlProps[j];
+ if (data.hasOwnProperty(urlProp) && data[urlProp]) {
+ data[urlProp] = truncate(data[urlProp], this._globalOptions.maxUrlLength);
+ }
+ }
+ breadcrumbs.values[i].data = data;
+ }
+ },
+
+ _getHttpData: function() {
+ if (!this._hasNavigator && !this._hasDocument) return;
+ var httpData = {};
+
+ if (this._hasNavigator && _navigator.userAgent) {
+ httpData.headers = {
+ 'User-Agent': _navigator.userAgent
+ };
+ }
+
+ // Check in `window` instead of `document`, as we may be in ServiceWorker environment
+ if (_window.location && _window.location.href) {
+ httpData.url = _window.location.href;
+ }
+
+ if (this._hasDocument && _document.referrer) {
+ if (!httpData.headers) httpData.headers = {};
+ httpData.headers.Referer = _document.referrer;
+ }
+
+ return httpData;
+ },
+
+ _resetBackoff: function() {
+ this._backoffDuration = 0;
+ this._backoffStart = null;
+ },
+
+ _shouldBackoff: function() {
+ return this._backoffDuration && now() - this._backoffStart < this._backoffDuration;
+ },
+
+ /**
+ * Returns true if the in-process data payload matches the signature
+ * of the previously-sent data
+ *
+ * NOTE: This has to be done at this level because TraceKit can generate
+ * data from window.onerror WITHOUT an exception object (IE8, IE9,
+ * other old browsers). This can take the form of an "exception"
+ * data object with a single frame (derived from the onerror args).
+ */
+ _isRepeatData: function(current) {
+ var last = this._lastData;
+
+ if (
+ !last ||
+ current.message !== last.message || // defined for captureMessage
+ current.transaction !== last.transaction // defined for captureException/onerror
+ )
+ return false;
+
+ // Stacktrace interface (i.e. from captureMessage)
+ if (current.stacktrace || last.stacktrace) {
+ return isSameStacktrace(current.stacktrace, last.stacktrace);
+ } else if (current.exception || last.exception) {
+ // Exception interface (i.e. from captureException/onerror)
+ return isSameException(current.exception, last.exception);
+ }
+
+ return true;
+ },
+
+ _setBackoffState: function(request) {
+ // If we are already in a backoff state, don't change anything
+ if (this._shouldBackoff()) {
+ return;
+ }
+
+ var status = request.status;
+
+ // 400 - project_id doesn't exist or some other fatal
+ // 401 - invalid/revoked dsn
+ // 429 - too many requests
+ if (!(status === 400 || status === 401 || status === 429)) return;
+
+ var retry;
+ try {
+ // If Retry-After is not in Access-Control-Expose-Headers, most
+ // browsers will throw an exception trying to access it
+ if (supportsFetch()) {
+ retry = request.headers.get('Retry-After');
+ } else {
+ retry = request.getResponseHeader('Retry-After');
+ }
+
+ // Retry-After is returned in seconds
+ retry = parseInt(retry, 10) * 1000;
+ } catch (e) {
+ /* eslint no-empty:0 */
+ }
+
+ this._backoffDuration = retry
+ ? // If Sentry server returned a Retry-After value, use it
+ retry
+ : // Otherwise, double the last backoff duration (starts at 1 sec)
+ this._backoffDuration * 2 || 1000;
+
+ this._backoffStart = now();
+ },
+
+ _send: function(data) {
+ var globalOptions = this._globalOptions;
+
+ var baseData = {
+ project: this._globalProject,
+ logger: globalOptions.logger,
+ platform: 'javascript'
+ },
+ httpData = this._getHttpData();
+
+ if (httpData) {
+ baseData.request = httpData;
+ }
+
+ // HACK: delete `trimHeadFrames` to prevent from appearing in outbound payload
+ if (data.trimHeadFrames) delete data.trimHeadFrames;
+
+ data = objectMerge(baseData, data);
+
+ // Merge in the tags and extra separately since objectMerge doesn't handle a deep merge
+ data.tags = objectMerge(objectMerge({}, this._globalContext.tags), data.tags);
+ data.extra = objectMerge(objectMerge({}, this._globalContext.extra), data.extra);
+
+ // Send along our own collected metadata with extra
+ data.extra['session:duration'] = now() - this._startTime;
+
+ if (this._breadcrumbs && this._breadcrumbs.length > 0) {
+ // intentionally make shallow copy so that additions
+ // to breadcrumbs aren't accidentally sent in this request
+ data.breadcrumbs = {
+ values: [].slice.call(this._breadcrumbs, 0)
+ };
+ }
+
+ if (this._globalContext.user) {
+ // sentry.interfaces.User
+ data.user = this._globalContext.user;
+ }
+
+ // Include the environment if it's defined in globalOptions
+ if (globalOptions.environment) data.environment = globalOptions.environment;
+
+ // Include the release if it's defined in globalOptions
+ if (globalOptions.release) data.release = globalOptions.release;
+
+ // Include server_name if it's defined in globalOptions
+ if (globalOptions.serverName) data.server_name = globalOptions.serverName;
+
+ data = this._sanitizeData(data);
+
+ // Cleanup empty properties before sending them to the server
+ Object.keys(data).forEach(function(key) {
+ if (data[key] == null || data[key] === '' || isEmptyObject(data[key])) {
+ delete data[key];
+ }
+ });
+
+ if (isFunction(globalOptions.dataCallback)) {
+ data = globalOptions.dataCallback(data) || data;
+ }
+
+ // Why??????????
+ if (!data || isEmptyObject(data)) {
+ return;
+ }
+
+ // Check if the request should be filtered or not
+ if (
+ isFunction(globalOptions.shouldSendCallback) &&
+ !globalOptions.shouldSendCallback(data)
+ ) {
+ return;
+ }
+
+ // Backoff state: Sentry server previously responded w/ an error (e.g. 429 - too many requests),
+ // so drop requests until "cool-off" period has elapsed.
+ if (this._shouldBackoff()) {
+ this._logDebug('warn', 'Raven dropped error due to backoff: ', data);
+ return;
+ }
+
+ if (typeof globalOptions.sampleRate === 'number') {
+ if (Math.random() < globalOptions.sampleRate) {
+ this._sendProcessedPayload(data);
+ }
+ } else {
+ this._sendProcessedPayload(data);
+ }
+ },
+
+ _sanitizeData: function(data) {
+ return sanitize(data, this._globalOptions.sanitizeKeys);
+ },
+
+ _getUuid: function() {
+ return uuid4();
+ },
+
+ _sendProcessedPayload: function(data, callback) {
+ var self = this;
+ var globalOptions = this._globalOptions;
+
+ if (!this.isSetup()) return;
+
+ // Try and clean up the packet before sending by truncating long values
+ data = this._trimPacket(data);
+
+ // ideally duplicate error testing should occur *before* dataCallback/shouldSendCallback,
+ // but this would require copying an un-truncated copy of the data packet, which can be
+ // arbitrarily deep (extra_data) -- could be worthwhile? will revisit
+ if (!this._globalOptions.allowDuplicates && this._isRepeatData(data)) {
+ this._logDebug('warn', 'Raven dropped repeat event: ', data);
+ return;
+ }
+
+ // Send along an event_id if not explicitly passed.
+ // This event_id can be used to reference the error within Sentry itself.
+ // Set lastEventId after we know the error should actually be sent
+ this._lastEventId = data.event_id || (data.event_id = this._getUuid());
+
+ // Store outbound payload after trim
+ this._lastData = data;
+
+ this._logDebug('debug', 'Raven about to send:', data);
+
+ var auth = {
+ sentry_version: '7',
+ sentry_client: 'raven-js/' + this.VERSION,
+ sentry_key: this._globalKey
+ };
+
+ if (this._globalSecret) {
+ auth.sentry_secret = this._globalSecret;
+ }
+
+ var exception = data.exception && data.exception.values[0];
+
+ // only capture 'sentry' breadcrumb is autoBreadcrumbs is truthy
+ if (
+ this._globalOptions.autoBreadcrumbs &&
+ this._globalOptions.autoBreadcrumbs.sentry
+ ) {
+ this.captureBreadcrumb({
+ category: 'sentry',
+ message: exception
+ ? (exception.type ? exception.type + ': ' : '') + exception.value
+ : data.message,
+ event_id: data.event_id,
+ level: data.level || 'error' // presume error unless specified
+ });
+ }
+
+ var url = this._globalEndpoint;
+ (globalOptions.transport || this._makeRequest).call(this, {
+ url: url,
+ auth: auth,
+ data: data,
+ options: globalOptions,
+ onSuccess: function success() {
+ self._resetBackoff();
+
+ self._triggerEvent('success', {
+ data: data,
+ src: url
+ });
+ callback && callback();
+ },
+ onError: function failure(error) {
+ self._logDebug('error', 'Raven transport failed to send: ', error);
+
+ if (error.request) {
+ self._setBackoffState(error.request);
+ }
+
+ self._triggerEvent('failure', {
+ data: data,
+ src: url
+ });
+ error = error || new Error('Raven send failed (no additional details provided)');
+ callback && callback(error);
+ }
+ });
+ },
+
+ _makeRequest: function(opts) {
+ // Auth is intentionally sent as part of query string (NOT as custom HTTP header) to avoid preflight CORS requests
+ var url = opts.url + '?' + urlencode(opts.auth);
+
+ var evaluatedHeaders = null;
+ var evaluatedFetchParameters = {};
+
+ if (opts.options.headers) {
+ evaluatedHeaders = this._evaluateHash(opts.options.headers);
+ }
+
+ if (opts.options.fetchParameters) {
+ evaluatedFetchParameters = this._evaluateHash(opts.options.fetchParameters);
+ }
+
+ if (supportsFetch()) {
+ evaluatedFetchParameters.body = stringify(opts.data);
+
+ var defaultFetchOptions = objectMerge({}, this._fetchDefaults);
+ var fetchOptions = objectMerge(defaultFetchOptions, evaluatedFetchParameters);
+
+ if (evaluatedHeaders) {
+ fetchOptions.headers = evaluatedHeaders;
+ }
+
+ return _window
+ .fetch(url, fetchOptions)
+ .then(function(response) {
+ if (response.ok) {
+ opts.onSuccess && opts.onSuccess();
+ } else {
+ var error = new Error('Sentry error code: ' + response.status);
+ // It's called request only to keep compatibility with XHR interface
+ // and not add more redundant checks in setBackoffState method
+ error.request = response;
+ opts.onError && opts.onError(error);
+ }
+ })
+ ['catch'](function() {
+ opts.onError &&
+ opts.onError(new Error('Sentry error code: network unavailable'));
+ });
+ }
+
+ var request = _window.XMLHttpRequest && new _window.XMLHttpRequest();
+ if (!request) return;
+
+ // if browser doesn't support CORS (e.g. IE7), we are out of luck
+ var hasCORS = 'withCredentials' in request || typeof XDomainRequest !== 'undefined';
+
+ if (!hasCORS) return;
+
+ if ('withCredentials' in request) {
+ request.onreadystatechange = function() {
+ if (request.readyState !== 4) {
+ return;
+ } else if (request.status === 200) {
+ opts.onSuccess && opts.onSuccess();
+ } else if (opts.onError) {
+ var err = new Error('Sentry error code: ' + request.status);
+ err.request = request;
+ opts.onError(err);
+ }
+ };
+ } else {
+ request = new XDomainRequest();
+ // xdomainrequest cannot go http -> https (or vice versa),
+ // so always use protocol relative
+ url = url.replace(/^https?:/, '');
+
+ // onreadystatechange not supported by XDomainRequest
+ if (opts.onSuccess) {
+ request.onload = opts.onSuccess;
+ }
+ if (opts.onError) {
+ request.onerror = function() {
+ var err = new Error('Sentry error code: XDomainRequest');
+ err.request = request;
+ opts.onError(err);
+ };
+ }
+ }
+
+ request.open('POST', url);
+
+ if (evaluatedHeaders) {
+ each(evaluatedHeaders, function(key, value) {
+ request.setRequestHeader(key, value);
+ });
+ }
+
+ request.send(stringify(opts.data));
+ },
+
+ _evaluateHash: function(hash) {
+ var evaluated = {};
+
+ for (var key in hash) {
+ if (hash.hasOwnProperty(key)) {
+ var value = hash[key];
+ evaluated[key] = typeof value === 'function' ? value() : value;
+ }
+ }
+
+ return evaluated;
+ },
+
+ _logDebug: function(level) {
+ // We allow `Raven.debug` and `Raven.config(DSN, { debug: true })` to not make backward incompatible API change
+ if (
+ this._originalConsoleMethods[level] &&
+ (this.debug || this._globalOptions.debug)
+ ) {
+ // In IE<10 console methods do not have their own 'apply' method
+ Function.prototype.apply.call(
+ this._originalConsoleMethods[level],
+ this._originalConsole,
+ [].slice.call(arguments, 1)
+ );
+ }
+ },
+
+ _mergeContext: function(key, context) {
+ if (isUndefined(context)) {
+ delete this._globalContext[key];
+ } else {
+ this._globalContext[key] = objectMerge(this._globalContext[key] || {}, context);
+ }
+ }
+};
+
+// Deprecations
+Raven.prototype.setUser = Raven.prototype.setUserContext;
+Raven.prototype.setReleaseContext = Raven.prototype.setRelease;
+
+module.exports = Raven;
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"10":10,"11":11,"4":4,"5":5,"8":8,"9":9}],7:[function(_dereq_,module,exports){
+(function (global){
+/**
+ * Enforces a single instance of the Raven client, and the
+ * main entry point for Raven. If you are a consumer of the
+ * Raven library, you SHOULD load this file (vs raven.js).
+ **/
+
+var RavenConstructor = _dereq_(6);
+
+// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)
+var _window =
+ typeof window !== 'undefined'
+ ? window
+ : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
+var _Raven = _window.Raven;
+
+var Raven = new RavenConstructor();
+
+/*
+ * Allow multiple versions of Raven to be installed.
+ * Strip Raven from the global context and returns the instance.
+ *
+ * @return {Raven}
+ */
+Raven.noConflict = function() {
+ _window.Raven = _Raven;
+ return Raven;
+};
+
+Raven.afterLoad();
+
+module.exports = Raven;
+
+/**
+ * DISCLAIMER:
+ *
+ * Expose `Client` constructor for cases where user want to track multiple "sub-applications" in one larger app.
+ * It's not meant to be used by a wide audience, so pleaaase make sure that you know what you're doing before using it.
+ * Accidentally calling `install` multiple times, may result in an unexpected behavior that's very hard to debug.
+ *
+ * It's called `Client' to be in-line with Raven Node implementation.
+ *
+ * HOWTO:
+ *
+ * import Raven from 'raven-js';
+ *
+ * const someAppReporter = new Raven.Client();
+ * const someOtherAppReporter = new Raven.Client();
+ *
+ * someAppReporter.config('__DSN__', {
+ * ...config goes here
+ * });
+ *
+ * someOtherAppReporter.config('__OTHER_DSN__', {
+ * ...config goes here
+ * });
+ *
+ * someAppReporter.captureMessage(...);
+ * someAppReporter.captureException(...);
+ * someAppReporter.captureBreadcrumb(...);
+ *
+ * someOtherAppReporter.captureMessage(...);
+ * someOtherAppReporter.captureException(...);
+ * someOtherAppReporter.captureBreadcrumb(...);
+ *
+ * It should "just work".
+ */
+module.exports.Client = RavenConstructor;
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"6":6}],8:[function(_dereq_,module,exports){
+(function (global){
+var stringify = _dereq_(10);
+
+var _window =
+ typeof window !== 'undefined'
+ ? window
+ : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
+
+function isObject(what) {
+ return typeof what === 'object' && what !== null;
+}
+
+// Yanked from https://git.io/vS8DV re-used under CC0
+// with some tiny modifications
+function isError(value) {
+ switch (Object.prototype.toString.call(value)) {
+ case '[object Error]':
+ return true;
+ case '[object Exception]':
+ return true;
+ case '[object DOMException]':
+ return true;
+ default:
+ return value instanceof Error;
+ }
+}
+
+function isErrorEvent(value) {
+ return Object.prototype.toString.call(value) === '[object ErrorEvent]';
+}
+
+function isDOMError(value) {
+ return Object.prototype.toString.call(value) === '[object DOMError]';
+}
+
+function isDOMException(value) {
+ return Object.prototype.toString.call(value) === '[object DOMException]';
+}
+
+function isUndefined(what) {
+ return what === void 0;
+}
+
+function isFunction(what) {
+ return typeof what === 'function';
+}
+
+function isPlainObject(what) {
+ return Object.prototype.toString.call(what) === '[object Object]';
+}
+
+function isString(what) {
+ return Object.prototype.toString.call(what) === '[object String]';
+}
+
+function isArray(what) {
+ return Object.prototype.toString.call(what) === '[object Array]';
+}
+
+function isEmptyObject(what) {
+ if (!isPlainObject(what)) return false;
+
+ for (var _ in what) {
+ if (what.hasOwnProperty(_)) {
+ return false;
+ }
+ }
+ return true;
+}
+
+function supportsErrorEvent() {
+ try {
+ new ErrorEvent(''); // eslint-disable-line no-new
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+function supportsDOMError() {
+ try {
+ new DOMError(''); // eslint-disable-line no-new
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+function supportsDOMException() {
+ try {
+ new DOMException(''); // eslint-disable-line no-new
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+function supportsFetch() {
+ if (!('fetch' in _window)) return false;
+
+ try {
+ new Headers(); // eslint-disable-line no-new
+ new Request(''); // eslint-disable-line no-new
+ new Response(); // eslint-disable-line no-new
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+// Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default
+// https://caniuse.com/#feat=referrer-policy
+// It doesn't. And it throw exception instead of ignoring this parameter...
+// REF: https://github.com/getsentry/raven-js/issues/1233
+function supportsReferrerPolicy() {
+ if (!supportsFetch()) return false;
+
+ try {
+ // eslint-disable-next-line no-new
+ new Request('pickleRick', {
+ referrerPolicy: 'origin'
+ });
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+function supportsPromiseRejectionEvent() {
+ return typeof PromiseRejectionEvent === 'function';
+}
+
+function wrappedCallback(callback) {
+ function dataCallback(data, original) {
+ var normalizedData = callback(data) || data;
+ if (original) {
+ return original(normalizedData) || normalizedData;
+ }
+ return normalizedData;
+ }
+
+ return dataCallback;
+}
+
+function each(obj, callback) {
+ var i, j;
+
+ if (isUndefined(obj.length)) {
+ for (i in obj) {
+ if (hasKey(obj, i)) {
+ callback.call(null, i, obj[i]);
+ }
+ }
+ } else {
+ j = obj.length;
+ if (j) {
+ for (i = 0; i < j; i++) {
+ callback.call(null, i, obj[i]);
+ }
+ }
+ }
+}
+
+function objectMerge(obj1, obj2) {
+ if (!obj2) {
+ return obj1;
+ }
+ each(obj2, function(key, value) {
+ obj1[key] = value;
+ });
+ return obj1;
+}
+
+/**
+ * This function is only used for react-native.
+ * react-native freezes object that have already been sent over the
+ * js bridge. We need this function in order to check if the object is frozen.
+ * So it's ok that objectFrozen returns false if Object.isFrozen is not
+ * supported because it's not relevant for other "platforms". See related issue:
+ * https://github.com/getsentry/react-native-sentry/issues/57
+ */
+function objectFrozen(obj) {
+ if (!Object.isFrozen) {
+ return false;
+ }
+ return Object.isFrozen(obj);
+}
+
+function truncate(str, max) {
+ if (typeof max !== 'number') {
+ throw new Error('2nd argument to `truncate` function should be a number');
+ }
+ if (typeof str !== 'string' || max === 0) {
+ return str;
+ }
+ return str.length <= max ? str : str.substr(0, max) + '\u2026';
+}
+
+/**
+ * hasKey, a better form of hasOwnProperty
+ * Example: hasKey(MainHostObject, property) === true/false
+ *
+ * @param {Object} host object to check property
+ * @param {string} key to check
+ */
+function hasKey(object, key) {
+ return Object.prototype.hasOwnProperty.call(object, key);
+}
+
+function joinRegExp(patterns) {
+ // Combine an array of regular expressions and strings into one large regexp
+ // Be mad.
+ var sources = [],
+ i = 0,
+ len = patterns.length,
+ pattern;
+
+ for (; i < len; i++) {
+ pattern = patterns[i];
+ if (isString(pattern)) {
+ // If it's a string, we need to escape it
+ // Taken from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
+ sources.push(pattern.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, '\\$1'));
+ } else if (pattern && pattern.source) {
+ // If it's a regexp already, we want to extract the source
+ sources.push(pattern.source);
+ }
+ // Intentionally skip other cases
+ }
+ return new RegExp(sources.join('|'), 'i');
+}
+
+function urlencode(o) {
+ var pairs = [];
+ each(o, function(key, value) {
+ pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));
+ });
+ return pairs.join('&');
+}
+
+// borrowed from https://tools.ietf.org/html/rfc3986#appendix-B
+// intentionally using regex and not href parsing trick because React Native and other
+// environments where DOM might not be available
+function parseUrl(url) {
+ if (typeof url !== 'string') return {};
+ var match = url.match(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/);
+
+ // coerce to undefined values to empty string so we don't get 'undefined'
+ var query = match[6] || '';
+ var fragment = match[8] || '';
+ return {
+ protocol: match[2],
+ host: match[4],
+ path: match[5],
+ relative: match[5] + query + fragment // everything minus origin
+ };
+}
+function uuid4() {
+ var crypto = _window.crypto || _window.msCrypto;
+
+ if (!isUndefined(crypto) && crypto.getRandomValues) {
+ // Use window.crypto API if available
+ // eslint-disable-next-line no-undef
+ var arr = new Uint16Array(8);
+ crypto.getRandomValues(arr);
+
+ // set 4 in byte 7
+ arr[3] = (arr[3] & 0xfff) | 0x4000;
+ // set 2 most significant bits of byte 9 to '10'
+ arr[4] = (arr[4] & 0x3fff) | 0x8000;
+
+ var pad = function(num) {
+ var v = num.toString(16);
+ while (v.length < 4) {
+ v = '0' + v;
+ }
+ return v;
+ };
+
+ return (
+ pad(arr[0]) +
+ pad(arr[1]) +
+ pad(arr[2]) +
+ pad(arr[3]) +
+ pad(arr[4]) +
+ pad(arr[5]) +
+ pad(arr[6]) +
+ pad(arr[7])
+ );
+ } else {
+ // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523
+ return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
+ var r = (Math.random() * 16) | 0,
+ v = c === 'x' ? r : (r & 0x3) | 0x8;
+ return v.toString(16);
+ });
+ }
+}
+
+/**
+ * Given a child DOM element, returns a query-selector statement describing that
+ * and its ancestors
+ * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]
+ * @param elem
+ * @returns {string}
+ */
+function htmlTreeAsString(elem) {
+ /* eslint no-extra-parens:0*/
+ var MAX_TRAVERSE_HEIGHT = 5,
+ MAX_OUTPUT_LEN = 80,
+ out = [],
+ height = 0,
+ len = 0,
+ separator = ' > ',
+ sepLength = separator.length,
+ nextStr;
+
+ while (elem && height++ < MAX_TRAVERSE_HEIGHT) {
+ nextStr = htmlElementAsString(elem);
+ // bail out if
+ // - nextStr is the 'html' element
+ // - the length of the string that would be created exceeds MAX_OUTPUT_LEN
+ // (ignore this limit if we are on the first iteration)
+ if (
+ nextStr === 'html' ||
+ (height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN)
+ ) {
+ break;
+ }
+
+ out.push(nextStr);
+
+ len += nextStr.length;
+ elem = elem.parentNode;
+ }
+
+ return out.reverse().join(separator);
+}
+
+/**
+ * Returns a simple, query-selector representation of a DOM element
+ * e.g. [HTMLElement] => input#foo.btn[name=baz]
+ * @param HTMLElement
+ * @returns {string}
+ */
+function htmlElementAsString(elem) {
+ var out = [],
+ className,
+ classes,
+ key,
+ attr,
+ i;
+
+ if (!elem || !elem.tagName) {
+ return '';
+ }
+
+ out.push(elem.tagName.toLowerCase());
+ if (elem.id) {
+ out.push('#' + elem.id);
+ }
+
+ className = elem.className;
+ if (className && isString(className)) {
+ classes = className.split(/\s+/);
+ for (i = 0; i < classes.length; i++) {
+ out.push('.' + classes[i]);
+ }
+ }
+ var attrWhitelist = ['type', 'name', 'title', 'alt'];
+ for (i = 0; i < attrWhitelist.length; i++) {
+ key = attrWhitelist[i];
+ attr = elem.getAttribute(key);
+ if (attr) {
+ out.push('[' + key + '="' + attr + '"]');
+ }
+ }
+ return out.join('');
+}
+
+/**
+ * Returns true if either a OR b is truthy, but not both
+ */
+function isOnlyOneTruthy(a, b) {
+ return !!(!!a ^ !!b);
+}
+
+/**
+ * Returns true if both parameters are undefined
+ */
+function isBothUndefined(a, b) {
+ return isUndefined(a) && isUndefined(b);
+}
+
+/**
+ * Returns true if the two input exception interfaces have the same content
+ */
+function isSameException(ex1, ex2) {
+ if (isOnlyOneTruthy(ex1, ex2)) return false;
+
+ ex1 = ex1.values[0];
+ ex2 = ex2.values[0];
+
+ if (ex1.type !== ex2.type || ex1.value !== ex2.value) return false;
+
+ // in case both stacktraces are undefined, we can't decide so default to false
+ if (isBothUndefined(ex1.stacktrace, ex2.stacktrace)) return false;
+
+ return isSameStacktrace(ex1.stacktrace, ex2.stacktrace);
+}
+
+/**
+ * Returns true if the two input stack trace interfaces have the same content
+ */
+function isSameStacktrace(stack1, stack2) {
+ if (isOnlyOneTruthy(stack1, stack2)) return false;
+
+ var frames1 = stack1.frames;
+ var frames2 = stack2.frames;
+
+ // Exit early if frame count differs
+ if (frames1.length !== frames2.length) return false;
+
+ // Iterate through every frame; bail out if anything differs
+ var a, b;
+ for (var i = 0; i < frames1.length; i++) {
+ a = frames1[i];
+ b = frames2[i];
+ if (
+ a.filename !== b.filename ||
+ a.lineno !== b.lineno ||
+ a.colno !== b.colno ||
+ a['function'] !== b['function']
+ )
+ return false;
+ }
+ return true;
+}
+
+/**
+ * Polyfill a method
+ * @param obj object e.g. `document`
+ * @param name method name present on object e.g. `addEventListener`
+ * @param replacement replacement function
+ * @param track {optional} record instrumentation to an array
+ */
+function fill(obj, name, replacement, track) {
+ if (obj == null) return;
+ var orig = obj[name];
+ obj[name] = replacement(orig);
+ obj[name].__raven__ = true;
+ obj[name].__orig__ = orig;
+ if (track) {
+ track.push([obj, name, orig]);
+ }
+}
+
+/**
+ * Join values in array
+ * @param input array of values to be joined together
+ * @param delimiter string to be placed in-between values
+ * @returns {string}
+ */
+function safeJoin(input, delimiter) {
+ if (!isArray(input)) return '';
+
+ var output = [];
+
+ for (var i = 0; i < input.length; i++) {
+ try {
+ output.push(String(input[i]));
+ } catch (e) {
+ output.push('[value cannot be serialized]');
+ }
+ }
+
+ return output.join(delimiter);
+}
+
+// Default Node.js REPL depth
+var MAX_SERIALIZE_EXCEPTION_DEPTH = 3;
+// 50kB, as 100kB is max payload size, so half sounds reasonable
+var MAX_SERIALIZE_EXCEPTION_SIZE = 50 * 1024;
+var MAX_SERIALIZE_KEYS_LENGTH = 40;
+
+function utf8Length(value) {
+ return ~-encodeURI(value).split(/%..|./).length;
+}
+
+function jsonSize(value) {
+ return utf8Length(JSON.stringify(value));
+}
+
+function serializeValue(value) {
+ if (typeof value === 'string') {
+ var maxLength = 40;
+ return truncate(value, maxLength);
+ } else if (
+ typeof value === 'number' ||
+ typeof value === 'boolean' ||
+ typeof value === 'undefined'
+ ) {
+ return value;
+ }
+
+ var type = Object.prototype.toString.call(value);
+
+ // Node.js REPL notation
+ if (type === '[object Object]') return '[Object]';
+ if (type === '[object Array]') return '[Array]';
+ if (type === '[object Function]')
+ return value.name ? '[Function: ' + value.name + ']' : '[Function]';
+
+ return value;
+}
+
+function serializeObject(value, depth) {
+ if (depth === 0) return serializeValue(value);
+
+ if (isPlainObject(value)) {
+ return Object.keys(value).reduce(function(acc, key) {
+ acc[key] = serializeObject(value[key], depth - 1);
+ return acc;
+ }, {});
+ } else if (Array.isArray(value)) {
+ return value.map(function(val) {
+ return serializeObject(val, depth - 1);
+ });
+ }
+
+ return serializeValue(value);
+}
+
+function serializeException(ex, depth, maxSize) {
+ if (!isPlainObject(ex)) return ex;
+
+ depth = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_DEPTH : depth;
+ maxSize = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_SIZE : maxSize;
+
+ var serialized = serializeObject(ex, depth);
+
+ if (jsonSize(stringify(serialized)) > maxSize) {
+ return serializeException(ex, depth - 1);
+ }
+
+ return serialized;
+}
+
+function serializeKeysForMessage(keys, maxLength) {
+ if (typeof keys === 'number' || typeof keys === 'string') return keys.toString();
+ if (!Array.isArray(keys)) return '';
+
+ keys = keys.filter(function(key) {
+ return typeof key === 'string';
+ });
+ if (keys.length === 0) return '[object has no keys]';
+
+ maxLength = typeof maxLength !== 'number' ? MAX_SERIALIZE_KEYS_LENGTH : maxLength;
+ if (keys[0].length >= maxLength) return keys[0];
+
+ for (var usedKeys = keys.length; usedKeys > 0; usedKeys--) {
+ var serialized = keys.slice(0, usedKeys).join(', ');
+ if (serialized.length > maxLength) continue;
+ if (usedKeys === keys.length) return serialized;
+ return serialized + '\u2026';
+ }
+
+ return '';
+}
+
+function sanitize(input, sanitizeKeys) {
+ if (!isArray(sanitizeKeys) || (isArray(sanitizeKeys) && sanitizeKeys.length === 0))
+ return input;
+
+ var sanitizeRegExp = joinRegExp(sanitizeKeys);
+ var sanitizeMask = '********';
+ var safeInput;
+
+ try {
+ safeInput = JSON.parse(stringify(input));
+ } catch (o_O) {
+ return input;
+ }
+
+ function sanitizeWorker(workerInput) {
+ if (isArray(workerInput)) {
+ return workerInput.map(function(val) {
+ return sanitizeWorker(val);
+ });
+ }
+
+ if (isPlainObject(workerInput)) {
+ return Object.keys(workerInput).reduce(function(acc, k) {
+ if (sanitizeRegExp.test(k)) {
+ acc[k] = sanitizeMask;
+ } else {
+ acc[k] = sanitizeWorker(workerInput[k]);
+ }
+ return acc;
+ }, {});
+ }
+
+ return workerInput;
+ }
+
+ return sanitizeWorker(safeInput);
+}
+
+module.exports = {
+ isObject: isObject,
+ isError: isError,
+ isErrorEvent: isErrorEvent,
+ isDOMError: isDOMError,
+ isDOMException: isDOMException,
+ isUndefined: isUndefined,
+ isFunction: isFunction,
+ isPlainObject: isPlainObject,
+ isString: isString,
+ isArray: isArray,
+ isEmptyObject: isEmptyObject,
+ supportsErrorEvent: supportsErrorEvent,
+ supportsDOMError: supportsDOMError,
+ supportsDOMException: supportsDOMException,
+ supportsFetch: supportsFetch,
+ supportsReferrerPolicy: supportsReferrerPolicy,
+ supportsPromiseRejectionEvent: supportsPromiseRejectionEvent,
+ wrappedCallback: wrappedCallback,
+ each: each,
+ objectMerge: objectMerge,
+ truncate: truncate,
+ objectFrozen: objectFrozen,
+ hasKey: hasKey,
+ joinRegExp: joinRegExp,
+ urlencode: urlencode,
+ uuid4: uuid4,
+ htmlTreeAsString: htmlTreeAsString,
+ htmlElementAsString: htmlElementAsString,
+ isSameException: isSameException,
+ isSameStacktrace: isSameStacktrace,
+ parseUrl: parseUrl,
+ fill: fill,
+ safeJoin: safeJoin,
+ serializeException: serializeException,
+ serializeKeysForMessage: serializeKeysForMessage,
+ sanitize: sanitize
+};
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"10":10}],9:[function(_dereq_,module,exports){
+(function (global){
+var utils = _dereq_(8);
+
+/*
+ TraceKit - Cross brower stack traces
+
+ This was originally forked from github.com/occ/TraceKit, but has since been
+ largely re-written and is now maintained as part of raven-js. Tests for
+ this are in test/vendor.
+
+ MIT license
+*/
+
+var TraceKit = {
+ collectWindowErrors: true,
+ debug: false
+};
+
+// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)
+var _window =
+ typeof window !== 'undefined'
+ ? window
+ : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
+
+// global reference to slice
+var _slice = [].slice;
+var UNKNOWN_FUNCTION = '?';
+
+// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types
+var ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;
+
+function getLocationHref() {
+ if (typeof document === 'undefined' || document.location == null) return '';
+ return document.location.href;
+}
+
+function getLocationOrigin() {
+ if (typeof document === 'undefined' || document.location == null) return '';
+
+ // Oh dear IE10...
+ if (!document.location.origin) {
+ document.location.origin =
+ document.location.protocol +
+ '//' +
+ document.location.hostname +
+ (document.location.port ? ':' + document.location.port : '');
+ }
+
+ return document.location.origin;
+}
+
+/**
+ * TraceKit.report: cross-browser processing of unhandled exceptions
+ *
+ * Syntax:
+ * TraceKit.report.subscribe(function(stackInfo) { ... })
+ * TraceKit.report.unsubscribe(function(stackInfo) { ... })
+ * TraceKit.report(exception)
+ * try { ...code... } catch(ex) { TraceKit.report(ex); }
+ *
+ * Supports:
+ * - Firefox: full stack trace with line numbers, plus column number
+ * on top frame; column number is not guaranteed
+ * - Opera: full stack trace with line and column numbers
+ * - Chrome: full stack trace with line and column numbers
+ * - Safari: line and column number for the top frame only; some frames
+ * may be missing, and column number is not guaranteed
+ * - IE: line and column number for the top frame only; some frames
+ * may be missing, and column number is not guaranteed
+ *
+ * In theory, TraceKit should work on all of the following versions:
+ * - IE5.5+ (only 8.0 tested)
+ * - Firefox 0.9+ (only 3.5+ tested)
+ * - Opera 7+ (only 10.50 tested; versions 9 and earlier may require
+ * Exceptions Have Stacktrace to be enabled in opera:config)
+ * - Safari 3+ (only 4+ tested)
+ * - Chrome 1+ (only 5+ tested)
+ * - Konqueror 3.5+ (untested)
+ *
+ * Requires TraceKit.computeStackTrace.
+ *
+ * Tries to catch all unhandled exceptions and report them to the
+ * subscribed handlers. Please note that TraceKit.report will rethrow the
+ * exception. This is REQUIRED in order to get a useful stack trace in IE.
+ * If the exception does not reach the top of the browser, you will only
+ * get a stack trace from the point where TraceKit.report was called.
+ *
+ * Handlers receive a stackInfo object as described in the
+ * TraceKit.computeStackTrace docs.
+ */
+TraceKit.report = (function reportModuleWrapper() {
+ var handlers = [],
+ lastArgs = null,
+ lastException = null,
+ lastExceptionStack = null;
+
+ /**
+ * Add a crash handler.
+ * @param {Function} handler
+ */
+ function subscribe(handler) {
+ installGlobalHandler();
+ handlers.push(handler);
+ }
+
+ /**
+ * Remove a crash handler.
+ * @param {Function} handler
+ */
+ function unsubscribe(handler) {
+ for (var i = handlers.length - 1; i >= 0; --i) {
+ if (handlers[i] === handler) {
+ handlers.splice(i, 1);
+ }
+ }
+ }
+
+ /**
+ * Remove all crash handlers.
+ */
+ function unsubscribeAll() {
+ uninstallGlobalHandler();
+ handlers = [];
+ }
+
+ /**
+ * Dispatch stack information to all handlers.
+ * @param {Object.} stack
+ */
+ function notifyHandlers(stack, isWindowError) {
+ var exception = null;
+ if (isWindowError && !TraceKit.collectWindowErrors) {
+ return;
+ }
+ for (var i in handlers) {
+ if (handlers.hasOwnProperty(i)) {
+ try {
+ handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2)));
+ } catch (inner) {
+ exception = inner;
+ }
+ }
+ }
+
+ if (exception) {
+ throw exception;
+ }
+ }
+
+ var _oldOnerrorHandler, _onErrorHandlerInstalled;
+
+ /**
+ * Ensures all global unhandled exceptions are recorded.
+ * Supported by Gecko and IE.
+ * @param {string} msg Error message.
+ * @param {string} url URL of script that generated the exception.
+ * @param {(number|string)} lineNo The line number at which the error
+ * occurred.
+ * @param {?(number|string)} colNo The column number at which the error
+ * occurred.
+ * @param {?Error} ex The actual Error object.
+ */
+ function traceKitWindowOnError(msg, url, lineNo, colNo, ex) {
+ var stack = null;
+ // If 'ex' is ErrorEvent, get real Error from inside
+ var exception = utils.isErrorEvent(ex) ? ex.error : ex;
+ // If 'msg' is ErrorEvent, get real message from inside
+ var message = utils.isErrorEvent(msg) ? msg.message : msg;
+
+ if (lastExceptionStack) {
+ TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(
+ lastExceptionStack,
+ url,
+ lineNo,
+ message
+ );
+ processLastException();
+ } else if (exception && utils.isError(exception)) {
+ // non-string `exception` arg; attempt to extract stack trace
+
+ // New chrome and blink send along a real error object
+ // Let's just report that like a normal error.
+ // See: https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror
+ stack = TraceKit.computeStackTrace(exception);
+ notifyHandlers(stack, true);
+ } else {
+ var location = {
+ url: url,
+ line: lineNo,
+ column: colNo
+ };
+
+ var name = undefined;
+ var groups;
+
+ if ({}.toString.call(message) === '[object String]') {
+ var groups = message.match(ERROR_TYPES_RE);
+ if (groups) {
+ name = groups[1];
+ message = groups[2];
+ }
+ }
+
+ location.func = UNKNOWN_FUNCTION;
+
+ stack = {
+ name: name,
+ message: message,
+ url: getLocationHref(),
+ stack: [location]
+ };
+ notifyHandlers(stack, true);
+ }
+
+ if (_oldOnerrorHandler) {
+ return _oldOnerrorHandler.apply(this, arguments);
+ }
+
+ return false;
+ }
+
+ function installGlobalHandler() {
+ if (_onErrorHandlerInstalled) {
+ return;
+ }
+ _oldOnerrorHandler = _window.onerror;
+ _window.onerror = traceKitWindowOnError;
+ _onErrorHandlerInstalled = true;
+ }
+
+ function uninstallGlobalHandler() {
+ if (!_onErrorHandlerInstalled) {
+ return;
+ }
+ _window.onerror = _oldOnerrorHandler;
+ _onErrorHandlerInstalled = false;
+ _oldOnerrorHandler = undefined;
+ }
+
+ function processLastException() {
+ var _lastExceptionStack = lastExceptionStack,
+ _lastArgs = lastArgs;
+ lastArgs = null;
+ lastExceptionStack = null;
+ lastException = null;
+ notifyHandlers.apply(null, [_lastExceptionStack, false].concat(_lastArgs));
+ }
+
+ /**
+ * Reports an unhandled Error to TraceKit.
+ * @param {Error} ex
+ * @param {?boolean} rethrow If false, do not re-throw the exception.
+ * Only used for window.onerror to not cause an infinite loop of
+ * rethrowing.
+ */
+ function report(ex, rethrow) {
+ var args = _slice.call(arguments, 1);
+ if (lastExceptionStack) {
+ if (lastException === ex) {
+ return; // already caught by an inner catch block, ignore
+ } else {
+ processLastException();
+ }
+ }
+
+ var stack = TraceKit.computeStackTrace(ex);
+ lastExceptionStack = stack;
+ lastException = ex;
+ lastArgs = args;
+
+ // If the stack trace is incomplete, wait for 2 seconds for
+ // slow slow IE to see if onerror occurs or not before reporting
+ // this exception; otherwise, we will end up with an incomplete
+ // stack trace
+ setTimeout(function() {
+ if (lastException === ex) {
+ processLastException();
+ }
+ }, stack.incomplete ? 2000 : 0);
+
+ if (rethrow !== false) {
+ throw ex; // re-throw to propagate to the top level (and cause window.onerror)
+ }
+ }
+
+ report.subscribe = subscribe;
+ report.unsubscribe = unsubscribe;
+ report.uninstall = unsubscribeAll;
+ return report;
+})();
+
+/**
+ * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript
+ *
+ * Syntax:
+ * s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below)
+ * Returns:
+ * s.name - exception name
+ * s.message - exception message
+ * s.stack[i].url - JavaScript or HTML file URL
+ * s.stack[i].func - function name, or empty for anonymous functions (if guessing did not work)
+ * s.stack[i].args - arguments passed to the function, if known
+ * s.stack[i].line - line number, if known
+ * s.stack[i].column - column number, if known
+ *
+ * Supports:
+ * - Firefox: full stack trace with line numbers and unreliable column
+ * number on top frame
+ * - Opera 10: full stack trace with line and column numbers
+ * - Opera 9-: full stack trace with line numbers
+ * - Chrome: full stack trace with line and column numbers
+ * - Safari: line and column number for the topmost stacktrace element
+ * only
+ * - IE: no line numbers whatsoever
+ *
+ * Tries to guess names of anonymous functions by looking for assignments
+ * in the source code. In IE and Safari, we have to guess source file names
+ * by searching for function bodies inside all page scripts. This will not
+ * work for scripts that are loaded cross-domain.
+ * Here be dragons: some function names may be guessed incorrectly, and
+ * duplicate functions may be mismatched.
+ *
+ * TraceKit.computeStackTrace should only be used for tracing purposes.
+ * Logging of unhandled exceptions should be done with TraceKit.report,
+ * which builds on top of TraceKit.computeStackTrace and provides better
+ * IE support by utilizing the window.onerror event to retrieve information
+ * about the top of the stack.
+ *
+ * Note: In IE and Safari, no stack trace is recorded on the Error object,
+ * so computeStackTrace instead walks its *own* chain of callers.
+ * This means that:
+ * * in Safari, some methods may be missing from the stack trace;
+ * * in IE, the topmost function in the stack trace will always be the
+ * caller of computeStackTrace.
+ *
+ * This is okay for tracing (because you are likely to be calling
+ * computeStackTrace from the function you want to be the topmost element
+ * of the stack trace anyway), but not okay for logging unhandled
+ * exceptions (because your catch block will likely be far away from the
+ * inner function that actually caused the exception).
+ *
+ */
+TraceKit.computeStackTrace = (function computeStackTraceWrapper() {
+ // Contents of Exception in various browsers.
+ //
+ // SAFARI:
+ // ex.message = Can't find variable: qq
+ // ex.line = 59
+ // ex.sourceId = 580238192
+ // ex.sourceURL = http://...
+ // ex.expressionBeginOffset = 96
+ // ex.expressionCaretOffset = 98
+ // ex.expressionEndOffset = 98
+ // ex.name = ReferenceError
+ //
+ // FIREFOX:
+ // ex.message = qq is not defined
+ // ex.fileName = http://...
+ // ex.lineNumber = 59
+ // ex.columnNumber = 69
+ // ex.stack = ...stack trace... (see the example below)
+ // ex.name = ReferenceError
+ //
+ // CHROME:
+ // ex.message = qq is not defined
+ // ex.name = ReferenceError
+ // ex.type = not_defined
+ // ex.arguments = ['aa']
+ // ex.stack = ...stack trace...
+ //
+ // INTERNET EXPLORER:
+ // ex.message = ...
+ // ex.name = ReferenceError
+ //
+ // OPERA:
+ // ex.message = ...message... (see the example below)
+ // ex.name = ReferenceError
+ // ex.opera#sourceloc = 11 (pretty much useless, duplicates the info in ex.message)
+ // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'
+
+ /**
+ * Computes stack trace information from the stack property.
+ * Chrome and Gecko use this property.
+ * @param {Error} ex
+ * @return {?Object.} Stack trace information.
+ */
+ function computeStackTraceFromStackProp(ex) {
+ if (typeof ex.stack === 'undefined' || !ex.stack) return;
+
+ var chrome = /^\s*at (?:(.*?) ?\()?((?:file|https?|blob|chrome-extension|native|eval|webpack||[a-z]:|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i;
+ var winjs = /^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i;
+ // NOTE: blob urls are now supposed to always have an origin, therefore it's format
+ // which is `blob:http://url/path/with-some-uuid`, is matched by `blob.*?:\/` as well
+ var gecko = /^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\/.*?|\[native code\]|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i;
+ // Used to additionally parse URL/line/column from eval frames
+ var geckoEval = /(\S+) line (\d+)(?: > eval line \d+)* > eval/i;
+ var chromeEval = /\((\S*)(?::(\d+))(?::(\d+))\)/;
+ var lines = ex.stack.split('\n');
+ var stack = [];
+ var submatch;
+ var parts;
+ var element;
+ var reference = /^(.*) is undefined$/.exec(ex.message);
+
+ for (var i = 0, j = lines.length; i < j; ++i) {
+ if ((parts = chrome.exec(lines[i]))) {
+ var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line
+ var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line
+ if (isEval && (submatch = chromeEval.exec(parts[2]))) {
+ // throw out eval line/column and use top-most line/column number
+ parts[2] = submatch[1]; // url
+ parts[3] = submatch[2]; // line
+ parts[4] = submatch[3]; // column
+ }
+ element = {
+ url: !isNative ? parts[2] : null,
+ func: parts[1] || UNKNOWN_FUNCTION,
+ args: isNative ? [parts[2]] : [],
+ line: parts[3] ? +parts[3] : null,
+ column: parts[4] ? +parts[4] : null
+ };
+ } else if ((parts = winjs.exec(lines[i]))) {
+ element = {
+ url: parts[2],
+ func: parts[1] || UNKNOWN_FUNCTION,
+ args: [],
+ line: +parts[3],
+ column: parts[4] ? +parts[4] : null
+ };
+ } else if ((parts = gecko.exec(lines[i]))) {
+ var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;
+ if (isEval && (submatch = geckoEval.exec(parts[3]))) {
+ // throw out eval line/column and use top-most line number
+ parts[3] = submatch[1];
+ parts[4] = submatch[2];
+ parts[5] = null; // no column when eval
+ } else if (i === 0 && !parts[5] && typeof ex.columnNumber !== 'undefined') {
+ // FireFox uses this awesome columnNumber property for its top frame
+ // Also note, Firefox's column number is 0-based and everything else expects 1-based,
+ // so adding 1
+ // NOTE: this hack doesn't work if top-most frame is eval
+ stack[0].column = ex.columnNumber + 1;
+ }
+ element = {
+ url: parts[3],
+ func: parts[1] || UNKNOWN_FUNCTION,
+ args: parts[2] ? parts[2].split(',') : [],
+ line: parts[4] ? +parts[4] : null,
+ column: parts[5] ? +parts[5] : null
+ };
+ } else {
+ continue;
+ }
+
+ if (!element.func && element.line) {
+ element.func = UNKNOWN_FUNCTION;
+ }
+
+ if (element.url && element.url.substr(0, 5) === 'blob:') {
+ // Special case for handling JavaScript loaded into a blob.
+ // We use a synchronous AJAX request here as a blob is already in
+ // memory - it's not making a network request. This will generate a warning
+ // in the browser console, but there has already been an error so that's not
+ // that much of an issue.
+ var xhr = new XMLHttpRequest();
+ xhr.open('GET', element.url, false);
+ xhr.send(null);
+
+ // If we failed to download the source, skip this patch
+ if (xhr.status === 200) {
+ var source = xhr.responseText || '';
+
+ // We trim the source down to the last 300 characters as sourceMappingURL is always at the end of the file.
+ // Why 300? To be in line with: https://github.com/getsentry/sentry/blob/4af29e8f2350e20c28a6933354e4f42437b4ba42/src/sentry/lang/javascript/processor.py#L164-L175
+ source = source.slice(-300);
+
+ // Now we dig out the source map URL
+ var sourceMaps = source.match(/\/\/# sourceMappingURL=(.*)$/);
+
+ // If we don't find a source map comment or we find more than one, continue on to the next element.
+ if (sourceMaps) {
+ var sourceMapAddress = sourceMaps[1];
+
+ // Now we check to see if it's a relative URL.
+ // If it is, convert it to an absolute one.
+ if (sourceMapAddress.charAt(0) === '~') {
+ sourceMapAddress = getLocationOrigin() + sourceMapAddress.slice(1);
+ }
+
+ // Now we strip the '.map' off of the end of the URL and update the
+ // element so that Sentry can match the map to the blob.
+ element.url = sourceMapAddress.slice(0, -4);
+ }
+ }
+ }
+
+ stack.push(element);
+ }
+
+ if (!stack.length) {
+ return null;
+ }
+
+ return {
+ name: ex.name,
+ message: ex.message,
+ url: getLocationHref(),
+ stack: stack
+ };
+ }
+
+ /**
+ * Adds information about the first frame to incomplete stack traces.
+ * Safari and IE require this to get complete data on the first frame.
+ * @param {Object.} stackInfo Stack trace information from
+ * one of the compute* methods.
+ * @param {string} url The URL of the script that caused an error.
+ * @param {(number|string)} lineNo The line number of the script that
+ * caused an error.
+ * @param {string=} message The error generated by the browser, which
+ * hopefully contains the name of the object that caused the error.
+ * @return {boolean} Whether or not the stack information was
+ * augmented.
+ */
+ function augmentStackTraceWithInitialElement(stackInfo, url, lineNo, message) {
+ var initial = {
+ url: url,
+ line: lineNo
+ };
+
+ if (initial.url && initial.line) {
+ stackInfo.incomplete = false;
+
+ if (!initial.func) {
+ initial.func = UNKNOWN_FUNCTION;
+ }
+
+ if (stackInfo.stack.length > 0) {
+ if (stackInfo.stack[0].url === initial.url) {
+ if (stackInfo.stack[0].line === initial.line) {
+ return false; // already in stack trace
+ } else if (
+ !stackInfo.stack[0].line &&
+ stackInfo.stack[0].func === initial.func
+ ) {
+ stackInfo.stack[0].line = initial.line;
+ return false;
+ }
+ }
+ }
+
+ stackInfo.stack.unshift(initial);
+ stackInfo.partial = true;
+ return true;
+ } else {
+ stackInfo.incomplete = true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Computes stack trace information by walking the arguments.caller
+ * chain at the time the exception occurred. This will cause earlier
+ * frames to be missed but is the only way to get any stack trace in
+ * Safari and IE. The top frame is restored by
+ * {@link augmentStackTraceWithInitialElement}.
+ * @param {Error} ex
+ * @return {?Object.} Stack trace information.
+ */
+ function computeStackTraceByWalkingCallerChain(ex, depth) {
+ var functionName = /function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,
+ stack = [],
+ funcs = {},
+ recursion = false,
+ parts,
+ item,
+ source;
+
+ for (
+ var curr = computeStackTraceByWalkingCallerChain.caller;
+ curr && !recursion;
+ curr = curr.caller
+ ) {
+ if (curr === computeStackTrace || curr === TraceKit.report) {
+ // console.log('skipping internal function');
+ continue;
+ }
+
+ item = {
+ url: null,
+ func: UNKNOWN_FUNCTION,
+ line: null,
+ column: null
+ };
+
+ if (curr.name) {
+ item.func = curr.name;
+ } else if ((parts = functionName.exec(curr.toString()))) {
+ item.func = parts[1];
+ }
+
+ if (typeof item.func === 'undefined') {
+ try {
+ item.func = parts.input.substring(0, parts.input.indexOf('{'));
+ } catch (e) {}
+ }
+
+ if (funcs['' + curr]) {
+ recursion = true;
+ } else {
+ funcs['' + curr] = true;
+ }
+
+ stack.push(item);
+ }
+
+ if (depth) {
+ // console.log('depth is ' + depth);
+ // console.log('stack is ' + stack.length);
+ stack.splice(0, depth);
+ }
+
+ var result = {
+ name: ex.name,
+ message: ex.message,
+ url: getLocationHref(),
+ stack: stack
+ };
+ augmentStackTraceWithInitialElement(
+ result,
+ ex.sourceURL || ex.fileName,
+ ex.line || ex.lineNumber,
+ ex.message || ex.description
+ );
+ return result;
+ }
+
+ /**
+ * Computes a stack trace for an exception.
+ * @param {Error} ex
+ * @param {(string|number)=} depth
+ */
+ function computeStackTrace(ex, depth) {
+ var stack = null;
+ depth = depth == null ? 0 : +depth;
+
+ try {
+ stack = computeStackTraceFromStackProp(ex);
+ if (stack) {
+ return stack;
+ }
+ } catch (e) {
+ if (TraceKit.debug) {
+ throw e;
+ }
+ }
+
+ try {
+ stack = computeStackTraceByWalkingCallerChain(ex, depth + 1);
+ if (stack) {
+ return stack;
+ }
+ } catch (e) {
+ if (TraceKit.debug) {
+ throw e;
+ }
+ }
+ return {
+ name: ex.name,
+ message: ex.message,
+ url: getLocationHref()
+ };
+ }
+
+ computeStackTrace.augmentStackTraceWithInitialElement = augmentStackTraceWithInitialElement;
+ computeStackTrace.computeStackTraceFromStackProp = computeStackTraceFromStackProp;
+
+ return computeStackTrace;
+})();
+
+module.exports = TraceKit;
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"8":8}],10:[function(_dereq_,module,exports){
+/*
+ json-stringify-safe
+ Like JSON.stringify, but doesn't throw on circular references.
+
+ Originally forked from https://github.com/isaacs/json-stringify-safe
+ version 5.0.1 on 3/8/2017 and modified to handle Errors serialization
+ and IE8 compatibility. Tests for this are in test/vendor.
+
+ ISC license: https://github.com/isaacs/json-stringify-safe/blob/master/LICENSE
+*/
+
+exports = module.exports = stringify;
+exports.getSerialize = serializer;
+
+function indexOf(haystack, needle) {
+ for (var i = 0; i < haystack.length; ++i) {
+ if (haystack[i] === needle) return i;
+ }
+ return -1;
+}
+
+function stringify(obj, replacer, spaces, cycleReplacer) {
+ return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces);
+}
+
+// https://github.com/ftlabs/js-abbreviate/blob/fa709e5f139e7770a71827b1893f22418097fbda/index.js#L95-L106
+function stringifyError(value) {
+ var err = {
+ // These properties are implemented as magical getters and don't show up in for in
+ stack: value.stack,
+ message: value.message,
+ name: value.name
+ };
+
+ for (var i in value) {
+ if (Object.prototype.hasOwnProperty.call(value, i)) {
+ err[i] = value[i];
+ }
+ }
+
+ return err;
+}
+
+function serializer(replacer, cycleReplacer) {
+ var stack = [];
+ var keys = [];
+
+ if (cycleReplacer == null) {
+ cycleReplacer = function(key, value) {
+ if (stack[0] === value) {
+ return '[Circular ~]';
+ }
+ return '[Circular ~.' + keys.slice(0, indexOf(stack, value)).join('.') + ']';
+ };
+ }
+
+ return function(key, value) {
+ if (stack.length > 0) {
+ var thisPos = indexOf(stack, this);
+ ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);
+ ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);
+
+ if (~indexOf(stack, value)) {
+ value = cycleReplacer.call(this, key, value);
+ }
+ } else {
+ stack.push(value);
+ }
+
+ return replacer == null
+ ? value instanceof Error ? stringifyError(value) : value
+ : replacer.call(this, key, value);
+ };
+}
+
+},{}],11:[function(_dereq_,module,exports){
+/*
+ * JavaScript MD5
+ * https://github.com/blueimp/JavaScript-MD5
+ *
+ * Copyright 2011, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * https://opensource.org/licenses/MIT
+ *
+ * Based on
+ * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
+ * Digest Algorithm, as defined in RFC 1321.
+ * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
+ * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
+ * Distributed under the BSD License
+ * See http://pajhome.org.uk/crypt/md5 for more info.
+ */
+
+/*
+* Add integers, wrapping at 2^32. This uses 16-bit operations internally
+* to work around bugs in some JS interpreters.
+*/
+function safeAdd(x, y) {
+ var lsw = (x & 0xffff) + (y & 0xffff);
+ var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
+ return (msw << 16) | (lsw & 0xffff);
+}
+
+/*
+* Bitwise rotate a 32-bit number to the left.
+*/
+function bitRotateLeft(num, cnt) {
+ return (num << cnt) | (num >>> (32 - cnt));
+}
+
+/*
+* These functions implement the four basic operations the algorithm uses.
+*/
+function md5cmn(q, a, b, x, s, t) {
+ return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);
+}
+function md5ff(a, b, c, d, x, s, t) {
+ return md5cmn((b & c) | (~b & d), a, b, x, s, t);
+}
+function md5gg(a, b, c, d, x, s, t) {
+ return md5cmn((b & d) | (c & ~d), a, b, x, s, t);
+}
+function md5hh(a, b, c, d, x, s, t) {
+ return md5cmn(b ^ c ^ d, a, b, x, s, t);
+}
+function md5ii(a, b, c, d, x, s, t) {
+ return md5cmn(c ^ (b | ~d), a, b, x, s, t);
+}
+
+/*
+* Calculate the MD5 of an array of little-endian words, and a bit length.
+*/
+function binlMD5(x, len) {
+ /* append padding */
+ x[len >> 5] |= 0x80 << (len % 32);
+ x[(((len + 64) >>> 9) << 4) + 14] = len;
+
+ var i;
+ var olda;
+ var oldb;
+ var oldc;
+ var oldd;
+ var a = 1732584193;
+ var b = -271733879;
+ var c = -1732584194;
+ var d = 271733878;
+
+ for (i = 0; i < x.length; i += 16) {
+ olda = a;
+ oldb = b;
+ oldc = c;
+ oldd = d;
+
+ a = md5ff(a, b, c, d, x[i], 7, -680876936);
+ d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);
+ c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);
+ b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);
+ a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);
+ d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);
+ c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);
+ b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);
+ a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);
+ d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);
+ c = md5ff(c, d, a, b, x[i + 10], 17, -42063);
+ b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);
+ a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);
+ d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);
+ c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);
+ b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);
+
+ a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);
+ d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);
+ c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);
+ b = md5gg(b, c, d, a, x[i], 20, -373897302);
+ a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);
+ d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);
+ c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);
+ b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);
+ a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);
+ d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);
+ c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);
+ b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);
+ a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);
+ d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);
+ c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);
+ b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);
+
+ a = md5hh(a, b, c, d, x[i + 5], 4, -378558);
+ d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);
+ c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);
+ b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);
+ a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);
+ d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);
+ c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);
+ b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);
+ a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);
+ d = md5hh(d, a, b, c, x[i], 11, -358537222);
+ c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);
+ b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);
+ a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);
+ d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);
+ c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);
+ b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);
+
+ a = md5ii(a, b, c, d, x[i], 6, -198630844);
+ d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);
+ c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);
+ b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);
+ a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);
+ d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);
+ c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);
+ b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);
+ a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);
+ d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);
+ c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);
+ b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);
+ a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);
+ d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);
+ c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);
+ b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);
+
+ a = safeAdd(a, olda);
+ b = safeAdd(b, oldb);
+ c = safeAdd(c, oldc);
+ d = safeAdd(d, oldd);
+ }
+ return [a, b, c, d];
+}
+
+/*
+* Convert an array of little-endian words to a string
+*/
+function binl2rstr(input) {
+ var i;
+ var output = '';
+ var length32 = input.length * 32;
+ for (i = 0; i < length32; i += 8) {
+ output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xff);
+ }
+ return output;
+}
+
+/*
+* Convert a raw string to an array of little-endian words
+* Characters >255 have their high-byte silently ignored.
+*/
+function rstr2binl(input) {
+ var i;
+ var output = [];
+ output[(input.length >> 2) - 1] = undefined;
+ for (i = 0; i < output.length; i += 1) {
+ output[i] = 0;
+ }
+ var length8 = input.length * 8;
+ for (i = 0; i < length8; i += 8) {
+ output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << (i % 32);
+ }
+ return output;
+}
+
+/*
+* Calculate the MD5 of a raw string
+*/
+function rstrMD5(s) {
+ return binl2rstr(binlMD5(rstr2binl(s), s.length * 8));
+}
+
+/*
+* Calculate the HMAC-MD5, of a key and some data (raw strings)
+*/
+function rstrHMACMD5(key, data) {
+ var i;
+ var bkey = rstr2binl(key);
+ var ipad = [];
+ var opad = [];
+ var hash;
+ ipad[15] = opad[15] = undefined;
+ if (bkey.length > 16) {
+ bkey = binlMD5(bkey, key.length * 8);
+ }
+ for (i = 0; i < 16; i += 1) {
+ ipad[i] = bkey[i] ^ 0x36363636;
+ opad[i] = bkey[i] ^ 0x5c5c5c5c;
+ }
+ hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);
+ return binl2rstr(binlMD5(opad.concat(hash), 512 + 128));
+}
+
+/*
+* Convert a raw string to a hex string
+*/
+function rstr2hex(input) {
+ var hexTab = '0123456789abcdef';
+ var output = '';
+ var x;
+ var i;
+ for (i = 0; i < input.length; i += 1) {
+ x = input.charCodeAt(i);
+ output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f);
+ }
+ return output;
+}
+
+/*
+* Encode a string as utf-8
+*/
+function str2rstrUTF8(input) {
+ return unescape(encodeURIComponent(input));
+}
+
+/*
+* Take string arguments and return either raw or hex encoded strings
+*/
+function rawMD5(s) {
+ return rstrMD5(str2rstrUTF8(s));
+}
+function hexMD5(s) {
+ return rstr2hex(rawMD5(s));
+}
+function rawHMACMD5(k, d) {
+ return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d));
+}
+function hexHMACMD5(k, d) {
+ return rstr2hex(rawHMACMD5(k, d));
+}
+
+function md5(string, key, raw) {
+ if (!key) {
+ if (!raw) {
+ return hexMD5(string);
+ }
+ return rawMD5(string);
+ }
+ if (!raw) {
+ return hexHMACMD5(key, string);
+ }
+ return rawHMACMD5(key, string);
+}
+
+module.exports = md5;
+
+},{}]},{},[7,1,2,3])(7)
+});
\ No newline at end of file
diff --git a/packages/raven-js/dist/angular,console,require/raven.min.js b/packages/raven-js/dist/angular,console,require/raven.min.js
new file mode 100644
index 000000000000..adc0e34af671
--- /dev/null
+++ b/packages/raven-js/dist/angular,console,require/raven.min.js
@@ -0,0 +1,4 @@
+/*! Raven.js 3.25.2 (30b6d4e) | github.com/getsentry/raven-js */
+!function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,b.Raven=a()}}(function(){var a;return function b(a,c,d){function e(g,h){if(!c[g]){if(!a[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};a[g][0].call(k.exports,function(b){var c=a[g][1][b];return e(c?c:b)},k,k.exports,b,a,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;gthis.l.maxBreadcrumbs&&this.v.shift(),this},addPlugin:function(a){var b=[].slice.call(arguments,1);return this.s.push([a,b]),this.o&&this.G(),this},setUserContext:function(a){return this.k.user=a,this},setExtraContext:function(a){return this.$("extra",a),this},setTagsContext:function(a){return this.$("tags",a),this},clearContext:function(){return this.k={},this},getContext:function(){return JSON.parse(h(this.k))},setEnvironment:function(a){return this.l.environment=a,this},setRelease:function(a){return this.l.release=a,this},setDataCallback:function(a){var b=this.l.dataCallback;return this.l.dataCallback=e(b,a),this},setBreadcrumbCallback:function(a){var b=this.l.breadcrumbCallback;return this.l.breadcrumbCallback=e(b,a),this},setShouldSendCallback:function(a){var b=this.l.shouldSendCallback;return this.l.shouldSendCallback=e(b,a),this},setTransport:function(a){return this.l.transport=a,this},lastException:function(){return this.e},lastEventId:function(){return this.g},isSetup:function(){return!!this.b&&(!!this.h||(this.ravenNotConfiguredError||(this.ravenNotConfiguredError=!0,this.A("error","Error: Raven has not been configured.")),!1))},afterLoad:function(){var a=R.RavenConfig;a&&this.config(a.dsn,a.config).install()},showReportDialog:function(a){if(S){a=a||{};var b=a.eventId||this.lastEventId();if(!b)throw new j("Missing eventId");var c=a.dsn||this.I;if(!c)throw new j("Missing DSN");var d=encodeURIComponent,e="";e+="?eventId="+d(b),e+="&dsn="+d(c);var f=a.user||this.k.user;f&&(f.name&&(e+="&name="+d(f.name)),f.email&&(e+="&email="+d(f.email)));var g=this.K(this.H(c)),h=S.createElement("script");h.async=!0,h.src=g+"/api/embed/error-page/"+e,(S.head||S.body).appendChild(h)}},M:function(){var a=this;this.n+=1,setTimeout(function(){a.n-=1})},_:function(a,b){var c,d;if(this.c){b=b||{},a="raven"+a.substr(0,1).toUpperCase()+a.substr(1),S.createEvent?(c=S.createEvent("HTMLEvents"),c.initEvent(a,!0,!0)):(c=S.createEventObject(),c.eventType=a);for(d in b)A(b,d)&&(c[d]=b[d]);if(S.createEvent)S.dispatchEvent(c);else try{S.fireEvent("on"+c.eventType.toLowerCase(),c)}catch(e){}}},aa:function(a){var b=this;return function(c){if(b.ba=null,b.w!==c){b.w=c;var d;try{d=E(c.target)}catch(e){d=""}b.captureBreadcrumb({category:"ui."+a,message:d})}}},ca:function(){var a=this,b=1e3;return function(c){var d;try{d=c.target}catch(e){return}var f=d&&d.tagName;if(f&&("INPUT"===f||"TEXTAREA"===f||d.isContentEditable)){var g=a.ba;g||a.aa("input")(c),clearTimeout(g),a.ba=setTimeout(function(){a.ba=null},b)}}},da:function(a,b){var c=H(this.x.href),d=H(b),e=H(a);this.y=b,c.protocol===d.protocol&&c.host===d.host&&(b=d.relative),c.protocol===e.protocol&&c.host===e.host&&(a=e.relative),this.captureBreadcrumb({category:"navigation",data:{to:b,from:a}})},D:function(){var a=this;a.ea=Function.prototype.toString,Function.prototype.toString=function(){return"function"==typeof this&&this.N?a.ea.apply(this.P,arguments):a.ea.apply(this,arguments)}},R:function(){this.ea&&(Function.prototype.toString=this.ea)},E:function(){function a(a){return function(b,d){for(var e=new Array(arguments.length),f=0;f2?arguments[2]:void 0;return c&&b.da(b.y,c+""),a.apply(this,arguments)}};I(R.history,"pushState",j,d),I(R.history,"replaceState",j,d)}if(c.console&&"console"in R&&console.log){var k=function(a,c){b.captureBreadcrumb({message:a,level:c.level,category:"console"})};w(["debug","info","warn","error","log"],function(a,b){O(console,b,k)})}},S:function(){for(var a;this.u.length;){a=this.u.shift();var b=a[0],c=a[1],d=a[2];b[c]=d}},T:function(){for(var a in this.r)this.q[a]=this.r[a]},G:function(){var a=this;w(this.s,function(b,c){var d=c[0],e=c[1];d.apply(a,[a].concat(e))})},H:function(a){var b=Q.exec(a),c={},d=7;try{for(;d--;)c[P[d]]=b[d]||""}catch(e){throw new j("Invalid DSN: "+a)}if(c.pass&&!this.l.allowSecretKey)throw new j("Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key");return c},K:function(a){var b="//"+a.host+(a.port?":"+a.port:"");return a.protocol&&(b=a.protocol+":"+b),b},B:function(){this.n||this.W.apply(this,arguments)},W:function(a,b){var c=this.Y(a,b);this._("handle",{stackInfo:a,options:b}),this.ga(a.name,a.message,a.url,a.lineno,c,b)},Y:function(a,b){var c=this,d=[];if(a.stack&&a.stack.length&&(w(a.stack,function(b,e){var f=c.ha(e,a.url);f&&d.push(f)}),b&&b.trimHeadFrames))for(var e=0;e0&&(a.breadcrumbs={values:[].slice.call(this.v,0)}),this.k.user&&(a.user=this.k.user),b.environment&&(a.environment=b.environment),b.release&&(a.release=b.release),b.serverName&&(a.server_name=b.serverName),a=this.qa(a),Object.keys(a).forEach(function(b){(null==a[b]||""===a[b]||v(a[b]))&&delete a[b]}),s(b.dataCallback)&&(a=b.dataCallback(a)||a),a&&!v(a)&&(!s(b.shouldSendCallback)||b.shouldSendCallback(a)))return this.na()?void this.A("warn","Raven dropped error due to backoff: ",a):void("number"==typeof b.sampleRate?Math.random() ",i=h.length;a&&f++1&&g+e.length*i+b.length>=d));)e.push(b),g+=b.length,a=a.parentNode;return e.reverse().join(h)}function F(a){var b,c,d,e,f,g=[];if(!a||!a.tagName)return"";if(g.push(a.tagName.toLowerCase()),a.id&&g.push("#"+a.id),b=a.className,b&&l(b))for(c=b.split(/\s+/),f=0;fc?Q(a,b-1):d}function R(a,b){if("number"==typeof a||"string"==typeof a)return a.toString();if(!Array.isArray(a))return"";if(a=a.filter(function(a){return"string"==typeof a}),0===a.length)return"[object has no keys]";if(b="number"!=typeof b?X:b,a[0].length>=b)return a[0];for(var c=a.length;c>0;c--){var d=a.slice(0,c).join(", ");if(!(d.length>b))return c===a.length?d:d+"…"}return""}function S(a,b){function c(a){return m(a)?a.map(function(a){return c(a)}):k(a)?Object.keys(a).reduce(function(b,d){return b[d]=e.test(d)?f:c(a[d]),b},{}):a}if(!m(b)||m(b)&&0===b.length)return a;var d,e=A(b),f="********";try{d=JSON.parse(T(a))}catch(g){return a}return c(d)}var T=a(10),U="undefined"!=typeof window?window:"undefined"!=typeof c?c:"undefined"!=typeof self?self:{},V=3,W=51200,X=40;b.exports={isObject:d,isError:e,isErrorEvent:f,isDOMError:g,isDOMException:h,isUndefined:i,isFunction:j,isPlainObject:k,isString:l,isArray:m,isEmptyObject:n,supportsErrorEvent:o,supportsDOMError:p,supportsDOMException:q,supportsFetch:r,supportsReferrerPolicy:s,supportsPromiseRejectionEvent:t,wrappedCallback:u,each:v,objectMerge:w,truncate:y,objectFrozen:x,hasKey:z,joinRegExp:A,urlencode:B,uuid4:D,htmlTreeAsString:E,htmlElementAsString:F,isSameException:I,isSameStacktrace:J,parseUrl:C,fill:K,safeJoin:L,serializeException:Q,serializeKeysForMessage:R,sanitize:S}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{10:10}],9:[function(a,b,c){(function(c){function d(){return"undefined"==typeof document||null==document.location?"":document.location.href}function e(){return"undefined"==typeof document||null==document.location?"":(document.location.origin||(document.location.origin=document.location.protocol+"//"+document.location.hostname+(document.location.port?":"+document.location.port:"")),document.location.origin)}var f=a(8),g={collectWindowErrors:!0,debug:!1},h="undefined"!=typeof window?window:"undefined"!=typeof c?c:"undefined"!=typeof self?self:{},i=[].slice,j="?",k=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;g.report=function(){function a(a){m(),s.push(a)}function b(a){for(var b=s.length-1;b>=0;--b)s[b]===a&&s.splice(b,1)}function c(){n(),s=[]}function e(a,b){var c=null;if(!b||g.collectWindowErrors){for(var d in s)if(s.hasOwnProperty(d))try{s[d].apply(null,[a].concat(i.call(arguments,2)))}catch(e){c=e}if(c)throw c}}function l(a,b,c,h,i){var l=null,m=f.isErrorEvent(i)?i.error:i,n=f.isErrorEvent(a)?a.message:a;if(v)g.computeStackTrace.augmentStackTraceWithInitialElement(v,b,c,n),o();else if(m&&f.isError(m))l=g.computeStackTrace(m),e(l,!0);else{var p,r={url:b,line:c,column:h},s=void 0;if("[object String]"==={}.toString.call(n)){var p=n.match(k);p&&(s=p[1],n=p[2])}r.func=j,l={name:s,message:n,url:d(),stack:[r]},e(l,!0)}return!!q&&q.apply(this,arguments)}function m(){r||(q=h.onerror,h.onerror=l,r=!0)}function n(){r&&(h.onerror=q,r=!1,q=void 0)}function o(){var a=v,b=t;t=null,v=null,u=null,e.apply(null,[a,!1].concat(b))}function p(a,b){var c=i.call(arguments,1);if(v){if(u===a)return;o()}var d=g.computeStackTrace(a);if(v=d,u=a,t=c,setTimeout(function(){u===a&&o()},d.incomplete?2e3:0),b!==!1)throw a}var q,r,s=[],t=null,u=null,v=null;return p.subscribe=a,p.unsubscribe=b,p.uninstall=c,p}(),g.computeStackTrace=function(){function a(a){if("undefined"!=typeof a.stack&&a.stack){for(var b,c,f,g=/^\s*at (?:(.*?) ?\()?((?:file|https?|blob|chrome-extension|native|eval|webpack||[a-z]:|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,h=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i,i=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\/.*?|\[native code\]|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i,k=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,l=/\((\S*)(?::(\d+))(?::(\d+))\)/,m=a.stack.split("\n"),n=[],o=(/^(.*) is undefined$/.exec(a.message),0),p=m.length;o eval")>-1;r&&(b=k.exec(c[3]))?(c[3]=b[1],c[4]=b[2],c[5]=null):0!==o||c[5]||"undefined"==typeof a.columnNumber||(n[0].column=a.columnNumber+1),f={url:c[3],func:c[1]||j,args:c[2]?c[2].split(","):[],line:c[4]?+c[4]:null,column:c[5]?+c[5]:null}}if(!f.func&&f.line&&(f.func=j),f.url&&"blob:"===f.url.substr(0,5)){var s=new XMLHttpRequest;if(s.open("GET",f.url,!1),s.send(null),200===s.status){var t=s.responseText||"";t=t.slice(-300);var u=t.match(/\/\/# sourceMappingURL=(.*)$/);if(u){var v=u[1];"~"===v.charAt(0)&&(v=e()+v.slice(1)),f.url=v.slice(0,-4)}}}n.push(f)}return n.length?{name:a.name,
+message:a.message,url:d(),stack:n}:null}}function b(a,b,c,d){var e={url:b,line:c};if(e.url&&e.line){if(a.incomplete=!1,e.func||(e.func=j),a.stack.length>0&&a.stack[0].url===e.url){if(a.stack[0].line===e.line)return!1;if(!a.stack[0].line&&a.stack[0].func===e.func)return a.stack[0].line=e.line,!1}return a.stack.unshift(e),a.partial=!0,!0}return a.incomplete=!0,!1}function c(a,e){for(var h,i,k=/function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,l=[],m={},n=!1,o=c.caller;o&&!n;o=o.caller)if(o!==f&&o!==g.report){if(i={url:null,func:j,line:null,column:null},o.name?i.func=o.name:(h=k.exec(o.toString()))&&(i.func=h[1]),"undefined"==typeof i.func)try{i.func=h.input.substring(0,h.input.indexOf("{"))}catch(p){}m[""+o]?n=!0:m[""+o]=!0,l.push(i)}e&&l.splice(0,e);var q={name:a.name,message:a.message,url:d(),stack:l};return b(q,a.sourceURL||a.fileName,a.line||a.lineNumber,a.message||a.description),q}function f(b,e){var f=null;e=null==e?0:+e;try{if(f=a(b))return f}catch(h){if(g.debug)throw h}try{if(f=c(b,e+1))return f}catch(h){if(g.debug)throw h}return{name:b.name,message:b.message,url:d()}}return f.augmentStackTraceWithInitialElement=b,f.computeStackTraceFromStackProp=a,f}(),b.exports=g}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{8:8}],10:[function(a,b,c){function d(a,b){for(var c=0;c0){var i=d(c,this);~i?c.splice(i+1):c.push(this),~i?e.splice(i,1/0,g):e.push(g),~d(c,h)&&(h=b.call(this,g,h))}else c.push(h);return null==a?h instanceof Error?f(h):h:a.call(this,g,h)}}c=b.exports=e,c.getSerialize=g},{}],11:[function(a,b,c){function d(a,b){var c=(65535&a)+(65535&b),d=(a>>16)+(b>>16)+(c>>16);return d<<16|65535&c}function e(a,b){return a<>>32-b}function f(a,b,c,f,g,h){return d(e(d(d(b,a),d(f,h)),g),c)}function g(a,b,c,d,e,g,h){return f(b&c|~b&d,a,b,e,g,h)}function h(a,b,c,d,e,g,h){return f(b&d|c&~d,a,b,e,g,h)}function i(a,b,c,d,e,g,h){return f(b^c^d,a,b,e,g,h)}function j(a,b,c,d,e,g,h){return f(c^(b|~d),a,b,e,g,h)}function k(a,b){a[b>>5]|=128<>>9<<4)+14]=b;var c,e,f,k,l,m=1732584193,n=-271733879,o=-1732584194,p=271733878;for(c=0;c>5]>>>b%32&255);return c}function m(a){var b,c=[];for(c[(a.length>>2)-1]=void 0,b=0;b>5]|=(255&a.charCodeAt(b/8))<16&&(e=k(e,8*a.length)),c=0;c<16;c+=1)f[c]=909522486^e[c],g[c]=1549556828^e[c];return d=k(f.concat(m(b)),512+8*b.length),l(k(g.concat(d),640))}function p(a){var b,c,d="0123456789abcdef",e="";for(c=0;c>>4&15)+d.charAt(15&b);return e}function q(a){return unescape(encodeURIComponent(a))}function r(a){return n(q(a))}function s(a){return p(r(a))}function t(a,b){return o(q(a),q(b))}function u(a,b){return p(t(a,b))}function v(a,b,c){return b?c?t(b,a):u(b,a):c?r(a):s(a)}b.exports=v},{}]},{},[7,1,2,3])(7)});
+//# sourceMappingURL=raven.min.js.map
\ No newline at end of file
diff --git a/packages/raven-js/dist/angular,console,require/raven.min.js.map b/packages/raven-js/dist/angular,console,require/raven.min.js.map
new file mode 100644
index 000000000000..9a67103a716b
--- /dev/null
+++ b/packages/raven-js/dist/angular,console,require/raven.min.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["raven.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Raven","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length","1","_dereq_","angularPlugin","angular","RavenProvider","$get","$window","ExceptionHandlerProvider","$provide","decorator","exceptionHandler","R","$delegate","ex","cause","captureException","extra","moduleName","provider","config","setDataCallback","wrappedCallback","data","_normalizeData","angularPattern","exception","values","matches","exec","value","type","message","angularDocs","substr","addPlugin","7","8","2","consolePlugin","console","pluginOptions","logLevels","levels","push","callback","msg","captureMessage","level","pop","wrapConsoleMethod","wrapMethod","5","3","requirePlugin","wrap","deep","4","RavenConfigError","name","prototype","constructor","utils","originalConsoleLevel","originalConsole","sentryLevel","args","slice","arguments","safeJoin","logger","Function","apply","6","now","Date","keepOriginalCallback","original","isFunction","_hasJSON","JSON","stringify","_hasDocument","isUndefined","_document","_hasNavigator","_navigator","_lastCapturedException","_lastData","_lastEventId","_globalServer","_globalKey","_globalProject","_globalContext","_globalOptions","release","_window","SENTRY_RELEASE","id","ignoreErrors","ignoreUrls","whitelistUrls","includePaths","headers","collectWindowErrors","captureUnhandledRejections","maxMessageLength","maxUrlLength","stackTraceLimit","autoBreadcrumbs","instrument","sampleRate","sanitizeKeys","_fetchDefaults","method","keepalive","referrerPolicy","supportsReferrerPolicy","_ignoreOnError","_isRavenInstalled","_originalErrorStackTraceLimit","_originalConsole","_originalConsoleMethods","_plugins","_startTime","_wrappedBuiltIns","_breadcrumbs","_lastCapturedEvent","_location","location","_lastHref","href","_resetBackoff","TraceKit","md5","isErrorEvent","isDOMError","isDOMException","isError","isObject","isPlainObject","isString","isArray","isEmptyObject","each","objectMerge","truncate","objectFrozen","hasKey","joinRegExp","urlencode","uuid4","htmlTreeAsString","isSameException","isSameStacktrace","parseUrl","fill","supportsFetch","serializeKeysForMessage","serializeException","sanitize","dsnKeys","split","dsnPattern","document","navigator","VERSION","debug","dsn","options","_logDebug","globalOptions","key","setDSN","maxBreadcrumbs","Math","max","min","autoBreadcrumbDefaults","xhr","dom","sentry","toString","instrumentDefaults","tryCatch","install","isSetup","report","subscribe","_handleOnErrorStackInfo","_attachPromiseRejectionHandler","_patchFunctionToString","_instrumentTryCatch","_instrumentBreadcrumbs","_drainPlugins","uri","_parseDSN","lastSlash","path","lastIndexOf","_dsn","user","_globalSecret","pass","_getGlobalServer","_globalEndpoint","context","func","undefined","_before","wrapped","_ignoreNextOnError","__raven__","__raven_wrapper__","property","__orig__","uninstall","_detachPromiseRejectionHandler","_unpatchFunctionToString","_restoreBuiltIns","_restoreConsole","U","event","reason","unhandledPromiseRejection","C","_promiseRejectionHandler","bind","addEventListener","Q","removeEventListener","trimHeadFrames","error","stacktrace","_getCaptureExceptionOptionsFromPlainObject","stack","computeStackTrace","_handleStackInfo","ex1","V","currentOptions","exKeys","Object","keys","sort","fingerprint","__serialized__","test","initialCall","fileurl","url","frames","_prepareFrames","reverse","_send","captureBreadcrumb","obj","crumb","timestamp","breadcrumbCallback","result","shift","plugin","pluginArgs","setUserContext","setExtraContext","_mergeContext","setTagsContext","tags","clearContext","getContext","parse","setEnvironment","environment","setRelease","dataCallback","setBreadcrumbCallback","setShouldSendCallback","shouldSendCallback","setTransport","transport","lastException","lastEventId","ravenNotConfiguredError","afterLoad","RavenConfig","showReportDialog","eventId","encode","encodeURIComponent","qs","email","globalServer","script","createElement","async","src","head","body","appendChild","M","setTimeout","_","eventType","evt","toUpperCase","createEvent","initEvent","createEventObject","dispatchEvent","fireEvent","toLowerCase","aa","evtName","_keypressTimeout","target","category","ca","debounceDuration","tagName","isContentEditable","timeout","_breadcrumbEventHandler","clearTimeout","da","from","to","parsedLoc","parsedTo","parsedFrom","protocol","host","relative","D","_originalFunctionToString","E","wrapTimeFn","orig","fn","Array","originalCallback","wrapEventTarget","proto","hasOwnProperty","capture","secure","handleEvent","err","before","clickHandler","keypressHandler","_keypressEventHandler","wrappedBuiltIns","requestAnimationFrame","cb","eventTargets","F","wrapProp","prop","xhrproto","XMLHttpRequest","origOpen","indexOf","__raven_xhr","status_code","origSend","onreadystatechangeHandler","readyState","status","props","j","onreadystatechange","origFetch","fetchInput","Request","fetchData","then","response","attachEvent","chrome","isChromePackagedApp","app","runtime","hasPushAndReplaceState","history","pushState","replaceState","oldOnPopState","onpopstate","currentHref","_captureUrlChange","historyReplacementFunction","origHistFunction","log","consoleMethodCallback","S","builtin","T","G","installer","concat","H","str","m","allowSecretKey","K","port","B","W","stackInfo","_triggerEvent","_processException","lineno","Y","frame","_normalizeFrame","in_app","ha","stackInfoUrl","normalized","filename","line","colno","column","function","ga","prefixedMessage","transaction","ia","request","Referer","breadcrumbs","_trimBreadcrumbs","ja","urlProp","urlProps","ka","httpData","userAgent","User-Agent","referrer","z","_backoffDuration","_backoffStart","na","oa","current","last","pa","_shouldBackoff","retry","get","getResponseHeader","parseInt","Z","baseData","project","platform","_getHttpData","serverName","server_name","_sanitizeData","forEach","random","_sendProcessedPayload","qa","sa","ra","_trimPacket","allowDuplicates","_isRepeatData","event_id","_getUuid","auth","sentry_version","sentry_client","sentry_key","sentry_secret","_makeRequest","onSuccess","onError","_setBackoffState","ta","opts","evaluatedHeaders","evaluatedFetchParameters","_evaluateHash","fetchParameters","defaultFetchOptions","fetchOptions","fetch","ok","hasCORS","XDomainRequest","replace","onload","onerror","open","setRequestHeader","send","ua","hash","evaluated","A","$","setUser","setReleaseContext","10","11","9","RavenConstructor","_Raven","noConflict","Client","what","supportsErrorEvent","ErrorEvent","supportsDOMError","DOMError","supportsDOMException","DOMException","Headers","Response","supportsPromiseRejectionEvent","PromiseRejectionEvent","normalizedData","obj1","obj2","isFrozen","object","patterns","pattern","sources","len","source","RegExp","join","pairs","match","query","fragment","crypto","msCrypto","getRandomValues","arr","Uint16Array","pad","num","v","c","elem","nextStr","MAX_TRAVERSE_HEIGHT","MAX_OUTPUT_LEN","out","height","separator","sepLength","htmlElementAsString","parentNode","className","classes","attr","attrWhitelist","getAttribute","isOnlyOneTruthy","b","isBothUndefined","ex2","stack1","stack2","frames1","frames2","replacement","track","input","delimiter","output","String","utf8Length","encodeURI","jsonSize","serializeValue","maxLength","serializeObject","depth","reduce","acc","map","val","maxSize","MAX_SERIALIZE_EXCEPTION_DEPTH","MAX_SERIALIZE_EXCEPTION_SIZE","serialized","filter","MAX_SERIALIZE_KEYS_LENGTH","usedKeys","sanitizeWorker","workerInput","k","sanitizeRegExp","sanitizeMask","safeInput","o_O","getLocationHref","getLocationOrigin","origin","hostname","_slice","UNKNOWN_FUNCTION","ERROR_TYPES_RE","handler","installGlobalHandler","handlers","unsubscribe","splice","unsubscribeAll","uninstallGlobalHandler","notifyHandlers","isWindowError","inner","traceKitWindowOnError","lineNo","colNo","lastExceptionStack","augmentStackTraceWithInitialElement","processLastException","groups","_oldOnerrorHandler","_onErrorHandlerInstalled","_lastExceptionStack","_lastArgs","lastArgs","rethrow","incomplete","computeStackTraceFromStackProp","submatch","parts","element","winjs","gecko","geckoEval","chromeEval","lines","isNative","isEval","columnNumber","responseText","sourceMaps","sourceMapAddress","charAt","initial","unshift","partial","computeStackTraceByWalkingCallerChain","item","functionName","funcs","recursion","curr","caller","substring","sourceURL","fileName","lineNumber","description","haystack","needle","replacer","spaces","cycleReplacer","serializer","stringifyError","thisPos","Infinity","getSerialize","safeAdd","x","y","lsw","msw","bitRotateLeft","cnt","md5cmn","q","md5ff","d","md5gg","md5hh","md5ii","binlMD5","olda","oldb","oldc","oldd","binl2rstr","length32","fromCharCode","rstr2binl","length8","charCodeAt","rstrMD5","rstrHMACMD5","bkey","ipad","opad","rstr2hex","hexTab","str2rstrUTF8","unescape","rawMD5","hexMD5","rawHMACMD5","hexHMACMD5","string","raw"],"mappings":"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","file":"raven.min.js"}
\ No newline at end of file
diff --git a/packages/raven-js/dist/angular,console,vue/raven.js b/packages/raven-js/dist/angular,console,vue/raven.js
new file mode 100644
index 000000000000..5dd6314684e9
--- /dev/null
+++ b/packages/raven-js/dist/angular,console,vue/raven.js
@@ -0,0 +1,4172 @@
+/*! Raven.js 3.25.2 (30b6d4e) | github.com/getsentry/raven-js */
+
+/*
+ * Includes TraceKit
+ * https://github.com/getsentry/TraceKit
+ *
+ * Copyright 2018 Matt Robenolt and other contributors
+ * Released under the BSD license
+ * https://github.com/getsentry/raven-js/blob/master/LICENSE
+ *
+ */
+
+(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Raven = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o' : 'anonymous component') +
+ (vm._isVue && vm.$options.__file ? ' at ' + vm.$options.__file : '')
+ );
+}
+
+function vuePlugin(Raven, Vue) {
+ Vue = Vue || window.Vue;
+
+ // quit if Vue isn't on the page
+ if (!Vue || !Vue.config) return;
+
+ var _oldOnError = Vue.config.errorHandler;
+ Vue.config.errorHandler = function VueErrorHandler(error, vm, info) {
+ var metaData = {};
+
+ // vm and lifecycleHook are not always available
+ if (Object.prototype.toString.call(vm) === '[object Object]') {
+ metaData.componentName = formatComponentName(vm);
+ metaData.propsData = vm.$options.propsData;
+ }
+
+ if (typeof info !== 'undefined') {
+ metaData.lifecycleHook = info;
+ }
+
+ Raven.captureException(error, {
+ extra: metaData
+ });
+
+ if (typeof _oldOnError === 'function') {
+ _oldOnError.call(this, error, vm, info);
+ }
+ };
+}
+
+module.exports = vuePlugin;
+
+_dereq_(7).addPlugin(module.exports);
+},{"7":7}],4:[function(_dereq_,module,exports){
+function RavenConfigError(message) {
+ this.name = 'RavenConfigError';
+ this.message = message;
+}
+RavenConfigError.prototype = new Error();
+RavenConfigError.prototype.constructor = RavenConfigError;
+
+module.exports = RavenConfigError;
+
+},{}],5:[function(_dereq_,module,exports){
+var utils = _dereq_(8);
+
+var wrapMethod = function(console, level, callback) {
+ var originalConsoleLevel = console[level];
+ var originalConsole = console;
+
+ if (!(level in console)) {
+ return;
+ }
+
+ var sentryLevel = level === 'warn' ? 'warning' : level;
+
+ console[level] = function() {
+ var args = [].slice.call(arguments);
+
+ var msg = utils.safeJoin(args, ' ');
+ var data = {level: sentryLevel, logger: 'console', extra: {arguments: args}};
+
+ if (level === 'assert') {
+ if (args[0] === false) {
+ // Default browsers message
+ msg =
+ 'Assertion failed: ' + (utils.safeJoin(args.slice(1), ' ') || 'console.assert');
+ data.extra.arguments = args.slice(1);
+ callback && callback(msg, data);
+ }
+ } else {
+ callback && callback(msg, data);
+ }
+
+ // this fails for some browsers. :(
+ if (originalConsoleLevel) {
+ // IE9 doesn't allow calling apply on console functions directly
+ // See: https://stackoverflow.com/questions/5472938/does-ie9-support-console-log-and-is-it-a-real-function#answer-5473193
+ Function.prototype.apply.call(originalConsoleLevel, originalConsole, args);
+ }
+ };
+};
+
+module.exports = {
+ wrapMethod: wrapMethod
+};
+
+},{"8":8}],6:[function(_dereq_,module,exports){
+(function (global){
+/*global XDomainRequest:false */
+
+var TraceKit = _dereq_(9);
+var stringify = _dereq_(10);
+var md5 = _dereq_(11);
+var RavenConfigError = _dereq_(4);
+
+var utils = _dereq_(8);
+var isErrorEvent = utils.isErrorEvent;
+var isDOMError = utils.isDOMError;
+var isDOMException = utils.isDOMException;
+var isError = utils.isError;
+var isObject = utils.isObject;
+var isPlainObject = utils.isPlainObject;
+var isUndefined = utils.isUndefined;
+var isFunction = utils.isFunction;
+var isString = utils.isString;
+var isArray = utils.isArray;
+var isEmptyObject = utils.isEmptyObject;
+var each = utils.each;
+var objectMerge = utils.objectMerge;
+var truncate = utils.truncate;
+var objectFrozen = utils.objectFrozen;
+var hasKey = utils.hasKey;
+var joinRegExp = utils.joinRegExp;
+var urlencode = utils.urlencode;
+var uuid4 = utils.uuid4;
+var htmlTreeAsString = utils.htmlTreeAsString;
+var isSameException = utils.isSameException;
+var isSameStacktrace = utils.isSameStacktrace;
+var parseUrl = utils.parseUrl;
+var fill = utils.fill;
+var supportsFetch = utils.supportsFetch;
+var supportsReferrerPolicy = utils.supportsReferrerPolicy;
+var serializeKeysForMessage = utils.serializeKeysForMessage;
+var serializeException = utils.serializeException;
+var sanitize = utils.sanitize;
+
+var wrapConsoleMethod = _dereq_(5).wrapMethod;
+
+var dsnKeys = 'source protocol user pass host port path'.split(' '),
+ dsnPattern = /^(?:(\w+):)?\/\/(?:(\w+)(:\w+)?@)?([\w\.-]+)(?::(\d+))?(\/.*)/;
+
+function now() {
+ return +new Date();
+}
+
+// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)
+var _window =
+ typeof window !== 'undefined'
+ ? window
+ : typeof global !== 'undefined'
+ ? global
+ : typeof self !== 'undefined'
+ ? self
+ : {};
+var _document = _window.document;
+var _navigator = _window.navigator;
+
+function keepOriginalCallback(original, callback) {
+ return isFunction(callback)
+ ? function(data) {
+ return callback(data, original);
+ }
+ : callback;
+}
+
+// First, check for JSON support
+// If there is no JSON, we no-op the core features of Raven
+// since JSON is required to encode the payload
+function Raven() {
+ this._hasJSON = !!(typeof JSON === 'object' && JSON.stringify);
+ // Raven can run in contexts where there's no document (react-native)
+ this._hasDocument = !isUndefined(_document);
+ this._hasNavigator = !isUndefined(_navigator);
+ this._lastCapturedException = null;
+ this._lastData = null;
+ this._lastEventId = null;
+ this._globalServer = null;
+ this._globalKey = null;
+ this._globalProject = null;
+ this._globalContext = {};
+ this._globalOptions = {
+ // SENTRY_RELEASE can be injected by https://github.com/getsentry/sentry-webpack-plugin
+ release: _window.SENTRY_RELEASE && _window.SENTRY_RELEASE.id,
+ logger: 'javascript',
+ ignoreErrors: [],
+ ignoreUrls: [],
+ whitelistUrls: [],
+ includePaths: [],
+ headers: null,
+ collectWindowErrors: true,
+ captureUnhandledRejections: true,
+ maxMessageLength: 0,
+ // By default, truncates URL values to 250 chars
+ maxUrlLength: 250,
+ stackTraceLimit: 50,
+ autoBreadcrumbs: true,
+ instrument: true,
+ sampleRate: 1,
+ sanitizeKeys: []
+ };
+ this._fetchDefaults = {
+ method: 'POST',
+ keepalive: true,
+ // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default
+ // https://caniuse.com/#feat=referrer-policy
+ // It doesn't. And it throw exception instead of ignoring this parameter...
+ // REF: https://github.com/getsentry/raven-js/issues/1233
+ referrerPolicy: supportsReferrerPolicy() ? 'origin' : ''
+ };
+ this._ignoreOnError = 0;
+ this._isRavenInstalled = false;
+ this._originalErrorStackTraceLimit = Error.stackTraceLimit;
+ // capture references to window.console *and* all its methods first
+ // before the console plugin has a chance to monkey patch
+ this._originalConsole = _window.console || {};
+ this._originalConsoleMethods = {};
+ this._plugins = [];
+ this._startTime = now();
+ this._wrappedBuiltIns = [];
+ this._breadcrumbs = [];
+ this._lastCapturedEvent = null;
+ this._keypressTimeout;
+ this._location = _window.location;
+ this._lastHref = this._location && this._location.href;
+ this._resetBackoff();
+
+ // eslint-disable-next-line guard-for-in
+ for (var method in this._originalConsole) {
+ this._originalConsoleMethods[method] = this._originalConsole[method];
+ }
+}
+
+/*
+ * The core Raven singleton
+ *
+ * @this {Raven}
+ */
+
+Raven.prototype = {
+ // Hardcode version string so that raven source can be loaded directly via
+ // webpack (using a build step causes webpack #1617). Grunt verifies that
+ // this value matches package.json during build.
+ // See: https://github.com/getsentry/raven-js/issues/465
+ VERSION: '3.25.2',
+
+ debug: false,
+
+ TraceKit: TraceKit, // alias to TraceKit
+
+ /*
+ * Configure Raven with a DSN and extra options
+ *
+ * @param {string} dsn The public Sentry DSN
+ * @param {object} options Set of global options [optional]
+ * @return {Raven}
+ */
+ config: function(dsn, options) {
+ var self = this;
+
+ if (self._globalServer) {
+ this._logDebug('error', 'Error: Raven has already been configured');
+ return self;
+ }
+ if (!dsn) return self;
+
+ var globalOptions = self._globalOptions;
+
+ // merge in options
+ if (options) {
+ each(options, function(key, value) {
+ // tags and extra are special and need to be put into context
+ if (key === 'tags' || key === 'extra' || key === 'user') {
+ self._globalContext[key] = value;
+ } else {
+ globalOptions[key] = value;
+ }
+ });
+ }
+
+ self.setDSN(dsn);
+
+ // "Script error." is hard coded into browsers for errors that it can't read.
+ // this is the result of a script being pulled in from an external domain and CORS.
+ globalOptions.ignoreErrors.push(/^Script error\.?$/);
+ globalOptions.ignoreErrors.push(/^Javascript error: Script error\.? on line 0$/);
+
+ // join regexp rules into one big rule
+ globalOptions.ignoreErrors = joinRegExp(globalOptions.ignoreErrors);
+ globalOptions.ignoreUrls = globalOptions.ignoreUrls.length
+ ? joinRegExp(globalOptions.ignoreUrls)
+ : false;
+ globalOptions.whitelistUrls = globalOptions.whitelistUrls.length
+ ? joinRegExp(globalOptions.whitelistUrls)
+ : false;
+ globalOptions.includePaths = joinRegExp(globalOptions.includePaths);
+ globalOptions.maxBreadcrumbs = Math.max(
+ 0,
+ Math.min(globalOptions.maxBreadcrumbs || 100, 100)
+ ); // default and hard limit is 100
+
+ var autoBreadcrumbDefaults = {
+ xhr: true,
+ console: true,
+ dom: true,
+ location: true,
+ sentry: true
+ };
+
+ var autoBreadcrumbs = globalOptions.autoBreadcrumbs;
+ if ({}.toString.call(autoBreadcrumbs) === '[object Object]') {
+ autoBreadcrumbs = objectMerge(autoBreadcrumbDefaults, autoBreadcrumbs);
+ } else if (autoBreadcrumbs !== false) {
+ autoBreadcrumbs = autoBreadcrumbDefaults;
+ }
+ globalOptions.autoBreadcrumbs = autoBreadcrumbs;
+
+ var instrumentDefaults = {
+ tryCatch: true
+ };
+
+ var instrument = globalOptions.instrument;
+ if ({}.toString.call(instrument) === '[object Object]') {
+ instrument = objectMerge(instrumentDefaults, instrument);
+ } else if (instrument !== false) {
+ instrument = instrumentDefaults;
+ }
+ globalOptions.instrument = instrument;
+
+ TraceKit.collectWindowErrors = !!globalOptions.collectWindowErrors;
+
+ // return for chaining
+ return self;
+ },
+
+ /*
+ * Installs a global window.onerror error handler
+ * to capture and report uncaught exceptions.
+ * At this point, install() is required to be called due
+ * to the way TraceKit is set up.
+ *
+ * @return {Raven}
+ */
+ install: function() {
+ var self = this;
+ if (self.isSetup() && !self._isRavenInstalled) {
+ TraceKit.report.subscribe(function() {
+ self._handleOnErrorStackInfo.apply(self, arguments);
+ });
+
+ if (self._globalOptions.captureUnhandledRejections) {
+ self._attachPromiseRejectionHandler();
+ }
+
+ self._patchFunctionToString();
+
+ if (self._globalOptions.instrument && self._globalOptions.instrument.tryCatch) {
+ self._instrumentTryCatch();
+ }
+
+ if (self._globalOptions.autoBreadcrumbs) self._instrumentBreadcrumbs();
+
+ // Install all of the plugins
+ self._drainPlugins();
+
+ self._isRavenInstalled = true;
+ }
+
+ Error.stackTraceLimit = self._globalOptions.stackTraceLimit;
+ return this;
+ },
+
+ /*
+ * Set the DSN (can be called multiple time unlike config)
+ *
+ * @param {string} dsn The public Sentry DSN
+ */
+ setDSN: function(dsn) {
+ var self = this,
+ uri = self._parseDSN(dsn),
+ lastSlash = uri.path.lastIndexOf('/'),
+ path = uri.path.substr(1, lastSlash);
+
+ self._dsn = dsn;
+ self._globalKey = uri.user;
+ self._globalSecret = uri.pass && uri.pass.substr(1);
+ self._globalProject = uri.path.substr(lastSlash + 1);
+
+ self._globalServer = self._getGlobalServer(uri);
+
+ self._globalEndpoint =
+ self._globalServer + '/' + path + 'api/' + self._globalProject + '/store/';
+
+ // Reset backoff state since we may be pointing at a
+ // new project/server
+ this._resetBackoff();
+ },
+
+ /*
+ * Wrap code within a context so Raven can capture errors
+ * reliably across domains that is executed immediately.
+ *
+ * @param {object} options A specific set of options for this context [optional]
+ * @param {function} func The callback to be immediately executed within the context
+ * @param {array} args An array of arguments to be called with the callback [optional]
+ */
+ context: function(options, func, args) {
+ if (isFunction(options)) {
+ args = func || [];
+ func = options;
+ options = undefined;
+ }
+
+ return this.wrap(options, func).apply(this, args);
+ },
+
+ /*
+ * Wrap code within a context and returns back a new function to be executed
+ *
+ * @param {object} options A specific set of options for this context [optional]
+ * @param {function} func The function to be wrapped in a new context
+ * @param {function} func A function to call before the try/catch wrapper [optional, private]
+ * @return {function} The newly wrapped functions with a context
+ */
+ wrap: function(options, func, _before) {
+ var self = this;
+ // 1 argument has been passed, and it's not a function
+ // so just return it
+ if (isUndefined(func) && !isFunction(options)) {
+ return options;
+ }
+
+ // options is optional
+ if (isFunction(options)) {
+ func = options;
+ options = undefined;
+ }
+
+ // At this point, we've passed along 2 arguments, and the second one
+ // is not a function either, so we'll just return the second argument.
+ if (!isFunction(func)) {
+ return func;
+ }
+
+ // We don't wanna wrap it twice!
+ try {
+ if (func.__raven__) {
+ return func;
+ }
+
+ // If this has already been wrapped in the past, return that
+ if (func.__raven_wrapper__) {
+ return func.__raven_wrapper__;
+ }
+ } catch (e) {
+ // Just accessing custom props in some Selenium environments
+ // can cause a "Permission denied" exception (see raven-js#495).
+ // Bail on wrapping and return the function as-is (defers to window.onerror).
+ return func;
+ }
+
+ function wrapped() {
+ var args = [],
+ i = arguments.length,
+ deep = !options || (options && options.deep !== false);
+
+ if (_before && isFunction(_before)) {
+ _before.apply(this, arguments);
+ }
+
+ // Recursively wrap all of a function's arguments that are
+ // functions themselves.
+ while (i--) args[i] = deep ? self.wrap(options, arguments[i]) : arguments[i];
+
+ try {
+ // Attempt to invoke user-land function
+ // NOTE: If you are a Sentry user, and you are seeing this stack frame, it
+ // means Raven caught an error invoking your application code. This is
+ // expected behavior and NOT indicative of a bug with Raven.js.
+ return func.apply(this, args);
+ } catch (e) {
+ self._ignoreNextOnError();
+ self.captureException(e, options);
+ throw e;
+ }
+ }
+
+ // copy over properties of the old function
+ for (var property in func) {
+ if (hasKey(func, property)) {
+ wrapped[property] = func[property];
+ }
+ }
+ wrapped.prototype = func.prototype;
+
+ func.__raven_wrapper__ = wrapped;
+ // Signal that this function has been wrapped/filled already
+ // for both debugging and to prevent it to being wrapped/filled twice
+ wrapped.__raven__ = true;
+ wrapped.__orig__ = func;
+
+ return wrapped;
+ },
+
+ /**
+ * Uninstalls the global error handler.
+ *
+ * @return {Raven}
+ */
+ uninstall: function() {
+ TraceKit.report.uninstall();
+
+ this._detachPromiseRejectionHandler();
+ this._unpatchFunctionToString();
+ this._restoreBuiltIns();
+ this._restoreConsole();
+
+ Error.stackTraceLimit = this._originalErrorStackTraceLimit;
+ this._isRavenInstalled = false;
+
+ return this;
+ },
+
+ /**
+ * Callback used for `unhandledrejection` event
+ *
+ * @param {PromiseRejectionEvent} event An object containing
+ * promise: the Promise that was rejected
+ * reason: the value with which the Promise was rejected
+ * @return void
+ */
+ _promiseRejectionHandler: function(event) {
+ this._logDebug('debug', 'Raven caught unhandled promise rejection:', event);
+ this.captureException(event.reason, {
+ extra: {
+ unhandledPromiseRejection: true
+ }
+ });
+ },
+
+ /**
+ * Installs the global promise rejection handler.
+ *
+ * @return {raven}
+ */
+ _attachPromiseRejectionHandler: function() {
+ this._promiseRejectionHandler = this._promiseRejectionHandler.bind(this);
+ _window.addEventListener &&
+ _window.addEventListener('unhandledrejection', this._promiseRejectionHandler);
+ return this;
+ },
+
+ /**
+ * Uninstalls the global promise rejection handler.
+ *
+ * @return {raven}
+ */
+ _detachPromiseRejectionHandler: function() {
+ _window.removeEventListener &&
+ _window.removeEventListener('unhandledrejection', this._promiseRejectionHandler);
+ return this;
+ },
+
+ /**
+ * Manually capture an exception and send it over to Sentry
+ *
+ * @param {error} ex An exception to be logged
+ * @param {object} options A specific set of options for this error [optional]
+ * @return {Raven}
+ */
+ captureException: function(ex, options) {
+ options = objectMerge({trimHeadFrames: 0}, options ? options : {});
+
+ if (isErrorEvent(ex) && ex.error) {
+ // If it is an ErrorEvent with `error` property, extract it to get actual Error
+ ex = ex.error;
+ } else if (isDOMError(ex) || isDOMException(ex)) {
+ // If it is a DOMError or DOMException (which are legacy APIs, but still supported in some browsers)
+ // then we just extract the name and message, as they don't provide anything else
+ // https://developer.mozilla.org/en-US/docs/Web/API/DOMError
+ // https://developer.mozilla.org/en-US/docs/Web/API/DOMException
+ var name = ex.name || (isDOMError(ex) ? 'DOMError' : 'DOMException');
+ var message = ex.message ? name + ': ' + ex.message : name;
+
+ return this.captureMessage(
+ message,
+ objectMerge(options, {
+ // neither DOMError or DOMException provide stack trace and we most likely wont get it this way as well
+ // but it's barely any overhead so we may at least try
+ stacktrace: true,
+ trimHeadFrames: options.trimHeadFrames + 1
+ })
+ );
+ } else if (isError(ex)) {
+ // we have a real Error object
+ ex = ex;
+ } else if (isPlainObject(ex)) {
+ // If it is plain Object, serialize it manually and extract options
+ // This will allow us to group events based on top-level keys
+ // which is much better than creating new group when any key/value change
+ options = this._getCaptureExceptionOptionsFromPlainObject(options, ex);
+ ex = new Error(options.message);
+ } else {
+ // If none of previous checks were valid, then it means that
+ // it's not a DOMError/DOMException
+ // it's not a plain Object
+ // it's not a valid ErrorEvent (one with an error property)
+ // it's not an Error
+ // So bail out and capture it as a simple message:
+ return this.captureMessage(
+ ex,
+ objectMerge(options, {
+ stacktrace: true, // if we fall back to captureMessage, default to attempting a new trace
+ trimHeadFrames: options.trimHeadFrames + 1
+ })
+ );
+ }
+
+ // Store the raw exception object for potential debugging and introspection
+ this._lastCapturedException = ex;
+
+ // TraceKit.report will re-raise any exception passed to it,
+ // which means you have to wrap it in try/catch. Instead, we
+ // can wrap it here and only re-raise if TraceKit.report
+ // raises an exception different from the one we asked to
+ // report on.
+ try {
+ var stack = TraceKit.computeStackTrace(ex);
+ this._handleStackInfo(stack, options);
+ } catch (ex1) {
+ if (ex !== ex1) {
+ throw ex1;
+ }
+ }
+
+ return this;
+ },
+
+ _getCaptureExceptionOptionsFromPlainObject: function(currentOptions, ex) {
+ var exKeys = Object.keys(ex).sort();
+ var options = objectMerge(currentOptions, {
+ message:
+ 'Non-Error exception captured with keys: ' + serializeKeysForMessage(exKeys),
+ fingerprint: [md5(exKeys)],
+ extra: currentOptions.extra || {}
+ });
+ options.extra.__serialized__ = serializeException(ex);
+
+ return options;
+ },
+
+ /*
+ * Manually send a message to Sentry
+ *
+ * @param {string} msg A plain message to be captured in Sentry
+ * @param {object} options A specific set of options for this message [optional]
+ * @return {Raven}
+ */
+ captureMessage: function(msg, options) {
+ // config() automagically converts ignoreErrors from a list to a RegExp so we need to test for an
+ // early call; we'll error on the side of logging anything called before configuration since it's
+ // probably something you should see:
+ if (
+ !!this._globalOptions.ignoreErrors.test &&
+ this._globalOptions.ignoreErrors.test(msg)
+ ) {
+ return;
+ }
+
+ options = options || {};
+ msg = msg + ''; // Make sure it's actually a string
+
+ var data = objectMerge(
+ {
+ message: msg
+ },
+ options
+ );
+
+ var ex;
+ // Generate a "synthetic" stack trace from this point.
+ // NOTE: If you are a Sentry user, and you are seeing this stack frame, it is NOT indicative
+ // of a bug with Raven.js. Sentry generates synthetic traces either by configuration,
+ // or if it catches a thrown object without a "stack" property.
+ try {
+ throw new Error(msg);
+ } catch (ex1) {
+ ex = ex1;
+ }
+
+ // null exception name so `Error` isn't prefixed to msg
+ ex.name = null;
+ var stack = TraceKit.computeStackTrace(ex);
+
+ // stack[0] is `throw new Error(msg)` call itself, we are interested in the frame that was just before that, stack[1]
+ var initialCall = isArray(stack.stack) && stack.stack[1];
+
+ // if stack[1] is `Raven.captureException`, it means that someone passed a string to it and we redirected that call
+ // to be handled by `captureMessage`, thus `initialCall` is the 3rd one, not 2nd
+ // initialCall => captureException(string) => captureMessage(string)
+ if (initialCall && initialCall.func === 'Raven.captureException') {
+ initialCall = stack.stack[2];
+ }
+
+ var fileurl = (initialCall && initialCall.url) || '';
+
+ if (
+ !!this._globalOptions.ignoreUrls.test &&
+ this._globalOptions.ignoreUrls.test(fileurl)
+ ) {
+ return;
+ }
+
+ if (
+ !!this._globalOptions.whitelistUrls.test &&
+ !this._globalOptions.whitelistUrls.test(fileurl)
+ ) {
+ return;
+ }
+
+ if (this._globalOptions.stacktrace || (options && options.stacktrace)) {
+ // fingerprint on msg, not stack trace (legacy behavior, could be revisited)
+ data.fingerprint = data.fingerprint == null ? msg : data.fingerprint;
+
+ options = objectMerge(
+ {
+ trimHeadFrames: 0
+ },
+ options
+ );
+ // Since we know this is a synthetic trace, the top frame (this function call)
+ // MUST be from Raven.js, so mark it for trimming
+ // We add to the trim counter so that callers can choose to trim extra frames, such
+ // as utility functions.
+ options.trimHeadFrames += 1;
+
+ var frames = this._prepareFrames(stack, options);
+ data.stacktrace = {
+ // Sentry expects frames oldest to newest
+ frames: frames.reverse()
+ };
+ }
+
+ // Make sure that fingerprint is always wrapped in an array
+ if (data.fingerprint) {
+ data.fingerprint = isArray(data.fingerprint)
+ ? data.fingerprint
+ : [data.fingerprint];
+ }
+
+ // Fire away!
+ this._send(data);
+
+ return this;
+ },
+
+ captureBreadcrumb: function(obj) {
+ var crumb = objectMerge(
+ {
+ timestamp: now() / 1000
+ },
+ obj
+ );
+
+ if (isFunction(this._globalOptions.breadcrumbCallback)) {
+ var result = this._globalOptions.breadcrumbCallback(crumb);
+
+ if (isObject(result) && !isEmptyObject(result)) {
+ crumb = result;
+ } else if (result === false) {
+ return this;
+ }
+ }
+
+ this._breadcrumbs.push(crumb);
+ if (this._breadcrumbs.length > this._globalOptions.maxBreadcrumbs) {
+ this._breadcrumbs.shift();
+ }
+ return this;
+ },
+
+ addPlugin: function(plugin /*arg1, arg2, ... argN*/) {
+ var pluginArgs = [].slice.call(arguments, 1);
+
+ this._plugins.push([plugin, pluginArgs]);
+ if (this._isRavenInstalled) {
+ this._drainPlugins();
+ }
+
+ return this;
+ },
+
+ /*
+ * Set/clear a user to be sent along with the payload.
+ *
+ * @param {object} user An object representing user data [optional]
+ * @return {Raven}
+ */
+ setUserContext: function(user) {
+ // Intentionally do not merge here since that's an unexpected behavior.
+ this._globalContext.user = user;
+
+ return this;
+ },
+
+ /*
+ * Merge extra attributes to be sent along with the payload.
+ *
+ * @param {object} extra An object representing extra data [optional]
+ * @return {Raven}
+ */
+ setExtraContext: function(extra) {
+ this._mergeContext('extra', extra);
+
+ return this;
+ },
+
+ /*
+ * Merge tags to be sent along with the payload.
+ *
+ * @param {object} tags An object representing tags [optional]
+ * @return {Raven}
+ */
+ setTagsContext: function(tags) {
+ this._mergeContext('tags', tags);
+
+ return this;
+ },
+
+ /*
+ * Clear all of the context.
+ *
+ * @return {Raven}
+ */
+ clearContext: function() {
+ this._globalContext = {};
+
+ return this;
+ },
+
+ /*
+ * Get a copy of the current context. This cannot be mutated.
+ *
+ * @return {object} copy of context
+ */
+ getContext: function() {
+ // lol javascript
+ return JSON.parse(stringify(this._globalContext));
+ },
+
+ /*
+ * Set environment of application
+ *
+ * @param {string} environment Typically something like 'production'.
+ * @return {Raven}
+ */
+ setEnvironment: function(environment) {
+ this._globalOptions.environment = environment;
+
+ return this;
+ },
+
+ /*
+ * Set release version of application
+ *
+ * @param {string} release Typically something like a git SHA to identify version
+ * @return {Raven}
+ */
+ setRelease: function(release) {
+ this._globalOptions.release = release;
+
+ return this;
+ },
+
+ /*
+ * Set the dataCallback option
+ *
+ * @param {function} callback The callback to run which allows the
+ * data blob to be mutated before sending
+ * @return {Raven}
+ */
+ setDataCallback: function(callback) {
+ var original = this._globalOptions.dataCallback;
+ this._globalOptions.dataCallback = keepOriginalCallback(original, callback);
+ return this;
+ },
+
+ /*
+ * Set the breadcrumbCallback option
+ *
+ * @param {function} callback The callback to run which allows filtering
+ * or mutating breadcrumbs
+ * @return {Raven}
+ */
+ setBreadcrumbCallback: function(callback) {
+ var original = this._globalOptions.breadcrumbCallback;
+ this._globalOptions.breadcrumbCallback = keepOriginalCallback(original, callback);
+ return this;
+ },
+
+ /*
+ * Set the shouldSendCallback option
+ *
+ * @param {function} callback The callback to run which allows
+ * introspecting the blob before sending
+ * @return {Raven}
+ */
+ setShouldSendCallback: function(callback) {
+ var original = this._globalOptions.shouldSendCallback;
+ this._globalOptions.shouldSendCallback = keepOriginalCallback(original, callback);
+ return this;
+ },
+
+ /**
+ * Override the default HTTP transport mechanism that transmits data
+ * to the Sentry server.
+ *
+ * @param {function} transport Function invoked instead of the default
+ * `makeRequest` handler.
+ *
+ * @return {Raven}
+ */
+ setTransport: function(transport) {
+ this._globalOptions.transport = transport;
+
+ return this;
+ },
+
+ /*
+ * Get the latest raw exception that was captured by Raven.
+ *
+ * @return {error}
+ */
+ lastException: function() {
+ return this._lastCapturedException;
+ },
+
+ /*
+ * Get the last event id
+ *
+ * @return {string}
+ */
+ lastEventId: function() {
+ return this._lastEventId;
+ },
+
+ /*
+ * Determine if Raven is setup and ready to go.
+ *
+ * @return {boolean}
+ */
+ isSetup: function() {
+ if (!this._hasJSON) return false; // needs JSON support
+ if (!this._globalServer) {
+ if (!this.ravenNotConfiguredError) {
+ this.ravenNotConfiguredError = true;
+ this._logDebug('error', 'Error: Raven has not been configured.');
+ }
+ return false;
+ }
+ return true;
+ },
+
+ afterLoad: function() {
+ // TODO: remove window dependence?
+
+ // Attempt to initialize Raven on load
+ var RavenConfig = _window.RavenConfig;
+ if (RavenConfig) {
+ this.config(RavenConfig.dsn, RavenConfig.config).install();
+ }
+ },
+
+ showReportDialog: function(options) {
+ if (
+ !_document // doesn't work without a document (React native)
+ )
+ return;
+
+ options = options || {};
+
+ var lastEventId = options.eventId || this.lastEventId();
+ if (!lastEventId) {
+ throw new RavenConfigError('Missing eventId');
+ }
+
+ var dsn = options.dsn || this._dsn;
+ if (!dsn) {
+ throw new RavenConfigError('Missing DSN');
+ }
+
+ var encode = encodeURIComponent;
+ var qs = '';
+ qs += '?eventId=' + encode(lastEventId);
+ qs += '&dsn=' + encode(dsn);
+
+ var user = options.user || this._globalContext.user;
+ if (user) {
+ if (user.name) qs += '&name=' + encode(user.name);
+ if (user.email) qs += '&email=' + encode(user.email);
+ }
+
+ var globalServer = this._getGlobalServer(this._parseDSN(dsn));
+
+ var script = _document.createElement('script');
+ script.async = true;
+ script.src = globalServer + '/api/embed/error-page/' + qs;
+ (_document.head || _document.body).appendChild(script);
+ },
+
+ /**** Private functions ****/
+ _ignoreNextOnError: function() {
+ var self = this;
+ this._ignoreOnError += 1;
+ setTimeout(function() {
+ // onerror should trigger before setTimeout
+ self._ignoreOnError -= 1;
+ });
+ },
+
+ _triggerEvent: function(eventType, options) {
+ // NOTE: `event` is a native browser thing, so let's avoid conflicting wiht it
+ var evt, key;
+
+ if (!this._hasDocument) return;
+
+ options = options || {};
+
+ eventType = 'raven' + eventType.substr(0, 1).toUpperCase() + eventType.substr(1);
+
+ if (_document.createEvent) {
+ evt = _document.createEvent('HTMLEvents');
+ evt.initEvent(eventType, true, true);
+ } else {
+ evt = _document.createEventObject();
+ evt.eventType = eventType;
+ }
+
+ for (key in options)
+ if (hasKey(options, key)) {
+ evt[key] = options[key];
+ }
+
+ if (_document.createEvent) {
+ // IE9 if standards
+ _document.dispatchEvent(evt);
+ } else {
+ // IE8 regardless of Quirks or Standards
+ // IE9 if quirks
+ try {
+ _document.fireEvent('on' + evt.eventType.toLowerCase(), evt);
+ } catch (e) {
+ // Do nothing
+ }
+ }
+ },
+
+ /**
+ * Wraps addEventListener to capture UI breadcrumbs
+ * @param evtName the event name (e.g. "click")
+ * @returns {Function}
+ * @private
+ */
+ _breadcrumbEventHandler: function(evtName) {
+ var self = this;
+ return function(evt) {
+ // reset keypress timeout; e.g. triggering a 'click' after
+ // a 'keypress' will reset the keypress debounce so that a new
+ // set of keypresses can be recorded
+ self._keypressTimeout = null;
+
+ // It's possible this handler might trigger multiple times for the same
+ // event (e.g. event propagation through node ancestors). Ignore if we've
+ // already captured the event.
+ if (self._lastCapturedEvent === evt) return;
+
+ self._lastCapturedEvent = evt;
+
+ // try/catch both:
+ // - accessing evt.target (see getsentry/raven-js#838, #768)
+ // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly
+ // can throw an exception in some circumstances.
+ var target;
+ try {
+ target = htmlTreeAsString(evt.target);
+ } catch (e) {
+ target = '';
+ }
+
+ self.captureBreadcrumb({
+ category: 'ui.' + evtName, // e.g. ui.click, ui.input
+ message: target
+ });
+ };
+ },
+
+ /**
+ * Wraps addEventListener to capture keypress UI events
+ * @returns {Function}
+ * @private
+ */
+ _keypressEventHandler: function() {
+ var self = this,
+ debounceDuration = 1000; // milliseconds
+
+ // TODO: if somehow user switches keypress target before
+ // debounce timeout is triggered, we will only capture
+ // a single breadcrumb from the FIRST target (acceptable?)
+ return function(evt) {
+ var target;
+ try {
+ target = evt.target;
+ } catch (e) {
+ // just accessing event properties can throw an exception in some rare circumstances
+ // see: https://github.com/getsentry/raven-js/issues/838
+ return;
+ }
+ var tagName = target && target.tagName;
+
+ // only consider keypress events on actual input elements
+ // this will disregard keypresses targeting body (e.g. tabbing
+ // through elements, hotkeys, etc)
+ if (
+ !tagName ||
+ (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && !target.isContentEditable)
+ )
+ return;
+
+ // record first keypress in a series, but ignore subsequent
+ // keypresses until debounce clears
+ var timeout = self._keypressTimeout;
+ if (!timeout) {
+ self._breadcrumbEventHandler('input')(evt);
+ }
+ clearTimeout(timeout);
+ self._keypressTimeout = setTimeout(function() {
+ self._keypressTimeout = null;
+ }, debounceDuration);
+ };
+ },
+
+ /**
+ * Captures a breadcrumb of type "navigation", normalizing input URLs
+ * @param to the originating URL
+ * @param from the target URL
+ * @private
+ */
+ _captureUrlChange: function(from, to) {
+ var parsedLoc = parseUrl(this._location.href);
+ var parsedTo = parseUrl(to);
+ var parsedFrom = parseUrl(from);
+
+ // because onpopstate only tells you the "new" (to) value of location.href, and
+ // not the previous (from) value, we need to track the value of the current URL
+ // state ourselves
+ this._lastHref = to;
+
+ // Use only the path component of the URL if the URL matches the current
+ // document (almost all the time when using pushState)
+ if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host)
+ to = parsedTo.relative;
+ if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host)
+ from = parsedFrom.relative;
+
+ this.captureBreadcrumb({
+ category: 'navigation',
+ data: {
+ to: to,
+ from: from
+ }
+ });
+ },
+
+ _patchFunctionToString: function() {
+ var self = this;
+ self._originalFunctionToString = Function.prototype.toString;
+ // eslint-disable-next-line no-extend-native
+ Function.prototype.toString = function() {
+ if (typeof this === 'function' && this.__raven__) {
+ return self._originalFunctionToString.apply(this.__orig__, arguments);
+ }
+ return self._originalFunctionToString.apply(this, arguments);
+ };
+ },
+
+ _unpatchFunctionToString: function() {
+ if (this._originalFunctionToString) {
+ // eslint-disable-next-line no-extend-native
+ Function.prototype.toString = this._originalFunctionToString;
+ }
+ },
+
+ /**
+ * Wrap timer functions and event targets to catch errors and provide
+ * better metadata.
+ */
+ _instrumentTryCatch: function() {
+ var self = this;
+
+ var wrappedBuiltIns = self._wrappedBuiltIns;
+
+ function wrapTimeFn(orig) {
+ return function(fn, t) {
+ // preserve arity
+ // Make a copy of the arguments to prevent deoptimization
+ // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments
+ var args = new Array(arguments.length);
+ for (var i = 0; i < args.length; ++i) {
+ args[i] = arguments[i];
+ }
+ var originalCallback = args[0];
+ if (isFunction(originalCallback)) {
+ args[0] = self.wrap(originalCallback);
+ }
+
+ // IE < 9 doesn't support .call/.apply on setInterval/setTimeout, but it
+ // also supports only two arguments and doesn't care what this is, so we
+ // can just call the original function directly.
+ if (orig.apply) {
+ return orig.apply(this, args);
+ } else {
+ return orig(args[0], args[1]);
+ }
+ };
+ }
+
+ var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;
+
+ function wrapEventTarget(global) {
+ var proto = _window[global] && _window[global].prototype;
+ if (proto && proto.hasOwnProperty && proto.hasOwnProperty('addEventListener')) {
+ fill(
+ proto,
+ 'addEventListener',
+ function(orig) {
+ return function(evtName, fn, capture, secure) {
+ // preserve arity
+ try {
+ if (fn && fn.handleEvent) {
+ fn.handleEvent = self.wrap(fn.handleEvent);
+ }
+ } catch (err) {
+ // can sometimes get 'Permission denied to access property "handle Event'
+ }
+
+ // More breadcrumb DOM capture ... done here and not in `_instrumentBreadcrumbs`
+ // so that we don't have more than one wrapper function
+ var before, clickHandler, keypressHandler;
+
+ if (
+ autoBreadcrumbs &&
+ autoBreadcrumbs.dom &&
+ (global === 'EventTarget' || global === 'Node')
+ ) {
+ // NOTE: generating multiple handlers per addEventListener invocation, should
+ // revisit and verify we can just use one (almost certainly)
+ clickHandler = self._breadcrumbEventHandler('click');
+ keypressHandler = self._keypressEventHandler();
+ before = function(evt) {
+ // need to intercept every DOM event in `before` argument, in case that
+ // same wrapped method is re-used for different events (e.g. mousemove THEN click)
+ // see #724
+ if (!evt) return;
+
+ var eventType;
+ try {
+ eventType = evt.type;
+ } catch (e) {
+ // just accessing event properties can throw an exception in some rare circumstances
+ // see: https://github.com/getsentry/raven-js/issues/838
+ return;
+ }
+ if (eventType === 'click') return clickHandler(evt);
+ else if (eventType === 'keypress') return keypressHandler(evt);
+ };
+ }
+ return orig.call(
+ this,
+ evtName,
+ self.wrap(fn, undefined, before),
+ capture,
+ secure
+ );
+ };
+ },
+ wrappedBuiltIns
+ );
+ fill(
+ proto,
+ 'removeEventListener',
+ function(orig) {
+ return function(evt, fn, capture, secure) {
+ try {
+ fn = fn && (fn.__raven_wrapper__ ? fn.__raven_wrapper__ : fn);
+ } catch (e) {
+ // ignore, accessing __raven_wrapper__ will throw in some Selenium environments
+ }
+ return orig.call(this, evt, fn, capture, secure);
+ };
+ },
+ wrappedBuiltIns
+ );
+ }
+ }
+
+ fill(_window, 'setTimeout', wrapTimeFn, wrappedBuiltIns);
+ fill(_window, 'setInterval', wrapTimeFn, wrappedBuiltIns);
+ if (_window.requestAnimationFrame) {
+ fill(
+ _window,
+ 'requestAnimationFrame',
+ function(orig) {
+ return function(cb) {
+ return orig(self.wrap(cb));
+ };
+ },
+ wrappedBuiltIns
+ );
+ }
+
+ // event targets borrowed from bugsnag-js:
+ // https://github.com/bugsnag/bugsnag-js/blob/master/src/bugsnag.js#L666
+ var eventTargets = [
+ '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'
+ ];
+ for (var i = 0; i < eventTargets.length; i++) {
+ wrapEventTarget(eventTargets[i]);
+ }
+ },
+
+ /**
+ * Instrument browser built-ins w/ breadcrumb capturing
+ * - XMLHttpRequests
+ * - DOM interactions (click/typing)
+ * - window.location changes
+ * - console
+ *
+ * Can be disabled or individually configured via the `autoBreadcrumbs` config option
+ */
+ _instrumentBreadcrumbs: function() {
+ var self = this;
+ var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;
+
+ var wrappedBuiltIns = self._wrappedBuiltIns;
+
+ function wrapProp(prop, xhr) {
+ if (prop in xhr && isFunction(xhr[prop])) {
+ fill(xhr, prop, function(orig) {
+ return self.wrap(orig);
+ }); // intentionally don't track filled methods on XHR instances
+ }
+ }
+
+ if (autoBreadcrumbs.xhr && 'XMLHttpRequest' in _window) {
+ var xhrproto = _window.XMLHttpRequest && _window.XMLHttpRequest.prototype;
+ fill(
+ xhrproto,
+ 'open',
+ function(origOpen) {
+ return function(method, url) {
+ // preserve arity
+
+ // if Sentry key appears in URL, don't capture
+ if (isString(url) && url.indexOf(self._globalKey) === -1) {
+ this.__raven_xhr = {
+ method: method,
+ url: url,
+ status_code: null
+ };
+ }
+
+ return origOpen.apply(this, arguments);
+ };
+ },
+ wrappedBuiltIns
+ );
+
+ fill(
+ xhrproto,
+ 'send',
+ function(origSend) {
+ return function() {
+ // preserve arity
+ var xhr = this;
+
+ function onreadystatechangeHandler() {
+ if (xhr.__raven_xhr && xhr.readyState === 4) {
+ try {
+ // touching statusCode in some platforms throws
+ // an exception
+ xhr.__raven_xhr.status_code = xhr.status;
+ } catch (e) {
+ /* do nothing */
+ }
+
+ self.captureBreadcrumb({
+ type: 'http',
+ category: 'xhr',
+ data: xhr.__raven_xhr
+ });
+ }
+ }
+
+ var props = ['onload', 'onerror', 'onprogress'];
+ for (var j = 0; j < props.length; j++) {
+ wrapProp(props[j], xhr);
+ }
+
+ if ('onreadystatechange' in xhr && isFunction(xhr.onreadystatechange)) {
+ fill(
+ xhr,
+ 'onreadystatechange',
+ function(orig) {
+ return self.wrap(orig, undefined, onreadystatechangeHandler);
+ } /* intentionally don't track this instrumentation */
+ );
+ } else {
+ // if onreadystatechange wasn't actually set by the page on this xhr, we
+ // are free to set our own and capture the breadcrumb
+ xhr.onreadystatechange = onreadystatechangeHandler;
+ }
+
+ return origSend.apply(this, arguments);
+ };
+ },
+ wrappedBuiltIns
+ );
+ }
+
+ if (autoBreadcrumbs.xhr && supportsFetch()) {
+ fill(
+ _window,
+ 'fetch',
+ function(origFetch) {
+ return function() {
+ // preserve arity
+ // Make a copy of the arguments to prevent deoptimization
+ // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments
+ var args = new Array(arguments.length);
+ for (var i = 0; i < args.length; ++i) {
+ args[i] = arguments[i];
+ }
+
+ var fetchInput = args[0];
+ var method = 'GET';
+ var url;
+
+ if (typeof fetchInput === 'string') {
+ url = fetchInput;
+ } else if ('Request' in _window && fetchInput instanceof _window.Request) {
+ url = fetchInput.url;
+ if (fetchInput.method) {
+ method = fetchInput.method;
+ }
+ } else {
+ url = '' + fetchInput;
+ }
+
+ // if Sentry key appears in URL, don't capture, as it's our own request
+ if (url.indexOf(self._globalKey) !== -1) {
+ return origFetch.apply(this, args);
+ }
+
+ if (args[1] && args[1].method) {
+ method = args[1].method;
+ }
+
+ var fetchData = {
+ method: method,
+ url: url,
+ status_code: null
+ };
+
+ return origFetch
+ .apply(this, args)
+ .then(function(response) {
+ fetchData.status_code = response.status;
+
+ self.captureBreadcrumb({
+ type: 'http',
+ category: 'fetch',
+ data: fetchData
+ });
+
+ return response;
+ })
+ ['catch'](function(err) {
+ // if there is an error performing the request
+ self.captureBreadcrumb({
+ type: 'http',
+ category: 'fetch',
+ data: fetchData,
+ level: 'error'
+ });
+
+ throw err;
+ });
+ };
+ },
+ wrappedBuiltIns
+ );
+ }
+
+ // Capture breadcrumbs from any click that is unhandled / bubbled up all the way
+ // to the document. Do this before we instrument addEventListener.
+ if (autoBreadcrumbs.dom && this._hasDocument) {
+ if (_document.addEventListener) {
+ _document.addEventListener('click', self._breadcrumbEventHandler('click'), false);
+ _document.addEventListener('keypress', self._keypressEventHandler(), false);
+ } else if (_document.attachEvent) {
+ // IE8 Compatibility
+ _document.attachEvent('onclick', self._breadcrumbEventHandler('click'));
+ _document.attachEvent('onkeypress', self._keypressEventHandler());
+ }
+ }
+
+ // record navigation (URL) changes
+ // NOTE: in Chrome App environment, touching history.pushState, *even inside
+ // a try/catch block*, will cause Chrome to output an error to console.error
+ // borrowed from: https://github.com/angular/angular.js/pull/13945/files
+ var chrome = _window.chrome;
+ var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime;
+ var hasPushAndReplaceState =
+ !isChromePackagedApp &&
+ _window.history &&
+ _window.history.pushState &&
+ _window.history.replaceState;
+ if (autoBreadcrumbs.location && hasPushAndReplaceState) {
+ // TODO: remove onpopstate handler on uninstall()
+ var oldOnPopState = _window.onpopstate;
+ _window.onpopstate = function() {
+ var currentHref = self._location.href;
+ self._captureUrlChange(self._lastHref, currentHref);
+
+ if (oldOnPopState) {
+ return oldOnPopState.apply(this, arguments);
+ }
+ };
+
+ var historyReplacementFunction = function(origHistFunction) {
+ // note history.pushState.length is 0; intentionally not declaring
+ // params to preserve 0 arity
+ return function(/* state, title, url */) {
+ var url = arguments.length > 2 ? arguments[2] : undefined;
+
+ // url argument is optional
+ if (url) {
+ // coerce to string (this is what pushState does)
+ self._captureUrlChange(self._lastHref, url + '');
+ }
+
+ return origHistFunction.apply(this, arguments);
+ };
+ };
+
+ fill(_window.history, 'pushState', historyReplacementFunction, wrappedBuiltIns);
+ fill(_window.history, 'replaceState', historyReplacementFunction, wrappedBuiltIns);
+ }
+
+ if (autoBreadcrumbs.console && 'console' in _window && console.log) {
+ // console
+ var consoleMethodCallback = function(msg, data) {
+ self.captureBreadcrumb({
+ message: msg,
+ level: data.level,
+ category: 'console'
+ });
+ };
+
+ each(['debug', 'info', 'warn', 'error', 'log'], function(_, level) {
+ wrapConsoleMethod(console, level, consoleMethodCallback);
+ });
+ }
+ },
+
+ _restoreBuiltIns: function() {
+ // restore any wrapped builtins
+ var builtin;
+ while (this._wrappedBuiltIns.length) {
+ builtin = this._wrappedBuiltIns.shift();
+
+ var obj = builtin[0],
+ name = builtin[1],
+ orig = builtin[2];
+
+ obj[name] = orig;
+ }
+ },
+
+ _restoreConsole: function() {
+ // eslint-disable-next-line guard-for-in
+ for (var method in this._originalConsoleMethods) {
+ this._originalConsole[method] = this._originalConsoleMethods[method];
+ }
+ },
+
+ _drainPlugins: function() {
+ var self = this;
+
+ // FIX ME TODO
+ each(this._plugins, function(_, plugin) {
+ var installer = plugin[0];
+ var args = plugin[1];
+ installer.apply(self, [self].concat(args));
+ });
+ },
+
+ _parseDSN: function(str) {
+ var m = dsnPattern.exec(str),
+ dsn = {},
+ i = 7;
+
+ try {
+ while (i--) dsn[dsnKeys[i]] = m[i] || '';
+ } catch (e) {
+ throw new RavenConfigError('Invalid DSN: ' + str);
+ }
+
+ if (dsn.pass && !this._globalOptions.allowSecretKey) {
+ throw new RavenConfigError(
+ 'Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key'
+ );
+ }
+
+ return dsn;
+ },
+
+ _getGlobalServer: function(uri) {
+ // assemble the endpoint from the uri pieces
+ var globalServer = '//' + uri.host + (uri.port ? ':' + uri.port : '');
+
+ if (uri.protocol) {
+ globalServer = uri.protocol + ':' + globalServer;
+ }
+ return globalServer;
+ },
+
+ _handleOnErrorStackInfo: function() {
+ // if we are intentionally ignoring errors via onerror, bail out
+ if (!this._ignoreOnError) {
+ this._handleStackInfo.apply(this, arguments);
+ }
+ },
+
+ _handleStackInfo: function(stackInfo, options) {
+ var frames = this._prepareFrames(stackInfo, options);
+
+ this._triggerEvent('handle', {
+ stackInfo: stackInfo,
+ options: options
+ });
+
+ this._processException(
+ stackInfo.name,
+ stackInfo.message,
+ stackInfo.url,
+ stackInfo.lineno,
+ frames,
+ options
+ );
+ },
+
+ _prepareFrames: function(stackInfo, options) {
+ var self = this;
+ var frames = [];
+ if (stackInfo.stack && stackInfo.stack.length) {
+ each(stackInfo.stack, function(i, stack) {
+ var frame = self._normalizeFrame(stack, stackInfo.url);
+ if (frame) {
+ frames.push(frame);
+ }
+ });
+
+ // e.g. frames captured via captureMessage throw
+ if (options && options.trimHeadFrames) {
+ for (var j = 0; j < options.trimHeadFrames && j < frames.length; j++) {
+ frames[j].in_app = false;
+ }
+ }
+ }
+ frames = frames.slice(0, this._globalOptions.stackTraceLimit);
+ return frames;
+ },
+
+ _normalizeFrame: function(frame, stackInfoUrl) {
+ // normalize the frames data
+ var normalized = {
+ filename: frame.url,
+ lineno: frame.line,
+ colno: frame.column,
+ function: frame.func || '?'
+ };
+
+ // Case when we don't have any information about the error
+ // E.g. throwing a string or raw object, instead of an `Error` in Firefox
+ // Generating synthetic error doesn't add any value here
+ //
+ // We should probably somehow let a user know that they should fix their code
+ if (!frame.url) {
+ normalized.filename = stackInfoUrl; // fallback to whole stacks url from onerror handler
+ }
+
+ normalized.in_app = !// determine if an exception came from outside of our app
+ // first we check the global includePaths list.
+ (
+ (!!this._globalOptions.includePaths.test &&
+ !this._globalOptions.includePaths.test(normalized.filename)) ||
+ // Now we check for fun, if the function name is Raven or TraceKit
+ /(Raven|TraceKit)\./.test(normalized['function']) ||
+ // finally, we do a last ditch effort and check for raven.min.js
+ /raven\.(min\.)?js$/.test(normalized.filename)
+ );
+
+ return normalized;
+ },
+
+ _processException: function(type, message, fileurl, lineno, frames, options) {
+ var prefixedMessage = (type ? type + ': ' : '') + (message || '');
+ if (
+ !!this._globalOptions.ignoreErrors.test &&
+ (this._globalOptions.ignoreErrors.test(message) ||
+ this._globalOptions.ignoreErrors.test(prefixedMessage))
+ ) {
+ return;
+ }
+
+ var stacktrace;
+
+ if (frames && frames.length) {
+ fileurl = frames[0].filename || fileurl;
+ // Sentry expects frames oldest to newest
+ // and JS sends them as newest to oldest
+ frames.reverse();
+ stacktrace = {frames: frames};
+ } else if (fileurl) {
+ stacktrace = {
+ frames: [
+ {
+ filename: fileurl,
+ lineno: lineno,
+ in_app: true
+ }
+ ]
+ };
+ }
+
+ if (
+ !!this._globalOptions.ignoreUrls.test &&
+ this._globalOptions.ignoreUrls.test(fileurl)
+ ) {
+ return;
+ }
+
+ if (
+ !!this._globalOptions.whitelistUrls.test &&
+ !this._globalOptions.whitelistUrls.test(fileurl)
+ ) {
+ return;
+ }
+
+ var data = objectMerge(
+ {
+ // sentry.interfaces.Exception
+ exception: {
+ values: [
+ {
+ type: type,
+ value: message,
+ stacktrace: stacktrace
+ }
+ ]
+ },
+ transaction: fileurl
+ },
+ options
+ );
+
+ // Fire away!
+ this._send(data);
+ },
+
+ _trimPacket: function(data) {
+ // For now, we only want to truncate the two different messages
+ // but this could/should be expanded to just trim everything
+ var max = this._globalOptions.maxMessageLength;
+ if (data.message) {
+ data.message = truncate(data.message, max);
+ }
+ if (data.exception) {
+ var exception = data.exception.values[0];
+ exception.value = truncate(exception.value, max);
+ }
+
+ var request = data.request;
+ if (request) {
+ if (request.url) {
+ request.url = truncate(request.url, this._globalOptions.maxUrlLength);
+ }
+ if (request.Referer) {
+ request.Referer = truncate(request.Referer, this._globalOptions.maxUrlLength);
+ }
+ }
+
+ if (data.breadcrumbs && data.breadcrumbs.values)
+ this._trimBreadcrumbs(data.breadcrumbs);
+
+ return data;
+ },
+
+ /**
+ * Truncate breadcrumb values (right now just URLs)
+ */
+ _trimBreadcrumbs: function(breadcrumbs) {
+ // known breadcrumb properties with urls
+ // TODO: also consider arbitrary prop values that start with (https?)?://
+ var urlProps = ['to', 'from', 'url'],
+ urlProp,
+ crumb,
+ data;
+
+ for (var i = 0; i < breadcrumbs.values.length; ++i) {
+ crumb = breadcrumbs.values[i];
+ if (
+ !crumb.hasOwnProperty('data') ||
+ !isObject(crumb.data) ||
+ objectFrozen(crumb.data)
+ )
+ continue;
+
+ data = objectMerge({}, crumb.data);
+ for (var j = 0; j < urlProps.length; ++j) {
+ urlProp = urlProps[j];
+ if (data.hasOwnProperty(urlProp) && data[urlProp]) {
+ data[urlProp] = truncate(data[urlProp], this._globalOptions.maxUrlLength);
+ }
+ }
+ breadcrumbs.values[i].data = data;
+ }
+ },
+
+ _getHttpData: function() {
+ if (!this._hasNavigator && !this._hasDocument) return;
+ var httpData = {};
+
+ if (this._hasNavigator && _navigator.userAgent) {
+ httpData.headers = {
+ 'User-Agent': _navigator.userAgent
+ };
+ }
+
+ // Check in `window` instead of `document`, as we may be in ServiceWorker environment
+ if (_window.location && _window.location.href) {
+ httpData.url = _window.location.href;
+ }
+
+ if (this._hasDocument && _document.referrer) {
+ if (!httpData.headers) httpData.headers = {};
+ httpData.headers.Referer = _document.referrer;
+ }
+
+ return httpData;
+ },
+
+ _resetBackoff: function() {
+ this._backoffDuration = 0;
+ this._backoffStart = null;
+ },
+
+ _shouldBackoff: function() {
+ return this._backoffDuration && now() - this._backoffStart < this._backoffDuration;
+ },
+
+ /**
+ * Returns true if the in-process data payload matches the signature
+ * of the previously-sent data
+ *
+ * NOTE: This has to be done at this level because TraceKit can generate
+ * data from window.onerror WITHOUT an exception object (IE8, IE9,
+ * other old browsers). This can take the form of an "exception"
+ * data object with a single frame (derived from the onerror args).
+ */
+ _isRepeatData: function(current) {
+ var last = this._lastData;
+
+ if (
+ !last ||
+ current.message !== last.message || // defined for captureMessage
+ current.transaction !== last.transaction // defined for captureException/onerror
+ )
+ return false;
+
+ // Stacktrace interface (i.e. from captureMessage)
+ if (current.stacktrace || last.stacktrace) {
+ return isSameStacktrace(current.stacktrace, last.stacktrace);
+ } else if (current.exception || last.exception) {
+ // Exception interface (i.e. from captureException/onerror)
+ return isSameException(current.exception, last.exception);
+ }
+
+ return true;
+ },
+
+ _setBackoffState: function(request) {
+ // If we are already in a backoff state, don't change anything
+ if (this._shouldBackoff()) {
+ return;
+ }
+
+ var status = request.status;
+
+ // 400 - project_id doesn't exist or some other fatal
+ // 401 - invalid/revoked dsn
+ // 429 - too many requests
+ if (!(status === 400 || status === 401 || status === 429)) return;
+
+ var retry;
+ try {
+ // If Retry-After is not in Access-Control-Expose-Headers, most
+ // browsers will throw an exception trying to access it
+ if (supportsFetch()) {
+ retry = request.headers.get('Retry-After');
+ } else {
+ retry = request.getResponseHeader('Retry-After');
+ }
+
+ // Retry-After is returned in seconds
+ retry = parseInt(retry, 10) * 1000;
+ } catch (e) {
+ /* eslint no-empty:0 */
+ }
+
+ this._backoffDuration = retry
+ ? // If Sentry server returned a Retry-After value, use it
+ retry
+ : // Otherwise, double the last backoff duration (starts at 1 sec)
+ this._backoffDuration * 2 || 1000;
+
+ this._backoffStart = now();
+ },
+
+ _send: function(data) {
+ var globalOptions = this._globalOptions;
+
+ var baseData = {
+ project: this._globalProject,
+ logger: globalOptions.logger,
+ platform: 'javascript'
+ },
+ httpData = this._getHttpData();
+
+ if (httpData) {
+ baseData.request = httpData;
+ }
+
+ // HACK: delete `trimHeadFrames` to prevent from appearing in outbound payload
+ if (data.trimHeadFrames) delete data.trimHeadFrames;
+
+ data = objectMerge(baseData, data);
+
+ // Merge in the tags and extra separately since objectMerge doesn't handle a deep merge
+ data.tags = objectMerge(objectMerge({}, this._globalContext.tags), data.tags);
+ data.extra = objectMerge(objectMerge({}, this._globalContext.extra), data.extra);
+
+ // Send along our own collected metadata with extra
+ data.extra['session:duration'] = now() - this._startTime;
+
+ if (this._breadcrumbs && this._breadcrumbs.length > 0) {
+ // intentionally make shallow copy so that additions
+ // to breadcrumbs aren't accidentally sent in this request
+ data.breadcrumbs = {
+ values: [].slice.call(this._breadcrumbs, 0)
+ };
+ }
+
+ if (this._globalContext.user) {
+ // sentry.interfaces.User
+ data.user = this._globalContext.user;
+ }
+
+ // Include the environment if it's defined in globalOptions
+ if (globalOptions.environment) data.environment = globalOptions.environment;
+
+ // Include the release if it's defined in globalOptions
+ if (globalOptions.release) data.release = globalOptions.release;
+
+ // Include server_name if it's defined in globalOptions
+ if (globalOptions.serverName) data.server_name = globalOptions.serverName;
+
+ data = this._sanitizeData(data);
+
+ // Cleanup empty properties before sending them to the server
+ Object.keys(data).forEach(function(key) {
+ if (data[key] == null || data[key] === '' || isEmptyObject(data[key])) {
+ delete data[key];
+ }
+ });
+
+ if (isFunction(globalOptions.dataCallback)) {
+ data = globalOptions.dataCallback(data) || data;
+ }
+
+ // Why??????????
+ if (!data || isEmptyObject(data)) {
+ return;
+ }
+
+ // Check if the request should be filtered or not
+ if (
+ isFunction(globalOptions.shouldSendCallback) &&
+ !globalOptions.shouldSendCallback(data)
+ ) {
+ return;
+ }
+
+ // Backoff state: Sentry server previously responded w/ an error (e.g. 429 - too many requests),
+ // so drop requests until "cool-off" period has elapsed.
+ if (this._shouldBackoff()) {
+ this._logDebug('warn', 'Raven dropped error due to backoff: ', data);
+ return;
+ }
+
+ if (typeof globalOptions.sampleRate === 'number') {
+ if (Math.random() < globalOptions.sampleRate) {
+ this._sendProcessedPayload(data);
+ }
+ } else {
+ this._sendProcessedPayload(data);
+ }
+ },
+
+ _sanitizeData: function(data) {
+ return sanitize(data, this._globalOptions.sanitizeKeys);
+ },
+
+ _getUuid: function() {
+ return uuid4();
+ },
+
+ _sendProcessedPayload: function(data, callback) {
+ var self = this;
+ var globalOptions = this._globalOptions;
+
+ if (!this.isSetup()) return;
+
+ // Try and clean up the packet before sending by truncating long values
+ data = this._trimPacket(data);
+
+ // ideally duplicate error testing should occur *before* dataCallback/shouldSendCallback,
+ // but this would require copying an un-truncated copy of the data packet, which can be
+ // arbitrarily deep (extra_data) -- could be worthwhile? will revisit
+ if (!this._globalOptions.allowDuplicates && this._isRepeatData(data)) {
+ this._logDebug('warn', 'Raven dropped repeat event: ', data);
+ return;
+ }
+
+ // Send along an event_id if not explicitly passed.
+ // This event_id can be used to reference the error within Sentry itself.
+ // Set lastEventId after we know the error should actually be sent
+ this._lastEventId = data.event_id || (data.event_id = this._getUuid());
+
+ // Store outbound payload after trim
+ this._lastData = data;
+
+ this._logDebug('debug', 'Raven about to send:', data);
+
+ var auth = {
+ sentry_version: '7',
+ sentry_client: 'raven-js/' + this.VERSION,
+ sentry_key: this._globalKey
+ };
+
+ if (this._globalSecret) {
+ auth.sentry_secret = this._globalSecret;
+ }
+
+ var exception = data.exception && data.exception.values[0];
+
+ // only capture 'sentry' breadcrumb is autoBreadcrumbs is truthy
+ if (
+ this._globalOptions.autoBreadcrumbs &&
+ this._globalOptions.autoBreadcrumbs.sentry
+ ) {
+ this.captureBreadcrumb({
+ category: 'sentry',
+ message: exception
+ ? (exception.type ? exception.type + ': ' : '') + exception.value
+ : data.message,
+ event_id: data.event_id,
+ level: data.level || 'error' // presume error unless specified
+ });
+ }
+
+ var url = this._globalEndpoint;
+ (globalOptions.transport || this._makeRequest).call(this, {
+ url: url,
+ auth: auth,
+ data: data,
+ options: globalOptions,
+ onSuccess: function success() {
+ self._resetBackoff();
+
+ self._triggerEvent('success', {
+ data: data,
+ src: url
+ });
+ callback && callback();
+ },
+ onError: function failure(error) {
+ self._logDebug('error', 'Raven transport failed to send: ', error);
+
+ if (error.request) {
+ self._setBackoffState(error.request);
+ }
+
+ self._triggerEvent('failure', {
+ data: data,
+ src: url
+ });
+ error = error || new Error('Raven send failed (no additional details provided)');
+ callback && callback(error);
+ }
+ });
+ },
+
+ _makeRequest: function(opts) {
+ // Auth is intentionally sent as part of query string (NOT as custom HTTP header) to avoid preflight CORS requests
+ var url = opts.url + '?' + urlencode(opts.auth);
+
+ var evaluatedHeaders = null;
+ var evaluatedFetchParameters = {};
+
+ if (opts.options.headers) {
+ evaluatedHeaders = this._evaluateHash(opts.options.headers);
+ }
+
+ if (opts.options.fetchParameters) {
+ evaluatedFetchParameters = this._evaluateHash(opts.options.fetchParameters);
+ }
+
+ if (supportsFetch()) {
+ evaluatedFetchParameters.body = stringify(opts.data);
+
+ var defaultFetchOptions = objectMerge({}, this._fetchDefaults);
+ var fetchOptions = objectMerge(defaultFetchOptions, evaluatedFetchParameters);
+
+ if (evaluatedHeaders) {
+ fetchOptions.headers = evaluatedHeaders;
+ }
+
+ return _window
+ .fetch(url, fetchOptions)
+ .then(function(response) {
+ if (response.ok) {
+ opts.onSuccess && opts.onSuccess();
+ } else {
+ var error = new Error('Sentry error code: ' + response.status);
+ // It's called request only to keep compatibility with XHR interface
+ // and not add more redundant checks in setBackoffState method
+ error.request = response;
+ opts.onError && opts.onError(error);
+ }
+ })
+ ['catch'](function() {
+ opts.onError &&
+ opts.onError(new Error('Sentry error code: network unavailable'));
+ });
+ }
+
+ var request = _window.XMLHttpRequest && new _window.XMLHttpRequest();
+ if (!request) return;
+
+ // if browser doesn't support CORS (e.g. IE7), we are out of luck
+ var hasCORS = 'withCredentials' in request || typeof XDomainRequest !== 'undefined';
+
+ if (!hasCORS) return;
+
+ if ('withCredentials' in request) {
+ request.onreadystatechange = function() {
+ if (request.readyState !== 4) {
+ return;
+ } else if (request.status === 200) {
+ opts.onSuccess && opts.onSuccess();
+ } else if (opts.onError) {
+ var err = new Error('Sentry error code: ' + request.status);
+ err.request = request;
+ opts.onError(err);
+ }
+ };
+ } else {
+ request = new XDomainRequest();
+ // xdomainrequest cannot go http -> https (or vice versa),
+ // so always use protocol relative
+ url = url.replace(/^https?:/, '');
+
+ // onreadystatechange not supported by XDomainRequest
+ if (opts.onSuccess) {
+ request.onload = opts.onSuccess;
+ }
+ if (opts.onError) {
+ request.onerror = function() {
+ var err = new Error('Sentry error code: XDomainRequest');
+ err.request = request;
+ opts.onError(err);
+ };
+ }
+ }
+
+ request.open('POST', url);
+
+ if (evaluatedHeaders) {
+ each(evaluatedHeaders, function(key, value) {
+ request.setRequestHeader(key, value);
+ });
+ }
+
+ request.send(stringify(opts.data));
+ },
+
+ _evaluateHash: function(hash) {
+ var evaluated = {};
+
+ for (var key in hash) {
+ if (hash.hasOwnProperty(key)) {
+ var value = hash[key];
+ evaluated[key] = typeof value === 'function' ? value() : value;
+ }
+ }
+
+ return evaluated;
+ },
+
+ _logDebug: function(level) {
+ // We allow `Raven.debug` and `Raven.config(DSN, { debug: true })` to not make backward incompatible API change
+ if (
+ this._originalConsoleMethods[level] &&
+ (this.debug || this._globalOptions.debug)
+ ) {
+ // In IE<10 console methods do not have their own 'apply' method
+ Function.prototype.apply.call(
+ this._originalConsoleMethods[level],
+ this._originalConsole,
+ [].slice.call(arguments, 1)
+ );
+ }
+ },
+
+ _mergeContext: function(key, context) {
+ if (isUndefined(context)) {
+ delete this._globalContext[key];
+ } else {
+ this._globalContext[key] = objectMerge(this._globalContext[key] || {}, context);
+ }
+ }
+};
+
+// Deprecations
+Raven.prototype.setUser = Raven.prototype.setUserContext;
+Raven.prototype.setReleaseContext = Raven.prototype.setRelease;
+
+module.exports = Raven;
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"10":10,"11":11,"4":4,"5":5,"8":8,"9":9}],7:[function(_dereq_,module,exports){
+(function (global){
+/**
+ * Enforces a single instance of the Raven client, and the
+ * main entry point for Raven. If you are a consumer of the
+ * Raven library, you SHOULD load this file (vs raven.js).
+ **/
+
+var RavenConstructor = _dereq_(6);
+
+// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)
+var _window =
+ typeof window !== 'undefined'
+ ? window
+ : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
+var _Raven = _window.Raven;
+
+var Raven = new RavenConstructor();
+
+/*
+ * Allow multiple versions of Raven to be installed.
+ * Strip Raven from the global context and returns the instance.
+ *
+ * @return {Raven}
+ */
+Raven.noConflict = function() {
+ _window.Raven = _Raven;
+ return Raven;
+};
+
+Raven.afterLoad();
+
+module.exports = Raven;
+
+/**
+ * DISCLAIMER:
+ *
+ * Expose `Client` constructor for cases where user want to track multiple "sub-applications" in one larger app.
+ * It's not meant to be used by a wide audience, so pleaaase make sure that you know what you're doing before using it.
+ * Accidentally calling `install` multiple times, may result in an unexpected behavior that's very hard to debug.
+ *
+ * It's called `Client' to be in-line with Raven Node implementation.
+ *
+ * HOWTO:
+ *
+ * import Raven from 'raven-js';
+ *
+ * const someAppReporter = new Raven.Client();
+ * const someOtherAppReporter = new Raven.Client();
+ *
+ * someAppReporter.config('__DSN__', {
+ * ...config goes here
+ * });
+ *
+ * someOtherAppReporter.config('__OTHER_DSN__', {
+ * ...config goes here
+ * });
+ *
+ * someAppReporter.captureMessage(...);
+ * someAppReporter.captureException(...);
+ * someAppReporter.captureBreadcrumb(...);
+ *
+ * someOtherAppReporter.captureMessage(...);
+ * someOtherAppReporter.captureException(...);
+ * someOtherAppReporter.captureBreadcrumb(...);
+ *
+ * It should "just work".
+ */
+module.exports.Client = RavenConstructor;
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"6":6}],8:[function(_dereq_,module,exports){
+(function (global){
+var stringify = _dereq_(10);
+
+var _window =
+ typeof window !== 'undefined'
+ ? window
+ : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
+
+function isObject(what) {
+ return typeof what === 'object' && what !== null;
+}
+
+// Yanked from https://git.io/vS8DV re-used under CC0
+// with some tiny modifications
+function isError(value) {
+ switch (Object.prototype.toString.call(value)) {
+ case '[object Error]':
+ return true;
+ case '[object Exception]':
+ return true;
+ case '[object DOMException]':
+ return true;
+ default:
+ return value instanceof Error;
+ }
+}
+
+function isErrorEvent(value) {
+ return Object.prototype.toString.call(value) === '[object ErrorEvent]';
+}
+
+function isDOMError(value) {
+ return Object.prototype.toString.call(value) === '[object DOMError]';
+}
+
+function isDOMException(value) {
+ return Object.prototype.toString.call(value) === '[object DOMException]';
+}
+
+function isUndefined(what) {
+ return what === void 0;
+}
+
+function isFunction(what) {
+ return typeof what === 'function';
+}
+
+function isPlainObject(what) {
+ return Object.prototype.toString.call(what) === '[object Object]';
+}
+
+function isString(what) {
+ return Object.prototype.toString.call(what) === '[object String]';
+}
+
+function isArray(what) {
+ return Object.prototype.toString.call(what) === '[object Array]';
+}
+
+function isEmptyObject(what) {
+ if (!isPlainObject(what)) return false;
+
+ for (var _ in what) {
+ if (what.hasOwnProperty(_)) {
+ return false;
+ }
+ }
+ return true;
+}
+
+function supportsErrorEvent() {
+ try {
+ new ErrorEvent(''); // eslint-disable-line no-new
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+function supportsDOMError() {
+ try {
+ new DOMError(''); // eslint-disable-line no-new
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+function supportsDOMException() {
+ try {
+ new DOMException(''); // eslint-disable-line no-new
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+function supportsFetch() {
+ if (!('fetch' in _window)) return false;
+
+ try {
+ new Headers(); // eslint-disable-line no-new
+ new Request(''); // eslint-disable-line no-new
+ new Response(); // eslint-disable-line no-new
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+// Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default
+// https://caniuse.com/#feat=referrer-policy
+// It doesn't. And it throw exception instead of ignoring this parameter...
+// REF: https://github.com/getsentry/raven-js/issues/1233
+function supportsReferrerPolicy() {
+ if (!supportsFetch()) return false;
+
+ try {
+ // eslint-disable-next-line no-new
+ new Request('pickleRick', {
+ referrerPolicy: 'origin'
+ });
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+function supportsPromiseRejectionEvent() {
+ return typeof PromiseRejectionEvent === 'function';
+}
+
+function wrappedCallback(callback) {
+ function dataCallback(data, original) {
+ var normalizedData = callback(data) || data;
+ if (original) {
+ return original(normalizedData) || normalizedData;
+ }
+ return normalizedData;
+ }
+
+ return dataCallback;
+}
+
+function each(obj, callback) {
+ var i, j;
+
+ if (isUndefined(obj.length)) {
+ for (i in obj) {
+ if (hasKey(obj, i)) {
+ callback.call(null, i, obj[i]);
+ }
+ }
+ } else {
+ j = obj.length;
+ if (j) {
+ for (i = 0; i < j; i++) {
+ callback.call(null, i, obj[i]);
+ }
+ }
+ }
+}
+
+function objectMerge(obj1, obj2) {
+ if (!obj2) {
+ return obj1;
+ }
+ each(obj2, function(key, value) {
+ obj1[key] = value;
+ });
+ return obj1;
+}
+
+/**
+ * This function is only used for react-native.
+ * react-native freezes object that have already been sent over the
+ * js bridge. We need this function in order to check if the object is frozen.
+ * So it's ok that objectFrozen returns false if Object.isFrozen is not
+ * supported because it's not relevant for other "platforms". See related issue:
+ * https://github.com/getsentry/react-native-sentry/issues/57
+ */
+function objectFrozen(obj) {
+ if (!Object.isFrozen) {
+ return false;
+ }
+ return Object.isFrozen(obj);
+}
+
+function truncate(str, max) {
+ if (typeof max !== 'number') {
+ throw new Error('2nd argument to `truncate` function should be a number');
+ }
+ if (typeof str !== 'string' || max === 0) {
+ return str;
+ }
+ return str.length <= max ? str : str.substr(0, max) + '\u2026';
+}
+
+/**
+ * hasKey, a better form of hasOwnProperty
+ * Example: hasKey(MainHostObject, property) === true/false
+ *
+ * @param {Object} host object to check property
+ * @param {string} key to check
+ */
+function hasKey(object, key) {
+ return Object.prototype.hasOwnProperty.call(object, key);
+}
+
+function joinRegExp(patterns) {
+ // Combine an array of regular expressions and strings into one large regexp
+ // Be mad.
+ var sources = [],
+ i = 0,
+ len = patterns.length,
+ pattern;
+
+ for (; i < len; i++) {
+ pattern = patterns[i];
+ if (isString(pattern)) {
+ // If it's a string, we need to escape it
+ // Taken from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
+ sources.push(pattern.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, '\\$1'));
+ } else if (pattern && pattern.source) {
+ // If it's a regexp already, we want to extract the source
+ sources.push(pattern.source);
+ }
+ // Intentionally skip other cases
+ }
+ return new RegExp(sources.join('|'), 'i');
+}
+
+function urlencode(o) {
+ var pairs = [];
+ each(o, function(key, value) {
+ pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));
+ });
+ return pairs.join('&');
+}
+
+// borrowed from https://tools.ietf.org/html/rfc3986#appendix-B
+// intentionally using regex and not href parsing trick because React Native and other
+// environments where DOM might not be available
+function parseUrl(url) {
+ if (typeof url !== 'string') return {};
+ var match = url.match(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/);
+
+ // coerce to undefined values to empty string so we don't get 'undefined'
+ var query = match[6] || '';
+ var fragment = match[8] || '';
+ return {
+ protocol: match[2],
+ host: match[4],
+ path: match[5],
+ relative: match[5] + query + fragment // everything minus origin
+ };
+}
+function uuid4() {
+ var crypto = _window.crypto || _window.msCrypto;
+
+ if (!isUndefined(crypto) && crypto.getRandomValues) {
+ // Use window.crypto API if available
+ // eslint-disable-next-line no-undef
+ var arr = new Uint16Array(8);
+ crypto.getRandomValues(arr);
+
+ // set 4 in byte 7
+ arr[3] = (arr[3] & 0xfff) | 0x4000;
+ // set 2 most significant bits of byte 9 to '10'
+ arr[4] = (arr[4] & 0x3fff) | 0x8000;
+
+ var pad = function(num) {
+ var v = num.toString(16);
+ while (v.length < 4) {
+ v = '0' + v;
+ }
+ return v;
+ };
+
+ return (
+ pad(arr[0]) +
+ pad(arr[1]) +
+ pad(arr[2]) +
+ pad(arr[3]) +
+ pad(arr[4]) +
+ pad(arr[5]) +
+ pad(arr[6]) +
+ pad(arr[7])
+ );
+ } else {
+ // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523
+ return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
+ var r = (Math.random() * 16) | 0,
+ v = c === 'x' ? r : (r & 0x3) | 0x8;
+ return v.toString(16);
+ });
+ }
+}
+
+/**
+ * Given a child DOM element, returns a query-selector statement describing that
+ * and its ancestors
+ * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]
+ * @param elem
+ * @returns {string}
+ */
+function htmlTreeAsString(elem) {
+ /* eslint no-extra-parens:0*/
+ var MAX_TRAVERSE_HEIGHT = 5,
+ MAX_OUTPUT_LEN = 80,
+ out = [],
+ height = 0,
+ len = 0,
+ separator = ' > ',
+ sepLength = separator.length,
+ nextStr;
+
+ while (elem && height++ < MAX_TRAVERSE_HEIGHT) {
+ nextStr = htmlElementAsString(elem);
+ // bail out if
+ // - nextStr is the 'html' element
+ // - the length of the string that would be created exceeds MAX_OUTPUT_LEN
+ // (ignore this limit if we are on the first iteration)
+ if (
+ nextStr === 'html' ||
+ (height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN)
+ ) {
+ break;
+ }
+
+ out.push(nextStr);
+
+ len += nextStr.length;
+ elem = elem.parentNode;
+ }
+
+ return out.reverse().join(separator);
+}
+
+/**
+ * Returns a simple, query-selector representation of a DOM element
+ * e.g. [HTMLElement] => input#foo.btn[name=baz]
+ * @param HTMLElement
+ * @returns {string}
+ */
+function htmlElementAsString(elem) {
+ var out = [],
+ className,
+ classes,
+ key,
+ attr,
+ i;
+
+ if (!elem || !elem.tagName) {
+ return '';
+ }
+
+ out.push(elem.tagName.toLowerCase());
+ if (elem.id) {
+ out.push('#' + elem.id);
+ }
+
+ className = elem.className;
+ if (className && isString(className)) {
+ classes = className.split(/\s+/);
+ for (i = 0; i < classes.length; i++) {
+ out.push('.' + classes[i]);
+ }
+ }
+ var attrWhitelist = ['type', 'name', 'title', 'alt'];
+ for (i = 0; i < attrWhitelist.length; i++) {
+ key = attrWhitelist[i];
+ attr = elem.getAttribute(key);
+ if (attr) {
+ out.push('[' + key + '="' + attr + '"]');
+ }
+ }
+ return out.join('');
+}
+
+/**
+ * Returns true if either a OR b is truthy, but not both
+ */
+function isOnlyOneTruthy(a, b) {
+ return !!(!!a ^ !!b);
+}
+
+/**
+ * Returns true if both parameters are undefined
+ */
+function isBothUndefined(a, b) {
+ return isUndefined(a) && isUndefined(b);
+}
+
+/**
+ * Returns true if the two input exception interfaces have the same content
+ */
+function isSameException(ex1, ex2) {
+ if (isOnlyOneTruthy(ex1, ex2)) return false;
+
+ ex1 = ex1.values[0];
+ ex2 = ex2.values[0];
+
+ if (ex1.type !== ex2.type || ex1.value !== ex2.value) return false;
+
+ // in case both stacktraces are undefined, we can't decide so default to false
+ if (isBothUndefined(ex1.stacktrace, ex2.stacktrace)) return false;
+
+ return isSameStacktrace(ex1.stacktrace, ex2.stacktrace);
+}
+
+/**
+ * Returns true if the two input stack trace interfaces have the same content
+ */
+function isSameStacktrace(stack1, stack2) {
+ if (isOnlyOneTruthy(stack1, stack2)) return false;
+
+ var frames1 = stack1.frames;
+ var frames2 = stack2.frames;
+
+ // Exit early if frame count differs
+ if (frames1.length !== frames2.length) return false;
+
+ // Iterate through every frame; bail out if anything differs
+ var a, b;
+ for (var i = 0; i < frames1.length; i++) {
+ a = frames1[i];
+ b = frames2[i];
+ if (
+ a.filename !== b.filename ||
+ a.lineno !== b.lineno ||
+ a.colno !== b.colno ||
+ a['function'] !== b['function']
+ )
+ return false;
+ }
+ return true;
+}
+
+/**
+ * Polyfill a method
+ * @param obj object e.g. `document`
+ * @param name method name present on object e.g. `addEventListener`
+ * @param replacement replacement function
+ * @param track {optional} record instrumentation to an array
+ */
+function fill(obj, name, replacement, track) {
+ if (obj == null) return;
+ var orig = obj[name];
+ obj[name] = replacement(orig);
+ obj[name].__raven__ = true;
+ obj[name].__orig__ = orig;
+ if (track) {
+ track.push([obj, name, orig]);
+ }
+}
+
+/**
+ * Join values in array
+ * @param input array of values to be joined together
+ * @param delimiter string to be placed in-between values
+ * @returns {string}
+ */
+function safeJoin(input, delimiter) {
+ if (!isArray(input)) return '';
+
+ var output = [];
+
+ for (var i = 0; i < input.length; i++) {
+ try {
+ output.push(String(input[i]));
+ } catch (e) {
+ output.push('[value cannot be serialized]');
+ }
+ }
+
+ return output.join(delimiter);
+}
+
+// Default Node.js REPL depth
+var MAX_SERIALIZE_EXCEPTION_DEPTH = 3;
+// 50kB, as 100kB is max payload size, so half sounds reasonable
+var MAX_SERIALIZE_EXCEPTION_SIZE = 50 * 1024;
+var MAX_SERIALIZE_KEYS_LENGTH = 40;
+
+function utf8Length(value) {
+ return ~-encodeURI(value).split(/%..|./).length;
+}
+
+function jsonSize(value) {
+ return utf8Length(JSON.stringify(value));
+}
+
+function serializeValue(value) {
+ if (typeof value === 'string') {
+ var maxLength = 40;
+ return truncate(value, maxLength);
+ } else if (
+ typeof value === 'number' ||
+ typeof value === 'boolean' ||
+ typeof value === 'undefined'
+ ) {
+ return value;
+ }
+
+ var type = Object.prototype.toString.call(value);
+
+ // Node.js REPL notation
+ if (type === '[object Object]') return '[Object]';
+ if (type === '[object Array]') return '[Array]';
+ if (type === '[object Function]')
+ return value.name ? '[Function: ' + value.name + ']' : '[Function]';
+
+ return value;
+}
+
+function serializeObject(value, depth) {
+ if (depth === 0) return serializeValue(value);
+
+ if (isPlainObject(value)) {
+ return Object.keys(value).reduce(function(acc, key) {
+ acc[key] = serializeObject(value[key], depth - 1);
+ return acc;
+ }, {});
+ } else if (Array.isArray(value)) {
+ return value.map(function(val) {
+ return serializeObject(val, depth - 1);
+ });
+ }
+
+ return serializeValue(value);
+}
+
+function serializeException(ex, depth, maxSize) {
+ if (!isPlainObject(ex)) return ex;
+
+ depth = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_DEPTH : depth;
+ maxSize = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_SIZE : maxSize;
+
+ var serialized = serializeObject(ex, depth);
+
+ if (jsonSize(stringify(serialized)) > maxSize) {
+ return serializeException(ex, depth - 1);
+ }
+
+ return serialized;
+}
+
+function serializeKeysForMessage(keys, maxLength) {
+ if (typeof keys === 'number' || typeof keys === 'string') return keys.toString();
+ if (!Array.isArray(keys)) return '';
+
+ keys = keys.filter(function(key) {
+ return typeof key === 'string';
+ });
+ if (keys.length === 0) return '[object has no keys]';
+
+ maxLength = typeof maxLength !== 'number' ? MAX_SERIALIZE_KEYS_LENGTH : maxLength;
+ if (keys[0].length >= maxLength) return keys[0];
+
+ for (var usedKeys = keys.length; usedKeys > 0; usedKeys--) {
+ var serialized = keys.slice(0, usedKeys).join(', ');
+ if (serialized.length > maxLength) continue;
+ if (usedKeys === keys.length) return serialized;
+ return serialized + '\u2026';
+ }
+
+ return '';
+}
+
+function sanitize(input, sanitizeKeys) {
+ if (!isArray(sanitizeKeys) || (isArray(sanitizeKeys) && sanitizeKeys.length === 0))
+ return input;
+
+ var sanitizeRegExp = joinRegExp(sanitizeKeys);
+ var sanitizeMask = '********';
+ var safeInput;
+
+ try {
+ safeInput = JSON.parse(stringify(input));
+ } catch (o_O) {
+ return input;
+ }
+
+ function sanitizeWorker(workerInput) {
+ if (isArray(workerInput)) {
+ return workerInput.map(function(val) {
+ return sanitizeWorker(val);
+ });
+ }
+
+ if (isPlainObject(workerInput)) {
+ return Object.keys(workerInput).reduce(function(acc, k) {
+ if (sanitizeRegExp.test(k)) {
+ acc[k] = sanitizeMask;
+ } else {
+ acc[k] = sanitizeWorker(workerInput[k]);
+ }
+ return acc;
+ }, {});
+ }
+
+ return workerInput;
+ }
+
+ return sanitizeWorker(safeInput);
+}
+
+module.exports = {
+ isObject: isObject,
+ isError: isError,
+ isErrorEvent: isErrorEvent,
+ isDOMError: isDOMError,
+ isDOMException: isDOMException,
+ isUndefined: isUndefined,
+ isFunction: isFunction,
+ isPlainObject: isPlainObject,
+ isString: isString,
+ isArray: isArray,
+ isEmptyObject: isEmptyObject,
+ supportsErrorEvent: supportsErrorEvent,
+ supportsDOMError: supportsDOMError,
+ supportsDOMException: supportsDOMException,
+ supportsFetch: supportsFetch,
+ supportsReferrerPolicy: supportsReferrerPolicy,
+ supportsPromiseRejectionEvent: supportsPromiseRejectionEvent,
+ wrappedCallback: wrappedCallback,
+ each: each,
+ objectMerge: objectMerge,
+ truncate: truncate,
+ objectFrozen: objectFrozen,
+ hasKey: hasKey,
+ joinRegExp: joinRegExp,
+ urlencode: urlencode,
+ uuid4: uuid4,
+ htmlTreeAsString: htmlTreeAsString,
+ htmlElementAsString: htmlElementAsString,
+ isSameException: isSameException,
+ isSameStacktrace: isSameStacktrace,
+ parseUrl: parseUrl,
+ fill: fill,
+ safeJoin: safeJoin,
+ serializeException: serializeException,
+ serializeKeysForMessage: serializeKeysForMessage,
+ sanitize: sanitize
+};
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"10":10}],9:[function(_dereq_,module,exports){
+(function (global){
+var utils = _dereq_(8);
+
+/*
+ TraceKit - Cross brower stack traces
+
+ This was originally forked from github.com/occ/TraceKit, but has since been
+ largely re-written and is now maintained as part of raven-js. Tests for
+ this are in test/vendor.
+
+ MIT license
+*/
+
+var TraceKit = {
+ collectWindowErrors: true,
+ debug: false
+};
+
+// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)
+var _window =
+ typeof window !== 'undefined'
+ ? window
+ : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
+
+// global reference to slice
+var _slice = [].slice;
+var UNKNOWN_FUNCTION = '?';
+
+// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types
+var ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;
+
+function getLocationHref() {
+ if (typeof document === 'undefined' || document.location == null) return '';
+ return document.location.href;
+}
+
+function getLocationOrigin() {
+ if (typeof document === 'undefined' || document.location == null) return '';
+
+ // Oh dear IE10...
+ if (!document.location.origin) {
+ document.location.origin =
+ document.location.protocol +
+ '//' +
+ document.location.hostname +
+ (document.location.port ? ':' + document.location.port : '');
+ }
+
+ return document.location.origin;
+}
+
+/**
+ * TraceKit.report: cross-browser processing of unhandled exceptions
+ *
+ * Syntax:
+ * TraceKit.report.subscribe(function(stackInfo) { ... })
+ * TraceKit.report.unsubscribe(function(stackInfo) { ... })
+ * TraceKit.report(exception)
+ * try { ...code... } catch(ex) { TraceKit.report(ex); }
+ *
+ * Supports:
+ * - Firefox: full stack trace with line numbers, plus column number
+ * on top frame; column number is not guaranteed
+ * - Opera: full stack trace with line and column numbers
+ * - Chrome: full stack trace with line and column numbers
+ * - Safari: line and column number for the top frame only; some frames
+ * may be missing, and column number is not guaranteed
+ * - IE: line and column number for the top frame only; some frames
+ * may be missing, and column number is not guaranteed
+ *
+ * In theory, TraceKit should work on all of the following versions:
+ * - IE5.5+ (only 8.0 tested)
+ * - Firefox 0.9+ (only 3.5+ tested)
+ * - Opera 7+ (only 10.50 tested; versions 9 and earlier may require
+ * Exceptions Have Stacktrace to be enabled in opera:config)
+ * - Safari 3+ (only 4+ tested)
+ * - Chrome 1+ (only 5+ tested)
+ * - Konqueror 3.5+ (untested)
+ *
+ * Requires TraceKit.computeStackTrace.
+ *
+ * Tries to catch all unhandled exceptions and report them to the
+ * subscribed handlers. Please note that TraceKit.report will rethrow the
+ * exception. This is REQUIRED in order to get a useful stack trace in IE.
+ * If the exception does not reach the top of the browser, you will only
+ * get a stack trace from the point where TraceKit.report was called.
+ *
+ * Handlers receive a stackInfo object as described in the
+ * TraceKit.computeStackTrace docs.
+ */
+TraceKit.report = (function reportModuleWrapper() {
+ var handlers = [],
+ lastArgs = null,
+ lastException = null,
+ lastExceptionStack = null;
+
+ /**
+ * Add a crash handler.
+ * @param {Function} handler
+ */
+ function subscribe(handler) {
+ installGlobalHandler();
+ handlers.push(handler);
+ }
+
+ /**
+ * Remove a crash handler.
+ * @param {Function} handler
+ */
+ function unsubscribe(handler) {
+ for (var i = handlers.length - 1; i >= 0; --i) {
+ if (handlers[i] === handler) {
+ handlers.splice(i, 1);
+ }
+ }
+ }
+
+ /**
+ * Remove all crash handlers.
+ */
+ function unsubscribeAll() {
+ uninstallGlobalHandler();
+ handlers = [];
+ }
+
+ /**
+ * Dispatch stack information to all handlers.
+ * @param {Object.} stack
+ */
+ function notifyHandlers(stack, isWindowError) {
+ var exception = null;
+ if (isWindowError && !TraceKit.collectWindowErrors) {
+ return;
+ }
+ for (var i in handlers) {
+ if (handlers.hasOwnProperty(i)) {
+ try {
+ handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2)));
+ } catch (inner) {
+ exception = inner;
+ }
+ }
+ }
+
+ if (exception) {
+ throw exception;
+ }
+ }
+
+ var _oldOnerrorHandler, _onErrorHandlerInstalled;
+
+ /**
+ * Ensures all global unhandled exceptions are recorded.
+ * Supported by Gecko and IE.
+ * @param {string} msg Error message.
+ * @param {string} url URL of script that generated the exception.
+ * @param {(number|string)} lineNo The line number at which the error
+ * occurred.
+ * @param {?(number|string)} colNo The column number at which the error
+ * occurred.
+ * @param {?Error} ex The actual Error object.
+ */
+ function traceKitWindowOnError(msg, url, lineNo, colNo, ex) {
+ var stack = null;
+ // If 'ex' is ErrorEvent, get real Error from inside
+ var exception = utils.isErrorEvent(ex) ? ex.error : ex;
+ // If 'msg' is ErrorEvent, get real message from inside
+ var message = utils.isErrorEvent(msg) ? msg.message : msg;
+
+ if (lastExceptionStack) {
+ TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(
+ lastExceptionStack,
+ url,
+ lineNo,
+ message
+ );
+ processLastException();
+ } else if (exception && utils.isError(exception)) {
+ // non-string `exception` arg; attempt to extract stack trace
+
+ // New chrome and blink send along a real error object
+ // Let's just report that like a normal error.
+ // See: https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror
+ stack = TraceKit.computeStackTrace(exception);
+ notifyHandlers(stack, true);
+ } else {
+ var location = {
+ url: url,
+ line: lineNo,
+ column: colNo
+ };
+
+ var name = undefined;
+ var groups;
+
+ if ({}.toString.call(message) === '[object String]') {
+ var groups = message.match(ERROR_TYPES_RE);
+ if (groups) {
+ name = groups[1];
+ message = groups[2];
+ }
+ }
+
+ location.func = UNKNOWN_FUNCTION;
+
+ stack = {
+ name: name,
+ message: message,
+ url: getLocationHref(),
+ stack: [location]
+ };
+ notifyHandlers(stack, true);
+ }
+
+ if (_oldOnerrorHandler) {
+ return _oldOnerrorHandler.apply(this, arguments);
+ }
+
+ return false;
+ }
+
+ function installGlobalHandler() {
+ if (_onErrorHandlerInstalled) {
+ return;
+ }
+ _oldOnerrorHandler = _window.onerror;
+ _window.onerror = traceKitWindowOnError;
+ _onErrorHandlerInstalled = true;
+ }
+
+ function uninstallGlobalHandler() {
+ if (!_onErrorHandlerInstalled) {
+ return;
+ }
+ _window.onerror = _oldOnerrorHandler;
+ _onErrorHandlerInstalled = false;
+ _oldOnerrorHandler = undefined;
+ }
+
+ function processLastException() {
+ var _lastExceptionStack = lastExceptionStack,
+ _lastArgs = lastArgs;
+ lastArgs = null;
+ lastExceptionStack = null;
+ lastException = null;
+ notifyHandlers.apply(null, [_lastExceptionStack, false].concat(_lastArgs));
+ }
+
+ /**
+ * Reports an unhandled Error to TraceKit.
+ * @param {Error} ex
+ * @param {?boolean} rethrow If false, do not re-throw the exception.
+ * Only used for window.onerror to not cause an infinite loop of
+ * rethrowing.
+ */
+ function report(ex, rethrow) {
+ var args = _slice.call(arguments, 1);
+ if (lastExceptionStack) {
+ if (lastException === ex) {
+ return; // already caught by an inner catch block, ignore
+ } else {
+ processLastException();
+ }
+ }
+
+ var stack = TraceKit.computeStackTrace(ex);
+ lastExceptionStack = stack;
+ lastException = ex;
+ lastArgs = args;
+
+ // If the stack trace is incomplete, wait for 2 seconds for
+ // slow slow IE to see if onerror occurs or not before reporting
+ // this exception; otherwise, we will end up with an incomplete
+ // stack trace
+ setTimeout(function() {
+ if (lastException === ex) {
+ processLastException();
+ }
+ }, stack.incomplete ? 2000 : 0);
+
+ if (rethrow !== false) {
+ throw ex; // re-throw to propagate to the top level (and cause window.onerror)
+ }
+ }
+
+ report.subscribe = subscribe;
+ report.unsubscribe = unsubscribe;
+ report.uninstall = unsubscribeAll;
+ return report;
+})();
+
+/**
+ * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript
+ *
+ * Syntax:
+ * s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below)
+ * Returns:
+ * s.name - exception name
+ * s.message - exception message
+ * s.stack[i].url - JavaScript or HTML file URL
+ * s.stack[i].func - function name, or empty for anonymous functions (if guessing did not work)
+ * s.stack[i].args - arguments passed to the function, if known
+ * s.stack[i].line - line number, if known
+ * s.stack[i].column - column number, if known
+ *
+ * Supports:
+ * - Firefox: full stack trace with line numbers and unreliable column
+ * number on top frame
+ * - Opera 10: full stack trace with line and column numbers
+ * - Opera 9-: full stack trace with line numbers
+ * - Chrome: full stack trace with line and column numbers
+ * - Safari: line and column number for the topmost stacktrace element
+ * only
+ * - IE: no line numbers whatsoever
+ *
+ * Tries to guess names of anonymous functions by looking for assignments
+ * in the source code. In IE and Safari, we have to guess source file names
+ * by searching for function bodies inside all page scripts. This will not
+ * work for scripts that are loaded cross-domain.
+ * Here be dragons: some function names may be guessed incorrectly, and
+ * duplicate functions may be mismatched.
+ *
+ * TraceKit.computeStackTrace should only be used for tracing purposes.
+ * Logging of unhandled exceptions should be done with TraceKit.report,
+ * which builds on top of TraceKit.computeStackTrace and provides better
+ * IE support by utilizing the window.onerror event to retrieve information
+ * about the top of the stack.
+ *
+ * Note: In IE and Safari, no stack trace is recorded on the Error object,
+ * so computeStackTrace instead walks its *own* chain of callers.
+ * This means that:
+ * * in Safari, some methods may be missing from the stack trace;
+ * * in IE, the topmost function in the stack trace will always be the
+ * caller of computeStackTrace.
+ *
+ * This is okay for tracing (because you are likely to be calling
+ * computeStackTrace from the function you want to be the topmost element
+ * of the stack trace anyway), but not okay for logging unhandled
+ * exceptions (because your catch block will likely be far away from the
+ * inner function that actually caused the exception).
+ *
+ */
+TraceKit.computeStackTrace = (function computeStackTraceWrapper() {
+ // Contents of Exception in various browsers.
+ //
+ // SAFARI:
+ // ex.message = Can't find variable: qq
+ // ex.line = 59
+ // ex.sourceId = 580238192
+ // ex.sourceURL = http://...
+ // ex.expressionBeginOffset = 96
+ // ex.expressionCaretOffset = 98
+ // ex.expressionEndOffset = 98
+ // ex.name = ReferenceError
+ //
+ // FIREFOX:
+ // ex.message = qq is not defined
+ // ex.fileName = http://...
+ // ex.lineNumber = 59
+ // ex.columnNumber = 69
+ // ex.stack = ...stack trace... (see the example below)
+ // ex.name = ReferenceError
+ //
+ // CHROME:
+ // ex.message = qq is not defined
+ // ex.name = ReferenceError
+ // ex.type = not_defined
+ // ex.arguments = ['aa']
+ // ex.stack = ...stack trace...
+ //
+ // INTERNET EXPLORER:
+ // ex.message = ...
+ // ex.name = ReferenceError
+ //
+ // OPERA:
+ // ex.message = ...message... (see the example below)
+ // ex.name = ReferenceError
+ // ex.opera#sourceloc = 11 (pretty much useless, duplicates the info in ex.message)
+ // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'
+
+ /**
+ * Computes stack trace information from the stack property.
+ * Chrome and Gecko use this property.
+ * @param {Error} ex
+ * @return {?Object.} Stack trace information.
+ */
+ function computeStackTraceFromStackProp(ex) {
+ if (typeof ex.stack === 'undefined' || !ex.stack) return;
+
+ var chrome = /^\s*at (?:(.*?) ?\()?((?:file|https?|blob|chrome-extension|native|eval|webpack||[a-z]:|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i;
+ var winjs = /^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i;
+ // NOTE: blob urls are now supposed to always have an origin, therefore it's format
+ // which is `blob:http://url/path/with-some-uuid`, is matched by `blob.*?:\/` as well
+ var gecko = /^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\/.*?|\[native code\]|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i;
+ // Used to additionally parse URL/line/column from eval frames
+ var geckoEval = /(\S+) line (\d+)(?: > eval line \d+)* > eval/i;
+ var chromeEval = /\((\S*)(?::(\d+))(?::(\d+))\)/;
+ var lines = ex.stack.split('\n');
+ var stack = [];
+ var submatch;
+ var parts;
+ var element;
+ var reference = /^(.*) is undefined$/.exec(ex.message);
+
+ for (var i = 0, j = lines.length; i < j; ++i) {
+ if ((parts = chrome.exec(lines[i]))) {
+ var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line
+ var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line
+ if (isEval && (submatch = chromeEval.exec(parts[2]))) {
+ // throw out eval line/column and use top-most line/column number
+ parts[2] = submatch[1]; // url
+ parts[3] = submatch[2]; // line
+ parts[4] = submatch[3]; // column
+ }
+ element = {
+ url: !isNative ? parts[2] : null,
+ func: parts[1] || UNKNOWN_FUNCTION,
+ args: isNative ? [parts[2]] : [],
+ line: parts[3] ? +parts[3] : null,
+ column: parts[4] ? +parts[4] : null
+ };
+ } else if ((parts = winjs.exec(lines[i]))) {
+ element = {
+ url: parts[2],
+ func: parts[1] || UNKNOWN_FUNCTION,
+ args: [],
+ line: +parts[3],
+ column: parts[4] ? +parts[4] : null
+ };
+ } else if ((parts = gecko.exec(lines[i]))) {
+ var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;
+ if (isEval && (submatch = geckoEval.exec(parts[3]))) {
+ // throw out eval line/column and use top-most line number
+ parts[3] = submatch[1];
+ parts[4] = submatch[2];
+ parts[5] = null; // no column when eval
+ } else if (i === 0 && !parts[5] && typeof ex.columnNumber !== 'undefined') {
+ // FireFox uses this awesome columnNumber property for its top frame
+ // Also note, Firefox's column number is 0-based and everything else expects 1-based,
+ // so adding 1
+ // NOTE: this hack doesn't work if top-most frame is eval
+ stack[0].column = ex.columnNumber + 1;
+ }
+ element = {
+ url: parts[3],
+ func: parts[1] || UNKNOWN_FUNCTION,
+ args: parts[2] ? parts[2].split(',') : [],
+ line: parts[4] ? +parts[4] : null,
+ column: parts[5] ? +parts[5] : null
+ };
+ } else {
+ continue;
+ }
+
+ if (!element.func && element.line) {
+ element.func = UNKNOWN_FUNCTION;
+ }
+
+ if (element.url && element.url.substr(0, 5) === 'blob:') {
+ // Special case for handling JavaScript loaded into a blob.
+ // We use a synchronous AJAX request here as a blob is already in
+ // memory - it's not making a network request. This will generate a warning
+ // in the browser console, but there has already been an error so that's not
+ // that much of an issue.
+ var xhr = new XMLHttpRequest();
+ xhr.open('GET', element.url, false);
+ xhr.send(null);
+
+ // If we failed to download the source, skip this patch
+ if (xhr.status === 200) {
+ var source = xhr.responseText || '';
+
+ // We trim the source down to the last 300 characters as sourceMappingURL is always at the end of the file.
+ // Why 300? To be in line with: https://github.com/getsentry/sentry/blob/4af29e8f2350e20c28a6933354e4f42437b4ba42/src/sentry/lang/javascript/processor.py#L164-L175
+ source = source.slice(-300);
+
+ // Now we dig out the source map URL
+ var sourceMaps = source.match(/\/\/# sourceMappingURL=(.*)$/);
+
+ // If we don't find a source map comment or we find more than one, continue on to the next element.
+ if (sourceMaps) {
+ var sourceMapAddress = sourceMaps[1];
+
+ // Now we check to see if it's a relative URL.
+ // If it is, convert it to an absolute one.
+ if (sourceMapAddress.charAt(0) === '~') {
+ sourceMapAddress = getLocationOrigin() + sourceMapAddress.slice(1);
+ }
+
+ // Now we strip the '.map' off of the end of the URL and update the
+ // element so that Sentry can match the map to the blob.
+ element.url = sourceMapAddress.slice(0, -4);
+ }
+ }
+ }
+
+ stack.push(element);
+ }
+
+ if (!stack.length) {
+ return null;
+ }
+
+ return {
+ name: ex.name,
+ message: ex.message,
+ url: getLocationHref(),
+ stack: stack
+ };
+ }
+
+ /**
+ * Adds information about the first frame to incomplete stack traces.
+ * Safari and IE require this to get complete data on the first frame.
+ * @param {Object.} stackInfo Stack trace information from
+ * one of the compute* methods.
+ * @param {string} url The URL of the script that caused an error.
+ * @param {(number|string)} lineNo The line number of the script that
+ * caused an error.
+ * @param {string=} message The error generated by the browser, which
+ * hopefully contains the name of the object that caused the error.
+ * @return {boolean} Whether or not the stack information was
+ * augmented.
+ */
+ function augmentStackTraceWithInitialElement(stackInfo, url, lineNo, message) {
+ var initial = {
+ url: url,
+ line: lineNo
+ };
+
+ if (initial.url && initial.line) {
+ stackInfo.incomplete = false;
+
+ if (!initial.func) {
+ initial.func = UNKNOWN_FUNCTION;
+ }
+
+ if (stackInfo.stack.length > 0) {
+ if (stackInfo.stack[0].url === initial.url) {
+ if (stackInfo.stack[0].line === initial.line) {
+ return false; // already in stack trace
+ } else if (
+ !stackInfo.stack[0].line &&
+ stackInfo.stack[0].func === initial.func
+ ) {
+ stackInfo.stack[0].line = initial.line;
+ return false;
+ }
+ }
+ }
+
+ stackInfo.stack.unshift(initial);
+ stackInfo.partial = true;
+ return true;
+ } else {
+ stackInfo.incomplete = true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Computes stack trace information by walking the arguments.caller
+ * chain at the time the exception occurred. This will cause earlier
+ * frames to be missed but is the only way to get any stack trace in
+ * Safari and IE. The top frame is restored by
+ * {@link augmentStackTraceWithInitialElement}.
+ * @param {Error} ex
+ * @return {?Object.} Stack trace information.
+ */
+ function computeStackTraceByWalkingCallerChain(ex, depth) {
+ var functionName = /function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,
+ stack = [],
+ funcs = {},
+ recursion = false,
+ parts,
+ item,
+ source;
+
+ for (
+ var curr = computeStackTraceByWalkingCallerChain.caller;
+ curr && !recursion;
+ curr = curr.caller
+ ) {
+ if (curr === computeStackTrace || curr === TraceKit.report) {
+ // console.log('skipping internal function');
+ continue;
+ }
+
+ item = {
+ url: null,
+ func: UNKNOWN_FUNCTION,
+ line: null,
+ column: null
+ };
+
+ if (curr.name) {
+ item.func = curr.name;
+ } else if ((parts = functionName.exec(curr.toString()))) {
+ item.func = parts[1];
+ }
+
+ if (typeof item.func === 'undefined') {
+ try {
+ item.func = parts.input.substring(0, parts.input.indexOf('{'));
+ } catch (e) {}
+ }
+
+ if (funcs['' + curr]) {
+ recursion = true;
+ } else {
+ funcs['' + curr] = true;
+ }
+
+ stack.push(item);
+ }
+
+ if (depth) {
+ // console.log('depth is ' + depth);
+ // console.log('stack is ' + stack.length);
+ stack.splice(0, depth);
+ }
+
+ var result = {
+ name: ex.name,
+ message: ex.message,
+ url: getLocationHref(),
+ stack: stack
+ };
+ augmentStackTraceWithInitialElement(
+ result,
+ ex.sourceURL || ex.fileName,
+ ex.line || ex.lineNumber,
+ ex.message || ex.description
+ );
+ return result;
+ }
+
+ /**
+ * Computes a stack trace for an exception.
+ * @param {Error} ex
+ * @param {(string|number)=} depth
+ */
+ function computeStackTrace(ex, depth) {
+ var stack = null;
+ depth = depth == null ? 0 : +depth;
+
+ try {
+ stack = computeStackTraceFromStackProp(ex);
+ if (stack) {
+ return stack;
+ }
+ } catch (e) {
+ if (TraceKit.debug) {
+ throw e;
+ }
+ }
+
+ try {
+ stack = computeStackTraceByWalkingCallerChain(ex, depth + 1);
+ if (stack) {
+ return stack;
+ }
+ } catch (e) {
+ if (TraceKit.debug) {
+ throw e;
+ }
+ }
+ return {
+ name: ex.name,
+ message: ex.message,
+ url: getLocationHref()
+ };
+ }
+
+ computeStackTrace.augmentStackTraceWithInitialElement = augmentStackTraceWithInitialElement;
+ computeStackTrace.computeStackTraceFromStackProp = computeStackTraceFromStackProp;
+
+ return computeStackTrace;
+})();
+
+module.exports = TraceKit;
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"8":8}],10:[function(_dereq_,module,exports){
+/*
+ json-stringify-safe
+ Like JSON.stringify, but doesn't throw on circular references.
+
+ Originally forked from https://github.com/isaacs/json-stringify-safe
+ version 5.0.1 on 3/8/2017 and modified to handle Errors serialization
+ and IE8 compatibility. Tests for this are in test/vendor.
+
+ ISC license: https://github.com/isaacs/json-stringify-safe/blob/master/LICENSE
+*/
+
+exports = module.exports = stringify;
+exports.getSerialize = serializer;
+
+function indexOf(haystack, needle) {
+ for (var i = 0; i < haystack.length; ++i) {
+ if (haystack[i] === needle) return i;
+ }
+ return -1;
+}
+
+function stringify(obj, replacer, spaces, cycleReplacer) {
+ return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces);
+}
+
+// https://github.com/ftlabs/js-abbreviate/blob/fa709e5f139e7770a71827b1893f22418097fbda/index.js#L95-L106
+function stringifyError(value) {
+ var err = {
+ // These properties are implemented as magical getters and don't show up in for in
+ stack: value.stack,
+ message: value.message,
+ name: value.name
+ };
+
+ for (var i in value) {
+ if (Object.prototype.hasOwnProperty.call(value, i)) {
+ err[i] = value[i];
+ }
+ }
+
+ return err;
+}
+
+function serializer(replacer, cycleReplacer) {
+ var stack = [];
+ var keys = [];
+
+ if (cycleReplacer == null) {
+ cycleReplacer = function(key, value) {
+ if (stack[0] === value) {
+ return '[Circular ~]';
+ }
+ return '[Circular ~.' + keys.slice(0, indexOf(stack, value)).join('.') + ']';
+ };
+ }
+
+ return function(key, value) {
+ if (stack.length > 0) {
+ var thisPos = indexOf(stack, this);
+ ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);
+ ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);
+
+ if (~indexOf(stack, value)) {
+ value = cycleReplacer.call(this, key, value);
+ }
+ } else {
+ stack.push(value);
+ }
+
+ return replacer == null
+ ? value instanceof Error ? stringifyError(value) : value
+ : replacer.call(this, key, value);
+ };
+}
+
+},{}],11:[function(_dereq_,module,exports){
+/*
+ * JavaScript MD5
+ * https://github.com/blueimp/JavaScript-MD5
+ *
+ * Copyright 2011, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * https://opensource.org/licenses/MIT
+ *
+ * Based on
+ * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
+ * Digest Algorithm, as defined in RFC 1321.
+ * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
+ * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
+ * Distributed under the BSD License
+ * See http://pajhome.org.uk/crypt/md5 for more info.
+ */
+
+/*
+* Add integers, wrapping at 2^32. This uses 16-bit operations internally
+* to work around bugs in some JS interpreters.
+*/
+function safeAdd(x, y) {
+ var lsw = (x & 0xffff) + (y & 0xffff);
+ var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
+ return (msw << 16) | (lsw & 0xffff);
+}
+
+/*
+* Bitwise rotate a 32-bit number to the left.
+*/
+function bitRotateLeft(num, cnt) {
+ return (num << cnt) | (num >>> (32 - cnt));
+}
+
+/*
+* These functions implement the four basic operations the algorithm uses.
+*/
+function md5cmn(q, a, b, x, s, t) {
+ return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);
+}
+function md5ff(a, b, c, d, x, s, t) {
+ return md5cmn((b & c) | (~b & d), a, b, x, s, t);
+}
+function md5gg(a, b, c, d, x, s, t) {
+ return md5cmn((b & d) | (c & ~d), a, b, x, s, t);
+}
+function md5hh(a, b, c, d, x, s, t) {
+ return md5cmn(b ^ c ^ d, a, b, x, s, t);
+}
+function md5ii(a, b, c, d, x, s, t) {
+ return md5cmn(c ^ (b | ~d), a, b, x, s, t);
+}
+
+/*
+* Calculate the MD5 of an array of little-endian words, and a bit length.
+*/
+function binlMD5(x, len) {
+ /* append padding */
+ x[len >> 5] |= 0x80 << (len % 32);
+ x[(((len + 64) >>> 9) << 4) + 14] = len;
+
+ var i;
+ var olda;
+ var oldb;
+ var oldc;
+ var oldd;
+ var a = 1732584193;
+ var b = -271733879;
+ var c = -1732584194;
+ var d = 271733878;
+
+ for (i = 0; i < x.length; i += 16) {
+ olda = a;
+ oldb = b;
+ oldc = c;
+ oldd = d;
+
+ a = md5ff(a, b, c, d, x[i], 7, -680876936);
+ d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);
+ c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);
+ b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);
+ a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);
+ d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);
+ c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);
+ b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);
+ a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);
+ d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);
+ c = md5ff(c, d, a, b, x[i + 10], 17, -42063);
+ b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);
+ a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);
+ d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);
+ c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);
+ b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);
+
+ a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);
+ d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);
+ c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);
+ b = md5gg(b, c, d, a, x[i], 20, -373897302);
+ a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);
+ d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);
+ c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);
+ b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);
+ a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);
+ d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);
+ c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);
+ b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);
+ a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);
+ d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);
+ c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);
+ b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);
+
+ a = md5hh(a, b, c, d, x[i + 5], 4, -378558);
+ d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);
+ c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);
+ b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);
+ a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);
+ d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);
+ c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);
+ b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);
+ a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);
+ d = md5hh(d, a, b, c, x[i], 11, -358537222);
+ c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);
+ b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);
+ a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);
+ d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);
+ c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);
+ b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);
+
+ a = md5ii(a, b, c, d, x[i], 6, -198630844);
+ d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);
+ c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);
+ b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);
+ a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);
+ d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);
+ c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);
+ b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);
+ a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);
+ d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);
+ c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);
+ b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);
+ a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);
+ d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);
+ c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);
+ b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);
+
+ a = safeAdd(a, olda);
+ b = safeAdd(b, oldb);
+ c = safeAdd(c, oldc);
+ d = safeAdd(d, oldd);
+ }
+ return [a, b, c, d];
+}
+
+/*
+* Convert an array of little-endian words to a string
+*/
+function binl2rstr(input) {
+ var i;
+ var output = '';
+ var length32 = input.length * 32;
+ for (i = 0; i < length32; i += 8) {
+ output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xff);
+ }
+ return output;
+}
+
+/*
+* Convert a raw string to an array of little-endian words
+* Characters >255 have their high-byte silently ignored.
+*/
+function rstr2binl(input) {
+ var i;
+ var output = [];
+ output[(input.length >> 2) - 1] = undefined;
+ for (i = 0; i < output.length; i += 1) {
+ output[i] = 0;
+ }
+ var length8 = input.length * 8;
+ for (i = 0; i < length8; i += 8) {
+ output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << (i % 32);
+ }
+ return output;
+}
+
+/*
+* Calculate the MD5 of a raw string
+*/
+function rstrMD5(s) {
+ return binl2rstr(binlMD5(rstr2binl(s), s.length * 8));
+}
+
+/*
+* Calculate the HMAC-MD5, of a key and some data (raw strings)
+*/
+function rstrHMACMD5(key, data) {
+ var i;
+ var bkey = rstr2binl(key);
+ var ipad = [];
+ var opad = [];
+ var hash;
+ ipad[15] = opad[15] = undefined;
+ if (bkey.length > 16) {
+ bkey = binlMD5(bkey, key.length * 8);
+ }
+ for (i = 0; i < 16; i += 1) {
+ ipad[i] = bkey[i] ^ 0x36363636;
+ opad[i] = bkey[i] ^ 0x5c5c5c5c;
+ }
+ hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);
+ return binl2rstr(binlMD5(opad.concat(hash), 512 + 128));
+}
+
+/*
+* Convert a raw string to a hex string
+*/
+function rstr2hex(input) {
+ var hexTab = '0123456789abcdef';
+ var output = '';
+ var x;
+ var i;
+ for (i = 0; i < input.length; i += 1) {
+ x = input.charCodeAt(i);
+ output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f);
+ }
+ return output;
+}
+
+/*
+* Encode a string as utf-8
+*/
+function str2rstrUTF8(input) {
+ return unescape(encodeURIComponent(input));
+}
+
+/*
+* Take string arguments and return either raw or hex encoded strings
+*/
+function rawMD5(s) {
+ return rstrMD5(str2rstrUTF8(s));
+}
+function hexMD5(s) {
+ return rstr2hex(rawMD5(s));
+}
+function rawHMACMD5(k, d) {
+ return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d));
+}
+function hexHMACMD5(k, d) {
+ return rstr2hex(rawHMACMD5(k, d));
+}
+
+function md5(string, key, raw) {
+ if (!key) {
+ if (!raw) {
+ return hexMD5(string);
+ }
+ return rawMD5(string);
+ }
+ if (!raw) {
+ return hexHMACMD5(key, string);
+ }
+ return rawHMACMD5(key, string);
+}
+
+module.exports = md5;
+
+},{}]},{},[7,1,2,3])(7)
+});
\ No newline at end of file
diff --git a/packages/raven-js/dist/angular,console,vue/raven.min.js b/packages/raven-js/dist/angular,console,vue/raven.min.js
new file mode 100644
index 000000000000..399e8ca7ad23
--- /dev/null
+++ b/packages/raven-js/dist/angular,console,vue/raven.min.js
@@ -0,0 +1,4 @@
+/*! Raven.js 3.25.2 (30b6d4e) | github.com/getsentry/raven-js */
+!function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,b.Raven=a()}}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c?c:a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g":"anonymous component")+(a._isVue&&a.$options.__file?" at "+a.$options.__file:"")}function e(a,b){if(b=b||window.Vue,b&&b.config){var c=b.config.errorHandler;b.config.errorHandler=function(b,e,f){var g={};"[object Object]"===Object.prototype.toString.call(e)&&(g.componentName=d(e),g.propsData=e.$options.propsData),"undefined"!=typeof f&&(g.lifecycleHook=f),a.captureException(b,{extra:g}),"function"==typeof c&&c.call(this,b,e,f)}}}b.exports=e,a(7).addPlugin(b.exports)},{7:7}],4:[function(a,b,c){function d(a){this.name="RavenConfigError",this.message=a}d.prototype=new Error,d.prototype.constructor=d,b.exports=d},{}],5:[function(a,b,c){var d=a(8),e=function(a,b,c){var e=a[b],f=a;if(b in a){var g="warn"===b?"warning":b;a[b]=function(){var a=[].slice.call(arguments),h=d.safeJoin(a," "),i={level:g,logger:"console",extra:{arguments:a}};"assert"===b?a[0]===!1&&(h="Assertion failed: "+(d.safeJoin(a.slice(1)," ")||"console.assert"),i.extra.arguments=a.slice(1),c&&c(h,i)):c&&c(h,i),e&&Function.prototype.apply.call(e,f,a)}}};b.exports={wrapMethod:e}},{8:8}],6:[function(a,b,c){(function(c){function d(){return+new Date}function e(a,b){return s(b)?function(c){return b(c,a)}:b}function f(){this.b=!("object"!=typeof JSON||!JSON.stringify),this.c=!r(S),this.d=!r(T),this.e=null,this.f=null,this.g=null,this.h=null,this.i=null,this.j=null,this.k={},this.l={release:R.SENTRY_RELEASE&&R.SENTRY_RELEASE.id,logger:"javascript",ignoreErrors:[],ignoreUrls:[],whitelistUrls:[],includePaths:[],headers:null,collectWindowErrors:!0,captureUnhandledRejections:!0,maxMessageLength:0,maxUrlLength:250,stackTraceLimit:50,autoBreadcrumbs:!0,instrument:!0,sampleRate:1,sanitizeKeys:[]},this.m={method:"POST",keepalive:!0,referrerPolicy:K()?"origin":""},this.n=0,this.o=!1,this.p=Error.stackTraceLimit,this.q=R.console||{},this.r={},this.s=[],this.t=d(),this.u=[],this.v=[],this.w=null,this.x=R.location,this.y=this.x&&this.x.href,this.z();for(var a in this.q)this.r[a]=this.q[a]}var g=a(9),h=a(10),i=a(11),j=a(4),k=a(8),l=k.isErrorEvent,m=k.isDOMError,n=k.isDOMException,o=k.isError,p=k.isObject,q=k.isPlainObject,r=k.isUndefined,s=k.isFunction,t=k.isString,u=k.isArray,v=k.isEmptyObject,w=k.each,x=k.objectMerge,y=k.truncate,z=k.objectFrozen,A=k.hasKey,B=k.joinRegExp,C=k.urlencode,D=k.uuid4,E=k.htmlTreeAsString,F=k.isSameException,G=k.isSameStacktrace,H=k.parseUrl,I=k.fill,J=k.supportsFetch,K=k.supportsReferrerPolicy,L=k.serializeKeysForMessage,M=k.serializeException,N=k.sanitize,O=a(5).wrapMethod,P="source protocol user pass host port path".split(" "),Q=/^(?:(\w+):)?\/\/(?:(\w+)(:\w+)?@)?([\w\.-]+)(?::(\d+))?(\/.*)/,R="undefined"!=typeof window?window:"undefined"!=typeof c?c:"undefined"!=typeof self?self:{},S=R.document,T=R.navigator;f.prototype={VERSION:"3.25.2",debug:!1,TraceKit:g,config:function(a,b){var c=this;if(c.h)return this.A("error","Error: Raven has already been configured"),c;if(!a)return c;var d=c.l;b&&w(b,function(a,b){"tags"===a||"extra"===a||"user"===a?c.k[a]=b:d[a]=b}),c.setDSN(a),d.ignoreErrors.push(/^Script error\.?$/),d.ignoreErrors.push(/^Javascript error: Script error\.? on line 0$/),d.ignoreErrors=B(d.ignoreErrors),d.ignoreUrls=!!d.ignoreUrls.length&&B(d.ignoreUrls),d.whitelistUrls=!!d.whitelistUrls.length&&B(d.whitelistUrls),d.includePaths=B(d.includePaths),d.maxBreadcrumbs=Math.max(0,Math.min(d.maxBreadcrumbs||100,100));var e={xhr:!0,console:!0,dom:!0,location:!0,sentry:!0},f=d.autoBreadcrumbs;"[object Object]"==={}.toString.call(f)?f=x(e,f):f!==!1&&(f=e),d.autoBreadcrumbs=f;var h={tryCatch:!0},i=d.instrument;return"[object Object]"==={}.toString.call(i)?i=x(h,i):i!==!1&&(i=h),d.instrument=i,g.collectWindowErrors=!!d.collectWindowErrors,c},install:function(){var a=this;return a.isSetup()&&!a.o&&(g.report.subscribe(function(){a.B.apply(a,arguments)}),a.l.captureUnhandledRejections&&a.C(),a.D(),a.l.instrument&&a.l.instrument.tryCatch&&a.E(),a.l.autoBreadcrumbs&&a.F(),a.G(),a.o=!0),Error.stackTraceLimit=a.l.stackTraceLimit,this},setDSN:function(a){var b=this,c=b.H(a),d=c.path.lastIndexOf("/"),e=c.path.substr(1,d);b.I=a,b.i=c.user,b.J=c.pass&&c.pass.substr(1),b.j=c.path.substr(d+1),b.h=b.K(c),b.L=b.h+"/"+e+"api/"+b.j+"/store/",this.z()},context:function(a,b,c){return s(a)&&(c=b||[],b=a,a=void 0),this.wrap(a,b).apply(this,c)},wrap:function(a,b,c){function d(){var d=[],f=arguments.length,g=!a||a&&a.deep!==!1;for(c&&s(c)&&c.apply(this,arguments);f--;)d[f]=g?e.wrap(a,arguments[f]):arguments[f];try{return b.apply(this,d)}catch(h){throw e.M(),e.captureException(h,a),h}}var e=this;if(r(b)&&!s(a))return a;if(s(a)&&(b=a,a=void 0),!s(b))return b;try{if(b.N)return b;if(b.O)return b.O}catch(f){return b}for(var g in b)A(b,g)&&(d[g]=b[g]);return d.prototype=b.prototype,b.O=d,d.N=!0,d.P=b,d},uninstall:function(){return g.report.uninstall(),this.Q(),this.R(),this.S(),this.T(),Error.stackTraceLimit=this.p,this.o=!1,this},U:function(a){this.A("debug","Raven caught unhandled promise rejection:",a),this.captureException(a.reason,{extra:{unhandledPromiseRejection:!0}})},C:function(){return this.U=this.U.bind(this),R.addEventListener&&R.addEventListener("unhandledrejection",this.U),this},Q:function(){return R.removeEventListener&&R.removeEventListener("unhandledrejection",this.U),this},captureException:function(a,b){if(b=x({trimHeadFrames:0},b?b:{}),l(a)&&a.error)a=a.error;else{if(m(a)||n(a)){var c=a.name||(m(a)?"DOMError":"DOMException"),d=a.message?c+": "+a.message:c;return this.captureMessage(d,x(b,{stacktrace:!0,trimHeadFrames:b.trimHeadFrames+1}))}if(o(a))a=a;else{if(!q(a))return this.captureMessage(a,x(b,{stacktrace:!0,trimHeadFrames:b.trimHeadFrames+1}));b=this.V(b,a),a=new Error(b.message)}}this.e=a;try{var e=g.computeStackTrace(a);this.W(e,b)}catch(f){if(a!==f)throw f}return this},V:function(a,b){var c=Object.keys(b).sort(),d=x(a,{message:"Non-Error exception captured with keys: "+L(c),fingerprint:[i(c)],extra:a.extra||{}});return d.extra.X=M(b),d},captureMessage:function(a,b){if(!this.l.ignoreErrors.test||!this.l.ignoreErrors.test(a)){b=b||{},a+="";var c,d=x({message:a},b);try{throw new Error(a)}catch(e){c=e}c.name=null;var f=g.computeStackTrace(c),h=u(f.stack)&&f.stack[1];h&&"Raven.captureException"===h.func&&(h=f.stack[2]);var i=h&&h.url||"";if((!this.l.ignoreUrls.test||!this.l.ignoreUrls.test(i))&&(!this.l.whitelistUrls.test||this.l.whitelistUrls.test(i))){if(this.l.stacktrace||b&&b.stacktrace){d.fingerprint=null==d.fingerprint?a:d.fingerprint,b=x({trimHeadFrames:0},b),b.trimHeadFrames+=1;var j=this.Y(f,b);d.stacktrace={frames:j.reverse()}}return d.fingerprint&&(d.fingerprint=u(d.fingerprint)?d.fingerprint:[d.fingerprint]),this.Z(d),this}}},captureBreadcrumb:function(a){var b=x({timestamp:d()/1e3},a);if(s(this.l.breadcrumbCallback)){var c=this.l.breadcrumbCallback(b);if(p(c)&&!v(c))b=c;else if(c===!1)return this}return this.v.push(b),this.v.length>this.l.maxBreadcrumbs&&this.v.shift(),this},addPlugin:function(a){var b=[].slice.call(arguments,1);return this.s.push([a,b]),this.o&&this.G(),this},setUserContext:function(a){return this.k.user=a,this},setExtraContext:function(a){return this.$("extra",a),this},setTagsContext:function(a){return this.$("tags",a),this},clearContext:function(){return this.k={},this},getContext:function(){return JSON.parse(h(this.k))},setEnvironment:function(a){return this.l.environment=a,this},setRelease:function(a){return this.l.release=a,this},setDataCallback:function(a){var b=this.l.dataCallback;return this.l.dataCallback=e(b,a),this},setBreadcrumbCallback:function(a){var b=this.l.breadcrumbCallback;return this.l.breadcrumbCallback=e(b,a),this},setShouldSendCallback:function(a){var b=this.l.shouldSendCallback;return this.l.shouldSendCallback=e(b,a),this},setTransport:function(a){return this.l.transport=a,this},lastException:function(){return this.e},lastEventId:function(){return this.g},isSetup:function(){return!!this.b&&(!!this.h||(this.ravenNotConfiguredError||(this.ravenNotConfiguredError=!0,this.A("error","Error: Raven has not been configured.")),!1))},afterLoad:function(){var a=R.RavenConfig;a&&this.config(a.dsn,a.config).install()},showReportDialog:function(a){if(S){a=a||{};var b=a.eventId||this.lastEventId();if(!b)throw new j("Missing eventId");var c=a.dsn||this.I;if(!c)throw new j("Missing DSN");var d=encodeURIComponent,e="";e+="?eventId="+d(b),e+="&dsn="+d(c);var f=a.user||this.k.user;f&&(f.name&&(e+="&name="+d(f.name)),f.email&&(e+="&email="+d(f.email)));var g=this.K(this.H(c)),h=S.createElement("script");h.async=!0,h.src=g+"/api/embed/error-page/"+e,(S.head||S.body).appendChild(h)}},M:function(){var a=this;this.n+=1,setTimeout(function(){a.n-=1})},_:function(a,b){var c,d;if(this.c){b=b||{},a="raven"+a.substr(0,1).toUpperCase()+a.substr(1),S.createEvent?(c=S.createEvent("HTMLEvents"),c.initEvent(a,!0,!0)):(c=S.createEventObject(),c.eventType=a);for(d in b)A(b,d)&&(c[d]=b[d]);if(S.createEvent)S.dispatchEvent(c);else try{S.fireEvent("on"+c.eventType.toLowerCase(),c)}catch(e){}}},aa:function(a){var b=this;return function(c){if(b.ba=null,b.w!==c){b.w=c;var d;try{d=E(c.target)}catch(e){d=""}b.captureBreadcrumb({category:"ui."+a,message:d})}}},ca:function(){var a=this,b=1e3;return function(c){var d;try{d=c.target}catch(e){return}var f=d&&d.tagName;if(f&&("INPUT"===f||"TEXTAREA"===f||d.isContentEditable)){var g=a.ba;g||a.aa("input")(c),clearTimeout(g),a.ba=setTimeout(function(){a.ba=null},b)}}},da:function(a,b){var c=H(this.x.href),d=H(b),e=H(a);this.y=b,c.protocol===d.protocol&&c.host===d.host&&(b=d.relative),c.protocol===e.protocol&&c.host===e.host&&(a=e.relative),this.captureBreadcrumb({category:"navigation",data:{to:b,from:a}})},D:function(){var a=this;a.ea=Function.prototype.toString,Function.prototype.toString=function(){return"function"==typeof this&&this.N?a.ea.apply(this.P,arguments):a.ea.apply(this,arguments)}},R:function(){this.ea&&(Function.prototype.toString=this.ea)},E:function(){function a(a){return function(b,d){for(var e=new Array(arguments.length),f=0;f2?arguments[2]:void 0;return c&&b.da(b.y,c+""),a.apply(this,arguments)}};I(R.history,"pushState",j,d),I(R.history,"replaceState",j,d)}if(c.console&&"console"in R&&console.log){var k=function(a,c){b.captureBreadcrumb({message:a,level:c.level,category:"console"})};w(["debug","info","warn","error","log"],function(a,b){O(console,b,k)})}},S:function(){for(var a;this.u.length;){a=this.u.shift();var b=a[0],c=a[1],d=a[2];b[c]=d}},T:function(){for(var a in this.r)this.q[a]=this.r[a]},G:function(){var a=this;w(this.s,function(b,c){var d=c[0],e=c[1];d.apply(a,[a].concat(e))})},H:function(a){var b=Q.exec(a),c={},d=7;try{for(;d--;)c[P[d]]=b[d]||""}catch(e){throw new j("Invalid DSN: "+a)}if(c.pass&&!this.l.allowSecretKey)throw new j("Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key");return c},K:function(a){var b="//"+a.host+(a.port?":"+a.port:"");return a.protocol&&(b=a.protocol+":"+b),b},B:function(){this.n||this.W.apply(this,arguments)},W:function(a,b){var c=this.Y(a,b);this._("handle",{stackInfo:a,options:b}),this.ga(a.name,a.message,a.url,a.lineno,c,b)},Y:function(a,b){var c=this,d=[];if(a.stack&&a.stack.length&&(w(a.stack,function(b,e){var f=c.ha(e,a.url);f&&d.push(f)}),b&&b.trimHeadFrames))for(var e=0;e0&&(a.breadcrumbs={values:[].slice.call(this.v,0)}),this.k.user&&(a.user=this.k.user),b.environment&&(a.environment=b.environment),b.release&&(a.release=b.release),b.serverName&&(a.server_name=b.serverName),a=this.qa(a),Object.keys(a).forEach(function(b){(null==a[b]||""===a[b]||v(a[b]))&&delete a[b]}),s(b.dataCallback)&&(a=b.dataCallback(a)||a),a&&!v(a)&&(!s(b.shouldSendCallback)||b.shouldSendCallback(a)))return this.na()?void this.A("warn","Raven dropped error due to backoff: ",a):void("number"==typeof b.sampleRate?Math.random() ",i=h.length;a&&f++1&&g+e.length*i+b.length>=d));)e.push(b),g+=b.length,a=a.parentNode;return e.reverse().join(h)}function F(a){var b,c,d,e,f,g=[];if(!a||!a.tagName)return"";if(g.push(a.tagName.toLowerCase()),a.id&&g.push("#"+a.id),b=a.className,b&&l(b))for(c=b.split(/\s+/),f=0;fc?Q(a,b-1):d}function R(a,b){if("number"==typeof a||"string"==typeof a)return a.toString();if(!Array.isArray(a))return"";if(a=a.filter(function(a){return"string"==typeof a}),0===a.length)return"[object has no keys]";if(b="number"!=typeof b?X:b,a[0].length>=b)return a[0];for(var c=a.length;c>0;c--){var d=a.slice(0,c).join(", ");if(!(d.length>b))return c===a.length?d:d+"…"}return""}function S(a,b){function c(a){return m(a)?a.map(function(a){return c(a)}):k(a)?Object.keys(a).reduce(function(b,d){return b[d]=e.test(d)?f:c(a[d]),b},{}):a}if(!m(b)||m(b)&&0===b.length)return a;var d,e=A(b),f="********";try{d=JSON.parse(T(a))}catch(g){return a}return c(d)}var T=a(10),U="undefined"!=typeof window?window:"undefined"!=typeof c?c:"undefined"!=typeof self?self:{},V=3,W=51200,X=40;b.exports={isObject:d,isError:e,isErrorEvent:f,isDOMError:g,isDOMException:h,isUndefined:i,isFunction:j,isPlainObject:k,isString:l,isArray:m,isEmptyObject:n,supportsErrorEvent:o,supportsDOMError:p,supportsDOMException:q,supportsFetch:r,supportsReferrerPolicy:s,supportsPromiseRejectionEvent:t,wrappedCallback:u,each:v,objectMerge:w,truncate:y,objectFrozen:x,hasKey:z,joinRegExp:A,urlencode:B,uuid4:D,htmlTreeAsString:E,htmlElementAsString:F,isSameException:I,isSameStacktrace:J,parseUrl:C,fill:K,safeJoin:L,serializeException:Q,serializeKeysForMessage:R,sanitize:S}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{10:10}],9:[function(a,b,c){(function(c){function d(){return"undefined"==typeof document||null==document.location?"":document.location.href}function e(){return"undefined"==typeof document||null==document.location?"":(document.location.origin||(document.location.origin=document.location.protocol+"//"+document.location.hostname+(document.location.port?":"+document.location.port:"")),document.location.origin)}var f=a(8),g={collectWindowErrors:!0,debug:!1},h="undefined"!=typeof window?window:"undefined"!=typeof c?c:"undefined"!=typeof self?self:{},i=[].slice,j="?",k=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;g.report=function(){function a(a){m(),s.push(a)}function b(a){for(var b=s.length-1;b>=0;--b)s[b]===a&&s.splice(b,1)}function c(){n(),s=[]}function e(a,b){var c=null;if(!b||g.collectWindowErrors){for(var d in s)if(s.hasOwnProperty(d))try{s[d].apply(null,[a].concat(i.call(arguments,2)))}catch(e){c=e}if(c)throw c}}function l(a,b,c,h,i){var l=null,m=f.isErrorEvent(i)?i.error:i,n=f.isErrorEvent(a)?a.message:a;if(v)g.computeStackTrace.augmentStackTraceWithInitialElement(v,b,c,n),o();else if(m&&f.isError(m))l=g.computeStackTrace(m),e(l,!0);else{var p,r={url:b,line:c,column:h},s=void 0;if("[object String]"==={}.toString.call(n)){var p=n.match(k);p&&(s=p[1],n=p[2])}r.func=j,l={name:s,message:n,url:d(),stack:[r]},e(l,!0)}return!!q&&q.apply(this,arguments)}function m(){r||(q=h.onerror,h.onerror=l,r=!0)}function n(){r&&(h.onerror=q,r=!1,q=void 0)}function o(){var a=v,b=t;t=null,v=null,u=null,e.apply(null,[a,!1].concat(b))}function p(a,b){var c=i.call(arguments,1);if(v){if(u===a)return;o()}var d=g.computeStackTrace(a);if(v=d,u=a,t=c,setTimeout(function(){u===a&&o()},d.incomplete?2e3:0),b!==!1)throw a}var q,r,s=[],t=null,u=null,v=null;return p.subscribe=a,p.unsubscribe=b,p.uninstall=c,p}(),g.computeStackTrace=function(){function a(a){if("undefined"!=typeof a.stack&&a.stack){for(var b,c,f,g=/^\s*at (?:(.*?) ?\()?((?:file|https?|blob|chrome-extension|native|eval|webpack||[a-z]:|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,h=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i,i=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\/.*?|\[native code\]|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i,k=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,l=/\((\S*)(?::(\d+))(?::(\d+))\)/,m=a.stack.split("\n"),n=[],o=(/^(.*) is undefined$/.exec(a.message),0),p=m.length;o eval")>-1;r&&(b=k.exec(c[3]))?(c[3]=b[1],c[4]=b[2],c[5]=null):0!==o||c[5]||"undefined"==typeof a.columnNumber||(n[0].column=a.columnNumber+1),
+f={url:c[3],func:c[1]||j,args:c[2]?c[2].split(","):[],line:c[4]?+c[4]:null,column:c[5]?+c[5]:null}}if(!f.func&&f.line&&(f.func=j),f.url&&"blob:"===f.url.substr(0,5)){var s=new XMLHttpRequest;if(s.open("GET",f.url,!1),s.send(null),200===s.status){var t=s.responseText||"";t=t.slice(-300);var u=t.match(/\/\/# sourceMappingURL=(.*)$/);if(u){var v=u[1];"~"===v.charAt(0)&&(v=e()+v.slice(1)),f.url=v.slice(0,-4)}}}n.push(f)}return n.length?{name:a.name,message:a.message,url:d(),stack:n}:null}}function b(a,b,c,d){var e={url:b,line:c};if(e.url&&e.line){if(a.incomplete=!1,e.func||(e.func=j),a.stack.length>0&&a.stack[0].url===e.url){if(a.stack[0].line===e.line)return!1;if(!a.stack[0].line&&a.stack[0].func===e.func)return a.stack[0].line=e.line,!1}return a.stack.unshift(e),a.partial=!0,!0}return a.incomplete=!0,!1}function c(a,e){for(var h,i,k=/function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,l=[],m={},n=!1,o=c.caller;o&&!n;o=o.caller)if(o!==f&&o!==g.report){if(i={url:null,func:j,line:null,column:null},o.name?i.func=o.name:(h=k.exec(o.toString()))&&(i.func=h[1]),"undefined"==typeof i.func)try{i.func=h.input.substring(0,h.input.indexOf("{"))}catch(p){}m[""+o]?n=!0:m[""+o]=!0,l.push(i)}e&&l.splice(0,e);var q={name:a.name,message:a.message,url:d(),stack:l};return b(q,a.sourceURL||a.fileName,a.line||a.lineNumber,a.message||a.description),q}function f(b,e){var f=null;e=null==e?0:+e;try{if(f=a(b))return f}catch(h){if(g.debug)throw h}try{if(f=c(b,e+1))return f}catch(h){if(g.debug)throw h}return{name:b.name,message:b.message,url:d()}}return f.augmentStackTraceWithInitialElement=b,f.computeStackTraceFromStackProp=a,f}(),b.exports=g}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{8:8}],10:[function(a,b,c){function d(a,b){for(var c=0;c0){var i=d(c,this);~i?c.splice(i+1):c.push(this),~i?e.splice(i,1/0,g):e.push(g),~d(c,h)&&(h=b.call(this,g,h))}else c.push(h);return null==a?h instanceof Error?f(h):h:a.call(this,g,h)}}c=b.exports=e,c.getSerialize=g},{}],11:[function(a,b,c){function d(a,b){var c=(65535&a)+(65535&b),d=(a>>16)+(b>>16)+(c>>16);return d<<16|65535&c}function e(a,b){return a<>>32-b}function f(a,b,c,f,g,h){return d(e(d(d(b,a),d(f,h)),g),c)}function g(a,b,c,d,e,g,h){return f(b&c|~b&d,a,b,e,g,h)}function h(a,b,c,d,e,g,h){return f(b&d|c&~d,a,b,e,g,h)}function i(a,b,c,d,e,g,h){return f(b^c^d,a,b,e,g,h)}function j(a,b,c,d,e,g,h){return f(c^(b|~d),a,b,e,g,h)}function k(a,b){a[b>>5]|=128<>>9<<4)+14]=b;var c,e,f,k,l,m=1732584193,n=-271733879,o=-1732584194,p=271733878;for(c=0;c>5]>>>b%32&255);return c}function m(a){var b,c=[];for(c[(a.length>>2)-1]=void 0,b=0;b>5]|=(255&a.charCodeAt(b/8))<16&&(e=k(e,8*a.length)),c=0;c<16;c+=1)f[c]=909522486^e[c],g[c]=1549556828^e[c];return d=k(f.concat(m(b)),512+8*b.length),l(k(g.concat(d),640))}function p(a){var b,c,d="0123456789abcdef",e="";for(c=0;c>>4&15)+d.charAt(15&b);return e}function q(a){return unescape(encodeURIComponent(a))}function r(a){return n(q(a))}function s(a){return p(r(a))}function t(a,b){return o(q(a),q(b))}function u(a,b){return p(t(a,b))}function v(a,b,c){return b?c?t(b,a):u(b,a):c?r(a):s(a)}b.exports=v},{}]},{},[7,1,2,3])(7)});
+//# sourceMappingURL=raven.min.js.map
\ No newline at end of file
diff --git a/packages/raven-js/dist/angular,console,vue/raven.min.js.map b/packages/raven-js/dist/angular,console,vue/raven.min.js.map
new file mode 100644
index 000000000000..ccc07160794a
--- /dev/null
+++ b/packages/raven-js/dist/angular,console,vue/raven.min.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["raven.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Raven","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length","1","_dereq_","angularPlugin","angular","RavenProvider","$get","$window","ExceptionHandlerProvider","$provide","decorator","exceptionHandler","R","$delegate","ex","cause","captureException","extra","moduleName","provider","config","setDataCallback","wrappedCallback","data","_normalizeData","angularPattern","exception","values","matches","exec","value","type","message","angularDocs","substr","addPlugin","7","8","2","consolePlugin","console","pluginOptions","logLevels","levels","push","callback","msg","captureMessage","level","pop","wrapConsoleMethod","wrapMethod","5","3","formatComponentName","vm","$root","name","_isVue","$options","_componentTag","__file","vuePlugin","Vue","_oldOnError","errorHandler","error","info","metaData","Object","prototype","toString","componentName","propsData","lifecycleHook","4","RavenConfigError","constructor","utils","originalConsoleLevel","originalConsole","sentryLevel","args","slice","arguments","safeJoin","logger","Function","apply","6","now","Date","keepOriginalCallback","original","isFunction","_hasJSON","JSON","stringify","_hasDocument","isUndefined","_document","_hasNavigator","_navigator","_lastCapturedException","_lastData","_lastEventId","_globalServer","_globalKey","_globalProject","_globalContext","_globalOptions","release","_window","SENTRY_RELEASE","id","ignoreErrors","ignoreUrls","whitelistUrls","includePaths","headers","collectWindowErrors","captureUnhandledRejections","maxMessageLength","maxUrlLength","stackTraceLimit","autoBreadcrumbs","instrument","sampleRate","sanitizeKeys","_fetchDefaults","method","keepalive","referrerPolicy","supportsReferrerPolicy","_ignoreOnError","_isRavenInstalled","_originalErrorStackTraceLimit","_originalConsole","_originalConsoleMethods","_plugins","_startTime","_wrappedBuiltIns","_breadcrumbs","_lastCapturedEvent","_location","location","_lastHref","href","_resetBackoff","TraceKit","md5","isErrorEvent","isDOMError","isDOMException","isError","isObject","isPlainObject","isString","isArray","isEmptyObject","each","objectMerge","truncate","objectFrozen","hasKey","joinRegExp","urlencode","uuid4","htmlTreeAsString","isSameException","isSameStacktrace","parseUrl","fill","supportsFetch","serializeKeysForMessage","serializeException","sanitize","dsnKeys","split","dsnPattern","document","navigator","VERSION","debug","dsn","options","_logDebug","globalOptions","key","setDSN","maxBreadcrumbs","Math","max","min","autoBreadcrumbDefaults","xhr","dom","sentry","instrumentDefaults","tryCatch","install","isSetup","report","subscribe","_handleOnErrorStackInfo","_attachPromiseRejectionHandler","_patchFunctionToString","_instrumentTryCatch","_instrumentBreadcrumbs","_drainPlugins","uri","_parseDSN","lastSlash","path","lastIndexOf","_dsn","user","_globalSecret","pass","_getGlobalServer","_globalEndpoint","context","func","undefined","wrap","_before","wrapped","deep","_ignoreNextOnError","__raven__","__raven_wrapper__","property","__orig__","uninstall","_detachPromiseRejectionHandler","_unpatchFunctionToString","_restoreBuiltIns","_restoreConsole","U","event","reason","unhandledPromiseRejection","C","_promiseRejectionHandler","bind","addEventListener","Q","removeEventListener","trimHeadFrames","stacktrace","_getCaptureExceptionOptionsFromPlainObject","stack","computeStackTrace","_handleStackInfo","ex1","V","currentOptions","exKeys","keys","sort","fingerprint","__serialized__","test","initialCall","fileurl","url","frames","_prepareFrames","reverse","_send","captureBreadcrumb","obj","crumb","timestamp","breadcrumbCallback","result","shift","plugin","pluginArgs","setUserContext","setExtraContext","_mergeContext","setTagsContext","tags","clearContext","getContext","parse","setEnvironment","environment","setRelease","dataCallback","setBreadcrumbCallback","setShouldSendCallback","shouldSendCallback","setTransport","transport","lastException","lastEventId","ravenNotConfiguredError","afterLoad","RavenConfig","showReportDialog","eventId","encode","encodeURIComponent","qs","email","globalServer","script","createElement","async","src","head","body","appendChild","M","setTimeout","_","eventType","evt","toUpperCase","createEvent","initEvent","createEventObject","dispatchEvent","fireEvent","toLowerCase","aa","evtName","_keypressTimeout","target","category","ca","debounceDuration","tagName","isContentEditable","timeout","_breadcrumbEventHandler","clearTimeout","da","from","to","parsedLoc","parsedTo","parsedFrom","protocol","host","relative","D","_originalFunctionToString","E","wrapTimeFn","orig","fn","Array","originalCallback","wrapEventTarget","proto","hasOwnProperty","capture","secure","handleEvent","err","before","clickHandler","keypressHandler","_keypressEventHandler","wrappedBuiltIns","requestAnimationFrame","cb","eventTargets","F","wrapProp","prop","xhrproto","XMLHttpRequest","origOpen","indexOf","__raven_xhr","status_code","origSend","onreadystatechangeHandler","readyState","status","props","j","onreadystatechange","origFetch","fetchInput","Request","fetchData","then","response","attachEvent","chrome","isChromePackagedApp","app","runtime","hasPushAndReplaceState","history","pushState","replaceState","oldOnPopState","onpopstate","currentHref","_captureUrlChange","historyReplacementFunction","origHistFunction","log","consoleMethodCallback","S","builtin","T","G","installer","concat","H","str","m","allowSecretKey","K","port","B","W","stackInfo","_triggerEvent","_processException","lineno","Y","frame","_normalizeFrame","in_app","ha","stackInfoUrl","normalized","filename","line","colno","column","function","ga","prefixedMessage","transaction","ia","request","Referer","breadcrumbs","_trimBreadcrumbs","ja","urlProp","urlProps","ka","httpData","userAgent","User-Agent","referrer","z","_backoffDuration","_backoffStart","na","oa","current","last","pa","_shouldBackoff","retry","get","getResponseHeader","parseInt","Z","baseData","project","platform","_getHttpData","serverName","server_name","_sanitizeData","forEach","random","_sendProcessedPayload","qa","sa","ra","_trimPacket","allowDuplicates","_isRepeatData","event_id","_getUuid","auth","sentry_version","sentry_client","sentry_key","sentry_secret","_makeRequest","onSuccess","onError","_setBackoffState","ta","opts","evaluatedHeaders","evaluatedFetchParameters","_evaluateHash","fetchParameters","defaultFetchOptions","fetchOptions","fetch","ok","hasCORS","XDomainRequest","replace","onload","onerror","open","setRequestHeader","send","ua","hash","evaluated","A","$","setUser","setReleaseContext","10","11","9","RavenConstructor","_Raven","noConflict","Client","what","supportsErrorEvent","ErrorEvent","supportsDOMError","DOMError","supportsDOMException","DOMException","Headers","Response","supportsPromiseRejectionEvent","PromiseRejectionEvent","normalizedData","obj1","obj2","isFrozen","object","patterns","pattern","sources","len","source","RegExp","join","pairs","match","query","fragment","crypto","msCrypto","getRandomValues","arr","Uint16Array","pad","num","v","c","elem","nextStr","MAX_TRAVERSE_HEIGHT","MAX_OUTPUT_LEN","out","height","separator","sepLength","htmlElementAsString","parentNode","className","classes","attr","attrWhitelist","getAttribute","isOnlyOneTruthy","b","isBothUndefined","ex2","stack1","stack2","frames1","frames2","replacement","track","input","delimiter","output","String","utf8Length","encodeURI","jsonSize","serializeValue","maxLength","serializeObject","depth","reduce","acc","map","val","maxSize","MAX_SERIALIZE_EXCEPTION_DEPTH","MAX_SERIALIZE_EXCEPTION_SIZE","serialized","filter","MAX_SERIALIZE_KEYS_LENGTH","usedKeys","sanitizeWorker","workerInput","k","sanitizeRegExp","sanitizeMask","safeInput","o_O","getLocationHref","getLocationOrigin","origin","hostname","_slice","UNKNOWN_FUNCTION","ERROR_TYPES_RE","handler","installGlobalHandler","handlers","unsubscribe","splice","unsubscribeAll","uninstallGlobalHandler","notifyHandlers","isWindowError","inner","traceKitWindowOnError","lineNo","colNo","lastExceptionStack","augmentStackTraceWithInitialElement","processLastException","groups","_oldOnerrorHandler","_onErrorHandlerInstalled","_lastExceptionStack","_lastArgs","lastArgs","rethrow","incomplete","computeStackTraceFromStackProp","submatch","parts","element","winjs","gecko","geckoEval","chromeEval","lines","isNative","isEval","columnNumber","responseText","sourceMaps","sourceMapAddress","charAt","initial","unshift","partial","computeStackTraceByWalkingCallerChain","item","functionName","funcs","recursion","curr","caller","substring","sourceURL","fileName","lineNumber","description","haystack","needle","replacer","spaces","cycleReplacer","serializer","stringifyError","thisPos","Infinity","getSerialize","safeAdd","x","y","lsw","msw","bitRotateLeft","cnt","md5cmn","q","md5ff","d","md5gg","md5hh","md5ii","binlMD5","olda","oldb","oldc","oldd","binl2rstr","length32","fromCharCode","rstr2binl","length8","charCodeAt","rstrMD5","rstrHMACMD5","bkey","ipad","opad","rstr2hex","hexTab","str2rstrUTF8","unescape","rawMD5","hexMD5","rawHMACMD5","hexHMACMD5","string","raw"],"mappings":"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","file":"raven.min.js"}
\ No newline at end of file
diff --git a/packages/raven-js/dist/angular,console/raven.js b/packages/raven-js/dist/angular,console/raven.js
new file mode 100644
index 000000000000..5a61fc5e767f
--- /dev/null
+++ b/packages/raven-js/dist/angular,console/raven.js
@@ -0,0 +1,4122 @@
+/*! Raven.js 3.25.2 (30b6d4e) | github.com/getsentry/raven-js */
+
+/*
+ * Includes TraceKit
+ * https://github.com/getsentry/TraceKit
+ *
+ * Copyright 2018 Matt Robenolt and other contributors
+ * Released under the BSD license
+ * https://github.com/getsentry/raven-js/blob/master/LICENSE
+ *
+ */
+
+(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Raven = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o captureException(string) => captureMessage(string)
+ if (initialCall && initialCall.func === 'Raven.captureException') {
+ initialCall = stack.stack[2];
+ }
+
+ var fileurl = (initialCall && initialCall.url) || '';
+
+ if (
+ !!this._globalOptions.ignoreUrls.test &&
+ this._globalOptions.ignoreUrls.test(fileurl)
+ ) {
+ return;
+ }
+
+ if (
+ !!this._globalOptions.whitelistUrls.test &&
+ !this._globalOptions.whitelistUrls.test(fileurl)
+ ) {
+ return;
+ }
+
+ if (this._globalOptions.stacktrace || (options && options.stacktrace)) {
+ // fingerprint on msg, not stack trace (legacy behavior, could be revisited)
+ data.fingerprint = data.fingerprint == null ? msg : data.fingerprint;
+
+ options = objectMerge(
+ {
+ trimHeadFrames: 0
+ },
+ options
+ );
+ // Since we know this is a synthetic trace, the top frame (this function call)
+ // MUST be from Raven.js, so mark it for trimming
+ // We add to the trim counter so that callers can choose to trim extra frames, such
+ // as utility functions.
+ options.trimHeadFrames += 1;
+
+ var frames = this._prepareFrames(stack, options);
+ data.stacktrace = {
+ // Sentry expects frames oldest to newest
+ frames: frames.reverse()
+ };
+ }
+
+ // Make sure that fingerprint is always wrapped in an array
+ if (data.fingerprint) {
+ data.fingerprint = isArray(data.fingerprint)
+ ? data.fingerprint
+ : [data.fingerprint];
+ }
+
+ // Fire away!
+ this._send(data);
+
+ return this;
+ },
+
+ captureBreadcrumb: function(obj) {
+ var crumb = objectMerge(
+ {
+ timestamp: now() / 1000
+ },
+ obj
+ );
+
+ if (isFunction(this._globalOptions.breadcrumbCallback)) {
+ var result = this._globalOptions.breadcrumbCallback(crumb);
+
+ if (isObject(result) && !isEmptyObject(result)) {
+ crumb = result;
+ } else if (result === false) {
+ return this;
+ }
+ }
+
+ this._breadcrumbs.push(crumb);
+ if (this._breadcrumbs.length > this._globalOptions.maxBreadcrumbs) {
+ this._breadcrumbs.shift();
+ }
+ return this;
+ },
+
+ addPlugin: function(plugin /*arg1, arg2, ... argN*/) {
+ var pluginArgs = [].slice.call(arguments, 1);
+
+ this._plugins.push([plugin, pluginArgs]);
+ if (this._isRavenInstalled) {
+ this._drainPlugins();
+ }
+
+ return this;
+ },
+
+ /*
+ * Set/clear a user to be sent along with the payload.
+ *
+ * @param {object} user An object representing user data [optional]
+ * @return {Raven}
+ */
+ setUserContext: function(user) {
+ // Intentionally do not merge here since that's an unexpected behavior.
+ this._globalContext.user = user;
+
+ return this;
+ },
+
+ /*
+ * Merge extra attributes to be sent along with the payload.
+ *
+ * @param {object} extra An object representing extra data [optional]
+ * @return {Raven}
+ */
+ setExtraContext: function(extra) {
+ this._mergeContext('extra', extra);
+
+ return this;
+ },
+
+ /*
+ * Merge tags to be sent along with the payload.
+ *
+ * @param {object} tags An object representing tags [optional]
+ * @return {Raven}
+ */
+ setTagsContext: function(tags) {
+ this._mergeContext('tags', tags);
+
+ return this;
+ },
+
+ /*
+ * Clear all of the context.
+ *
+ * @return {Raven}
+ */
+ clearContext: function() {
+ this._globalContext = {};
+
+ return this;
+ },
+
+ /*
+ * Get a copy of the current context. This cannot be mutated.
+ *
+ * @return {object} copy of context
+ */
+ getContext: function() {
+ // lol javascript
+ return JSON.parse(stringify(this._globalContext));
+ },
+
+ /*
+ * Set environment of application
+ *
+ * @param {string} environment Typically something like 'production'.
+ * @return {Raven}
+ */
+ setEnvironment: function(environment) {
+ this._globalOptions.environment = environment;
+
+ return this;
+ },
+
+ /*
+ * Set release version of application
+ *
+ * @param {string} release Typically something like a git SHA to identify version
+ * @return {Raven}
+ */
+ setRelease: function(release) {
+ this._globalOptions.release = release;
+
+ return this;
+ },
+
+ /*
+ * Set the dataCallback option
+ *
+ * @param {function} callback The callback to run which allows the
+ * data blob to be mutated before sending
+ * @return {Raven}
+ */
+ setDataCallback: function(callback) {
+ var original = this._globalOptions.dataCallback;
+ this._globalOptions.dataCallback = keepOriginalCallback(original, callback);
+ return this;
+ },
+
+ /*
+ * Set the breadcrumbCallback option
+ *
+ * @param {function} callback The callback to run which allows filtering
+ * or mutating breadcrumbs
+ * @return {Raven}
+ */
+ setBreadcrumbCallback: function(callback) {
+ var original = this._globalOptions.breadcrumbCallback;
+ this._globalOptions.breadcrumbCallback = keepOriginalCallback(original, callback);
+ return this;
+ },
+
+ /*
+ * Set the shouldSendCallback option
+ *
+ * @param {function} callback The callback to run which allows
+ * introspecting the blob before sending
+ * @return {Raven}
+ */
+ setShouldSendCallback: function(callback) {
+ var original = this._globalOptions.shouldSendCallback;
+ this._globalOptions.shouldSendCallback = keepOriginalCallback(original, callback);
+ return this;
+ },
+
+ /**
+ * Override the default HTTP transport mechanism that transmits data
+ * to the Sentry server.
+ *
+ * @param {function} transport Function invoked instead of the default
+ * `makeRequest` handler.
+ *
+ * @return {Raven}
+ */
+ setTransport: function(transport) {
+ this._globalOptions.transport = transport;
+
+ return this;
+ },
+
+ /*
+ * Get the latest raw exception that was captured by Raven.
+ *
+ * @return {error}
+ */
+ lastException: function() {
+ return this._lastCapturedException;
+ },
+
+ /*
+ * Get the last event id
+ *
+ * @return {string}
+ */
+ lastEventId: function() {
+ return this._lastEventId;
+ },
+
+ /*
+ * Determine if Raven is setup and ready to go.
+ *
+ * @return {boolean}
+ */
+ isSetup: function() {
+ if (!this._hasJSON) return false; // needs JSON support
+ if (!this._globalServer) {
+ if (!this.ravenNotConfiguredError) {
+ this.ravenNotConfiguredError = true;
+ this._logDebug('error', 'Error: Raven has not been configured.');
+ }
+ return false;
+ }
+ return true;
+ },
+
+ afterLoad: function() {
+ // TODO: remove window dependence?
+
+ // Attempt to initialize Raven on load
+ var RavenConfig = _window.RavenConfig;
+ if (RavenConfig) {
+ this.config(RavenConfig.dsn, RavenConfig.config).install();
+ }
+ },
+
+ showReportDialog: function(options) {
+ if (
+ !_document // doesn't work without a document (React native)
+ )
+ return;
+
+ options = options || {};
+
+ var lastEventId = options.eventId || this.lastEventId();
+ if (!lastEventId) {
+ throw new RavenConfigError('Missing eventId');
+ }
+
+ var dsn = options.dsn || this._dsn;
+ if (!dsn) {
+ throw new RavenConfigError('Missing DSN');
+ }
+
+ var encode = encodeURIComponent;
+ var qs = '';
+ qs += '?eventId=' + encode(lastEventId);
+ qs += '&dsn=' + encode(dsn);
+
+ var user = options.user || this._globalContext.user;
+ if (user) {
+ if (user.name) qs += '&name=' + encode(user.name);
+ if (user.email) qs += '&email=' + encode(user.email);
+ }
+
+ var globalServer = this._getGlobalServer(this._parseDSN(dsn));
+
+ var script = _document.createElement('script');
+ script.async = true;
+ script.src = globalServer + '/api/embed/error-page/' + qs;
+ (_document.head || _document.body).appendChild(script);
+ },
+
+ /**** Private functions ****/
+ _ignoreNextOnError: function() {
+ var self = this;
+ this._ignoreOnError += 1;
+ setTimeout(function() {
+ // onerror should trigger before setTimeout
+ self._ignoreOnError -= 1;
+ });
+ },
+
+ _triggerEvent: function(eventType, options) {
+ // NOTE: `event` is a native browser thing, so let's avoid conflicting wiht it
+ var evt, key;
+
+ if (!this._hasDocument) return;
+
+ options = options || {};
+
+ eventType = 'raven' + eventType.substr(0, 1).toUpperCase() + eventType.substr(1);
+
+ if (_document.createEvent) {
+ evt = _document.createEvent('HTMLEvents');
+ evt.initEvent(eventType, true, true);
+ } else {
+ evt = _document.createEventObject();
+ evt.eventType = eventType;
+ }
+
+ for (key in options)
+ if (hasKey(options, key)) {
+ evt[key] = options[key];
+ }
+
+ if (_document.createEvent) {
+ // IE9 if standards
+ _document.dispatchEvent(evt);
+ } else {
+ // IE8 regardless of Quirks or Standards
+ // IE9 if quirks
+ try {
+ _document.fireEvent('on' + evt.eventType.toLowerCase(), evt);
+ } catch (e) {
+ // Do nothing
+ }
+ }
+ },
+
+ /**
+ * Wraps addEventListener to capture UI breadcrumbs
+ * @param evtName the event name (e.g. "click")
+ * @returns {Function}
+ * @private
+ */
+ _breadcrumbEventHandler: function(evtName) {
+ var self = this;
+ return function(evt) {
+ // reset keypress timeout; e.g. triggering a 'click' after
+ // a 'keypress' will reset the keypress debounce so that a new
+ // set of keypresses can be recorded
+ self._keypressTimeout = null;
+
+ // It's possible this handler might trigger multiple times for the same
+ // event (e.g. event propagation through node ancestors). Ignore if we've
+ // already captured the event.
+ if (self._lastCapturedEvent === evt) return;
+
+ self._lastCapturedEvent = evt;
+
+ // try/catch both:
+ // - accessing evt.target (see getsentry/raven-js#838, #768)
+ // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly
+ // can throw an exception in some circumstances.
+ var target;
+ try {
+ target = htmlTreeAsString(evt.target);
+ } catch (e) {
+ target = '';
+ }
+
+ self.captureBreadcrumb({
+ category: 'ui.' + evtName, // e.g. ui.click, ui.input
+ message: target
+ });
+ };
+ },
+
+ /**
+ * Wraps addEventListener to capture keypress UI events
+ * @returns {Function}
+ * @private
+ */
+ _keypressEventHandler: function() {
+ var self = this,
+ debounceDuration = 1000; // milliseconds
+
+ // TODO: if somehow user switches keypress target before
+ // debounce timeout is triggered, we will only capture
+ // a single breadcrumb from the FIRST target (acceptable?)
+ return function(evt) {
+ var target;
+ try {
+ target = evt.target;
+ } catch (e) {
+ // just accessing event properties can throw an exception in some rare circumstances
+ // see: https://github.com/getsentry/raven-js/issues/838
+ return;
+ }
+ var tagName = target && target.tagName;
+
+ // only consider keypress events on actual input elements
+ // this will disregard keypresses targeting body (e.g. tabbing
+ // through elements, hotkeys, etc)
+ if (
+ !tagName ||
+ (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && !target.isContentEditable)
+ )
+ return;
+
+ // record first keypress in a series, but ignore subsequent
+ // keypresses until debounce clears
+ var timeout = self._keypressTimeout;
+ if (!timeout) {
+ self._breadcrumbEventHandler('input')(evt);
+ }
+ clearTimeout(timeout);
+ self._keypressTimeout = setTimeout(function() {
+ self._keypressTimeout = null;
+ }, debounceDuration);
+ };
+ },
+
+ /**
+ * Captures a breadcrumb of type "navigation", normalizing input URLs
+ * @param to the originating URL
+ * @param from the target URL
+ * @private
+ */
+ _captureUrlChange: function(from, to) {
+ var parsedLoc = parseUrl(this._location.href);
+ var parsedTo = parseUrl(to);
+ var parsedFrom = parseUrl(from);
+
+ // because onpopstate only tells you the "new" (to) value of location.href, and
+ // not the previous (from) value, we need to track the value of the current URL
+ // state ourselves
+ this._lastHref = to;
+
+ // Use only the path component of the URL if the URL matches the current
+ // document (almost all the time when using pushState)
+ if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host)
+ to = parsedTo.relative;
+ if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host)
+ from = parsedFrom.relative;
+
+ this.captureBreadcrumb({
+ category: 'navigation',
+ data: {
+ to: to,
+ from: from
+ }
+ });
+ },
+
+ _patchFunctionToString: function() {
+ var self = this;
+ self._originalFunctionToString = Function.prototype.toString;
+ // eslint-disable-next-line no-extend-native
+ Function.prototype.toString = function() {
+ if (typeof this === 'function' && this.__raven__) {
+ return self._originalFunctionToString.apply(this.__orig__, arguments);
+ }
+ return self._originalFunctionToString.apply(this, arguments);
+ };
+ },
+
+ _unpatchFunctionToString: function() {
+ if (this._originalFunctionToString) {
+ // eslint-disable-next-line no-extend-native
+ Function.prototype.toString = this._originalFunctionToString;
+ }
+ },
+
+ /**
+ * Wrap timer functions and event targets to catch errors and provide
+ * better metadata.
+ */
+ _instrumentTryCatch: function() {
+ var self = this;
+
+ var wrappedBuiltIns = self._wrappedBuiltIns;
+
+ function wrapTimeFn(orig) {
+ return function(fn, t) {
+ // preserve arity
+ // Make a copy of the arguments to prevent deoptimization
+ // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments
+ var args = new Array(arguments.length);
+ for (var i = 0; i < args.length; ++i) {
+ args[i] = arguments[i];
+ }
+ var originalCallback = args[0];
+ if (isFunction(originalCallback)) {
+ args[0] = self.wrap(originalCallback);
+ }
+
+ // IE < 9 doesn't support .call/.apply on setInterval/setTimeout, but it
+ // also supports only two arguments and doesn't care what this is, so we
+ // can just call the original function directly.
+ if (orig.apply) {
+ return orig.apply(this, args);
+ } else {
+ return orig(args[0], args[1]);
+ }
+ };
+ }
+
+ var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;
+
+ function wrapEventTarget(global) {
+ var proto = _window[global] && _window[global].prototype;
+ if (proto && proto.hasOwnProperty && proto.hasOwnProperty('addEventListener')) {
+ fill(
+ proto,
+ 'addEventListener',
+ function(orig) {
+ return function(evtName, fn, capture, secure) {
+ // preserve arity
+ try {
+ if (fn && fn.handleEvent) {
+ fn.handleEvent = self.wrap(fn.handleEvent);
+ }
+ } catch (err) {
+ // can sometimes get 'Permission denied to access property "handle Event'
+ }
+
+ // More breadcrumb DOM capture ... done here and not in `_instrumentBreadcrumbs`
+ // so that we don't have more than one wrapper function
+ var before, clickHandler, keypressHandler;
+
+ if (
+ autoBreadcrumbs &&
+ autoBreadcrumbs.dom &&
+ (global === 'EventTarget' || global === 'Node')
+ ) {
+ // NOTE: generating multiple handlers per addEventListener invocation, should
+ // revisit and verify we can just use one (almost certainly)
+ clickHandler = self._breadcrumbEventHandler('click');
+ keypressHandler = self._keypressEventHandler();
+ before = function(evt) {
+ // need to intercept every DOM event in `before` argument, in case that
+ // same wrapped method is re-used for different events (e.g. mousemove THEN click)
+ // see #724
+ if (!evt) return;
+
+ var eventType;
+ try {
+ eventType = evt.type;
+ } catch (e) {
+ // just accessing event properties can throw an exception in some rare circumstances
+ // see: https://github.com/getsentry/raven-js/issues/838
+ return;
+ }
+ if (eventType === 'click') return clickHandler(evt);
+ else if (eventType === 'keypress') return keypressHandler(evt);
+ };
+ }
+ return orig.call(
+ this,
+ evtName,
+ self.wrap(fn, undefined, before),
+ capture,
+ secure
+ );
+ };
+ },
+ wrappedBuiltIns
+ );
+ fill(
+ proto,
+ 'removeEventListener',
+ function(orig) {
+ return function(evt, fn, capture, secure) {
+ try {
+ fn = fn && (fn.__raven_wrapper__ ? fn.__raven_wrapper__ : fn);
+ } catch (e) {
+ // ignore, accessing __raven_wrapper__ will throw in some Selenium environments
+ }
+ return orig.call(this, evt, fn, capture, secure);
+ };
+ },
+ wrappedBuiltIns
+ );
+ }
+ }
+
+ fill(_window, 'setTimeout', wrapTimeFn, wrappedBuiltIns);
+ fill(_window, 'setInterval', wrapTimeFn, wrappedBuiltIns);
+ if (_window.requestAnimationFrame) {
+ fill(
+ _window,
+ 'requestAnimationFrame',
+ function(orig) {
+ return function(cb) {
+ return orig(self.wrap(cb));
+ };
+ },
+ wrappedBuiltIns
+ );
+ }
+
+ // event targets borrowed from bugsnag-js:
+ // https://github.com/bugsnag/bugsnag-js/blob/master/src/bugsnag.js#L666
+ var eventTargets = [
+ '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'
+ ];
+ for (var i = 0; i < eventTargets.length; i++) {
+ wrapEventTarget(eventTargets[i]);
+ }
+ },
+
+ /**
+ * Instrument browser built-ins w/ breadcrumb capturing
+ * - XMLHttpRequests
+ * - DOM interactions (click/typing)
+ * - window.location changes
+ * - console
+ *
+ * Can be disabled or individually configured via the `autoBreadcrumbs` config option
+ */
+ _instrumentBreadcrumbs: function() {
+ var self = this;
+ var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;
+
+ var wrappedBuiltIns = self._wrappedBuiltIns;
+
+ function wrapProp(prop, xhr) {
+ if (prop in xhr && isFunction(xhr[prop])) {
+ fill(xhr, prop, function(orig) {
+ return self.wrap(orig);
+ }); // intentionally don't track filled methods on XHR instances
+ }
+ }
+
+ if (autoBreadcrumbs.xhr && 'XMLHttpRequest' in _window) {
+ var xhrproto = _window.XMLHttpRequest && _window.XMLHttpRequest.prototype;
+ fill(
+ xhrproto,
+ 'open',
+ function(origOpen) {
+ return function(method, url) {
+ // preserve arity
+
+ // if Sentry key appears in URL, don't capture
+ if (isString(url) && url.indexOf(self._globalKey) === -1) {
+ this.__raven_xhr = {
+ method: method,
+ url: url,
+ status_code: null
+ };
+ }
+
+ return origOpen.apply(this, arguments);
+ };
+ },
+ wrappedBuiltIns
+ );
+
+ fill(
+ xhrproto,
+ 'send',
+ function(origSend) {
+ return function() {
+ // preserve arity
+ var xhr = this;
+
+ function onreadystatechangeHandler() {
+ if (xhr.__raven_xhr && xhr.readyState === 4) {
+ try {
+ // touching statusCode in some platforms throws
+ // an exception
+ xhr.__raven_xhr.status_code = xhr.status;
+ } catch (e) {
+ /* do nothing */
+ }
+
+ self.captureBreadcrumb({
+ type: 'http',
+ category: 'xhr',
+ data: xhr.__raven_xhr
+ });
+ }
+ }
+
+ var props = ['onload', 'onerror', 'onprogress'];
+ for (var j = 0; j < props.length; j++) {
+ wrapProp(props[j], xhr);
+ }
+
+ if ('onreadystatechange' in xhr && isFunction(xhr.onreadystatechange)) {
+ fill(
+ xhr,
+ 'onreadystatechange',
+ function(orig) {
+ return self.wrap(orig, undefined, onreadystatechangeHandler);
+ } /* intentionally don't track this instrumentation */
+ );
+ } else {
+ // if onreadystatechange wasn't actually set by the page on this xhr, we
+ // are free to set our own and capture the breadcrumb
+ xhr.onreadystatechange = onreadystatechangeHandler;
+ }
+
+ return origSend.apply(this, arguments);
+ };
+ },
+ wrappedBuiltIns
+ );
+ }
+
+ if (autoBreadcrumbs.xhr && supportsFetch()) {
+ fill(
+ _window,
+ 'fetch',
+ function(origFetch) {
+ return function() {
+ // preserve arity
+ // Make a copy of the arguments to prevent deoptimization
+ // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments
+ var args = new Array(arguments.length);
+ for (var i = 0; i < args.length; ++i) {
+ args[i] = arguments[i];
+ }
+
+ var fetchInput = args[0];
+ var method = 'GET';
+ var url;
+
+ if (typeof fetchInput === 'string') {
+ url = fetchInput;
+ } else if ('Request' in _window && fetchInput instanceof _window.Request) {
+ url = fetchInput.url;
+ if (fetchInput.method) {
+ method = fetchInput.method;
+ }
+ } else {
+ url = '' + fetchInput;
+ }
+
+ // if Sentry key appears in URL, don't capture, as it's our own request
+ if (url.indexOf(self._globalKey) !== -1) {
+ return origFetch.apply(this, args);
+ }
+
+ if (args[1] && args[1].method) {
+ method = args[1].method;
+ }
+
+ var fetchData = {
+ method: method,
+ url: url,
+ status_code: null
+ };
+
+ return origFetch
+ .apply(this, args)
+ .then(function(response) {
+ fetchData.status_code = response.status;
+
+ self.captureBreadcrumb({
+ type: 'http',
+ category: 'fetch',
+ data: fetchData
+ });
+
+ return response;
+ })
+ ['catch'](function(err) {
+ // if there is an error performing the request
+ self.captureBreadcrumb({
+ type: 'http',
+ category: 'fetch',
+ data: fetchData,
+ level: 'error'
+ });
+
+ throw err;
+ });
+ };
+ },
+ wrappedBuiltIns
+ );
+ }
+
+ // Capture breadcrumbs from any click that is unhandled / bubbled up all the way
+ // to the document. Do this before we instrument addEventListener.
+ if (autoBreadcrumbs.dom && this._hasDocument) {
+ if (_document.addEventListener) {
+ _document.addEventListener('click', self._breadcrumbEventHandler('click'), false);
+ _document.addEventListener('keypress', self._keypressEventHandler(), false);
+ } else if (_document.attachEvent) {
+ // IE8 Compatibility
+ _document.attachEvent('onclick', self._breadcrumbEventHandler('click'));
+ _document.attachEvent('onkeypress', self._keypressEventHandler());
+ }
+ }
+
+ // record navigation (URL) changes
+ // NOTE: in Chrome App environment, touching history.pushState, *even inside
+ // a try/catch block*, will cause Chrome to output an error to console.error
+ // borrowed from: https://github.com/angular/angular.js/pull/13945/files
+ var chrome = _window.chrome;
+ var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime;
+ var hasPushAndReplaceState =
+ !isChromePackagedApp &&
+ _window.history &&
+ _window.history.pushState &&
+ _window.history.replaceState;
+ if (autoBreadcrumbs.location && hasPushAndReplaceState) {
+ // TODO: remove onpopstate handler on uninstall()
+ var oldOnPopState = _window.onpopstate;
+ _window.onpopstate = function() {
+ var currentHref = self._location.href;
+ self._captureUrlChange(self._lastHref, currentHref);
+
+ if (oldOnPopState) {
+ return oldOnPopState.apply(this, arguments);
+ }
+ };
+
+ var historyReplacementFunction = function(origHistFunction) {
+ // note history.pushState.length is 0; intentionally not declaring
+ // params to preserve 0 arity
+ return function(/* state, title, url */) {
+ var url = arguments.length > 2 ? arguments[2] : undefined;
+
+ // url argument is optional
+ if (url) {
+ // coerce to string (this is what pushState does)
+ self._captureUrlChange(self._lastHref, url + '');
+ }
+
+ return origHistFunction.apply(this, arguments);
+ };
+ };
+
+ fill(_window.history, 'pushState', historyReplacementFunction, wrappedBuiltIns);
+ fill(_window.history, 'replaceState', historyReplacementFunction, wrappedBuiltIns);
+ }
+
+ if (autoBreadcrumbs.console && 'console' in _window && console.log) {
+ // console
+ var consoleMethodCallback = function(msg, data) {
+ self.captureBreadcrumb({
+ message: msg,
+ level: data.level,
+ category: 'console'
+ });
+ };
+
+ each(['debug', 'info', 'warn', 'error', 'log'], function(_, level) {
+ wrapConsoleMethod(console, level, consoleMethodCallback);
+ });
+ }
+ },
+
+ _restoreBuiltIns: function() {
+ // restore any wrapped builtins
+ var builtin;
+ while (this._wrappedBuiltIns.length) {
+ builtin = this._wrappedBuiltIns.shift();
+
+ var obj = builtin[0],
+ name = builtin[1],
+ orig = builtin[2];
+
+ obj[name] = orig;
+ }
+ },
+
+ _restoreConsole: function() {
+ // eslint-disable-next-line guard-for-in
+ for (var method in this._originalConsoleMethods) {
+ this._originalConsole[method] = this._originalConsoleMethods[method];
+ }
+ },
+
+ _drainPlugins: function() {
+ var self = this;
+
+ // FIX ME TODO
+ each(this._plugins, function(_, plugin) {
+ var installer = plugin[0];
+ var args = plugin[1];
+ installer.apply(self, [self].concat(args));
+ });
+ },
+
+ _parseDSN: function(str) {
+ var m = dsnPattern.exec(str),
+ dsn = {},
+ i = 7;
+
+ try {
+ while (i--) dsn[dsnKeys[i]] = m[i] || '';
+ } catch (e) {
+ throw new RavenConfigError('Invalid DSN: ' + str);
+ }
+
+ if (dsn.pass && !this._globalOptions.allowSecretKey) {
+ throw new RavenConfigError(
+ 'Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key'
+ );
+ }
+
+ return dsn;
+ },
+
+ _getGlobalServer: function(uri) {
+ // assemble the endpoint from the uri pieces
+ var globalServer = '//' + uri.host + (uri.port ? ':' + uri.port : '');
+
+ if (uri.protocol) {
+ globalServer = uri.protocol + ':' + globalServer;
+ }
+ return globalServer;
+ },
+
+ _handleOnErrorStackInfo: function() {
+ // if we are intentionally ignoring errors via onerror, bail out
+ if (!this._ignoreOnError) {
+ this._handleStackInfo.apply(this, arguments);
+ }
+ },
+
+ _handleStackInfo: function(stackInfo, options) {
+ var frames = this._prepareFrames(stackInfo, options);
+
+ this._triggerEvent('handle', {
+ stackInfo: stackInfo,
+ options: options
+ });
+
+ this._processException(
+ stackInfo.name,
+ stackInfo.message,
+ stackInfo.url,
+ stackInfo.lineno,
+ frames,
+ options
+ );
+ },
+
+ _prepareFrames: function(stackInfo, options) {
+ var self = this;
+ var frames = [];
+ if (stackInfo.stack && stackInfo.stack.length) {
+ each(stackInfo.stack, function(i, stack) {
+ var frame = self._normalizeFrame(stack, stackInfo.url);
+ if (frame) {
+ frames.push(frame);
+ }
+ });
+
+ // e.g. frames captured via captureMessage throw
+ if (options && options.trimHeadFrames) {
+ for (var j = 0; j < options.trimHeadFrames && j < frames.length; j++) {
+ frames[j].in_app = false;
+ }
+ }
+ }
+ frames = frames.slice(0, this._globalOptions.stackTraceLimit);
+ return frames;
+ },
+
+ _normalizeFrame: function(frame, stackInfoUrl) {
+ // normalize the frames data
+ var normalized = {
+ filename: frame.url,
+ lineno: frame.line,
+ colno: frame.column,
+ function: frame.func || '?'
+ };
+
+ // Case when we don't have any information about the error
+ // E.g. throwing a string or raw object, instead of an `Error` in Firefox
+ // Generating synthetic error doesn't add any value here
+ //
+ // We should probably somehow let a user know that they should fix their code
+ if (!frame.url) {
+ normalized.filename = stackInfoUrl; // fallback to whole stacks url from onerror handler
+ }
+
+ normalized.in_app = !// determine if an exception came from outside of our app
+ // first we check the global includePaths list.
+ (
+ (!!this._globalOptions.includePaths.test &&
+ !this._globalOptions.includePaths.test(normalized.filename)) ||
+ // Now we check for fun, if the function name is Raven or TraceKit
+ /(Raven|TraceKit)\./.test(normalized['function']) ||
+ // finally, we do a last ditch effort and check for raven.min.js
+ /raven\.(min\.)?js$/.test(normalized.filename)
+ );
+
+ return normalized;
+ },
+
+ _processException: function(type, message, fileurl, lineno, frames, options) {
+ var prefixedMessage = (type ? type + ': ' : '') + (message || '');
+ if (
+ !!this._globalOptions.ignoreErrors.test &&
+ (this._globalOptions.ignoreErrors.test(message) ||
+ this._globalOptions.ignoreErrors.test(prefixedMessage))
+ ) {
+ return;
+ }
+
+ var stacktrace;
+
+ if (frames && frames.length) {
+ fileurl = frames[0].filename || fileurl;
+ // Sentry expects frames oldest to newest
+ // and JS sends them as newest to oldest
+ frames.reverse();
+ stacktrace = {frames: frames};
+ } else if (fileurl) {
+ stacktrace = {
+ frames: [
+ {
+ filename: fileurl,
+ lineno: lineno,
+ in_app: true
+ }
+ ]
+ };
+ }
+
+ if (
+ !!this._globalOptions.ignoreUrls.test &&
+ this._globalOptions.ignoreUrls.test(fileurl)
+ ) {
+ return;
+ }
+
+ if (
+ !!this._globalOptions.whitelistUrls.test &&
+ !this._globalOptions.whitelistUrls.test(fileurl)
+ ) {
+ return;
+ }
+
+ var data = objectMerge(
+ {
+ // sentry.interfaces.Exception
+ exception: {
+ values: [
+ {
+ type: type,
+ value: message,
+ stacktrace: stacktrace
+ }
+ ]
+ },
+ transaction: fileurl
+ },
+ options
+ );
+
+ // Fire away!
+ this._send(data);
+ },
+
+ _trimPacket: function(data) {
+ // For now, we only want to truncate the two different messages
+ // but this could/should be expanded to just trim everything
+ var max = this._globalOptions.maxMessageLength;
+ if (data.message) {
+ data.message = truncate(data.message, max);
+ }
+ if (data.exception) {
+ var exception = data.exception.values[0];
+ exception.value = truncate(exception.value, max);
+ }
+
+ var request = data.request;
+ if (request) {
+ if (request.url) {
+ request.url = truncate(request.url, this._globalOptions.maxUrlLength);
+ }
+ if (request.Referer) {
+ request.Referer = truncate(request.Referer, this._globalOptions.maxUrlLength);
+ }
+ }
+
+ if (data.breadcrumbs && data.breadcrumbs.values)
+ this._trimBreadcrumbs(data.breadcrumbs);
+
+ return data;
+ },
+
+ /**
+ * Truncate breadcrumb values (right now just URLs)
+ */
+ _trimBreadcrumbs: function(breadcrumbs) {
+ // known breadcrumb properties with urls
+ // TODO: also consider arbitrary prop values that start with (https?)?://
+ var urlProps = ['to', 'from', 'url'],
+ urlProp,
+ crumb,
+ data;
+
+ for (var i = 0; i < breadcrumbs.values.length; ++i) {
+ crumb = breadcrumbs.values[i];
+ if (
+ !crumb.hasOwnProperty('data') ||
+ !isObject(crumb.data) ||
+ objectFrozen(crumb.data)
+ )
+ continue;
+
+ data = objectMerge({}, crumb.data);
+ for (var j = 0; j < urlProps.length; ++j) {
+ urlProp = urlProps[j];
+ if (data.hasOwnProperty(urlProp) && data[urlProp]) {
+ data[urlProp] = truncate(data[urlProp], this._globalOptions.maxUrlLength);
+ }
+ }
+ breadcrumbs.values[i].data = data;
+ }
+ },
+
+ _getHttpData: function() {
+ if (!this._hasNavigator && !this._hasDocument) return;
+ var httpData = {};
+
+ if (this._hasNavigator && _navigator.userAgent) {
+ httpData.headers = {
+ 'User-Agent': _navigator.userAgent
+ };
+ }
+
+ // Check in `window` instead of `document`, as we may be in ServiceWorker environment
+ if (_window.location && _window.location.href) {
+ httpData.url = _window.location.href;
+ }
+
+ if (this._hasDocument && _document.referrer) {
+ if (!httpData.headers) httpData.headers = {};
+ httpData.headers.Referer = _document.referrer;
+ }
+
+ return httpData;
+ },
+
+ _resetBackoff: function() {
+ this._backoffDuration = 0;
+ this._backoffStart = null;
+ },
+
+ _shouldBackoff: function() {
+ return this._backoffDuration && now() - this._backoffStart < this._backoffDuration;
+ },
+
+ /**
+ * Returns true if the in-process data payload matches the signature
+ * of the previously-sent data
+ *
+ * NOTE: This has to be done at this level because TraceKit can generate
+ * data from window.onerror WITHOUT an exception object (IE8, IE9,
+ * other old browsers). This can take the form of an "exception"
+ * data object with a single frame (derived from the onerror args).
+ */
+ _isRepeatData: function(current) {
+ var last = this._lastData;
+
+ if (
+ !last ||
+ current.message !== last.message || // defined for captureMessage
+ current.transaction !== last.transaction // defined for captureException/onerror
+ )
+ return false;
+
+ // Stacktrace interface (i.e. from captureMessage)
+ if (current.stacktrace || last.stacktrace) {
+ return isSameStacktrace(current.stacktrace, last.stacktrace);
+ } else if (current.exception || last.exception) {
+ // Exception interface (i.e. from captureException/onerror)
+ return isSameException(current.exception, last.exception);
+ }
+
+ return true;
+ },
+
+ _setBackoffState: function(request) {
+ // If we are already in a backoff state, don't change anything
+ if (this._shouldBackoff()) {
+ return;
+ }
+
+ var status = request.status;
+
+ // 400 - project_id doesn't exist or some other fatal
+ // 401 - invalid/revoked dsn
+ // 429 - too many requests
+ if (!(status === 400 || status === 401 || status === 429)) return;
+
+ var retry;
+ try {
+ // If Retry-After is not in Access-Control-Expose-Headers, most
+ // browsers will throw an exception trying to access it
+ if (supportsFetch()) {
+ retry = request.headers.get('Retry-After');
+ } else {
+ retry = request.getResponseHeader('Retry-After');
+ }
+
+ // Retry-After is returned in seconds
+ retry = parseInt(retry, 10) * 1000;
+ } catch (e) {
+ /* eslint no-empty:0 */
+ }
+
+ this._backoffDuration = retry
+ ? // If Sentry server returned a Retry-After value, use it
+ retry
+ : // Otherwise, double the last backoff duration (starts at 1 sec)
+ this._backoffDuration * 2 || 1000;
+
+ this._backoffStart = now();
+ },
+
+ _send: function(data) {
+ var globalOptions = this._globalOptions;
+
+ var baseData = {
+ project: this._globalProject,
+ logger: globalOptions.logger,
+ platform: 'javascript'
+ },
+ httpData = this._getHttpData();
+
+ if (httpData) {
+ baseData.request = httpData;
+ }
+
+ // HACK: delete `trimHeadFrames` to prevent from appearing in outbound payload
+ if (data.trimHeadFrames) delete data.trimHeadFrames;
+
+ data = objectMerge(baseData, data);
+
+ // Merge in the tags and extra separately since objectMerge doesn't handle a deep merge
+ data.tags = objectMerge(objectMerge({}, this._globalContext.tags), data.tags);
+ data.extra = objectMerge(objectMerge({}, this._globalContext.extra), data.extra);
+
+ // Send along our own collected metadata with extra
+ data.extra['session:duration'] = now() - this._startTime;
+
+ if (this._breadcrumbs && this._breadcrumbs.length > 0) {
+ // intentionally make shallow copy so that additions
+ // to breadcrumbs aren't accidentally sent in this request
+ data.breadcrumbs = {
+ values: [].slice.call(this._breadcrumbs, 0)
+ };
+ }
+
+ if (this._globalContext.user) {
+ // sentry.interfaces.User
+ data.user = this._globalContext.user;
+ }
+
+ // Include the environment if it's defined in globalOptions
+ if (globalOptions.environment) data.environment = globalOptions.environment;
+
+ // Include the release if it's defined in globalOptions
+ if (globalOptions.release) data.release = globalOptions.release;
+
+ // Include server_name if it's defined in globalOptions
+ if (globalOptions.serverName) data.server_name = globalOptions.serverName;
+
+ data = this._sanitizeData(data);
+
+ // Cleanup empty properties before sending them to the server
+ Object.keys(data).forEach(function(key) {
+ if (data[key] == null || data[key] === '' || isEmptyObject(data[key])) {
+ delete data[key];
+ }
+ });
+
+ if (isFunction(globalOptions.dataCallback)) {
+ data = globalOptions.dataCallback(data) || data;
+ }
+
+ // Why??????????
+ if (!data || isEmptyObject(data)) {
+ return;
+ }
+
+ // Check if the request should be filtered or not
+ if (
+ isFunction(globalOptions.shouldSendCallback) &&
+ !globalOptions.shouldSendCallback(data)
+ ) {
+ return;
+ }
+
+ // Backoff state: Sentry server previously responded w/ an error (e.g. 429 - too many requests),
+ // so drop requests until "cool-off" period has elapsed.
+ if (this._shouldBackoff()) {
+ this._logDebug('warn', 'Raven dropped error due to backoff: ', data);
+ return;
+ }
+
+ if (typeof globalOptions.sampleRate === 'number') {
+ if (Math.random() < globalOptions.sampleRate) {
+ this._sendProcessedPayload(data);
+ }
+ } else {
+ this._sendProcessedPayload(data);
+ }
+ },
+
+ _sanitizeData: function(data) {
+ return sanitize(data, this._globalOptions.sanitizeKeys);
+ },
+
+ _getUuid: function() {
+ return uuid4();
+ },
+
+ _sendProcessedPayload: function(data, callback) {
+ var self = this;
+ var globalOptions = this._globalOptions;
+
+ if (!this.isSetup()) return;
+
+ // Try and clean up the packet before sending by truncating long values
+ data = this._trimPacket(data);
+
+ // ideally duplicate error testing should occur *before* dataCallback/shouldSendCallback,
+ // but this would require copying an un-truncated copy of the data packet, which can be
+ // arbitrarily deep (extra_data) -- could be worthwhile? will revisit
+ if (!this._globalOptions.allowDuplicates && this._isRepeatData(data)) {
+ this._logDebug('warn', 'Raven dropped repeat event: ', data);
+ return;
+ }
+
+ // Send along an event_id if not explicitly passed.
+ // This event_id can be used to reference the error within Sentry itself.
+ // Set lastEventId after we know the error should actually be sent
+ this._lastEventId = data.event_id || (data.event_id = this._getUuid());
+
+ // Store outbound payload after trim
+ this._lastData = data;
+
+ this._logDebug('debug', 'Raven about to send:', data);
+
+ var auth = {
+ sentry_version: '7',
+ sentry_client: 'raven-js/' + this.VERSION,
+ sentry_key: this._globalKey
+ };
+
+ if (this._globalSecret) {
+ auth.sentry_secret = this._globalSecret;
+ }
+
+ var exception = data.exception && data.exception.values[0];
+
+ // only capture 'sentry' breadcrumb is autoBreadcrumbs is truthy
+ if (
+ this._globalOptions.autoBreadcrumbs &&
+ this._globalOptions.autoBreadcrumbs.sentry
+ ) {
+ this.captureBreadcrumb({
+ category: 'sentry',
+ message: exception
+ ? (exception.type ? exception.type + ': ' : '') + exception.value
+ : data.message,
+ event_id: data.event_id,
+ level: data.level || 'error' // presume error unless specified
+ });
+ }
+
+ var url = this._globalEndpoint;
+ (globalOptions.transport || this._makeRequest).call(this, {
+ url: url,
+ auth: auth,
+ data: data,
+ options: globalOptions,
+ onSuccess: function success() {
+ self._resetBackoff();
+
+ self._triggerEvent('success', {
+ data: data,
+ src: url
+ });
+ callback && callback();
+ },
+ onError: function failure(error) {
+ self._logDebug('error', 'Raven transport failed to send: ', error);
+
+ if (error.request) {
+ self._setBackoffState(error.request);
+ }
+
+ self._triggerEvent('failure', {
+ data: data,
+ src: url
+ });
+ error = error || new Error('Raven send failed (no additional details provided)');
+ callback && callback(error);
+ }
+ });
+ },
+
+ _makeRequest: function(opts) {
+ // Auth is intentionally sent as part of query string (NOT as custom HTTP header) to avoid preflight CORS requests
+ var url = opts.url + '?' + urlencode(opts.auth);
+
+ var evaluatedHeaders = null;
+ var evaluatedFetchParameters = {};
+
+ if (opts.options.headers) {
+ evaluatedHeaders = this._evaluateHash(opts.options.headers);
+ }
+
+ if (opts.options.fetchParameters) {
+ evaluatedFetchParameters = this._evaluateHash(opts.options.fetchParameters);
+ }
+
+ if (supportsFetch()) {
+ evaluatedFetchParameters.body = stringify(opts.data);
+
+ var defaultFetchOptions = objectMerge({}, this._fetchDefaults);
+ var fetchOptions = objectMerge(defaultFetchOptions, evaluatedFetchParameters);
+
+ if (evaluatedHeaders) {
+ fetchOptions.headers = evaluatedHeaders;
+ }
+
+ return _window
+ .fetch(url, fetchOptions)
+ .then(function(response) {
+ if (response.ok) {
+ opts.onSuccess && opts.onSuccess();
+ } else {
+ var error = new Error('Sentry error code: ' + response.status);
+ // It's called request only to keep compatibility with XHR interface
+ // and not add more redundant checks in setBackoffState method
+ error.request = response;
+ opts.onError && opts.onError(error);
+ }
+ })
+ ['catch'](function() {
+ opts.onError &&
+ opts.onError(new Error('Sentry error code: network unavailable'));
+ });
+ }
+
+ var request = _window.XMLHttpRequest && new _window.XMLHttpRequest();
+ if (!request) return;
+
+ // if browser doesn't support CORS (e.g. IE7), we are out of luck
+ var hasCORS = 'withCredentials' in request || typeof XDomainRequest !== 'undefined';
+
+ if (!hasCORS) return;
+
+ if ('withCredentials' in request) {
+ request.onreadystatechange = function() {
+ if (request.readyState !== 4) {
+ return;
+ } else if (request.status === 200) {
+ opts.onSuccess && opts.onSuccess();
+ } else if (opts.onError) {
+ var err = new Error('Sentry error code: ' + request.status);
+ err.request = request;
+ opts.onError(err);
+ }
+ };
+ } else {
+ request = new XDomainRequest();
+ // xdomainrequest cannot go http -> https (or vice versa),
+ // so always use protocol relative
+ url = url.replace(/^https?:/, '');
+
+ // onreadystatechange not supported by XDomainRequest
+ if (opts.onSuccess) {
+ request.onload = opts.onSuccess;
+ }
+ if (opts.onError) {
+ request.onerror = function() {
+ var err = new Error('Sentry error code: XDomainRequest');
+ err.request = request;
+ opts.onError(err);
+ };
+ }
+ }
+
+ request.open('POST', url);
+
+ if (evaluatedHeaders) {
+ each(evaluatedHeaders, function(key, value) {
+ request.setRequestHeader(key, value);
+ });
+ }
+
+ request.send(stringify(opts.data));
+ },
+
+ _evaluateHash: function(hash) {
+ var evaluated = {};
+
+ for (var key in hash) {
+ if (hash.hasOwnProperty(key)) {
+ var value = hash[key];
+ evaluated[key] = typeof value === 'function' ? value() : value;
+ }
+ }
+
+ return evaluated;
+ },
+
+ _logDebug: function(level) {
+ // We allow `Raven.debug` and `Raven.config(DSN, { debug: true })` to not make backward incompatible API change
+ if (
+ this._originalConsoleMethods[level] &&
+ (this.debug || this._globalOptions.debug)
+ ) {
+ // In IE<10 console methods do not have their own 'apply' method
+ Function.prototype.apply.call(
+ this._originalConsoleMethods[level],
+ this._originalConsole,
+ [].slice.call(arguments, 1)
+ );
+ }
+ },
+
+ _mergeContext: function(key, context) {
+ if (isUndefined(context)) {
+ delete this._globalContext[key];
+ } else {
+ this._globalContext[key] = objectMerge(this._globalContext[key] || {}, context);
+ }
+ }
+};
+
+// Deprecations
+Raven.prototype.setUser = Raven.prototype.setUserContext;
+Raven.prototype.setReleaseContext = Raven.prototype.setRelease;
+
+module.exports = Raven;
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"10":10,"3":3,"4":4,"7":7,"8":8,"9":9}],6:[function(_dereq_,module,exports){
+(function (global){
+/**
+ * Enforces a single instance of the Raven client, and the
+ * main entry point for Raven. If you are a consumer of the
+ * Raven library, you SHOULD load this file (vs raven.js).
+ **/
+
+var RavenConstructor = _dereq_(5);
+
+// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)
+var _window =
+ typeof window !== 'undefined'
+ ? window
+ : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
+var _Raven = _window.Raven;
+
+var Raven = new RavenConstructor();
+
+/*
+ * Allow multiple versions of Raven to be installed.
+ * Strip Raven from the global context and returns the instance.
+ *
+ * @return {Raven}
+ */
+Raven.noConflict = function() {
+ _window.Raven = _Raven;
+ return Raven;
+};
+
+Raven.afterLoad();
+
+module.exports = Raven;
+
+/**
+ * DISCLAIMER:
+ *
+ * Expose `Client` constructor for cases where user want to track multiple "sub-applications" in one larger app.
+ * It's not meant to be used by a wide audience, so pleaaase make sure that you know what you're doing before using it.
+ * Accidentally calling `install` multiple times, may result in an unexpected behavior that's very hard to debug.
+ *
+ * It's called `Client' to be in-line with Raven Node implementation.
+ *
+ * HOWTO:
+ *
+ * import Raven from 'raven-js';
+ *
+ * const someAppReporter = new Raven.Client();
+ * const someOtherAppReporter = new Raven.Client();
+ *
+ * someAppReporter.config('__DSN__', {
+ * ...config goes here
+ * });
+ *
+ * someOtherAppReporter.config('__OTHER_DSN__', {
+ * ...config goes here
+ * });
+ *
+ * someAppReporter.captureMessage(...);
+ * someAppReporter.captureException(...);
+ * someAppReporter.captureBreadcrumb(...);
+ *
+ * someOtherAppReporter.captureMessage(...);
+ * someOtherAppReporter.captureException(...);
+ * someOtherAppReporter.captureBreadcrumb(...);
+ *
+ * It should "just work".
+ */
+module.exports.Client = RavenConstructor;
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"5":5}],7:[function(_dereq_,module,exports){
+(function (global){
+var stringify = _dereq_(9);
+
+var _window =
+ typeof window !== 'undefined'
+ ? window
+ : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
+
+function isObject(what) {
+ return typeof what === 'object' && what !== null;
+}
+
+// Yanked from https://git.io/vS8DV re-used under CC0
+// with some tiny modifications
+function isError(value) {
+ switch (Object.prototype.toString.call(value)) {
+ case '[object Error]':
+ return true;
+ case '[object Exception]':
+ return true;
+ case '[object DOMException]':
+ return true;
+ default:
+ return value instanceof Error;
+ }
+}
+
+function isErrorEvent(value) {
+ return Object.prototype.toString.call(value) === '[object ErrorEvent]';
+}
+
+function isDOMError(value) {
+ return Object.prototype.toString.call(value) === '[object DOMError]';
+}
+
+function isDOMException(value) {
+ return Object.prototype.toString.call(value) === '[object DOMException]';
+}
+
+function isUndefined(what) {
+ return what === void 0;
+}
+
+function isFunction(what) {
+ return typeof what === 'function';
+}
+
+function isPlainObject(what) {
+ return Object.prototype.toString.call(what) === '[object Object]';
+}
+
+function isString(what) {
+ return Object.prototype.toString.call(what) === '[object String]';
+}
+
+function isArray(what) {
+ return Object.prototype.toString.call(what) === '[object Array]';
+}
+
+function isEmptyObject(what) {
+ if (!isPlainObject(what)) return false;
+
+ for (var _ in what) {
+ if (what.hasOwnProperty(_)) {
+ return false;
+ }
+ }
+ return true;
+}
+
+function supportsErrorEvent() {
+ try {
+ new ErrorEvent(''); // eslint-disable-line no-new
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+function supportsDOMError() {
+ try {
+ new DOMError(''); // eslint-disable-line no-new
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+function supportsDOMException() {
+ try {
+ new DOMException(''); // eslint-disable-line no-new
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+function supportsFetch() {
+ if (!('fetch' in _window)) return false;
+
+ try {
+ new Headers(); // eslint-disable-line no-new
+ new Request(''); // eslint-disable-line no-new
+ new Response(); // eslint-disable-line no-new
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+// Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default
+// https://caniuse.com/#feat=referrer-policy
+// It doesn't. And it throw exception instead of ignoring this parameter...
+// REF: https://github.com/getsentry/raven-js/issues/1233
+function supportsReferrerPolicy() {
+ if (!supportsFetch()) return false;
+
+ try {
+ // eslint-disable-next-line no-new
+ new Request('pickleRick', {
+ referrerPolicy: 'origin'
+ });
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+function supportsPromiseRejectionEvent() {
+ return typeof PromiseRejectionEvent === 'function';
+}
+
+function wrappedCallback(callback) {
+ function dataCallback(data, original) {
+ var normalizedData = callback(data) || data;
+ if (original) {
+ return original(normalizedData) || normalizedData;
+ }
+ return normalizedData;
+ }
+
+ return dataCallback;
+}
+
+function each(obj, callback) {
+ var i, j;
+
+ if (isUndefined(obj.length)) {
+ for (i in obj) {
+ if (hasKey(obj, i)) {
+ callback.call(null, i, obj[i]);
+ }
+ }
+ } else {
+ j = obj.length;
+ if (j) {
+ for (i = 0; i < j; i++) {
+ callback.call(null, i, obj[i]);
+ }
+ }
+ }
+}
+
+function objectMerge(obj1, obj2) {
+ if (!obj2) {
+ return obj1;
+ }
+ each(obj2, function(key, value) {
+ obj1[key] = value;
+ });
+ return obj1;
+}
+
+/**
+ * This function is only used for react-native.
+ * react-native freezes object that have already been sent over the
+ * js bridge. We need this function in order to check if the object is frozen.
+ * So it's ok that objectFrozen returns false if Object.isFrozen is not
+ * supported because it's not relevant for other "platforms". See related issue:
+ * https://github.com/getsentry/react-native-sentry/issues/57
+ */
+function objectFrozen(obj) {
+ if (!Object.isFrozen) {
+ return false;
+ }
+ return Object.isFrozen(obj);
+}
+
+function truncate(str, max) {
+ if (typeof max !== 'number') {
+ throw new Error('2nd argument to `truncate` function should be a number');
+ }
+ if (typeof str !== 'string' || max === 0) {
+ return str;
+ }
+ return str.length <= max ? str : str.substr(0, max) + '\u2026';
+}
+
+/**
+ * hasKey, a better form of hasOwnProperty
+ * Example: hasKey(MainHostObject, property) === true/false
+ *
+ * @param {Object} host object to check property
+ * @param {string} key to check
+ */
+function hasKey(object, key) {
+ return Object.prototype.hasOwnProperty.call(object, key);
+}
+
+function joinRegExp(patterns) {
+ // Combine an array of regular expressions and strings into one large regexp
+ // Be mad.
+ var sources = [],
+ i = 0,
+ len = patterns.length,
+ pattern;
+
+ for (; i < len; i++) {
+ pattern = patterns[i];
+ if (isString(pattern)) {
+ // If it's a string, we need to escape it
+ // Taken from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
+ sources.push(pattern.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, '\\$1'));
+ } else if (pattern && pattern.source) {
+ // If it's a regexp already, we want to extract the source
+ sources.push(pattern.source);
+ }
+ // Intentionally skip other cases
+ }
+ return new RegExp(sources.join('|'), 'i');
+}
+
+function urlencode(o) {
+ var pairs = [];
+ each(o, function(key, value) {
+ pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));
+ });
+ return pairs.join('&');
+}
+
+// borrowed from https://tools.ietf.org/html/rfc3986#appendix-B
+// intentionally using regex and not href parsing trick because React Native and other
+// environments where DOM might not be available
+function parseUrl(url) {
+ if (typeof url !== 'string') return {};
+ var match = url.match(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/);
+
+ // coerce to undefined values to empty string so we don't get 'undefined'
+ var query = match[6] || '';
+ var fragment = match[8] || '';
+ return {
+ protocol: match[2],
+ host: match[4],
+ path: match[5],
+ relative: match[5] + query + fragment // everything minus origin
+ };
+}
+function uuid4() {
+ var crypto = _window.crypto || _window.msCrypto;
+
+ if (!isUndefined(crypto) && crypto.getRandomValues) {
+ // Use window.crypto API if available
+ // eslint-disable-next-line no-undef
+ var arr = new Uint16Array(8);
+ crypto.getRandomValues(arr);
+
+ // set 4 in byte 7
+ arr[3] = (arr[3] & 0xfff) | 0x4000;
+ // set 2 most significant bits of byte 9 to '10'
+ arr[4] = (arr[4] & 0x3fff) | 0x8000;
+
+ var pad = function(num) {
+ var v = num.toString(16);
+ while (v.length < 4) {
+ v = '0' + v;
+ }
+ return v;
+ };
+
+ return (
+ pad(arr[0]) +
+ pad(arr[1]) +
+ pad(arr[2]) +
+ pad(arr[3]) +
+ pad(arr[4]) +
+ pad(arr[5]) +
+ pad(arr[6]) +
+ pad(arr[7])
+ );
+ } else {
+ // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523
+ return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
+ var r = (Math.random() * 16) | 0,
+ v = c === 'x' ? r : (r & 0x3) | 0x8;
+ return v.toString(16);
+ });
+ }
+}
+
+/**
+ * Given a child DOM element, returns a query-selector statement describing that
+ * and its ancestors
+ * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]
+ * @param elem
+ * @returns {string}
+ */
+function htmlTreeAsString(elem) {
+ /* eslint no-extra-parens:0*/
+ var MAX_TRAVERSE_HEIGHT = 5,
+ MAX_OUTPUT_LEN = 80,
+ out = [],
+ height = 0,
+ len = 0,
+ separator = ' > ',
+ sepLength = separator.length,
+ nextStr;
+
+ while (elem && height++ < MAX_TRAVERSE_HEIGHT) {
+ nextStr = htmlElementAsString(elem);
+ // bail out if
+ // - nextStr is the 'html' element
+ // - the length of the string that would be created exceeds MAX_OUTPUT_LEN
+ // (ignore this limit if we are on the first iteration)
+ if (
+ nextStr === 'html' ||
+ (height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN)
+ ) {
+ break;
+ }
+
+ out.push(nextStr);
+
+ len += nextStr.length;
+ elem = elem.parentNode;
+ }
+
+ return out.reverse().join(separator);
+}
+
+/**
+ * Returns a simple, query-selector representation of a DOM element
+ * e.g. [HTMLElement] => input#foo.btn[name=baz]
+ * @param HTMLElement
+ * @returns {string}
+ */
+function htmlElementAsString(elem) {
+ var out = [],
+ className,
+ classes,
+ key,
+ attr,
+ i;
+
+ if (!elem || !elem.tagName) {
+ return '';
+ }
+
+ out.push(elem.tagName.toLowerCase());
+ if (elem.id) {
+ out.push('#' + elem.id);
+ }
+
+ className = elem.className;
+ if (className && isString(className)) {
+ classes = className.split(/\s+/);
+ for (i = 0; i < classes.length; i++) {
+ out.push('.' + classes[i]);
+ }
+ }
+ var attrWhitelist = ['type', 'name', 'title', 'alt'];
+ for (i = 0; i < attrWhitelist.length; i++) {
+ key = attrWhitelist[i];
+ attr = elem.getAttribute(key);
+ if (attr) {
+ out.push('[' + key + '="' + attr + '"]');
+ }
+ }
+ return out.join('');
+}
+
+/**
+ * Returns true if either a OR b is truthy, but not both
+ */
+function isOnlyOneTruthy(a, b) {
+ return !!(!!a ^ !!b);
+}
+
+/**
+ * Returns true if both parameters are undefined
+ */
+function isBothUndefined(a, b) {
+ return isUndefined(a) && isUndefined(b);
+}
+
+/**
+ * Returns true if the two input exception interfaces have the same content
+ */
+function isSameException(ex1, ex2) {
+ if (isOnlyOneTruthy(ex1, ex2)) return false;
+
+ ex1 = ex1.values[0];
+ ex2 = ex2.values[0];
+
+ if (ex1.type !== ex2.type || ex1.value !== ex2.value) return false;
+
+ // in case both stacktraces are undefined, we can't decide so default to false
+ if (isBothUndefined(ex1.stacktrace, ex2.stacktrace)) return false;
+
+ return isSameStacktrace(ex1.stacktrace, ex2.stacktrace);
+}
+
+/**
+ * Returns true if the two input stack trace interfaces have the same content
+ */
+function isSameStacktrace(stack1, stack2) {
+ if (isOnlyOneTruthy(stack1, stack2)) return false;
+
+ var frames1 = stack1.frames;
+ var frames2 = stack2.frames;
+
+ // Exit early if frame count differs
+ if (frames1.length !== frames2.length) return false;
+
+ // Iterate through every frame; bail out if anything differs
+ var a, b;
+ for (var i = 0; i < frames1.length; i++) {
+ a = frames1[i];
+ b = frames2[i];
+ if (
+ a.filename !== b.filename ||
+ a.lineno !== b.lineno ||
+ a.colno !== b.colno ||
+ a['function'] !== b['function']
+ )
+ return false;
+ }
+ return true;
+}
+
+/**
+ * Polyfill a method
+ * @param obj object e.g. `document`
+ * @param name method name present on object e.g. `addEventListener`
+ * @param replacement replacement function
+ * @param track {optional} record instrumentation to an array
+ */
+function fill(obj, name, replacement, track) {
+ if (obj == null) return;
+ var orig = obj[name];
+ obj[name] = replacement(orig);
+ obj[name].__raven__ = true;
+ obj[name].__orig__ = orig;
+ if (track) {
+ track.push([obj, name, orig]);
+ }
+}
+
+/**
+ * Join values in array
+ * @param input array of values to be joined together
+ * @param delimiter string to be placed in-between values
+ * @returns {string}
+ */
+function safeJoin(input, delimiter) {
+ if (!isArray(input)) return '';
+
+ var output = [];
+
+ for (var i = 0; i < input.length; i++) {
+ try {
+ output.push(String(input[i]));
+ } catch (e) {
+ output.push('[value cannot be serialized]');
+ }
+ }
+
+ return output.join(delimiter);
+}
+
+// Default Node.js REPL depth
+var MAX_SERIALIZE_EXCEPTION_DEPTH = 3;
+// 50kB, as 100kB is max payload size, so half sounds reasonable
+var MAX_SERIALIZE_EXCEPTION_SIZE = 50 * 1024;
+var MAX_SERIALIZE_KEYS_LENGTH = 40;
+
+function utf8Length(value) {
+ return ~-encodeURI(value).split(/%..|./).length;
+}
+
+function jsonSize(value) {
+ return utf8Length(JSON.stringify(value));
+}
+
+function serializeValue(value) {
+ if (typeof value === 'string') {
+ var maxLength = 40;
+ return truncate(value, maxLength);
+ } else if (
+ typeof value === 'number' ||
+ typeof value === 'boolean' ||
+ typeof value === 'undefined'
+ ) {
+ return value;
+ }
+
+ var type = Object.prototype.toString.call(value);
+
+ // Node.js REPL notation
+ if (type === '[object Object]') return '[Object]';
+ if (type === '[object Array]') return '[Array]';
+ if (type === '[object Function]')
+ return value.name ? '[Function: ' + value.name + ']' : '[Function]';
+
+ return value;
+}
+
+function serializeObject(value, depth) {
+ if (depth === 0) return serializeValue(value);
+
+ if (isPlainObject(value)) {
+ return Object.keys(value).reduce(function(acc, key) {
+ acc[key] = serializeObject(value[key], depth - 1);
+ return acc;
+ }, {});
+ } else if (Array.isArray(value)) {
+ return value.map(function(val) {
+ return serializeObject(val, depth - 1);
+ });
+ }
+
+ return serializeValue(value);
+}
+
+function serializeException(ex, depth, maxSize) {
+ if (!isPlainObject(ex)) return ex;
+
+ depth = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_DEPTH : depth;
+ maxSize = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_SIZE : maxSize;
+
+ var serialized = serializeObject(ex, depth);
+
+ if (jsonSize(stringify(serialized)) > maxSize) {
+ return serializeException(ex, depth - 1);
+ }
+
+ return serialized;
+}
+
+function serializeKeysForMessage(keys, maxLength) {
+ if (typeof keys === 'number' || typeof keys === 'string') return keys.toString();
+ if (!Array.isArray(keys)) return '';
+
+ keys = keys.filter(function(key) {
+ return typeof key === 'string';
+ });
+ if (keys.length === 0) return '[object has no keys]';
+
+ maxLength = typeof maxLength !== 'number' ? MAX_SERIALIZE_KEYS_LENGTH : maxLength;
+ if (keys[0].length >= maxLength) return keys[0];
+
+ for (var usedKeys = keys.length; usedKeys > 0; usedKeys--) {
+ var serialized = keys.slice(0, usedKeys).join(', ');
+ if (serialized.length > maxLength) continue;
+ if (usedKeys === keys.length) return serialized;
+ return serialized + '\u2026';
+ }
+
+ return '';
+}
+
+function sanitize(input, sanitizeKeys) {
+ if (!isArray(sanitizeKeys) || (isArray(sanitizeKeys) && sanitizeKeys.length === 0))
+ return input;
+
+ var sanitizeRegExp = joinRegExp(sanitizeKeys);
+ var sanitizeMask = '********';
+ var safeInput;
+
+ try {
+ safeInput = JSON.parse(stringify(input));
+ } catch (o_O) {
+ return input;
+ }
+
+ function sanitizeWorker(workerInput) {
+ if (isArray(workerInput)) {
+ return workerInput.map(function(val) {
+ return sanitizeWorker(val);
+ });
+ }
+
+ if (isPlainObject(workerInput)) {
+ return Object.keys(workerInput).reduce(function(acc, k) {
+ if (sanitizeRegExp.test(k)) {
+ acc[k] = sanitizeMask;
+ } else {
+ acc[k] = sanitizeWorker(workerInput[k]);
+ }
+ return acc;
+ }, {});
+ }
+
+ return workerInput;
+ }
+
+ return sanitizeWorker(safeInput);
+}
+
+module.exports = {
+ isObject: isObject,
+ isError: isError,
+ isErrorEvent: isErrorEvent,
+ isDOMError: isDOMError,
+ isDOMException: isDOMException,
+ isUndefined: isUndefined,
+ isFunction: isFunction,
+ isPlainObject: isPlainObject,
+ isString: isString,
+ isArray: isArray,
+ isEmptyObject: isEmptyObject,
+ supportsErrorEvent: supportsErrorEvent,
+ supportsDOMError: supportsDOMError,
+ supportsDOMException: supportsDOMException,
+ supportsFetch: supportsFetch,
+ supportsReferrerPolicy: supportsReferrerPolicy,
+ supportsPromiseRejectionEvent: supportsPromiseRejectionEvent,
+ wrappedCallback: wrappedCallback,
+ each: each,
+ objectMerge: objectMerge,
+ truncate: truncate,
+ objectFrozen: objectFrozen,
+ hasKey: hasKey,
+ joinRegExp: joinRegExp,
+ urlencode: urlencode,
+ uuid4: uuid4,
+ htmlTreeAsString: htmlTreeAsString,
+ htmlElementAsString: htmlElementAsString,
+ isSameException: isSameException,
+ isSameStacktrace: isSameStacktrace,
+ parseUrl: parseUrl,
+ fill: fill,
+ safeJoin: safeJoin,
+ serializeException: serializeException,
+ serializeKeysForMessage: serializeKeysForMessage,
+ sanitize: sanitize
+};
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"9":9}],8:[function(_dereq_,module,exports){
+(function (global){
+var utils = _dereq_(7);
+
+/*
+ TraceKit - Cross brower stack traces
+
+ This was originally forked from github.com/occ/TraceKit, but has since been
+ largely re-written and is now maintained as part of raven-js. Tests for
+ this are in test/vendor.
+
+ MIT license
+*/
+
+var TraceKit = {
+ collectWindowErrors: true,
+ debug: false
+};
+
+// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)
+var _window =
+ typeof window !== 'undefined'
+ ? window
+ : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
+
+// global reference to slice
+var _slice = [].slice;
+var UNKNOWN_FUNCTION = '?';
+
+// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types
+var ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;
+
+function getLocationHref() {
+ if (typeof document === 'undefined' || document.location == null) return '';
+ return document.location.href;
+}
+
+function getLocationOrigin() {
+ if (typeof document === 'undefined' || document.location == null) return '';
+
+ // Oh dear IE10...
+ if (!document.location.origin) {
+ document.location.origin =
+ document.location.protocol +
+ '//' +
+ document.location.hostname +
+ (document.location.port ? ':' + document.location.port : '');
+ }
+
+ return document.location.origin;
+}
+
+/**
+ * TraceKit.report: cross-browser processing of unhandled exceptions
+ *
+ * Syntax:
+ * TraceKit.report.subscribe(function(stackInfo) { ... })
+ * TraceKit.report.unsubscribe(function(stackInfo) { ... })
+ * TraceKit.report(exception)
+ * try { ...code... } catch(ex) { TraceKit.report(ex); }
+ *
+ * Supports:
+ * - Firefox: full stack trace with line numbers, plus column number
+ * on top frame; column number is not guaranteed
+ * - Opera: full stack trace with line and column numbers
+ * - Chrome: full stack trace with line and column numbers
+ * - Safari: line and column number for the top frame only; some frames
+ * may be missing, and column number is not guaranteed
+ * - IE: line and column number for the top frame only; some frames
+ * may be missing, and column number is not guaranteed
+ *
+ * In theory, TraceKit should work on all of the following versions:
+ * - IE5.5+ (only 8.0 tested)
+ * - Firefox 0.9+ (only 3.5+ tested)
+ * - Opera 7+ (only 10.50 tested; versions 9 and earlier may require
+ * Exceptions Have Stacktrace to be enabled in opera:config)
+ * - Safari 3+ (only 4+ tested)
+ * - Chrome 1+ (only 5+ tested)
+ * - Konqueror 3.5+ (untested)
+ *
+ * Requires TraceKit.computeStackTrace.
+ *
+ * Tries to catch all unhandled exceptions and report them to the
+ * subscribed handlers. Please note that TraceKit.report will rethrow the
+ * exception. This is REQUIRED in order to get a useful stack trace in IE.
+ * If the exception does not reach the top of the browser, you will only
+ * get a stack trace from the point where TraceKit.report was called.
+ *
+ * Handlers receive a stackInfo object as described in the
+ * TraceKit.computeStackTrace docs.
+ */
+TraceKit.report = (function reportModuleWrapper() {
+ var handlers = [],
+ lastArgs = null,
+ lastException = null,
+ lastExceptionStack = null;
+
+ /**
+ * Add a crash handler.
+ * @param {Function} handler
+ */
+ function subscribe(handler) {
+ installGlobalHandler();
+ handlers.push(handler);
+ }
+
+ /**
+ * Remove a crash handler.
+ * @param {Function} handler
+ */
+ function unsubscribe(handler) {
+ for (var i = handlers.length - 1; i >= 0; --i) {
+ if (handlers[i] === handler) {
+ handlers.splice(i, 1);
+ }
+ }
+ }
+
+ /**
+ * Remove all crash handlers.
+ */
+ function unsubscribeAll() {
+ uninstallGlobalHandler();
+ handlers = [];
+ }
+
+ /**
+ * Dispatch stack information to all handlers.
+ * @param {Object.} stack
+ */
+ function notifyHandlers(stack, isWindowError) {
+ var exception = null;
+ if (isWindowError && !TraceKit.collectWindowErrors) {
+ return;
+ }
+ for (var i in handlers) {
+ if (handlers.hasOwnProperty(i)) {
+ try {
+ handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2)));
+ } catch (inner) {
+ exception = inner;
+ }
+ }
+ }
+
+ if (exception) {
+ throw exception;
+ }
+ }
+
+ var _oldOnerrorHandler, _onErrorHandlerInstalled;
+
+ /**
+ * Ensures all global unhandled exceptions are recorded.
+ * Supported by Gecko and IE.
+ * @param {string} msg Error message.
+ * @param {string} url URL of script that generated the exception.
+ * @param {(number|string)} lineNo The line number at which the error
+ * occurred.
+ * @param {?(number|string)} colNo The column number at which the error
+ * occurred.
+ * @param {?Error} ex The actual Error object.
+ */
+ function traceKitWindowOnError(msg, url, lineNo, colNo, ex) {
+ var stack = null;
+ // If 'ex' is ErrorEvent, get real Error from inside
+ var exception = utils.isErrorEvent(ex) ? ex.error : ex;
+ // If 'msg' is ErrorEvent, get real message from inside
+ var message = utils.isErrorEvent(msg) ? msg.message : msg;
+
+ if (lastExceptionStack) {
+ TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(
+ lastExceptionStack,
+ url,
+ lineNo,
+ message
+ );
+ processLastException();
+ } else if (exception && utils.isError(exception)) {
+ // non-string `exception` arg; attempt to extract stack trace
+
+ // New chrome and blink send along a real error object
+ // Let's just report that like a normal error.
+ // See: https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror
+ stack = TraceKit.computeStackTrace(exception);
+ notifyHandlers(stack, true);
+ } else {
+ var location = {
+ url: url,
+ line: lineNo,
+ column: colNo
+ };
+
+ var name = undefined;
+ var groups;
+
+ if ({}.toString.call(message) === '[object String]') {
+ var groups = message.match(ERROR_TYPES_RE);
+ if (groups) {
+ name = groups[1];
+ message = groups[2];
+ }
+ }
+
+ location.func = UNKNOWN_FUNCTION;
+
+ stack = {
+ name: name,
+ message: message,
+ url: getLocationHref(),
+ stack: [location]
+ };
+ notifyHandlers(stack, true);
+ }
+
+ if (_oldOnerrorHandler) {
+ return _oldOnerrorHandler.apply(this, arguments);
+ }
+
+ return false;
+ }
+
+ function installGlobalHandler() {
+ if (_onErrorHandlerInstalled) {
+ return;
+ }
+ _oldOnerrorHandler = _window.onerror;
+ _window.onerror = traceKitWindowOnError;
+ _onErrorHandlerInstalled = true;
+ }
+
+ function uninstallGlobalHandler() {
+ if (!_onErrorHandlerInstalled) {
+ return;
+ }
+ _window.onerror = _oldOnerrorHandler;
+ _onErrorHandlerInstalled = false;
+ _oldOnerrorHandler = undefined;
+ }
+
+ function processLastException() {
+ var _lastExceptionStack = lastExceptionStack,
+ _lastArgs = lastArgs;
+ lastArgs = null;
+ lastExceptionStack = null;
+ lastException = null;
+ notifyHandlers.apply(null, [_lastExceptionStack, false].concat(_lastArgs));
+ }
+
+ /**
+ * Reports an unhandled Error to TraceKit.
+ * @param {Error} ex
+ * @param {?boolean} rethrow If false, do not re-throw the exception.
+ * Only used for window.onerror to not cause an infinite loop of
+ * rethrowing.
+ */
+ function report(ex, rethrow) {
+ var args = _slice.call(arguments, 1);
+ if (lastExceptionStack) {
+ if (lastException === ex) {
+ return; // already caught by an inner catch block, ignore
+ } else {
+ processLastException();
+ }
+ }
+
+ var stack = TraceKit.computeStackTrace(ex);
+ lastExceptionStack = stack;
+ lastException = ex;
+ lastArgs = args;
+
+ // If the stack trace is incomplete, wait for 2 seconds for
+ // slow slow IE to see if onerror occurs or not before reporting
+ // this exception; otherwise, we will end up with an incomplete
+ // stack trace
+ setTimeout(function() {
+ if (lastException === ex) {
+ processLastException();
+ }
+ }, stack.incomplete ? 2000 : 0);
+
+ if (rethrow !== false) {
+ throw ex; // re-throw to propagate to the top level (and cause window.onerror)
+ }
+ }
+
+ report.subscribe = subscribe;
+ report.unsubscribe = unsubscribe;
+ report.uninstall = unsubscribeAll;
+ return report;
+})();
+
+/**
+ * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript
+ *
+ * Syntax:
+ * s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below)
+ * Returns:
+ * s.name - exception name
+ * s.message - exception message
+ * s.stack[i].url - JavaScript or HTML file URL
+ * s.stack[i].func - function name, or empty for anonymous functions (if guessing did not work)
+ * s.stack[i].args - arguments passed to the function, if known
+ * s.stack[i].line - line number, if known
+ * s.stack[i].column - column number, if known
+ *
+ * Supports:
+ * - Firefox: full stack trace with line numbers and unreliable column
+ * number on top frame
+ * - Opera 10: full stack trace with line and column numbers
+ * - Opera 9-: full stack trace with line numbers
+ * - Chrome: full stack trace with line and column numbers
+ * - Safari: line and column number for the topmost stacktrace element
+ * only
+ * - IE: no line numbers whatsoever
+ *
+ * Tries to guess names of anonymous functions by looking for assignments
+ * in the source code. In IE and Safari, we have to guess source file names
+ * by searching for function bodies inside all page scripts. This will not
+ * work for scripts that are loaded cross-domain.
+ * Here be dragons: some function names may be guessed incorrectly, and
+ * duplicate functions may be mismatched.
+ *
+ * TraceKit.computeStackTrace should only be used for tracing purposes.
+ * Logging of unhandled exceptions should be done with TraceKit.report,
+ * which builds on top of TraceKit.computeStackTrace and provides better
+ * IE support by utilizing the window.onerror event to retrieve information
+ * about the top of the stack.
+ *
+ * Note: In IE and Safari, no stack trace is recorded on the Error object,
+ * so computeStackTrace instead walks its *own* chain of callers.
+ * This means that:
+ * * in Safari, some methods may be missing from the stack trace;
+ * * in IE, the topmost function in the stack trace will always be the
+ * caller of computeStackTrace.
+ *
+ * This is okay for tracing (because you are likely to be calling
+ * computeStackTrace from the function you want to be the topmost element
+ * of the stack trace anyway), but not okay for logging unhandled
+ * exceptions (because your catch block will likely be far away from the
+ * inner function that actually caused the exception).
+ *
+ */
+TraceKit.computeStackTrace = (function computeStackTraceWrapper() {
+ // Contents of Exception in various browsers.
+ //
+ // SAFARI:
+ // ex.message = Can't find variable: qq
+ // ex.line = 59
+ // ex.sourceId = 580238192
+ // ex.sourceURL = http://...
+ // ex.expressionBeginOffset = 96
+ // ex.expressionCaretOffset = 98
+ // ex.expressionEndOffset = 98
+ // ex.name = ReferenceError
+ //
+ // FIREFOX:
+ // ex.message = qq is not defined
+ // ex.fileName = http://...
+ // ex.lineNumber = 59
+ // ex.columnNumber = 69
+ // ex.stack = ...stack trace... (see the example below)
+ // ex.name = ReferenceError
+ //
+ // CHROME:
+ // ex.message = qq is not defined
+ // ex.name = ReferenceError
+ // ex.type = not_defined
+ // ex.arguments = ['aa']
+ // ex.stack = ...stack trace...
+ //
+ // INTERNET EXPLORER:
+ // ex.message = ...
+ // ex.name = ReferenceError
+ //
+ // OPERA:
+ // ex.message = ...message... (see the example below)
+ // ex.name = ReferenceError
+ // ex.opera#sourceloc = 11 (pretty much useless, duplicates the info in ex.message)
+ // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'
+
+ /**
+ * Computes stack trace information from the stack property.
+ * Chrome and Gecko use this property.
+ * @param {Error} ex
+ * @return {?Object.} Stack trace information.
+ */
+ function computeStackTraceFromStackProp(ex) {
+ if (typeof ex.stack === 'undefined' || !ex.stack) return;
+
+ var chrome = /^\s*at (?:(.*?) ?\()?((?:file|https?|blob|chrome-extension|native|eval|webpack||[a-z]:|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i;
+ var winjs = /^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i;
+ // NOTE: blob urls are now supposed to always have an origin, therefore it's format
+ // which is `blob:http://url/path/with-some-uuid`, is matched by `blob.*?:\/` as well
+ var gecko = /^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\/.*?|\[native code\]|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i;
+ // Used to additionally parse URL/line/column from eval frames
+ var geckoEval = /(\S+) line (\d+)(?: > eval line \d+)* > eval/i;
+ var chromeEval = /\((\S*)(?::(\d+))(?::(\d+))\)/;
+ var lines = ex.stack.split('\n');
+ var stack = [];
+ var submatch;
+ var parts;
+ var element;
+ var reference = /^(.*) is undefined$/.exec(ex.message);
+
+ for (var i = 0, j = lines.length; i < j; ++i) {
+ if ((parts = chrome.exec(lines[i]))) {
+ var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line
+ var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line
+ if (isEval && (submatch = chromeEval.exec(parts[2]))) {
+ // throw out eval line/column and use top-most line/column number
+ parts[2] = submatch[1]; // url
+ parts[3] = submatch[2]; // line
+ parts[4] = submatch[3]; // column
+ }
+ element = {
+ url: !isNative ? parts[2] : null,
+ func: parts[1] || UNKNOWN_FUNCTION,
+ args: isNative ? [parts[2]] : [],
+ line: parts[3] ? +parts[3] : null,
+ column: parts[4] ? +parts[4] : null
+ };
+ } else if ((parts = winjs.exec(lines[i]))) {
+ element = {
+ url: parts[2],
+ func: parts[1] || UNKNOWN_FUNCTION,
+ args: [],
+ line: +parts[3],
+ column: parts[4] ? +parts[4] : null
+ };
+ } else if ((parts = gecko.exec(lines[i]))) {
+ var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;
+ if (isEval && (submatch = geckoEval.exec(parts[3]))) {
+ // throw out eval line/column and use top-most line number
+ parts[3] = submatch[1];
+ parts[4] = submatch[2];
+ parts[5] = null; // no column when eval
+ } else if (i === 0 && !parts[5] && typeof ex.columnNumber !== 'undefined') {
+ // FireFox uses this awesome columnNumber property for its top frame
+ // Also note, Firefox's column number is 0-based and everything else expects 1-based,
+ // so adding 1
+ // NOTE: this hack doesn't work if top-most frame is eval
+ stack[0].column = ex.columnNumber + 1;
+ }
+ element = {
+ url: parts[3],
+ func: parts[1] || UNKNOWN_FUNCTION,
+ args: parts[2] ? parts[2].split(',') : [],
+ line: parts[4] ? +parts[4] : null,
+ column: parts[5] ? +parts[5] : null
+ };
+ } else {
+ continue;
+ }
+
+ if (!element.func && element.line) {
+ element.func = UNKNOWN_FUNCTION;
+ }
+
+ if (element.url && element.url.substr(0, 5) === 'blob:') {
+ // Special case for handling JavaScript loaded into a blob.
+ // We use a synchronous AJAX request here as a blob is already in
+ // memory - it's not making a network request. This will generate a warning
+ // in the browser console, but there has already been an error so that's not
+ // that much of an issue.
+ var xhr = new XMLHttpRequest();
+ xhr.open('GET', element.url, false);
+ xhr.send(null);
+
+ // If we failed to download the source, skip this patch
+ if (xhr.status === 200) {
+ var source = xhr.responseText || '';
+
+ // We trim the source down to the last 300 characters as sourceMappingURL is always at the end of the file.
+ // Why 300? To be in line with: https://github.com/getsentry/sentry/blob/4af29e8f2350e20c28a6933354e4f42437b4ba42/src/sentry/lang/javascript/processor.py#L164-L175
+ source = source.slice(-300);
+
+ // Now we dig out the source map URL
+ var sourceMaps = source.match(/\/\/# sourceMappingURL=(.*)$/);
+
+ // If we don't find a source map comment or we find more than one, continue on to the next element.
+ if (sourceMaps) {
+ var sourceMapAddress = sourceMaps[1];
+
+ // Now we check to see if it's a relative URL.
+ // If it is, convert it to an absolute one.
+ if (sourceMapAddress.charAt(0) === '~') {
+ sourceMapAddress = getLocationOrigin() + sourceMapAddress.slice(1);
+ }
+
+ // Now we strip the '.map' off of the end of the URL and update the
+ // element so that Sentry can match the map to the blob.
+ element.url = sourceMapAddress.slice(0, -4);
+ }
+ }
+ }
+
+ stack.push(element);
+ }
+
+ if (!stack.length) {
+ return null;
+ }
+
+ return {
+ name: ex.name,
+ message: ex.message,
+ url: getLocationHref(),
+ stack: stack
+ };
+ }
+
+ /**
+ * Adds information about the first frame to incomplete stack traces.
+ * Safari and IE require this to get complete data on the first frame.
+ * @param {Object.} stackInfo Stack trace information from
+ * one of the compute* methods.
+ * @param {string} url The URL of the script that caused an error.
+ * @param {(number|string)} lineNo The line number of the script that
+ * caused an error.
+ * @param {string=} message The error generated by the browser, which
+ * hopefully contains the name of the object that caused the error.
+ * @return {boolean} Whether or not the stack information was
+ * augmented.
+ */
+ function augmentStackTraceWithInitialElement(stackInfo, url, lineNo, message) {
+ var initial = {
+ url: url,
+ line: lineNo
+ };
+
+ if (initial.url && initial.line) {
+ stackInfo.incomplete = false;
+
+ if (!initial.func) {
+ initial.func = UNKNOWN_FUNCTION;
+ }
+
+ if (stackInfo.stack.length > 0) {
+ if (stackInfo.stack[0].url === initial.url) {
+ if (stackInfo.stack[0].line === initial.line) {
+ return false; // already in stack trace
+ } else if (
+ !stackInfo.stack[0].line &&
+ stackInfo.stack[0].func === initial.func
+ ) {
+ stackInfo.stack[0].line = initial.line;
+ return false;
+ }
+ }
+ }
+
+ stackInfo.stack.unshift(initial);
+ stackInfo.partial = true;
+ return true;
+ } else {
+ stackInfo.incomplete = true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Computes stack trace information by walking the arguments.caller
+ * chain at the time the exception occurred. This will cause earlier
+ * frames to be missed but is the only way to get any stack trace in
+ * Safari and IE. The top frame is restored by
+ * {@link augmentStackTraceWithInitialElement}.
+ * @param {Error} ex
+ * @return {?Object.} Stack trace information.
+ */
+ function computeStackTraceByWalkingCallerChain(ex, depth) {
+ var functionName = /function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,
+ stack = [],
+ funcs = {},
+ recursion = false,
+ parts,
+ item,
+ source;
+
+ for (
+ var curr = computeStackTraceByWalkingCallerChain.caller;
+ curr && !recursion;
+ curr = curr.caller
+ ) {
+ if (curr === computeStackTrace || curr === TraceKit.report) {
+ // console.log('skipping internal function');
+ continue;
+ }
+
+ item = {
+ url: null,
+ func: UNKNOWN_FUNCTION,
+ line: null,
+ column: null
+ };
+
+ if (curr.name) {
+ item.func = curr.name;
+ } else if ((parts = functionName.exec(curr.toString()))) {
+ item.func = parts[1];
+ }
+
+ if (typeof item.func === 'undefined') {
+ try {
+ item.func = parts.input.substring(0, parts.input.indexOf('{'));
+ } catch (e) {}
+ }
+
+ if (funcs['' + curr]) {
+ recursion = true;
+ } else {
+ funcs['' + curr] = true;
+ }
+
+ stack.push(item);
+ }
+
+ if (depth) {
+ // console.log('depth is ' + depth);
+ // console.log('stack is ' + stack.length);
+ stack.splice(0, depth);
+ }
+
+ var result = {
+ name: ex.name,
+ message: ex.message,
+ url: getLocationHref(),
+ stack: stack
+ };
+ augmentStackTraceWithInitialElement(
+ result,
+ ex.sourceURL || ex.fileName,
+ ex.line || ex.lineNumber,
+ ex.message || ex.description
+ );
+ return result;
+ }
+
+ /**
+ * Computes a stack trace for an exception.
+ * @param {Error} ex
+ * @param {(string|number)=} depth
+ */
+ function computeStackTrace(ex, depth) {
+ var stack = null;
+ depth = depth == null ? 0 : +depth;
+
+ try {
+ stack = computeStackTraceFromStackProp(ex);
+ if (stack) {
+ return stack;
+ }
+ } catch (e) {
+ if (TraceKit.debug) {
+ throw e;
+ }
+ }
+
+ try {
+ stack = computeStackTraceByWalkingCallerChain(ex, depth + 1);
+ if (stack) {
+ return stack;
+ }
+ } catch (e) {
+ if (TraceKit.debug) {
+ throw e;
+ }
+ }
+ return {
+ name: ex.name,
+ message: ex.message,
+ url: getLocationHref()
+ };
+ }
+
+ computeStackTrace.augmentStackTraceWithInitialElement = augmentStackTraceWithInitialElement;
+ computeStackTrace.computeStackTraceFromStackProp = computeStackTraceFromStackProp;
+
+ return computeStackTrace;
+})();
+
+module.exports = TraceKit;
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"7":7}],9:[function(_dereq_,module,exports){
+/*
+ json-stringify-safe
+ Like JSON.stringify, but doesn't throw on circular references.
+
+ Originally forked from https://github.com/isaacs/json-stringify-safe
+ version 5.0.1 on 3/8/2017 and modified to handle Errors serialization
+ and IE8 compatibility. Tests for this are in test/vendor.
+
+ ISC license: https://github.com/isaacs/json-stringify-safe/blob/master/LICENSE
+*/
+
+exports = module.exports = stringify;
+exports.getSerialize = serializer;
+
+function indexOf(haystack, needle) {
+ for (var i = 0; i < haystack.length; ++i) {
+ if (haystack[i] === needle) return i;
+ }
+ return -1;
+}
+
+function stringify(obj, replacer, spaces, cycleReplacer) {
+ return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces);
+}
+
+// https://github.com/ftlabs/js-abbreviate/blob/fa709e5f139e7770a71827b1893f22418097fbda/index.js#L95-L106
+function stringifyError(value) {
+ var err = {
+ // These properties are implemented as magical getters and don't show up in for in
+ stack: value.stack,
+ message: value.message,
+ name: value.name
+ };
+
+ for (var i in value) {
+ if (Object.prototype.hasOwnProperty.call(value, i)) {
+ err[i] = value[i];
+ }
+ }
+
+ return err;
+}
+
+function serializer(replacer, cycleReplacer) {
+ var stack = [];
+ var keys = [];
+
+ if (cycleReplacer == null) {
+ cycleReplacer = function(key, value) {
+ if (stack[0] === value) {
+ return '[Circular ~]';
+ }
+ return '[Circular ~.' + keys.slice(0, indexOf(stack, value)).join('.') + ']';
+ };
+ }
+
+ return function(key, value) {
+ if (stack.length > 0) {
+ var thisPos = indexOf(stack, this);
+ ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);
+ ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);
+
+ if (~indexOf(stack, value)) {
+ value = cycleReplacer.call(this, key, value);
+ }
+ } else {
+ stack.push(value);
+ }
+
+ return replacer == null
+ ? value instanceof Error ? stringifyError(value) : value
+ : replacer.call(this, key, value);
+ };
+}
+
+},{}],10:[function(_dereq_,module,exports){
+/*
+ * JavaScript MD5
+ * https://github.com/blueimp/JavaScript-MD5
+ *
+ * Copyright 2011, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * https://opensource.org/licenses/MIT
+ *
+ * Based on
+ * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
+ * Digest Algorithm, as defined in RFC 1321.
+ * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
+ * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
+ * Distributed under the BSD License
+ * See http://pajhome.org.uk/crypt/md5 for more info.
+ */
+
+/*
+* Add integers, wrapping at 2^32. This uses 16-bit operations internally
+* to work around bugs in some JS interpreters.
+*/
+function safeAdd(x, y) {
+ var lsw = (x & 0xffff) + (y & 0xffff);
+ var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
+ return (msw << 16) | (lsw & 0xffff);
+}
+
+/*
+* Bitwise rotate a 32-bit number to the left.
+*/
+function bitRotateLeft(num, cnt) {
+ return (num << cnt) | (num >>> (32 - cnt));
+}
+
+/*
+* These functions implement the four basic operations the algorithm uses.
+*/
+function md5cmn(q, a, b, x, s, t) {
+ return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);
+}
+function md5ff(a, b, c, d, x, s, t) {
+ return md5cmn((b & c) | (~b & d), a, b, x, s, t);
+}
+function md5gg(a, b, c, d, x, s, t) {
+ return md5cmn((b & d) | (c & ~d), a, b, x, s, t);
+}
+function md5hh(a, b, c, d, x, s, t) {
+ return md5cmn(b ^ c ^ d, a, b, x, s, t);
+}
+function md5ii(a, b, c, d, x, s, t) {
+ return md5cmn(c ^ (b | ~d), a, b, x, s, t);
+}
+
+/*
+* Calculate the MD5 of an array of little-endian words, and a bit length.
+*/
+function binlMD5(x, len) {
+ /* append padding */
+ x[len >> 5] |= 0x80 << (len % 32);
+ x[(((len + 64) >>> 9) << 4) + 14] = len;
+
+ var i;
+ var olda;
+ var oldb;
+ var oldc;
+ var oldd;
+ var a = 1732584193;
+ var b = -271733879;
+ var c = -1732584194;
+ var d = 271733878;
+
+ for (i = 0; i < x.length; i += 16) {
+ olda = a;
+ oldb = b;
+ oldc = c;
+ oldd = d;
+
+ a = md5ff(a, b, c, d, x[i], 7, -680876936);
+ d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);
+ c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);
+ b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);
+ a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);
+ d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);
+ c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);
+ b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);
+ a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);
+ d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);
+ c = md5ff(c, d, a, b, x[i + 10], 17, -42063);
+ b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);
+ a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);
+ d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);
+ c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);
+ b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);
+
+ a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);
+ d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);
+ c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);
+ b = md5gg(b, c, d, a, x[i], 20, -373897302);
+ a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);
+ d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);
+ c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);
+ b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);
+ a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);
+ d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);
+ c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);
+ b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);
+ a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);
+ d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);
+ c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);
+ b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);
+
+ a = md5hh(a, b, c, d, x[i + 5], 4, -378558);
+ d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);
+ c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);
+ b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);
+ a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);
+ d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);
+ c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);
+ b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);
+ a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);
+ d = md5hh(d, a, b, c, x[i], 11, -358537222);
+ c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);
+ b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);
+ a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);
+ d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);
+ c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);
+ b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);
+
+ a = md5ii(a, b, c, d, x[i], 6, -198630844);
+ d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);
+ c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);
+ b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);
+ a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);
+ d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);
+ c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);
+ b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);
+ a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);
+ d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);
+ c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);
+ b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);
+ a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);
+ d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);
+ c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);
+ b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);
+
+ a = safeAdd(a, olda);
+ b = safeAdd(b, oldb);
+ c = safeAdd(c, oldc);
+ d = safeAdd(d, oldd);
+ }
+ return [a, b, c, d];
+}
+
+/*
+* Convert an array of little-endian words to a string
+*/
+function binl2rstr(input) {
+ var i;
+ var output = '';
+ var length32 = input.length * 32;
+ for (i = 0; i < length32; i += 8) {
+ output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xff);
+ }
+ return output;
+}
+
+/*
+* Convert a raw string to an array of little-endian words
+* Characters >255 have their high-byte silently ignored.
+*/
+function rstr2binl(input) {
+ var i;
+ var output = [];
+ output[(input.length >> 2) - 1] = undefined;
+ for (i = 0; i < output.length; i += 1) {
+ output[i] = 0;
+ }
+ var length8 = input.length * 8;
+ for (i = 0; i < length8; i += 8) {
+ output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << (i % 32);
+ }
+ return output;
+}
+
+/*
+* Calculate the MD5 of a raw string
+*/
+function rstrMD5(s) {
+ return binl2rstr(binlMD5(rstr2binl(s), s.length * 8));
+}
+
+/*
+* Calculate the HMAC-MD5, of a key and some data (raw strings)
+*/
+function rstrHMACMD5(key, data) {
+ var i;
+ var bkey = rstr2binl(key);
+ var ipad = [];
+ var opad = [];
+ var hash;
+ ipad[15] = opad[15] = undefined;
+ if (bkey.length > 16) {
+ bkey = binlMD5(bkey, key.length * 8);
+ }
+ for (i = 0; i < 16; i += 1) {
+ ipad[i] = bkey[i] ^ 0x36363636;
+ opad[i] = bkey[i] ^ 0x5c5c5c5c;
+ }
+ hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);
+ return binl2rstr(binlMD5(opad.concat(hash), 512 + 128));
+}
+
+/*
+* Convert a raw string to a hex string
+*/
+function rstr2hex(input) {
+ var hexTab = '0123456789abcdef';
+ var output = '';
+ var x;
+ var i;
+ for (i = 0; i < input.length; i += 1) {
+ x = input.charCodeAt(i);
+ output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f);
+ }
+ return output;
+}
+
+/*
+* Encode a string as utf-8
+*/
+function str2rstrUTF8(input) {
+ return unescape(encodeURIComponent(input));
+}
+
+/*
+* Take string arguments and return either raw or hex encoded strings
+*/
+function rawMD5(s) {
+ return rstrMD5(str2rstrUTF8(s));
+}
+function hexMD5(s) {
+ return rstr2hex(rawMD5(s));
+}
+function rawHMACMD5(k, d) {
+ return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d));
+}
+function hexHMACMD5(k, d) {
+ return rstr2hex(rawHMACMD5(k, d));
+}
+
+function md5(string, key, raw) {
+ if (!key) {
+ if (!raw) {
+ return hexMD5(string);
+ }
+ return rawMD5(string);
+ }
+ if (!raw) {
+ return hexHMACMD5(key, string);
+ }
+ return rawHMACMD5(key, string);
+}
+
+module.exports = md5;
+
+},{}]},{},[6,1,2])(6)
+});
\ No newline at end of file
diff --git a/packages/raven-js/dist/angular,console/raven.min.js b/packages/raven-js/dist/angular,console/raven.min.js
new file mode 100644
index 000000000000..67c09e7f45cc
--- /dev/null
+++ b/packages/raven-js/dist/angular,console/raven.min.js
@@ -0,0 +1,4 @@
+/*! Raven.js 3.25.2 (30b6d4e) | github.com/getsentry/raven-js */
+!function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,b.Raven=a()}}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c?c:a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;gthis.l.maxBreadcrumbs&&this.v.shift(),this},addPlugin:function(a){var b=[].slice.call(arguments,1);return this.s.push([a,b]),this.o&&this.G(),this},setUserContext:function(a){return this.k.user=a,this},setExtraContext:function(a){return this.$("extra",a),this},setTagsContext:function(a){return this.$("tags",a),this},clearContext:function(){return this.k={},this},getContext:function(){return JSON.parse(h(this.k))},setEnvironment:function(a){return this.l.environment=a,this},setRelease:function(a){return this.l.release=a,this},setDataCallback:function(a){var b=this.l.dataCallback;return this.l.dataCallback=e(b,a),this},setBreadcrumbCallback:function(a){var b=this.l.breadcrumbCallback;return this.l.breadcrumbCallback=e(b,a),this},setShouldSendCallback:function(a){var b=this.l.shouldSendCallback;return this.l.shouldSendCallback=e(b,a),this},setTransport:function(a){return this.l.transport=a,this},lastException:function(){return this.e},lastEventId:function(){return this.g},isSetup:function(){return!!this.b&&(!!this.h||(this.ravenNotConfiguredError||(this.ravenNotConfiguredError=!0,this.A("error","Error: Raven has not been configured.")),!1))},afterLoad:function(){var a=R.RavenConfig;a&&this.config(a.dsn,a.config).install()},showReportDialog:function(a){if(S){a=a||{};var b=a.eventId||this.lastEventId();if(!b)throw new j("Missing eventId");var c=a.dsn||this.I;if(!c)throw new j("Missing DSN");var d=encodeURIComponent,e="";e+="?eventId="+d(b),e+="&dsn="+d(c);var f=a.user||this.k.user;f&&(f.name&&(e+="&name="+d(f.name)),f.email&&(e+="&email="+d(f.email)));var g=this.K(this.H(c)),h=S.createElement("script");h.async=!0,h.src=g+"/api/embed/error-page/"+e,(S.head||S.body).appendChild(h)}},M:function(){var a=this;this.n+=1,setTimeout(function(){a.n-=1})},_:function(a,b){var c,d;if(this.c){b=b||{},a="raven"+a.substr(0,1).toUpperCase()+a.substr(1),S.createEvent?(c=S.createEvent("HTMLEvents"),c.initEvent(a,!0,!0)):(c=S.createEventObject(),c.eventType=a);for(d in b)A(b,d)&&(c[d]=b[d]);if(S.createEvent)S.dispatchEvent(c);else try{S.fireEvent("on"+c.eventType.toLowerCase(),c)}catch(e){}}},aa:function(a){var b=this;return function(c){if(b.ba=null,b.w!==c){b.w=c;var d;try{d=E(c.target)}catch(e){d=""}b.captureBreadcrumb({category:"ui."+a,message:d})}}},ca:function(){var a=this,b=1e3;return function(c){var d;try{d=c.target}catch(e){return}var f=d&&d.tagName;if(f&&("INPUT"===f||"TEXTAREA"===f||d.isContentEditable)){var g=a.ba;g||a.aa("input")(c),clearTimeout(g),a.ba=setTimeout(function(){a.ba=null},b)}}},da:function(a,b){var c=H(this.x.href),d=H(b),e=H(a);this.y=b,c.protocol===d.protocol&&c.host===d.host&&(b=d.relative),c.protocol===e.protocol&&c.host===e.host&&(a=e.relative),this.captureBreadcrumb({category:"navigation",data:{to:b,from:a}})},D:function(){var a=this;a.ea=Function.prototype.toString,Function.prototype.toString=function(){return"function"==typeof this&&this.N?a.ea.apply(this.P,arguments):a.ea.apply(this,arguments)}},R:function(){this.ea&&(Function.prototype.toString=this.ea)},E:function(){function a(a){return function(b,d){for(var e=new Array(arguments.length),f=0;f2?arguments[2]:void 0;return c&&b.da(b.y,c+""),a.apply(this,arguments)}};I(R.history,"pushState",j,d),I(R.history,"replaceState",j,d)}if(c.console&&"console"in R&&console.log){var k=function(a,c){b.captureBreadcrumb({message:a,level:c.level,category:"console"})};w(["debug","info","warn","error","log"],function(a,b){O(console,b,k)})}},S:function(){for(var a;this.u.length;){a=this.u.shift();var b=a[0],c=a[1],d=a[2];b[c]=d}},T:function(){for(var a in this.r)this.q[a]=this.r[a]},G:function(){var a=this;w(this.s,function(b,c){var d=c[0],e=c[1];d.apply(a,[a].concat(e))})},H:function(a){var b=Q.exec(a),c={},d=7;try{for(;d--;)c[P[d]]=b[d]||""}catch(e){throw new j("Invalid DSN: "+a)}if(c.pass&&!this.l.allowSecretKey)throw new j("Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key");return c},K:function(a){var b="//"+a.host+(a.port?":"+a.port:"");return a.protocol&&(b=a.protocol+":"+b),b},B:function(){this.n||this.W.apply(this,arguments)},W:function(a,b){var c=this.Y(a,b);this._("handle",{stackInfo:a,options:b}),this.ga(a.name,a.message,a.url,a.lineno,c,b)},Y:function(a,b){var c=this,d=[];if(a.stack&&a.stack.length&&(w(a.stack,function(b,e){var f=c.ha(e,a.url);f&&d.push(f)}),b&&b.trimHeadFrames))for(var e=0;e0&&(a.breadcrumbs={values:[].slice.call(this.v,0)}),this.k.user&&(a.user=this.k.user),b.environment&&(a.environment=b.environment),b.release&&(a.release=b.release),b.serverName&&(a.server_name=b.serverName),a=this.qa(a),Object.keys(a).forEach(function(b){(null==a[b]||""===a[b]||v(a[b]))&&delete a[b]}),s(b.dataCallback)&&(a=b.dataCallback(a)||a),a&&!v(a)&&(!s(b.shouldSendCallback)||b.shouldSendCallback(a)))return this.na()?void this.A("warn","Raven dropped error due to backoff: ",a):void("number"==typeof b.sampleRate?Math.random() ",i=h.length;a&&f++1&&g+e.length*i+b.length>=d));)e.push(b),g+=b.length,a=a.parentNode;return e.reverse().join(h)}function F(a){var b,c,d,e,f,g=[];if(!a||!a.tagName)return"";if(g.push(a.tagName.toLowerCase()),a.id&&g.push("#"+a.id),b=a.className,b&&l(b))for(c=b.split(/\s+/),f=0;fc?Q(a,b-1):d}function R(a,b){if("number"==typeof a||"string"==typeof a)return a.toString();if(!Array.isArray(a))return"";if(a=a.filter(function(a){return"string"==typeof a}),0===a.length)return"[object has no keys]";if(b="number"!=typeof b?X:b,a[0].length>=b)return a[0];for(var c=a.length;c>0;c--){var d=a.slice(0,c).join(", ");if(!(d.length>b))return c===a.length?d:d+"…"}return""}function S(a,b){function c(a){return m(a)?a.map(function(a){return c(a)}):k(a)?Object.keys(a).reduce(function(b,d){return b[d]=e.test(d)?f:c(a[d]),b},{}):a}if(!m(b)||m(b)&&0===b.length)return a;var d,e=A(b),f="********";try{d=JSON.parse(T(a))}catch(g){return a}return c(d)}var T=a(9),U="undefined"!=typeof window?window:"undefined"!=typeof c?c:"undefined"!=typeof self?self:{},V=3,W=51200,X=40;b.exports={isObject:d,isError:e,isErrorEvent:f,isDOMError:g,isDOMException:h,isUndefined:i,isFunction:j,isPlainObject:k,isString:l,isArray:m,isEmptyObject:n,supportsErrorEvent:o,supportsDOMError:p,supportsDOMException:q,supportsFetch:r,supportsReferrerPolicy:s,supportsPromiseRejectionEvent:t,wrappedCallback:u,each:v,objectMerge:w,truncate:y,objectFrozen:x,hasKey:z,joinRegExp:A,urlencode:B,uuid4:D,htmlTreeAsString:E,htmlElementAsString:F,isSameException:I,isSameStacktrace:J,parseUrl:C,fill:K,safeJoin:L,serializeException:Q,serializeKeysForMessage:R,sanitize:S}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{9:9}],8:[function(a,b,c){(function(c){function d(){return"undefined"==typeof document||null==document.location?"":document.location.href}function e(){return"undefined"==typeof document||null==document.location?"":(document.location.origin||(document.location.origin=document.location.protocol+"//"+document.location.hostname+(document.location.port?":"+document.location.port:"")),document.location.origin)}var f=a(7),g={collectWindowErrors:!0,debug:!1},h="undefined"!=typeof window?window:"undefined"!=typeof c?c:"undefined"!=typeof self?self:{},i=[].slice,j="?",k=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;g.report=function(){function a(a){m(),s.push(a)}function b(a){for(var b=s.length-1;b>=0;--b)s[b]===a&&s.splice(b,1)}function c(){n(),s=[]}function e(a,b){var c=null;if(!b||g.collectWindowErrors){for(var d in s)if(s.hasOwnProperty(d))try{s[d].apply(null,[a].concat(i.call(arguments,2)))}catch(e){c=e}if(c)throw c}}function l(a,b,c,h,i){var l=null,m=f.isErrorEvent(i)?i.error:i,n=f.isErrorEvent(a)?a.message:a;if(v)g.computeStackTrace.augmentStackTraceWithInitialElement(v,b,c,n),o();else if(m&&f.isError(m))l=g.computeStackTrace(m),e(l,!0);else{var p,r={url:b,line:c,column:h},s=void 0;if("[object String]"==={}.toString.call(n)){var p=n.match(k);p&&(s=p[1],n=p[2])}r.func=j,l={name:s,message:n,url:d(),stack:[r]},e(l,!0)}return!!q&&q.apply(this,arguments)}function m(){r||(q=h.onerror,h.onerror=l,r=!0)}function n(){r&&(h.onerror=q,r=!1,q=void 0)}function o(){var a=v,b=t;t=null,v=null,u=null,e.apply(null,[a,!1].concat(b))}function p(a,b){var c=i.call(arguments,1);if(v){if(u===a)return;o()}var d=g.computeStackTrace(a);if(v=d,u=a,t=c,setTimeout(function(){u===a&&o()},d.incomplete?2e3:0),b!==!1)throw a}var q,r,s=[],t=null,u=null,v=null;return p.subscribe=a,p.unsubscribe=b,p.uninstall=c,p}(),g.computeStackTrace=function(){function a(a){if("undefined"!=typeof a.stack&&a.stack){for(var b,c,f,g=/^\s*at (?:(.*?) ?\()?((?:file|https?|blob|chrome-extension|native|eval|webpack||[a-z]:|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,h=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i,i=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\/.*?|\[native code\]|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i,k=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,l=/\((\S*)(?::(\d+))(?::(\d+))\)/,m=a.stack.split("\n"),n=[],o=(/^(.*) is undefined$/.exec(a.message),0),p=m.length;o eval")>-1;r&&(b=k.exec(c[3]))?(c[3]=b[1],c[4]=b[2],c[5]=null):0!==o||c[5]||"undefined"==typeof a.columnNumber||(n[0].column=a.columnNumber+1),f={url:c[3],func:c[1]||j,args:c[2]?c[2].split(","):[],line:c[4]?+c[4]:null,column:c[5]?+c[5]:null}}if(!f.func&&f.line&&(f.func=j),f.url&&"blob:"===f.url.substr(0,5)){var s=new XMLHttpRequest;if(s.open("GET",f.url,!1),s.send(null),200===s.status){var t=s.responseText||"";t=t.slice(-300);var u=t.match(/\/\/# sourceMappingURL=(.*)$/);if(u){var v=u[1];"~"===v.charAt(0)&&(v=e()+v.slice(1)),f.url=v.slice(0,-4)}}}n.push(f)}return n.length?{name:a.name,message:a.message,url:d(),stack:n}:null}}function b(a,b,c,d){var e={url:b,line:c};if(e.url&&e.line){if(a.incomplete=!1,e.func||(e.func=j),a.stack.length>0&&a.stack[0].url===e.url){if(a.stack[0].line===e.line)return!1;
+if(!a.stack[0].line&&a.stack[0].func===e.func)return a.stack[0].line=e.line,!1}return a.stack.unshift(e),a.partial=!0,!0}return a.incomplete=!0,!1}function c(a,e){for(var h,i,k=/function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,l=[],m={},n=!1,o=c.caller;o&&!n;o=o.caller)if(o!==f&&o!==g.report){if(i={url:null,func:j,line:null,column:null},o.name?i.func=o.name:(h=k.exec(o.toString()))&&(i.func=h[1]),"undefined"==typeof i.func)try{i.func=h.input.substring(0,h.input.indexOf("{"))}catch(p){}m[""+o]?n=!0:m[""+o]=!0,l.push(i)}e&&l.splice(0,e);var q={name:a.name,message:a.message,url:d(),stack:l};return b(q,a.sourceURL||a.fileName,a.line||a.lineNumber,a.message||a.description),q}function f(b,e){var f=null;e=null==e?0:+e;try{if(f=a(b))return f}catch(h){if(g.debug)throw h}try{if(f=c(b,e+1))return f}catch(h){if(g.debug)throw h}return{name:b.name,message:b.message,url:d()}}return f.augmentStackTraceWithInitialElement=b,f.computeStackTraceFromStackProp=a,f}(),b.exports=g}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{7:7}],9:[function(a,b,c){function d(a,b){for(var c=0;c0){var i=d(c,this);~i?c.splice(i+1):c.push(this),~i?e.splice(i,1/0,g):e.push(g),~d(c,h)&&(h=b.call(this,g,h))}else c.push(h);return null==a?h instanceof Error?f(h):h:a.call(this,g,h)}}c=b.exports=e,c.getSerialize=g},{}],10:[function(a,b,c){function d(a,b){var c=(65535&a)+(65535&b),d=(a>>16)+(b>>16)+(c>>16);return d<<16|65535&c}function e(a,b){return a<>>32-b}function f(a,b,c,f,g,h){return d(e(d(d(b,a),d(f,h)),g),c)}function g(a,b,c,d,e,g,h){return f(b&c|~b&d,a,b,e,g,h)}function h(a,b,c,d,e,g,h){return f(b&d|c&~d,a,b,e,g,h)}function i(a,b,c,d,e,g,h){return f(b^c^d,a,b,e,g,h)}function j(a,b,c,d,e,g,h){return f(c^(b|~d),a,b,e,g,h)}function k(a,b){a[b>>5]|=128<>>9<<4)+14]=b;var c,e,f,k,l,m=1732584193,n=-271733879,o=-1732584194,p=271733878;for(c=0;c>5]>>>b%32&255);return c}function m(a){var b,c=[];for(c[(a.length>>2)-1]=void 0,b=0;b>5]|=(255&a.charCodeAt(b/8))<16&&(e=k(e,8*a.length)),c=0;c<16;c+=1)f[c]=909522486^e[c],g[c]=1549556828^e[c];return d=k(f.concat(m(b)),512+8*b.length),l(k(g.concat(d),640))}function p(a){var b,c,d="0123456789abcdef",e="";for(c=0;c>>4&15)+d.charAt(15&b);return e}function q(a){return unescape(encodeURIComponent(a))}function r(a){return n(q(a))}function s(a){return p(r(a))}function t(a,b){return o(q(a),q(b))}function u(a,b){return p(t(a,b))}function v(a,b,c){return b?c?t(b,a):u(b,a):c?r(a):s(a)}b.exports=v},{}]},{},[6,1,2])(6)});
+//# sourceMappingURL=raven.min.js.map
\ No newline at end of file
diff --git a/packages/raven-js/dist/angular,console/raven.min.js.map b/packages/raven-js/dist/angular,console/raven.min.js.map
new file mode 100644
index 000000000000..2746aeeab26a
--- /dev/null
+++ b/packages/raven-js/dist/angular,console/raven.min.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["raven.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Raven","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length","1","_dereq_","angularPlugin","angular","RavenProvider","$get","$window","ExceptionHandlerProvider","$provide","decorator","exceptionHandler","R","$delegate","ex","cause","captureException","extra","moduleName","provider","config","setDataCallback","wrappedCallback","data","_normalizeData","angularPattern","exception","values","matches","exec","value","type","message","angularDocs","substr","addPlugin","6","7","2","consolePlugin","console","pluginOptions","logLevels","levels","push","callback","msg","captureMessage","level","pop","wrapConsoleMethod","wrapMethod","4","3","RavenConfigError","name","prototype","constructor","utils","originalConsoleLevel","originalConsole","sentryLevel","args","slice","arguments","safeJoin","logger","Function","apply","5","now","Date","keepOriginalCallback","original","isFunction","_hasJSON","JSON","stringify","_hasDocument","isUndefined","_document","_hasNavigator","_navigator","_lastCapturedException","_lastData","_lastEventId","_globalServer","_globalKey","_globalProject","_globalContext","_globalOptions","release","_window","SENTRY_RELEASE","id","ignoreErrors","ignoreUrls","whitelistUrls","includePaths","headers","collectWindowErrors","captureUnhandledRejections","maxMessageLength","maxUrlLength","stackTraceLimit","autoBreadcrumbs","instrument","sampleRate","sanitizeKeys","_fetchDefaults","method","keepalive","referrerPolicy","supportsReferrerPolicy","_ignoreOnError","_isRavenInstalled","_originalErrorStackTraceLimit","_originalConsole","_originalConsoleMethods","_plugins","_startTime","_wrappedBuiltIns","_breadcrumbs","_lastCapturedEvent","_location","location","_lastHref","href","_resetBackoff","TraceKit","md5","isErrorEvent","isDOMError","isDOMException","isError","isObject","isPlainObject","isString","isArray","isEmptyObject","each","objectMerge","truncate","objectFrozen","hasKey","joinRegExp","urlencode","uuid4","htmlTreeAsString","isSameException","isSameStacktrace","parseUrl","fill","supportsFetch","serializeKeysForMessage","serializeException","sanitize","dsnKeys","split","dsnPattern","document","navigator","VERSION","debug","dsn","options","_logDebug","globalOptions","key","setDSN","maxBreadcrumbs","Math","max","min","autoBreadcrumbDefaults","xhr","dom","sentry","toString","instrumentDefaults","tryCatch","install","isSetup","report","subscribe","_handleOnErrorStackInfo","_attachPromiseRejectionHandler","_patchFunctionToString","_instrumentTryCatch","_instrumentBreadcrumbs","_drainPlugins","uri","_parseDSN","lastSlash","path","lastIndexOf","_dsn","user","_globalSecret","pass","_getGlobalServer","_globalEndpoint","context","func","undefined","wrap","_before","wrapped","deep","_ignoreNextOnError","__raven__","__raven_wrapper__","property","__orig__","uninstall","_detachPromiseRejectionHandler","_unpatchFunctionToString","_restoreBuiltIns","_restoreConsole","U","event","reason","unhandledPromiseRejection","C","_promiseRejectionHandler","bind","addEventListener","Q","removeEventListener","trimHeadFrames","error","stacktrace","_getCaptureExceptionOptionsFromPlainObject","stack","computeStackTrace","_handleStackInfo","ex1","V","currentOptions","exKeys","Object","keys","sort","fingerprint","__serialized__","test","initialCall","fileurl","url","frames","_prepareFrames","reverse","_send","captureBreadcrumb","obj","crumb","timestamp","breadcrumbCallback","result","shift","plugin","pluginArgs","setUserContext","setExtraContext","_mergeContext","setTagsContext","tags","clearContext","getContext","parse","setEnvironment","environment","setRelease","dataCallback","setBreadcrumbCallback","setShouldSendCallback","shouldSendCallback","setTransport","transport","lastException","lastEventId","ravenNotConfiguredError","afterLoad","RavenConfig","showReportDialog","eventId","encode","encodeURIComponent","qs","email","globalServer","script","createElement","async","src","head","body","appendChild","M","setTimeout","_","eventType","evt","toUpperCase","createEvent","initEvent","createEventObject","dispatchEvent","fireEvent","toLowerCase","aa","evtName","_keypressTimeout","target","category","ca","debounceDuration","tagName","isContentEditable","timeout","_breadcrumbEventHandler","clearTimeout","da","from","to","parsedLoc","parsedTo","parsedFrom","protocol","host","relative","D","_originalFunctionToString","E","wrapTimeFn","orig","fn","Array","originalCallback","wrapEventTarget","proto","hasOwnProperty","capture","secure","handleEvent","err","before","clickHandler","keypressHandler","_keypressEventHandler","wrappedBuiltIns","requestAnimationFrame","cb","eventTargets","F","wrapProp","prop","xhrproto","XMLHttpRequest","origOpen","indexOf","__raven_xhr","status_code","origSend","onreadystatechangeHandler","readyState","status","props","j","onreadystatechange","origFetch","fetchInput","Request","fetchData","then","response","attachEvent","chrome","isChromePackagedApp","app","runtime","hasPushAndReplaceState","history","pushState","replaceState","oldOnPopState","onpopstate","currentHref","_captureUrlChange","historyReplacementFunction","origHistFunction","log","consoleMethodCallback","S","builtin","T","G","installer","concat","H","str","m","allowSecretKey","K","port","B","W","stackInfo","_triggerEvent","_processException","lineno","Y","frame","_normalizeFrame","in_app","ha","stackInfoUrl","normalized","filename","line","colno","column","function","ga","prefixedMessage","transaction","ia","request","Referer","breadcrumbs","_trimBreadcrumbs","ja","urlProp","urlProps","ka","httpData","userAgent","User-Agent","referrer","z","_backoffDuration","_backoffStart","na","oa","current","last","pa","_shouldBackoff","retry","get","getResponseHeader","parseInt","Z","baseData","project","platform","_getHttpData","serverName","server_name","_sanitizeData","forEach","random","_sendProcessedPayload","qa","sa","ra","_trimPacket","allowDuplicates","_isRepeatData","event_id","_getUuid","auth","sentry_version","sentry_client","sentry_key","sentry_secret","_makeRequest","onSuccess","onError","_setBackoffState","ta","opts","evaluatedHeaders","evaluatedFetchParameters","_evaluateHash","fetchParameters","defaultFetchOptions","fetchOptions","fetch","ok","hasCORS","XDomainRequest","replace","onload","onerror","open","setRequestHeader","send","ua","hash","evaluated","A","$","setUser","setReleaseContext","10","8","9","RavenConstructor","_Raven","noConflict","Client","what","supportsErrorEvent","ErrorEvent","supportsDOMError","DOMError","supportsDOMException","DOMException","Headers","Response","supportsPromiseRejectionEvent","PromiseRejectionEvent","normalizedData","obj1","obj2","isFrozen","object","patterns","pattern","sources","len","source","RegExp","join","pairs","match","query","fragment","crypto","msCrypto","getRandomValues","arr","Uint16Array","pad","num","v","c","elem","nextStr","MAX_TRAVERSE_HEIGHT","MAX_OUTPUT_LEN","out","height","separator","sepLength","htmlElementAsString","parentNode","className","classes","attr","attrWhitelist","getAttribute","isOnlyOneTruthy","b","isBothUndefined","ex2","stack1","stack2","frames1","frames2","replacement","track","input","delimiter","output","String","utf8Length","encodeURI","jsonSize","serializeValue","maxLength","serializeObject","depth","reduce","acc","map","val","maxSize","MAX_SERIALIZE_EXCEPTION_DEPTH","MAX_SERIALIZE_EXCEPTION_SIZE","serialized","filter","MAX_SERIALIZE_KEYS_LENGTH","usedKeys","sanitizeWorker","workerInput","k","sanitizeRegExp","sanitizeMask","safeInput","o_O","getLocationHref","getLocationOrigin","origin","hostname","_slice","UNKNOWN_FUNCTION","ERROR_TYPES_RE","handler","installGlobalHandler","handlers","unsubscribe","splice","unsubscribeAll","uninstallGlobalHandler","notifyHandlers","isWindowError","inner","traceKitWindowOnError","lineNo","colNo","lastExceptionStack","augmentStackTraceWithInitialElement","processLastException","groups","_oldOnerrorHandler","_onErrorHandlerInstalled","_lastExceptionStack","_lastArgs","lastArgs","rethrow","incomplete","computeStackTraceFromStackProp","submatch","parts","element","winjs","gecko","geckoEval","chromeEval","lines","isNative","isEval","columnNumber","responseText","sourceMaps","sourceMapAddress","charAt","initial","unshift","partial","computeStackTraceByWalkingCallerChain","item","functionName","funcs","recursion","curr","caller","substring","sourceURL","fileName","lineNumber","description","haystack","needle","replacer","spaces","cycleReplacer","serializer","stringifyError","thisPos","Infinity","getSerialize","safeAdd","x","y","lsw","msw","bitRotateLeft","cnt","md5cmn","q","md5ff","d","md5gg","md5hh","md5ii","binlMD5","olda","oldb","oldc","oldd","binl2rstr","length32","fromCharCode","rstr2binl","length8","charCodeAt","rstrMD5","rstrHMACMD5","bkey","ipad","opad","rstr2hex","hexTab","str2rstrUTF8","unescape","rawMD5","hexMD5","rawHMACMD5","hexHMACMD5","string","raw"],"mappings":"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","file":"raven.min.js"}
\ No newline at end of file
diff --git a/packages/raven-js/dist/angular,ember,require,vue/raven.js b/packages/raven-js/dist/angular,ember,require,vue/raven.js
new file mode 100644
index 000000000000..1a82503e2ea2
--- /dev/null
+++ b/packages/raven-js/dist/angular,ember,require,vue/raven.js
@@ -0,0 +1,4187 @@
+/*! Raven.js 3.25.2 (30b6d4e) | github.com/getsentry/raven-js */
+
+/*
+ * Includes TraceKit
+ * https://github.com/getsentry/TraceKit
+ *
+ * Copyright 2018 Matt Robenolt and other contributors
+ * Released under the BSD license
+ * https://github.com/getsentry/raven-js/blob/master/LICENSE
+ *
+ */
+
+(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Raven = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o' : 'anonymous component') +
+ (vm._isVue && vm.$options.__file ? ' at ' + vm.$options.__file : '')
+ );
+}
+
+function vuePlugin(Raven, Vue) {
+ Vue = Vue || window.Vue;
+
+ // quit if Vue isn't on the page
+ if (!Vue || !Vue.config) return;
+
+ var _oldOnError = Vue.config.errorHandler;
+ Vue.config.errorHandler = function VueErrorHandler(error, vm, info) {
+ var metaData = {};
+
+ // vm and lifecycleHook are not always available
+ if (Object.prototype.toString.call(vm) === '[object Object]') {
+ metaData.componentName = formatComponentName(vm);
+ metaData.propsData = vm.$options.propsData;
+ }
+
+ if (typeof info !== 'undefined') {
+ metaData.lifecycleHook = info;
+ }
+
+ Raven.captureException(error, {
+ extra: metaData
+ });
+
+ if (typeof _oldOnError === 'function') {
+ _oldOnError.call(this, error, vm, info);
+ }
+ };
+}
+
+module.exports = vuePlugin;
+
+_dereq_(8).addPlugin(module.exports);
+},{"8":8}],5:[function(_dereq_,module,exports){
+function RavenConfigError(message) {
+ this.name = 'RavenConfigError';
+ this.message = message;
+}
+RavenConfigError.prototype = new Error();
+RavenConfigError.prototype.constructor = RavenConfigError;
+
+module.exports = RavenConfigError;
+
+},{}],6:[function(_dereq_,module,exports){
+var utils = _dereq_(9);
+
+var wrapMethod = function(console, level, callback) {
+ var originalConsoleLevel = console[level];
+ var originalConsole = console;
+
+ if (!(level in console)) {
+ return;
+ }
+
+ var sentryLevel = level === 'warn' ? 'warning' : level;
+
+ console[level] = function() {
+ var args = [].slice.call(arguments);
+
+ var msg = utils.safeJoin(args, ' ');
+ var data = {level: sentryLevel, logger: 'console', extra: {arguments: args}};
+
+ if (level === 'assert') {
+ if (args[0] === false) {
+ // Default browsers message
+ msg =
+ 'Assertion failed: ' + (utils.safeJoin(args.slice(1), ' ') || 'console.assert');
+ data.extra.arguments = args.slice(1);
+ callback && callback(msg, data);
+ }
+ } else {
+ callback && callback(msg, data);
+ }
+
+ // this fails for some browsers. :(
+ if (originalConsoleLevel) {
+ // IE9 doesn't allow calling apply on console functions directly
+ // See: https://stackoverflow.com/questions/5472938/does-ie9-support-console-log-and-is-it-a-real-function#answer-5473193
+ Function.prototype.apply.call(originalConsoleLevel, originalConsole, args);
+ }
+ };
+};
+
+module.exports = {
+ wrapMethod: wrapMethod
+};
+
+},{"9":9}],7:[function(_dereq_,module,exports){
+(function (global){
+/*global XDomainRequest:false */
+
+var TraceKit = _dereq_(10);
+var stringify = _dereq_(11);
+var md5 = _dereq_(12);
+var RavenConfigError = _dereq_(5);
+
+var utils = _dereq_(9);
+var isErrorEvent = utils.isErrorEvent;
+var isDOMError = utils.isDOMError;
+var isDOMException = utils.isDOMException;
+var isError = utils.isError;
+var isObject = utils.isObject;
+var isPlainObject = utils.isPlainObject;
+var isUndefined = utils.isUndefined;
+var isFunction = utils.isFunction;
+var isString = utils.isString;
+var isArray = utils.isArray;
+var isEmptyObject = utils.isEmptyObject;
+var each = utils.each;
+var objectMerge = utils.objectMerge;
+var truncate = utils.truncate;
+var objectFrozen = utils.objectFrozen;
+var hasKey = utils.hasKey;
+var joinRegExp = utils.joinRegExp;
+var urlencode = utils.urlencode;
+var uuid4 = utils.uuid4;
+var htmlTreeAsString = utils.htmlTreeAsString;
+var isSameException = utils.isSameException;
+var isSameStacktrace = utils.isSameStacktrace;
+var parseUrl = utils.parseUrl;
+var fill = utils.fill;
+var supportsFetch = utils.supportsFetch;
+var supportsReferrerPolicy = utils.supportsReferrerPolicy;
+var serializeKeysForMessage = utils.serializeKeysForMessage;
+var serializeException = utils.serializeException;
+var sanitize = utils.sanitize;
+
+var wrapConsoleMethod = _dereq_(6).wrapMethod;
+
+var dsnKeys = 'source protocol user pass host port path'.split(' '),
+ dsnPattern = /^(?:(\w+):)?\/\/(?:(\w+)(:\w+)?@)?([\w\.-]+)(?::(\d+))?(\/.*)/;
+
+function now() {
+ return +new Date();
+}
+
+// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)
+var _window =
+ typeof window !== 'undefined'
+ ? window
+ : typeof global !== 'undefined'
+ ? global
+ : typeof self !== 'undefined'
+ ? self
+ : {};
+var _document = _window.document;
+var _navigator = _window.navigator;
+
+function keepOriginalCallback(original, callback) {
+ return isFunction(callback)
+ ? function(data) {
+ return callback(data, original);
+ }
+ : callback;
+}
+
+// First, check for JSON support
+// If there is no JSON, we no-op the core features of Raven
+// since JSON is required to encode the payload
+function Raven() {
+ this._hasJSON = !!(typeof JSON === 'object' && JSON.stringify);
+ // Raven can run in contexts where there's no document (react-native)
+ this._hasDocument = !isUndefined(_document);
+ this._hasNavigator = !isUndefined(_navigator);
+ this._lastCapturedException = null;
+ this._lastData = null;
+ this._lastEventId = null;
+ this._globalServer = null;
+ this._globalKey = null;
+ this._globalProject = null;
+ this._globalContext = {};
+ this._globalOptions = {
+ // SENTRY_RELEASE can be injected by https://github.com/getsentry/sentry-webpack-plugin
+ release: _window.SENTRY_RELEASE && _window.SENTRY_RELEASE.id,
+ logger: 'javascript',
+ ignoreErrors: [],
+ ignoreUrls: [],
+ whitelistUrls: [],
+ includePaths: [],
+ headers: null,
+ collectWindowErrors: true,
+ captureUnhandledRejections: true,
+ maxMessageLength: 0,
+ // By default, truncates URL values to 250 chars
+ maxUrlLength: 250,
+ stackTraceLimit: 50,
+ autoBreadcrumbs: true,
+ instrument: true,
+ sampleRate: 1,
+ sanitizeKeys: []
+ };
+ this._fetchDefaults = {
+ method: 'POST',
+ keepalive: true,
+ // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default
+ // https://caniuse.com/#feat=referrer-policy
+ // It doesn't. And it throw exception instead of ignoring this parameter...
+ // REF: https://github.com/getsentry/raven-js/issues/1233
+ referrerPolicy: supportsReferrerPolicy() ? 'origin' : ''
+ };
+ this._ignoreOnError = 0;
+ this._isRavenInstalled = false;
+ this._originalErrorStackTraceLimit = Error.stackTraceLimit;
+ // capture references to window.console *and* all its methods first
+ // before the console plugin has a chance to monkey patch
+ this._originalConsole = _window.console || {};
+ this._originalConsoleMethods = {};
+ this._plugins = [];
+ this._startTime = now();
+ this._wrappedBuiltIns = [];
+ this._breadcrumbs = [];
+ this._lastCapturedEvent = null;
+ this._keypressTimeout;
+ this._location = _window.location;
+ this._lastHref = this._location && this._location.href;
+ this._resetBackoff();
+
+ // eslint-disable-next-line guard-for-in
+ for (var method in this._originalConsole) {
+ this._originalConsoleMethods[method] = this._originalConsole[method];
+ }
+}
+
+/*
+ * The core Raven singleton
+ *
+ * @this {Raven}
+ */
+
+Raven.prototype = {
+ // Hardcode version string so that raven source can be loaded directly via
+ // webpack (using a build step causes webpack #1617). Grunt verifies that
+ // this value matches package.json during build.
+ // See: https://github.com/getsentry/raven-js/issues/465
+ VERSION: '3.25.2',
+
+ debug: false,
+
+ TraceKit: TraceKit, // alias to TraceKit
+
+ /*
+ * Configure Raven with a DSN and extra options
+ *
+ * @param {string} dsn The public Sentry DSN
+ * @param {object} options Set of global options [optional]
+ * @return {Raven}
+ */
+ config: function(dsn, options) {
+ var self = this;
+
+ if (self._globalServer) {
+ this._logDebug('error', 'Error: Raven has already been configured');
+ return self;
+ }
+ if (!dsn) return self;
+
+ var globalOptions = self._globalOptions;
+
+ // merge in options
+ if (options) {
+ each(options, function(key, value) {
+ // tags and extra are special and need to be put into context
+ if (key === 'tags' || key === 'extra' || key === 'user') {
+ self._globalContext[key] = value;
+ } else {
+ globalOptions[key] = value;
+ }
+ });
+ }
+
+ self.setDSN(dsn);
+
+ // "Script error." is hard coded into browsers for errors that it can't read.
+ // this is the result of a script being pulled in from an external domain and CORS.
+ globalOptions.ignoreErrors.push(/^Script error\.?$/);
+ globalOptions.ignoreErrors.push(/^Javascript error: Script error\.? on line 0$/);
+
+ // join regexp rules into one big rule
+ globalOptions.ignoreErrors = joinRegExp(globalOptions.ignoreErrors);
+ globalOptions.ignoreUrls = globalOptions.ignoreUrls.length
+ ? joinRegExp(globalOptions.ignoreUrls)
+ : false;
+ globalOptions.whitelistUrls = globalOptions.whitelistUrls.length
+ ? joinRegExp(globalOptions.whitelistUrls)
+ : false;
+ globalOptions.includePaths = joinRegExp(globalOptions.includePaths);
+ globalOptions.maxBreadcrumbs = Math.max(
+ 0,
+ Math.min(globalOptions.maxBreadcrumbs || 100, 100)
+ ); // default and hard limit is 100
+
+ var autoBreadcrumbDefaults = {
+ xhr: true,
+ console: true,
+ dom: true,
+ location: true,
+ sentry: true
+ };
+
+ var autoBreadcrumbs = globalOptions.autoBreadcrumbs;
+ if ({}.toString.call(autoBreadcrumbs) === '[object Object]') {
+ autoBreadcrumbs = objectMerge(autoBreadcrumbDefaults, autoBreadcrumbs);
+ } else if (autoBreadcrumbs !== false) {
+ autoBreadcrumbs = autoBreadcrumbDefaults;
+ }
+ globalOptions.autoBreadcrumbs = autoBreadcrumbs;
+
+ var instrumentDefaults = {
+ tryCatch: true
+ };
+
+ var instrument = globalOptions.instrument;
+ if ({}.toString.call(instrument) === '[object Object]') {
+ instrument = objectMerge(instrumentDefaults, instrument);
+ } else if (instrument !== false) {
+ instrument = instrumentDefaults;
+ }
+ globalOptions.instrument = instrument;
+
+ TraceKit.collectWindowErrors = !!globalOptions.collectWindowErrors;
+
+ // return for chaining
+ return self;
+ },
+
+ /*
+ * Installs a global window.onerror error handler
+ * to capture and report uncaught exceptions.
+ * At this point, install() is required to be called due
+ * to the way TraceKit is set up.
+ *
+ * @return {Raven}
+ */
+ install: function() {
+ var self = this;
+ if (self.isSetup() && !self._isRavenInstalled) {
+ TraceKit.report.subscribe(function() {
+ self._handleOnErrorStackInfo.apply(self, arguments);
+ });
+
+ if (self._globalOptions.captureUnhandledRejections) {
+ self._attachPromiseRejectionHandler();
+ }
+
+ self._patchFunctionToString();
+
+ if (self._globalOptions.instrument && self._globalOptions.instrument.tryCatch) {
+ self._instrumentTryCatch();
+ }
+
+ if (self._globalOptions.autoBreadcrumbs) self._instrumentBreadcrumbs();
+
+ // Install all of the plugins
+ self._drainPlugins();
+
+ self._isRavenInstalled = true;
+ }
+
+ Error.stackTraceLimit = self._globalOptions.stackTraceLimit;
+ return this;
+ },
+
+ /*
+ * Set the DSN (can be called multiple time unlike config)
+ *
+ * @param {string} dsn The public Sentry DSN
+ */
+ setDSN: function(dsn) {
+ var self = this,
+ uri = self._parseDSN(dsn),
+ lastSlash = uri.path.lastIndexOf('/'),
+ path = uri.path.substr(1, lastSlash);
+
+ self._dsn = dsn;
+ self._globalKey = uri.user;
+ self._globalSecret = uri.pass && uri.pass.substr(1);
+ self._globalProject = uri.path.substr(lastSlash + 1);
+
+ self._globalServer = self._getGlobalServer(uri);
+
+ self._globalEndpoint =
+ self._globalServer + '/' + path + 'api/' + self._globalProject + '/store/';
+
+ // Reset backoff state since we may be pointing at a
+ // new project/server
+ this._resetBackoff();
+ },
+
+ /*
+ * Wrap code within a context so Raven can capture errors
+ * reliably across domains that is executed immediately.
+ *
+ * @param {object} options A specific set of options for this context [optional]
+ * @param {function} func The callback to be immediately executed within the context
+ * @param {array} args An array of arguments to be called with the callback [optional]
+ */
+ context: function(options, func, args) {
+ if (isFunction(options)) {
+ args = func || [];
+ func = options;
+ options = undefined;
+ }
+
+ return this.wrap(options, func).apply(this, args);
+ },
+
+ /*
+ * Wrap code within a context and returns back a new function to be executed
+ *
+ * @param {object} options A specific set of options for this context [optional]
+ * @param {function} func The function to be wrapped in a new context
+ * @param {function} func A function to call before the try/catch wrapper [optional, private]
+ * @return {function} The newly wrapped functions with a context
+ */
+ wrap: function(options, func, _before) {
+ var self = this;
+ // 1 argument has been passed, and it's not a function
+ // so just return it
+ if (isUndefined(func) && !isFunction(options)) {
+ return options;
+ }
+
+ // options is optional
+ if (isFunction(options)) {
+ func = options;
+ options = undefined;
+ }
+
+ // At this point, we've passed along 2 arguments, and the second one
+ // is not a function either, so we'll just return the second argument.
+ if (!isFunction(func)) {
+ return func;
+ }
+
+ // We don't wanna wrap it twice!
+ try {
+ if (func.__raven__) {
+ return func;
+ }
+
+ // If this has already been wrapped in the past, return that
+ if (func.__raven_wrapper__) {
+ return func.__raven_wrapper__;
+ }
+ } catch (e) {
+ // Just accessing custom props in some Selenium environments
+ // can cause a "Permission denied" exception (see raven-js#495).
+ // Bail on wrapping and return the function as-is (defers to window.onerror).
+ return func;
+ }
+
+ function wrapped() {
+ var args = [],
+ i = arguments.length,
+ deep = !options || (options && options.deep !== false);
+
+ if (_before && isFunction(_before)) {
+ _before.apply(this, arguments);
+ }
+
+ // Recursively wrap all of a function's arguments that are
+ // functions themselves.
+ while (i--) args[i] = deep ? self.wrap(options, arguments[i]) : arguments[i];
+
+ try {
+ // Attempt to invoke user-land function
+ // NOTE: If you are a Sentry user, and you are seeing this stack frame, it
+ // means Raven caught an error invoking your application code. This is
+ // expected behavior and NOT indicative of a bug with Raven.js.
+ return func.apply(this, args);
+ } catch (e) {
+ self._ignoreNextOnError();
+ self.captureException(e, options);
+ throw e;
+ }
+ }
+
+ // copy over properties of the old function
+ for (var property in func) {
+ if (hasKey(func, property)) {
+ wrapped[property] = func[property];
+ }
+ }
+ wrapped.prototype = func.prototype;
+
+ func.__raven_wrapper__ = wrapped;
+ // Signal that this function has been wrapped/filled already
+ // for both debugging and to prevent it to being wrapped/filled twice
+ wrapped.__raven__ = true;
+ wrapped.__orig__ = func;
+
+ return wrapped;
+ },
+
+ /**
+ * Uninstalls the global error handler.
+ *
+ * @return {Raven}
+ */
+ uninstall: function() {
+ TraceKit.report.uninstall();
+
+ this._detachPromiseRejectionHandler();
+ this._unpatchFunctionToString();
+ this._restoreBuiltIns();
+ this._restoreConsole();
+
+ Error.stackTraceLimit = this._originalErrorStackTraceLimit;
+ this._isRavenInstalled = false;
+
+ return this;
+ },
+
+ /**
+ * Callback used for `unhandledrejection` event
+ *
+ * @param {PromiseRejectionEvent} event An object containing
+ * promise: the Promise that was rejected
+ * reason: the value with which the Promise was rejected
+ * @return void
+ */
+ _promiseRejectionHandler: function(event) {
+ this._logDebug('debug', 'Raven caught unhandled promise rejection:', event);
+ this.captureException(event.reason, {
+ extra: {
+ unhandledPromiseRejection: true
+ }
+ });
+ },
+
+ /**
+ * Installs the global promise rejection handler.
+ *
+ * @return {raven}
+ */
+ _attachPromiseRejectionHandler: function() {
+ this._promiseRejectionHandler = this._promiseRejectionHandler.bind(this);
+ _window.addEventListener &&
+ _window.addEventListener('unhandledrejection', this._promiseRejectionHandler);
+ return this;
+ },
+
+ /**
+ * Uninstalls the global promise rejection handler.
+ *
+ * @return {raven}
+ */
+ _detachPromiseRejectionHandler: function() {
+ _window.removeEventListener &&
+ _window.removeEventListener('unhandledrejection', this._promiseRejectionHandler);
+ return this;
+ },
+
+ /**
+ * Manually capture an exception and send it over to Sentry
+ *
+ * @param {error} ex An exception to be logged
+ * @param {object} options A specific set of options for this error [optional]
+ * @return {Raven}
+ */
+ captureException: function(ex, options) {
+ options = objectMerge({trimHeadFrames: 0}, options ? options : {});
+
+ if (isErrorEvent(ex) && ex.error) {
+ // If it is an ErrorEvent with `error` property, extract it to get actual Error
+ ex = ex.error;
+ } else if (isDOMError(ex) || isDOMException(ex)) {
+ // If it is a DOMError or DOMException (which are legacy APIs, but still supported in some browsers)
+ // then we just extract the name and message, as they don't provide anything else
+ // https://developer.mozilla.org/en-US/docs/Web/API/DOMError
+ // https://developer.mozilla.org/en-US/docs/Web/API/DOMException
+ var name = ex.name || (isDOMError(ex) ? 'DOMError' : 'DOMException');
+ var message = ex.message ? name + ': ' + ex.message : name;
+
+ return this.captureMessage(
+ message,
+ objectMerge(options, {
+ // neither DOMError or DOMException provide stack trace and we most likely wont get it this way as well
+ // but it's barely any overhead so we may at least try
+ stacktrace: true,
+ trimHeadFrames: options.trimHeadFrames + 1
+ })
+ );
+ } else if (isError(ex)) {
+ // we have a real Error object
+ ex = ex;
+ } else if (isPlainObject(ex)) {
+ // If it is plain Object, serialize it manually and extract options
+ // This will allow us to group events based on top-level keys
+ // which is much better than creating new group when any key/value change
+ options = this._getCaptureExceptionOptionsFromPlainObject(options, ex);
+ ex = new Error(options.message);
+ } else {
+ // If none of previous checks were valid, then it means that
+ // it's not a DOMError/DOMException
+ // it's not a plain Object
+ // it's not a valid ErrorEvent (one with an error property)
+ // it's not an Error
+ // So bail out and capture it as a simple message:
+ return this.captureMessage(
+ ex,
+ objectMerge(options, {
+ stacktrace: true, // if we fall back to captureMessage, default to attempting a new trace
+ trimHeadFrames: options.trimHeadFrames + 1
+ })
+ );
+ }
+
+ // Store the raw exception object for potential debugging and introspection
+ this._lastCapturedException = ex;
+
+ // TraceKit.report will re-raise any exception passed to it,
+ // which means you have to wrap it in try/catch. Instead, we
+ // can wrap it here and only re-raise if TraceKit.report
+ // raises an exception different from the one we asked to
+ // report on.
+ try {
+ var stack = TraceKit.computeStackTrace(ex);
+ this._handleStackInfo(stack, options);
+ } catch (ex1) {
+ if (ex !== ex1) {
+ throw ex1;
+ }
+ }
+
+ return this;
+ },
+
+ _getCaptureExceptionOptionsFromPlainObject: function(currentOptions, ex) {
+ var exKeys = Object.keys(ex).sort();
+ var options = objectMerge(currentOptions, {
+ message:
+ 'Non-Error exception captured with keys: ' + serializeKeysForMessage(exKeys),
+ fingerprint: [md5(exKeys)],
+ extra: currentOptions.extra || {}
+ });
+ options.extra.__serialized__ = serializeException(ex);
+
+ return options;
+ },
+
+ /*
+ * Manually send a message to Sentry
+ *
+ * @param {string} msg A plain message to be captured in Sentry
+ * @param {object} options A specific set of options for this message [optional]
+ * @return {Raven}
+ */
+ captureMessage: function(msg, options) {
+ // config() automagically converts ignoreErrors from a list to a RegExp so we need to test for an
+ // early call; we'll error on the side of logging anything called before configuration since it's
+ // probably something you should see:
+ if (
+ !!this._globalOptions.ignoreErrors.test &&
+ this._globalOptions.ignoreErrors.test(msg)
+ ) {
+ return;
+ }
+
+ options = options || {};
+ msg = msg + ''; // Make sure it's actually a string
+
+ var data = objectMerge(
+ {
+ message: msg
+ },
+ options
+ );
+
+ var ex;
+ // Generate a "synthetic" stack trace from this point.
+ // NOTE: If you are a Sentry user, and you are seeing this stack frame, it is NOT indicative
+ // of a bug with Raven.js. Sentry generates synthetic traces either by configuration,
+ // or if it catches a thrown object without a "stack" property.
+ try {
+ throw new Error(msg);
+ } catch (ex1) {
+ ex = ex1;
+ }
+
+ // null exception name so `Error` isn't prefixed to msg
+ ex.name = null;
+ var stack = TraceKit.computeStackTrace(ex);
+
+ // stack[0] is `throw new Error(msg)` call itself, we are interested in the frame that was just before that, stack[1]
+ var initialCall = isArray(stack.stack) && stack.stack[1];
+
+ // if stack[1] is `Raven.captureException`, it means that someone passed a string to it and we redirected that call
+ // to be handled by `captureMessage`, thus `initialCall` is the 3rd one, not 2nd
+ // initialCall => captureException(string) => captureMessage(string)
+ if (initialCall && initialCall.func === 'Raven.captureException') {
+ initialCall = stack.stack[2];
+ }
+
+ var fileurl = (initialCall && initialCall.url) || '';
+
+ if (
+ !!this._globalOptions.ignoreUrls.test &&
+ this._globalOptions.ignoreUrls.test(fileurl)
+ ) {
+ return;
+ }
+
+ if (
+ !!this._globalOptions.whitelistUrls.test &&
+ !this._globalOptions.whitelistUrls.test(fileurl)
+ ) {
+ return;
+ }
+
+ if (this._globalOptions.stacktrace || (options && options.stacktrace)) {
+ // fingerprint on msg, not stack trace (legacy behavior, could be revisited)
+ data.fingerprint = data.fingerprint == null ? msg : data.fingerprint;
+
+ options = objectMerge(
+ {
+ trimHeadFrames: 0
+ },
+ options
+ );
+ // Since we know this is a synthetic trace, the top frame (this function call)
+ // MUST be from Raven.js, so mark it for trimming
+ // We add to the trim counter so that callers can choose to trim extra frames, such
+ // as utility functions.
+ options.trimHeadFrames += 1;
+
+ var frames = this._prepareFrames(stack, options);
+ data.stacktrace = {
+ // Sentry expects frames oldest to newest
+ frames: frames.reverse()
+ };
+ }
+
+ // Make sure that fingerprint is always wrapped in an array
+ if (data.fingerprint) {
+ data.fingerprint = isArray(data.fingerprint)
+ ? data.fingerprint
+ : [data.fingerprint];
+ }
+
+ // Fire away!
+ this._send(data);
+
+ return this;
+ },
+
+ captureBreadcrumb: function(obj) {
+ var crumb = objectMerge(
+ {
+ timestamp: now() / 1000
+ },
+ obj
+ );
+
+ if (isFunction(this._globalOptions.breadcrumbCallback)) {
+ var result = this._globalOptions.breadcrumbCallback(crumb);
+
+ if (isObject(result) && !isEmptyObject(result)) {
+ crumb = result;
+ } else if (result === false) {
+ return this;
+ }
+ }
+
+ this._breadcrumbs.push(crumb);
+ if (this._breadcrumbs.length > this._globalOptions.maxBreadcrumbs) {
+ this._breadcrumbs.shift();
+ }
+ return this;
+ },
+
+ addPlugin: function(plugin /*arg1, arg2, ... argN*/) {
+ var pluginArgs = [].slice.call(arguments, 1);
+
+ this._plugins.push([plugin, pluginArgs]);
+ if (this._isRavenInstalled) {
+ this._drainPlugins();
+ }
+
+ return this;
+ },
+
+ /*
+ * Set/clear a user to be sent along with the payload.
+ *
+ * @param {object} user An object representing user data [optional]
+ * @return {Raven}
+ */
+ setUserContext: function(user) {
+ // Intentionally do not merge here since that's an unexpected behavior.
+ this._globalContext.user = user;
+
+ return this;
+ },
+
+ /*
+ * Merge extra attributes to be sent along with the payload.
+ *
+ * @param {object} extra An object representing extra data [optional]
+ * @return {Raven}
+ */
+ setExtraContext: function(extra) {
+ this._mergeContext('extra', extra);
+
+ return this;
+ },
+
+ /*
+ * Merge tags to be sent along with the payload.
+ *
+ * @param {object} tags An object representing tags [optional]
+ * @return {Raven}
+ */
+ setTagsContext: function(tags) {
+ this._mergeContext('tags', tags);
+
+ return this;
+ },
+
+ /*
+ * Clear all of the context.
+ *
+ * @return {Raven}
+ */
+ clearContext: function() {
+ this._globalContext = {};
+
+ return this;
+ },
+
+ /*
+ * Get a copy of the current context. This cannot be mutated.
+ *
+ * @return {object} copy of context
+ */
+ getContext: function() {
+ // lol javascript
+ return JSON.parse(stringify(this._globalContext));
+ },
+
+ /*
+ * Set environment of application
+ *
+ * @param {string} environment Typically something like 'production'.
+ * @return {Raven}
+ */
+ setEnvironment: function(environment) {
+ this._globalOptions.environment = environment;
+
+ return this;
+ },
+
+ /*
+ * Set release version of application
+ *
+ * @param {string} release Typically something like a git SHA to identify version
+ * @return {Raven}
+ */
+ setRelease: function(release) {
+ this._globalOptions.release = release;
+
+ return this;
+ },
+
+ /*
+ * Set the dataCallback option
+ *
+ * @param {function} callback The callback to run which allows the
+ * data blob to be mutated before sending
+ * @return {Raven}
+ */
+ setDataCallback: function(callback) {
+ var original = this._globalOptions.dataCallback;
+ this._globalOptions.dataCallback = keepOriginalCallback(original, callback);
+ return this;
+ },
+
+ /*
+ * Set the breadcrumbCallback option
+ *
+ * @param {function} callback The callback to run which allows filtering
+ * or mutating breadcrumbs
+ * @return {Raven}
+ */
+ setBreadcrumbCallback: function(callback) {
+ var original = this._globalOptions.breadcrumbCallback;
+ this._globalOptions.breadcrumbCallback = keepOriginalCallback(original, callback);
+ return this;
+ },
+
+ /*
+ * Set the shouldSendCallback option
+ *
+ * @param {function} callback The callback to run which allows
+ * introspecting the blob before sending
+ * @return {Raven}
+ */
+ setShouldSendCallback: function(callback) {
+ var original = this._globalOptions.shouldSendCallback;
+ this._globalOptions.shouldSendCallback = keepOriginalCallback(original, callback);
+ return this;
+ },
+
+ /**
+ * Override the default HTTP transport mechanism that transmits data
+ * to the Sentry server.
+ *
+ * @param {function} transport Function invoked instead of the default
+ * `makeRequest` handler.
+ *
+ * @return {Raven}
+ */
+ setTransport: function(transport) {
+ this._globalOptions.transport = transport;
+
+ return this;
+ },
+
+ /*
+ * Get the latest raw exception that was captured by Raven.
+ *
+ * @return {error}
+ */
+ lastException: function() {
+ return this._lastCapturedException;
+ },
+
+ /*
+ * Get the last event id
+ *
+ * @return {string}
+ */
+ lastEventId: function() {
+ return this._lastEventId;
+ },
+
+ /*
+ * Determine if Raven is setup and ready to go.
+ *
+ * @return {boolean}
+ */
+ isSetup: function() {
+ if (!this._hasJSON) return false; // needs JSON support
+ if (!this._globalServer) {
+ if (!this.ravenNotConfiguredError) {
+ this.ravenNotConfiguredError = true;
+ this._logDebug('error', 'Error: Raven has not been configured.');
+ }
+ return false;
+ }
+ return true;
+ },
+
+ afterLoad: function() {
+ // TODO: remove window dependence?
+
+ // Attempt to initialize Raven on load
+ var RavenConfig = _window.RavenConfig;
+ if (RavenConfig) {
+ this.config(RavenConfig.dsn, RavenConfig.config).install();
+ }
+ },
+
+ showReportDialog: function(options) {
+ if (
+ !_document // doesn't work without a document (React native)
+ )
+ return;
+
+ options = options || {};
+
+ var lastEventId = options.eventId || this.lastEventId();
+ if (!lastEventId) {
+ throw new RavenConfigError('Missing eventId');
+ }
+
+ var dsn = options.dsn || this._dsn;
+ if (!dsn) {
+ throw new RavenConfigError('Missing DSN');
+ }
+
+ var encode = encodeURIComponent;
+ var qs = '';
+ qs += '?eventId=' + encode(lastEventId);
+ qs += '&dsn=' + encode(dsn);
+
+ var user = options.user || this._globalContext.user;
+ if (user) {
+ if (user.name) qs += '&name=' + encode(user.name);
+ if (user.email) qs += '&email=' + encode(user.email);
+ }
+
+ var globalServer = this._getGlobalServer(this._parseDSN(dsn));
+
+ var script = _document.createElement('script');
+ script.async = true;
+ script.src = globalServer + '/api/embed/error-page/' + qs;
+ (_document.head || _document.body).appendChild(script);
+ },
+
+ /**** Private functions ****/
+ _ignoreNextOnError: function() {
+ var self = this;
+ this._ignoreOnError += 1;
+ setTimeout(function() {
+ // onerror should trigger before setTimeout
+ self._ignoreOnError -= 1;
+ });
+ },
+
+ _triggerEvent: function(eventType, options) {
+ // NOTE: `event` is a native browser thing, so let's avoid conflicting wiht it
+ var evt, key;
+
+ if (!this._hasDocument) return;
+
+ options = options || {};
+
+ eventType = 'raven' + eventType.substr(0, 1).toUpperCase() + eventType.substr(1);
+
+ if (_document.createEvent) {
+ evt = _document.createEvent('HTMLEvents');
+ evt.initEvent(eventType, true, true);
+ } else {
+ evt = _document.createEventObject();
+ evt.eventType = eventType;
+ }
+
+ for (key in options)
+ if (hasKey(options, key)) {
+ evt[key] = options[key];
+ }
+
+ if (_document.createEvent) {
+ // IE9 if standards
+ _document.dispatchEvent(evt);
+ } else {
+ // IE8 regardless of Quirks or Standards
+ // IE9 if quirks
+ try {
+ _document.fireEvent('on' + evt.eventType.toLowerCase(), evt);
+ } catch (e) {
+ // Do nothing
+ }
+ }
+ },
+
+ /**
+ * Wraps addEventListener to capture UI breadcrumbs
+ * @param evtName the event name (e.g. "click")
+ * @returns {Function}
+ * @private
+ */
+ _breadcrumbEventHandler: function(evtName) {
+ var self = this;
+ return function(evt) {
+ // reset keypress timeout; e.g. triggering a 'click' after
+ // a 'keypress' will reset the keypress debounce so that a new
+ // set of keypresses can be recorded
+ self._keypressTimeout = null;
+
+ // It's possible this handler might trigger multiple times for the same
+ // event (e.g. event propagation through node ancestors). Ignore if we've
+ // already captured the event.
+ if (self._lastCapturedEvent === evt) return;
+
+ self._lastCapturedEvent = evt;
+
+ // try/catch both:
+ // - accessing evt.target (see getsentry/raven-js#838, #768)
+ // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly
+ // can throw an exception in some circumstances.
+ var target;
+ try {
+ target = htmlTreeAsString(evt.target);
+ } catch (e) {
+ target = '';
+ }
+
+ self.captureBreadcrumb({
+ category: 'ui.' + evtName, // e.g. ui.click, ui.input
+ message: target
+ });
+ };
+ },
+
+ /**
+ * Wraps addEventListener to capture keypress UI events
+ * @returns {Function}
+ * @private
+ */
+ _keypressEventHandler: function() {
+ var self = this,
+ debounceDuration = 1000; // milliseconds
+
+ // TODO: if somehow user switches keypress target before
+ // debounce timeout is triggered, we will only capture
+ // a single breadcrumb from the FIRST target (acceptable?)
+ return function(evt) {
+ var target;
+ try {
+ target = evt.target;
+ } catch (e) {
+ // just accessing event properties can throw an exception in some rare circumstances
+ // see: https://github.com/getsentry/raven-js/issues/838
+ return;
+ }
+ var tagName = target && target.tagName;
+
+ // only consider keypress events on actual input elements
+ // this will disregard keypresses targeting body (e.g. tabbing
+ // through elements, hotkeys, etc)
+ if (
+ !tagName ||
+ (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && !target.isContentEditable)
+ )
+ return;
+
+ // record first keypress in a series, but ignore subsequent
+ // keypresses until debounce clears
+ var timeout = self._keypressTimeout;
+ if (!timeout) {
+ self._breadcrumbEventHandler('input')(evt);
+ }
+ clearTimeout(timeout);
+ self._keypressTimeout = setTimeout(function() {
+ self._keypressTimeout = null;
+ }, debounceDuration);
+ };
+ },
+
+ /**
+ * Captures a breadcrumb of type "navigation", normalizing input URLs
+ * @param to the originating URL
+ * @param from the target URL
+ * @private
+ */
+ _captureUrlChange: function(from, to) {
+ var parsedLoc = parseUrl(this._location.href);
+ var parsedTo = parseUrl(to);
+ var parsedFrom = parseUrl(from);
+
+ // because onpopstate only tells you the "new" (to) value of location.href, and
+ // not the previous (from) value, we need to track the value of the current URL
+ // state ourselves
+ this._lastHref = to;
+
+ // Use only the path component of the URL if the URL matches the current
+ // document (almost all the time when using pushState)
+ if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host)
+ to = parsedTo.relative;
+ if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host)
+ from = parsedFrom.relative;
+
+ this.captureBreadcrumb({
+ category: 'navigation',
+ data: {
+ to: to,
+ from: from
+ }
+ });
+ },
+
+ _patchFunctionToString: function() {
+ var self = this;
+ self._originalFunctionToString = Function.prototype.toString;
+ // eslint-disable-next-line no-extend-native
+ Function.prototype.toString = function() {
+ if (typeof this === 'function' && this.__raven__) {
+ return self._originalFunctionToString.apply(this.__orig__, arguments);
+ }
+ return self._originalFunctionToString.apply(this, arguments);
+ };
+ },
+
+ _unpatchFunctionToString: function() {
+ if (this._originalFunctionToString) {
+ // eslint-disable-next-line no-extend-native
+ Function.prototype.toString = this._originalFunctionToString;
+ }
+ },
+
+ /**
+ * Wrap timer functions and event targets to catch errors and provide
+ * better metadata.
+ */
+ _instrumentTryCatch: function() {
+ var self = this;
+
+ var wrappedBuiltIns = self._wrappedBuiltIns;
+
+ function wrapTimeFn(orig) {
+ return function(fn, t) {
+ // preserve arity
+ // Make a copy of the arguments to prevent deoptimization
+ // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments
+ var args = new Array(arguments.length);
+ for (var i = 0; i < args.length; ++i) {
+ args[i] = arguments[i];
+ }
+ var originalCallback = args[0];
+ if (isFunction(originalCallback)) {
+ args[0] = self.wrap(originalCallback);
+ }
+
+ // IE < 9 doesn't support .call/.apply on setInterval/setTimeout, but it
+ // also supports only two arguments and doesn't care what this is, so we
+ // can just call the original function directly.
+ if (orig.apply) {
+ return orig.apply(this, args);
+ } else {
+ return orig(args[0], args[1]);
+ }
+ };
+ }
+
+ var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;
+
+ function wrapEventTarget(global) {
+ var proto = _window[global] && _window[global].prototype;
+ if (proto && proto.hasOwnProperty && proto.hasOwnProperty('addEventListener')) {
+ fill(
+ proto,
+ 'addEventListener',
+ function(orig) {
+ return function(evtName, fn, capture, secure) {
+ // preserve arity
+ try {
+ if (fn && fn.handleEvent) {
+ fn.handleEvent = self.wrap(fn.handleEvent);
+ }
+ } catch (err) {
+ // can sometimes get 'Permission denied to access property "handle Event'
+ }
+
+ // More breadcrumb DOM capture ... done here and not in `_instrumentBreadcrumbs`
+ // so that we don't have more than one wrapper function
+ var before, clickHandler, keypressHandler;
+
+ if (
+ autoBreadcrumbs &&
+ autoBreadcrumbs.dom &&
+ (global === 'EventTarget' || global === 'Node')
+ ) {
+ // NOTE: generating multiple handlers per addEventListener invocation, should
+ // revisit and verify we can just use one (almost certainly)
+ clickHandler = self._breadcrumbEventHandler('click');
+ keypressHandler = self._keypressEventHandler();
+ before = function(evt) {
+ // need to intercept every DOM event in `before` argument, in case that
+ // same wrapped method is re-used for different events (e.g. mousemove THEN click)
+ // see #724
+ if (!evt) return;
+
+ var eventType;
+ try {
+ eventType = evt.type;
+ } catch (e) {
+ // just accessing event properties can throw an exception in some rare circumstances
+ // see: https://github.com/getsentry/raven-js/issues/838
+ return;
+ }
+ if (eventType === 'click') return clickHandler(evt);
+ else if (eventType === 'keypress') return keypressHandler(evt);
+ };
+ }
+ return orig.call(
+ this,
+ evtName,
+ self.wrap(fn, undefined, before),
+ capture,
+ secure
+ );
+ };
+ },
+ wrappedBuiltIns
+ );
+ fill(
+ proto,
+ 'removeEventListener',
+ function(orig) {
+ return function(evt, fn, capture, secure) {
+ try {
+ fn = fn && (fn.__raven_wrapper__ ? fn.__raven_wrapper__ : fn);
+ } catch (e) {
+ // ignore, accessing __raven_wrapper__ will throw in some Selenium environments
+ }
+ return orig.call(this, evt, fn, capture, secure);
+ };
+ },
+ wrappedBuiltIns
+ );
+ }
+ }
+
+ fill(_window, 'setTimeout', wrapTimeFn, wrappedBuiltIns);
+ fill(_window, 'setInterval', wrapTimeFn, wrappedBuiltIns);
+ if (_window.requestAnimationFrame) {
+ fill(
+ _window,
+ 'requestAnimationFrame',
+ function(orig) {
+ return function(cb) {
+ return orig(self.wrap(cb));
+ };
+ },
+ wrappedBuiltIns
+ );
+ }
+
+ // event targets borrowed from bugsnag-js:
+ // https://github.com/bugsnag/bugsnag-js/blob/master/src/bugsnag.js#L666
+ var eventTargets = [
+ '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'
+ ];
+ for (var i = 0; i < eventTargets.length; i++) {
+ wrapEventTarget(eventTargets[i]);
+ }
+ },
+
+ /**
+ * Instrument browser built-ins w/ breadcrumb capturing
+ * - XMLHttpRequests
+ * - DOM interactions (click/typing)
+ * - window.location changes
+ * - console
+ *
+ * Can be disabled or individually configured via the `autoBreadcrumbs` config option
+ */
+ _instrumentBreadcrumbs: function() {
+ var self = this;
+ var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;
+
+ var wrappedBuiltIns = self._wrappedBuiltIns;
+
+ function wrapProp(prop, xhr) {
+ if (prop in xhr && isFunction(xhr[prop])) {
+ fill(xhr, prop, function(orig) {
+ return self.wrap(orig);
+ }); // intentionally don't track filled methods on XHR instances
+ }
+ }
+
+ if (autoBreadcrumbs.xhr && 'XMLHttpRequest' in _window) {
+ var xhrproto = _window.XMLHttpRequest && _window.XMLHttpRequest.prototype;
+ fill(
+ xhrproto,
+ 'open',
+ function(origOpen) {
+ return function(method, url) {
+ // preserve arity
+
+ // if Sentry key appears in URL, don't capture
+ if (isString(url) && url.indexOf(self._globalKey) === -1) {
+ this.__raven_xhr = {
+ method: method,
+ url: url,
+ status_code: null
+ };
+ }
+
+ return origOpen.apply(this, arguments);
+ };
+ },
+ wrappedBuiltIns
+ );
+
+ fill(
+ xhrproto,
+ 'send',
+ function(origSend) {
+ return function() {
+ // preserve arity
+ var xhr = this;
+
+ function onreadystatechangeHandler() {
+ if (xhr.__raven_xhr && xhr.readyState === 4) {
+ try {
+ // touching statusCode in some platforms throws
+ // an exception
+ xhr.__raven_xhr.status_code = xhr.status;
+ } catch (e) {
+ /* do nothing */
+ }
+
+ self.captureBreadcrumb({
+ type: 'http',
+ category: 'xhr',
+ data: xhr.__raven_xhr
+ });
+ }
+ }
+
+ var props = ['onload', 'onerror', 'onprogress'];
+ for (var j = 0; j < props.length; j++) {
+ wrapProp(props[j], xhr);
+ }
+
+ if ('onreadystatechange' in xhr && isFunction(xhr.onreadystatechange)) {
+ fill(
+ xhr,
+ 'onreadystatechange',
+ function(orig) {
+ return self.wrap(orig, undefined, onreadystatechangeHandler);
+ } /* intentionally don't track this instrumentation */
+ );
+ } else {
+ // if onreadystatechange wasn't actually set by the page on this xhr, we
+ // are free to set our own and capture the breadcrumb
+ xhr.onreadystatechange = onreadystatechangeHandler;
+ }
+
+ return origSend.apply(this, arguments);
+ };
+ },
+ wrappedBuiltIns
+ );
+ }
+
+ if (autoBreadcrumbs.xhr && supportsFetch()) {
+ fill(
+ _window,
+ 'fetch',
+ function(origFetch) {
+ return function() {
+ // preserve arity
+ // Make a copy of the arguments to prevent deoptimization
+ // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments
+ var args = new Array(arguments.length);
+ for (var i = 0; i < args.length; ++i) {
+ args[i] = arguments[i];
+ }
+
+ var fetchInput = args[0];
+ var method = 'GET';
+ var url;
+
+ if (typeof fetchInput === 'string') {
+ url = fetchInput;
+ } else if ('Request' in _window && fetchInput instanceof _window.Request) {
+ url = fetchInput.url;
+ if (fetchInput.method) {
+ method = fetchInput.method;
+ }
+ } else {
+ url = '' + fetchInput;
+ }
+
+ // if Sentry key appears in URL, don't capture, as it's our own request
+ if (url.indexOf(self._globalKey) !== -1) {
+ return origFetch.apply(this, args);
+ }
+
+ if (args[1] && args[1].method) {
+ method = args[1].method;
+ }
+
+ var fetchData = {
+ method: method,
+ url: url,
+ status_code: null
+ };
+
+ return origFetch
+ .apply(this, args)
+ .then(function(response) {
+ fetchData.status_code = response.status;
+
+ self.captureBreadcrumb({
+ type: 'http',
+ category: 'fetch',
+ data: fetchData
+ });
+
+ return response;
+ })
+ ['catch'](function(err) {
+ // if there is an error performing the request
+ self.captureBreadcrumb({
+ type: 'http',
+ category: 'fetch',
+ data: fetchData,
+ level: 'error'
+ });
+
+ throw err;
+ });
+ };
+ },
+ wrappedBuiltIns
+ );
+ }
+
+ // Capture breadcrumbs from any click that is unhandled / bubbled up all the way
+ // to the document. Do this before we instrument addEventListener.
+ if (autoBreadcrumbs.dom && this._hasDocument) {
+ if (_document.addEventListener) {
+ _document.addEventListener('click', self._breadcrumbEventHandler('click'), false);
+ _document.addEventListener('keypress', self._keypressEventHandler(), false);
+ } else if (_document.attachEvent) {
+ // IE8 Compatibility
+ _document.attachEvent('onclick', self._breadcrumbEventHandler('click'));
+ _document.attachEvent('onkeypress', self._keypressEventHandler());
+ }
+ }
+
+ // record navigation (URL) changes
+ // NOTE: in Chrome App environment, touching history.pushState, *even inside
+ // a try/catch block*, will cause Chrome to output an error to console.error
+ // borrowed from: https://github.com/angular/angular.js/pull/13945/files
+ var chrome = _window.chrome;
+ var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime;
+ var hasPushAndReplaceState =
+ !isChromePackagedApp &&
+ _window.history &&
+ _window.history.pushState &&
+ _window.history.replaceState;
+ if (autoBreadcrumbs.location && hasPushAndReplaceState) {
+ // TODO: remove onpopstate handler on uninstall()
+ var oldOnPopState = _window.onpopstate;
+ _window.onpopstate = function() {
+ var currentHref = self._location.href;
+ self._captureUrlChange(self._lastHref, currentHref);
+
+ if (oldOnPopState) {
+ return oldOnPopState.apply(this, arguments);
+ }
+ };
+
+ var historyReplacementFunction = function(origHistFunction) {
+ // note history.pushState.length is 0; intentionally not declaring
+ // params to preserve 0 arity
+ return function(/* state, title, url */) {
+ var url = arguments.length > 2 ? arguments[2] : undefined;
+
+ // url argument is optional
+ if (url) {
+ // coerce to string (this is what pushState does)
+ self._captureUrlChange(self._lastHref, url + '');
+ }
+
+ return origHistFunction.apply(this, arguments);
+ };
+ };
+
+ fill(_window.history, 'pushState', historyReplacementFunction, wrappedBuiltIns);
+ fill(_window.history, 'replaceState', historyReplacementFunction, wrappedBuiltIns);
+ }
+
+ if (autoBreadcrumbs.console && 'console' in _window && console.log) {
+ // console
+ var consoleMethodCallback = function(msg, data) {
+ self.captureBreadcrumb({
+ message: msg,
+ level: data.level,
+ category: 'console'
+ });
+ };
+
+ each(['debug', 'info', 'warn', 'error', 'log'], function(_, level) {
+ wrapConsoleMethod(console, level, consoleMethodCallback);
+ });
+ }
+ },
+
+ _restoreBuiltIns: function() {
+ // restore any wrapped builtins
+ var builtin;
+ while (this._wrappedBuiltIns.length) {
+ builtin = this._wrappedBuiltIns.shift();
+
+ var obj = builtin[0],
+ name = builtin[1],
+ orig = builtin[2];
+
+ obj[name] = orig;
+ }
+ },
+
+ _restoreConsole: function() {
+ // eslint-disable-next-line guard-for-in
+ for (var method in this._originalConsoleMethods) {
+ this._originalConsole[method] = this._originalConsoleMethods[method];
+ }
+ },
+
+ _drainPlugins: function() {
+ var self = this;
+
+ // FIX ME TODO
+ each(this._plugins, function(_, plugin) {
+ var installer = plugin[0];
+ var args = plugin[1];
+ installer.apply(self, [self].concat(args));
+ });
+ },
+
+ _parseDSN: function(str) {
+ var m = dsnPattern.exec(str),
+ dsn = {},
+ i = 7;
+
+ try {
+ while (i--) dsn[dsnKeys[i]] = m[i] || '';
+ } catch (e) {
+ throw new RavenConfigError('Invalid DSN: ' + str);
+ }
+
+ if (dsn.pass && !this._globalOptions.allowSecretKey) {
+ throw new RavenConfigError(
+ 'Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key'
+ );
+ }
+
+ return dsn;
+ },
+
+ _getGlobalServer: function(uri) {
+ // assemble the endpoint from the uri pieces
+ var globalServer = '//' + uri.host + (uri.port ? ':' + uri.port : '');
+
+ if (uri.protocol) {
+ globalServer = uri.protocol + ':' + globalServer;
+ }
+ return globalServer;
+ },
+
+ _handleOnErrorStackInfo: function() {
+ // if we are intentionally ignoring errors via onerror, bail out
+ if (!this._ignoreOnError) {
+ this._handleStackInfo.apply(this, arguments);
+ }
+ },
+
+ _handleStackInfo: function(stackInfo, options) {
+ var frames = this._prepareFrames(stackInfo, options);
+
+ this._triggerEvent('handle', {
+ stackInfo: stackInfo,
+ options: options
+ });
+
+ this._processException(
+ stackInfo.name,
+ stackInfo.message,
+ stackInfo.url,
+ stackInfo.lineno,
+ frames,
+ options
+ );
+ },
+
+ _prepareFrames: function(stackInfo, options) {
+ var self = this;
+ var frames = [];
+ if (stackInfo.stack && stackInfo.stack.length) {
+ each(stackInfo.stack, function(i, stack) {
+ var frame = self._normalizeFrame(stack, stackInfo.url);
+ if (frame) {
+ frames.push(frame);
+ }
+ });
+
+ // e.g. frames captured via captureMessage throw
+ if (options && options.trimHeadFrames) {
+ for (var j = 0; j < options.trimHeadFrames && j < frames.length; j++) {
+ frames[j].in_app = false;
+ }
+ }
+ }
+ frames = frames.slice(0, this._globalOptions.stackTraceLimit);
+ return frames;
+ },
+
+ _normalizeFrame: function(frame, stackInfoUrl) {
+ // normalize the frames data
+ var normalized = {
+ filename: frame.url,
+ lineno: frame.line,
+ colno: frame.column,
+ function: frame.func || '?'
+ };
+
+ // Case when we don't have any information about the error
+ // E.g. throwing a string or raw object, instead of an `Error` in Firefox
+ // Generating synthetic error doesn't add any value here
+ //
+ // We should probably somehow let a user know that they should fix their code
+ if (!frame.url) {
+ normalized.filename = stackInfoUrl; // fallback to whole stacks url from onerror handler
+ }
+
+ normalized.in_app = !// determine if an exception came from outside of our app
+ // first we check the global includePaths list.
+ (
+ (!!this._globalOptions.includePaths.test &&
+ !this._globalOptions.includePaths.test(normalized.filename)) ||
+ // Now we check for fun, if the function name is Raven or TraceKit
+ /(Raven|TraceKit)\./.test(normalized['function']) ||
+ // finally, we do a last ditch effort and check for raven.min.js
+ /raven\.(min\.)?js$/.test(normalized.filename)
+ );
+
+ return normalized;
+ },
+
+ _processException: function(type, message, fileurl, lineno, frames, options) {
+ var prefixedMessage = (type ? type + ': ' : '') + (message || '');
+ if (
+ !!this._globalOptions.ignoreErrors.test &&
+ (this._globalOptions.ignoreErrors.test(message) ||
+ this._globalOptions.ignoreErrors.test(prefixedMessage))
+ ) {
+ return;
+ }
+
+ var stacktrace;
+
+ if (frames && frames.length) {
+ fileurl = frames[0].filename || fileurl;
+ // Sentry expects frames oldest to newest
+ // and JS sends them as newest to oldest
+ frames.reverse();
+ stacktrace = {frames: frames};
+ } else if (fileurl) {
+ stacktrace = {
+ frames: [
+ {
+ filename: fileurl,
+ lineno: lineno,
+ in_app: true
+ }
+ ]
+ };
+ }
+
+ if (
+ !!this._globalOptions.ignoreUrls.test &&
+ this._globalOptions.ignoreUrls.test(fileurl)
+ ) {
+ return;
+ }
+
+ if (
+ !!this._globalOptions.whitelistUrls.test &&
+ !this._globalOptions.whitelistUrls.test(fileurl)
+ ) {
+ return;
+ }
+
+ var data = objectMerge(
+ {
+ // sentry.interfaces.Exception
+ exception: {
+ values: [
+ {
+ type: type,
+ value: message,
+ stacktrace: stacktrace
+ }
+ ]
+ },
+ transaction: fileurl
+ },
+ options
+ );
+
+ // Fire away!
+ this._send(data);
+ },
+
+ _trimPacket: function(data) {
+ // For now, we only want to truncate the two different messages
+ // but this could/should be expanded to just trim everything
+ var max = this._globalOptions.maxMessageLength;
+ if (data.message) {
+ data.message = truncate(data.message, max);
+ }
+ if (data.exception) {
+ var exception = data.exception.values[0];
+ exception.value = truncate(exception.value, max);
+ }
+
+ var request = data.request;
+ if (request) {
+ if (request.url) {
+ request.url = truncate(request.url, this._globalOptions.maxUrlLength);
+ }
+ if (request.Referer) {
+ request.Referer = truncate(request.Referer, this._globalOptions.maxUrlLength);
+ }
+ }
+
+ if (data.breadcrumbs && data.breadcrumbs.values)
+ this._trimBreadcrumbs(data.breadcrumbs);
+
+ return data;
+ },
+
+ /**
+ * Truncate breadcrumb values (right now just URLs)
+ */
+ _trimBreadcrumbs: function(breadcrumbs) {
+ // known breadcrumb properties with urls
+ // TODO: also consider arbitrary prop values that start with (https?)?://
+ var urlProps = ['to', 'from', 'url'],
+ urlProp,
+ crumb,
+ data;
+
+ for (var i = 0; i < breadcrumbs.values.length; ++i) {
+ crumb = breadcrumbs.values[i];
+ if (
+ !crumb.hasOwnProperty('data') ||
+ !isObject(crumb.data) ||
+ objectFrozen(crumb.data)
+ )
+ continue;
+
+ data = objectMerge({}, crumb.data);
+ for (var j = 0; j < urlProps.length; ++j) {
+ urlProp = urlProps[j];
+ if (data.hasOwnProperty(urlProp) && data[urlProp]) {
+ data[urlProp] = truncate(data[urlProp], this._globalOptions.maxUrlLength);
+ }
+ }
+ breadcrumbs.values[i].data = data;
+ }
+ },
+
+ _getHttpData: function() {
+ if (!this._hasNavigator && !this._hasDocument) return;
+ var httpData = {};
+
+ if (this._hasNavigator && _navigator.userAgent) {
+ httpData.headers = {
+ 'User-Agent': _navigator.userAgent
+ };
+ }
+
+ // Check in `window` instead of `document`, as we may be in ServiceWorker environment
+ if (_window.location && _window.location.href) {
+ httpData.url = _window.location.href;
+ }
+
+ if (this._hasDocument && _document.referrer) {
+ if (!httpData.headers) httpData.headers = {};
+ httpData.headers.Referer = _document.referrer;
+ }
+
+ return httpData;
+ },
+
+ _resetBackoff: function() {
+ this._backoffDuration = 0;
+ this._backoffStart = null;
+ },
+
+ _shouldBackoff: function() {
+ return this._backoffDuration && now() - this._backoffStart < this._backoffDuration;
+ },
+
+ /**
+ * Returns true if the in-process data payload matches the signature
+ * of the previously-sent data
+ *
+ * NOTE: This has to be done at this level because TraceKit can generate
+ * data from window.onerror WITHOUT an exception object (IE8, IE9,
+ * other old browsers). This can take the form of an "exception"
+ * data object with a single frame (derived from the onerror args).
+ */
+ _isRepeatData: function(current) {
+ var last = this._lastData;
+
+ if (
+ !last ||
+ current.message !== last.message || // defined for captureMessage
+ current.transaction !== last.transaction // defined for captureException/onerror
+ )
+ return false;
+
+ // Stacktrace interface (i.e. from captureMessage)
+ if (current.stacktrace || last.stacktrace) {
+ return isSameStacktrace(current.stacktrace, last.stacktrace);
+ } else if (current.exception || last.exception) {
+ // Exception interface (i.e. from captureException/onerror)
+ return isSameException(current.exception, last.exception);
+ }
+
+ return true;
+ },
+
+ _setBackoffState: function(request) {
+ // If we are already in a backoff state, don't change anything
+ if (this._shouldBackoff()) {
+ return;
+ }
+
+ var status = request.status;
+
+ // 400 - project_id doesn't exist or some other fatal
+ // 401 - invalid/revoked dsn
+ // 429 - too many requests
+ if (!(status === 400 || status === 401 || status === 429)) return;
+
+ var retry;
+ try {
+ // If Retry-After is not in Access-Control-Expose-Headers, most
+ // browsers will throw an exception trying to access it
+ if (supportsFetch()) {
+ retry = request.headers.get('Retry-After');
+ } else {
+ retry = request.getResponseHeader('Retry-After');
+ }
+
+ // Retry-After is returned in seconds
+ retry = parseInt(retry, 10) * 1000;
+ } catch (e) {
+ /* eslint no-empty:0 */
+ }
+
+ this._backoffDuration = retry
+ ? // If Sentry server returned a Retry-After value, use it
+ retry
+ : // Otherwise, double the last backoff duration (starts at 1 sec)
+ this._backoffDuration * 2 || 1000;
+
+ this._backoffStart = now();
+ },
+
+ _send: function(data) {
+ var globalOptions = this._globalOptions;
+
+ var baseData = {
+ project: this._globalProject,
+ logger: globalOptions.logger,
+ platform: 'javascript'
+ },
+ httpData = this._getHttpData();
+
+ if (httpData) {
+ baseData.request = httpData;
+ }
+
+ // HACK: delete `trimHeadFrames` to prevent from appearing in outbound payload
+ if (data.trimHeadFrames) delete data.trimHeadFrames;
+
+ data = objectMerge(baseData, data);
+
+ // Merge in the tags and extra separately since objectMerge doesn't handle a deep merge
+ data.tags = objectMerge(objectMerge({}, this._globalContext.tags), data.tags);
+ data.extra = objectMerge(objectMerge({}, this._globalContext.extra), data.extra);
+
+ // Send along our own collected metadata with extra
+ data.extra['session:duration'] = now() - this._startTime;
+
+ if (this._breadcrumbs && this._breadcrumbs.length > 0) {
+ // intentionally make shallow copy so that additions
+ // to breadcrumbs aren't accidentally sent in this request
+ data.breadcrumbs = {
+ values: [].slice.call(this._breadcrumbs, 0)
+ };
+ }
+
+ if (this._globalContext.user) {
+ // sentry.interfaces.User
+ data.user = this._globalContext.user;
+ }
+
+ // Include the environment if it's defined in globalOptions
+ if (globalOptions.environment) data.environment = globalOptions.environment;
+
+ // Include the release if it's defined in globalOptions
+ if (globalOptions.release) data.release = globalOptions.release;
+
+ // Include server_name if it's defined in globalOptions
+ if (globalOptions.serverName) data.server_name = globalOptions.serverName;
+
+ data = this._sanitizeData(data);
+
+ // Cleanup empty properties before sending them to the server
+ Object.keys(data).forEach(function(key) {
+ if (data[key] == null || data[key] === '' || isEmptyObject(data[key])) {
+ delete data[key];
+ }
+ });
+
+ if (isFunction(globalOptions.dataCallback)) {
+ data = globalOptions.dataCallback(data) || data;
+ }
+
+ // Why??????????
+ if (!data || isEmptyObject(data)) {
+ return;
+ }
+
+ // Check if the request should be filtered or not
+ if (
+ isFunction(globalOptions.shouldSendCallback) &&
+ !globalOptions.shouldSendCallback(data)
+ ) {
+ return;
+ }
+
+ // Backoff state: Sentry server previously responded w/ an error (e.g. 429 - too many requests),
+ // so drop requests until "cool-off" period has elapsed.
+ if (this._shouldBackoff()) {
+ this._logDebug('warn', 'Raven dropped error due to backoff: ', data);
+ return;
+ }
+
+ if (typeof globalOptions.sampleRate === 'number') {
+ if (Math.random() < globalOptions.sampleRate) {
+ this._sendProcessedPayload(data);
+ }
+ } else {
+ this._sendProcessedPayload(data);
+ }
+ },
+
+ _sanitizeData: function(data) {
+ return sanitize(data, this._globalOptions.sanitizeKeys);
+ },
+
+ _getUuid: function() {
+ return uuid4();
+ },
+
+ _sendProcessedPayload: function(data, callback) {
+ var self = this;
+ var globalOptions = this._globalOptions;
+
+ if (!this.isSetup()) return;
+
+ // Try and clean up the packet before sending by truncating long values
+ data = this._trimPacket(data);
+
+ // ideally duplicate error testing should occur *before* dataCallback/shouldSendCallback,
+ // but this would require copying an un-truncated copy of the data packet, which can be
+ // arbitrarily deep (extra_data) -- could be worthwhile? will revisit
+ if (!this._globalOptions.allowDuplicates && this._isRepeatData(data)) {
+ this._logDebug('warn', 'Raven dropped repeat event: ', data);
+ return;
+ }
+
+ // Send along an event_id if not explicitly passed.
+ // This event_id can be used to reference the error within Sentry itself.
+ // Set lastEventId after we know the error should actually be sent
+ this._lastEventId = data.event_id || (data.event_id = this._getUuid());
+
+ // Store outbound payload after trim
+ this._lastData = data;
+
+ this._logDebug('debug', 'Raven about to send:', data);
+
+ var auth = {
+ sentry_version: '7',
+ sentry_client: 'raven-js/' + this.VERSION,
+ sentry_key: this._globalKey
+ };
+
+ if (this._globalSecret) {
+ auth.sentry_secret = this._globalSecret;
+ }
+
+ var exception = data.exception && data.exception.values[0];
+
+ // only capture 'sentry' breadcrumb is autoBreadcrumbs is truthy
+ if (
+ this._globalOptions.autoBreadcrumbs &&
+ this._globalOptions.autoBreadcrumbs.sentry
+ ) {
+ this.captureBreadcrumb({
+ category: 'sentry',
+ message: exception
+ ? (exception.type ? exception.type + ': ' : '') + exception.value
+ : data.message,
+ event_id: data.event_id,
+ level: data.level || 'error' // presume error unless specified
+ });
+ }
+
+ var url = this._globalEndpoint;
+ (globalOptions.transport || this._makeRequest).call(this, {
+ url: url,
+ auth: auth,
+ data: data,
+ options: globalOptions,
+ onSuccess: function success() {
+ self._resetBackoff();
+
+ self._triggerEvent('success', {
+ data: data,
+ src: url
+ });
+ callback && callback();
+ },
+ onError: function failure(error) {
+ self._logDebug('error', 'Raven transport failed to send: ', error);
+
+ if (error.request) {
+ self._setBackoffState(error.request);
+ }
+
+ self._triggerEvent('failure', {
+ data: data,
+ src: url
+ });
+ error = error || new Error('Raven send failed (no additional details provided)');
+ callback && callback(error);
+ }
+ });
+ },
+
+ _makeRequest: function(opts) {
+ // Auth is intentionally sent as part of query string (NOT as custom HTTP header) to avoid preflight CORS requests
+ var url = opts.url + '?' + urlencode(opts.auth);
+
+ var evaluatedHeaders = null;
+ var evaluatedFetchParameters = {};
+
+ if (opts.options.headers) {
+ evaluatedHeaders = this._evaluateHash(opts.options.headers);
+ }
+
+ if (opts.options.fetchParameters) {
+ evaluatedFetchParameters = this._evaluateHash(opts.options.fetchParameters);
+ }
+
+ if (supportsFetch()) {
+ evaluatedFetchParameters.body = stringify(opts.data);
+
+ var defaultFetchOptions = objectMerge({}, this._fetchDefaults);
+ var fetchOptions = objectMerge(defaultFetchOptions, evaluatedFetchParameters);
+
+ if (evaluatedHeaders) {
+ fetchOptions.headers = evaluatedHeaders;
+ }
+
+ return _window
+ .fetch(url, fetchOptions)
+ .then(function(response) {
+ if (response.ok) {
+ opts.onSuccess && opts.onSuccess();
+ } else {
+ var error = new Error('Sentry error code: ' + response.status);
+ // It's called request only to keep compatibility with XHR interface
+ // and not add more redundant checks in setBackoffState method
+ error.request = response;
+ opts.onError && opts.onError(error);
+ }
+ })
+ ['catch'](function() {
+ opts.onError &&
+ opts.onError(new Error('Sentry error code: network unavailable'));
+ });
+ }
+
+ var request = _window.XMLHttpRequest && new _window.XMLHttpRequest();
+ if (!request) return;
+
+ // if browser doesn't support CORS (e.g. IE7), we are out of luck
+ var hasCORS = 'withCredentials' in request || typeof XDomainRequest !== 'undefined';
+
+ if (!hasCORS) return;
+
+ if ('withCredentials' in request) {
+ request.onreadystatechange = function() {
+ if (request.readyState !== 4) {
+ return;
+ } else if (request.status === 200) {
+ opts.onSuccess && opts.onSuccess();
+ } else if (opts.onError) {
+ var err = new Error('Sentry error code: ' + request.status);
+ err.request = request;
+ opts.onError(err);
+ }
+ };
+ } else {
+ request = new XDomainRequest();
+ // xdomainrequest cannot go http -> https (or vice versa),
+ // so always use protocol relative
+ url = url.replace(/^https?:/, '');
+
+ // onreadystatechange not supported by XDomainRequest
+ if (opts.onSuccess) {
+ request.onload = opts.onSuccess;
+ }
+ if (opts.onError) {
+ request.onerror = function() {
+ var err = new Error('Sentry error code: XDomainRequest');
+ err.request = request;
+ opts.onError(err);
+ };
+ }
+ }
+
+ request.open('POST', url);
+
+ if (evaluatedHeaders) {
+ each(evaluatedHeaders, function(key, value) {
+ request.setRequestHeader(key, value);
+ });
+ }
+
+ request.send(stringify(opts.data));
+ },
+
+ _evaluateHash: function(hash) {
+ var evaluated = {};
+
+ for (var key in hash) {
+ if (hash.hasOwnProperty(key)) {
+ var value = hash[key];
+ evaluated[key] = typeof value === 'function' ? value() : value;
+ }
+ }
+
+ return evaluated;
+ },
+
+ _logDebug: function(level) {
+ // We allow `Raven.debug` and `Raven.config(DSN, { debug: true })` to not make backward incompatible API change
+ if (
+ this._originalConsoleMethods[level] &&
+ (this.debug || this._globalOptions.debug)
+ ) {
+ // In IE<10 console methods do not have their own 'apply' method
+ Function.prototype.apply.call(
+ this._originalConsoleMethods[level],
+ this._originalConsole,
+ [].slice.call(arguments, 1)
+ );
+ }
+ },
+
+ _mergeContext: function(key, context) {
+ if (isUndefined(context)) {
+ delete this._globalContext[key];
+ } else {
+ this._globalContext[key] = objectMerge(this._globalContext[key] || {}, context);
+ }
+ }
+};
+
+// Deprecations
+Raven.prototype.setUser = Raven.prototype.setUserContext;
+Raven.prototype.setReleaseContext = Raven.prototype.setRelease;
+
+module.exports = Raven;
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"10":10,"11":11,"12":12,"5":5,"6":6,"9":9}],8:[function(_dereq_,module,exports){
+(function (global){
+/**
+ * Enforces a single instance of the Raven client, and the
+ * main entry point for Raven. If you are a consumer of the
+ * Raven library, you SHOULD load this file (vs raven.js).
+ **/
+
+var RavenConstructor = _dereq_(7);
+
+// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)
+var _window =
+ typeof window !== 'undefined'
+ ? window
+ : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
+var _Raven = _window.Raven;
+
+var Raven = new RavenConstructor();
+
+/*
+ * Allow multiple versions of Raven to be installed.
+ * Strip Raven from the global context and returns the instance.
+ *
+ * @return {Raven}
+ */
+Raven.noConflict = function() {
+ _window.Raven = _Raven;
+ return Raven;
+};
+
+Raven.afterLoad();
+
+module.exports = Raven;
+
+/**
+ * DISCLAIMER:
+ *
+ * Expose `Client` constructor for cases where user want to track multiple "sub-applications" in one larger app.
+ * It's not meant to be used by a wide audience, so pleaaase make sure that you know what you're doing before using it.
+ * Accidentally calling `install` multiple times, may result in an unexpected behavior that's very hard to debug.
+ *
+ * It's called `Client' to be in-line with Raven Node implementation.
+ *
+ * HOWTO:
+ *
+ * import Raven from 'raven-js';
+ *
+ * const someAppReporter = new Raven.Client();
+ * const someOtherAppReporter = new Raven.Client();
+ *
+ * someAppReporter.config('__DSN__', {
+ * ...config goes here
+ * });
+ *
+ * someOtherAppReporter.config('__OTHER_DSN__', {
+ * ...config goes here
+ * });
+ *
+ * someAppReporter.captureMessage(...);
+ * someAppReporter.captureException(...);
+ * someAppReporter.captureBreadcrumb(...);
+ *
+ * someOtherAppReporter.captureMessage(...);
+ * someOtherAppReporter.captureException(...);
+ * someOtherAppReporter.captureBreadcrumb(...);
+ *
+ * It should "just work".
+ */
+module.exports.Client = RavenConstructor;
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"7":7}],9:[function(_dereq_,module,exports){
+(function (global){
+var stringify = _dereq_(11);
+
+var _window =
+ typeof window !== 'undefined'
+ ? window
+ : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
+
+function isObject(what) {
+ return typeof what === 'object' && what !== null;
+}
+
+// Yanked from https://git.io/vS8DV re-used under CC0
+// with some tiny modifications
+function isError(value) {
+ switch (Object.prototype.toString.call(value)) {
+ case '[object Error]':
+ return true;
+ case '[object Exception]':
+ return true;
+ case '[object DOMException]':
+ return true;
+ default:
+ return value instanceof Error;
+ }
+}
+
+function isErrorEvent(value) {
+ return Object.prototype.toString.call(value) === '[object ErrorEvent]';
+}
+
+function isDOMError(value) {
+ return Object.prototype.toString.call(value) === '[object DOMError]';
+}
+
+function isDOMException(value) {
+ return Object.prototype.toString.call(value) === '[object DOMException]';
+}
+
+function isUndefined(what) {
+ return what === void 0;
+}
+
+function isFunction(what) {
+ return typeof what === 'function';
+}
+
+function isPlainObject(what) {
+ return Object.prototype.toString.call(what) === '[object Object]';
+}
+
+function isString(what) {
+ return Object.prototype.toString.call(what) === '[object String]';
+}
+
+function isArray(what) {
+ return Object.prototype.toString.call(what) === '[object Array]';
+}
+
+function isEmptyObject(what) {
+ if (!isPlainObject(what)) return false;
+
+ for (var _ in what) {
+ if (what.hasOwnProperty(_)) {
+ return false;
+ }
+ }
+ return true;
+}
+
+function supportsErrorEvent() {
+ try {
+ new ErrorEvent(''); // eslint-disable-line no-new
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+function supportsDOMError() {
+ try {
+ new DOMError(''); // eslint-disable-line no-new
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+function supportsDOMException() {
+ try {
+ new DOMException(''); // eslint-disable-line no-new
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+function supportsFetch() {
+ if (!('fetch' in _window)) return false;
+
+ try {
+ new Headers(); // eslint-disable-line no-new
+ new Request(''); // eslint-disable-line no-new
+ new Response(); // eslint-disable-line no-new
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+// Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default
+// https://caniuse.com/#feat=referrer-policy
+// It doesn't. And it throw exception instead of ignoring this parameter...
+// REF: https://github.com/getsentry/raven-js/issues/1233
+function supportsReferrerPolicy() {
+ if (!supportsFetch()) return false;
+
+ try {
+ // eslint-disable-next-line no-new
+ new Request('pickleRick', {
+ referrerPolicy: 'origin'
+ });
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+function supportsPromiseRejectionEvent() {
+ return typeof PromiseRejectionEvent === 'function';
+}
+
+function wrappedCallback(callback) {
+ function dataCallback(data, original) {
+ var normalizedData = callback(data) || data;
+ if (original) {
+ return original(normalizedData) || normalizedData;
+ }
+ return normalizedData;
+ }
+
+ return dataCallback;
+}
+
+function each(obj, callback) {
+ var i, j;
+
+ if (isUndefined(obj.length)) {
+ for (i in obj) {
+ if (hasKey(obj, i)) {
+ callback.call(null, i, obj[i]);
+ }
+ }
+ } else {
+ j = obj.length;
+ if (j) {
+ for (i = 0; i < j; i++) {
+ callback.call(null, i, obj[i]);
+ }
+ }
+ }
+}
+
+function objectMerge(obj1, obj2) {
+ if (!obj2) {
+ return obj1;
+ }
+ each(obj2, function(key, value) {
+ obj1[key] = value;
+ });
+ return obj1;
+}
+
+/**
+ * This function is only used for react-native.
+ * react-native freezes object that have already been sent over the
+ * js bridge. We need this function in order to check if the object is frozen.
+ * So it's ok that objectFrozen returns false if Object.isFrozen is not
+ * supported because it's not relevant for other "platforms". See related issue:
+ * https://github.com/getsentry/react-native-sentry/issues/57
+ */
+function objectFrozen(obj) {
+ if (!Object.isFrozen) {
+ return false;
+ }
+ return Object.isFrozen(obj);
+}
+
+function truncate(str, max) {
+ if (typeof max !== 'number') {
+ throw new Error('2nd argument to `truncate` function should be a number');
+ }
+ if (typeof str !== 'string' || max === 0) {
+ return str;
+ }
+ return str.length <= max ? str : str.substr(0, max) + '\u2026';
+}
+
+/**
+ * hasKey, a better form of hasOwnProperty
+ * Example: hasKey(MainHostObject, property) === true/false
+ *
+ * @param {Object} host object to check property
+ * @param {string} key to check
+ */
+function hasKey(object, key) {
+ return Object.prototype.hasOwnProperty.call(object, key);
+}
+
+function joinRegExp(patterns) {
+ // Combine an array of regular expressions and strings into one large regexp
+ // Be mad.
+ var sources = [],
+ i = 0,
+ len = patterns.length,
+ pattern;
+
+ for (; i < len; i++) {
+ pattern = patterns[i];
+ if (isString(pattern)) {
+ // If it's a string, we need to escape it
+ // Taken from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
+ sources.push(pattern.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, '\\$1'));
+ } else if (pattern && pattern.source) {
+ // If it's a regexp already, we want to extract the source
+ sources.push(pattern.source);
+ }
+ // Intentionally skip other cases
+ }
+ return new RegExp(sources.join('|'), 'i');
+}
+
+function urlencode(o) {
+ var pairs = [];
+ each(o, function(key, value) {
+ pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));
+ });
+ return pairs.join('&');
+}
+
+// borrowed from https://tools.ietf.org/html/rfc3986#appendix-B
+// intentionally using regex and not href parsing trick because React Native and other
+// environments where DOM might not be available
+function parseUrl(url) {
+ if (typeof url !== 'string') return {};
+ var match = url.match(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/);
+
+ // coerce to undefined values to empty string so we don't get 'undefined'
+ var query = match[6] || '';
+ var fragment = match[8] || '';
+ return {
+ protocol: match[2],
+ host: match[4],
+ path: match[5],
+ relative: match[5] + query + fragment // everything minus origin
+ };
+}
+function uuid4() {
+ var crypto = _window.crypto || _window.msCrypto;
+
+ if (!isUndefined(crypto) && crypto.getRandomValues) {
+ // Use window.crypto API if available
+ // eslint-disable-next-line no-undef
+ var arr = new Uint16Array(8);
+ crypto.getRandomValues(arr);
+
+ // set 4 in byte 7
+ arr[3] = (arr[3] & 0xfff) | 0x4000;
+ // set 2 most significant bits of byte 9 to '10'
+ arr[4] = (arr[4] & 0x3fff) | 0x8000;
+
+ var pad = function(num) {
+ var v = num.toString(16);
+ while (v.length < 4) {
+ v = '0' + v;
+ }
+ return v;
+ };
+
+ return (
+ pad(arr[0]) +
+ pad(arr[1]) +
+ pad(arr[2]) +
+ pad(arr[3]) +
+ pad(arr[4]) +
+ pad(arr[5]) +
+ pad(arr[6]) +
+ pad(arr[7])
+ );
+ } else {
+ // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523
+ return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
+ var r = (Math.random() * 16) | 0,
+ v = c === 'x' ? r : (r & 0x3) | 0x8;
+ return v.toString(16);
+ });
+ }
+}
+
+/**
+ * Given a child DOM element, returns a query-selector statement describing that
+ * and its ancestors
+ * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]
+ * @param elem
+ * @returns {string}
+ */
+function htmlTreeAsString(elem) {
+ /* eslint no-extra-parens:0*/
+ var MAX_TRAVERSE_HEIGHT = 5,
+ MAX_OUTPUT_LEN = 80,
+ out = [],
+ height = 0,
+ len = 0,
+ separator = ' > ',
+ sepLength = separator.length,
+ nextStr;
+
+ while (elem && height++ < MAX_TRAVERSE_HEIGHT) {
+ nextStr = htmlElementAsString(elem);
+ // bail out if
+ // - nextStr is the 'html' element
+ // - the length of the string that would be created exceeds MAX_OUTPUT_LEN
+ // (ignore this limit if we are on the first iteration)
+ if (
+ nextStr === 'html' ||
+ (height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN)
+ ) {
+ break;
+ }
+
+ out.push(nextStr);
+
+ len += nextStr.length;
+ elem = elem.parentNode;
+ }
+
+ return out.reverse().join(separator);
+}
+
+/**
+ * Returns a simple, query-selector representation of a DOM element
+ * e.g. [HTMLElement] => input#foo.btn[name=baz]
+ * @param HTMLElement
+ * @returns {string}
+ */
+function htmlElementAsString(elem) {
+ var out = [],
+ className,
+ classes,
+ key,
+ attr,
+ i;
+
+ if (!elem || !elem.tagName) {
+ return '';
+ }
+
+ out.push(elem.tagName.toLowerCase());
+ if (elem.id) {
+ out.push('#' + elem.id);
+ }
+
+ className = elem.className;
+ if (className && isString(className)) {
+ classes = className.split(/\s+/);
+ for (i = 0; i < classes.length; i++) {
+ out.push('.' + classes[i]);
+ }
+ }
+ var attrWhitelist = ['type', 'name', 'title', 'alt'];
+ for (i = 0; i < attrWhitelist.length; i++) {
+ key = attrWhitelist[i];
+ attr = elem.getAttribute(key);
+ if (attr) {
+ out.push('[' + key + '="' + attr + '"]');
+ }
+ }
+ return out.join('');
+}
+
+/**
+ * Returns true if either a OR b is truthy, but not both
+ */
+function isOnlyOneTruthy(a, b) {
+ return !!(!!a ^ !!b);
+}
+
+/**
+ * Returns true if both parameters are undefined
+ */
+function isBothUndefined(a, b) {
+ return isUndefined(a) && isUndefined(b);
+}
+
+/**
+ * Returns true if the two input exception interfaces have the same content
+ */
+function isSameException(ex1, ex2) {
+ if (isOnlyOneTruthy(ex1, ex2)) return false;
+
+ ex1 = ex1.values[0];
+ ex2 = ex2.values[0];
+
+ if (ex1.type !== ex2.type || ex1.value !== ex2.value) return false;
+
+ // in case both stacktraces are undefined, we can't decide so default to false
+ if (isBothUndefined(ex1.stacktrace, ex2.stacktrace)) return false;
+
+ return isSameStacktrace(ex1.stacktrace, ex2.stacktrace);
+}
+
+/**
+ * Returns true if the two input stack trace interfaces have the same content
+ */
+function isSameStacktrace(stack1, stack2) {
+ if (isOnlyOneTruthy(stack1, stack2)) return false;
+
+ var frames1 = stack1.frames;
+ var frames2 = stack2.frames;
+
+ // Exit early if frame count differs
+ if (frames1.length !== frames2.length) return false;
+
+ // Iterate through every frame; bail out if anything differs
+ var a, b;
+ for (var i = 0; i < frames1.length; i++) {
+ a = frames1[i];
+ b = frames2[i];
+ if (
+ a.filename !== b.filename ||
+ a.lineno !== b.lineno ||
+ a.colno !== b.colno ||
+ a['function'] !== b['function']
+ )
+ return false;
+ }
+ return true;
+}
+
+/**
+ * Polyfill a method
+ * @param obj object e.g. `document`
+ * @param name method name present on object e.g. `addEventListener`
+ * @param replacement replacement function
+ * @param track {optional} record instrumentation to an array
+ */
+function fill(obj, name, replacement, track) {
+ if (obj == null) return;
+ var orig = obj[name];
+ obj[name] = replacement(orig);
+ obj[name].__raven__ = true;
+ obj[name].__orig__ = orig;
+ if (track) {
+ track.push([obj, name, orig]);
+ }
+}
+
+/**
+ * Join values in array
+ * @param input array of values to be joined together
+ * @param delimiter string to be placed in-between values
+ * @returns {string}
+ */
+function safeJoin(input, delimiter) {
+ if (!isArray(input)) return '';
+
+ var output = [];
+
+ for (var i = 0; i < input.length; i++) {
+ try {
+ output.push(String(input[i]));
+ } catch (e) {
+ output.push('[value cannot be serialized]');
+ }
+ }
+
+ return output.join(delimiter);
+}
+
+// Default Node.js REPL depth
+var MAX_SERIALIZE_EXCEPTION_DEPTH = 3;
+// 50kB, as 100kB is max payload size, so half sounds reasonable
+var MAX_SERIALIZE_EXCEPTION_SIZE = 50 * 1024;
+var MAX_SERIALIZE_KEYS_LENGTH = 40;
+
+function utf8Length(value) {
+ return ~-encodeURI(value).split(/%..|./).length;
+}
+
+function jsonSize(value) {
+ return utf8Length(JSON.stringify(value));
+}
+
+function serializeValue(value) {
+ if (typeof value === 'string') {
+ var maxLength = 40;
+ return truncate(value, maxLength);
+ } else if (
+ typeof value === 'number' ||
+ typeof value === 'boolean' ||
+ typeof value === 'undefined'
+ ) {
+ return value;
+ }
+
+ var type = Object.prototype.toString.call(value);
+
+ // Node.js REPL notation
+ if (type === '[object Object]') return '[Object]';
+ if (type === '[object Array]') return '[Array]';
+ if (type === '[object Function]')
+ return value.name ? '[Function: ' + value.name + ']' : '[Function]';
+
+ return value;
+}
+
+function serializeObject(value, depth) {
+ if (depth === 0) return serializeValue(value);
+
+ if (isPlainObject(value)) {
+ return Object.keys(value).reduce(function(acc, key) {
+ acc[key] = serializeObject(value[key], depth - 1);
+ return acc;
+ }, {});
+ } else if (Array.isArray(value)) {
+ return value.map(function(val) {
+ return serializeObject(val, depth - 1);
+ });
+ }
+
+ return serializeValue(value);
+}
+
+function serializeException(ex, depth, maxSize) {
+ if (!isPlainObject(ex)) return ex;
+
+ depth = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_DEPTH : depth;
+ maxSize = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_SIZE : maxSize;
+
+ var serialized = serializeObject(ex, depth);
+
+ if (jsonSize(stringify(serialized)) > maxSize) {
+ return serializeException(ex, depth - 1);
+ }
+
+ return serialized;
+}
+
+function serializeKeysForMessage(keys, maxLength) {
+ if (typeof keys === 'number' || typeof keys === 'string') return keys.toString();
+ if (!Array.isArray(keys)) return '';
+
+ keys = keys.filter(function(key) {
+ return typeof key === 'string';
+ });
+ if (keys.length === 0) return '[object has no keys]';
+
+ maxLength = typeof maxLength !== 'number' ? MAX_SERIALIZE_KEYS_LENGTH : maxLength;
+ if (keys[0].length >= maxLength) return keys[0];
+
+ for (var usedKeys = keys.length; usedKeys > 0; usedKeys--) {
+ var serialized = keys.slice(0, usedKeys).join(', ');
+ if (serialized.length > maxLength) continue;
+ if (usedKeys === keys.length) return serialized;
+ return serialized + '\u2026';
+ }
+
+ return '';
+}
+
+function sanitize(input, sanitizeKeys) {
+ if (!isArray(sanitizeKeys) || (isArray(sanitizeKeys) && sanitizeKeys.length === 0))
+ return input;
+
+ var sanitizeRegExp = joinRegExp(sanitizeKeys);
+ var sanitizeMask = '********';
+ var safeInput;
+
+ try {
+ safeInput = JSON.parse(stringify(input));
+ } catch (o_O) {
+ return input;
+ }
+
+ function sanitizeWorker(workerInput) {
+ if (isArray(workerInput)) {
+ return workerInput.map(function(val) {
+ return sanitizeWorker(val);
+ });
+ }
+
+ if (isPlainObject(workerInput)) {
+ return Object.keys(workerInput).reduce(function(acc, k) {
+ if (sanitizeRegExp.test(k)) {
+ acc[k] = sanitizeMask;
+ } else {
+ acc[k] = sanitizeWorker(workerInput[k]);
+ }
+ return acc;
+ }, {});
+ }
+
+ return workerInput;
+ }
+
+ return sanitizeWorker(safeInput);
+}
+
+module.exports = {
+ isObject: isObject,
+ isError: isError,
+ isErrorEvent: isErrorEvent,
+ isDOMError: isDOMError,
+ isDOMException: isDOMException,
+ isUndefined: isUndefined,
+ isFunction: isFunction,
+ isPlainObject: isPlainObject,
+ isString: isString,
+ isArray: isArray,
+ isEmptyObject: isEmptyObject,
+ supportsErrorEvent: supportsErrorEvent,
+ supportsDOMError: supportsDOMError,
+ supportsDOMException: supportsDOMException,
+ supportsFetch: supportsFetch,
+ supportsReferrerPolicy: supportsReferrerPolicy,
+ supportsPromiseRejectionEvent: supportsPromiseRejectionEvent,
+ wrappedCallback: wrappedCallback,
+ each: each,
+ objectMerge: objectMerge,
+ truncate: truncate,
+ objectFrozen: objectFrozen,
+ hasKey: hasKey,
+ joinRegExp: joinRegExp,
+ urlencode: urlencode,
+ uuid4: uuid4,
+ htmlTreeAsString: htmlTreeAsString,
+ htmlElementAsString: htmlElementAsString,
+ isSameException: isSameException,
+ isSameStacktrace: isSameStacktrace,
+ parseUrl: parseUrl,
+ fill: fill,
+ safeJoin: safeJoin,
+ serializeException: serializeException,
+ serializeKeysForMessage: serializeKeysForMessage,
+ sanitize: sanitize
+};
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"11":11}],10:[function(_dereq_,module,exports){
+(function (global){
+var utils = _dereq_(9);
+
+/*
+ TraceKit - Cross brower stack traces
+
+ This was originally forked from github.com/occ/TraceKit, but has since been
+ largely re-written and is now maintained as part of raven-js. Tests for
+ this are in test/vendor.
+
+ MIT license
+*/
+
+var TraceKit = {
+ collectWindowErrors: true,
+ debug: false
+};
+
+// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)
+var _window =
+ typeof window !== 'undefined'
+ ? window
+ : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
+
+// global reference to slice
+var _slice = [].slice;
+var UNKNOWN_FUNCTION = '?';
+
+// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types
+var ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;
+
+function getLocationHref() {
+ if (typeof document === 'undefined' || document.location == null) return '';
+ return document.location.href;
+}
+
+function getLocationOrigin() {
+ if (typeof document === 'undefined' || document.location == null) return '';
+
+ // Oh dear IE10...
+ if (!document.location.origin) {
+ document.location.origin =
+ document.location.protocol +
+ '//' +
+ document.location.hostname +
+ (document.location.port ? ':' + document.location.port : '');
+ }
+
+ return document.location.origin;
+}
+
+/**
+ * TraceKit.report: cross-browser processing of unhandled exceptions
+ *
+ * Syntax:
+ * TraceKit.report.subscribe(function(stackInfo) { ... })
+ * TraceKit.report.unsubscribe(function(stackInfo) { ... })
+ * TraceKit.report(exception)
+ * try { ...code... } catch(ex) { TraceKit.report(ex); }
+ *
+ * Supports:
+ * - Firefox: full stack trace with line numbers, plus column number
+ * on top frame; column number is not guaranteed
+ * - Opera: full stack trace with line and column numbers
+ * - Chrome: full stack trace with line and column numbers
+ * - Safari: line and column number for the top frame only; some frames
+ * may be missing, and column number is not guaranteed
+ * - IE: line and column number for the top frame only; some frames
+ * may be missing, and column number is not guaranteed
+ *
+ * In theory, TraceKit should work on all of the following versions:
+ * - IE5.5+ (only 8.0 tested)
+ * - Firefox 0.9+ (only 3.5+ tested)
+ * - Opera 7+ (only 10.50 tested; versions 9 and earlier may require
+ * Exceptions Have Stacktrace to be enabled in opera:config)
+ * - Safari 3+ (only 4+ tested)
+ * - Chrome 1+ (only 5+ tested)
+ * - Konqueror 3.5+ (untested)
+ *
+ * Requires TraceKit.computeStackTrace.
+ *
+ * Tries to catch all unhandled exceptions and report them to the
+ * subscribed handlers. Please note that TraceKit.report will rethrow the
+ * exception. This is REQUIRED in order to get a useful stack trace in IE.
+ * If the exception does not reach the top of the browser, you will only
+ * get a stack trace from the point where TraceKit.report was called.
+ *
+ * Handlers receive a stackInfo object as described in the
+ * TraceKit.computeStackTrace docs.
+ */
+TraceKit.report = (function reportModuleWrapper() {
+ var handlers = [],
+ lastArgs = null,
+ lastException = null,
+ lastExceptionStack = null;
+
+ /**
+ * Add a crash handler.
+ * @param {Function} handler
+ */
+ function subscribe(handler) {
+ installGlobalHandler();
+ handlers.push(handler);
+ }
+
+ /**
+ * Remove a crash handler.
+ * @param {Function} handler
+ */
+ function unsubscribe(handler) {
+ for (var i = handlers.length - 1; i >= 0; --i) {
+ if (handlers[i] === handler) {
+ handlers.splice(i, 1);
+ }
+ }
+ }
+
+ /**
+ * Remove all crash handlers.
+ */
+ function unsubscribeAll() {
+ uninstallGlobalHandler();
+ handlers = [];
+ }
+
+ /**
+ * Dispatch stack information to all handlers.
+ * @param {Object.} stack
+ */
+ function notifyHandlers(stack, isWindowError) {
+ var exception = null;
+ if (isWindowError && !TraceKit.collectWindowErrors) {
+ return;
+ }
+ for (var i in handlers) {
+ if (handlers.hasOwnProperty(i)) {
+ try {
+ handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2)));
+ } catch (inner) {
+ exception = inner;
+ }
+ }
+ }
+
+ if (exception) {
+ throw exception;
+ }
+ }
+
+ var _oldOnerrorHandler, _onErrorHandlerInstalled;
+
+ /**
+ * Ensures all global unhandled exceptions are recorded.
+ * Supported by Gecko and IE.
+ * @param {string} msg Error message.
+ * @param {string} url URL of script that generated the exception.
+ * @param {(number|string)} lineNo The line number at which the error
+ * occurred.
+ * @param {?(number|string)} colNo The column number at which the error
+ * occurred.
+ * @param {?Error} ex The actual Error object.
+ */
+ function traceKitWindowOnError(msg, url, lineNo, colNo, ex) {
+ var stack = null;
+ // If 'ex' is ErrorEvent, get real Error from inside
+ var exception = utils.isErrorEvent(ex) ? ex.error : ex;
+ // If 'msg' is ErrorEvent, get real message from inside
+ var message = utils.isErrorEvent(msg) ? msg.message : msg;
+
+ if (lastExceptionStack) {
+ TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(
+ lastExceptionStack,
+ url,
+ lineNo,
+ message
+ );
+ processLastException();
+ } else if (exception && utils.isError(exception)) {
+ // non-string `exception` arg; attempt to extract stack trace
+
+ // New chrome and blink send along a real error object
+ // Let's just report that like a normal error.
+ // See: https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror
+ stack = TraceKit.computeStackTrace(exception);
+ notifyHandlers(stack, true);
+ } else {
+ var location = {
+ url: url,
+ line: lineNo,
+ column: colNo
+ };
+
+ var name = undefined;
+ var groups;
+
+ if ({}.toString.call(message) === '[object String]') {
+ var groups = message.match(ERROR_TYPES_RE);
+ if (groups) {
+ name = groups[1];
+ message = groups[2];
+ }
+ }
+
+ location.func = UNKNOWN_FUNCTION;
+
+ stack = {
+ name: name,
+ message: message,
+ url: getLocationHref(),
+ stack: [location]
+ };
+ notifyHandlers(stack, true);
+ }
+
+ if (_oldOnerrorHandler) {
+ return _oldOnerrorHandler.apply(this, arguments);
+ }
+
+ return false;
+ }
+
+ function installGlobalHandler() {
+ if (_onErrorHandlerInstalled) {
+ return;
+ }
+ _oldOnerrorHandler = _window.onerror;
+ _window.onerror = traceKitWindowOnError;
+ _onErrorHandlerInstalled = true;
+ }
+
+ function uninstallGlobalHandler() {
+ if (!_onErrorHandlerInstalled) {
+ return;
+ }
+ _window.onerror = _oldOnerrorHandler;
+ _onErrorHandlerInstalled = false;
+ _oldOnerrorHandler = undefined;
+ }
+
+ function processLastException() {
+ var _lastExceptionStack = lastExceptionStack,
+ _lastArgs = lastArgs;
+ lastArgs = null;
+ lastExceptionStack = null;
+ lastException = null;
+ notifyHandlers.apply(null, [_lastExceptionStack, false].concat(_lastArgs));
+ }
+
+ /**
+ * Reports an unhandled Error to TraceKit.
+ * @param {Error} ex
+ * @param {?boolean} rethrow If false, do not re-throw the exception.
+ * Only used for window.onerror to not cause an infinite loop of
+ * rethrowing.
+ */
+ function report(ex, rethrow) {
+ var args = _slice.call(arguments, 1);
+ if (lastExceptionStack) {
+ if (lastException === ex) {
+ return; // already caught by an inner catch block, ignore
+ } else {
+ processLastException();
+ }
+ }
+
+ var stack = TraceKit.computeStackTrace(ex);
+ lastExceptionStack = stack;
+ lastException = ex;
+ lastArgs = args;
+
+ // If the stack trace is incomplete, wait for 2 seconds for
+ // slow slow IE to see if onerror occurs or not before reporting
+ // this exception; otherwise, we will end up with an incomplete
+ // stack trace
+ setTimeout(function() {
+ if (lastException === ex) {
+ processLastException();
+ }
+ }, stack.incomplete ? 2000 : 0);
+
+ if (rethrow !== false) {
+ throw ex; // re-throw to propagate to the top level (and cause window.onerror)
+ }
+ }
+
+ report.subscribe = subscribe;
+ report.unsubscribe = unsubscribe;
+ report.uninstall = unsubscribeAll;
+ return report;
+})();
+
+/**
+ * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript
+ *
+ * Syntax:
+ * s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below)
+ * Returns:
+ * s.name - exception name
+ * s.message - exception message
+ * s.stack[i].url - JavaScript or HTML file URL
+ * s.stack[i].func - function name, or empty for anonymous functions (if guessing did not work)
+ * s.stack[i].args - arguments passed to the function, if known
+ * s.stack[i].line - line number, if known
+ * s.stack[i].column - column number, if known
+ *
+ * Supports:
+ * - Firefox: full stack trace with line numbers and unreliable column
+ * number on top frame
+ * - Opera 10: full stack trace with line and column numbers
+ * - Opera 9-: full stack trace with line numbers
+ * - Chrome: full stack trace with line and column numbers
+ * - Safari: line and column number for the topmost stacktrace element
+ * only
+ * - IE: no line numbers whatsoever
+ *
+ * Tries to guess names of anonymous functions by looking for assignments
+ * in the source code. In IE and Safari, we have to guess source file names
+ * by searching for function bodies inside all page scripts. This will not
+ * work for scripts that are loaded cross-domain.
+ * Here be dragons: some function names may be guessed incorrectly, and
+ * duplicate functions may be mismatched.
+ *
+ * TraceKit.computeStackTrace should only be used for tracing purposes.
+ * Logging of unhandled exceptions should be done with TraceKit.report,
+ * which builds on top of TraceKit.computeStackTrace and provides better
+ * IE support by utilizing the window.onerror event to retrieve information
+ * about the top of the stack.
+ *
+ * Note: In IE and Safari, no stack trace is recorded on the Error object,
+ * so computeStackTrace instead walks its *own* chain of callers.
+ * This means that:
+ * * in Safari, some methods may be missing from the stack trace;
+ * * in IE, the topmost function in the stack trace will always be the
+ * caller of computeStackTrace.
+ *
+ * This is okay for tracing (because you are likely to be calling
+ * computeStackTrace from the function you want to be the topmost element
+ * of the stack trace anyway), but not okay for logging unhandled
+ * exceptions (because your catch block will likely be far away from the
+ * inner function that actually caused the exception).
+ *
+ */
+TraceKit.computeStackTrace = (function computeStackTraceWrapper() {
+ // Contents of Exception in various browsers.
+ //
+ // SAFARI:
+ // ex.message = Can't find variable: qq
+ // ex.line = 59
+ // ex.sourceId = 580238192
+ // ex.sourceURL = http://...
+ // ex.expressionBeginOffset = 96
+ // ex.expressionCaretOffset = 98
+ // ex.expressionEndOffset = 98
+ // ex.name = ReferenceError
+ //
+ // FIREFOX:
+ // ex.message = qq is not defined
+ // ex.fileName = http://...
+ // ex.lineNumber = 59
+ // ex.columnNumber = 69
+ // ex.stack = ...stack trace... (see the example below)
+ // ex.name = ReferenceError
+ //
+ // CHROME:
+ // ex.message = qq is not defined
+ // ex.name = ReferenceError
+ // ex.type = not_defined
+ // ex.arguments = ['aa']
+ // ex.stack = ...stack trace...
+ //
+ // INTERNET EXPLORER:
+ // ex.message = ...
+ // ex.name = ReferenceError
+ //
+ // OPERA:
+ // ex.message = ...message... (see the example below)
+ // ex.name = ReferenceError
+ // ex.opera#sourceloc = 11 (pretty much useless, duplicates the info in ex.message)
+ // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'
+
+ /**
+ * Computes stack trace information from the stack property.
+ * Chrome and Gecko use this property.
+ * @param {Error} ex
+ * @return {?Object.} Stack trace information.
+ */
+ function computeStackTraceFromStackProp(ex) {
+ if (typeof ex.stack === 'undefined' || !ex.stack) return;
+
+ var chrome = /^\s*at (?:(.*?) ?\()?((?:file|https?|blob|chrome-extension|native|eval|webpack||[a-z]:|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i;
+ var winjs = /^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i;
+ // NOTE: blob urls are now supposed to always have an origin, therefore it's format
+ // which is `blob:http://url/path/with-some-uuid`, is matched by `blob.*?:\/` as well
+ var gecko = /^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\/.*?|\[native code\]|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i;
+ // Used to additionally parse URL/line/column from eval frames
+ var geckoEval = /(\S+) line (\d+)(?: > eval line \d+)* > eval/i;
+ var chromeEval = /\((\S*)(?::(\d+))(?::(\d+))\)/;
+ var lines = ex.stack.split('\n');
+ var stack = [];
+ var submatch;
+ var parts;
+ var element;
+ var reference = /^(.*) is undefined$/.exec(ex.message);
+
+ for (var i = 0, j = lines.length; i < j; ++i) {
+ if ((parts = chrome.exec(lines[i]))) {
+ var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line
+ var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line
+ if (isEval && (submatch = chromeEval.exec(parts[2]))) {
+ // throw out eval line/column and use top-most line/column number
+ parts[2] = submatch[1]; // url
+ parts[3] = submatch[2]; // line
+ parts[4] = submatch[3]; // column
+ }
+ element = {
+ url: !isNative ? parts[2] : null,
+ func: parts[1] || UNKNOWN_FUNCTION,
+ args: isNative ? [parts[2]] : [],
+ line: parts[3] ? +parts[3] : null,
+ column: parts[4] ? +parts[4] : null
+ };
+ } else if ((parts = winjs.exec(lines[i]))) {
+ element = {
+ url: parts[2],
+ func: parts[1] || UNKNOWN_FUNCTION,
+ args: [],
+ line: +parts[3],
+ column: parts[4] ? +parts[4] : null
+ };
+ } else if ((parts = gecko.exec(lines[i]))) {
+ var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;
+ if (isEval && (submatch = geckoEval.exec(parts[3]))) {
+ // throw out eval line/column and use top-most line number
+ parts[3] = submatch[1];
+ parts[4] = submatch[2];
+ parts[5] = null; // no column when eval
+ } else if (i === 0 && !parts[5] && typeof ex.columnNumber !== 'undefined') {
+ // FireFox uses this awesome columnNumber property for its top frame
+ // Also note, Firefox's column number is 0-based and everything else expects 1-based,
+ // so adding 1
+ // NOTE: this hack doesn't work if top-most frame is eval
+ stack[0].column = ex.columnNumber + 1;
+ }
+ element = {
+ url: parts[3],
+ func: parts[1] || UNKNOWN_FUNCTION,
+ args: parts[2] ? parts[2].split(',') : [],
+ line: parts[4] ? +parts[4] : null,
+ column: parts[5] ? +parts[5] : null
+ };
+ } else {
+ continue;
+ }
+
+ if (!element.func && element.line) {
+ element.func = UNKNOWN_FUNCTION;
+ }
+
+ if (element.url && element.url.substr(0, 5) === 'blob:') {
+ // Special case for handling JavaScript loaded into a blob.
+ // We use a synchronous AJAX request here as a blob is already in
+ // memory - it's not making a network request. This will generate a warning
+ // in the browser console, but there has already been an error so that's not
+ // that much of an issue.
+ var xhr = new XMLHttpRequest();
+ xhr.open('GET', element.url, false);
+ xhr.send(null);
+
+ // If we failed to download the source, skip this patch
+ if (xhr.status === 200) {
+ var source = xhr.responseText || '';
+
+ // We trim the source down to the last 300 characters as sourceMappingURL is always at the end of the file.
+ // Why 300? To be in line with: https://github.com/getsentry/sentry/blob/4af29e8f2350e20c28a6933354e4f42437b4ba42/src/sentry/lang/javascript/processor.py#L164-L175
+ source = source.slice(-300);
+
+ // Now we dig out the source map URL
+ var sourceMaps = source.match(/\/\/# sourceMappingURL=(.*)$/);
+
+ // If we don't find a source map comment or we find more than one, continue on to the next element.
+ if (sourceMaps) {
+ var sourceMapAddress = sourceMaps[1];
+
+ // Now we check to see if it's a relative URL.
+ // If it is, convert it to an absolute one.
+ if (sourceMapAddress.charAt(0) === '~') {
+ sourceMapAddress = getLocationOrigin() + sourceMapAddress.slice(1);
+ }
+
+ // Now we strip the '.map' off of the end of the URL and update the
+ // element so that Sentry can match the map to the blob.
+ element.url = sourceMapAddress.slice(0, -4);
+ }
+ }
+ }
+
+ stack.push(element);
+ }
+
+ if (!stack.length) {
+ return null;
+ }
+
+ return {
+ name: ex.name,
+ message: ex.message,
+ url: getLocationHref(),
+ stack: stack
+ };
+ }
+
+ /**
+ * Adds information about the first frame to incomplete stack traces.
+ * Safari and IE require this to get complete data on the first frame.
+ * @param {Object.} stackInfo Stack trace information from
+ * one of the compute* methods.
+ * @param {string} url The URL of the script that caused an error.
+ * @param {(number|string)} lineNo The line number of the script that
+ * caused an error.
+ * @param {string=} message The error generated by the browser, which
+ * hopefully contains the name of the object that caused the error.
+ * @return {boolean} Whether or not the stack information was
+ * augmented.
+ */
+ function augmentStackTraceWithInitialElement(stackInfo, url, lineNo, message) {
+ var initial = {
+ url: url,
+ line: lineNo
+ };
+
+ if (initial.url && initial.line) {
+ stackInfo.incomplete = false;
+
+ if (!initial.func) {
+ initial.func = UNKNOWN_FUNCTION;
+ }
+
+ if (stackInfo.stack.length > 0) {
+ if (stackInfo.stack[0].url === initial.url) {
+ if (stackInfo.stack[0].line === initial.line) {
+ return false; // already in stack trace
+ } else if (
+ !stackInfo.stack[0].line &&
+ stackInfo.stack[0].func === initial.func
+ ) {
+ stackInfo.stack[0].line = initial.line;
+ return false;
+ }
+ }
+ }
+
+ stackInfo.stack.unshift(initial);
+ stackInfo.partial = true;
+ return true;
+ } else {
+ stackInfo.incomplete = true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Computes stack trace information by walking the arguments.caller
+ * chain at the time the exception occurred. This will cause earlier
+ * frames to be missed but is the only way to get any stack trace in
+ * Safari and IE. The top frame is restored by
+ * {@link augmentStackTraceWithInitialElement}.
+ * @param {Error} ex
+ * @return {?Object.} Stack trace information.
+ */
+ function computeStackTraceByWalkingCallerChain(ex, depth) {
+ var functionName = /function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,
+ stack = [],
+ funcs = {},
+ recursion = false,
+ parts,
+ item,
+ source;
+
+ for (
+ var curr = computeStackTraceByWalkingCallerChain.caller;
+ curr && !recursion;
+ curr = curr.caller
+ ) {
+ if (curr === computeStackTrace || curr === TraceKit.report) {
+ // console.log('skipping internal function');
+ continue;
+ }
+
+ item = {
+ url: null,
+ func: UNKNOWN_FUNCTION,
+ line: null,
+ column: null
+ };
+
+ if (curr.name) {
+ item.func = curr.name;
+ } else if ((parts = functionName.exec(curr.toString()))) {
+ item.func = parts[1];
+ }
+
+ if (typeof item.func === 'undefined') {
+ try {
+ item.func = parts.input.substring(0, parts.input.indexOf('{'));
+ } catch (e) {}
+ }
+
+ if (funcs['' + curr]) {
+ recursion = true;
+ } else {
+ funcs['' + curr] = true;
+ }
+
+ stack.push(item);
+ }
+
+ if (depth) {
+ // console.log('depth is ' + depth);
+ // console.log('stack is ' + stack.length);
+ stack.splice(0, depth);
+ }
+
+ var result = {
+ name: ex.name,
+ message: ex.message,
+ url: getLocationHref(),
+ stack: stack
+ };
+ augmentStackTraceWithInitialElement(
+ result,
+ ex.sourceURL || ex.fileName,
+ ex.line || ex.lineNumber,
+ ex.message || ex.description
+ );
+ return result;
+ }
+
+ /**
+ * Computes a stack trace for an exception.
+ * @param {Error} ex
+ * @param {(string|number)=} depth
+ */
+ function computeStackTrace(ex, depth) {
+ var stack = null;
+ depth = depth == null ? 0 : +depth;
+
+ try {
+ stack = computeStackTraceFromStackProp(ex);
+ if (stack) {
+ return stack;
+ }
+ } catch (e) {
+ if (TraceKit.debug) {
+ throw e;
+ }
+ }
+
+ try {
+ stack = computeStackTraceByWalkingCallerChain(ex, depth + 1);
+ if (stack) {
+ return stack;
+ }
+ } catch (e) {
+ if (TraceKit.debug) {
+ throw e;
+ }
+ }
+ return {
+ name: ex.name,
+ message: ex.message,
+ url: getLocationHref()
+ };
+ }
+
+ computeStackTrace.augmentStackTraceWithInitialElement = augmentStackTraceWithInitialElement;
+ computeStackTrace.computeStackTraceFromStackProp = computeStackTraceFromStackProp;
+
+ return computeStackTrace;
+})();
+
+module.exports = TraceKit;
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"9":9}],11:[function(_dereq_,module,exports){
+/*
+ json-stringify-safe
+ Like JSON.stringify, but doesn't throw on circular references.
+
+ Originally forked from https://github.com/isaacs/json-stringify-safe
+ version 5.0.1 on 3/8/2017 and modified to handle Errors serialization
+ and IE8 compatibility. Tests for this are in test/vendor.
+
+ ISC license: https://github.com/isaacs/json-stringify-safe/blob/master/LICENSE
+*/
+
+exports = module.exports = stringify;
+exports.getSerialize = serializer;
+
+function indexOf(haystack, needle) {
+ for (var i = 0; i < haystack.length; ++i) {
+ if (haystack[i] === needle) return i;
+ }
+ return -1;
+}
+
+function stringify(obj, replacer, spaces, cycleReplacer) {
+ return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces);
+}
+
+// https://github.com/ftlabs/js-abbreviate/blob/fa709e5f139e7770a71827b1893f22418097fbda/index.js#L95-L106
+function stringifyError(value) {
+ var err = {
+ // These properties are implemented as magical getters and don't show up in for in
+ stack: value.stack,
+ message: value.message,
+ name: value.name
+ };
+
+ for (var i in value) {
+ if (Object.prototype.hasOwnProperty.call(value, i)) {
+ err[i] = value[i];
+ }
+ }
+
+ return err;
+}
+
+function serializer(replacer, cycleReplacer) {
+ var stack = [];
+ var keys = [];
+
+ if (cycleReplacer == null) {
+ cycleReplacer = function(key, value) {
+ if (stack[0] === value) {
+ return '[Circular ~]';
+ }
+ return '[Circular ~.' + keys.slice(0, indexOf(stack, value)).join('.') + ']';
+ };
+ }
+
+ return function(key, value) {
+ if (stack.length > 0) {
+ var thisPos = indexOf(stack, this);
+ ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);
+ ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);
+
+ if (~indexOf(stack, value)) {
+ value = cycleReplacer.call(this, key, value);
+ }
+ } else {
+ stack.push(value);
+ }
+
+ return replacer == null
+ ? value instanceof Error ? stringifyError(value) : value
+ : replacer.call(this, key, value);
+ };
+}
+
+},{}],12:[function(_dereq_,module,exports){
+/*
+ * JavaScript MD5
+ * https://github.com/blueimp/JavaScript-MD5
+ *
+ * Copyright 2011, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * https://opensource.org/licenses/MIT
+ *
+ * Based on
+ * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
+ * Digest Algorithm, as defined in RFC 1321.
+ * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
+ * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
+ * Distributed under the BSD License
+ * See http://pajhome.org.uk/crypt/md5 for more info.
+ */
+
+/*
+* Add integers, wrapping at 2^32. This uses 16-bit operations internally
+* to work around bugs in some JS interpreters.
+*/
+function safeAdd(x, y) {
+ var lsw = (x & 0xffff) + (y & 0xffff);
+ var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
+ return (msw << 16) | (lsw & 0xffff);
+}
+
+/*
+* Bitwise rotate a 32-bit number to the left.
+*/
+function bitRotateLeft(num, cnt) {
+ return (num << cnt) | (num >>> (32 - cnt));
+}
+
+/*
+* These functions implement the four basic operations the algorithm uses.
+*/
+function md5cmn(q, a, b, x, s, t) {
+ return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);
+}
+function md5ff(a, b, c, d, x, s, t) {
+ return md5cmn((b & c) | (~b & d), a, b, x, s, t);
+}
+function md5gg(a, b, c, d, x, s, t) {
+ return md5cmn((b & d) | (c & ~d), a, b, x, s, t);
+}
+function md5hh(a, b, c, d, x, s, t) {
+ return md5cmn(b ^ c ^ d, a, b, x, s, t);
+}
+function md5ii(a, b, c, d, x, s, t) {
+ return md5cmn(c ^ (b | ~d), a, b, x, s, t);
+}
+
+/*
+* Calculate the MD5 of an array of little-endian words, and a bit length.
+*/
+function binlMD5(x, len) {
+ /* append padding */
+ x[len >> 5] |= 0x80 << (len % 32);
+ x[(((len + 64) >>> 9) << 4) + 14] = len;
+
+ var i;
+ var olda;
+ var oldb;
+ var oldc;
+ var oldd;
+ var a = 1732584193;
+ var b = -271733879;
+ var c = -1732584194;
+ var d = 271733878;
+
+ for (i = 0; i < x.length; i += 16) {
+ olda = a;
+ oldb = b;
+ oldc = c;
+ oldd = d;
+
+ a = md5ff(a, b, c, d, x[i], 7, -680876936);
+ d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);
+ c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);
+ b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);
+ a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);
+ d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);
+ c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);
+ b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);
+ a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);
+ d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);
+ c = md5ff(c, d, a, b, x[i + 10], 17, -42063);
+ b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);
+ a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);
+ d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);
+ c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);
+ b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);
+
+ a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);
+ d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);
+ c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);
+ b = md5gg(b, c, d, a, x[i], 20, -373897302);
+ a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);
+ d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);
+ c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);
+ b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);
+ a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);
+ d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);
+ c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);
+ b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);
+ a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);
+ d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);
+ c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);
+ b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);
+
+ a = md5hh(a, b, c, d, x[i + 5], 4, -378558);
+ d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);
+ c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);
+ b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);
+ a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);
+ d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);
+ c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);
+ b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);
+ a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);
+ d = md5hh(d, a, b, c, x[i], 11, -358537222);
+ c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);
+ b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);
+ a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);
+ d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);
+ c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);
+ b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);
+
+ a = md5ii(a, b, c, d, x[i], 6, -198630844);
+ d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);
+ c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);
+ b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);
+ a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);
+ d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);
+ c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);
+ b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);
+ a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);
+ d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);
+ c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);
+ b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);
+ a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);
+ d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);
+ c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);
+ b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);
+
+ a = safeAdd(a, olda);
+ b = safeAdd(b, oldb);
+ c = safeAdd(c, oldc);
+ d = safeAdd(d, oldd);
+ }
+ return [a, b, c, d];
+}
+
+/*
+* Convert an array of little-endian words to a string
+*/
+function binl2rstr(input) {
+ var i;
+ var output = '';
+ var length32 = input.length * 32;
+ for (i = 0; i < length32; i += 8) {
+ output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xff);
+ }
+ return output;
+}
+
+/*
+* Convert a raw string to an array of little-endian words
+* Characters >255 have their high-byte silently ignored.
+*/
+function rstr2binl(input) {
+ var i;
+ var output = [];
+ output[(input.length >> 2) - 1] = undefined;
+ for (i = 0; i < output.length; i += 1) {
+ output[i] = 0;
+ }
+ var length8 = input.length * 8;
+ for (i = 0; i < length8; i += 8) {
+ output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << (i % 32);
+ }
+ return output;
+}
+
+/*
+* Calculate the MD5 of a raw string
+*/
+function rstrMD5(s) {
+ return binl2rstr(binlMD5(rstr2binl(s), s.length * 8));
+}
+
+/*
+* Calculate the HMAC-MD5, of a key and some data (raw strings)
+*/
+function rstrHMACMD5(key, data) {
+ var i;
+ var bkey = rstr2binl(key);
+ var ipad = [];
+ var opad = [];
+ var hash;
+ ipad[15] = opad[15] = undefined;
+ if (bkey.length > 16) {
+ bkey = binlMD5(bkey, key.length * 8);
+ }
+ for (i = 0; i < 16; i += 1) {
+ ipad[i] = bkey[i] ^ 0x36363636;
+ opad[i] = bkey[i] ^ 0x5c5c5c5c;
+ }
+ hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);
+ return binl2rstr(binlMD5(opad.concat(hash), 512 + 128));
+}
+
+/*
+* Convert a raw string to a hex string
+*/
+function rstr2hex(input) {
+ var hexTab = '0123456789abcdef';
+ var output = '';
+ var x;
+ var i;
+ for (i = 0; i < input.length; i += 1) {
+ x = input.charCodeAt(i);
+ output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f);
+ }
+ return output;
+}
+
+/*
+* Encode a string as utf-8
+*/
+function str2rstrUTF8(input) {
+ return unescape(encodeURIComponent(input));
+}
+
+/*
+* Take string arguments and return either raw or hex encoded strings
+*/
+function rawMD5(s) {
+ return rstrMD5(str2rstrUTF8(s));
+}
+function hexMD5(s) {
+ return rstr2hex(rawMD5(s));
+}
+function rawHMACMD5(k, d) {
+ return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d));
+}
+function hexHMACMD5(k, d) {
+ return rstr2hex(rawHMACMD5(k, d));
+}
+
+function md5(string, key, raw) {
+ if (!key) {
+ if (!raw) {
+ return hexMD5(string);
+ }
+ return rawMD5(string);
+ }
+ if (!raw) {
+ return hexHMACMD5(key, string);
+ }
+ return rawHMACMD5(key, string);
+}
+
+module.exports = md5;
+
+},{}]},{},[8,1,2,3,4])(8)
+});
\ No newline at end of file
diff --git a/packages/raven-js/dist/angular,ember,require,vue/raven.min.js b/packages/raven-js/dist/angular,ember,require,vue/raven.min.js
new file mode 100644
index 000000000000..c00e723a9132
--- /dev/null
+++ b/packages/raven-js/dist/angular,ember,require,vue/raven.min.js
@@ -0,0 +1,4 @@
+/*! Raven.js 3.25.2 (30b6d4e) | github.com/getsentry/raven-js */
+!function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,b.Raven=a()}}(function(){var a;return function b(a,c,d){function e(g,h){if(!c[g]){if(!a[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};a[g][0].call(k.exports,function(b){var c=a[g][1][b];return e(c?c:b)},k,k.exports,b,a,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g":"anonymous component")+(a._isVue&&a.$options.__file?" at "+a.$options.__file:"")}function e(a,b){if(b=b||window.Vue,b&&b.config){var c=b.config.errorHandler;b.config.errorHandler=function(b,e,f){var g={};"[object Object]"===Object.prototype.toString.call(e)&&(g.componentName=d(e),g.propsData=e.$options.propsData),"undefined"!=typeof f&&(g.lifecycleHook=f),a.captureException(b,{extra:g}),"function"==typeof c&&c.call(this,b,e,f)}}}b.exports=e,a(8).addPlugin(b.exports)},{8:8}],5:[function(a,b,c){function d(a){this.name="RavenConfigError",this.message=a}d.prototype=new Error,d.prototype.constructor=d,b.exports=d},{}],6:[function(a,b,c){var d=a(9),e=function(a,b,c){var e=a[b],f=a;if(b in a){var g="warn"===b?"warning":b;a[b]=function(){var a=[].slice.call(arguments),h=d.safeJoin(a," "),i={level:g,logger:"console",extra:{arguments:a}};"assert"===b?a[0]===!1&&(h="Assertion failed: "+(d.safeJoin(a.slice(1)," ")||"console.assert"),i.extra.arguments=a.slice(1),c&&c(h,i)):c&&c(h,i),e&&Function.prototype.apply.call(e,f,a)}}};b.exports={wrapMethod:e}},{9:9}],7:[function(a,b,c){(function(c){function d(){return+new Date}function e(a,b){return s(b)?function(c){return b(c,a)}:b}function f(){this.b=!("object"!=typeof JSON||!JSON.stringify),this.c=!r(S),this.d=!r(T),this.e=null,this.f=null,this.g=null,this.h=null,this.i=null,this.j=null,this.k={},this.l={release:R.SENTRY_RELEASE&&R.SENTRY_RELEASE.id,logger:"javascript",ignoreErrors:[],ignoreUrls:[],whitelistUrls:[],includePaths:[],headers:null,collectWindowErrors:!0,captureUnhandledRejections:!0,maxMessageLength:0,maxUrlLength:250,stackTraceLimit:50,autoBreadcrumbs:!0,instrument:!0,sampleRate:1,sanitizeKeys:[]},this.m={method:"POST",keepalive:!0,referrerPolicy:K()?"origin":""},this.n=0,this.o=!1,this.p=Error.stackTraceLimit,this.q=R.console||{},this.r={},this.s=[],this.t=d(),this.u=[],this.v=[],this.w=null,this.x=R.location,this.y=this.x&&this.x.href,this.z();for(var a in this.q)this.r[a]=this.q[a]}var g=a(10),h=a(11),i=a(12),j=a(5),k=a(9),l=k.isErrorEvent,m=k.isDOMError,n=k.isDOMException,o=k.isError,p=k.isObject,q=k.isPlainObject,r=k.isUndefined,s=k.isFunction,t=k.isString,u=k.isArray,v=k.isEmptyObject,w=k.each,x=k.objectMerge,y=k.truncate,z=k.objectFrozen,A=k.hasKey,B=k.joinRegExp,C=k.urlencode,D=k.uuid4,E=k.htmlTreeAsString,F=k.isSameException,G=k.isSameStacktrace,H=k.parseUrl,I=k.fill,J=k.supportsFetch,K=k.supportsReferrerPolicy,L=k.serializeKeysForMessage,M=k.serializeException,N=k.sanitize,O=a(6).wrapMethod,P="source protocol user pass host port path".split(" "),Q=/^(?:(\w+):)?\/\/(?:(\w+)(:\w+)?@)?([\w\.-]+)(?::(\d+))?(\/.*)/,R="undefined"!=typeof window?window:"undefined"!=typeof c?c:"undefined"!=typeof self?self:{},S=R.document,T=R.navigator;f.prototype={VERSION:"3.25.2",debug:!1,TraceKit:g,config:function(a,b){var c=this;if(c.h)return this.A("error","Error: Raven has already been configured"),c;if(!a)return c;var d=c.l;b&&w(b,function(a,b){"tags"===a||"extra"===a||"user"===a?c.k[a]=b:d[a]=b}),c.setDSN(a),d.ignoreErrors.push(/^Script error\.?$/),d.ignoreErrors.push(/^Javascript error: Script error\.? on line 0$/),d.ignoreErrors=B(d.ignoreErrors),d.ignoreUrls=!!d.ignoreUrls.length&&B(d.ignoreUrls),d.whitelistUrls=!!d.whitelistUrls.length&&B(d.whitelistUrls),d.includePaths=B(d.includePaths),d.maxBreadcrumbs=Math.max(0,Math.min(d.maxBreadcrumbs||100,100));var e={xhr:!0,console:!0,dom:!0,location:!0,sentry:!0},f=d.autoBreadcrumbs;"[object Object]"==={}.toString.call(f)?f=x(e,f):f!==!1&&(f=e),d.autoBreadcrumbs=f;var h={tryCatch:!0},i=d.instrument;return"[object Object]"==={}.toString.call(i)?i=x(h,i):i!==!1&&(i=h),d.instrument=i,g.collectWindowErrors=!!d.collectWindowErrors,c},install:function(){var a=this;return a.isSetup()&&!a.o&&(g.report.subscribe(function(){a.B.apply(a,arguments)}),a.l.captureUnhandledRejections&&a.C(),a.D(),a.l.instrument&&a.l.instrument.tryCatch&&a.E(),a.l.autoBreadcrumbs&&a.F(),a.G(),a.o=!0),Error.stackTraceLimit=a.l.stackTraceLimit,this},setDSN:function(a){var b=this,c=b.H(a),d=c.path.lastIndexOf("/"),e=c.path.substr(1,d);b.I=a,b.i=c.user,b.J=c.pass&&c.pass.substr(1),b.j=c.path.substr(d+1),b.h=b.K(c),b.L=b.h+"/"+e+"api/"+b.j+"/store/",this.z()},context:function(a,b,c){return s(a)&&(c=b||[],b=a,a=void 0),this.wrap(a,b).apply(this,c)},wrap:function(a,b,c){function d(){var d=[],f=arguments.length,g=!a||a&&a.deep!==!1;for(c&&s(c)&&c.apply(this,arguments);f--;)d[f]=g?e.wrap(a,arguments[f]):arguments[f];try{return b.apply(this,d)}catch(h){throw e.M(),e.captureException(h,a),h}}var e=this;if(r(b)&&!s(a))return a;if(s(a)&&(b=a,a=void 0),!s(b))return b;try{if(b.N)return b;if(b.O)return b.O}catch(f){return b}for(var g in b)A(b,g)&&(d[g]=b[g]);return d.prototype=b.prototype,b.O=d,d.N=!0,d.P=b,d},uninstall:function(){return g.report.uninstall(),this.Q(),this.R(),this.S(),this.T(),Error.stackTraceLimit=this.p,this.o=!1,this},U:function(a){this.A("debug","Raven caught unhandled promise rejection:",a),this.captureException(a.reason,{extra:{unhandledPromiseRejection:!0}})},C:function(){return this.U=this.U.bind(this),R.addEventListener&&R.addEventListener("unhandledrejection",this.U),this},Q:function(){return R.removeEventListener&&R.removeEventListener("unhandledrejection",this.U),this},captureException:function(a,b){if(b=x({trimHeadFrames:0},b?b:{}),l(a)&&a.error)a=a.error;else{if(m(a)||n(a)){var c=a.name||(m(a)?"DOMError":"DOMException"),d=a.message?c+": "+a.message:c;return this.captureMessage(d,x(b,{stacktrace:!0,trimHeadFrames:b.trimHeadFrames+1}))}if(o(a))a=a;else{if(!q(a))return this.captureMessage(a,x(b,{stacktrace:!0,trimHeadFrames:b.trimHeadFrames+1}));b=this.V(b,a),a=new Error(b.message)}}this.e=a;try{var e=g.computeStackTrace(a);this.W(e,b)}catch(f){if(a!==f)throw f}return this},V:function(a,b){var c=Object.keys(b).sort(),d=x(a,{message:"Non-Error exception captured with keys: "+L(c),fingerprint:[i(c)],extra:a.extra||{}});return d.extra.X=M(b),d},captureMessage:function(a,b){if(!this.l.ignoreErrors.test||!this.l.ignoreErrors.test(a)){b=b||{},a+="";var c,d=x({message:a},b);try{throw new Error(a)}catch(e){c=e}c.name=null;var f=g.computeStackTrace(c),h=u(f.stack)&&f.stack[1];h&&"Raven.captureException"===h.func&&(h=f.stack[2]);var i=h&&h.url||"";if((!this.l.ignoreUrls.test||!this.l.ignoreUrls.test(i))&&(!this.l.whitelistUrls.test||this.l.whitelistUrls.test(i))){if(this.l.stacktrace||b&&b.stacktrace){d.fingerprint=null==d.fingerprint?a:d.fingerprint,b=x({trimHeadFrames:0},b),b.trimHeadFrames+=1;var j=this.Y(f,b);d.stacktrace={frames:j.reverse()}}return d.fingerprint&&(d.fingerprint=u(d.fingerprint)?d.fingerprint:[d.fingerprint]),this.Z(d),this}}},captureBreadcrumb:function(a){var b=x({timestamp:d()/1e3},a);if(s(this.l.breadcrumbCallback)){var c=this.l.breadcrumbCallback(b);if(p(c)&&!v(c))b=c;else if(c===!1)return this}return this.v.push(b),this.v.length>this.l.maxBreadcrumbs&&this.v.shift(),this},addPlugin:function(a){var b=[].slice.call(arguments,1);return this.s.push([a,b]),this.o&&this.G(),this},setUserContext:function(a){return this.k.user=a,this},setExtraContext:function(a){return this.$("extra",a),this},setTagsContext:function(a){return this.$("tags",a),this},clearContext:function(){return this.k={},this},getContext:function(){return JSON.parse(h(this.k))},setEnvironment:function(a){return this.l.environment=a,this},setRelease:function(a){return this.l.release=a,this},setDataCallback:function(a){var b=this.l.dataCallback;return this.l.dataCallback=e(b,a),this},setBreadcrumbCallback:function(a){var b=this.l.breadcrumbCallback;return this.l.breadcrumbCallback=e(b,a),this},setShouldSendCallback:function(a){var b=this.l.shouldSendCallback;return this.l.shouldSendCallback=e(b,a),this},setTransport:function(a){return this.l.transport=a,this},lastException:function(){return this.e},lastEventId:function(){return this.g},isSetup:function(){return!!this.b&&(!!this.h||(this.ravenNotConfiguredError||(this.ravenNotConfiguredError=!0,this.A("error","Error: Raven has not been configured.")),!1))},afterLoad:function(){var a=R.RavenConfig;a&&this.config(a.dsn,a.config).install()},showReportDialog:function(a){if(S){a=a||{};var b=a.eventId||this.lastEventId();if(!b)throw new j("Missing eventId");var c=a.dsn||this.I;if(!c)throw new j("Missing DSN");var d=encodeURIComponent,e="";e+="?eventId="+d(b),e+="&dsn="+d(c);var f=a.user||this.k.user;f&&(f.name&&(e+="&name="+d(f.name)),f.email&&(e+="&email="+d(f.email)));var g=this.K(this.H(c)),h=S.createElement("script");h.async=!0,h.src=g+"/api/embed/error-page/"+e,(S.head||S.body).appendChild(h)}},M:function(){var a=this;this.n+=1,setTimeout(function(){a.n-=1})},_:function(a,b){var c,d;if(this.c){b=b||{},a="raven"+a.substr(0,1).toUpperCase()+a.substr(1),S.createEvent?(c=S.createEvent("HTMLEvents"),c.initEvent(a,!0,!0)):(c=S.createEventObject(),c.eventType=a);for(d in b)A(b,d)&&(c[d]=b[d]);if(S.createEvent)S.dispatchEvent(c);else try{S.fireEvent("on"+c.eventType.toLowerCase(),c)}catch(e){}}},aa:function(a){var b=this;return function(c){if(b.ba=null,b.w!==c){b.w=c;var d;try{d=E(c.target)}catch(e){d=""}b.captureBreadcrumb({category:"ui."+a,message:d})}}},ca:function(){var a=this,b=1e3;return function(c){var d;try{d=c.target}catch(e){return}var f=d&&d.tagName;if(f&&("INPUT"===f||"TEXTAREA"===f||d.isContentEditable)){var g=a.ba;g||a.aa("input")(c),clearTimeout(g),a.ba=setTimeout(function(){a.ba=null},b)}}},da:function(a,b){var c=H(this.x.href),d=H(b),e=H(a);this.y=b,c.protocol===d.protocol&&c.host===d.host&&(b=d.relative),c.protocol===e.protocol&&c.host===e.host&&(a=e.relative),this.captureBreadcrumb({category:"navigation",data:{to:b,from:a}})},D:function(){var a=this;a.ea=Function.prototype.toString,Function.prototype.toString=function(){return"function"==typeof this&&this.N?a.ea.apply(this.P,arguments):a.ea.apply(this,arguments)}},R:function(){this.ea&&(Function.prototype.toString=this.ea)},E:function(){function a(a){return function(b,d){for(var e=new Array(arguments.length),f=0;f2?arguments[2]:void 0;return c&&b.da(b.y,c+""),a.apply(this,arguments)}};I(R.history,"pushState",j,d),I(R.history,"replaceState",j,d)}if(c.console&&"console"in R&&console.log){var k=function(a,c){b.captureBreadcrumb({message:a,level:c.level,category:"console"})};w(["debug","info","warn","error","log"],function(a,b){O(console,b,k)})}},S:function(){for(var a;this.u.length;){a=this.u.shift();var b=a[0],c=a[1],d=a[2];b[c]=d}},T:function(){for(var a in this.r)this.q[a]=this.r[a]},G:function(){var a=this;w(this.s,function(b,c){var d=c[0],e=c[1];d.apply(a,[a].concat(e))})},H:function(a){var b=Q.exec(a),c={},d=7;try{for(;d--;)c[P[d]]=b[d]||""}catch(e){throw new j("Invalid DSN: "+a)}if(c.pass&&!this.l.allowSecretKey)throw new j("Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key");return c},K:function(a){var b="//"+a.host+(a.port?":"+a.port:"");return a.protocol&&(b=a.protocol+":"+b),b},B:function(){this.n||this.W.apply(this,arguments)},W:function(a,b){var c=this.Y(a,b);this._("handle",{stackInfo:a,options:b}),this.ga(a.name,a.message,a.url,a.lineno,c,b)},Y:function(a,b){var c=this,d=[];if(a.stack&&a.stack.length&&(w(a.stack,function(b,e){var f=c.ha(e,a.url);f&&d.push(f)}),b&&b.trimHeadFrames))for(var e=0;e0&&(a.breadcrumbs={values:[].slice.call(this.v,0)}),this.k.user&&(a.user=this.k.user),b.environment&&(a.environment=b.environment),b.release&&(a.release=b.release),b.serverName&&(a.server_name=b.serverName),a=this.qa(a),Object.keys(a).forEach(function(b){(null==a[b]||""===a[b]||v(a[b]))&&delete a[b]}),s(b.dataCallback)&&(a=b.dataCallback(a)||a),a&&!v(a)&&(!s(b.shouldSendCallback)||b.shouldSendCallback(a)))return this.na()?void this.A("warn","Raven dropped error due to backoff: ",a):void("number"==typeof b.sampleRate?Math.random() ",i=h.length;a&&f++1&&g+e.length*i+b.length>=d));)e.push(b),g+=b.length,a=a.parentNode;return e.reverse().join(h)}function F(a){var b,c,d,e,f,g=[];if(!a||!a.tagName)return"";if(g.push(a.tagName.toLowerCase()),a.id&&g.push("#"+a.id),b=a.className,b&&l(b))for(c=b.split(/\s+/),f=0;fc?Q(a,b-1):d}function R(a,b){if("number"==typeof a||"string"==typeof a)return a.toString();if(!Array.isArray(a))return"";if(a=a.filter(function(a){return"string"==typeof a}),0===a.length)return"[object has no keys]";if(b="number"!=typeof b?X:b,a[0].length>=b)return a[0];for(var c=a.length;c>0;c--){var d=a.slice(0,c).join(", ");if(!(d.length>b))return c===a.length?d:d+"…"}return""}function S(a,b){function c(a){return m(a)?a.map(function(a){return c(a)}):k(a)?Object.keys(a).reduce(function(b,d){return b[d]=e.test(d)?f:c(a[d]),b},{}):a}if(!m(b)||m(b)&&0===b.length)return a;var d,e=A(b),f="********";try{d=JSON.parse(T(a))}catch(g){return a}return c(d)}var T=a(11),U="undefined"!=typeof window?window:"undefined"!=typeof c?c:"undefined"!=typeof self?self:{},V=3,W=51200,X=40;b.exports={isObject:d,isError:e,isErrorEvent:f,isDOMError:g,isDOMException:h,isUndefined:i,isFunction:j,isPlainObject:k,isString:l,isArray:m,isEmptyObject:n,supportsErrorEvent:o,supportsDOMError:p,supportsDOMException:q,supportsFetch:r,supportsReferrerPolicy:s,supportsPromiseRejectionEvent:t,wrappedCallback:u,each:v,objectMerge:w,truncate:y,objectFrozen:x,hasKey:z,joinRegExp:A,urlencode:B,uuid4:D,htmlTreeAsString:E,htmlElementAsString:F,isSameException:I,isSameStacktrace:J,parseUrl:C,fill:K,safeJoin:L,serializeException:Q,serializeKeysForMessage:R,sanitize:S}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{11:11}],10:[function(a,b,c){(function(c){function d(){return"undefined"==typeof document||null==document.location?"":document.location.href}function e(){return"undefined"==typeof document||null==document.location?"":(document.location.origin||(document.location.origin=document.location.protocol+"//"+document.location.hostname+(document.location.port?":"+document.location.port:"")),document.location.origin)}var f=a(9),g={collectWindowErrors:!0,debug:!1},h="undefined"!=typeof window?window:"undefined"!=typeof c?c:"undefined"!=typeof self?self:{},i=[].slice,j="?",k=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;g.report=function(){function a(a){m(),s.push(a)}function b(a){for(var b=s.length-1;b>=0;--b)s[b]===a&&s.splice(b,1)}function c(){n(),s=[]}function e(a,b){var c=null;if(!b||g.collectWindowErrors){for(var d in s)if(s.hasOwnProperty(d))try{s[d].apply(null,[a].concat(i.call(arguments,2)))}catch(e){c=e}if(c)throw c}}function l(a,b,c,h,i){var l=null,m=f.isErrorEvent(i)?i.error:i,n=f.isErrorEvent(a)?a.message:a;if(v)g.computeStackTrace.augmentStackTraceWithInitialElement(v,b,c,n),o();else if(m&&f.isError(m))l=g.computeStackTrace(m),e(l,!0);else{var p,r={url:b,line:c,column:h},s=void 0;if("[object String]"==={}.toString.call(n)){var p=n.match(k);p&&(s=p[1],n=p[2])}r.func=j,l={name:s,message:n,url:d(),stack:[r]},e(l,!0)}return!!q&&q.apply(this,arguments)}function m(){r||(q=h.onerror,h.onerror=l,r=!0)}function n(){r&&(h.onerror=q,r=!1,q=void 0)}function o(){var a=v,b=t;t=null,v=null,u=null,e.apply(null,[a,!1].concat(b))}function p(a,b){var c=i.call(arguments,1);if(v){if(u===a)return;o()}var d=g.computeStackTrace(a);if(v=d,u=a,t=c,setTimeout(function(){u===a&&o()},d.incomplete?2e3:0),b!==!1)throw a}var q,r,s=[],t=null,u=null,v=null;return p.subscribe=a,p.unsubscribe=b,p.uninstall=c,p}(),g.computeStackTrace=function(){function a(a){if("undefined"!=typeof a.stack&&a.stack){for(var b,c,f,g=/^\s*at (?:(.*?) ?\()?((?:file|https?|blob|chrome-extension|native|eval|webpack||[a-z]:|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,h=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i,i=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\/.*?|\[native code\]|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i,k=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,l=/\((\S*)(?::(\d+))(?::(\d+))\)/,m=a.stack.split("\n"),n=[],o=(/^(.*) is undefined$/.exec(a.message),0),p=m.length;o eval")>-1;r&&(b=k.exec(c[3]))?(c[3]=b[1],c[4]=b[2],c[5]=null):0!==o||c[5]||"undefined"==typeof a.columnNumber||(n[0].column=a.columnNumber+1),f={url:c[3],func:c[1]||j,args:c[2]?c[2].split(","):[],line:c[4]?+c[4]:null,column:c[5]?+c[5]:null}}if(!f.func&&f.line&&(f.func=j),f.url&&"blob:"===f.url.substr(0,5)){var s=new XMLHttpRequest;if(s.open("GET",f.url,!1),s.send(null),200===s.status){var t=s.responseText||"";t=t.slice(-300);var u=t.match(/\/\/# sourceMappingURL=(.*)$/);if(u){var v=u[1];"~"===v.charAt(0)&&(v=e()+v.slice(1)),f.url=v.slice(0,-4)}}}n.push(f)}return n.length?{name:a.name,message:a.message,url:d(),stack:n}:null}}function b(a,b,c,d){var e={url:b,line:c};if(e.url&&e.line){if(a.incomplete=!1,e.func||(e.func=j),a.stack.length>0&&a.stack[0].url===e.url){if(a.stack[0].line===e.line)return!1;if(!a.stack[0].line&&a.stack[0].func===e.func)return a.stack[0].line=e.line,!1}return a.stack.unshift(e),a.partial=!0,!0}return a.incomplete=!0,!1}function c(a,e){for(var h,i,k=/function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,l=[],m={},n=!1,o=c.caller;o&&!n;o=o.caller)if(o!==f&&o!==g.report){if(i={url:null,func:j,line:null,column:null},o.name?i.func=o.name:(h=k.exec(o.toString()))&&(i.func=h[1]),"undefined"==typeof i.func)try{i.func=h.input.substring(0,h.input.indexOf("{"))}catch(p){}m[""+o]?n=!0:m[""+o]=!0,l.push(i)}e&&l.splice(0,e);var q={name:a.name,message:a.message,url:d(),stack:l};return b(q,a.sourceURL||a.fileName,a.line||a.lineNumber,a.message||a.description),q}function f(b,e){var f=null;e=null==e?0:+e;try{if(f=a(b))return f}catch(h){if(g.debug)throw h}try{if(f=c(b,e+1))return f}catch(h){if(g.debug)throw h}return{name:b.name,message:b.message,url:d()}}return f.augmentStackTraceWithInitialElement=b,f.computeStackTraceFromStackProp=a,f}(),b.exports=g}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{9:9}],11:[function(a,b,c){function d(a,b){for(var c=0;c0){var i=d(c,this);~i?c.splice(i+1):c.push(this),~i?e.splice(i,1/0,g):e.push(g),~d(c,h)&&(h=b.call(this,g,h))}else c.push(h);return null==a?h instanceof Error?f(h):h:a.call(this,g,h)}}c=b.exports=e,c.getSerialize=g},{}],12:[function(a,b,c){function d(a,b){var c=(65535&a)+(65535&b),d=(a>>16)+(b>>16)+(c>>16);return d<<16|65535&c}function e(a,b){return a<>>32-b}function f(a,b,c,f,g,h){return d(e(d(d(b,a),d(f,h)),g),c)}function g(a,b,c,d,e,g,h){return f(b&c|~b&d,a,b,e,g,h)}function h(a,b,c,d,e,g,h){return f(b&d|c&~d,a,b,e,g,h)}function i(a,b,c,d,e,g,h){return f(b^c^d,a,b,e,g,h)}function j(a,b,c,d,e,g,h){return f(c^(b|~d),a,b,e,g,h)}function k(a,b){a[b>>5]|=128<>>9<<4)+14]=b;var c,e,f,k,l,m=1732584193,n=-271733879,o=-1732584194,p=271733878;for(c=0;c>5]>>>b%32&255);return c}function m(a){var b,c=[];for(c[(a.length>>2)-1]=void 0,b=0;b>5]|=(255&a.charCodeAt(b/8))<16&&(e=k(e,8*a.length)),c=0;c<16;c+=1)f[c]=909522486^e[c],g[c]=1549556828^e[c];return d=k(f.concat(m(b)),512+8*b.length),l(k(g.concat(d),640))}function p(a){var b,c,d="0123456789abcdef",e="";for(c=0;c>>4&15)+d.charAt(15&b);return e}function q(a){return unescape(encodeURIComponent(a))}function r(a){return n(q(a))}function s(a){return p(r(a))}function t(a,b){return o(q(a),q(b))}function u(a,b){return p(t(a,b))}function v(a,b,c){return b?c?t(b,a):u(b,a):c?r(a):s(a)}b.exports=v},{}]},{},[8,1,2,3,4])(8)});
+//# sourceMappingURL=raven.min.js.map
\ No newline at end of file
diff --git a/packages/raven-js/dist/angular,ember,require,vue/raven.min.js.map b/packages/raven-js/dist/angular,ember,require,vue/raven.min.js.map
new file mode 100644
index 000000000000..84cb20bd2db6
--- /dev/null
+++ b/packages/raven-js/dist/angular,ember,require,vue/raven.min.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["raven.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Raven","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length","1","_dereq_","angularPlugin","angular","RavenProvider","$get","$window","ExceptionHandlerProvider","$provide","decorator","exceptionHandler","R","$delegate","ex","cause","captureException","extra","moduleName","provider","config","setDataCallback","wrappedCallback","data","_normalizeData","angularPattern","exception","values","matches","exec","value","type","message","angularDocs","substr","addPlugin","8","9","2","emberPlugin","Ember","_oldOnError","onerror","error","RSVP","on","reason","context","captureMessage","3","requirePlugin","wrap","deep","4","formatComponentName","vm","$root","name","_isVue","$options","_componentTag","__file","vuePlugin","Vue","errorHandler","info","metaData","Object","prototype","toString","componentName","propsData","lifecycleHook","5","RavenConfigError","constructor","6","utils","wrapMethod","console","level","callback","originalConsoleLevel","originalConsole","sentryLevel","args","slice","arguments","msg","safeJoin","logger","Function","apply","7","now","Date","keepOriginalCallback","original","isFunction","_hasJSON","JSON","stringify","_hasDocument","isUndefined","_document","_hasNavigator","_navigator","_lastCapturedException","_lastData","_lastEventId","_globalServer","_globalKey","_globalProject","_globalContext","_globalOptions","release","_window","SENTRY_RELEASE","id","ignoreErrors","ignoreUrls","whitelistUrls","includePaths","headers","collectWindowErrors","captureUnhandledRejections","maxMessageLength","maxUrlLength","stackTraceLimit","autoBreadcrumbs","instrument","sampleRate","sanitizeKeys","_fetchDefaults","method","keepalive","referrerPolicy","supportsReferrerPolicy","_ignoreOnError","_isRavenInstalled","_originalErrorStackTraceLimit","_originalConsole","_originalConsoleMethods","_plugins","_startTime","_wrappedBuiltIns","_breadcrumbs","_lastCapturedEvent","_location","location","_lastHref","href","_resetBackoff","TraceKit","md5","isErrorEvent","isDOMError","isDOMException","isError","isObject","isPlainObject","isString","isArray","isEmptyObject","each","objectMerge","truncate","objectFrozen","hasKey","joinRegExp","urlencode","uuid4","htmlTreeAsString","isSameException","isSameStacktrace","parseUrl","fill","supportsFetch","serializeKeysForMessage","serializeException","sanitize","wrapConsoleMethod","dsnKeys","split","dsnPattern","document","navigator","VERSION","debug","dsn","options","_logDebug","globalOptions","key","setDSN","push","maxBreadcrumbs","Math","max","min","autoBreadcrumbDefaults","xhr","dom","sentry","instrumentDefaults","tryCatch","install","isSetup","report","subscribe","_handleOnErrorStackInfo","_attachPromiseRejectionHandler","_patchFunctionToString","_instrumentTryCatch","_instrumentBreadcrumbs","_drainPlugins","uri","_parseDSN","lastSlash","path","lastIndexOf","_dsn","user","_globalSecret","pass","_getGlobalServer","_globalEndpoint","func","undefined","_before","wrapped","_ignoreNextOnError","__raven__","__raven_wrapper__","property","__orig__","uninstall","_detachPromiseRejectionHandler","_unpatchFunctionToString","_restoreBuiltIns","_restoreConsole","U","event","unhandledPromiseRejection","C","_promiseRejectionHandler","bind","addEventListener","Q","removeEventListener","trimHeadFrames","stacktrace","_getCaptureExceptionOptionsFromPlainObject","stack","computeStackTrace","_handleStackInfo","ex1","V","currentOptions","exKeys","keys","sort","fingerprint","__serialized__","test","initialCall","fileurl","url","frames","_prepareFrames","reverse","_send","captureBreadcrumb","obj","crumb","timestamp","breadcrumbCallback","result","shift","plugin","pluginArgs","setUserContext","setExtraContext","_mergeContext","setTagsContext","tags","clearContext","getContext","parse","setEnvironment","environment","setRelease","dataCallback","setBreadcrumbCallback","setShouldSendCallback","shouldSendCallback","setTransport","transport","lastException","lastEventId","ravenNotConfiguredError","afterLoad","RavenConfig","showReportDialog","eventId","encode","encodeURIComponent","qs","email","globalServer","script","createElement","async","src","head","body","appendChild","M","setTimeout","_","eventType","evt","toUpperCase","createEvent","initEvent","createEventObject","dispatchEvent","fireEvent","toLowerCase","aa","evtName","_keypressTimeout","target","category","ca","debounceDuration","tagName","isContentEditable","timeout","_breadcrumbEventHandler","clearTimeout","da","from","to","parsedLoc","parsedTo","parsedFrom","protocol","host","relative","D","_originalFunctionToString","E","wrapTimeFn","orig","fn","Array","originalCallback","wrapEventTarget","proto","hasOwnProperty","capture","secure","handleEvent","err","before","clickHandler","keypressHandler","_keypressEventHandler","wrappedBuiltIns","requestAnimationFrame","cb","eventTargets","F","wrapProp","prop","xhrproto","XMLHttpRequest","origOpen","indexOf","__raven_xhr","status_code","origSend","onreadystatechangeHandler","readyState","status","props","j","onreadystatechange","origFetch","fetchInput","Request","fetchData","then","response","attachEvent","chrome","isChromePackagedApp","app","runtime","hasPushAndReplaceState","history","pushState","replaceState","oldOnPopState","onpopstate","currentHref","_captureUrlChange","historyReplacementFunction","origHistFunction","log","consoleMethodCallback","S","builtin","T","G","installer","concat","H","str","m","allowSecretKey","K","port","B","W","stackInfo","_triggerEvent","_processException","lineno","Y","frame","_normalizeFrame","in_app","ha","stackInfoUrl","normalized","filename","line","colno","column","function","ga","prefixedMessage","transaction","ia","request","Referer","breadcrumbs","_trimBreadcrumbs","ja","urlProp","urlProps","ka","httpData","userAgent","User-Agent","referrer","z","_backoffDuration","_backoffStart","na","oa","current","last","pa","_shouldBackoff","retry","get","getResponseHeader","parseInt","Z","baseData","project","platform","_getHttpData","serverName","server_name","_sanitizeData","forEach","random","_sendProcessedPayload","qa","sa","ra","_trimPacket","allowDuplicates","_isRepeatData","event_id","_getUuid","auth","sentry_version","sentry_client","sentry_key","sentry_secret","_makeRequest","onSuccess","onError","_setBackoffState","ta","opts","evaluatedHeaders","evaluatedFetchParameters","_evaluateHash","fetchParameters","defaultFetchOptions","fetchOptions","fetch","ok","hasCORS","XDomainRequest","replace","onload","open","setRequestHeader","send","ua","hash","evaluated","A","$","setUser","setReleaseContext","10","11","12","RavenConstructor","_Raven","noConflict","Client","what","supportsErrorEvent","ErrorEvent","supportsDOMError","DOMError","supportsDOMException","DOMException","Headers","Response","supportsPromiseRejectionEvent","PromiseRejectionEvent","normalizedData","obj1","obj2","isFrozen","object","patterns","pattern","sources","len","source","RegExp","join","pairs","match","query","fragment","crypto","msCrypto","getRandomValues","arr","Uint16Array","pad","num","v","c","elem","nextStr","MAX_TRAVERSE_HEIGHT","MAX_OUTPUT_LEN","out","height","separator","sepLength","htmlElementAsString","parentNode","className","classes","attr","attrWhitelist","getAttribute","isOnlyOneTruthy","b","isBothUndefined","ex2","stack1","stack2","frames1","frames2","replacement","track","input","delimiter","output","String","utf8Length","encodeURI","jsonSize","serializeValue","maxLength","serializeObject","depth","reduce","acc","map","val","maxSize","MAX_SERIALIZE_EXCEPTION_DEPTH","MAX_SERIALIZE_EXCEPTION_SIZE","serialized","filter","MAX_SERIALIZE_KEYS_LENGTH","usedKeys","sanitizeWorker","workerInput","k","sanitizeRegExp","sanitizeMask","safeInput","o_O","getLocationHref","getLocationOrigin","origin","hostname","_slice","UNKNOWN_FUNCTION","ERROR_TYPES_RE","handler","installGlobalHandler","handlers","unsubscribe","splice","unsubscribeAll","uninstallGlobalHandler","notifyHandlers","isWindowError","inner","traceKitWindowOnError","lineNo","colNo","lastExceptionStack","augmentStackTraceWithInitialElement","processLastException","groups","_oldOnerrorHandler","_onErrorHandlerInstalled","_lastExceptionStack","_lastArgs","lastArgs","rethrow","incomplete","computeStackTraceFromStackProp","submatch","parts","element","winjs","gecko","geckoEval","chromeEval","lines","isNative","isEval","columnNumber","responseText","sourceMaps","sourceMapAddress","charAt","initial","unshift","partial","computeStackTraceByWalkingCallerChain","item","functionName","funcs","recursion","curr","caller","substring","sourceURL","fileName","lineNumber","description","haystack","needle","replacer","spaces","cycleReplacer","serializer","stringifyError","thisPos","Infinity","getSerialize","safeAdd","x","y","lsw","msw","bitRotateLeft","cnt","md5cmn","q","md5ff","d","md5gg","md5hh","md5ii","binlMD5","olda","oldb","oldc","oldd","binl2rstr","length32","fromCharCode","rstr2binl","length8","charCodeAt","rstrMD5","rstrHMACMD5","bkey","ipad","opad","rstr2hex","hexTab","str2rstrUTF8","unescape","rawMD5","hexMD5","rawHMACMD5","hexHMACMD5","string","raw"],"mappings":"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","file":"raven.min.js"}
\ No newline at end of file
diff --git a/packages/raven-js/dist/angular,ember,require/raven.js b/packages/raven-js/dist/angular,ember,require/raven.js
new file mode 100644
index 000000000000..ec05cb0764ed
--- /dev/null
+++ b/packages/raven-js/dist/angular,ember,require/raven.js
@@ -0,0 +1,4137 @@
+/*! Raven.js 3.25.2 (30b6d4e) | github.com/getsentry/raven-js */
+
+/*
+ * Includes TraceKit
+ * https://github.com/getsentry/TraceKit
+ *
+ * Copyright 2018 Matt Robenolt and other contributors
+ * Released under the BSD license
+ * https://github.com/getsentry/raven-js/blob/master/LICENSE
+ *
+ */
+
+(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Raven = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o captureException(string) => captureMessage(string)
+ if (initialCall && initialCall.func === 'Raven.captureException') {
+ initialCall = stack.stack[2];
+ }
+
+ var fileurl = (initialCall && initialCall.url) || '';
+
+ if (
+ !!this._globalOptions.ignoreUrls.test &&
+ this._globalOptions.ignoreUrls.test(fileurl)
+ ) {
+ return;
+ }
+
+ if (
+ !!this._globalOptions.whitelistUrls.test &&
+ !this._globalOptions.whitelistUrls.test(fileurl)
+ ) {
+ return;
+ }
+
+ if (this._globalOptions.stacktrace || (options && options.stacktrace)) {
+ // fingerprint on msg, not stack trace (legacy behavior, could be revisited)
+ data.fingerprint = data.fingerprint == null ? msg : data.fingerprint;
+
+ options = objectMerge(
+ {
+ trimHeadFrames: 0
+ },
+ options
+ );
+ // Since we know this is a synthetic trace, the top frame (this function call)
+ // MUST be from Raven.js, so mark it for trimming
+ // We add to the trim counter so that callers can choose to trim extra frames, such
+ // as utility functions.
+ options.trimHeadFrames += 1;
+
+ var frames = this._prepareFrames(stack, options);
+ data.stacktrace = {
+ // Sentry expects frames oldest to newest
+ frames: frames.reverse()
+ };
+ }
+
+ // Make sure that fingerprint is always wrapped in an array
+ if (data.fingerprint) {
+ data.fingerprint = isArray(data.fingerprint)
+ ? data.fingerprint
+ : [data.fingerprint];
+ }
+
+ // Fire away!
+ this._send(data);
+
+ return this;
+ },
+
+ captureBreadcrumb: function(obj) {
+ var crumb = objectMerge(
+ {
+ timestamp: now() / 1000
+ },
+ obj
+ );
+
+ if (isFunction(this._globalOptions.breadcrumbCallback)) {
+ var result = this._globalOptions.breadcrumbCallback(crumb);
+
+ if (isObject(result) && !isEmptyObject(result)) {
+ crumb = result;
+ } else if (result === false) {
+ return this;
+ }
+ }
+
+ this._breadcrumbs.push(crumb);
+ if (this._breadcrumbs.length > this._globalOptions.maxBreadcrumbs) {
+ this._breadcrumbs.shift();
+ }
+ return this;
+ },
+
+ addPlugin: function(plugin /*arg1, arg2, ... argN*/) {
+ var pluginArgs = [].slice.call(arguments, 1);
+
+ this._plugins.push([plugin, pluginArgs]);
+ if (this._isRavenInstalled) {
+ this._drainPlugins();
+ }
+
+ return this;
+ },
+
+ /*
+ * Set/clear a user to be sent along with the payload.
+ *
+ * @param {object} user An object representing user data [optional]
+ * @return {Raven}
+ */
+ setUserContext: function(user) {
+ // Intentionally do not merge here since that's an unexpected behavior.
+ this._globalContext.user = user;
+
+ return this;
+ },
+
+ /*
+ * Merge extra attributes to be sent along with the payload.
+ *
+ * @param {object} extra An object representing extra data [optional]
+ * @return {Raven}
+ */
+ setExtraContext: function(extra) {
+ this._mergeContext('extra', extra);
+
+ return this;
+ },
+
+ /*
+ * Merge tags to be sent along with the payload.
+ *
+ * @param {object} tags An object representing tags [optional]
+ * @return {Raven}
+ */
+ setTagsContext: function(tags) {
+ this._mergeContext('tags', tags);
+
+ return this;
+ },
+
+ /*
+ * Clear all of the context.
+ *
+ * @return {Raven}
+ */
+ clearContext: function() {
+ this._globalContext = {};
+
+ return this;
+ },
+
+ /*
+ * Get a copy of the current context. This cannot be mutated.
+ *
+ * @return {object} copy of context
+ */
+ getContext: function() {
+ // lol javascript
+ return JSON.parse(stringify(this._globalContext));
+ },
+
+ /*
+ * Set environment of application
+ *
+ * @param {string} environment Typically something like 'production'.
+ * @return {Raven}
+ */
+ setEnvironment: function(environment) {
+ this._globalOptions.environment = environment;
+
+ return this;
+ },
+
+ /*
+ * Set release version of application
+ *
+ * @param {string} release Typically something like a git SHA to identify version
+ * @return {Raven}
+ */
+ setRelease: function(release) {
+ this._globalOptions.release = release;
+
+ return this;
+ },
+
+ /*
+ * Set the dataCallback option
+ *
+ * @param {function} callback The callback to run which allows the
+ * data blob to be mutated before sending
+ * @return {Raven}
+ */
+ setDataCallback: function(callback) {
+ var original = this._globalOptions.dataCallback;
+ this._globalOptions.dataCallback = keepOriginalCallback(original, callback);
+ return this;
+ },
+
+ /*
+ * Set the breadcrumbCallback option
+ *
+ * @param {function} callback The callback to run which allows filtering
+ * or mutating breadcrumbs
+ * @return {Raven}
+ */
+ setBreadcrumbCallback: function(callback) {
+ var original = this._globalOptions.breadcrumbCallback;
+ this._globalOptions.breadcrumbCallback = keepOriginalCallback(original, callback);
+ return this;
+ },
+
+ /*
+ * Set the shouldSendCallback option
+ *
+ * @param {function} callback The callback to run which allows
+ * introspecting the blob before sending
+ * @return {Raven}
+ */
+ setShouldSendCallback: function(callback) {
+ var original = this._globalOptions.shouldSendCallback;
+ this._globalOptions.shouldSendCallback = keepOriginalCallback(original, callback);
+ return this;
+ },
+
+ /**
+ * Override the default HTTP transport mechanism that transmits data
+ * to the Sentry server.
+ *
+ * @param {function} transport Function invoked instead of the default
+ * `makeRequest` handler.
+ *
+ * @return {Raven}
+ */
+ setTransport: function(transport) {
+ this._globalOptions.transport = transport;
+
+ return this;
+ },
+
+ /*
+ * Get the latest raw exception that was captured by Raven.
+ *
+ * @return {error}
+ */
+ lastException: function() {
+ return this._lastCapturedException;
+ },
+
+ /*
+ * Get the last event id
+ *
+ * @return {string}
+ */
+ lastEventId: function() {
+ return this._lastEventId;
+ },
+
+ /*
+ * Determine if Raven is setup and ready to go.
+ *
+ * @return {boolean}
+ */
+ isSetup: function() {
+ if (!this._hasJSON) return false; // needs JSON support
+ if (!this._globalServer) {
+ if (!this.ravenNotConfiguredError) {
+ this.ravenNotConfiguredError = true;
+ this._logDebug('error', 'Error: Raven has not been configured.');
+ }
+ return false;
+ }
+ return true;
+ },
+
+ afterLoad: function() {
+ // TODO: remove window dependence?
+
+ // Attempt to initialize Raven on load
+ var RavenConfig = _window.RavenConfig;
+ if (RavenConfig) {
+ this.config(RavenConfig.dsn, RavenConfig.config).install();
+ }
+ },
+
+ showReportDialog: function(options) {
+ if (
+ !_document // doesn't work without a document (React native)
+ )
+ return;
+
+ options = options || {};
+
+ var lastEventId = options.eventId || this.lastEventId();
+ if (!lastEventId) {
+ throw new RavenConfigError('Missing eventId');
+ }
+
+ var dsn = options.dsn || this._dsn;
+ if (!dsn) {
+ throw new RavenConfigError('Missing DSN');
+ }
+
+ var encode = encodeURIComponent;
+ var qs = '';
+ qs += '?eventId=' + encode(lastEventId);
+ qs += '&dsn=' + encode(dsn);
+
+ var user = options.user || this._globalContext.user;
+ if (user) {
+ if (user.name) qs += '&name=' + encode(user.name);
+ if (user.email) qs += '&email=' + encode(user.email);
+ }
+
+ var globalServer = this._getGlobalServer(this._parseDSN(dsn));
+
+ var script = _document.createElement('script');
+ script.async = true;
+ script.src = globalServer + '/api/embed/error-page/' + qs;
+ (_document.head || _document.body).appendChild(script);
+ },
+
+ /**** Private functions ****/
+ _ignoreNextOnError: function() {
+ var self = this;
+ this._ignoreOnError += 1;
+ setTimeout(function() {
+ // onerror should trigger before setTimeout
+ self._ignoreOnError -= 1;
+ });
+ },
+
+ _triggerEvent: function(eventType, options) {
+ // NOTE: `event` is a native browser thing, so let's avoid conflicting wiht it
+ var evt, key;
+
+ if (!this._hasDocument) return;
+
+ options = options || {};
+
+ eventType = 'raven' + eventType.substr(0, 1).toUpperCase() + eventType.substr(1);
+
+ if (_document.createEvent) {
+ evt = _document.createEvent('HTMLEvents');
+ evt.initEvent(eventType, true, true);
+ } else {
+ evt = _document.createEventObject();
+ evt.eventType = eventType;
+ }
+
+ for (key in options)
+ if (hasKey(options, key)) {
+ evt[key] = options[key];
+ }
+
+ if (_document.createEvent) {
+ // IE9 if standards
+ _document.dispatchEvent(evt);
+ } else {
+ // IE8 regardless of Quirks or Standards
+ // IE9 if quirks
+ try {
+ _document.fireEvent('on' + evt.eventType.toLowerCase(), evt);
+ } catch (e) {
+ // Do nothing
+ }
+ }
+ },
+
+ /**
+ * Wraps addEventListener to capture UI breadcrumbs
+ * @param evtName the event name (e.g. "click")
+ * @returns {Function}
+ * @private
+ */
+ _breadcrumbEventHandler: function(evtName) {
+ var self = this;
+ return function(evt) {
+ // reset keypress timeout; e.g. triggering a 'click' after
+ // a 'keypress' will reset the keypress debounce so that a new
+ // set of keypresses can be recorded
+ self._keypressTimeout = null;
+
+ // It's possible this handler might trigger multiple times for the same
+ // event (e.g. event propagation through node ancestors). Ignore if we've
+ // already captured the event.
+ if (self._lastCapturedEvent === evt) return;
+
+ self._lastCapturedEvent = evt;
+
+ // try/catch both:
+ // - accessing evt.target (see getsentry/raven-js#838, #768)
+ // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly
+ // can throw an exception in some circumstances.
+ var target;
+ try {
+ target = htmlTreeAsString(evt.target);
+ } catch (e) {
+ target = '';
+ }
+
+ self.captureBreadcrumb({
+ category: 'ui.' + evtName, // e.g. ui.click, ui.input
+ message: target
+ });
+ };
+ },
+
+ /**
+ * Wraps addEventListener to capture keypress UI events
+ * @returns {Function}
+ * @private
+ */
+ _keypressEventHandler: function() {
+ var self = this,
+ debounceDuration = 1000; // milliseconds
+
+ // TODO: if somehow user switches keypress target before
+ // debounce timeout is triggered, we will only capture
+ // a single breadcrumb from the FIRST target (acceptable?)
+ return function(evt) {
+ var target;
+ try {
+ target = evt.target;
+ } catch (e) {
+ // just accessing event properties can throw an exception in some rare circumstances
+ // see: https://github.com/getsentry/raven-js/issues/838
+ return;
+ }
+ var tagName = target && target.tagName;
+
+ // only consider keypress events on actual input elements
+ // this will disregard keypresses targeting body (e.g. tabbing
+ // through elements, hotkeys, etc)
+ if (
+ !tagName ||
+ (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && !target.isContentEditable)
+ )
+ return;
+
+ // record first keypress in a series, but ignore subsequent
+ // keypresses until debounce clears
+ var timeout = self._keypressTimeout;
+ if (!timeout) {
+ self._breadcrumbEventHandler('input')(evt);
+ }
+ clearTimeout(timeout);
+ self._keypressTimeout = setTimeout(function() {
+ self._keypressTimeout = null;
+ }, debounceDuration);
+ };
+ },
+
+ /**
+ * Captures a breadcrumb of type "navigation", normalizing input URLs
+ * @param to the originating URL
+ * @param from the target URL
+ * @private
+ */
+ _captureUrlChange: function(from, to) {
+ var parsedLoc = parseUrl(this._location.href);
+ var parsedTo = parseUrl(to);
+ var parsedFrom = parseUrl(from);
+
+ // because onpopstate only tells you the "new" (to) value of location.href, and
+ // not the previous (from) value, we need to track the value of the current URL
+ // state ourselves
+ this._lastHref = to;
+
+ // Use only the path component of the URL if the URL matches the current
+ // document (almost all the time when using pushState)
+ if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host)
+ to = parsedTo.relative;
+ if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host)
+ from = parsedFrom.relative;
+
+ this.captureBreadcrumb({
+ category: 'navigation',
+ data: {
+ to: to,
+ from: from
+ }
+ });
+ },
+
+ _patchFunctionToString: function() {
+ var self = this;
+ self._originalFunctionToString = Function.prototype.toString;
+ // eslint-disable-next-line no-extend-native
+ Function.prototype.toString = function() {
+ if (typeof this === 'function' && this.__raven__) {
+ return self._originalFunctionToString.apply(this.__orig__, arguments);
+ }
+ return self._originalFunctionToString.apply(this, arguments);
+ };
+ },
+
+ _unpatchFunctionToString: function() {
+ if (this._originalFunctionToString) {
+ // eslint-disable-next-line no-extend-native
+ Function.prototype.toString = this._originalFunctionToString;
+ }
+ },
+
+ /**
+ * Wrap timer functions and event targets to catch errors and provide
+ * better metadata.
+ */
+ _instrumentTryCatch: function() {
+ var self = this;
+
+ var wrappedBuiltIns = self._wrappedBuiltIns;
+
+ function wrapTimeFn(orig) {
+ return function(fn, t) {
+ // preserve arity
+ // Make a copy of the arguments to prevent deoptimization
+ // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments
+ var args = new Array(arguments.length);
+ for (var i = 0; i < args.length; ++i) {
+ args[i] = arguments[i];
+ }
+ var originalCallback = args[0];
+ if (isFunction(originalCallback)) {
+ args[0] = self.wrap(originalCallback);
+ }
+
+ // IE < 9 doesn't support .call/.apply on setInterval/setTimeout, but it
+ // also supports only two arguments and doesn't care what this is, so we
+ // can just call the original function directly.
+ if (orig.apply) {
+ return orig.apply(this, args);
+ } else {
+ return orig(args[0], args[1]);
+ }
+ };
+ }
+
+ var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;
+
+ function wrapEventTarget(global) {
+ var proto = _window[global] && _window[global].prototype;
+ if (proto && proto.hasOwnProperty && proto.hasOwnProperty('addEventListener')) {
+ fill(
+ proto,
+ 'addEventListener',
+ function(orig) {
+ return function(evtName, fn, capture, secure) {
+ // preserve arity
+ try {
+ if (fn && fn.handleEvent) {
+ fn.handleEvent = self.wrap(fn.handleEvent);
+ }
+ } catch (err) {
+ // can sometimes get 'Permission denied to access property "handle Event'
+ }
+
+ // More breadcrumb DOM capture ... done here and not in `_instrumentBreadcrumbs`
+ // so that we don't have more than one wrapper function
+ var before, clickHandler, keypressHandler;
+
+ if (
+ autoBreadcrumbs &&
+ autoBreadcrumbs.dom &&
+ (global === 'EventTarget' || global === 'Node')
+ ) {
+ // NOTE: generating multiple handlers per addEventListener invocation, should
+ // revisit and verify we can just use one (almost certainly)
+ clickHandler = self._breadcrumbEventHandler('click');
+ keypressHandler = self._keypressEventHandler();
+ before = function(evt) {
+ // need to intercept every DOM event in `before` argument, in case that
+ // same wrapped method is re-used for different events (e.g. mousemove THEN click)
+ // see #724
+ if (!evt) return;
+
+ var eventType;
+ try {
+ eventType = evt.type;
+ } catch (e) {
+ // just accessing event properties can throw an exception in some rare circumstances
+ // see: https://github.com/getsentry/raven-js/issues/838
+ return;
+ }
+ if (eventType === 'click') return clickHandler(evt);
+ else if (eventType === 'keypress') return keypressHandler(evt);
+ };
+ }
+ return orig.call(
+ this,
+ evtName,
+ self.wrap(fn, undefined, before),
+ capture,
+ secure
+ );
+ };
+ },
+ wrappedBuiltIns
+ );
+ fill(
+ proto,
+ 'removeEventListener',
+ function(orig) {
+ return function(evt, fn, capture, secure) {
+ try {
+ fn = fn && (fn.__raven_wrapper__ ? fn.__raven_wrapper__ : fn);
+ } catch (e) {
+ // ignore, accessing __raven_wrapper__ will throw in some Selenium environments
+ }
+ return orig.call(this, evt, fn, capture, secure);
+ };
+ },
+ wrappedBuiltIns
+ );
+ }
+ }
+
+ fill(_window, 'setTimeout', wrapTimeFn, wrappedBuiltIns);
+ fill(_window, 'setInterval', wrapTimeFn, wrappedBuiltIns);
+ if (_window.requestAnimationFrame) {
+ fill(
+ _window,
+ 'requestAnimationFrame',
+ function(orig) {
+ return function(cb) {
+ return orig(self.wrap(cb));
+ };
+ },
+ wrappedBuiltIns
+ );
+ }
+
+ // event targets borrowed from bugsnag-js:
+ // https://github.com/bugsnag/bugsnag-js/blob/master/src/bugsnag.js#L666
+ var eventTargets = [
+ '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'
+ ];
+ for (var i = 0; i < eventTargets.length; i++) {
+ wrapEventTarget(eventTargets[i]);
+ }
+ },
+
+ /**
+ * Instrument browser built-ins w/ breadcrumb capturing
+ * - XMLHttpRequests
+ * - DOM interactions (click/typing)
+ * - window.location changes
+ * - console
+ *
+ * Can be disabled or individually configured via the `autoBreadcrumbs` config option
+ */
+ _instrumentBreadcrumbs: function() {
+ var self = this;
+ var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;
+
+ var wrappedBuiltIns = self._wrappedBuiltIns;
+
+ function wrapProp(prop, xhr) {
+ if (prop in xhr && isFunction(xhr[prop])) {
+ fill(xhr, prop, function(orig) {
+ return self.wrap(orig);
+ }); // intentionally don't track filled methods on XHR instances
+ }
+ }
+
+ if (autoBreadcrumbs.xhr && 'XMLHttpRequest' in _window) {
+ var xhrproto = _window.XMLHttpRequest && _window.XMLHttpRequest.prototype;
+ fill(
+ xhrproto,
+ 'open',
+ function(origOpen) {
+ return function(method, url) {
+ // preserve arity
+
+ // if Sentry key appears in URL, don't capture
+ if (isString(url) && url.indexOf(self._globalKey) === -1) {
+ this.__raven_xhr = {
+ method: method,
+ url: url,
+ status_code: null
+ };
+ }
+
+ return origOpen.apply(this, arguments);
+ };
+ },
+ wrappedBuiltIns
+ );
+
+ fill(
+ xhrproto,
+ 'send',
+ function(origSend) {
+ return function() {
+ // preserve arity
+ var xhr = this;
+
+ function onreadystatechangeHandler() {
+ if (xhr.__raven_xhr && xhr.readyState === 4) {
+ try {
+ // touching statusCode in some platforms throws
+ // an exception
+ xhr.__raven_xhr.status_code = xhr.status;
+ } catch (e) {
+ /* do nothing */
+ }
+
+ self.captureBreadcrumb({
+ type: 'http',
+ category: 'xhr',
+ data: xhr.__raven_xhr
+ });
+ }
+ }
+
+ var props = ['onload', 'onerror', 'onprogress'];
+ for (var j = 0; j < props.length; j++) {
+ wrapProp(props[j], xhr);
+ }
+
+ if ('onreadystatechange' in xhr && isFunction(xhr.onreadystatechange)) {
+ fill(
+ xhr,
+ 'onreadystatechange',
+ function(orig) {
+ return self.wrap(orig, undefined, onreadystatechangeHandler);
+ } /* intentionally don't track this instrumentation */
+ );
+ } else {
+ // if onreadystatechange wasn't actually set by the page on this xhr, we
+ // are free to set our own and capture the breadcrumb
+ xhr.onreadystatechange = onreadystatechangeHandler;
+ }
+
+ return origSend.apply(this, arguments);
+ };
+ },
+ wrappedBuiltIns
+ );
+ }
+
+ if (autoBreadcrumbs.xhr && supportsFetch()) {
+ fill(
+ _window,
+ 'fetch',
+ function(origFetch) {
+ return function() {
+ // preserve arity
+ // Make a copy of the arguments to prevent deoptimization
+ // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments
+ var args = new Array(arguments.length);
+ for (var i = 0; i < args.length; ++i) {
+ args[i] = arguments[i];
+ }
+
+ var fetchInput = args[0];
+ var method = 'GET';
+ var url;
+
+ if (typeof fetchInput === 'string') {
+ url = fetchInput;
+ } else if ('Request' in _window && fetchInput instanceof _window.Request) {
+ url = fetchInput.url;
+ if (fetchInput.method) {
+ method = fetchInput.method;
+ }
+ } else {
+ url = '' + fetchInput;
+ }
+
+ // if Sentry key appears in URL, don't capture, as it's our own request
+ if (url.indexOf(self._globalKey) !== -1) {
+ return origFetch.apply(this, args);
+ }
+
+ if (args[1] && args[1].method) {
+ method = args[1].method;
+ }
+
+ var fetchData = {
+ method: method,
+ url: url,
+ status_code: null
+ };
+
+ return origFetch
+ .apply(this, args)
+ .then(function(response) {
+ fetchData.status_code = response.status;
+
+ self.captureBreadcrumb({
+ type: 'http',
+ category: 'fetch',
+ data: fetchData
+ });
+
+ return response;
+ })
+ ['catch'](function(err) {
+ // if there is an error performing the request
+ self.captureBreadcrumb({
+ type: 'http',
+ category: 'fetch',
+ data: fetchData,
+ level: 'error'
+ });
+
+ throw err;
+ });
+ };
+ },
+ wrappedBuiltIns
+ );
+ }
+
+ // Capture breadcrumbs from any click that is unhandled / bubbled up all the way
+ // to the document. Do this before we instrument addEventListener.
+ if (autoBreadcrumbs.dom && this._hasDocument) {
+ if (_document.addEventListener) {
+ _document.addEventListener('click', self._breadcrumbEventHandler('click'), false);
+ _document.addEventListener('keypress', self._keypressEventHandler(), false);
+ } else if (_document.attachEvent) {
+ // IE8 Compatibility
+ _document.attachEvent('onclick', self._breadcrumbEventHandler('click'));
+ _document.attachEvent('onkeypress', self._keypressEventHandler());
+ }
+ }
+
+ // record navigation (URL) changes
+ // NOTE: in Chrome App environment, touching history.pushState, *even inside
+ // a try/catch block*, will cause Chrome to output an error to console.error
+ // borrowed from: https://github.com/angular/angular.js/pull/13945/files
+ var chrome = _window.chrome;
+ var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime;
+ var hasPushAndReplaceState =
+ !isChromePackagedApp &&
+ _window.history &&
+ _window.history.pushState &&
+ _window.history.replaceState;
+ if (autoBreadcrumbs.location && hasPushAndReplaceState) {
+ // TODO: remove onpopstate handler on uninstall()
+ var oldOnPopState = _window.onpopstate;
+ _window.onpopstate = function() {
+ var currentHref = self._location.href;
+ self._captureUrlChange(self._lastHref, currentHref);
+
+ if (oldOnPopState) {
+ return oldOnPopState.apply(this, arguments);
+ }
+ };
+
+ var historyReplacementFunction = function(origHistFunction) {
+ // note history.pushState.length is 0; intentionally not declaring
+ // params to preserve 0 arity
+ return function(/* state, title, url */) {
+ var url = arguments.length > 2 ? arguments[2] : undefined;
+
+ // url argument is optional
+ if (url) {
+ // coerce to string (this is what pushState does)
+ self._captureUrlChange(self._lastHref, url + '');
+ }
+
+ return origHistFunction.apply(this, arguments);
+ };
+ };
+
+ fill(_window.history, 'pushState', historyReplacementFunction, wrappedBuiltIns);
+ fill(_window.history, 'replaceState', historyReplacementFunction, wrappedBuiltIns);
+ }
+
+ if (autoBreadcrumbs.console && 'console' in _window && console.log) {
+ // console
+ var consoleMethodCallback = function(msg, data) {
+ self.captureBreadcrumb({
+ message: msg,
+ level: data.level,
+ category: 'console'
+ });
+ };
+
+ each(['debug', 'info', 'warn', 'error', 'log'], function(_, level) {
+ wrapConsoleMethod(console, level, consoleMethodCallback);
+ });
+ }
+ },
+
+ _restoreBuiltIns: function() {
+ // restore any wrapped builtins
+ var builtin;
+ while (this._wrappedBuiltIns.length) {
+ builtin = this._wrappedBuiltIns.shift();
+
+ var obj = builtin[0],
+ name = builtin[1],
+ orig = builtin[2];
+
+ obj[name] = orig;
+ }
+ },
+
+ _restoreConsole: function() {
+ // eslint-disable-next-line guard-for-in
+ for (var method in this._originalConsoleMethods) {
+ this._originalConsole[method] = this._originalConsoleMethods[method];
+ }
+ },
+
+ _drainPlugins: function() {
+ var self = this;
+
+ // FIX ME TODO
+ each(this._plugins, function(_, plugin) {
+ var installer = plugin[0];
+ var args = plugin[1];
+ installer.apply(self, [self].concat(args));
+ });
+ },
+
+ _parseDSN: function(str) {
+ var m = dsnPattern.exec(str),
+ dsn = {},
+ i = 7;
+
+ try {
+ while (i--) dsn[dsnKeys[i]] = m[i] || '';
+ } catch (e) {
+ throw new RavenConfigError('Invalid DSN: ' + str);
+ }
+
+ if (dsn.pass && !this._globalOptions.allowSecretKey) {
+ throw new RavenConfigError(
+ 'Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key'
+ );
+ }
+
+ return dsn;
+ },
+
+ _getGlobalServer: function(uri) {
+ // assemble the endpoint from the uri pieces
+ var globalServer = '//' + uri.host + (uri.port ? ':' + uri.port : '');
+
+ if (uri.protocol) {
+ globalServer = uri.protocol + ':' + globalServer;
+ }
+ return globalServer;
+ },
+
+ _handleOnErrorStackInfo: function() {
+ // if we are intentionally ignoring errors via onerror, bail out
+ if (!this._ignoreOnError) {
+ this._handleStackInfo.apply(this, arguments);
+ }
+ },
+
+ _handleStackInfo: function(stackInfo, options) {
+ var frames = this._prepareFrames(stackInfo, options);
+
+ this._triggerEvent('handle', {
+ stackInfo: stackInfo,
+ options: options
+ });
+
+ this._processException(
+ stackInfo.name,
+ stackInfo.message,
+ stackInfo.url,
+ stackInfo.lineno,
+ frames,
+ options
+ );
+ },
+
+ _prepareFrames: function(stackInfo, options) {
+ var self = this;
+ var frames = [];
+ if (stackInfo.stack && stackInfo.stack.length) {
+ each(stackInfo.stack, function(i, stack) {
+ var frame = self._normalizeFrame(stack, stackInfo.url);
+ if (frame) {
+ frames.push(frame);
+ }
+ });
+
+ // e.g. frames captured via captureMessage throw
+ if (options && options.trimHeadFrames) {
+ for (var j = 0; j < options.trimHeadFrames && j < frames.length; j++) {
+ frames[j].in_app = false;
+ }
+ }
+ }
+ frames = frames.slice(0, this._globalOptions.stackTraceLimit);
+ return frames;
+ },
+
+ _normalizeFrame: function(frame, stackInfoUrl) {
+ // normalize the frames data
+ var normalized = {
+ filename: frame.url,
+ lineno: frame.line,
+ colno: frame.column,
+ function: frame.func || '?'
+ };
+
+ // Case when we don't have any information about the error
+ // E.g. throwing a string or raw object, instead of an `Error` in Firefox
+ // Generating synthetic error doesn't add any value here
+ //
+ // We should probably somehow let a user know that they should fix their code
+ if (!frame.url) {
+ normalized.filename = stackInfoUrl; // fallback to whole stacks url from onerror handler
+ }
+
+ normalized.in_app = !// determine if an exception came from outside of our app
+ // first we check the global includePaths list.
+ (
+ (!!this._globalOptions.includePaths.test &&
+ !this._globalOptions.includePaths.test(normalized.filename)) ||
+ // Now we check for fun, if the function name is Raven or TraceKit
+ /(Raven|TraceKit)\./.test(normalized['function']) ||
+ // finally, we do a last ditch effort and check for raven.min.js
+ /raven\.(min\.)?js$/.test(normalized.filename)
+ );
+
+ return normalized;
+ },
+
+ _processException: function(type, message, fileurl, lineno, frames, options) {
+ var prefixedMessage = (type ? type + ': ' : '') + (message || '');
+ if (
+ !!this._globalOptions.ignoreErrors.test &&
+ (this._globalOptions.ignoreErrors.test(message) ||
+ this._globalOptions.ignoreErrors.test(prefixedMessage))
+ ) {
+ return;
+ }
+
+ var stacktrace;
+
+ if (frames && frames.length) {
+ fileurl = frames[0].filename || fileurl;
+ // Sentry expects frames oldest to newest
+ // and JS sends them as newest to oldest
+ frames.reverse();
+ stacktrace = {frames: frames};
+ } else if (fileurl) {
+ stacktrace = {
+ frames: [
+ {
+ filename: fileurl,
+ lineno: lineno,
+ in_app: true
+ }
+ ]
+ };
+ }
+
+ if (
+ !!this._globalOptions.ignoreUrls.test &&
+ this._globalOptions.ignoreUrls.test(fileurl)
+ ) {
+ return;
+ }
+
+ if (
+ !!this._globalOptions.whitelistUrls.test &&
+ !this._globalOptions.whitelistUrls.test(fileurl)
+ ) {
+ return;
+ }
+
+ var data = objectMerge(
+ {
+ // sentry.interfaces.Exception
+ exception: {
+ values: [
+ {
+ type: type,
+ value: message,
+ stacktrace: stacktrace
+ }
+ ]
+ },
+ transaction: fileurl
+ },
+ options
+ );
+
+ // Fire away!
+ this._send(data);
+ },
+
+ _trimPacket: function(data) {
+ // For now, we only want to truncate the two different messages
+ // but this could/should be expanded to just trim everything
+ var max = this._globalOptions.maxMessageLength;
+ if (data.message) {
+ data.message = truncate(data.message, max);
+ }
+ if (data.exception) {
+ var exception = data.exception.values[0];
+ exception.value = truncate(exception.value, max);
+ }
+
+ var request = data.request;
+ if (request) {
+ if (request.url) {
+ request.url = truncate(request.url, this._globalOptions.maxUrlLength);
+ }
+ if (request.Referer) {
+ request.Referer = truncate(request.Referer, this._globalOptions.maxUrlLength);
+ }
+ }
+
+ if (data.breadcrumbs && data.breadcrumbs.values)
+ this._trimBreadcrumbs(data.breadcrumbs);
+
+ return data;
+ },
+
+ /**
+ * Truncate breadcrumb values (right now just URLs)
+ */
+ _trimBreadcrumbs: function(breadcrumbs) {
+ // known breadcrumb properties with urls
+ // TODO: also consider arbitrary prop values that start with (https?)?://
+ var urlProps = ['to', 'from', 'url'],
+ urlProp,
+ crumb,
+ data;
+
+ for (var i = 0; i < breadcrumbs.values.length; ++i) {
+ crumb = breadcrumbs.values[i];
+ if (
+ !crumb.hasOwnProperty('data') ||
+ !isObject(crumb.data) ||
+ objectFrozen(crumb.data)
+ )
+ continue;
+
+ data = objectMerge({}, crumb.data);
+ for (var j = 0; j < urlProps.length; ++j) {
+ urlProp = urlProps[j];
+ if (data.hasOwnProperty(urlProp) && data[urlProp]) {
+ data[urlProp] = truncate(data[urlProp], this._globalOptions.maxUrlLength);
+ }
+ }
+ breadcrumbs.values[i].data = data;
+ }
+ },
+
+ _getHttpData: function() {
+ if (!this._hasNavigator && !this._hasDocument) return;
+ var httpData = {};
+
+ if (this._hasNavigator && _navigator.userAgent) {
+ httpData.headers = {
+ 'User-Agent': _navigator.userAgent
+ };
+ }
+
+ // Check in `window` instead of `document`, as we may be in ServiceWorker environment
+ if (_window.location && _window.location.href) {
+ httpData.url = _window.location.href;
+ }
+
+ if (this._hasDocument && _document.referrer) {
+ if (!httpData.headers) httpData.headers = {};
+ httpData.headers.Referer = _document.referrer;
+ }
+
+ return httpData;
+ },
+
+ _resetBackoff: function() {
+ this._backoffDuration = 0;
+ this._backoffStart = null;
+ },
+
+ _shouldBackoff: function() {
+ return this._backoffDuration && now() - this._backoffStart < this._backoffDuration;
+ },
+
+ /**
+ * Returns true if the in-process data payload matches the signature
+ * of the previously-sent data
+ *
+ * NOTE: This has to be done at this level because TraceKit can generate
+ * data from window.onerror WITHOUT an exception object (IE8, IE9,
+ * other old browsers). This can take the form of an "exception"
+ * data object with a single frame (derived from the onerror args).
+ */
+ _isRepeatData: function(current) {
+ var last = this._lastData;
+
+ if (
+ !last ||
+ current.message !== last.message || // defined for captureMessage
+ current.transaction !== last.transaction // defined for captureException/onerror
+ )
+ return false;
+
+ // Stacktrace interface (i.e. from captureMessage)
+ if (current.stacktrace || last.stacktrace) {
+ return isSameStacktrace(current.stacktrace, last.stacktrace);
+ } else if (current.exception || last.exception) {
+ // Exception interface (i.e. from captureException/onerror)
+ return isSameException(current.exception, last.exception);
+ }
+
+ return true;
+ },
+
+ _setBackoffState: function(request) {
+ // If we are already in a backoff state, don't change anything
+ if (this._shouldBackoff()) {
+ return;
+ }
+
+ var status = request.status;
+
+ // 400 - project_id doesn't exist or some other fatal
+ // 401 - invalid/revoked dsn
+ // 429 - too many requests
+ if (!(status === 400 || status === 401 || status === 429)) return;
+
+ var retry;
+ try {
+ // If Retry-After is not in Access-Control-Expose-Headers, most
+ // browsers will throw an exception trying to access it
+ if (supportsFetch()) {
+ retry = request.headers.get('Retry-After');
+ } else {
+ retry = request.getResponseHeader('Retry-After');
+ }
+
+ // Retry-After is returned in seconds
+ retry = parseInt(retry, 10) * 1000;
+ } catch (e) {
+ /* eslint no-empty:0 */
+ }
+
+ this._backoffDuration = retry
+ ? // If Sentry server returned a Retry-After value, use it
+ retry
+ : // Otherwise, double the last backoff duration (starts at 1 sec)
+ this._backoffDuration * 2 || 1000;
+
+ this._backoffStart = now();
+ },
+
+ _send: function(data) {
+ var globalOptions = this._globalOptions;
+
+ var baseData = {
+ project: this._globalProject,
+ logger: globalOptions.logger,
+ platform: 'javascript'
+ },
+ httpData = this._getHttpData();
+
+ if (httpData) {
+ baseData.request = httpData;
+ }
+
+ // HACK: delete `trimHeadFrames` to prevent from appearing in outbound payload
+ if (data.trimHeadFrames) delete data.trimHeadFrames;
+
+ data = objectMerge(baseData, data);
+
+ // Merge in the tags and extra separately since objectMerge doesn't handle a deep merge
+ data.tags = objectMerge(objectMerge({}, this._globalContext.tags), data.tags);
+ data.extra = objectMerge(objectMerge({}, this._globalContext.extra), data.extra);
+
+ // Send along our own collected metadata with extra
+ data.extra['session:duration'] = now() - this._startTime;
+
+ if (this._breadcrumbs && this._breadcrumbs.length > 0) {
+ // intentionally make shallow copy so that additions
+ // to breadcrumbs aren't accidentally sent in this request
+ data.breadcrumbs = {
+ values: [].slice.call(this._breadcrumbs, 0)
+ };
+ }
+
+ if (this._globalContext.user) {
+ // sentry.interfaces.User
+ data.user = this._globalContext.user;
+ }
+
+ // Include the environment if it's defined in globalOptions
+ if (globalOptions.environment) data.environment = globalOptions.environment;
+
+ // Include the release if it's defined in globalOptions
+ if (globalOptions.release) data.release = globalOptions.release;
+
+ // Include server_name if it's defined in globalOptions
+ if (globalOptions.serverName) data.server_name = globalOptions.serverName;
+
+ data = this._sanitizeData(data);
+
+ // Cleanup empty properties before sending them to the server
+ Object.keys(data).forEach(function(key) {
+ if (data[key] == null || data[key] === '' || isEmptyObject(data[key])) {
+ delete data[key];
+ }
+ });
+
+ if (isFunction(globalOptions.dataCallback)) {
+ data = globalOptions.dataCallback(data) || data;
+ }
+
+ // Why??????????
+ if (!data || isEmptyObject(data)) {
+ return;
+ }
+
+ // Check if the request should be filtered or not
+ if (
+ isFunction(globalOptions.shouldSendCallback) &&
+ !globalOptions.shouldSendCallback(data)
+ ) {
+ return;
+ }
+
+ // Backoff state: Sentry server previously responded w/ an error (e.g. 429 - too many requests),
+ // so drop requests until "cool-off" period has elapsed.
+ if (this._shouldBackoff()) {
+ this._logDebug('warn', 'Raven dropped error due to backoff: ', data);
+ return;
+ }
+
+ if (typeof globalOptions.sampleRate === 'number') {
+ if (Math.random() < globalOptions.sampleRate) {
+ this._sendProcessedPayload(data);
+ }
+ } else {
+ this._sendProcessedPayload(data);
+ }
+ },
+
+ _sanitizeData: function(data) {
+ return sanitize(data, this._globalOptions.sanitizeKeys);
+ },
+
+ _getUuid: function() {
+ return uuid4();
+ },
+
+ _sendProcessedPayload: function(data, callback) {
+ var self = this;
+ var globalOptions = this._globalOptions;
+
+ if (!this.isSetup()) return;
+
+ // Try and clean up the packet before sending by truncating long values
+ data = this._trimPacket(data);
+
+ // ideally duplicate error testing should occur *before* dataCallback/shouldSendCallback,
+ // but this would require copying an un-truncated copy of the data packet, which can be
+ // arbitrarily deep (extra_data) -- could be worthwhile? will revisit
+ if (!this._globalOptions.allowDuplicates && this._isRepeatData(data)) {
+ this._logDebug('warn', 'Raven dropped repeat event: ', data);
+ return;
+ }
+
+ // Send along an event_id if not explicitly passed.
+ // This event_id can be used to reference the error within Sentry itself.
+ // Set lastEventId after we know the error should actually be sent
+ this._lastEventId = data.event_id || (data.event_id = this._getUuid());
+
+ // Store outbound payload after trim
+ this._lastData = data;
+
+ this._logDebug('debug', 'Raven about to send:', data);
+
+ var auth = {
+ sentry_version: '7',
+ sentry_client: 'raven-js/' + this.VERSION,
+ sentry_key: this._globalKey
+ };
+
+ if (this._globalSecret) {
+ auth.sentry_secret = this._globalSecret;
+ }
+
+ var exception = data.exception && data.exception.values[0];
+
+ // only capture 'sentry' breadcrumb is autoBreadcrumbs is truthy
+ if (
+ this._globalOptions.autoBreadcrumbs &&
+ this._globalOptions.autoBreadcrumbs.sentry
+ ) {
+ this.captureBreadcrumb({
+ category: 'sentry',
+ message: exception
+ ? (exception.type ? exception.type + ': ' : '') + exception.value
+ : data.message,
+ event_id: data.event_id,
+ level: data.level || 'error' // presume error unless specified
+ });
+ }
+
+ var url = this._globalEndpoint;
+ (globalOptions.transport || this._makeRequest).call(this, {
+ url: url,
+ auth: auth,
+ data: data,
+ options: globalOptions,
+ onSuccess: function success() {
+ self._resetBackoff();
+
+ self._triggerEvent('success', {
+ data: data,
+ src: url
+ });
+ callback && callback();
+ },
+ onError: function failure(error) {
+ self._logDebug('error', 'Raven transport failed to send: ', error);
+
+ if (error.request) {
+ self._setBackoffState(error.request);
+ }
+
+ self._triggerEvent('failure', {
+ data: data,
+ src: url
+ });
+ error = error || new Error('Raven send failed (no additional details provided)');
+ callback && callback(error);
+ }
+ });
+ },
+
+ _makeRequest: function(opts) {
+ // Auth is intentionally sent as part of query string (NOT as custom HTTP header) to avoid preflight CORS requests
+ var url = opts.url + '?' + urlencode(opts.auth);
+
+ var evaluatedHeaders = null;
+ var evaluatedFetchParameters = {};
+
+ if (opts.options.headers) {
+ evaluatedHeaders = this._evaluateHash(opts.options.headers);
+ }
+
+ if (opts.options.fetchParameters) {
+ evaluatedFetchParameters = this._evaluateHash(opts.options.fetchParameters);
+ }
+
+ if (supportsFetch()) {
+ evaluatedFetchParameters.body = stringify(opts.data);
+
+ var defaultFetchOptions = objectMerge({}, this._fetchDefaults);
+ var fetchOptions = objectMerge(defaultFetchOptions, evaluatedFetchParameters);
+
+ if (evaluatedHeaders) {
+ fetchOptions.headers = evaluatedHeaders;
+ }
+
+ return _window
+ .fetch(url, fetchOptions)
+ .then(function(response) {
+ if (response.ok) {
+ opts.onSuccess && opts.onSuccess();
+ } else {
+ var error = new Error('Sentry error code: ' + response.status);
+ // It's called request only to keep compatibility with XHR interface
+ // and not add more redundant checks in setBackoffState method
+ error.request = response;
+ opts.onError && opts.onError(error);
+ }
+ })
+ ['catch'](function() {
+ opts.onError &&
+ opts.onError(new Error('Sentry error code: network unavailable'));
+ });
+ }
+
+ var request = _window.XMLHttpRequest && new _window.XMLHttpRequest();
+ if (!request) return;
+
+ // if browser doesn't support CORS (e.g. IE7), we are out of luck
+ var hasCORS = 'withCredentials' in request || typeof XDomainRequest !== 'undefined';
+
+ if (!hasCORS) return;
+
+ if ('withCredentials' in request) {
+ request.onreadystatechange = function() {
+ if (request.readyState !== 4) {
+ return;
+ } else if (request.status === 200) {
+ opts.onSuccess && opts.onSuccess();
+ } else if (opts.onError) {
+ var err = new Error('Sentry error code: ' + request.status);
+ err.request = request;
+ opts.onError(err);
+ }
+ };
+ } else {
+ request = new XDomainRequest();
+ // xdomainrequest cannot go http -> https (or vice versa),
+ // so always use protocol relative
+ url = url.replace(/^https?:/, '');
+
+ // onreadystatechange not supported by XDomainRequest
+ if (opts.onSuccess) {
+ request.onload = opts.onSuccess;
+ }
+ if (opts.onError) {
+ request.onerror = function() {
+ var err = new Error('Sentry error code: XDomainRequest');
+ err.request = request;
+ opts.onError(err);
+ };
+ }
+ }
+
+ request.open('POST', url);
+
+ if (evaluatedHeaders) {
+ each(evaluatedHeaders, function(key, value) {
+ request.setRequestHeader(key, value);
+ });
+ }
+
+ request.send(stringify(opts.data));
+ },
+
+ _evaluateHash: function(hash) {
+ var evaluated = {};
+
+ for (var key in hash) {
+ if (hash.hasOwnProperty(key)) {
+ var value = hash[key];
+ evaluated[key] = typeof value === 'function' ? value() : value;
+ }
+ }
+
+ return evaluated;
+ },
+
+ _logDebug: function(level) {
+ // We allow `Raven.debug` and `Raven.config(DSN, { debug: true })` to not make backward incompatible API change
+ if (
+ this._originalConsoleMethods[level] &&
+ (this.debug || this._globalOptions.debug)
+ ) {
+ // In IE<10 console methods do not have their own 'apply' method
+ Function.prototype.apply.call(
+ this._originalConsoleMethods[level],
+ this._originalConsole,
+ [].slice.call(arguments, 1)
+ );
+ }
+ },
+
+ _mergeContext: function(key, context) {
+ if (isUndefined(context)) {
+ delete this._globalContext[key];
+ } else {
+ this._globalContext[key] = objectMerge(this._globalContext[key] || {}, context);
+ }
+ }
+};
+
+// Deprecations
+Raven.prototype.setUser = Raven.prototype.setUserContext;
+Raven.prototype.setReleaseContext = Raven.prototype.setRelease;
+
+module.exports = Raven;
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"10":10,"11":11,"4":4,"5":5,"8":8,"9":9}],7:[function(_dereq_,module,exports){
+(function (global){
+/**
+ * Enforces a single instance of the Raven client, and the
+ * main entry point for Raven. If you are a consumer of the
+ * Raven library, you SHOULD load this file (vs raven.js).
+ **/
+
+var RavenConstructor = _dereq_(6);
+
+// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)
+var _window =
+ typeof window !== 'undefined'
+ ? window
+ : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
+var _Raven = _window.Raven;
+
+var Raven = new RavenConstructor();
+
+/*
+ * Allow multiple versions of Raven to be installed.
+ * Strip Raven from the global context and returns the instance.
+ *
+ * @return {Raven}
+ */
+Raven.noConflict = function() {
+ _window.Raven = _Raven;
+ return Raven;
+};
+
+Raven.afterLoad();
+
+module.exports = Raven;
+
+/**
+ * DISCLAIMER:
+ *
+ * Expose `Client` constructor for cases where user want to track multiple "sub-applications" in one larger app.
+ * It's not meant to be used by a wide audience, so pleaaase make sure that you know what you're doing before using it.
+ * Accidentally calling `install` multiple times, may result in an unexpected behavior that's very hard to debug.
+ *
+ * It's called `Client' to be in-line with Raven Node implementation.
+ *
+ * HOWTO:
+ *
+ * import Raven from 'raven-js';
+ *
+ * const someAppReporter = new Raven.Client();
+ * const someOtherAppReporter = new Raven.Client();
+ *
+ * someAppReporter.config('__DSN__', {
+ * ...config goes here
+ * });
+ *
+ * someOtherAppReporter.config('__OTHER_DSN__', {
+ * ...config goes here
+ * });
+ *
+ * someAppReporter.captureMessage(...);
+ * someAppReporter.captureException(...);
+ * someAppReporter.captureBreadcrumb(...);
+ *
+ * someOtherAppReporter.captureMessage(...);
+ * someOtherAppReporter.captureException(...);
+ * someOtherAppReporter.captureBreadcrumb(...);
+ *
+ * It should "just work".
+ */
+module.exports.Client = RavenConstructor;
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"6":6}],8:[function(_dereq_,module,exports){
+(function (global){
+var stringify = _dereq_(10);
+
+var _window =
+ typeof window !== 'undefined'
+ ? window
+ : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
+
+function isObject(what) {
+ return typeof what === 'object' && what !== null;
+}
+
+// Yanked from https://git.io/vS8DV re-used under CC0
+// with some tiny modifications
+function isError(value) {
+ switch (Object.prototype.toString.call(value)) {
+ case '[object Error]':
+ return true;
+ case '[object Exception]':
+ return true;
+ case '[object DOMException]':
+ return true;
+ default:
+ return value instanceof Error;
+ }
+}
+
+function isErrorEvent(value) {
+ return Object.prototype.toString.call(value) === '[object ErrorEvent]';
+}
+
+function isDOMError(value) {
+ return Object.prototype.toString.call(value) === '[object DOMError]';
+}
+
+function isDOMException(value) {
+ return Object.prototype.toString.call(value) === '[object DOMException]';
+}
+
+function isUndefined(what) {
+ return what === void 0;
+}
+
+function isFunction(what) {
+ return typeof what === 'function';
+}
+
+function isPlainObject(what) {
+ return Object.prototype.toString.call(what) === '[object Object]';
+}
+
+function isString(what) {
+ return Object.prototype.toString.call(what) === '[object String]';
+}
+
+function isArray(what) {
+ return Object.prototype.toString.call(what) === '[object Array]';
+}
+
+function isEmptyObject(what) {
+ if (!isPlainObject(what)) return false;
+
+ for (var _ in what) {
+ if (what.hasOwnProperty(_)) {
+ return false;
+ }
+ }
+ return true;
+}
+
+function supportsErrorEvent() {
+ try {
+ new ErrorEvent(''); // eslint-disable-line no-new
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+function supportsDOMError() {
+ try {
+ new DOMError(''); // eslint-disable-line no-new
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+function supportsDOMException() {
+ try {
+ new DOMException(''); // eslint-disable-line no-new
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+function supportsFetch() {
+ if (!('fetch' in _window)) return false;
+
+ try {
+ new Headers(); // eslint-disable-line no-new
+ new Request(''); // eslint-disable-line no-new
+ new Response(); // eslint-disable-line no-new
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+// Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default
+// https://caniuse.com/#feat=referrer-policy
+// It doesn't. And it throw exception instead of ignoring this parameter...
+// REF: https://github.com/getsentry/raven-js/issues/1233
+function supportsReferrerPolicy() {
+ if (!supportsFetch()) return false;
+
+ try {
+ // eslint-disable-next-line no-new
+ new Request('pickleRick', {
+ referrerPolicy: 'origin'
+ });
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+function supportsPromiseRejectionEvent() {
+ return typeof PromiseRejectionEvent === 'function';
+}
+
+function wrappedCallback(callback) {
+ function dataCallback(data, original) {
+ var normalizedData = callback(data) || data;
+ if (original) {
+ return original(normalizedData) || normalizedData;
+ }
+ return normalizedData;
+ }
+
+ return dataCallback;
+}
+
+function each(obj, callback) {
+ var i, j;
+
+ if (isUndefined(obj.length)) {
+ for (i in obj) {
+ if (hasKey(obj, i)) {
+ callback.call(null, i, obj[i]);
+ }
+ }
+ } else {
+ j = obj.length;
+ if (j) {
+ for (i = 0; i < j; i++) {
+ callback.call(null, i, obj[i]);
+ }
+ }
+ }
+}
+
+function objectMerge(obj1, obj2) {
+ if (!obj2) {
+ return obj1;
+ }
+ each(obj2, function(key, value) {
+ obj1[key] = value;
+ });
+ return obj1;
+}
+
+/**
+ * This function is only used for react-native.
+ * react-native freezes object that have already been sent over the
+ * js bridge. We need this function in order to check if the object is frozen.
+ * So it's ok that objectFrozen returns false if Object.isFrozen is not
+ * supported because it's not relevant for other "platforms". See related issue:
+ * https://github.com/getsentry/react-native-sentry/issues/57
+ */
+function objectFrozen(obj) {
+ if (!Object.isFrozen) {
+ return false;
+ }
+ return Object.isFrozen(obj);
+}
+
+function truncate(str, max) {
+ if (typeof max !== 'number') {
+ throw new Error('2nd argument to `truncate` function should be a number');
+ }
+ if (typeof str !== 'string' || max === 0) {
+ return str;
+ }
+ return str.length <= max ? str : str.substr(0, max) + '\u2026';
+}
+
+/**
+ * hasKey, a better form of hasOwnProperty
+ * Example: hasKey(MainHostObject, property) === true/false
+ *
+ * @param {Object} host object to check property
+ * @param {string} key to check
+ */
+function hasKey(object, key) {
+ return Object.prototype.hasOwnProperty.call(object, key);
+}
+
+function joinRegExp(patterns) {
+ // Combine an array of regular expressions and strings into one large regexp
+ // Be mad.
+ var sources = [],
+ i = 0,
+ len = patterns.length,
+ pattern;
+
+ for (; i < len; i++) {
+ pattern = patterns[i];
+ if (isString(pattern)) {
+ // If it's a string, we need to escape it
+ // Taken from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
+ sources.push(pattern.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, '\\$1'));
+ } else if (pattern && pattern.source) {
+ // If it's a regexp already, we want to extract the source
+ sources.push(pattern.source);
+ }
+ // Intentionally skip other cases
+ }
+ return new RegExp(sources.join('|'), 'i');
+}
+
+function urlencode(o) {
+ var pairs = [];
+ each(o, function(key, value) {
+ pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));
+ });
+ return pairs.join('&');
+}
+
+// borrowed from https://tools.ietf.org/html/rfc3986#appendix-B
+// intentionally using regex and not href parsing trick because React Native and other
+// environments where DOM might not be available
+function parseUrl(url) {
+ if (typeof url !== 'string') return {};
+ var match = url.match(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/);
+
+ // coerce to undefined values to empty string so we don't get 'undefined'
+ var query = match[6] || '';
+ var fragment = match[8] || '';
+ return {
+ protocol: match[2],
+ host: match[4],
+ path: match[5],
+ relative: match[5] + query + fragment // everything minus origin
+ };
+}
+function uuid4() {
+ var crypto = _window.crypto || _window.msCrypto;
+
+ if (!isUndefined(crypto) && crypto.getRandomValues) {
+ // Use window.crypto API if available
+ // eslint-disable-next-line no-undef
+ var arr = new Uint16Array(8);
+ crypto.getRandomValues(arr);
+
+ // set 4 in byte 7
+ arr[3] = (arr[3] & 0xfff) | 0x4000;
+ // set 2 most significant bits of byte 9 to '10'
+ arr[4] = (arr[4] & 0x3fff) | 0x8000;
+
+ var pad = function(num) {
+ var v = num.toString(16);
+ while (v.length < 4) {
+ v = '0' + v;
+ }
+ return v;
+ };
+
+ return (
+ pad(arr[0]) +
+ pad(arr[1]) +
+ pad(arr[2]) +
+ pad(arr[3]) +
+ pad(arr[4]) +
+ pad(arr[5]) +
+ pad(arr[6]) +
+ pad(arr[7])
+ );
+ } else {
+ // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523
+ return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
+ var r = (Math.random() * 16) | 0,
+ v = c === 'x' ? r : (r & 0x3) | 0x8;
+ return v.toString(16);
+ });
+ }
+}
+
+/**
+ * Given a child DOM element, returns a query-selector statement describing that
+ * and its ancestors
+ * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]
+ * @param elem
+ * @returns {string}
+ */
+function htmlTreeAsString(elem) {
+ /* eslint no-extra-parens:0*/
+ var MAX_TRAVERSE_HEIGHT = 5,
+ MAX_OUTPUT_LEN = 80,
+ out = [],
+ height = 0,
+ len = 0,
+ separator = ' > ',
+ sepLength = separator.length,
+ nextStr;
+
+ while (elem && height++ < MAX_TRAVERSE_HEIGHT) {
+ nextStr = htmlElementAsString(elem);
+ // bail out if
+ // - nextStr is the 'html' element
+ // - the length of the string that would be created exceeds MAX_OUTPUT_LEN
+ // (ignore this limit if we are on the first iteration)
+ if (
+ nextStr === 'html' ||
+ (height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN)
+ ) {
+ break;
+ }
+
+ out.push(nextStr);
+
+ len += nextStr.length;
+ elem = elem.parentNode;
+ }
+
+ return out.reverse().join(separator);
+}
+
+/**
+ * Returns a simple, query-selector representation of a DOM element
+ * e.g. [HTMLElement] => input#foo.btn[name=baz]
+ * @param HTMLElement
+ * @returns {string}
+ */
+function htmlElementAsString(elem) {
+ var out = [],
+ className,
+ classes,
+ key,
+ attr,
+ i;
+
+ if (!elem || !elem.tagName) {
+ return '';
+ }
+
+ out.push(elem.tagName.toLowerCase());
+ if (elem.id) {
+ out.push('#' + elem.id);
+ }
+
+ className = elem.className;
+ if (className && isString(className)) {
+ classes = className.split(/\s+/);
+ for (i = 0; i < classes.length; i++) {
+ out.push('.' + classes[i]);
+ }
+ }
+ var attrWhitelist = ['type', 'name', 'title', 'alt'];
+ for (i = 0; i < attrWhitelist.length; i++) {
+ key = attrWhitelist[i];
+ attr = elem.getAttribute(key);
+ if (attr) {
+ out.push('[' + key + '="' + attr + '"]');
+ }
+ }
+ return out.join('');
+}
+
+/**
+ * Returns true if either a OR b is truthy, but not both
+ */
+function isOnlyOneTruthy(a, b) {
+ return !!(!!a ^ !!b);
+}
+
+/**
+ * Returns true if both parameters are undefined
+ */
+function isBothUndefined(a, b) {
+ return isUndefined(a) && isUndefined(b);
+}
+
+/**
+ * Returns true if the two input exception interfaces have the same content
+ */
+function isSameException(ex1, ex2) {
+ if (isOnlyOneTruthy(ex1, ex2)) return false;
+
+ ex1 = ex1.values[0];
+ ex2 = ex2.values[0];
+
+ if (ex1.type !== ex2.type || ex1.value !== ex2.value) return false;
+
+ // in case both stacktraces are undefined, we can't decide so default to false
+ if (isBothUndefined(ex1.stacktrace, ex2.stacktrace)) return false;
+
+ return isSameStacktrace(ex1.stacktrace, ex2.stacktrace);
+}
+
+/**
+ * Returns true if the two input stack trace interfaces have the same content
+ */
+function isSameStacktrace(stack1, stack2) {
+ if (isOnlyOneTruthy(stack1, stack2)) return false;
+
+ var frames1 = stack1.frames;
+ var frames2 = stack2.frames;
+
+ // Exit early if frame count differs
+ if (frames1.length !== frames2.length) return false;
+
+ // Iterate through every frame; bail out if anything differs
+ var a, b;
+ for (var i = 0; i < frames1.length; i++) {
+ a = frames1[i];
+ b = frames2[i];
+ if (
+ a.filename !== b.filename ||
+ a.lineno !== b.lineno ||
+ a.colno !== b.colno ||
+ a['function'] !== b['function']
+ )
+ return false;
+ }
+ return true;
+}
+
+/**
+ * Polyfill a method
+ * @param obj object e.g. `document`
+ * @param name method name present on object e.g. `addEventListener`
+ * @param replacement replacement function
+ * @param track {optional} record instrumentation to an array
+ */
+function fill(obj, name, replacement, track) {
+ if (obj == null) return;
+ var orig = obj[name];
+ obj[name] = replacement(orig);
+ obj[name].__raven__ = true;
+ obj[name].__orig__ = orig;
+ if (track) {
+ track.push([obj, name, orig]);
+ }
+}
+
+/**
+ * Join values in array
+ * @param input array of values to be joined together
+ * @param delimiter string to be placed in-between values
+ * @returns {string}
+ */
+function safeJoin(input, delimiter) {
+ if (!isArray(input)) return '';
+
+ var output = [];
+
+ for (var i = 0; i < input.length; i++) {
+ try {
+ output.push(String(input[i]));
+ } catch (e) {
+ output.push('[value cannot be serialized]');
+ }
+ }
+
+ return output.join(delimiter);
+}
+
+// Default Node.js REPL depth
+var MAX_SERIALIZE_EXCEPTION_DEPTH = 3;
+// 50kB, as 100kB is max payload size, so half sounds reasonable
+var MAX_SERIALIZE_EXCEPTION_SIZE = 50 * 1024;
+var MAX_SERIALIZE_KEYS_LENGTH = 40;
+
+function utf8Length(value) {
+ return ~-encodeURI(value).split(/%..|./).length;
+}
+
+function jsonSize(value) {
+ return utf8Length(JSON.stringify(value));
+}
+
+function serializeValue(value) {
+ if (typeof value === 'string') {
+ var maxLength = 40;
+ return truncate(value, maxLength);
+ } else if (
+ typeof value === 'number' ||
+ typeof value === 'boolean' ||
+ typeof value === 'undefined'
+ ) {
+ return value;
+ }
+
+ var type = Object.prototype.toString.call(value);
+
+ // Node.js REPL notation
+ if (type === '[object Object]') return '[Object]';
+ if (type === '[object Array]') return '[Array]';
+ if (type === '[object Function]')
+ return value.name ? '[Function: ' + value.name + ']' : '[Function]';
+
+ return value;
+}
+
+function serializeObject(value, depth) {
+ if (depth === 0) return serializeValue(value);
+
+ if (isPlainObject(value)) {
+ return Object.keys(value).reduce(function(acc, key) {
+ acc[key] = serializeObject(value[key], depth - 1);
+ return acc;
+ }, {});
+ } else if (Array.isArray(value)) {
+ return value.map(function(val) {
+ return serializeObject(val, depth - 1);
+ });
+ }
+
+ return serializeValue(value);
+}
+
+function serializeException(ex, depth, maxSize) {
+ if (!isPlainObject(ex)) return ex;
+
+ depth = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_DEPTH : depth;
+ maxSize = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_SIZE : maxSize;
+
+ var serialized = serializeObject(ex, depth);
+
+ if (jsonSize(stringify(serialized)) > maxSize) {
+ return serializeException(ex, depth - 1);
+ }
+
+ return serialized;
+}
+
+function serializeKeysForMessage(keys, maxLength) {
+ if (typeof keys === 'number' || typeof keys === 'string') return keys.toString();
+ if (!Array.isArray(keys)) return '';
+
+ keys = keys.filter(function(key) {
+ return typeof key === 'string';
+ });
+ if (keys.length === 0) return '[object has no keys]';
+
+ maxLength = typeof maxLength !== 'number' ? MAX_SERIALIZE_KEYS_LENGTH : maxLength;
+ if (keys[0].length >= maxLength) return keys[0];
+
+ for (var usedKeys = keys.length; usedKeys > 0; usedKeys--) {
+ var serialized = keys.slice(0, usedKeys).join(', ');
+ if (serialized.length > maxLength) continue;
+ if (usedKeys === keys.length) return serialized;
+ return serialized + '\u2026';
+ }
+
+ return '';
+}
+
+function sanitize(input, sanitizeKeys) {
+ if (!isArray(sanitizeKeys) || (isArray(sanitizeKeys) && sanitizeKeys.length === 0))
+ return input;
+
+ var sanitizeRegExp = joinRegExp(sanitizeKeys);
+ var sanitizeMask = '********';
+ var safeInput;
+
+ try {
+ safeInput = JSON.parse(stringify(input));
+ } catch (o_O) {
+ return input;
+ }
+
+ function sanitizeWorker(workerInput) {
+ if (isArray(workerInput)) {
+ return workerInput.map(function(val) {
+ return sanitizeWorker(val);
+ });
+ }
+
+ if (isPlainObject(workerInput)) {
+ return Object.keys(workerInput).reduce(function(acc, k) {
+ if (sanitizeRegExp.test(k)) {
+ acc[k] = sanitizeMask;
+ } else {
+ acc[k] = sanitizeWorker(workerInput[k]);
+ }
+ return acc;
+ }, {});
+ }
+
+ return workerInput;
+ }
+
+ return sanitizeWorker(safeInput);
+}
+
+module.exports = {
+ isObject: isObject,
+ isError: isError,
+ isErrorEvent: isErrorEvent,
+ isDOMError: isDOMError,
+ isDOMException: isDOMException,
+ isUndefined: isUndefined,
+ isFunction: isFunction,
+ isPlainObject: isPlainObject,
+ isString: isString,
+ isArray: isArray,
+ isEmptyObject: isEmptyObject,
+ supportsErrorEvent: supportsErrorEvent,
+ supportsDOMError: supportsDOMError,
+ supportsDOMException: supportsDOMException,
+ supportsFetch: supportsFetch,
+ supportsReferrerPolicy: supportsReferrerPolicy,
+ supportsPromiseRejectionEvent: supportsPromiseRejectionEvent,
+ wrappedCallback: wrappedCallback,
+ each: each,
+ objectMerge: objectMerge,
+ truncate: truncate,
+ objectFrozen: objectFrozen,
+ hasKey: hasKey,
+ joinRegExp: joinRegExp,
+ urlencode: urlencode,
+ uuid4: uuid4,
+ htmlTreeAsString: htmlTreeAsString,
+ htmlElementAsString: htmlElementAsString,
+ isSameException: isSameException,
+ isSameStacktrace: isSameStacktrace,
+ parseUrl: parseUrl,
+ fill: fill,
+ safeJoin: safeJoin,
+ serializeException: serializeException,
+ serializeKeysForMessage: serializeKeysForMessage,
+ sanitize: sanitize
+};
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"10":10}],9:[function(_dereq_,module,exports){
+(function (global){
+var utils = _dereq_(8);
+
+/*
+ TraceKit - Cross brower stack traces
+
+ This was originally forked from github.com/occ/TraceKit, but has since been
+ largely re-written and is now maintained as part of raven-js. Tests for
+ this are in test/vendor.
+
+ MIT license
+*/
+
+var TraceKit = {
+ collectWindowErrors: true,
+ debug: false
+};
+
+// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)
+var _window =
+ typeof window !== 'undefined'
+ ? window
+ : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
+
+// global reference to slice
+var _slice = [].slice;
+var UNKNOWN_FUNCTION = '?';
+
+// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types
+var ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;
+
+function getLocationHref() {
+ if (typeof document === 'undefined' || document.location == null) return '';
+ return document.location.href;
+}
+
+function getLocationOrigin() {
+ if (typeof document === 'undefined' || document.location == null) return '';
+
+ // Oh dear IE10...
+ if (!document.location.origin) {
+ document.location.origin =
+ document.location.protocol +
+ '//' +
+ document.location.hostname +
+ (document.location.port ? ':' + document.location.port : '');
+ }
+
+ return document.location.origin;
+}
+
+/**
+ * TraceKit.report: cross-browser processing of unhandled exceptions
+ *
+ * Syntax:
+ * TraceKit.report.subscribe(function(stackInfo) { ... })
+ * TraceKit.report.unsubscribe(function(stackInfo) { ... })
+ * TraceKit.report(exception)
+ * try { ...code... } catch(ex) { TraceKit.report(ex); }
+ *
+ * Supports:
+ * - Firefox: full stack trace with line numbers, plus column number
+ * on top frame; column number is not guaranteed
+ * - Opera: full stack trace with line and column numbers
+ * - Chrome: full stack trace with line and column numbers
+ * - Safari: line and column number for the top frame only; some frames
+ * may be missing, and column number is not guaranteed
+ * - IE: line and column number for the top frame only; some frames
+ * may be missing, and column number is not guaranteed
+ *
+ * In theory, TraceKit should work on all of the following versions:
+ * - IE5.5+ (only 8.0 tested)
+ * - Firefox 0.9+ (only 3.5+ tested)
+ * - Opera 7+ (only 10.50 tested; versions 9 and earlier may require
+ * Exceptions Have Stacktrace to be enabled in opera:config)
+ * - Safari 3+ (only 4+ tested)
+ * - Chrome 1+ (only 5+ tested)
+ * - Konqueror 3.5+ (untested)
+ *
+ * Requires TraceKit.computeStackTrace.
+ *
+ * Tries to catch all unhandled exceptions and report them to the
+ * subscribed handlers. Please note that TraceKit.report will rethrow the
+ * exception. This is REQUIRED in order to get a useful stack trace in IE.
+ * If the exception does not reach the top of the browser, you will only
+ * get a stack trace from the point where TraceKit.report was called.
+ *
+ * Handlers receive a stackInfo object as described in the
+ * TraceKit.computeStackTrace docs.
+ */
+TraceKit.report = (function reportModuleWrapper() {
+ var handlers = [],
+ lastArgs = null,
+ lastException = null,
+ lastExceptionStack = null;
+
+ /**
+ * Add a crash handler.
+ * @param {Function} handler
+ */
+ function subscribe(handler) {
+ installGlobalHandler();
+ handlers.push(handler);
+ }
+
+ /**
+ * Remove a crash handler.
+ * @param {Function} handler
+ */
+ function unsubscribe(handler) {
+ for (var i = handlers.length - 1; i >= 0; --i) {
+ if (handlers[i] === handler) {
+ handlers.splice(i, 1);
+ }
+ }
+ }
+
+ /**
+ * Remove all crash handlers.
+ */
+ function unsubscribeAll() {
+ uninstallGlobalHandler();
+ handlers = [];
+ }
+
+ /**
+ * Dispatch stack information to all handlers.
+ * @param {Object.} stack
+ */
+ function notifyHandlers(stack, isWindowError) {
+ var exception = null;
+ if (isWindowError && !TraceKit.collectWindowErrors) {
+ return;
+ }
+ for (var i in handlers) {
+ if (handlers.hasOwnProperty(i)) {
+ try {
+ handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2)));
+ } catch (inner) {
+ exception = inner;
+ }
+ }
+ }
+
+ if (exception) {
+ throw exception;
+ }
+ }
+
+ var _oldOnerrorHandler, _onErrorHandlerInstalled;
+
+ /**
+ * Ensures all global unhandled exceptions are recorded.
+ * Supported by Gecko and IE.
+ * @param {string} msg Error message.
+ * @param {string} url URL of script that generated the exception.
+ * @param {(number|string)} lineNo The line number at which the error
+ * occurred.
+ * @param {?(number|string)} colNo The column number at which the error
+ * occurred.
+ * @param {?Error} ex The actual Error object.
+ */
+ function traceKitWindowOnError(msg, url, lineNo, colNo, ex) {
+ var stack = null;
+ // If 'ex' is ErrorEvent, get real Error from inside
+ var exception = utils.isErrorEvent(ex) ? ex.error : ex;
+ // If 'msg' is ErrorEvent, get real message from inside
+ var message = utils.isErrorEvent(msg) ? msg.message : msg;
+
+ if (lastExceptionStack) {
+ TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(
+ lastExceptionStack,
+ url,
+ lineNo,
+ message
+ );
+ processLastException();
+ } else if (exception && utils.isError(exception)) {
+ // non-string `exception` arg; attempt to extract stack trace
+
+ // New chrome and blink send along a real error object
+ // Let's just report that like a normal error.
+ // See: https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror
+ stack = TraceKit.computeStackTrace(exception);
+ notifyHandlers(stack, true);
+ } else {
+ var location = {
+ url: url,
+ line: lineNo,
+ column: colNo
+ };
+
+ var name = undefined;
+ var groups;
+
+ if ({}.toString.call(message) === '[object String]') {
+ var groups = message.match(ERROR_TYPES_RE);
+ if (groups) {
+ name = groups[1];
+ message = groups[2];
+ }
+ }
+
+ location.func = UNKNOWN_FUNCTION;
+
+ stack = {
+ name: name,
+ message: message,
+ url: getLocationHref(),
+ stack: [location]
+ };
+ notifyHandlers(stack, true);
+ }
+
+ if (_oldOnerrorHandler) {
+ return _oldOnerrorHandler.apply(this, arguments);
+ }
+
+ return false;
+ }
+
+ function installGlobalHandler() {
+ if (_onErrorHandlerInstalled) {
+ return;
+ }
+ _oldOnerrorHandler = _window.onerror;
+ _window.onerror = traceKitWindowOnError;
+ _onErrorHandlerInstalled = true;
+ }
+
+ function uninstallGlobalHandler() {
+ if (!_onErrorHandlerInstalled) {
+ return;
+ }
+ _window.onerror = _oldOnerrorHandler;
+ _onErrorHandlerInstalled = false;
+ _oldOnerrorHandler = undefined;
+ }
+
+ function processLastException() {
+ var _lastExceptionStack = lastExceptionStack,
+ _lastArgs = lastArgs;
+ lastArgs = null;
+ lastExceptionStack = null;
+ lastException = null;
+ notifyHandlers.apply(null, [_lastExceptionStack, false].concat(_lastArgs));
+ }
+
+ /**
+ * Reports an unhandled Error to TraceKit.
+ * @param {Error} ex
+ * @param {?boolean} rethrow If false, do not re-throw the exception.
+ * Only used for window.onerror to not cause an infinite loop of
+ * rethrowing.
+ */
+ function report(ex, rethrow) {
+ var args = _slice.call(arguments, 1);
+ if (lastExceptionStack) {
+ if (lastException === ex) {
+ return; // already caught by an inner catch block, ignore
+ } else {
+ processLastException();
+ }
+ }
+
+ var stack = TraceKit.computeStackTrace(ex);
+ lastExceptionStack = stack;
+ lastException = ex;
+ lastArgs = args;
+
+ // If the stack trace is incomplete, wait for 2 seconds for
+ // slow slow IE to see if onerror occurs or not before reporting
+ // this exception; otherwise, we will end up with an incomplete
+ // stack trace
+ setTimeout(function() {
+ if (lastException === ex) {
+ processLastException();
+ }
+ }, stack.incomplete ? 2000 : 0);
+
+ if (rethrow !== false) {
+ throw ex; // re-throw to propagate to the top level (and cause window.onerror)
+ }
+ }
+
+ report.subscribe = subscribe;
+ report.unsubscribe = unsubscribe;
+ report.uninstall = unsubscribeAll;
+ return report;
+})();
+
+/**
+ * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript
+ *
+ * Syntax:
+ * s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below)
+ * Returns:
+ * s.name - exception name
+ * s.message - exception message
+ * s.stack[i].url - JavaScript or HTML file URL
+ * s.stack[i].func - function name, or empty for anonymous functions (if guessing did not work)
+ * s.stack[i].args - arguments passed to the function, if known
+ * s.stack[i].line - line number, if known
+ * s.stack[i].column - column number, if known
+ *
+ * Supports:
+ * - Firefox: full stack trace with line numbers and unreliable column
+ * number on top frame
+ * - Opera 10: full stack trace with line and column numbers
+ * - Opera 9-: full stack trace with line numbers
+ * - Chrome: full stack trace with line and column numbers
+ * - Safari: line and column number for the topmost stacktrace element
+ * only
+ * - IE: no line numbers whatsoever
+ *
+ * Tries to guess names of anonymous functions by looking for assignments
+ * in the source code. In IE and Safari, we have to guess source file names
+ * by searching for function bodies inside all page scripts. This will not
+ * work for scripts that are loaded cross-domain.
+ * Here be dragons: some function names may be guessed incorrectly, and
+ * duplicate functions may be mismatched.
+ *
+ * TraceKit.computeStackTrace should only be used for tracing purposes.
+ * Logging of unhandled exceptions should be done with TraceKit.report,
+ * which builds on top of TraceKit.computeStackTrace and provides better
+ * IE support by utilizing the window.onerror event to retrieve information
+ * about the top of the stack.
+ *
+ * Note: In IE and Safari, no stack trace is recorded on the Error object,
+ * so computeStackTrace instead walks its *own* chain of callers.
+ * This means that:
+ * * in Safari, some methods may be missing from the stack trace;
+ * * in IE, the topmost function in the stack trace will always be the
+ * caller of computeStackTrace.
+ *
+ * This is okay for tracing (because you are likely to be calling
+ * computeStackTrace from the function you want to be the topmost element
+ * of the stack trace anyway), but not okay for logging unhandled
+ * exceptions (because your catch block will likely be far away from the
+ * inner function that actually caused the exception).
+ *
+ */
+TraceKit.computeStackTrace = (function computeStackTraceWrapper() {
+ // Contents of Exception in various browsers.
+ //
+ // SAFARI:
+ // ex.message = Can't find variable: qq
+ // ex.line = 59
+ // ex.sourceId = 580238192
+ // ex.sourceURL = http://...
+ // ex.expressionBeginOffset = 96
+ // ex.expressionCaretOffset = 98
+ // ex.expressionEndOffset = 98
+ // ex.name = ReferenceError
+ //
+ // FIREFOX:
+ // ex.message = qq is not defined
+ // ex.fileName = http://...
+ // ex.lineNumber = 59
+ // ex.columnNumber = 69
+ // ex.stack = ...stack trace... (see the example below)
+ // ex.name = ReferenceError
+ //
+ // CHROME:
+ // ex.message = qq is not defined
+ // ex.name = ReferenceError
+ // ex.type = not_defined
+ // ex.arguments = ['aa']
+ // ex.stack = ...stack trace...
+ //
+ // INTERNET EXPLORER:
+ // ex.message = ...
+ // ex.name = ReferenceError
+ //
+ // OPERA:
+ // ex.message = ...message... (see the example below)
+ // ex.name = ReferenceError
+ // ex.opera#sourceloc = 11 (pretty much useless, duplicates the info in ex.message)
+ // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'
+
+ /**
+ * Computes stack trace information from the stack property.
+ * Chrome and Gecko use this property.
+ * @param {Error} ex
+ * @return {?Object.} Stack trace information.
+ */
+ function computeStackTraceFromStackProp(ex) {
+ if (typeof ex.stack === 'undefined' || !ex.stack) return;
+
+ var chrome = /^\s*at (?:(.*?) ?\()?((?:file|https?|blob|chrome-extension|native|eval|webpack||[a-z]:|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i;
+ var winjs = /^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i;
+ // NOTE: blob urls are now supposed to always have an origin, therefore it's format
+ // which is `blob:http://url/path/with-some-uuid`, is matched by `blob.*?:\/` as well
+ var gecko = /^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\/.*?|\[native code\]|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i;
+ // Used to additionally parse URL/line/column from eval frames
+ var geckoEval = /(\S+) line (\d+)(?: > eval line \d+)* > eval/i;
+ var chromeEval = /\((\S*)(?::(\d+))(?::(\d+))\)/;
+ var lines = ex.stack.split('\n');
+ var stack = [];
+ var submatch;
+ var parts;
+ var element;
+ var reference = /^(.*) is undefined$/.exec(ex.message);
+
+ for (var i = 0, j = lines.length; i < j; ++i) {
+ if ((parts = chrome.exec(lines[i]))) {
+ var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line
+ var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line
+ if (isEval && (submatch = chromeEval.exec(parts[2]))) {
+ // throw out eval line/column and use top-most line/column number
+ parts[2] = submatch[1]; // url
+ parts[3] = submatch[2]; // line
+ parts[4] = submatch[3]; // column
+ }
+ element = {
+ url: !isNative ? parts[2] : null,
+ func: parts[1] || UNKNOWN_FUNCTION,
+ args: isNative ? [parts[2]] : [],
+ line: parts[3] ? +parts[3] : null,
+ column: parts[4] ? +parts[4] : null
+ };
+ } else if ((parts = winjs.exec(lines[i]))) {
+ element = {
+ url: parts[2],
+ func: parts[1] || UNKNOWN_FUNCTION,
+ args: [],
+ line: +parts[3],
+ column: parts[4] ? +parts[4] : null
+ };
+ } else if ((parts = gecko.exec(lines[i]))) {
+ var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;
+ if (isEval && (submatch = geckoEval.exec(parts[3]))) {
+ // throw out eval line/column and use top-most line number
+ parts[3] = submatch[1];
+ parts[4] = submatch[2];
+ parts[5] = null; // no column when eval
+ } else if (i === 0 && !parts[5] && typeof ex.columnNumber !== 'undefined') {
+ // FireFox uses this awesome columnNumber property for its top frame
+ // Also note, Firefox's column number is 0-based and everything else expects 1-based,
+ // so adding 1
+ // NOTE: this hack doesn't work if top-most frame is eval
+ stack[0].column = ex.columnNumber + 1;
+ }
+ element = {
+ url: parts[3],
+ func: parts[1] || UNKNOWN_FUNCTION,
+ args: parts[2] ? parts[2].split(',') : [],
+ line: parts[4] ? +parts[4] : null,
+ column: parts[5] ? +parts[5] : null
+ };
+ } else {
+ continue;
+ }
+
+ if (!element.func && element.line) {
+ element.func = UNKNOWN_FUNCTION;
+ }
+
+ if (element.url && element.url.substr(0, 5) === 'blob:') {
+ // Special case for handling JavaScript loaded into a blob.
+ // We use a synchronous AJAX request here as a blob is already in
+ // memory - it's not making a network request. This will generate a warning
+ // in the browser console, but there has already been an error so that's not
+ // that much of an issue.
+ var xhr = new XMLHttpRequest();
+ xhr.open('GET', element.url, false);
+ xhr.send(null);
+
+ // If we failed to download the source, skip this patch
+ if (xhr.status === 200) {
+ var source = xhr.responseText || '';
+
+ // We trim the source down to the last 300 characters as sourceMappingURL is always at the end of the file.
+ // Why 300? To be in line with: https://github.com/getsentry/sentry/blob/4af29e8f2350e20c28a6933354e4f42437b4ba42/src/sentry/lang/javascript/processor.py#L164-L175
+ source = source.slice(-300);
+
+ // Now we dig out the source map URL
+ var sourceMaps = source.match(/\/\/# sourceMappingURL=(.*)$/);
+
+ // If we don't find a source map comment or we find more than one, continue on to the next element.
+ if (sourceMaps) {
+ var sourceMapAddress = sourceMaps[1];
+
+ // Now we check to see if it's a relative URL.
+ // If it is, convert it to an absolute one.
+ if (sourceMapAddress.charAt(0) === '~') {
+ sourceMapAddress = getLocationOrigin() + sourceMapAddress.slice(1);
+ }
+
+ // Now we strip the '.map' off of the end of the URL and update the
+ // element so that Sentry can match the map to the blob.
+ element.url = sourceMapAddress.slice(0, -4);
+ }
+ }
+ }
+
+ stack.push(element);
+ }
+
+ if (!stack.length) {
+ return null;
+ }
+
+ return {
+ name: ex.name,
+ message: ex.message,
+ url: getLocationHref(),
+ stack: stack
+ };
+ }
+
+ /**
+ * Adds information about the first frame to incomplete stack traces.
+ * Safari and IE require this to get complete data on the first frame.
+ * @param {Object.} stackInfo Stack trace information from
+ * one of the compute* methods.
+ * @param {string} url The URL of the script that caused an error.
+ * @param {(number|string)} lineNo The line number of the script that
+ * caused an error.
+ * @param {string=} message The error generated by the browser, which
+ * hopefully contains the name of the object that caused the error.
+ * @return {boolean} Whether or not the stack information was
+ * augmented.
+ */
+ function augmentStackTraceWithInitialElement(stackInfo, url, lineNo, message) {
+ var initial = {
+ url: url,
+ line: lineNo
+ };
+
+ if (initial.url && initial.line) {
+ stackInfo.incomplete = false;
+
+ if (!initial.func) {
+ initial.func = UNKNOWN_FUNCTION;
+ }
+
+ if (stackInfo.stack.length > 0) {
+ if (stackInfo.stack[0].url === initial.url) {
+ if (stackInfo.stack[0].line === initial.line) {
+ return false; // already in stack trace
+ } else if (
+ !stackInfo.stack[0].line &&
+ stackInfo.stack[0].func === initial.func
+ ) {
+ stackInfo.stack[0].line = initial.line;
+ return false;
+ }
+ }
+ }
+
+ stackInfo.stack.unshift(initial);
+ stackInfo.partial = true;
+ return true;
+ } else {
+ stackInfo.incomplete = true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Computes stack trace information by walking the arguments.caller
+ * chain at the time the exception occurred. This will cause earlier
+ * frames to be missed but is the only way to get any stack trace in
+ * Safari and IE. The top frame is restored by
+ * {@link augmentStackTraceWithInitialElement}.
+ * @param {Error} ex
+ * @return {?Object.} Stack trace information.
+ */
+ function computeStackTraceByWalkingCallerChain(ex, depth) {
+ var functionName = /function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,
+ stack = [],
+ funcs = {},
+ recursion = false,
+ parts,
+ item,
+ source;
+
+ for (
+ var curr = computeStackTraceByWalkingCallerChain.caller;
+ curr && !recursion;
+ curr = curr.caller
+ ) {
+ if (curr === computeStackTrace || curr === TraceKit.report) {
+ // console.log('skipping internal function');
+ continue;
+ }
+
+ item = {
+ url: null,
+ func: UNKNOWN_FUNCTION,
+ line: null,
+ column: null
+ };
+
+ if (curr.name) {
+ item.func = curr.name;
+ } else if ((parts = functionName.exec(curr.toString()))) {
+ item.func = parts[1];
+ }
+
+ if (typeof item.func === 'undefined') {
+ try {
+ item.func = parts.input.substring(0, parts.input.indexOf('{'));
+ } catch (e) {}
+ }
+
+ if (funcs['' + curr]) {
+ recursion = true;
+ } else {
+ funcs['' + curr] = true;
+ }
+
+ stack.push(item);
+ }
+
+ if (depth) {
+ // console.log('depth is ' + depth);
+ // console.log('stack is ' + stack.length);
+ stack.splice(0, depth);
+ }
+
+ var result = {
+ name: ex.name,
+ message: ex.message,
+ url: getLocationHref(),
+ stack: stack
+ };
+ augmentStackTraceWithInitialElement(
+ result,
+ ex.sourceURL || ex.fileName,
+ ex.line || ex.lineNumber,
+ ex.message || ex.description
+ );
+ return result;
+ }
+
+ /**
+ * Computes a stack trace for an exception.
+ * @param {Error} ex
+ * @param {(string|number)=} depth
+ */
+ function computeStackTrace(ex, depth) {
+ var stack = null;
+ depth = depth == null ? 0 : +depth;
+
+ try {
+ stack = computeStackTraceFromStackProp(ex);
+ if (stack) {
+ return stack;
+ }
+ } catch (e) {
+ if (TraceKit.debug) {
+ throw e;
+ }
+ }
+
+ try {
+ stack = computeStackTraceByWalkingCallerChain(ex, depth + 1);
+ if (stack) {
+ return stack;
+ }
+ } catch (e) {
+ if (TraceKit.debug) {
+ throw e;
+ }
+ }
+ return {
+ name: ex.name,
+ message: ex.message,
+ url: getLocationHref()
+ };
+ }
+
+ computeStackTrace.augmentStackTraceWithInitialElement = augmentStackTraceWithInitialElement;
+ computeStackTrace.computeStackTraceFromStackProp = computeStackTraceFromStackProp;
+
+ return computeStackTrace;
+})();
+
+module.exports = TraceKit;
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"8":8}],10:[function(_dereq_,module,exports){
+/*
+ json-stringify-safe
+ Like JSON.stringify, but doesn't throw on circular references.
+
+ Originally forked from https://github.com/isaacs/json-stringify-safe
+ version 5.0.1 on 3/8/2017 and modified to handle Errors serialization
+ and IE8 compatibility. Tests for this are in test/vendor.
+
+ ISC license: https://github.com/isaacs/json-stringify-safe/blob/master/LICENSE
+*/
+
+exports = module.exports = stringify;
+exports.getSerialize = serializer;
+
+function indexOf(haystack, needle) {
+ for (var i = 0; i < haystack.length; ++i) {
+ if (haystack[i] === needle) return i;
+ }
+ return -1;
+}
+
+function stringify(obj, replacer, spaces, cycleReplacer) {
+ return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces);
+}
+
+// https://github.com/ftlabs/js-abbreviate/blob/fa709e5f139e7770a71827b1893f22418097fbda/index.js#L95-L106
+function stringifyError(value) {
+ var err = {
+ // These properties are implemented as magical getters and don't show up in for in
+ stack: value.stack,
+ message: value.message,
+ name: value.name
+ };
+
+ for (var i in value) {
+ if (Object.prototype.hasOwnProperty.call(value, i)) {
+ err[i] = value[i];
+ }
+ }
+
+ return err;
+}
+
+function serializer(replacer, cycleReplacer) {
+ var stack = [];
+ var keys = [];
+
+ if (cycleReplacer == null) {
+ cycleReplacer = function(key, value) {
+ if (stack[0] === value) {
+ return '[Circular ~]';
+ }
+ return '[Circular ~.' + keys.slice(0, indexOf(stack, value)).join('.') + ']';
+ };
+ }
+
+ return function(key, value) {
+ if (stack.length > 0) {
+ var thisPos = indexOf(stack, this);
+ ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);
+ ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);
+
+ if (~indexOf(stack, value)) {
+ value = cycleReplacer.call(this, key, value);
+ }
+ } else {
+ stack.push(value);
+ }
+
+ return replacer == null
+ ? value instanceof Error ? stringifyError(value) : value
+ : replacer.call(this, key, value);
+ };
+}
+
+},{}],11:[function(_dereq_,module,exports){
+/*
+ * JavaScript MD5
+ * https://github.com/blueimp/JavaScript-MD5
+ *
+ * Copyright 2011, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * https://opensource.org/licenses/MIT
+ *
+ * Based on
+ * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
+ * Digest Algorithm, as defined in RFC 1321.
+ * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
+ * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
+ * Distributed under the BSD License
+ * See http://pajhome.org.uk/crypt/md5 for more info.
+ */
+
+/*
+* Add integers, wrapping at 2^32. This uses 16-bit operations internally
+* to work around bugs in some JS interpreters.
+*/
+function safeAdd(x, y) {
+ var lsw = (x & 0xffff) + (y & 0xffff);
+ var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
+ return (msw << 16) | (lsw & 0xffff);
+}
+
+/*
+* Bitwise rotate a 32-bit number to the left.
+*/
+function bitRotateLeft(num, cnt) {
+ return (num << cnt) | (num >>> (32 - cnt));
+}
+
+/*
+* These functions implement the four basic operations the algorithm uses.
+*/
+function md5cmn(q, a, b, x, s, t) {
+ return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);
+}
+function md5ff(a, b, c, d, x, s, t) {
+ return md5cmn((b & c) | (~b & d), a, b, x, s, t);
+}
+function md5gg(a, b, c, d, x, s, t) {
+ return md5cmn((b & d) | (c & ~d), a, b, x, s, t);
+}
+function md5hh(a, b, c, d, x, s, t) {
+ return md5cmn(b ^ c ^ d, a, b, x, s, t);
+}
+function md5ii(a, b, c, d, x, s, t) {
+ return md5cmn(c ^ (b | ~d), a, b, x, s, t);
+}
+
+/*
+* Calculate the MD5 of an array of little-endian words, and a bit length.
+*/
+function binlMD5(x, len) {
+ /* append padding */
+ x[len >> 5] |= 0x80 << (len % 32);
+ x[(((len + 64) >>> 9) << 4) + 14] = len;
+
+ var i;
+ var olda;
+ var oldb;
+ var oldc;
+ var oldd;
+ var a = 1732584193;
+ var b = -271733879;
+ var c = -1732584194;
+ var d = 271733878;
+
+ for (i = 0; i < x.length; i += 16) {
+ olda = a;
+ oldb = b;
+ oldc = c;
+ oldd = d;
+
+ a = md5ff(a, b, c, d, x[i], 7, -680876936);
+ d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);
+ c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);
+ b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);
+ a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);
+ d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);
+ c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);
+ b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);
+ a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);
+ d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);
+ c = md5ff(c, d, a, b, x[i + 10], 17, -42063);
+ b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);
+ a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);
+ d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);
+ c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);
+ b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);
+
+ a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);
+ d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);
+ c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);
+ b = md5gg(b, c, d, a, x[i], 20, -373897302);
+ a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);
+ d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);
+ c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);
+ b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);
+ a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);
+ d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);
+ c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);
+ b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);
+ a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);
+ d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);
+ c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);
+ b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);
+
+ a = md5hh(a, b, c, d, x[i + 5], 4, -378558);
+ d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);
+ c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);
+ b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);
+ a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);
+ d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);
+ c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);
+ b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);
+ a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);
+ d = md5hh(d, a, b, c, x[i], 11, -358537222);
+ c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);
+ b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);
+ a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);
+ d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);
+ c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);
+ b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);
+
+ a = md5ii(a, b, c, d, x[i], 6, -198630844);
+ d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);
+ c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);
+ b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);
+ a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);
+ d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);
+ c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);
+ b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);
+ a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);
+ d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);
+ c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);
+ b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);
+ a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);
+ d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);
+ c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);
+ b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);
+
+ a = safeAdd(a, olda);
+ b = safeAdd(b, oldb);
+ c = safeAdd(c, oldc);
+ d = safeAdd(d, oldd);
+ }
+ return [a, b, c, d];
+}
+
+/*
+* Convert an array of little-endian words to a string
+*/
+function binl2rstr(input) {
+ var i;
+ var output = '';
+ var length32 = input.length * 32;
+ for (i = 0; i < length32; i += 8) {
+ output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xff);
+ }
+ return output;
+}
+
+/*
+* Convert a raw string to an array of little-endian words
+* Characters >255 have their high-byte silently ignored.
+*/
+function rstr2binl(input) {
+ var i;
+ var output = [];
+ output[(input.length >> 2) - 1] = undefined;
+ for (i = 0; i < output.length; i += 1) {
+ output[i] = 0;
+ }
+ var length8 = input.length * 8;
+ for (i = 0; i < length8; i += 8) {
+ output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << (i % 32);
+ }
+ return output;
+}
+
+/*
+* Calculate the MD5 of a raw string
+*/
+function rstrMD5(s) {
+ return binl2rstr(binlMD5(rstr2binl(s), s.length * 8));
+}
+
+/*
+* Calculate the HMAC-MD5, of a key and some data (raw strings)
+*/
+function rstrHMACMD5(key, data) {
+ var i;
+ var bkey = rstr2binl(key);
+ var ipad = [];
+ var opad = [];
+ var hash;
+ ipad[15] = opad[15] = undefined;
+ if (bkey.length > 16) {
+ bkey = binlMD5(bkey, key.length * 8);
+ }
+ for (i = 0; i < 16; i += 1) {
+ ipad[i] = bkey[i] ^ 0x36363636;
+ opad[i] = bkey[i] ^ 0x5c5c5c5c;
+ }
+ hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);
+ return binl2rstr(binlMD5(opad.concat(hash), 512 + 128));
+}
+
+/*
+* Convert a raw string to a hex string
+*/
+function rstr2hex(input) {
+ var hexTab = '0123456789abcdef';
+ var output = '';
+ var x;
+ var i;
+ for (i = 0; i < input.length; i += 1) {
+ x = input.charCodeAt(i);
+ output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f);
+ }
+ return output;
+}
+
+/*
+* Encode a string as utf-8
+*/
+function str2rstrUTF8(input) {
+ return unescape(encodeURIComponent(input));
+}
+
+/*
+* Take string arguments and return either raw or hex encoded strings
+*/
+function rawMD5(s) {
+ return rstrMD5(str2rstrUTF8(s));
+}
+function hexMD5(s) {
+ return rstr2hex(rawMD5(s));
+}
+function rawHMACMD5(k, d) {
+ return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d));
+}
+function hexHMACMD5(k, d) {
+ return rstr2hex(rawHMACMD5(k, d));
+}
+
+function md5(string, key, raw) {
+ if (!key) {
+ if (!raw) {
+ return hexMD5(string);
+ }
+ return rawMD5(string);
+ }
+ if (!raw) {
+ return hexHMACMD5(key, string);
+ }
+ return rawHMACMD5(key, string);
+}
+
+module.exports = md5;
+
+},{}]},{},[7,1,2,3])(7)
+});
\ No newline at end of file
diff --git a/packages/raven-js/dist/angular,ember,require/raven.min.js b/packages/raven-js/dist/angular,ember,require/raven.min.js
new file mode 100644
index 000000000000..35a9353bcc37
--- /dev/null
+++ b/packages/raven-js/dist/angular,ember,require/raven.min.js
@@ -0,0 +1,4 @@
+/*! Raven.js 3.25.2 (30b6d4e) | github.com/getsentry/raven-js */
+!function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,b.Raven=a()}}(function(){var a;return function b(a,c,d){function e(g,h){if(!c[g]){if(!a[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};a[g][0].call(k.exports,function(b){var c=a[g][1][b];return e(c?c:b)},k,k.exports,b,a,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;gthis.l.maxBreadcrumbs&&this.v.shift(),this},addPlugin:function(a){var b=[].slice.call(arguments,1);return this.s.push([a,b]),this.o&&this.G(),this},setUserContext:function(a){return this.k.user=a,this},setExtraContext:function(a){return this.$("extra",a),this},setTagsContext:function(a){return this.$("tags",a),this},clearContext:function(){return this.k={},this},getContext:function(){return JSON.parse(h(this.k))},setEnvironment:function(a){return this.l.environment=a,this},setRelease:function(a){return this.l.release=a,this},setDataCallback:function(a){var b=this.l.dataCallback;return this.l.dataCallback=e(b,a),this},setBreadcrumbCallback:function(a){var b=this.l.breadcrumbCallback;return this.l.breadcrumbCallback=e(b,a),this},setShouldSendCallback:function(a){var b=this.l.shouldSendCallback;return this.l.shouldSendCallback=e(b,a),this},setTransport:function(a){return this.l.transport=a,this},lastException:function(){return this.e},lastEventId:function(){return this.g},isSetup:function(){return!!this.b&&(!!this.h||(this.ravenNotConfiguredError||(this.ravenNotConfiguredError=!0,this.A("error","Error: Raven has not been configured.")),!1))},afterLoad:function(){var a=R.RavenConfig;a&&this.config(a.dsn,a.config).install()},showReportDialog:function(a){if(S){a=a||{};var b=a.eventId||this.lastEventId();if(!b)throw new j("Missing eventId");var c=a.dsn||this.I;if(!c)throw new j("Missing DSN");var d=encodeURIComponent,e="";e+="?eventId="+d(b),e+="&dsn="+d(c);var f=a.user||this.k.user;f&&(f.name&&(e+="&name="+d(f.name)),f.email&&(e+="&email="+d(f.email)));var g=this.K(this.H(c)),h=S.createElement("script");h.async=!0,h.src=g+"/api/embed/error-page/"+e,(S.head||S.body).appendChild(h)}},M:function(){var a=this;this.n+=1,setTimeout(function(){a.n-=1})},_:function(a,b){var c,d;if(this.c){b=b||{},a="raven"+a.substr(0,1).toUpperCase()+a.substr(1),S.createEvent?(c=S.createEvent("HTMLEvents"),c.initEvent(a,!0,!0)):(c=S.createEventObject(),c.eventType=a);for(d in b)A(b,d)&&(c[d]=b[d]);if(S.createEvent)S.dispatchEvent(c);else try{S.fireEvent("on"+c.eventType.toLowerCase(),c)}catch(e){}}},aa:function(a){var b=this;return function(c){if(b.ba=null,b.w!==c){b.w=c;var d;try{d=E(c.target)}catch(e){d=""}b.captureBreadcrumb({category:"ui."+a,message:d})}}},ca:function(){var a=this,b=1e3;return function(c){var d;try{d=c.target}catch(e){return}var f=d&&d.tagName;if(f&&("INPUT"===f||"TEXTAREA"===f||d.isContentEditable)){var g=a.ba;g||a.aa("input")(c),clearTimeout(g),a.ba=setTimeout(function(){a.ba=null},b)}}},da:function(a,b){var c=H(this.x.href),d=H(b),e=H(a);this.y=b,c.protocol===d.protocol&&c.host===d.host&&(b=d.relative),c.protocol===e.protocol&&c.host===e.host&&(a=e.relative),this.captureBreadcrumb({category:"navigation",data:{to:b,from:a}})},D:function(){var a=this;a.ea=Function.prototype.toString,Function.prototype.toString=function(){return"function"==typeof this&&this.N?a.ea.apply(this.P,arguments):a.ea.apply(this,arguments)}},R:function(){this.ea&&(Function.prototype.toString=this.ea)},E:function(){function a(a){return function(b,d){for(var e=new Array(arguments.length),f=0;f2?arguments[2]:void 0;return c&&b.da(b.y,c+""),a.apply(this,arguments)}};I(R.history,"pushState",j,d),I(R.history,"replaceState",j,d)}if(c.console&&"console"in R&&console.log){var k=function(a,c){b.captureBreadcrumb({message:a,level:c.level,category:"console"})};w(["debug","info","warn","error","log"],function(a,b){O(console,b,k)})}},S:function(){for(var a;this.u.length;){a=this.u.shift();var b=a[0],c=a[1],d=a[2];b[c]=d}},T:function(){for(var a in this.r)this.q[a]=this.r[a]},G:function(){var a=this;w(this.s,function(b,c){var d=c[0],e=c[1];d.apply(a,[a].concat(e))})},H:function(a){var b=Q.exec(a),c={},d=7;try{for(;d--;)c[P[d]]=b[d]||""}catch(e){throw new j("Invalid DSN: "+a)}if(c.pass&&!this.l.allowSecretKey)throw new j("Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key");return c},K:function(a){var b="//"+a.host+(a.port?":"+a.port:"");return a.protocol&&(b=a.protocol+":"+b),b},B:function(){this.n||this.W.apply(this,arguments)},W:function(a,b){var c=this.Y(a,b);this._("handle",{stackInfo:a,options:b}),this.ga(a.name,a.message,a.url,a.lineno,c,b)},Y:function(a,b){var c=this,d=[];if(a.stack&&a.stack.length&&(w(a.stack,function(b,e){var f=c.ha(e,a.url);f&&d.push(f)}),b&&b.trimHeadFrames))for(var e=0;e0&&(a.breadcrumbs={values:[].slice.call(this.v,0)}),this.k.user&&(a.user=this.k.user),b.environment&&(a.environment=b.environment),b.release&&(a.release=b.release),b.serverName&&(a.server_name=b.serverName),a=this.qa(a),Object.keys(a).forEach(function(b){(null==a[b]||""===a[b]||v(a[b]))&&delete a[b]}),s(b.dataCallback)&&(a=b.dataCallback(a)||a),a&&!v(a)&&(!s(b.shouldSendCallback)||b.shouldSendCallback(a)))return this.na()?void this.A("warn","Raven dropped error due to backoff: ",a):void("number"==typeof b.sampleRate?Math.random() ",i=h.length;a&&f++1&&g+e.length*i+b.length>=d));)e.push(b),g+=b.length,a=a.parentNode;return e.reverse().join(h)}function F(a){var b,c,d,e,f,g=[];if(!a||!a.tagName)return"";if(g.push(a.tagName.toLowerCase()),a.id&&g.push("#"+a.id),b=a.className,b&&l(b))for(c=b.split(/\s+/),f=0;fc?Q(a,b-1):d}function R(a,b){if("number"==typeof a||"string"==typeof a)return a.toString();if(!Array.isArray(a))return"";if(a=a.filter(function(a){return"string"==typeof a}),0===a.length)return"[object has no keys]";if(b="number"!=typeof b?X:b,a[0].length>=b)return a[0];for(var c=a.length;c>0;c--){var d=a.slice(0,c).join(", ");if(!(d.length>b))return c===a.length?d:d+"…"}return""}function S(a,b){function c(a){return m(a)?a.map(function(a){return c(a)}):k(a)?Object.keys(a).reduce(function(b,d){return b[d]=e.test(d)?f:c(a[d]),b},{}):a}if(!m(b)||m(b)&&0===b.length)return a;var d,e=A(b),f="********";try{d=JSON.parse(T(a))}catch(g){return a}return c(d)}var T=a(10),U="undefined"!=typeof window?window:"undefined"!=typeof c?c:"undefined"!=typeof self?self:{},V=3,W=51200,X=40;b.exports={isObject:d,isError:e,isErrorEvent:f,isDOMError:g,isDOMException:h,isUndefined:i,isFunction:j,isPlainObject:k,isString:l,isArray:m,isEmptyObject:n,supportsErrorEvent:o,supportsDOMError:p,supportsDOMException:q,supportsFetch:r,supportsReferrerPolicy:s,supportsPromiseRejectionEvent:t,wrappedCallback:u,each:v,objectMerge:w,truncate:y,objectFrozen:x,hasKey:z,joinRegExp:A,urlencode:B,uuid4:D,htmlTreeAsString:E,htmlElementAsString:F,isSameException:I,isSameStacktrace:J,parseUrl:C,fill:K,safeJoin:L,serializeException:Q,serializeKeysForMessage:R,sanitize:S}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{10:10}],9:[function(a,b,c){(function(c){function d(){return"undefined"==typeof document||null==document.location?"":document.location.href}function e(){return"undefined"==typeof document||null==document.location?"":(document.location.origin||(document.location.origin=document.location.protocol+"//"+document.location.hostname+(document.location.port?":"+document.location.port:"")),document.location.origin)}var f=a(8),g={collectWindowErrors:!0,debug:!1},h="undefined"!=typeof window?window:"undefined"!=typeof c?c:"undefined"!=typeof self?self:{},i=[].slice,j="?",k=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;g.report=function(){function a(a){m(),s.push(a)}function b(a){for(var b=s.length-1;b>=0;--b)s[b]===a&&s.splice(b,1)}function c(){n(),s=[]}function e(a,b){var c=null;if(!b||g.collectWindowErrors){for(var d in s)if(s.hasOwnProperty(d))try{s[d].apply(null,[a].concat(i.call(arguments,2)))}catch(e){c=e}if(c)throw c}}function l(a,b,c,h,i){var l=null,m=f.isErrorEvent(i)?i.error:i,n=f.isErrorEvent(a)?a.message:a;if(v)g.computeStackTrace.augmentStackTraceWithInitialElement(v,b,c,n),o();else if(m&&f.isError(m))l=g.computeStackTrace(m),e(l,!0);else{var p,r={url:b,line:c,column:h},s=void 0;if("[object String]"==={}.toString.call(n)){var p=n.match(k);p&&(s=p[1],n=p[2])}r.func=j,l={name:s,message:n,url:d(),stack:[r]},e(l,!0)}return!!q&&q.apply(this,arguments)}function m(){r||(q=h.onerror,h.onerror=l,r=!0)}function n(){r&&(h.onerror=q,r=!1,q=void 0)}function o(){var a=v,b=t;t=null,v=null,u=null,e.apply(null,[a,!1].concat(b))}function p(a,b){var c=i.call(arguments,1);if(v){if(u===a)return;o()}var d=g.computeStackTrace(a);if(v=d,u=a,t=c,setTimeout(function(){u===a&&o()},d.incomplete?2e3:0),b!==!1)throw a}var q,r,s=[],t=null,u=null,v=null;return p.subscribe=a,p.unsubscribe=b,p.uninstall=c,p}(),g.computeStackTrace=function(){function a(a){if("undefined"!=typeof a.stack&&a.stack){for(var b,c,f,g=/^\s*at (?:(.*?) ?\()?((?:file|https?|blob|chrome-extension|native|eval|webpack||[a-z]:|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,h=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i,i=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\/.*?|\[native code\]|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i,k=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,l=/\((\S*)(?::(\d+))(?::(\d+))\)/,m=a.stack.split("\n"),n=[],o=(/^(.*) is undefined$/.exec(a.message),0),p=m.length;o eval")>-1;r&&(b=k.exec(c[3]))?(c[3]=b[1],c[4]=b[2],c[5]=null):0!==o||c[5]||"undefined"==typeof a.columnNumber||(n[0].column=a.columnNumber+1),f={url:c[3],func:c[1]||j,args:c[2]?c[2].split(","):[],line:c[4]?+c[4]:null,column:c[5]?+c[5]:null}}if(!f.func&&f.line&&(f.func=j),f.url&&"blob:"===f.url.substr(0,5)){var s=new XMLHttpRequest;if(s.open("GET",f.url,!1),s.send(null),200===s.status){var t=s.responseText||"";t=t.slice(-300);var u=t.match(/\/\/# sourceMappingURL=(.*)$/);if(u){var v=u[1];
+"~"===v.charAt(0)&&(v=e()+v.slice(1)),f.url=v.slice(0,-4)}}}n.push(f)}return n.length?{name:a.name,message:a.message,url:d(),stack:n}:null}}function b(a,b,c,d){var e={url:b,line:c};if(e.url&&e.line){if(a.incomplete=!1,e.func||(e.func=j),a.stack.length>0&&a.stack[0].url===e.url){if(a.stack[0].line===e.line)return!1;if(!a.stack[0].line&&a.stack[0].func===e.func)return a.stack[0].line=e.line,!1}return a.stack.unshift(e),a.partial=!0,!0}return a.incomplete=!0,!1}function c(a,e){for(var h,i,k=/function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,l=[],m={},n=!1,o=c.caller;o&&!n;o=o.caller)if(o!==f&&o!==g.report){if(i={url:null,func:j,line:null,column:null},o.name?i.func=o.name:(h=k.exec(o.toString()))&&(i.func=h[1]),"undefined"==typeof i.func)try{i.func=h.input.substring(0,h.input.indexOf("{"))}catch(p){}m[""+o]?n=!0:m[""+o]=!0,l.push(i)}e&&l.splice(0,e);var q={name:a.name,message:a.message,url:d(),stack:l};return b(q,a.sourceURL||a.fileName,a.line||a.lineNumber,a.message||a.description),q}function f(b,e){var f=null;e=null==e?0:+e;try{if(f=a(b))return f}catch(h){if(g.debug)throw h}try{if(f=c(b,e+1))return f}catch(h){if(g.debug)throw h}return{name:b.name,message:b.message,url:d()}}return f.augmentStackTraceWithInitialElement=b,f.computeStackTraceFromStackProp=a,f}(),b.exports=g}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{8:8}],10:[function(a,b,c){function d(a,b){for(var c=0;c0){var i=d(c,this);~i?c.splice(i+1):c.push(this),~i?e.splice(i,1/0,g):e.push(g),~d(c,h)&&(h=b.call(this,g,h))}else c.push(h);return null==a?h instanceof Error?f(h):h:a.call(this,g,h)}}c=b.exports=e,c.getSerialize=g},{}],11:[function(a,b,c){function d(a,b){var c=(65535&a)+(65535&b),d=(a>>16)+(b>>16)+(c>>16);return d<<16|65535&c}function e(a,b){return a<>>32-b}function f(a,b,c,f,g,h){return d(e(d(d(b,a),d(f,h)),g),c)}function g(a,b,c,d,e,g,h){return f(b&c|~b&d,a,b,e,g,h)}function h(a,b,c,d,e,g,h){return f(b&d|c&~d,a,b,e,g,h)}function i(a,b,c,d,e,g,h){return f(b^c^d,a,b,e,g,h)}function j(a,b,c,d,e,g,h){return f(c^(b|~d),a,b,e,g,h)}function k(a,b){a[b>>5]|=128<>>9<<4)+14]=b;var c,e,f,k,l,m=1732584193,n=-271733879,o=-1732584194,p=271733878;for(c=0;c>5]>>>b%32&255);return c}function m(a){var b,c=[];for(c[(a.length>>2)-1]=void 0,b=0;b>5]|=(255&a.charCodeAt(b/8))<16&&(e=k(e,8*a.length)),c=0;c<16;c+=1)f[c]=909522486^e[c],g[c]=1549556828^e[c];return d=k(f.concat(m(b)),512+8*b.length),l(k(g.concat(d),640))}function p(a){var b,c,d="0123456789abcdef",e="";for(c=0;c>>4&15)+d.charAt(15&b);return e}function q(a){return unescape(encodeURIComponent(a))}function r(a){return n(q(a))}function s(a){return p(r(a))}function t(a,b){return o(q(a),q(b))}function u(a,b){return p(t(a,b))}function v(a,b,c){return b?c?t(b,a):u(b,a):c?r(a):s(a)}b.exports=v},{}]},{},[7,1,2,3])(7)});
+//# sourceMappingURL=raven.min.js.map
\ No newline at end of file
diff --git a/packages/raven-js/dist/angular,ember,require/raven.min.js.map b/packages/raven-js/dist/angular,ember,require/raven.min.js.map
new file mode 100644
index 000000000000..8477e1f8b253
--- /dev/null
+++ b/packages/raven-js/dist/angular,ember,require/raven.min.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["raven.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Raven","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length","1","_dereq_","angularPlugin","angular","RavenProvider","$get","$window","ExceptionHandlerProvider","$provide","decorator","exceptionHandler","R","$delegate","ex","cause","captureException","extra","moduleName","provider","config","setDataCallback","wrappedCallback","data","_normalizeData","angularPattern","exception","values","matches","exec","value","type","message","angularDocs","substr","addPlugin","7","8","2","emberPlugin","Ember","_oldOnError","onerror","error","RSVP","on","reason","context","captureMessage","3","requirePlugin","wrap","deep","4","RavenConfigError","name","prototype","constructor","5","utils","wrapMethod","console","level","callback","originalConsoleLevel","originalConsole","sentryLevel","args","slice","arguments","msg","safeJoin","logger","Function","apply","6","now","Date","keepOriginalCallback","original","isFunction","_hasJSON","JSON","stringify","_hasDocument","isUndefined","_document","_hasNavigator","_navigator","_lastCapturedException","_lastData","_lastEventId","_globalServer","_globalKey","_globalProject","_globalContext","_globalOptions","release","_window","SENTRY_RELEASE","id","ignoreErrors","ignoreUrls","whitelistUrls","includePaths","headers","collectWindowErrors","captureUnhandledRejections","maxMessageLength","maxUrlLength","stackTraceLimit","autoBreadcrumbs","instrument","sampleRate","sanitizeKeys","_fetchDefaults","method","keepalive","referrerPolicy","supportsReferrerPolicy","_ignoreOnError","_isRavenInstalled","_originalErrorStackTraceLimit","_originalConsole","_originalConsoleMethods","_plugins","_startTime","_wrappedBuiltIns","_breadcrumbs","_lastCapturedEvent","_location","location","_lastHref","href","_resetBackoff","TraceKit","md5","isErrorEvent","isDOMError","isDOMException","isError","isObject","isPlainObject","isString","isArray","isEmptyObject","each","objectMerge","truncate","objectFrozen","hasKey","joinRegExp","urlencode","uuid4","htmlTreeAsString","isSameException","isSameStacktrace","parseUrl","fill","supportsFetch","serializeKeysForMessage","serializeException","sanitize","wrapConsoleMethod","dsnKeys","split","dsnPattern","document","navigator","VERSION","debug","dsn","options","_logDebug","globalOptions","key","setDSN","push","maxBreadcrumbs","Math","max","min","autoBreadcrumbDefaults","xhr","dom","sentry","toString","instrumentDefaults","tryCatch","install","isSetup","report","subscribe","_handleOnErrorStackInfo","_attachPromiseRejectionHandler","_patchFunctionToString","_instrumentTryCatch","_instrumentBreadcrumbs","_drainPlugins","uri","_parseDSN","lastSlash","path","lastIndexOf","_dsn","user","_globalSecret","pass","_getGlobalServer","_globalEndpoint","func","undefined","_before","wrapped","_ignoreNextOnError","__raven__","__raven_wrapper__","property","__orig__","uninstall","_detachPromiseRejectionHandler","_unpatchFunctionToString","_restoreBuiltIns","_restoreConsole","U","event","unhandledPromiseRejection","C","_promiseRejectionHandler","bind","addEventListener","Q","removeEventListener","trimHeadFrames","stacktrace","_getCaptureExceptionOptionsFromPlainObject","stack","computeStackTrace","_handleStackInfo","ex1","V","currentOptions","exKeys","Object","keys","sort","fingerprint","__serialized__","test","initialCall","fileurl","url","frames","_prepareFrames","reverse","_send","captureBreadcrumb","obj","crumb","timestamp","breadcrumbCallback","result","shift","plugin","pluginArgs","setUserContext","setExtraContext","_mergeContext","setTagsContext","tags","clearContext","getContext","parse","setEnvironment","environment","setRelease","dataCallback","setBreadcrumbCallback","setShouldSendCallback","shouldSendCallback","setTransport","transport","lastException","lastEventId","ravenNotConfiguredError","afterLoad","RavenConfig","showReportDialog","eventId","encode","encodeURIComponent","qs","email","globalServer","script","createElement","async","src","head","body","appendChild","M","setTimeout","_","eventType","evt","toUpperCase","createEvent","initEvent","createEventObject","dispatchEvent","fireEvent","toLowerCase","aa","evtName","_keypressTimeout","target","category","ca","debounceDuration","tagName","isContentEditable","timeout","_breadcrumbEventHandler","clearTimeout","da","from","to","parsedLoc","parsedTo","parsedFrom","protocol","host","relative","D","_originalFunctionToString","E","wrapTimeFn","orig","fn","Array","originalCallback","wrapEventTarget","proto","hasOwnProperty","capture","secure","handleEvent","err","before","clickHandler","keypressHandler","_keypressEventHandler","wrappedBuiltIns","requestAnimationFrame","cb","eventTargets","F","wrapProp","prop","xhrproto","XMLHttpRequest","origOpen","indexOf","__raven_xhr","status_code","origSend","onreadystatechangeHandler","readyState","status","props","j","onreadystatechange","origFetch","fetchInput","Request","fetchData","then","response","attachEvent","chrome","isChromePackagedApp","app","runtime","hasPushAndReplaceState","history","pushState","replaceState","oldOnPopState","onpopstate","currentHref","_captureUrlChange","historyReplacementFunction","origHistFunction","log","consoleMethodCallback","S","builtin","T","G","installer","concat","H","str","m","allowSecretKey","K","port","B","W","stackInfo","_triggerEvent","_processException","lineno","Y","frame","_normalizeFrame","in_app","ha","stackInfoUrl","normalized","filename","line","colno","column","function","ga","prefixedMessage","transaction","ia","request","Referer","breadcrumbs","_trimBreadcrumbs","ja","urlProp","urlProps","ka","httpData","userAgent","User-Agent","referrer","z","_backoffDuration","_backoffStart","na","oa","current","last","pa","_shouldBackoff","retry","get","getResponseHeader","parseInt","Z","baseData","project","platform","_getHttpData","serverName","server_name","_sanitizeData","forEach","random","_sendProcessedPayload","qa","sa","ra","_trimPacket","allowDuplicates","_isRepeatData","event_id","_getUuid","auth","sentry_version","sentry_client","sentry_key","sentry_secret","_makeRequest","onSuccess","onError","_setBackoffState","ta","opts","evaluatedHeaders","evaluatedFetchParameters","_evaluateHash","fetchParameters","defaultFetchOptions","fetchOptions","fetch","ok","hasCORS","XDomainRequest","replace","onload","open","setRequestHeader","send","ua","hash","evaluated","A","$","setUser","setReleaseContext","10","11","9","RavenConstructor","_Raven","noConflict","Client","what","supportsErrorEvent","ErrorEvent","supportsDOMError","DOMError","supportsDOMException","DOMException","Headers","Response","supportsPromiseRejectionEvent","PromiseRejectionEvent","normalizedData","obj1","obj2","isFrozen","object","patterns","pattern","sources","len","source","RegExp","join","pairs","match","query","fragment","crypto","msCrypto","getRandomValues","arr","Uint16Array","pad","num","v","c","elem","nextStr","MAX_TRAVERSE_HEIGHT","MAX_OUTPUT_LEN","out","height","separator","sepLength","htmlElementAsString","parentNode","className","classes","attr","attrWhitelist","getAttribute","isOnlyOneTruthy","b","isBothUndefined","ex2","stack1","stack2","frames1","frames2","replacement","track","input","delimiter","output","String","utf8Length","encodeURI","jsonSize","serializeValue","maxLength","serializeObject","depth","reduce","acc","map","val","maxSize","MAX_SERIALIZE_EXCEPTION_DEPTH","MAX_SERIALIZE_EXCEPTION_SIZE","serialized","filter","MAX_SERIALIZE_KEYS_LENGTH","usedKeys","sanitizeWorker","workerInput","k","sanitizeRegExp","sanitizeMask","safeInput","o_O","getLocationHref","getLocationOrigin","origin","hostname","_slice","UNKNOWN_FUNCTION","ERROR_TYPES_RE","handler","installGlobalHandler","handlers","unsubscribe","splice","unsubscribeAll","uninstallGlobalHandler","notifyHandlers","isWindowError","inner","traceKitWindowOnError","lineNo","colNo","lastExceptionStack","augmentStackTraceWithInitialElement","processLastException","groups","_oldOnerrorHandler","_onErrorHandlerInstalled","_lastExceptionStack","_lastArgs","lastArgs","rethrow","incomplete","computeStackTraceFromStackProp","submatch","parts","element","winjs","gecko","geckoEval","chromeEval","lines","isNative","isEval","columnNumber","responseText","sourceMaps","sourceMapAddress","charAt","initial","unshift","partial","computeStackTraceByWalkingCallerChain","item","functionName","funcs","recursion","curr","caller","substring","sourceURL","fileName","lineNumber","description","haystack","needle","replacer","spaces","cycleReplacer","serializer","stringifyError","thisPos","Infinity","getSerialize","safeAdd","x","y","lsw","msw","bitRotateLeft","cnt","md5cmn","q","md5ff","d","md5gg","md5hh","md5ii","binlMD5","olda","oldb","oldc","oldd","binl2rstr","length32","fromCharCode","rstr2binl","length8","charCodeAt","rstrMD5","rstrHMACMD5","bkey","ipad","opad","rstr2hex","hexTab","str2rstrUTF8","unescape","rawMD5","hexMD5","rawHMACMD5","hexHMACMD5","string","raw"],"mappings":"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","file":"raven.min.js"}
\ No newline at end of file
diff --git a/packages/raven-js/dist/angular,ember,vue/raven.js b/packages/raven-js/dist/angular,ember,vue/raven.js
new file mode 100644
index 000000000000..99fb5e69e880
--- /dev/null
+++ b/packages/raven-js/dist/angular,ember,vue/raven.js
@@ -0,0 +1,4170 @@
+/*! Raven.js 3.25.2 (30b6d4e) | github.com/getsentry/raven-js */
+
+/*
+ * Includes TraceKit
+ * https://github.com/getsentry/TraceKit
+ *
+ * Copyright 2018 Matt Robenolt and other contributors
+ * Released under the BSD license
+ * https://github.com/getsentry/raven-js/blob/master/LICENSE
+ *
+ */
+
+(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Raven = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o' : 'anonymous component') +
+ (vm._isVue && vm.$options.__file ? ' at ' + vm.$options.__file : '')
+ );
+}
+
+function vuePlugin(Raven, Vue) {
+ Vue = Vue || window.Vue;
+
+ // quit if Vue isn't on the page
+ if (!Vue || !Vue.config) return;
+
+ var _oldOnError = Vue.config.errorHandler;
+ Vue.config.errorHandler = function VueErrorHandler(error, vm, info) {
+ var metaData = {};
+
+ // vm and lifecycleHook are not always available
+ if (Object.prototype.toString.call(vm) === '[object Object]') {
+ metaData.componentName = formatComponentName(vm);
+ metaData.propsData = vm.$options.propsData;
+ }
+
+ if (typeof info !== 'undefined') {
+ metaData.lifecycleHook = info;
+ }
+
+ Raven.captureException(error, {
+ extra: metaData
+ });
+
+ if (typeof _oldOnError === 'function') {
+ _oldOnError.call(this, error, vm, info);
+ }
+ };
+}
+
+module.exports = vuePlugin;
+
+_dereq_(7).addPlugin(module.exports);
+},{"7":7}],4:[function(_dereq_,module,exports){
+function RavenConfigError(message) {
+ this.name = 'RavenConfigError';
+ this.message = message;
+}
+RavenConfigError.prototype = new Error();
+RavenConfigError.prototype.constructor = RavenConfigError;
+
+module.exports = RavenConfigError;
+
+},{}],5:[function(_dereq_,module,exports){
+var utils = _dereq_(8);
+
+var wrapMethod = function(console, level, callback) {
+ var originalConsoleLevel = console[level];
+ var originalConsole = console;
+
+ if (!(level in console)) {
+ return;
+ }
+
+ var sentryLevel = level === 'warn' ? 'warning' : level;
+
+ console[level] = function() {
+ var args = [].slice.call(arguments);
+
+ var msg = utils.safeJoin(args, ' ');
+ var data = {level: sentryLevel, logger: 'console', extra: {arguments: args}};
+
+ if (level === 'assert') {
+ if (args[0] === false) {
+ // Default browsers message
+ msg =
+ 'Assertion failed: ' + (utils.safeJoin(args.slice(1), ' ') || 'console.assert');
+ data.extra.arguments = args.slice(1);
+ callback && callback(msg, data);
+ }
+ } else {
+ callback && callback(msg, data);
+ }
+
+ // this fails for some browsers. :(
+ if (originalConsoleLevel) {
+ // IE9 doesn't allow calling apply on console functions directly
+ // See: https://stackoverflow.com/questions/5472938/does-ie9-support-console-log-and-is-it-a-real-function#answer-5473193
+ Function.prototype.apply.call(originalConsoleLevel, originalConsole, args);
+ }
+ };
+};
+
+module.exports = {
+ wrapMethod: wrapMethod
+};
+
+},{"8":8}],6:[function(_dereq_,module,exports){
+(function (global){
+/*global XDomainRequest:false */
+
+var TraceKit = _dereq_(9);
+var stringify = _dereq_(10);
+var md5 = _dereq_(11);
+var RavenConfigError = _dereq_(4);
+
+var utils = _dereq_(8);
+var isErrorEvent = utils.isErrorEvent;
+var isDOMError = utils.isDOMError;
+var isDOMException = utils.isDOMException;
+var isError = utils.isError;
+var isObject = utils.isObject;
+var isPlainObject = utils.isPlainObject;
+var isUndefined = utils.isUndefined;
+var isFunction = utils.isFunction;
+var isString = utils.isString;
+var isArray = utils.isArray;
+var isEmptyObject = utils.isEmptyObject;
+var each = utils.each;
+var objectMerge = utils.objectMerge;
+var truncate = utils.truncate;
+var objectFrozen = utils.objectFrozen;
+var hasKey = utils.hasKey;
+var joinRegExp = utils.joinRegExp;
+var urlencode = utils.urlencode;
+var uuid4 = utils.uuid4;
+var htmlTreeAsString = utils.htmlTreeAsString;
+var isSameException = utils.isSameException;
+var isSameStacktrace = utils.isSameStacktrace;
+var parseUrl = utils.parseUrl;
+var fill = utils.fill;
+var supportsFetch = utils.supportsFetch;
+var supportsReferrerPolicy = utils.supportsReferrerPolicy;
+var serializeKeysForMessage = utils.serializeKeysForMessage;
+var serializeException = utils.serializeException;
+var sanitize = utils.sanitize;
+
+var wrapConsoleMethod = _dereq_(5).wrapMethod;
+
+var dsnKeys = 'source protocol user pass host port path'.split(' '),
+ dsnPattern = /^(?:(\w+):)?\/\/(?:(\w+)(:\w+)?@)?([\w\.-]+)(?::(\d+))?(\/.*)/;
+
+function now() {
+ return +new Date();
+}
+
+// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)
+var _window =
+ typeof window !== 'undefined'
+ ? window
+ : typeof global !== 'undefined'
+ ? global
+ : typeof self !== 'undefined'
+ ? self
+ : {};
+var _document = _window.document;
+var _navigator = _window.navigator;
+
+function keepOriginalCallback(original, callback) {
+ return isFunction(callback)
+ ? function(data) {
+ return callback(data, original);
+ }
+ : callback;
+}
+
+// First, check for JSON support
+// If there is no JSON, we no-op the core features of Raven
+// since JSON is required to encode the payload
+function Raven() {
+ this._hasJSON = !!(typeof JSON === 'object' && JSON.stringify);
+ // Raven can run in contexts where there's no document (react-native)
+ this._hasDocument = !isUndefined(_document);
+ this._hasNavigator = !isUndefined(_navigator);
+ this._lastCapturedException = null;
+ this._lastData = null;
+ this._lastEventId = null;
+ this._globalServer = null;
+ this._globalKey = null;
+ this._globalProject = null;
+ this._globalContext = {};
+ this._globalOptions = {
+ // SENTRY_RELEASE can be injected by https://github.com/getsentry/sentry-webpack-plugin
+ release: _window.SENTRY_RELEASE && _window.SENTRY_RELEASE.id,
+ logger: 'javascript',
+ ignoreErrors: [],
+ ignoreUrls: [],
+ whitelistUrls: [],
+ includePaths: [],
+ headers: null,
+ collectWindowErrors: true,
+ captureUnhandledRejections: true,
+ maxMessageLength: 0,
+ // By default, truncates URL values to 250 chars
+ maxUrlLength: 250,
+ stackTraceLimit: 50,
+ autoBreadcrumbs: true,
+ instrument: true,
+ sampleRate: 1,
+ sanitizeKeys: []
+ };
+ this._fetchDefaults = {
+ method: 'POST',
+ keepalive: true,
+ // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default
+ // https://caniuse.com/#feat=referrer-policy
+ // It doesn't. And it throw exception instead of ignoring this parameter...
+ // REF: https://github.com/getsentry/raven-js/issues/1233
+ referrerPolicy: supportsReferrerPolicy() ? 'origin' : ''
+ };
+ this._ignoreOnError = 0;
+ this._isRavenInstalled = false;
+ this._originalErrorStackTraceLimit = Error.stackTraceLimit;
+ // capture references to window.console *and* all its methods first
+ // before the console plugin has a chance to monkey patch
+ this._originalConsole = _window.console || {};
+ this._originalConsoleMethods = {};
+ this._plugins = [];
+ this._startTime = now();
+ this._wrappedBuiltIns = [];
+ this._breadcrumbs = [];
+ this._lastCapturedEvent = null;
+ this._keypressTimeout;
+ this._location = _window.location;
+ this._lastHref = this._location && this._location.href;
+ this._resetBackoff();
+
+ // eslint-disable-next-line guard-for-in
+ for (var method in this._originalConsole) {
+ this._originalConsoleMethods[method] = this._originalConsole[method];
+ }
+}
+
+/*
+ * The core Raven singleton
+ *
+ * @this {Raven}
+ */
+
+Raven.prototype = {
+ // Hardcode version string so that raven source can be loaded directly via
+ // webpack (using a build step causes webpack #1617). Grunt verifies that
+ // this value matches package.json during build.
+ // See: https://github.com/getsentry/raven-js/issues/465
+ VERSION: '3.25.2',
+
+ debug: false,
+
+ TraceKit: TraceKit, // alias to TraceKit
+
+ /*
+ * Configure Raven with a DSN and extra options
+ *
+ * @param {string} dsn The public Sentry DSN
+ * @param {object} options Set of global options [optional]
+ * @return {Raven}
+ */
+ config: function(dsn, options) {
+ var self = this;
+
+ if (self._globalServer) {
+ this._logDebug('error', 'Error: Raven has already been configured');
+ return self;
+ }
+ if (!dsn) return self;
+
+ var globalOptions = self._globalOptions;
+
+ // merge in options
+ if (options) {
+ each(options, function(key, value) {
+ // tags and extra are special and need to be put into context
+ if (key === 'tags' || key === 'extra' || key === 'user') {
+ self._globalContext[key] = value;
+ } else {
+ globalOptions[key] = value;
+ }
+ });
+ }
+
+ self.setDSN(dsn);
+
+ // "Script error." is hard coded into browsers for errors that it can't read.
+ // this is the result of a script being pulled in from an external domain and CORS.
+ globalOptions.ignoreErrors.push(/^Script error\.?$/);
+ globalOptions.ignoreErrors.push(/^Javascript error: Script error\.? on line 0$/);
+
+ // join regexp rules into one big rule
+ globalOptions.ignoreErrors = joinRegExp(globalOptions.ignoreErrors);
+ globalOptions.ignoreUrls = globalOptions.ignoreUrls.length
+ ? joinRegExp(globalOptions.ignoreUrls)
+ : false;
+ globalOptions.whitelistUrls = globalOptions.whitelistUrls.length
+ ? joinRegExp(globalOptions.whitelistUrls)
+ : false;
+ globalOptions.includePaths = joinRegExp(globalOptions.includePaths);
+ globalOptions.maxBreadcrumbs = Math.max(
+ 0,
+ Math.min(globalOptions.maxBreadcrumbs || 100, 100)
+ ); // default and hard limit is 100
+
+ var autoBreadcrumbDefaults = {
+ xhr: true,
+ console: true,
+ dom: true,
+ location: true,
+ sentry: true
+ };
+
+ var autoBreadcrumbs = globalOptions.autoBreadcrumbs;
+ if ({}.toString.call(autoBreadcrumbs) === '[object Object]') {
+ autoBreadcrumbs = objectMerge(autoBreadcrumbDefaults, autoBreadcrumbs);
+ } else if (autoBreadcrumbs !== false) {
+ autoBreadcrumbs = autoBreadcrumbDefaults;
+ }
+ globalOptions.autoBreadcrumbs = autoBreadcrumbs;
+
+ var instrumentDefaults = {
+ tryCatch: true
+ };
+
+ var instrument = globalOptions.instrument;
+ if ({}.toString.call(instrument) === '[object Object]') {
+ instrument = objectMerge(instrumentDefaults, instrument);
+ } else if (instrument !== false) {
+ instrument = instrumentDefaults;
+ }
+ globalOptions.instrument = instrument;
+
+ TraceKit.collectWindowErrors = !!globalOptions.collectWindowErrors;
+
+ // return for chaining
+ return self;
+ },
+
+ /*
+ * Installs a global window.onerror error handler
+ * to capture and report uncaught exceptions.
+ * At this point, install() is required to be called due
+ * to the way TraceKit is set up.
+ *
+ * @return {Raven}
+ */
+ install: function() {
+ var self = this;
+ if (self.isSetup() && !self._isRavenInstalled) {
+ TraceKit.report.subscribe(function() {
+ self._handleOnErrorStackInfo.apply(self, arguments);
+ });
+
+ if (self._globalOptions.captureUnhandledRejections) {
+ self._attachPromiseRejectionHandler();
+ }
+
+ self._patchFunctionToString();
+
+ if (self._globalOptions.instrument && self._globalOptions.instrument.tryCatch) {
+ self._instrumentTryCatch();
+ }
+
+ if (self._globalOptions.autoBreadcrumbs) self._instrumentBreadcrumbs();
+
+ // Install all of the plugins
+ self._drainPlugins();
+
+ self._isRavenInstalled = true;
+ }
+
+ Error.stackTraceLimit = self._globalOptions.stackTraceLimit;
+ return this;
+ },
+
+ /*
+ * Set the DSN (can be called multiple time unlike config)
+ *
+ * @param {string} dsn The public Sentry DSN
+ */
+ setDSN: function(dsn) {
+ var self = this,
+ uri = self._parseDSN(dsn),
+ lastSlash = uri.path.lastIndexOf('/'),
+ path = uri.path.substr(1, lastSlash);
+
+ self._dsn = dsn;
+ self._globalKey = uri.user;
+ self._globalSecret = uri.pass && uri.pass.substr(1);
+ self._globalProject = uri.path.substr(lastSlash + 1);
+
+ self._globalServer = self._getGlobalServer(uri);
+
+ self._globalEndpoint =
+ self._globalServer + '/' + path + 'api/' + self._globalProject + '/store/';
+
+ // Reset backoff state since we may be pointing at a
+ // new project/server
+ this._resetBackoff();
+ },
+
+ /*
+ * Wrap code within a context so Raven can capture errors
+ * reliably across domains that is executed immediately.
+ *
+ * @param {object} options A specific set of options for this context [optional]
+ * @param {function} func The callback to be immediately executed within the context
+ * @param {array} args An array of arguments to be called with the callback [optional]
+ */
+ context: function(options, func, args) {
+ if (isFunction(options)) {
+ args = func || [];
+ func = options;
+ options = undefined;
+ }
+
+ return this.wrap(options, func).apply(this, args);
+ },
+
+ /*
+ * Wrap code within a context and returns back a new function to be executed
+ *
+ * @param {object} options A specific set of options for this context [optional]
+ * @param {function} func The function to be wrapped in a new context
+ * @param {function} func A function to call before the try/catch wrapper [optional, private]
+ * @return {function} The newly wrapped functions with a context
+ */
+ wrap: function(options, func, _before) {
+ var self = this;
+ // 1 argument has been passed, and it's not a function
+ // so just return it
+ if (isUndefined(func) && !isFunction(options)) {
+ return options;
+ }
+
+ // options is optional
+ if (isFunction(options)) {
+ func = options;
+ options = undefined;
+ }
+
+ // At this point, we've passed along 2 arguments, and the second one
+ // is not a function either, so we'll just return the second argument.
+ if (!isFunction(func)) {
+ return func;
+ }
+
+ // We don't wanna wrap it twice!
+ try {
+ if (func.__raven__) {
+ return func;
+ }
+
+ // If this has already been wrapped in the past, return that
+ if (func.__raven_wrapper__) {
+ return func.__raven_wrapper__;
+ }
+ } catch (e) {
+ // Just accessing custom props in some Selenium environments
+ // can cause a "Permission denied" exception (see raven-js#495).
+ // Bail on wrapping and return the function as-is (defers to window.onerror).
+ return func;
+ }
+
+ function wrapped() {
+ var args = [],
+ i = arguments.length,
+ deep = !options || (options && options.deep !== false);
+
+ if (_before && isFunction(_before)) {
+ _before.apply(this, arguments);
+ }
+
+ // Recursively wrap all of a function's arguments that are
+ // functions themselves.
+ while (i--) args[i] = deep ? self.wrap(options, arguments[i]) : arguments[i];
+
+ try {
+ // Attempt to invoke user-land function
+ // NOTE: If you are a Sentry user, and you are seeing this stack frame, it
+ // means Raven caught an error invoking your application code. This is
+ // expected behavior and NOT indicative of a bug with Raven.js.
+ return func.apply(this, args);
+ } catch (e) {
+ self._ignoreNextOnError();
+ self.captureException(e, options);
+ throw e;
+ }
+ }
+
+ // copy over properties of the old function
+ for (var property in func) {
+ if (hasKey(func, property)) {
+ wrapped[property] = func[property];
+ }
+ }
+ wrapped.prototype = func.prototype;
+
+ func.__raven_wrapper__ = wrapped;
+ // Signal that this function has been wrapped/filled already
+ // for both debugging and to prevent it to being wrapped/filled twice
+ wrapped.__raven__ = true;
+ wrapped.__orig__ = func;
+
+ return wrapped;
+ },
+
+ /**
+ * Uninstalls the global error handler.
+ *
+ * @return {Raven}
+ */
+ uninstall: function() {
+ TraceKit.report.uninstall();
+
+ this._detachPromiseRejectionHandler();
+ this._unpatchFunctionToString();
+ this._restoreBuiltIns();
+ this._restoreConsole();
+
+ Error.stackTraceLimit = this._originalErrorStackTraceLimit;
+ this._isRavenInstalled = false;
+
+ return this;
+ },
+
+ /**
+ * Callback used for `unhandledrejection` event
+ *
+ * @param {PromiseRejectionEvent} event An object containing
+ * promise: the Promise that was rejected
+ * reason: the value with which the Promise was rejected
+ * @return void
+ */
+ _promiseRejectionHandler: function(event) {
+ this._logDebug('debug', 'Raven caught unhandled promise rejection:', event);
+ this.captureException(event.reason, {
+ extra: {
+ unhandledPromiseRejection: true
+ }
+ });
+ },
+
+ /**
+ * Installs the global promise rejection handler.
+ *
+ * @return {raven}
+ */
+ _attachPromiseRejectionHandler: function() {
+ this._promiseRejectionHandler = this._promiseRejectionHandler.bind(this);
+ _window.addEventListener &&
+ _window.addEventListener('unhandledrejection', this._promiseRejectionHandler);
+ return this;
+ },
+
+ /**
+ * Uninstalls the global promise rejection handler.
+ *
+ * @return {raven}
+ */
+ _detachPromiseRejectionHandler: function() {
+ _window.removeEventListener &&
+ _window.removeEventListener('unhandledrejection', this._promiseRejectionHandler);
+ return this;
+ },
+
+ /**
+ * Manually capture an exception and send it over to Sentry
+ *
+ * @param {error} ex An exception to be logged
+ * @param {object} options A specific set of options for this error [optional]
+ * @return {Raven}
+ */
+ captureException: function(ex, options) {
+ options = objectMerge({trimHeadFrames: 0}, options ? options : {});
+
+ if (isErrorEvent(ex) && ex.error) {
+ // If it is an ErrorEvent with `error` property, extract it to get actual Error
+ ex = ex.error;
+ } else if (isDOMError(ex) || isDOMException(ex)) {
+ // If it is a DOMError or DOMException (which are legacy APIs, but still supported in some browsers)
+ // then we just extract the name and message, as they don't provide anything else
+ // https://developer.mozilla.org/en-US/docs/Web/API/DOMError
+ // https://developer.mozilla.org/en-US/docs/Web/API/DOMException
+ var name = ex.name || (isDOMError(ex) ? 'DOMError' : 'DOMException');
+ var message = ex.message ? name + ': ' + ex.message : name;
+
+ return this.captureMessage(
+ message,
+ objectMerge(options, {
+ // neither DOMError or DOMException provide stack trace and we most likely wont get it this way as well
+ // but it's barely any overhead so we may at least try
+ stacktrace: true,
+ trimHeadFrames: options.trimHeadFrames + 1
+ })
+ );
+ } else if (isError(ex)) {
+ // we have a real Error object
+ ex = ex;
+ } else if (isPlainObject(ex)) {
+ // If it is plain Object, serialize it manually and extract options
+ // This will allow us to group events based on top-level keys
+ // which is much better than creating new group when any key/value change
+ options = this._getCaptureExceptionOptionsFromPlainObject(options, ex);
+ ex = new Error(options.message);
+ } else {
+ // If none of previous checks were valid, then it means that
+ // it's not a DOMError/DOMException
+ // it's not a plain Object
+ // it's not a valid ErrorEvent (one with an error property)
+ // it's not an Error
+ // So bail out and capture it as a simple message:
+ return this.captureMessage(
+ ex,
+ objectMerge(options, {
+ stacktrace: true, // if we fall back to captureMessage, default to attempting a new trace
+ trimHeadFrames: options.trimHeadFrames + 1
+ })
+ );
+ }
+
+ // Store the raw exception object for potential debugging and introspection
+ this._lastCapturedException = ex;
+
+ // TraceKit.report will re-raise any exception passed to it,
+ // which means you have to wrap it in try/catch. Instead, we
+ // can wrap it here and only re-raise if TraceKit.report
+ // raises an exception different from the one we asked to
+ // report on.
+ try {
+ var stack = TraceKit.computeStackTrace(ex);
+ this._handleStackInfo(stack, options);
+ } catch (ex1) {
+ if (ex !== ex1) {
+ throw ex1;
+ }
+ }
+
+ return this;
+ },
+
+ _getCaptureExceptionOptionsFromPlainObject: function(currentOptions, ex) {
+ var exKeys = Object.keys(ex).sort();
+ var options = objectMerge(currentOptions, {
+ message:
+ 'Non-Error exception captured with keys: ' + serializeKeysForMessage(exKeys),
+ fingerprint: [md5(exKeys)],
+ extra: currentOptions.extra || {}
+ });
+ options.extra.__serialized__ = serializeException(ex);
+
+ return options;
+ },
+
+ /*
+ * Manually send a message to Sentry
+ *
+ * @param {string} msg A plain message to be captured in Sentry
+ * @param {object} options A specific set of options for this message [optional]
+ * @return {Raven}
+ */
+ captureMessage: function(msg, options) {
+ // config() automagically converts ignoreErrors from a list to a RegExp so we need to test for an
+ // early call; we'll error on the side of logging anything called before configuration since it's
+ // probably something you should see:
+ if (
+ !!this._globalOptions.ignoreErrors.test &&
+ this._globalOptions.ignoreErrors.test(msg)
+ ) {
+ return;
+ }
+
+ options = options || {};
+ msg = msg + ''; // Make sure it's actually a string
+
+ var data = objectMerge(
+ {
+ message: msg
+ },
+ options
+ );
+
+ var ex;
+ // Generate a "synthetic" stack trace from this point.
+ // NOTE: If you are a Sentry user, and you are seeing this stack frame, it is NOT indicative
+ // of a bug with Raven.js. Sentry generates synthetic traces either by configuration,
+ // or if it catches a thrown object without a "stack" property.
+ try {
+ throw new Error(msg);
+ } catch (ex1) {
+ ex = ex1;
+ }
+
+ // null exception name so `Error` isn't prefixed to msg
+ ex.name = null;
+ var stack = TraceKit.computeStackTrace(ex);
+
+ // stack[0] is `throw new Error(msg)` call itself, we are interested in the frame that was just before that, stack[1]
+ var initialCall = isArray(stack.stack) && stack.stack[1];
+
+ // if stack[1] is `Raven.captureException`, it means that someone passed a string to it and we redirected that call
+ // to be handled by `captureMessage`, thus `initialCall` is the 3rd one, not 2nd
+ // initialCall => captureException(string) => captureMessage(string)
+ if (initialCall && initialCall.func === 'Raven.captureException') {
+ initialCall = stack.stack[2];
+ }
+
+ var fileurl = (initialCall && initialCall.url) || '';
+
+ if (
+ !!this._globalOptions.ignoreUrls.test &&
+ this._globalOptions.ignoreUrls.test(fileurl)
+ ) {
+ return;
+ }
+
+ if (
+ !!this._globalOptions.whitelistUrls.test &&
+ !this._globalOptions.whitelistUrls.test(fileurl)
+ ) {
+ return;
+ }
+
+ if (this._globalOptions.stacktrace || (options && options.stacktrace)) {
+ // fingerprint on msg, not stack trace (legacy behavior, could be revisited)
+ data.fingerprint = data.fingerprint == null ? msg : data.fingerprint;
+
+ options = objectMerge(
+ {
+ trimHeadFrames: 0
+ },
+ options
+ );
+ // Since we know this is a synthetic trace, the top frame (this function call)
+ // MUST be from Raven.js, so mark it for trimming
+ // We add to the trim counter so that callers can choose to trim extra frames, such
+ // as utility functions.
+ options.trimHeadFrames += 1;
+
+ var frames = this._prepareFrames(stack, options);
+ data.stacktrace = {
+ // Sentry expects frames oldest to newest
+ frames: frames.reverse()
+ };
+ }
+
+ // Make sure that fingerprint is always wrapped in an array
+ if (data.fingerprint) {
+ data.fingerprint = isArray(data.fingerprint)
+ ? data.fingerprint
+ : [data.fingerprint];
+ }
+
+ // Fire away!
+ this._send(data);
+
+ return this;
+ },
+
+ captureBreadcrumb: function(obj) {
+ var crumb = objectMerge(
+ {
+ timestamp: now() / 1000
+ },
+ obj
+ );
+
+ if (isFunction(this._globalOptions.breadcrumbCallback)) {
+ var result = this._globalOptions.breadcrumbCallback(crumb);
+
+ if (isObject(result) && !isEmptyObject(result)) {
+ crumb = result;
+ } else if (result === false) {
+ return this;
+ }
+ }
+
+ this._breadcrumbs.push(crumb);
+ if (this._breadcrumbs.length > this._globalOptions.maxBreadcrumbs) {
+ this._breadcrumbs.shift();
+ }
+ return this;
+ },
+
+ addPlugin: function(plugin /*arg1, arg2, ... argN*/) {
+ var pluginArgs = [].slice.call(arguments, 1);
+
+ this._plugins.push([plugin, pluginArgs]);
+ if (this._isRavenInstalled) {
+ this._drainPlugins();
+ }
+
+ return this;
+ },
+
+ /*
+ * Set/clear a user to be sent along with the payload.
+ *
+ * @param {object} user An object representing user data [optional]
+ * @return {Raven}
+ */
+ setUserContext: function(user) {
+ // Intentionally do not merge here since that's an unexpected behavior.
+ this._globalContext.user = user;
+
+ return this;
+ },
+
+ /*
+ * Merge extra attributes to be sent along with the payload.
+ *
+ * @param {object} extra An object representing extra data [optional]
+ * @return {Raven}
+ */
+ setExtraContext: function(extra) {
+ this._mergeContext('extra', extra);
+
+ return this;
+ },
+
+ /*
+ * Merge tags to be sent along with the payload.
+ *
+ * @param {object} tags An object representing tags [optional]
+ * @return {Raven}
+ */
+ setTagsContext: function(tags) {
+ this._mergeContext('tags', tags);
+
+ return this;
+ },
+
+ /*
+ * Clear all of the context.
+ *
+ * @return {Raven}
+ */
+ clearContext: function() {
+ this._globalContext = {};
+
+ return this;
+ },
+
+ /*
+ * Get a copy of the current context. This cannot be mutated.
+ *
+ * @return {object} copy of context
+ */
+ getContext: function() {
+ // lol javascript
+ return JSON.parse(stringify(this._globalContext));
+ },
+
+ /*
+ * Set environment of application
+ *
+ * @param {string} environment Typically something like 'production'.
+ * @return {Raven}
+ */
+ setEnvironment: function(environment) {
+ this._globalOptions.environment = environment;
+
+ return this;
+ },
+
+ /*
+ * Set release version of application
+ *
+ * @param {string} release Typically something like a git SHA to identify version
+ * @return {Raven}
+ */
+ setRelease: function(release) {
+ this._globalOptions.release = release;
+
+ return this;
+ },
+
+ /*
+ * Set the dataCallback option
+ *
+ * @param {function} callback The callback to run which allows the
+ * data blob to be mutated before sending
+ * @return {Raven}
+ */
+ setDataCallback: function(callback) {
+ var original = this._globalOptions.dataCallback;
+ this._globalOptions.dataCallback = keepOriginalCallback(original, callback);
+ return this;
+ },
+
+ /*
+ * Set the breadcrumbCallback option
+ *
+ * @param {function} callback The callback to run which allows filtering
+ * or mutating breadcrumbs
+ * @return {Raven}
+ */
+ setBreadcrumbCallback: function(callback) {
+ var original = this._globalOptions.breadcrumbCallback;
+ this._globalOptions.breadcrumbCallback = keepOriginalCallback(original, callback);
+ return this;
+ },
+
+ /*
+ * Set the shouldSendCallback option
+ *
+ * @param {function} callback The callback to run which allows
+ * introspecting the blob before sending
+ * @return {Raven}
+ */
+ setShouldSendCallback: function(callback) {
+ var original = this._globalOptions.shouldSendCallback;
+ this._globalOptions.shouldSendCallback = keepOriginalCallback(original, callback);
+ return this;
+ },
+
+ /**
+ * Override the default HTTP transport mechanism that transmits data
+ * to the Sentry server.
+ *
+ * @param {function} transport Function invoked instead of the default
+ * `makeRequest` handler.
+ *
+ * @return {Raven}
+ */
+ setTransport: function(transport) {
+ this._globalOptions.transport = transport;
+
+ return this;
+ },
+
+ /*
+ * Get the latest raw exception that was captured by Raven.
+ *
+ * @return {error}
+ */
+ lastException: function() {
+ return this._lastCapturedException;
+ },
+
+ /*
+ * Get the last event id
+ *
+ * @return {string}
+ */
+ lastEventId: function() {
+ return this._lastEventId;
+ },
+
+ /*
+ * Determine if Raven is setup and ready to go.
+ *
+ * @return {boolean}
+ */
+ isSetup: function() {
+ if (!this._hasJSON) return false; // needs JSON support
+ if (!this._globalServer) {
+ if (!this.ravenNotConfiguredError) {
+ this.ravenNotConfiguredError = true;
+ this._logDebug('error', 'Error: Raven has not been configured.');
+ }
+ return false;
+ }
+ return true;
+ },
+
+ afterLoad: function() {
+ // TODO: remove window dependence?
+
+ // Attempt to initialize Raven on load
+ var RavenConfig = _window.RavenConfig;
+ if (RavenConfig) {
+ this.config(RavenConfig.dsn, RavenConfig.config).install();
+ }
+ },
+
+ showReportDialog: function(options) {
+ if (
+ !_document // doesn't work without a document (React native)
+ )
+ return;
+
+ options = options || {};
+
+ var lastEventId = options.eventId || this.lastEventId();
+ if (!lastEventId) {
+ throw new RavenConfigError('Missing eventId');
+ }
+
+ var dsn = options.dsn || this._dsn;
+ if (!dsn) {
+ throw new RavenConfigError('Missing DSN');
+ }
+
+ var encode = encodeURIComponent;
+ var qs = '';
+ qs += '?eventId=' + encode(lastEventId);
+ qs += '&dsn=' + encode(dsn);
+
+ var user = options.user || this._globalContext.user;
+ if (user) {
+ if (user.name) qs += '&name=' + encode(user.name);
+ if (user.email) qs += '&email=' + encode(user.email);
+ }
+
+ var globalServer = this._getGlobalServer(this._parseDSN(dsn));
+
+ var script = _document.createElement('script');
+ script.async = true;
+ script.src = globalServer + '/api/embed/error-page/' + qs;
+ (_document.head || _document.body).appendChild(script);
+ },
+
+ /**** Private functions ****/
+ _ignoreNextOnError: function() {
+ var self = this;
+ this._ignoreOnError += 1;
+ setTimeout(function() {
+ // onerror should trigger before setTimeout
+ self._ignoreOnError -= 1;
+ });
+ },
+
+ _triggerEvent: function(eventType, options) {
+ // NOTE: `event` is a native browser thing, so let's avoid conflicting wiht it
+ var evt, key;
+
+ if (!this._hasDocument) return;
+
+ options = options || {};
+
+ eventType = 'raven' + eventType.substr(0, 1).toUpperCase() + eventType.substr(1);
+
+ if (_document.createEvent) {
+ evt = _document.createEvent('HTMLEvents');
+ evt.initEvent(eventType, true, true);
+ } else {
+ evt = _document.createEventObject();
+ evt.eventType = eventType;
+ }
+
+ for (key in options)
+ if (hasKey(options, key)) {
+ evt[key] = options[key];
+ }
+
+ if (_document.createEvent) {
+ // IE9 if standards
+ _document.dispatchEvent(evt);
+ } else {
+ // IE8 regardless of Quirks or Standards
+ // IE9 if quirks
+ try {
+ _document.fireEvent('on' + evt.eventType.toLowerCase(), evt);
+ } catch (e) {
+ // Do nothing
+ }
+ }
+ },
+
+ /**
+ * Wraps addEventListener to capture UI breadcrumbs
+ * @param evtName the event name (e.g. "click")
+ * @returns {Function}
+ * @private
+ */
+ _breadcrumbEventHandler: function(evtName) {
+ var self = this;
+ return function(evt) {
+ // reset keypress timeout; e.g. triggering a 'click' after
+ // a 'keypress' will reset the keypress debounce so that a new
+ // set of keypresses can be recorded
+ self._keypressTimeout = null;
+
+ // It's possible this handler might trigger multiple times for the same
+ // event (e.g. event propagation through node ancestors). Ignore if we've
+ // already captured the event.
+ if (self._lastCapturedEvent === evt) return;
+
+ self._lastCapturedEvent = evt;
+
+ // try/catch both:
+ // - accessing evt.target (see getsentry/raven-js#838, #768)
+ // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly
+ // can throw an exception in some circumstances.
+ var target;
+ try {
+ target = htmlTreeAsString(evt.target);
+ } catch (e) {
+ target = '';
+ }
+
+ self.captureBreadcrumb({
+ category: 'ui.' + evtName, // e.g. ui.click, ui.input
+ message: target
+ });
+ };
+ },
+
+ /**
+ * Wraps addEventListener to capture keypress UI events
+ * @returns {Function}
+ * @private
+ */
+ _keypressEventHandler: function() {
+ var self = this,
+ debounceDuration = 1000; // milliseconds
+
+ // TODO: if somehow user switches keypress target before
+ // debounce timeout is triggered, we will only capture
+ // a single breadcrumb from the FIRST target (acceptable?)
+ return function(evt) {
+ var target;
+ try {
+ target = evt.target;
+ } catch (e) {
+ // just accessing event properties can throw an exception in some rare circumstances
+ // see: https://github.com/getsentry/raven-js/issues/838
+ return;
+ }
+ var tagName = target && target.tagName;
+
+ // only consider keypress events on actual input elements
+ // this will disregard keypresses targeting body (e.g. tabbing
+ // through elements, hotkeys, etc)
+ if (
+ !tagName ||
+ (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && !target.isContentEditable)
+ )
+ return;
+
+ // record first keypress in a series, but ignore subsequent
+ // keypresses until debounce clears
+ var timeout = self._keypressTimeout;
+ if (!timeout) {
+ self._breadcrumbEventHandler('input')(evt);
+ }
+ clearTimeout(timeout);
+ self._keypressTimeout = setTimeout(function() {
+ self._keypressTimeout = null;
+ }, debounceDuration);
+ };
+ },
+
+ /**
+ * Captures a breadcrumb of type "navigation", normalizing input URLs
+ * @param to the originating URL
+ * @param from the target URL
+ * @private
+ */
+ _captureUrlChange: function(from, to) {
+ var parsedLoc = parseUrl(this._location.href);
+ var parsedTo = parseUrl(to);
+ var parsedFrom = parseUrl(from);
+
+ // because onpopstate only tells you the "new" (to) value of location.href, and
+ // not the previous (from) value, we need to track the value of the current URL
+ // state ourselves
+ this._lastHref = to;
+
+ // Use only the path component of the URL if the URL matches the current
+ // document (almost all the time when using pushState)
+ if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host)
+ to = parsedTo.relative;
+ if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host)
+ from = parsedFrom.relative;
+
+ this.captureBreadcrumb({
+ category: 'navigation',
+ data: {
+ to: to,
+ from: from
+ }
+ });
+ },
+
+ _patchFunctionToString: function() {
+ var self = this;
+ self._originalFunctionToString = Function.prototype.toString;
+ // eslint-disable-next-line no-extend-native
+ Function.prototype.toString = function() {
+ if (typeof this === 'function' && this.__raven__) {
+ return self._originalFunctionToString.apply(this.__orig__, arguments);
+ }
+ return self._originalFunctionToString.apply(this, arguments);
+ };
+ },
+
+ _unpatchFunctionToString: function() {
+ if (this._originalFunctionToString) {
+ // eslint-disable-next-line no-extend-native
+ Function.prototype.toString = this._originalFunctionToString;
+ }
+ },
+
+ /**
+ * Wrap timer functions and event targets to catch errors and provide
+ * better metadata.
+ */
+ _instrumentTryCatch: function() {
+ var self = this;
+
+ var wrappedBuiltIns = self._wrappedBuiltIns;
+
+ function wrapTimeFn(orig) {
+ return function(fn, t) {
+ // preserve arity
+ // Make a copy of the arguments to prevent deoptimization
+ // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments
+ var args = new Array(arguments.length);
+ for (var i = 0; i < args.length; ++i) {
+ args[i] = arguments[i];
+ }
+ var originalCallback = args[0];
+ if (isFunction(originalCallback)) {
+ args[0] = self.wrap(originalCallback);
+ }
+
+ // IE < 9 doesn't support .call/.apply on setInterval/setTimeout, but it
+ // also supports only two arguments and doesn't care what this is, so we
+ // can just call the original function directly.
+ if (orig.apply) {
+ return orig.apply(this, args);
+ } else {
+ return orig(args[0], args[1]);
+ }
+ };
+ }
+
+ var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;
+
+ function wrapEventTarget(global) {
+ var proto = _window[global] && _window[global].prototype;
+ if (proto && proto.hasOwnProperty && proto.hasOwnProperty('addEventListener')) {
+ fill(
+ proto,
+ 'addEventListener',
+ function(orig) {
+ return function(evtName, fn, capture, secure) {
+ // preserve arity
+ try {
+ if (fn && fn.handleEvent) {
+ fn.handleEvent = self.wrap(fn.handleEvent);
+ }
+ } catch (err) {
+ // can sometimes get 'Permission denied to access property "handle Event'
+ }
+
+ // More breadcrumb DOM capture ... done here and not in `_instrumentBreadcrumbs`
+ // so that we don't have more than one wrapper function
+ var before, clickHandler, keypressHandler;
+
+ if (
+ autoBreadcrumbs &&
+ autoBreadcrumbs.dom &&
+ (global === 'EventTarget' || global === 'Node')
+ ) {
+ // NOTE: generating multiple handlers per addEventListener invocation, should
+ // revisit and verify we can just use one (almost certainly)
+ clickHandler = self._breadcrumbEventHandler('click');
+ keypressHandler = self._keypressEventHandler();
+ before = function(evt) {
+ // need to intercept every DOM event in `before` argument, in case that
+ // same wrapped method is re-used for different events (e.g. mousemove THEN click)
+ // see #724
+ if (!evt) return;
+
+ var eventType;
+ try {
+ eventType = evt.type;
+ } catch (e) {
+ // just accessing event properties can throw an exception in some rare circumstances
+ // see: https://github.com/getsentry/raven-js/issues/838
+ return;
+ }
+ if (eventType === 'click') return clickHandler(evt);
+ else if (eventType === 'keypress') return keypressHandler(evt);
+ };
+ }
+ return orig.call(
+ this,
+ evtName,
+ self.wrap(fn, undefined, before),
+ capture,
+ secure
+ );
+ };
+ },
+ wrappedBuiltIns
+ );
+ fill(
+ proto,
+ 'removeEventListener',
+ function(orig) {
+ return function(evt, fn, capture, secure) {
+ try {
+ fn = fn && (fn.__raven_wrapper__ ? fn.__raven_wrapper__ : fn);
+ } catch (e) {
+ // ignore, accessing __raven_wrapper__ will throw in some Selenium environments
+ }
+ return orig.call(this, evt, fn, capture, secure);
+ };
+ },
+ wrappedBuiltIns
+ );
+ }
+ }
+
+ fill(_window, 'setTimeout', wrapTimeFn, wrappedBuiltIns);
+ fill(_window, 'setInterval', wrapTimeFn, wrappedBuiltIns);
+ if (_window.requestAnimationFrame) {
+ fill(
+ _window,
+ 'requestAnimationFrame',
+ function(orig) {
+ return function(cb) {
+ return orig(self.wrap(cb));
+ };
+ },
+ wrappedBuiltIns
+ );
+ }
+
+ // event targets borrowed from bugsnag-js:
+ // https://github.com/bugsnag/bugsnag-js/blob/master/src/bugsnag.js#L666
+ var eventTargets = [
+ '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'
+ ];
+ for (var i = 0; i < eventTargets.length; i++) {
+ wrapEventTarget(eventTargets[i]);
+ }
+ },
+
+ /**
+ * Instrument browser built-ins w/ breadcrumb capturing
+ * - XMLHttpRequests
+ * - DOM interactions (click/typing)
+ * - window.location changes
+ * - console
+ *
+ * Can be disabled or individually configured via the `autoBreadcrumbs` config option
+ */
+ _instrumentBreadcrumbs: function() {
+ var self = this;
+ var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;
+
+ var wrappedBuiltIns = self._wrappedBuiltIns;
+
+ function wrapProp(prop, xhr) {
+ if (prop in xhr && isFunction(xhr[prop])) {
+ fill(xhr, prop, function(orig) {
+ return self.wrap(orig);
+ }); // intentionally don't track filled methods on XHR instances
+ }
+ }
+
+ if (autoBreadcrumbs.xhr && 'XMLHttpRequest' in _window) {
+ var xhrproto = _window.XMLHttpRequest && _window.XMLHttpRequest.prototype;
+ fill(
+ xhrproto,
+ 'open',
+ function(origOpen) {
+ return function(method, url) {
+ // preserve arity
+
+ // if Sentry key appears in URL, don't capture
+ if (isString(url) && url.indexOf(self._globalKey) === -1) {
+ this.__raven_xhr = {
+ method: method,
+ url: url,
+ status_code: null
+ };
+ }
+
+ return origOpen.apply(this, arguments);
+ };
+ },
+ wrappedBuiltIns
+ );
+
+ fill(
+ xhrproto,
+ 'send',
+ function(origSend) {
+ return function() {
+ // preserve arity
+ var xhr = this;
+
+ function onreadystatechangeHandler() {
+ if (xhr.__raven_xhr && xhr.readyState === 4) {
+ try {
+ // touching statusCode in some platforms throws
+ // an exception
+ xhr.__raven_xhr.status_code = xhr.status;
+ } catch (e) {
+ /* do nothing */
+ }
+
+ self.captureBreadcrumb({
+ type: 'http',
+ category: 'xhr',
+ data: xhr.__raven_xhr
+ });
+ }
+ }
+
+ var props = ['onload', 'onerror', 'onprogress'];
+ for (var j = 0; j < props.length; j++) {
+ wrapProp(props[j], xhr);
+ }
+
+ if ('onreadystatechange' in xhr && isFunction(xhr.onreadystatechange)) {
+ fill(
+ xhr,
+ 'onreadystatechange',
+ function(orig) {
+ return self.wrap(orig, undefined, onreadystatechangeHandler);
+ } /* intentionally don't track this instrumentation */
+ );
+ } else {
+ // if onreadystatechange wasn't actually set by the page on this xhr, we
+ // are free to set our own and capture the breadcrumb
+ xhr.onreadystatechange = onreadystatechangeHandler;
+ }
+
+ return origSend.apply(this, arguments);
+ };
+ },
+ wrappedBuiltIns
+ );
+ }
+
+ if (autoBreadcrumbs.xhr && supportsFetch()) {
+ fill(
+ _window,
+ 'fetch',
+ function(origFetch) {
+ return function() {
+ // preserve arity
+ // Make a copy of the arguments to prevent deoptimization
+ // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments
+ var args = new Array(arguments.length);
+ for (var i = 0; i < args.length; ++i) {
+ args[i] = arguments[i];
+ }
+
+ var fetchInput = args[0];
+ var method = 'GET';
+ var url;
+
+ if (typeof fetchInput === 'string') {
+ url = fetchInput;
+ } else if ('Request' in _window && fetchInput instanceof _window.Request) {
+ url = fetchInput.url;
+ if (fetchInput.method) {
+ method = fetchInput.method;
+ }
+ } else {
+ url = '' + fetchInput;
+ }
+
+ // if Sentry key appears in URL, don't capture, as it's our own request
+ if (url.indexOf(self._globalKey) !== -1) {
+ return origFetch.apply(this, args);
+ }
+
+ if (args[1] && args[1].method) {
+ method = args[1].method;
+ }
+
+ var fetchData = {
+ method: method,
+ url: url,
+ status_code: null
+ };
+
+ return origFetch
+ .apply(this, args)
+ .then(function(response) {
+ fetchData.status_code = response.status;
+
+ self.captureBreadcrumb({
+ type: 'http',
+ category: 'fetch',
+ data: fetchData
+ });
+
+ return response;
+ })
+ ['catch'](function(err) {
+ // if there is an error performing the request
+ self.captureBreadcrumb({
+ type: 'http',
+ category: 'fetch',
+ data: fetchData,
+ level: 'error'
+ });
+
+ throw err;
+ });
+ };
+ },
+ wrappedBuiltIns
+ );
+ }
+
+ // Capture breadcrumbs from any click that is unhandled / bubbled up all the way
+ // to the document. Do this before we instrument addEventListener.
+ if (autoBreadcrumbs.dom && this._hasDocument) {
+ if (_document.addEventListener) {
+ _document.addEventListener('click', self._breadcrumbEventHandler('click'), false);
+ _document.addEventListener('keypress', self._keypressEventHandler(), false);
+ } else if (_document.attachEvent) {
+ // IE8 Compatibility
+ _document.attachEvent('onclick', self._breadcrumbEventHandler('click'));
+ _document.attachEvent('onkeypress', self._keypressEventHandler());
+ }
+ }
+
+ // record navigation (URL) changes
+ // NOTE: in Chrome App environment, touching history.pushState, *even inside
+ // a try/catch block*, will cause Chrome to output an error to console.error
+ // borrowed from: https://github.com/angular/angular.js/pull/13945/files
+ var chrome = _window.chrome;
+ var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime;
+ var hasPushAndReplaceState =
+ !isChromePackagedApp &&
+ _window.history &&
+ _window.history.pushState &&
+ _window.history.replaceState;
+ if (autoBreadcrumbs.location && hasPushAndReplaceState) {
+ // TODO: remove onpopstate handler on uninstall()
+ var oldOnPopState = _window.onpopstate;
+ _window.onpopstate = function() {
+ var currentHref = self._location.href;
+ self._captureUrlChange(self._lastHref, currentHref);
+
+ if (oldOnPopState) {
+ return oldOnPopState.apply(this, arguments);
+ }
+ };
+
+ var historyReplacementFunction = function(origHistFunction) {
+ // note history.pushState.length is 0; intentionally not declaring
+ // params to preserve 0 arity
+ return function(/* state, title, url */) {
+ var url = arguments.length > 2 ? arguments[2] : undefined;
+
+ // url argument is optional
+ if (url) {
+ // coerce to string (this is what pushState does)
+ self._captureUrlChange(self._lastHref, url + '');
+ }
+
+ return origHistFunction.apply(this, arguments);
+ };
+ };
+
+ fill(_window.history, 'pushState', historyReplacementFunction, wrappedBuiltIns);
+ fill(_window.history, 'replaceState', historyReplacementFunction, wrappedBuiltIns);
+ }
+
+ if (autoBreadcrumbs.console && 'console' in _window && console.log) {
+ // console
+ var consoleMethodCallback = function(msg, data) {
+ self.captureBreadcrumb({
+ message: msg,
+ level: data.level,
+ category: 'console'
+ });
+ };
+
+ each(['debug', 'info', 'warn', 'error', 'log'], function(_, level) {
+ wrapConsoleMethod(console, level, consoleMethodCallback);
+ });
+ }
+ },
+
+ _restoreBuiltIns: function() {
+ // restore any wrapped builtins
+ var builtin;
+ while (this._wrappedBuiltIns.length) {
+ builtin = this._wrappedBuiltIns.shift();
+
+ var obj = builtin[0],
+ name = builtin[1],
+ orig = builtin[2];
+
+ obj[name] = orig;
+ }
+ },
+
+ _restoreConsole: function() {
+ // eslint-disable-next-line guard-for-in
+ for (var method in this._originalConsoleMethods) {
+ this._originalConsole[method] = this._originalConsoleMethods[method];
+ }
+ },
+
+ _drainPlugins: function() {
+ var self = this;
+
+ // FIX ME TODO
+ each(this._plugins, function(_, plugin) {
+ var installer = plugin[0];
+ var args = plugin[1];
+ installer.apply(self, [self].concat(args));
+ });
+ },
+
+ _parseDSN: function(str) {
+ var m = dsnPattern.exec(str),
+ dsn = {},
+ i = 7;
+
+ try {
+ while (i--) dsn[dsnKeys[i]] = m[i] || '';
+ } catch (e) {
+ throw new RavenConfigError('Invalid DSN: ' + str);
+ }
+
+ if (dsn.pass && !this._globalOptions.allowSecretKey) {
+ throw new RavenConfigError(
+ 'Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key'
+ );
+ }
+
+ return dsn;
+ },
+
+ _getGlobalServer: function(uri) {
+ // assemble the endpoint from the uri pieces
+ var globalServer = '//' + uri.host + (uri.port ? ':' + uri.port : '');
+
+ if (uri.protocol) {
+ globalServer = uri.protocol + ':' + globalServer;
+ }
+ return globalServer;
+ },
+
+ _handleOnErrorStackInfo: function() {
+ // if we are intentionally ignoring errors via onerror, bail out
+ if (!this._ignoreOnError) {
+ this._handleStackInfo.apply(this, arguments);
+ }
+ },
+
+ _handleStackInfo: function(stackInfo, options) {
+ var frames = this._prepareFrames(stackInfo, options);
+
+ this._triggerEvent('handle', {
+ stackInfo: stackInfo,
+ options: options
+ });
+
+ this._processException(
+ stackInfo.name,
+ stackInfo.message,
+ stackInfo.url,
+ stackInfo.lineno,
+ frames,
+ options
+ );
+ },
+
+ _prepareFrames: function(stackInfo, options) {
+ var self = this;
+ var frames = [];
+ if (stackInfo.stack && stackInfo.stack.length) {
+ each(stackInfo.stack, function(i, stack) {
+ var frame = self._normalizeFrame(stack, stackInfo.url);
+ if (frame) {
+ frames.push(frame);
+ }
+ });
+
+ // e.g. frames captured via captureMessage throw
+ if (options && options.trimHeadFrames) {
+ for (var j = 0; j < options.trimHeadFrames && j < frames.length; j++) {
+ frames[j].in_app = false;
+ }
+ }
+ }
+ frames = frames.slice(0, this._globalOptions.stackTraceLimit);
+ return frames;
+ },
+
+ _normalizeFrame: function(frame, stackInfoUrl) {
+ // normalize the frames data
+ var normalized = {
+ filename: frame.url,
+ lineno: frame.line,
+ colno: frame.column,
+ function: frame.func || '?'
+ };
+
+ // Case when we don't have any information about the error
+ // E.g. throwing a string or raw object, instead of an `Error` in Firefox
+ // Generating synthetic error doesn't add any value here
+ //
+ // We should probably somehow let a user know that they should fix their code
+ if (!frame.url) {
+ normalized.filename = stackInfoUrl; // fallback to whole stacks url from onerror handler
+ }
+
+ normalized.in_app = !// determine if an exception came from outside of our app
+ // first we check the global includePaths list.
+ (
+ (!!this._globalOptions.includePaths.test &&
+ !this._globalOptions.includePaths.test(normalized.filename)) ||
+ // Now we check for fun, if the function name is Raven or TraceKit
+ /(Raven|TraceKit)\./.test(normalized['function']) ||
+ // finally, we do a last ditch effort and check for raven.min.js
+ /raven\.(min\.)?js$/.test(normalized.filename)
+ );
+
+ return normalized;
+ },
+
+ _processException: function(type, message, fileurl, lineno, frames, options) {
+ var prefixedMessage = (type ? type + ': ' : '') + (message || '');
+ if (
+ !!this._globalOptions.ignoreErrors.test &&
+ (this._globalOptions.ignoreErrors.test(message) ||
+ this._globalOptions.ignoreErrors.test(prefixedMessage))
+ ) {
+ return;
+ }
+
+ var stacktrace;
+
+ if (frames && frames.length) {
+ fileurl = frames[0].filename || fileurl;
+ // Sentry expects frames oldest to newest
+ // and JS sends them as newest to oldest
+ frames.reverse();
+ stacktrace = {frames: frames};
+ } else if (fileurl) {
+ stacktrace = {
+ frames: [
+ {
+ filename: fileurl,
+ lineno: lineno,
+ in_app: true
+ }
+ ]
+ };
+ }
+
+ if (
+ !!this._globalOptions.ignoreUrls.test &&
+ this._globalOptions.ignoreUrls.test(fileurl)
+ ) {
+ return;
+ }
+
+ if (
+ !!this._globalOptions.whitelistUrls.test &&
+ !this._globalOptions.whitelistUrls.test(fileurl)
+ ) {
+ return;
+ }
+
+ var data = objectMerge(
+ {
+ // sentry.interfaces.Exception
+ exception: {
+ values: [
+ {
+ type: type,
+ value: message,
+ stacktrace: stacktrace
+ }
+ ]
+ },
+ transaction: fileurl
+ },
+ options
+ );
+
+ // Fire away!
+ this._send(data);
+ },
+
+ _trimPacket: function(data) {
+ // For now, we only want to truncate the two different messages
+ // but this could/should be expanded to just trim everything
+ var max = this._globalOptions.maxMessageLength;
+ if (data.message) {
+ data.message = truncate(data.message, max);
+ }
+ if (data.exception) {
+ var exception = data.exception.values[0];
+ exception.value = truncate(exception.value, max);
+ }
+
+ var request = data.request;
+ if (request) {
+ if (request.url) {
+ request.url = truncate(request.url, this._globalOptions.maxUrlLength);
+ }
+ if (request.Referer) {
+ request.Referer = truncate(request.Referer, this._globalOptions.maxUrlLength);
+ }
+ }
+
+ if (data.breadcrumbs && data.breadcrumbs.values)
+ this._trimBreadcrumbs(data.breadcrumbs);
+
+ return data;
+ },
+
+ /**
+ * Truncate breadcrumb values (right now just URLs)
+ */
+ _trimBreadcrumbs: function(breadcrumbs) {
+ // known breadcrumb properties with urls
+ // TODO: also consider arbitrary prop values that start with (https?)?://
+ var urlProps = ['to', 'from', 'url'],
+ urlProp,
+ crumb,
+ data;
+
+ for (var i = 0; i < breadcrumbs.values.length; ++i) {
+ crumb = breadcrumbs.values[i];
+ if (
+ !crumb.hasOwnProperty('data') ||
+ !isObject(crumb.data) ||
+ objectFrozen(crumb.data)
+ )
+ continue;
+
+ data = objectMerge({}, crumb.data);
+ for (var j = 0; j < urlProps.length; ++j) {
+ urlProp = urlProps[j];
+ if (data.hasOwnProperty(urlProp) && data[urlProp]) {
+ data[urlProp] = truncate(data[urlProp], this._globalOptions.maxUrlLength);
+ }
+ }
+ breadcrumbs.values[i].data = data;
+ }
+ },
+
+ _getHttpData: function() {
+ if (!this._hasNavigator && !this._hasDocument) return;
+ var httpData = {};
+
+ if (this._hasNavigator && _navigator.userAgent) {
+ httpData.headers = {
+ 'User-Agent': _navigator.userAgent
+ };
+ }
+
+ // Check in `window` instead of `document`, as we may be in ServiceWorker environment
+ if (_window.location && _window.location.href) {
+ httpData.url = _window.location.href;
+ }
+
+ if (this._hasDocument && _document.referrer) {
+ if (!httpData.headers) httpData.headers = {};
+ httpData.headers.Referer = _document.referrer;
+ }
+
+ return httpData;
+ },
+
+ _resetBackoff: function() {
+ this._backoffDuration = 0;
+ this._backoffStart = null;
+ },
+
+ _shouldBackoff: function() {
+ return this._backoffDuration && now() - this._backoffStart < this._backoffDuration;
+ },
+
+ /**
+ * Returns true if the in-process data payload matches the signature
+ * of the previously-sent data
+ *
+ * NOTE: This has to be done at this level because TraceKit can generate
+ * data from window.onerror WITHOUT an exception object (IE8, IE9,
+ * other old browsers). This can take the form of an "exception"
+ * data object with a single frame (derived from the onerror args).
+ */
+ _isRepeatData: function(current) {
+ var last = this._lastData;
+
+ if (
+ !last ||
+ current.message !== last.message || // defined for captureMessage
+ current.transaction !== last.transaction // defined for captureException/onerror
+ )
+ return false;
+
+ // Stacktrace interface (i.e. from captureMessage)
+ if (current.stacktrace || last.stacktrace) {
+ return isSameStacktrace(current.stacktrace, last.stacktrace);
+ } else if (current.exception || last.exception) {
+ // Exception interface (i.e. from captureException/onerror)
+ return isSameException(current.exception, last.exception);
+ }
+
+ return true;
+ },
+
+ _setBackoffState: function(request) {
+ // If we are already in a backoff state, don't change anything
+ if (this._shouldBackoff()) {
+ return;
+ }
+
+ var status = request.status;
+
+ // 400 - project_id doesn't exist or some other fatal
+ // 401 - invalid/revoked dsn
+ // 429 - too many requests
+ if (!(status === 400 || status === 401 || status === 429)) return;
+
+ var retry;
+ try {
+ // If Retry-After is not in Access-Control-Expose-Headers, most
+ // browsers will throw an exception trying to access it
+ if (supportsFetch()) {
+ retry = request.headers.get('Retry-After');
+ } else {
+ retry = request.getResponseHeader('Retry-After');
+ }
+
+ // Retry-After is returned in seconds
+ retry = parseInt(retry, 10) * 1000;
+ } catch (e) {
+ /* eslint no-empty:0 */
+ }
+
+ this._backoffDuration = retry
+ ? // If Sentry server returned a Retry-After value, use it
+ retry
+ : // Otherwise, double the last backoff duration (starts at 1 sec)
+ this._backoffDuration * 2 || 1000;
+
+ this._backoffStart = now();
+ },
+
+ _send: function(data) {
+ var globalOptions = this._globalOptions;
+
+ var baseData = {
+ project: this._globalProject,
+ logger: globalOptions.logger,
+ platform: 'javascript'
+ },
+ httpData = this._getHttpData();
+
+ if (httpData) {
+ baseData.request = httpData;
+ }
+
+ // HACK: delete `trimHeadFrames` to prevent from appearing in outbound payload
+ if (data.trimHeadFrames) delete data.trimHeadFrames;
+
+ data = objectMerge(baseData, data);
+
+ // Merge in the tags and extra separately since objectMerge doesn't handle a deep merge
+ data.tags = objectMerge(objectMerge({}, this._globalContext.tags), data.tags);
+ data.extra = objectMerge(objectMerge({}, this._globalContext.extra), data.extra);
+
+ // Send along our own collected metadata with extra
+ data.extra['session:duration'] = now() - this._startTime;
+
+ if (this._breadcrumbs && this._breadcrumbs.length > 0) {
+ // intentionally make shallow copy so that additions
+ // to breadcrumbs aren't accidentally sent in this request
+ data.breadcrumbs = {
+ values: [].slice.call(this._breadcrumbs, 0)
+ };
+ }
+
+ if (this._globalContext.user) {
+ // sentry.interfaces.User
+ data.user = this._globalContext.user;
+ }
+
+ // Include the environment if it's defined in globalOptions
+ if (globalOptions.environment) data.environment = globalOptions.environment;
+
+ // Include the release if it's defined in globalOptions
+ if (globalOptions.release) data.release = globalOptions.release;
+
+ // Include server_name if it's defined in globalOptions
+ if (globalOptions.serverName) data.server_name = globalOptions.serverName;
+
+ data = this._sanitizeData(data);
+
+ // Cleanup empty properties before sending them to the server
+ Object.keys(data).forEach(function(key) {
+ if (data[key] == null || data[key] === '' || isEmptyObject(data[key])) {
+ delete data[key];
+ }
+ });
+
+ if (isFunction(globalOptions.dataCallback)) {
+ data = globalOptions.dataCallback(data) || data;
+ }
+
+ // Why??????????
+ if (!data || isEmptyObject(data)) {
+ return;
+ }
+
+ // Check if the request should be filtered or not
+ if (
+ isFunction(globalOptions.shouldSendCallback) &&
+ !globalOptions.shouldSendCallback(data)
+ ) {
+ return;
+ }
+
+ // Backoff state: Sentry server previously responded w/ an error (e.g. 429 - too many requests),
+ // so drop requests until "cool-off" period has elapsed.
+ if (this._shouldBackoff()) {
+ this._logDebug('warn', 'Raven dropped error due to backoff: ', data);
+ return;
+ }
+
+ if (typeof globalOptions.sampleRate === 'number') {
+ if (Math.random() < globalOptions.sampleRate) {
+ this._sendProcessedPayload(data);
+ }
+ } else {
+ this._sendProcessedPayload(data);
+ }
+ },
+
+ _sanitizeData: function(data) {
+ return sanitize(data, this._globalOptions.sanitizeKeys);
+ },
+
+ _getUuid: function() {
+ return uuid4();
+ },
+
+ _sendProcessedPayload: function(data, callback) {
+ var self = this;
+ var globalOptions = this._globalOptions;
+
+ if (!this.isSetup()) return;
+
+ // Try and clean up the packet before sending by truncating long values
+ data = this._trimPacket(data);
+
+ // ideally duplicate error testing should occur *before* dataCallback/shouldSendCallback,
+ // but this would require copying an un-truncated copy of the data packet, which can be
+ // arbitrarily deep (extra_data) -- could be worthwhile? will revisit
+ if (!this._globalOptions.allowDuplicates && this._isRepeatData(data)) {
+ this._logDebug('warn', 'Raven dropped repeat event: ', data);
+ return;
+ }
+
+ // Send along an event_id if not explicitly passed.
+ // This event_id can be used to reference the error within Sentry itself.
+ // Set lastEventId after we know the error should actually be sent
+ this._lastEventId = data.event_id || (data.event_id = this._getUuid());
+
+ // Store outbound payload after trim
+ this._lastData = data;
+
+ this._logDebug('debug', 'Raven about to send:', data);
+
+ var auth = {
+ sentry_version: '7',
+ sentry_client: 'raven-js/' + this.VERSION,
+ sentry_key: this._globalKey
+ };
+
+ if (this._globalSecret) {
+ auth.sentry_secret = this._globalSecret;
+ }
+
+ var exception = data.exception && data.exception.values[0];
+
+ // only capture 'sentry' breadcrumb is autoBreadcrumbs is truthy
+ if (
+ this._globalOptions.autoBreadcrumbs &&
+ this._globalOptions.autoBreadcrumbs.sentry
+ ) {
+ this.captureBreadcrumb({
+ category: 'sentry',
+ message: exception
+ ? (exception.type ? exception.type + ': ' : '') + exception.value
+ : data.message,
+ event_id: data.event_id,
+ level: data.level || 'error' // presume error unless specified
+ });
+ }
+
+ var url = this._globalEndpoint;
+ (globalOptions.transport || this._makeRequest).call(this, {
+ url: url,
+ auth: auth,
+ data: data,
+ options: globalOptions,
+ onSuccess: function success() {
+ self._resetBackoff();
+
+ self._triggerEvent('success', {
+ data: data,
+ src: url
+ });
+ callback && callback();
+ },
+ onError: function failure(error) {
+ self._logDebug('error', 'Raven transport failed to send: ', error);
+
+ if (error.request) {
+ self._setBackoffState(error.request);
+ }
+
+ self._triggerEvent('failure', {
+ data: data,
+ src: url
+ });
+ error = error || new Error('Raven send failed (no additional details provided)');
+ callback && callback(error);
+ }
+ });
+ },
+
+ _makeRequest: function(opts) {
+ // Auth is intentionally sent as part of query string (NOT as custom HTTP header) to avoid preflight CORS requests
+ var url = opts.url + '?' + urlencode(opts.auth);
+
+ var evaluatedHeaders = null;
+ var evaluatedFetchParameters = {};
+
+ if (opts.options.headers) {
+ evaluatedHeaders = this._evaluateHash(opts.options.headers);
+ }
+
+ if (opts.options.fetchParameters) {
+ evaluatedFetchParameters = this._evaluateHash(opts.options.fetchParameters);
+ }
+
+ if (supportsFetch()) {
+ evaluatedFetchParameters.body = stringify(opts.data);
+
+ var defaultFetchOptions = objectMerge({}, this._fetchDefaults);
+ var fetchOptions = objectMerge(defaultFetchOptions, evaluatedFetchParameters);
+
+ if (evaluatedHeaders) {
+ fetchOptions.headers = evaluatedHeaders;
+ }
+
+ return _window
+ .fetch(url, fetchOptions)
+ .then(function(response) {
+ if (response.ok) {
+ opts.onSuccess && opts.onSuccess();
+ } else {
+ var error = new Error('Sentry error code: ' + response.status);
+ // It's called request only to keep compatibility with XHR interface
+ // and not add more redundant checks in setBackoffState method
+ error.request = response;
+ opts.onError && opts.onError(error);
+ }
+ })
+ ['catch'](function() {
+ opts.onError &&
+ opts.onError(new Error('Sentry error code: network unavailable'));
+ });
+ }
+
+ var request = _window.XMLHttpRequest && new _window.XMLHttpRequest();
+ if (!request) return;
+
+ // if browser doesn't support CORS (e.g. IE7), we are out of luck
+ var hasCORS = 'withCredentials' in request || typeof XDomainRequest !== 'undefined';
+
+ if (!hasCORS) return;
+
+ if ('withCredentials' in request) {
+ request.onreadystatechange = function() {
+ if (request.readyState !== 4) {
+ return;
+ } else if (request.status === 200) {
+ opts.onSuccess && opts.onSuccess();
+ } else if (opts.onError) {
+ var err = new Error('Sentry error code: ' + request.status);
+ err.request = request;
+ opts.onError(err);
+ }
+ };
+ } else {
+ request = new XDomainRequest();
+ // xdomainrequest cannot go http -> https (or vice versa),
+ // so always use protocol relative
+ url = url.replace(/^https?:/, '');
+
+ // onreadystatechange not supported by XDomainRequest
+ if (opts.onSuccess) {
+ request.onload = opts.onSuccess;
+ }
+ if (opts.onError) {
+ request.onerror = function() {
+ var err = new Error('Sentry error code: XDomainRequest');
+ err.request = request;
+ opts.onError(err);
+ };
+ }
+ }
+
+ request.open('POST', url);
+
+ if (evaluatedHeaders) {
+ each(evaluatedHeaders, function(key, value) {
+ request.setRequestHeader(key, value);
+ });
+ }
+
+ request.send(stringify(opts.data));
+ },
+
+ _evaluateHash: function(hash) {
+ var evaluated = {};
+
+ for (var key in hash) {
+ if (hash.hasOwnProperty(key)) {
+ var value = hash[key];
+ evaluated[key] = typeof value === 'function' ? value() : value;
+ }
+ }
+
+ return evaluated;
+ },
+
+ _logDebug: function(level) {
+ // We allow `Raven.debug` and `Raven.config(DSN, { debug: true })` to not make backward incompatible API change
+ if (
+ this._originalConsoleMethods[level] &&
+ (this.debug || this._globalOptions.debug)
+ ) {
+ // In IE<10 console methods do not have their own 'apply' method
+ Function.prototype.apply.call(
+ this._originalConsoleMethods[level],
+ this._originalConsole,
+ [].slice.call(arguments, 1)
+ );
+ }
+ },
+
+ _mergeContext: function(key, context) {
+ if (isUndefined(context)) {
+ delete this._globalContext[key];
+ } else {
+ this._globalContext[key] = objectMerge(this._globalContext[key] || {}, context);
+ }
+ }
+};
+
+// Deprecations
+Raven.prototype.setUser = Raven.prototype.setUserContext;
+Raven.prototype.setReleaseContext = Raven.prototype.setRelease;
+
+module.exports = Raven;
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"10":10,"11":11,"4":4,"5":5,"8":8,"9":9}],7:[function(_dereq_,module,exports){
+(function (global){
+/**
+ * Enforces a single instance of the Raven client, and the
+ * main entry point for Raven. If you are a consumer of the
+ * Raven library, you SHOULD load this file (vs raven.js).
+ **/
+
+var RavenConstructor = _dereq_(6);
+
+// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)
+var _window =
+ typeof window !== 'undefined'
+ ? window
+ : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
+var _Raven = _window.Raven;
+
+var Raven = new RavenConstructor();
+
+/*
+ * Allow multiple versions of Raven to be installed.
+ * Strip Raven from the global context and returns the instance.
+ *
+ * @return {Raven}
+ */
+Raven.noConflict = function() {
+ _window.Raven = _Raven;
+ return Raven;
+};
+
+Raven.afterLoad();
+
+module.exports = Raven;
+
+/**
+ * DISCLAIMER:
+ *
+ * Expose `Client` constructor for cases where user want to track multiple "sub-applications" in one larger app.
+ * It's not meant to be used by a wide audience, so pleaaase make sure that you know what you're doing before using it.
+ * Accidentally calling `install` multiple times, may result in an unexpected behavior that's very hard to debug.
+ *
+ * It's called `Client' to be in-line with Raven Node implementation.
+ *
+ * HOWTO:
+ *
+ * import Raven from 'raven-js';
+ *
+ * const someAppReporter = new Raven.Client();
+ * const someOtherAppReporter = new Raven.Client();
+ *
+ * someAppReporter.config('__DSN__', {
+ * ...config goes here
+ * });
+ *
+ * someOtherAppReporter.config('__OTHER_DSN__', {
+ * ...config goes here
+ * });
+ *
+ * someAppReporter.captureMessage(...);
+ * someAppReporter.captureException(...);
+ * someAppReporter.captureBreadcrumb(...);
+ *
+ * someOtherAppReporter.captureMessage(...);
+ * someOtherAppReporter.captureException(...);
+ * someOtherAppReporter.captureBreadcrumb(...);
+ *
+ * It should "just work".
+ */
+module.exports.Client = RavenConstructor;
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"6":6}],8:[function(_dereq_,module,exports){
+(function (global){
+var stringify = _dereq_(10);
+
+var _window =
+ typeof window !== 'undefined'
+ ? window
+ : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
+
+function isObject(what) {
+ return typeof what === 'object' && what !== null;
+}
+
+// Yanked from https://git.io/vS8DV re-used under CC0
+// with some tiny modifications
+function isError(value) {
+ switch (Object.prototype.toString.call(value)) {
+ case '[object Error]':
+ return true;
+ case '[object Exception]':
+ return true;
+ case '[object DOMException]':
+ return true;
+ default:
+ return value instanceof Error;
+ }
+}
+
+function isErrorEvent(value) {
+ return Object.prototype.toString.call(value) === '[object ErrorEvent]';
+}
+
+function isDOMError(value) {
+ return Object.prototype.toString.call(value) === '[object DOMError]';
+}
+
+function isDOMException(value) {
+ return Object.prototype.toString.call(value) === '[object DOMException]';
+}
+
+function isUndefined(what) {
+ return what === void 0;
+}
+
+function isFunction(what) {
+ return typeof what === 'function';
+}
+
+function isPlainObject(what) {
+ return Object.prototype.toString.call(what) === '[object Object]';
+}
+
+function isString(what) {
+ return Object.prototype.toString.call(what) === '[object String]';
+}
+
+function isArray(what) {
+ return Object.prototype.toString.call(what) === '[object Array]';
+}
+
+function isEmptyObject(what) {
+ if (!isPlainObject(what)) return false;
+
+ for (var _ in what) {
+ if (what.hasOwnProperty(_)) {
+ return false;
+ }
+ }
+ return true;
+}
+
+function supportsErrorEvent() {
+ try {
+ new ErrorEvent(''); // eslint-disable-line no-new
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+function supportsDOMError() {
+ try {
+ new DOMError(''); // eslint-disable-line no-new
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+function supportsDOMException() {
+ try {
+ new DOMException(''); // eslint-disable-line no-new
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+function supportsFetch() {
+ if (!('fetch' in _window)) return false;
+
+ try {
+ new Headers(); // eslint-disable-line no-new
+ new Request(''); // eslint-disable-line no-new
+ new Response(); // eslint-disable-line no-new
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+// Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default
+// https://caniuse.com/#feat=referrer-policy
+// It doesn't. And it throw exception instead of ignoring this parameter...
+// REF: https://github.com/getsentry/raven-js/issues/1233
+function supportsReferrerPolicy() {
+ if (!supportsFetch()) return false;
+
+ try {
+ // eslint-disable-next-line no-new
+ new Request('pickleRick', {
+ referrerPolicy: 'origin'
+ });
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+function supportsPromiseRejectionEvent() {
+ return typeof PromiseRejectionEvent === 'function';
+}
+
+function wrappedCallback(callback) {
+ function dataCallback(data, original) {
+ var normalizedData = callback(data) || data;
+ if (original) {
+ return original(normalizedData) || normalizedData;
+ }
+ return normalizedData;
+ }
+
+ return dataCallback;
+}
+
+function each(obj, callback) {
+ var i, j;
+
+ if (isUndefined(obj.length)) {
+ for (i in obj) {
+ if (hasKey(obj, i)) {
+ callback.call(null, i, obj[i]);
+ }
+ }
+ } else {
+ j = obj.length;
+ if (j) {
+ for (i = 0; i < j; i++) {
+ callback.call(null, i, obj[i]);
+ }
+ }
+ }
+}
+
+function objectMerge(obj1, obj2) {
+ if (!obj2) {
+ return obj1;
+ }
+ each(obj2, function(key, value) {
+ obj1[key] = value;
+ });
+ return obj1;
+}
+
+/**
+ * This function is only used for react-native.
+ * react-native freezes object that have already been sent over the
+ * js bridge. We need this function in order to check if the object is frozen.
+ * So it's ok that objectFrozen returns false if Object.isFrozen is not
+ * supported because it's not relevant for other "platforms". See related issue:
+ * https://github.com/getsentry/react-native-sentry/issues/57
+ */
+function objectFrozen(obj) {
+ if (!Object.isFrozen) {
+ return false;
+ }
+ return Object.isFrozen(obj);
+}
+
+function truncate(str, max) {
+ if (typeof max !== 'number') {
+ throw new Error('2nd argument to `truncate` function should be a number');
+ }
+ if (typeof str !== 'string' || max === 0) {
+ return str;
+ }
+ return str.length <= max ? str : str.substr(0, max) + '\u2026';
+}
+
+/**
+ * hasKey, a better form of hasOwnProperty
+ * Example: hasKey(MainHostObject, property) === true/false
+ *
+ * @param {Object} host object to check property
+ * @param {string} key to check
+ */
+function hasKey(object, key) {
+ return Object.prototype.hasOwnProperty.call(object, key);
+}
+
+function joinRegExp(patterns) {
+ // Combine an array of regular expressions and strings into one large regexp
+ // Be mad.
+ var sources = [],
+ i = 0,
+ len = patterns.length,
+ pattern;
+
+ for (; i < len; i++) {
+ pattern = patterns[i];
+ if (isString(pattern)) {
+ // If it's a string, we need to escape it
+ // Taken from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
+ sources.push(pattern.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, '\\$1'));
+ } else if (pattern && pattern.source) {
+ // If it's a regexp already, we want to extract the source
+ sources.push(pattern.source);
+ }
+ // Intentionally skip other cases
+ }
+ return new RegExp(sources.join('|'), 'i');
+}
+
+function urlencode(o) {
+ var pairs = [];
+ each(o, function(key, value) {
+ pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));
+ });
+ return pairs.join('&');
+}
+
+// borrowed from https://tools.ietf.org/html/rfc3986#appendix-B
+// intentionally using regex and not href parsing trick because React Native and other
+// environments where DOM might not be available
+function parseUrl(url) {
+ if (typeof url !== 'string') return {};
+ var match = url.match(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/);
+
+ // coerce to undefined values to empty string so we don't get 'undefined'
+ var query = match[6] || '';
+ var fragment = match[8] || '';
+ return {
+ protocol: match[2],
+ host: match[4],
+ path: match[5],
+ relative: match[5] + query + fragment // everything minus origin
+ };
+}
+function uuid4() {
+ var crypto = _window.crypto || _window.msCrypto;
+
+ if (!isUndefined(crypto) && crypto.getRandomValues) {
+ // Use window.crypto API if available
+ // eslint-disable-next-line no-undef
+ var arr = new Uint16Array(8);
+ crypto.getRandomValues(arr);
+
+ // set 4 in byte 7
+ arr[3] = (arr[3] & 0xfff) | 0x4000;
+ // set 2 most significant bits of byte 9 to '10'
+ arr[4] = (arr[4] & 0x3fff) | 0x8000;
+
+ var pad = function(num) {
+ var v = num.toString(16);
+ while (v.length < 4) {
+ v = '0' + v;
+ }
+ return v;
+ };
+
+ return (
+ pad(arr[0]) +
+ pad(arr[1]) +
+ pad(arr[2]) +
+ pad(arr[3]) +
+ pad(arr[4]) +
+ pad(arr[5]) +
+ pad(arr[6]) +
+ pad(arr[7])
+ );
+ } else {
+ // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523
+ return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
+ var r = (Math.random() * 16) | 0,
+ v = c === 'x' ? r : (r & 0x3) | 0x8;
+ return v.toString(16);
+ });
+ }
+}
+
+/**
+ * Given a child DOM element, returns a query-selector statement describing that
+ * and its ancestors
+ * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]
+ * @param elem
+ * @returns {string}
+ */
+function htmlTreeAsString(elem) {
+ /* eslint no-extra-parens:0*/
+ var MAX_TRAVERSE_HEIGHT = 5,
+ MAX_OUTPUT_LEN = 80,
+ out = [],
+ height = 0,
+ len = 0,
+ separator = ' > ',
+ sepLength = separator.length,
+ nextStr;
+
+ while (elem && height++ < MAX_TRAVERSE_HEIGHT) {
+ nextStr = htmlElementAsString(elem);
+ // bail out if
+ // - nextStr is the 'html' element
+ // - the length of the string that would be created exceeds MAX_OUTPUT_LEN
+ // (ignore this limit if we are on the first iteration)
+ if (
+ nextStr === 'html' ||
+ (height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN)
+ ) {
+ break;
+ }
+
+ out.push(nextStr);
+
+ len += nextStr.length;
+ elem = elem.parentNode;
+ }
+
+ return out.reverse().join(separator);
+}
+
+/**
+ * Returns a simple, query-selector representation of a DOM element
+ * e.g. [HTMLElement] => input#foo.btn[name=baz]
+ * @param HTMLElement
+ * @returns {string}
+ */
+function htmlElementAsString(elem) {
+ var out = [],
+ className,
+ classes,
+ key,
+ attr,
+ i;
+
+ if (!elem || !elem.tagName) {
+ return '';
+ }
+
+ out.push(elem.tagName.toLowerCase());
+ if (elem.id) {
+ out.push('#' + elem.id);
+ }
+
+ className = elem.className;
+ if (className && isString(className)) {
+ classes = className.split(/\s+/);
+ for (i = 0; i < classes.length; i++) {
+ out.push('.' + classes[i]);
+ }
+ }
+ var attrWhitelist = ['type', 'name', 'title', 'alt'];
+ for (i = 0; i < attrWhitelist.length; i++) {
+ key = attrWhitelist[i];
+ attr = elem.getAttribute(key);
+ if (attr) {
+ out.push('[' + key + '="' + attr + '"]');
+ }
+ }
+ return out.join('');
+}
+
+/**
+ * Returns true if either a OR b is truthy, but not both
+ */
+function isOnlyOneTruthy(a, b) {
+ return !!(!!a ^ !!b);
+}
+
+/**
+ * Returns true if both parameters are undefined
+ */
+function isBothUndefined(a, b) {
+ return isUndefined(a) && isUndefined(b);
+}
+
+/**
+ * Returns true if the two input exception interfaces have the same content
+ */
+function isSameException(ex1, ex2) {
+ if (isOnlyOneTruthy(ex1, ex2)) return false;
+
+ ex1 = ex1.values[0];
+ ex2 = ex2.values[0];
+
+ if (ex1.type !== ex2.type || ex1.value !== ex2.value) return false;
+
+ // in case both stacktraces are undefined, we can't decide so default to false
+ if (isBothUndefined(ex1.stacktrace, ex2.stacktrace)) return false;
+
+ return isSameStacktrace(ex1.stacktrace, ex2.stacktrace);
+}
+
+/**
+ * Returns true if the two input stack trace interfaces have the same content
+ */
+function isSameStacktrace(stack1, stack2) {
+ if (isOnlyOneTruthy(stack1, stack2)) return false;
+
+ var frames1 = stack1.frames;
+ var frames2 = stack2.frames;
+
+ // Exit early if frame count differs
+ if (frames1.length !== frames2.length) return false;
+
+ // Iterate through every frame; bail out if anything differs
+ var a, b;
+ for (var i = 0; i < frames1.length; i++) {
+ a = frames1[i];
+ b = frames2[i];
+ if (
+ a.filename !== b.filename ||
+ a.lineno !== b.lineno ||
+ a.colno !== b.colno ||
+ a['function'] !== b['function']
+ )
+ return false;
+ }
+ return true;
+}
+
+/**
+ * Polyfill a method
+ * @param obj object e.g. `document`
+ * @param name method name present on object e.g. `addEventListener`
+ * @param replacement replacement function
+ * @param track {optional} record instrumentation to an array
+ */
+function fill(obj, name, replacement, track) {
+ if (obj == null) return;
+ var orig = obj[name];
+ obj[name] = replacement(orig);
+ obj[name].__raven__ = true;
+ obj[name].__orig__ = orig;
+ if (track) {
+ track.push([obj, name, orig]);
+ }
+}
+
+/**
+ * Join values in array
+ * @param input array of values to be joined together
+ * @param delimiter string to be placed in-between values
+ * @returns {string}
+ */
+function safeJoin(input, delimiter) {
+ if (!isArray(input)) return '';
+
+ var output = [];
+
+ for (var i = 0; i < input.length; i++) {
+ try {
+ output.push(String(input[i]));
+ } catch (e) {
+ output.push('[value cannot be serialized]');
+ }
+ }
+
+ return output.join(delimiter);
+}
+
+// Default Node.js REPL depth
+var MAX_SERIALIZE_EXCEPTION_DEPTH = 3;
+// 50kB, as 100kB is max payload size, so half sounds reasonable
+var MAX_SERIALIZE_EXCEPTION_SIZE = 50 * 1024;
+var MAX_SERIALIZE_KEYS_LENGTH = 40;
+
+function utf8Length(value) {
+ return ~-encodeURI(value).split(/%..|./).length;
+}
+
+function jsonSize(value) {
+ return utf8Length(JSON.stringify(value));
+}
+
+function serializeValue(value) {
+ if (typeof value === 'string') {
+ var maxLength = 40;
+ return truncate(value, maxLength);
+ } else if (
+ typeof value === 'number' ||
+ typeof value === 'boolean' ||
+ typeof value === 'undefined'
+ ) {
+ return value;
+ }
+
+ var type = Object.prototype.toString.call(value);
+
+ // Node.js REPL notation
+ if (type === '[object Object]') return '[Object]';
+ if (type === '[object Array]') return '[Array]';
+ if (type === '[object Function]')
+ return value.name ? '[Function: ' + value.name + ']' : '[Function]';
+
+ return value;
+}
+
+function serializeObject(value, depth) {
+ if (depth === 0) return serializeValue(value);
+
+ if (isPlainObject(value)) {
+ return Object.keys(value).reduce(function(acc, key) {
+ acc[key] = serializeObject(value[key], depth - 1);
+ return acc;
+ }, {});
+ } else if (Array.isArray(value)) {
+ return value.map(function(val) {
+ return serializeObject(val, depth - 1);
+ });
+ }
+
+ return serializeValue(value);
+}
+
+function serializeException(ex, depth, maxSize) {
+ if (!isPlainObject(ex)) return ex;
+
+ depth = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_DEPTH : depth;
+ maxSize = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_SIZE : maxSize;
+
+ var serialized = serializeObject(ex, depth);
+
+ if (jsonSize(stringify(serialized)) > maxSize) {
+ return serializeException(ex, depth - 1);
+ }
+
+ return serialized;
+}
+
+function serializeKeysForMessage(keys, maxLength) {
+ if (typeof keys === 'number' || typeof keys === 'string') return keys.toString();
+ if (!Array.isArray(keys)) return '';
+
+ keys = keys.filter(function(key) {
+ return typeof key === 'string';
+ });
+ if (keys.length === 0) return '[object has no keys]';
+
+ maxLength = typeof maxLength !== 'number' ? MAX_SERIALIZE_KEYS_LENGTH : maxLength;
+ if (keys[0].length >= maxLength) return keys[0];
+
+ for (var usedKeys = keys.length; usedKeys > 0; usedKeys--) {
+ var serialized = keys.slice(0, usedKeys).join(', ');
+ if (serialized.length > maxLength) continue;
+ if (usedKeys === keys.length) return serialized;
+ return serialized + '\u2026';
+ }
+
+ return '';
+}
+
+function sanitize(input, sanitizeKeys) {
+ if (!isArray(sanitizeKeys) || (isArray(sanitizeKeys) && sanitizeKeys.length === 0))
+ return input;
+
+ var sanitizeRegExp = joinRegExp(sanitizeKeys);
+ var sanitizeMask = '********';
+ var safeInput;
+
+ try {
+ safeInput = JSON.parse(stringify(input));
+ } catch (o_O) {
+ return input;
+ }
+
+ function sanitizeWorker(workerInput) {
+ if (isArray(workerInput)) {
+ return workerInput.map(function(val) {
+ return sanitizeWorker(val);
+ });
+ }
+
+ if (isPlainObject(workerInput)) {
+ return Object.keys(workerInput).reduce(function(acc, k) {
+ if (sanitizeRegExp.test(k)) {
+ acc[k] = sanitizeMask;
+ } else {
+ acc[k] = sanitizeWorker(workerInput[k]);
+ }
+ return acc;
+ }, {});
+ }
+
+ return workerInput;
+ }
+
+ return sanitizeWorker(safeInput);
+}
+
+module.exports = {
+ isObject: isObject,
+ isError: isError,
+ isErrorEvent: isErrorEvent,
+ isDOMError: isDOMError,
+ isDOMException: isDOMException,
+ isUndefined: isUndefined,
+ isFunction: isFunction,
+ isPlainObject: isPlainObject,
+ isString: isString,
+ isArray: isArray,
+ isEmptyObject: isEmptyObject,
+ supportsErrorEvent: supportsErrorEvent,
+ supportsDOMError: supportsDOMError,
+ supportsDOMException: supportsDOMException,
+ supportsFetch: supportsFetch,
+ supportsReferrerPolicy: supportsReferrerPolicy,
+ supportsPromiseRejectionEvent: supportsPromiseRejectionEvent,
+ wrappedCallback: wrappedCallback,
+ each: each,
+ objectMerge: objectMerge,
+ truncate: truncate,
+ objectFrozen: objectFrozen,
+ hasKey: hasKey,
+ joinRegExp: joinRegExp,
+ urlencode: urlencode,
+ uuid4: uuid4,
+ htmlTreeAsString: htmlTreeAsString,
+ htmlElementAsString: htmlElementAsString,
+ isSameException: isSameException,
+ isSameStacktrace: isSameStacktrace,
+ parseUrl: parseUrl,
+ fill: fill,
+ safeJoin: safeJoin,
+ serializeException: serializeException,
+ serializeKeysForMessage: serializeKeysForMessage,
+ sanitize: sanitize
+};
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"10":10}],9:[function(_dereq_,module,exports){
+(function (global){
+var utils = _dereq_(8);
+
+/*
+ TraceKit - Cross brower stack traces
+
+ This was originally forked from github.com/occ/TraceKit, but has since been
+ largely re-written and is now maintained as part of raven-js. Tests for
+ this are in test/vendor.
+
+ MIT license
+*/
+
+var TraceKit = {
+ collectWindowErrors: true,
+ debug: false
+};
+
+// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)
+var _window =
+ typeof window !== 'undefined'
+ ? window
+ : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
+
+// global reference to slice
+var _slice = [].slice;
+var UNKNOWN_FUNCTION = '?';
+
+// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types
+var ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;
+
+function getLocationHref() {
+ if (typeof document === 'undefined' || document.location == null) return '';
+ return document.location.href;
+}
+
+function getLocationOrigin() {
+ if (typeof document === 'undefined' || document.location == null) return '';
+
+ // Oh dear IE10...
+ if (!document.location.origin) {
+ document.location.origin =
+ document.location.protocol +
+ '//' +
+ document.location.hostname +
+ (document.location.port ? ':' + document.location.port : '');
+ }
+
+ return document.location.origin;
+}
+
+/**
+ * TraceKit.report: cross-browser processing of unhandled exceptions
+ *
+ * Syntax:
+ * TraceKit.report.subscribe(function(stackInfo) { ... })
+ * TraceKit.report.unsubscribe(function(stackInfo) { ... })
+ * TraceKit.report(exception)
+ * try { ...code... } catch(ex) { TraceKit.report(ex); }
+ *
+ * Supports:
+ * - Firefox: full stack trace with line numbers, plus column number
+ * on top frame; column number is not guaranteed
+ * - Opera: full stack trace with line and column numbers
+ * - Chrome: full stack trace with line and column numbers
+ * - Safari: line and column number for the top frame only; some frames
+ * may be missing, and column number is not guaranteed
+ * - IE: line and column number for the top frame only; some frames
+ * may be missing, and column number is not guaranteed
+ *
+ * In theory, TraceKit should work on all of the following versions:
+ * - IE5.5+ (only 8.0 tested)
+ * - Firefox 0.9+ (only 3.5+ tested)
+ * - Opera 7+ (only 10.50 tested; versions 9 and earlier may require
+ * Exceptions Have Stacktrace to be enabled in opera:config)
+ * - Safari 3+ (only 4+ tested)
+ * - Chrome 1+ (only 5+ tested)
+ * - Konqueror 3.5+ (untested)
+ *
+ * Requires TraceKit.computeStackTrace.
+ *
+ * Tries to catch all unhandled exceptions and report them to the
+ * subscribed handlers. Please note that TraceKit.report will rethrow the
+ * exception. This is REQUIRED in order to get a useful stack trace in IE.
+ * If the exception does not reach the top of the browser, you will only
+ * get a stack trace from the point where TraceKit.report was called.
+ *
+ * Handlers receive a stackInfo object as described in the
+ * TraceKit.computeStackTrace docs.
+ */
+TraceKit.report = (function reportModuleWrapper() {
+ var handlers = [],
+ lastArgs = null,
+ lastException = null,
+ lastExceptionStack = null;
+
+ /**
+ * Add a crash handler.
+ * @param {Function} handler
+ */
+ function subscribe(handler) {
+ installGlobalHandler();
+ handlers.push(handler);
+ }
+
+ /**
+ * Remove a crash handler.
+ * @param {Function} handler
+ */
+ function unsubscribe(handler) {
+ for (var i = handlers.length - 1; i >= 0; --i) {
+ if (handlers[i] === handler) {
+ handlers.splice(i, 1);
+ }
+ }
+ }
+
+ /**
+ * Remove all crash handlers.
+ */
+ function unsubscribeAll() {
+ uninstallGlobalHandler();
+ handlers = [];
+ }
+
+ /**
+ * Dispatch stack information to all handlers.
+ * @param {Object.} stack
+ */
+ function notifyHandlers(stack, isWindowError) {
+ var exception = null;
+ if (isWindowError && !TraceKit.collectWindowErrors) {
+ return;
+ }
+ for (var i in handlers) {
+ if (handlers.hasOwnProperty(i)) {
+ try {
+ handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2)));
+ } catch (inner) {
+ exception = inner;
+ }
+ }
+ }
+
+ if (exception) {
+ throw exception;
+ }
+ }
+
+ var _oldOnerrorHandler, _onErrorHandlerInstalled;
+
+ /**
+ * Ensures all global unhandled exceptions are recorded.
+ * Supported by Gecko and IE.
+ * @param {string} msg Error message.
+ * @param {string} url URL of script that generated the exception.
+ * @param {(number|string)} lineNo The line number at which the error
+ * occurred.
+ * @param {?(number|string)} colNo The column number at which the error
+ * occurred.
+ * @param {?Error} ex The actual Error object.
+ */
+ function traceKitWindowOnError(msg, url, lineNo, colNo, ex) {
+ var stack = null;
+ // If 'ex' is ErrorEvent, get real Error from inside
+ var exception = utils.isErrorEvent(ex) ? ex.error : ex;
+ // If 'msg' is ErrorEvent, get real message from inside
+ var message = utils.isErrorEvent(msg) ? msg.message : msg;
+
+ if (lastExceptionStack) {
+ TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(
+ lastExceptionStack,
+ url,
+ lineNo,
+ message
+ );
+ processLastException();
+ } else if (exception && utils.isError(exception)) {
+ // non-string `exception` arg; attempt to extract stack trace
+
+ // New chrome and blink send along a real error object
+ // Let's just report that like a normal error.
+ // See: https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror
+ stack = TraceKit.computeStackTrace(exception);
+ notifyHandlers(stack, true);
+ } else {
+ var location = {
+ url: url,
+ line: lineNo,
+ column: colNo
+ };
+
+ var name = undefined;
+ var groups;
+
+ if ({}.toString.call(message) === '[object String]') {
+ var groups = message.match(ERROR_TYPES_RE);
+ if (groups) {
+ name = groups[1];
+ message = groups[2];
+ }
+ }
+
+ location.func = UNKNOWN_FUNCTION;
+
+ stack = {
+ name: name,
+ message: message,
+ url: getLocationHref(),
+ stack: [location]
+ };
+ notifyHandlers(stack, true);
+ }
+
+ if (_oldOnerrorHandler) {
+ return _oldOnerrorHandler.apply(this, arguments);
+ }
+
+ return false;
+ }
+
+ function installGlobalHandler() {
+ if (_onErrorHandlerInstalled) {
+ return;
+ }
+ _oldOnerrorHandler = _window.onerror;
+ _window.onerror = traceKitWindowOnError;
+ _onErrorHandlerInstalled = true;
+ }
+
+ function uninstallGlobalHandler() {
+ if (!_onErrorHandlerInstalled) {
+ return;
+ }
+ _window.onerror = _oldOnerrorHandler;
+ _onErrorHandlerInstalled = false;
+ _oldOnerrorHandler = undefined;
+ }
+
+ function processLastException() {
+ var _lastExceptionStack = lastExceptionStack,
+ _lastArgs = lastArgs;
+ lastArgs = null;
+ lastExceptionStack = null;
+ lastException = null;
+ notifyHandlers.apply(null, [_lastExceptionStack, false].concat(_lastArgs));
+ }
+
+ /**
+ * Reports an unhandled Error to TraceKit.
+ * @param {Error} ex
+ * @param {?boolean} rethrow If false, do not re-throw the exception.
+ * Only used for window.onerror to not cause an infinite loop of
+ * rethrowing.
+ */
+ function report(ex, rethrow) {
+ var args = _slice.call(arguments, 1);
+ if (lastExceptionStack) {
+ if (lastException === ex) {
+ return; // already caught by an inner catch block, ignore
+ } else {
+ processLastException();
+ }
+ }
+
+ var stack = TraceKit.computeStackTrace(ex);
+ lastExceptionStack = stack;
+ lastException = ex;
+ lastArgs = args;
+
+ // If the stack trace is incomplete, wait for 2 seconds for
+ // slow slow IE to see if onerror occurs or not before reporting
+ // this exception; otherwise, we will end up with an incomplete
+ // stack trace
+ setTimeout(function() {
+ if (lastException === ex) {
+ processLastException();
+ }
+ }, stack.incomplete ? 2000 : 0);
+
+ if (rethrow !== false) {
+ throw ex; // re-throw to propagate to the top level (and cause window.onerror)
+ }
+ }
+
+ report.subscribe = subscribe;
+ report.unsubscribe = unsubscribe;
+ report.uninstall = unsubscribeAll;
+ return report;
+})();
+
+/**
+ * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript
+ *
+ * Syntax:
+ * s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below)
+ * Returns:
+ * s.name - exception name
+ * s.message - exception message
+ * s.stack[i].url - JavaScript or HTML file URL
+ * s.stack[i].func - function name, or empty for anonymous functions (if guessing did not work)
+ * s.stack[i].args - arguments passed to the function, if known
+ * s.stack[i].line - line number, if known
+ * s.stack[i].column - column number, if known
+ *
+ * Supports:
+ * - Firefox: full stack trace with line numbers and unreliable column
+ * number on top frame
+ * - Opera 10: full stack trace with line and column numbers
+ * - Opera 9-: full stack trace with line numbers
+ * - Chrome: full stack trace with line and column numbers
+ * - Safari: line and column number for the topmost stacktrace element
+ * only
+ * - IE: no line numbers whatsoever
+ *
+ * Tries to guess names of anonymous functions by looking for assignments
+ * in the source code. In IE and Safari, we have to guess source file names
+ * by searching for function bodies inside all page scripts. This will not
+ * work for scripts that are loaded cross-domain.
+ * Here be dragons: some function names may be guessed incorrectly, and
+ * duplicate functions may be mismatched.
+ *
+ * TraceKit.computeStackTrace should only be used for tracing purposes.
+ * Logging of unhandled exceptions should be done with TraceKit.report,
+ * which builds on top of TraceKit.computeStackTrace and provides better
+ * IE support by utilizing the window.onerror event to retrieve information
+ * about the top of the stack.
+ *
+ * Note: In IE and Safari, no stack trace is recorded on the Error object,
+ * so computeStackTrace instead walks its *own* chain of callers.
+ * This means that:
+ * * in Safari, some methods may be missing from the stack trace;
+ * * in IE, the topmost function in the stack trace will always be the
+ * caller of computeStackTrace.
+ *
+ * This is okay for tracing (because you are likely to be calling
+ * computeStackTrace from the function you want to be the topmost element
+ * of the stack trace anyway), but not okay for logging unhandled
+ * exceptions (because your catch block will likely be far away from the
+ * inner function that actually caused the exception).
+ *
+ */
+TraceKit.computeStackTrace = (function computeStackTraceWrapper() {
+ // Contents of Exception in various browsers.
+ //
+ // SAFARI:
+ // ex.message = Can't find variable: qq
+ // ex.line = 59
+ // ex.sourceId = 580238192
+ // ex.sourceURL = http://...
+ // ex.expressionBeginOffset = 96
+ // ex.expressionCaretOffset = 98
+ // ex.expressionEndOffset = 98
+ // ex.name = ReferenceError
+ //
+ // FIREFOX:
+ // ex.message = qq is not defined
+ // ex.fileName = http://...
+ // ex.lineNumber = 59
+ // ex.columnNumber = 69
+ // ex.stack = ...stack trace... (see the example below)
+ // ex.name = ReferenceError
+ //
+ // CHROME:
+ // ex.message = qq is not defined
+ // ex.name = ReferenceError
+ // ex.type = not_defined
+ // ex.arguments = ['aa']
+ // ex.stack = ...stack trace...
+ //
+ // INTERNET EXPLORER:
+ // ex.message = ...
+ // ex.name = ReferenceError
+ //
+ // OPERA:
+ // ex.message = ...message... (see the example below)
+ // ex.name = ReferenceError
+ // ex.opera#sourceloc = 11 (pretty much useless, duplicates the info in ex.message)
+ // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'
+
+ /**
+ * Computes stack trace information from the stack property.
+ * Chrome and Gecko use this property.
+ * @param {Error} ex
+ * @return {?Object.} Stack trace information.
+ */
+ function computeStackTraceFromStackProp(ex) {
+ if (typeof ex.stack === 'undefined' || !ex.stack) return;
+
+ var chrome = /^\s*at (?:(.*?) ?\()?((?:file|https?|blob|chrome-extension|native|eval|webpack||[a-z]:|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i;
+ var winjs = /^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i;
+ // NOTE: blob urls are now supposed to always have an origin, therefore it's format
+ // which is `blob:http://url/path/with-some-uuid`, is matched by `blob.*?:\/` as well
+ var gecko = /^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\/.*?|\[native code\]|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i;
+ // Used to additionally parse URL/line/column from eval frames
+ var geckoEval = /(\S+) line (\d+)(?: > eval line \d+)* > eval/i;
+ var chromeEval = /\((\S*)(?::(\d+))(?::(\d+))\)/;
+ var lines = ex.stack.split('\n');
+ var stack = [];
+ var submatch;
+ var parts;
+ var element;
+ var reference = /^(.*) is undefined$/.exec(ex.message);
+
+ for (var i = 0, j = lines.length; i < j; ++i) {
+ if ((parts = chrome.exec(lines[i]))) {
+ var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line
+ var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line
+ if (isEval && (submatch = chromeEval.exec(parts[2]))) {
+ // throw out eval line/column and use top-most line/column number
+ parts[2] = submatch[1]; // url
+ parts[3] = submatch[2]; // line
+ parts[4] = submatch[3]; // column
+ }
+ element = {
+ url: !isNative ? parts[2] : null,
+ func: parts[1] || UNKNOWN_FUNCTION,
+ args: isNative ? [parts[2]] : [],
+ line: parts[3] ? +parts[3] : null,
+ column: parts[4] ? +parts[4] : null
+ };
+ } else if ((parts = winjs.exec(lines[i]))) {
+ element = {
+ url: parts[2],
+ func: parts[1] || UNKNOWN_FUNCTION,
+ args: [],
+ line: +parts[3],
+ column: parts[4] ? +parts[4] : null
+ };
+ } else if ((parts = gecko.exec(lines[i]))) {
+ var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;
+ if (isEval && (submatch = geckoEval.exec(parts[3]))) {
+ // throw out eval line/column and use top-most line number
+ parts[3] = submatch[1];
+ parts[4] = submatch[2];
+ parts[5] = null; // no column when eval
+ } else if (i === 0 && !parts[5] && typeof ex.columnNumber !== 'undefined') {
+ // FireFox uses this awesome columnNumber property for its top frame
+ // Also note, Firefox's column number is 0-based and everything else expects 1-based,
+ // so adding 1
+ // NOTE: this hack doesn't work if top-most frame is eval
+ stack[0].column = ex.columnNumber + 1;
+ }
+ element = {
+ url: parts[3],
+ func: parts[1] || UNKNOWN_FUNCTION,
+ args: parts[2] ? parts[2].split(',') : [],
+ line: parts[4] ? +parts[4] : null,
+ column: parts[5] ? +parts[5] : null
+ };
+ } else {
+ continue;
+ }
+
+ if (!element.func && element.line) {
+ element.func = UNKNOWN_FUNCTION;
+ }
+
+ if (element.url && element.url.substr(0, 5) === 'blob:') {
+ // Special case for handling JavaScript loaded into a blob.
+ // We use a synchronous AJAX request here as a blob is already in
+ // memory - it's not making a network request. This will generate a warning
+ // in the browser console, but there has already been an error so that's not
+ // that much of an issue.
+ var xhr = new XMLHttpRequest();
+ xhr.open('GET', element.url, false);
+ xhr.send(null);
+
+ // If we failed to download the source, skip this patch
+ if (xhr.status === 200) {
+ var source = xhr.responseText || '';
+
+ // We trim the source down to the last 300 characters as sourceMappingURL is always at the end of the file.
+ // Why 300? To be in line with: https://github.com/getsentry/sentry/blob/4af29e8f2350e20c28a6933354e4f42437b4ba42/src/sentry/lang/javascript/processor.py#L164-L175
+ source = source.slice(-300);
+
+ // Now we dig out the source map URL
+ var sourceMaps = source.match(/\/\/# sourceMappingURL=(.*)$/);
+
+ // If we don't find a source map comment or we find more than one, continue on to the next element.
+ if (sourceMaps) {
+ var sourceMapAddress = sourceMaps[1];
+
+ // Now we check to see if it's a relative URL.
+ // If it is, convert it to an absolute one.
+ if (sourceMapAddress.charAt(0) === '~') {
+ sourceMapAddress = getLocationOrigin() + sourceMapAddress.slice(1);
+ }
+
+ // Now we strip the '.map' off of the end of the URL and update the
+ // element so that Sentry can match the map to the blob.
+ element.url = sourceMapAddress.slice(0, -4);
+ }
+ }
+ }
+
+ stack.push(element);
+ }
+
+ if (!stack.length) {
+ return null;
+ }
+
+ return {
+ name: ex.name,
+ message: ex.message,
+ url: getLocationHref(),
+ stack: stack
+ };
+ }
+
+ /**
+ * Adds information about the first frame to incomplete stack traces.
+ * Safari and IE require this to get complete data on the first frame.
+ * @param {Object.} stackInfo Stack trace information from
+ * one of the compute* methods.
+ * @param {string} url The URL of the script that caused an error.
+ * @param {(number|string)} lineNo The line number of the script that
+ * caused an error.
+ * @param {string=} message The error generated by the browser, which
+ * hopefully contains the name of the object that caused the error.
+ * @return {boolean} Whether or not the stack information was
+ * augmented.
+ */
+ function augmentStackTraceWithInitialElement(stackInfo, url, lineNo, message) {
+ var initial = {
+ url: url,
+ line: lineNo
+ };
+
+ if (initial.url && initial.line) {
+ stackInfo.incomplete = false;
+
+ if (!initial.func) {
+ initial.func = UNKNOWN_FUNCTION;
+ }
+
+ if (stackInfo.stack.length > 0) {
+ if (stackInfo.stack[0].url === initial.url) {
+ if (stackInfo.stack[0].line === initial.line) {
+ return false; // already in stack trace
+ } else if (
+ !stackInfo.stack[0].line &&
+ stackInfo.stack[0].func === initial.func
+ ) {
+ stackInfo.stack[0].line = initial.line;
+ return false;
+ }
+ }
+ }
+
+ stackInfo.stack.unshift(initial);
+ stackInfo.partial = true;
+ return true;
+ } else {
+ stackInfo.incomplete = true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Computes stack trace information by walking the arguments.caller
+ * chain at the time the exception occurred. This will cause earlier
+ * frames to be missed but is the only way to get any stack trace in
+ * Safari and IE. The top frame is restored by
+ * {@link augmentStackTraceWithInitialElement}.
+ * @param {Error} ex
+ * @return {?Object.} Stack trace information.
+ */
+ function computeStackTraceByWalkingCallerChain(ex, depth) {
+ var functionName = /function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,
+ stack = [],
+ funcs = {},
+ recursion = false,
+ parts,
+ item,
+ source;
+
+ for (
+ var curr = computeStackTraceByWalkingCallerChain.caller;
+ curr && !recursion;
+ curr = curr.caller
+ ) {
+ if (curr === computeStackTrace || curr === TraceKit.report) {
+ // console.log('skipping internal function');
+ continue;
+ }
+
+ item = {
+ url: null,
+ func: UNKNOWN_FUNCTION,
+ line: null,
+ column: null
+ };
+
+ if (curr.name) {
+ item.func = curr.name;
+ } else if ((parts = functionName.exec(curr.toString()))) {
+ item.func = parts[1];
+ }
+
+ if (typeof item.func === 'undefined') {
+ try {
+ item.func = parts.input.substring(0, parts.input.indexOf('{'));
+ } catch (e) {}
+ }
+
+ if (funcs['' + curr]) {
+ recursion = true;
+ } else {
+ funcs['' + curr] = true;
+ }
+
+ stack.push(item);
+ }
+
+ if (depth) {
+ // console.log('depth is ' + depth);
+ // console.log('stack is ' + stack.length);
+ stack.splice(0, depth);
+ }
+
+ var result = {
+ name: ex.name,
+ message: ex.message,
+ url: getLocationHref(),
+ stack: stack
+ };
+ augmentStackTraceWithInitialElement(
+ result,
+ ex.sourceURL || ex.fileName,
+ ex.line || ex.lineNumber,
+ ex.message || ex.description
+ );
+ return result;
+ }
+
+ /**
+ * Computes a stack trace for an exception.
+ * @param {Error} ex
+ * @param {(string|number)=} depth
+ */
+ function computeStackTrace(ex, depth) {
+ var stack = null;
+ depth = depth == null ? 0 : +depth;
+
+ try {
+ stack = computeStackTraceFromStackProp(ex);
+ if (stack) {
+ return stack;
+ }
+ } catch (e) {
+ if (TraceKit.debug) {
+ throw e;
+ }
+ }
+
+ try {
+ stack = computeStackTraceByWalkingCallerChain(ex, depth + 1);
+ if (stack) {
+ return stack;
+ }
+ } catch (e) {
+ if (TraceKit.debug) {
+ throw e;
+ }
+ }
+ return {
+ name: ex.name,
+ message: ex.message,
+ url: getLocationHref()
+ };
+ }
+
+ computeStackTrace.augmentStackTraceWithInitialElement = augmentStackTraceWithInitialElement;
+ computeStackTrace.computeStackTraceFromStackProp = computeStackTraceFromStackProp;
+
+ return computeStackTrace;
+})();
+
+module.exports = TraceKit;
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"8":8}],10:[function(_dereq_,module,exports){
+/*
+ json-stringify-safe
+ Like JSON.stringify, but doesn't throw on circular references.
+
+ Originally forked from https://github.com/isaacs/json-stringify-safe
+ version 5.0.1 on 3/8/2017 and modified to handle Errors serialization
+ and IE8 compatibility. Tests for this are in test/vendor.
+
+ ISC license: https://github.com/isaacs/json-stringify-safe/blob/master/LICENSE
+*/
+
+exports = module.exports = stringify;
+exports.getSerialize = serializer;
+
+function indexOf(haystack, needle) {
+ for (var i = 0; i < haystack.length; ++i) {
+ if (haystack[i] === needle) return i;
+ }
+ return -1;
+}
+
+function stringify(obj, replacer, spaces, cycleReplacer) {
+ return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces);
+}
+
+// https://github.com/ftlabs/js-abbreviate/blob/fa709e5f139e7770a71827b1893f22418097fbda/index.js#L95-L106
+function stringifyError(value) {
+ var err = {
+ // These properties are implemented as magical getters and don't show up in for in
+ stack: value.stack,
+ message: value.message,
+ name: value.name
+ };
+
+ for (var i in value) {
+ if (Object.prototype.hasOwnProperty.call(value, i)) {
+ err[i] = value[i];
+ }
+ }
+
+ return err;
+}
+
+function serializer(replacer, cycleReplacer) {
+ var stack = [];
+ var keys = [];
+
+ if (cycleReplacer == null) {
+ cycleReplacer = function(key, value) {
+ if (stack[0] === value) {
+ return '[Circular ~]';
+ }
+ return '[Circular ~.' + keys.slice(0, indexOf(stack, value)).join('.') + ']';
+ };
+ }
+
+ return function(key, value) {
+ if (stack.length > 0) {
+ var thisPos = indexOf(stack, this);
+ ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);
+ ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);
+
+ if (~indexOf(stack, value)) {
+ value = cycleReplacer.call(this, key, value);
+ }
+ } else {
+ stack.push(value);
+ }
+
+ return replacer == null
+ ? value instanceof Error ? stringifyError(value) : value
+ : replacer.call(this, key, value);
+ };
+}
+
+},{}],11:[function(_dereq_,module,exports){
+/*
+ * JavaScript MD5
+ * https://github.com/blueimp/JavaScript-MD5
+ *
+ * Copyright 2011, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * https://opensource.org/licenses/MIT
+ *
+ * Based on
+ * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
+ * Digest Algorithm, as defined in RFC 1321.
+ * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
+ * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
+ * Distributed under the BSD License
+ * See http://pajhome.org.uk/crypt/md5 for more info.
+ */
+
+/*
+* Add integers, wrapping at 2^32. This uses 16-bit operations internally
+* to work around bugs in some JS interpreters.
+*/
+function safeAdd(x, y) {
+ var lsw = (x & 0xffff) + (y & 0xffff);
+ var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
+ return (msw << 16) | (lsw & 0xffff);
+}
+
+/*
+* Bitwise rotate a 32-bit number to the left.
+*/
+function bitRotateLeft(num, cnt) {
+ return (num << cnt) | (num >>> (32 - cnt));
+}
+
+/*
+* These functions implement the four basic operations the algorithm uses.
+*/
+function md5cmn(q, a, b, x, s, t) {
+ return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);
+}
+function md5ff(a, b, c, d, x, s, t) {
+ return md5cmn((b & c) | (~b & d), a, b, x, s, t);
+}
+function md5gg(a, b, c, d, x, s, t) {
+ return md5cmn((b & d) | (c & ~d), a, b, x, s, t);
+}
+function md5hh(a, b, c, d, x, s, t) {
+ return md5cmn(b ^ c ^ d, a, b, x, s, t);
+}
+function md5ii(a, b, c, d, x, s, t) {
+ return md5cmn(c ^ (b | ~d), a, b, x, s, t);
+}
+
+/*
+* Calculate the MD5 of an array of little-endian words, and a bit length.
+*/
+function binlMD5(x, len) {
+ /* append padding */
+ x[len >> 5] |= 0x80 << (len % 32);
+ x[(((len + 64) >>> 9) << 4) + 14] = len;
+
+ var i;
+ var olda;
+ var oldb;
+ var oldc;
+ var oldd;
+ var a = 1732584193;
+ var b = -271733879;
+ var c = -1732584194;
+ var d = 271733878;
+
+ for (i = 0; i < x.length; i += 16) {
+ olda = a;
+ oldb = b;
+ oldc = c;
+ oldd = d;
+
+ a = md5ff(a, b, c, d, x[i], 7, -680876936);
+ d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);
+ c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);
+ b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);
+ a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);
+ d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);
+ c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);
+ b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);
+ a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);
+ d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);
+ c = md5ff(c, d, a, b, x[i + 10], 17, -42063);
+ b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);
+ a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);
+ d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);
+ c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);
+ b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);
+
+ a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);
+ d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);
+ c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);
+ b = md5gg(b, c, d, a, x[i], 20, -373897302);
+ a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);
+ d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);
+ c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);
+ b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);
+ a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);
+ d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);
+ c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);
+ b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);
+ a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);
+ d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);
+ c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);
+ b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);
+
+ a = md5hh(a, b, c, d, x[i + 5], 4, -378558);
+ d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);
+ c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);
+ b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);
+ a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);
+ d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);
+ c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);
+ b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);
+ a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);
+ d = md5hh(d, a, b, c, x[i], 11, -358537222);
+ c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);
+ b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);
+ a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);
+ d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);
+ c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);
+ b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);
+
+ a = md5ii(a, b, c, d, x[i], 6, -198630844);
+ d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);
+ c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);
+ b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);
+ a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);
+ d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);
+ c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);
+ b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);
+ a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);
+ d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);
+ c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);
+ b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);
+ a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);
+ d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);
+ c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);
+ b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);
+
+ a = safeAdd(a, olda);
+ b = safeAdd(b, oldb);
+ c = safeAdd(c, oldc);
+ d = safeAdd(d, oldd);
+ }
+ return [a, b, c, d];
+}
+
+/*
+* Convert an array of little-endian words to a string
+*/
+function binl2rstr(input) {
+ var i;
+ var output = '';
+ var length32 = input.length * 32;
+ for (i = 0; i < length32; i += 8) {
+ output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xff);
+ }
+ return output;
+}
+
+/*
+* Convert a raw string to an array of little-endian words
+* Characters >255 have their high-byte silently ignored.
+*/
+function rstr2binl(input) {
+ var i;
+ var output = [];
+ output[(input.length >> 2) - 1] = undefined;
+ for (i = 0; i < output.length; i += 1) {
+ output[i] = 0;
+ }
+ var length8 = input.length * 8;
+ for (i = 0; i < length8; i += 8) {
+ output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << (i % 32);
+ }
+ return output;
+}
+
+/*
+* Calculate the MD5 of a raw string
+*/
+function rstrMD5(s) {
+ return binl2rstr(binlMD5(rstr2binl(s), s.length * 8));
+}
+
+/*
+* Calculate the HMAC-MD5, of a key and some data (raw strings)
+*/
+function rstrHMACMD5(key, data) {
+ var i;
+ var bkey = rstr2binl(key);
+ var ipad = [];
+ var opad = [];
+ var hash;
+ ipad[15] = opad[15] = undefined;
+ if (bkey.length > 16) {
+ bkey = binlMD5(bkey, key.length * 8);
+ }
+ for (i = 0; i < 16; i += 1) {
+ ipad[i] = bkey[i] ^ 0x36363636;
+ opad[i] = bkey[i] ^ 0x5c5c5c5c;
+ }
+ hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);
+ return binl2rstr(binlMD5(opad.concat(hash), 512 + 128));
+}
+
+/*
+* Convert a raw string to a hex string
+*/
+function rstr2hex(input) {
+ var hexTab = '0123456789abcdef';
+ var output = '';
+ var x;
+ var i;
+ for (i = 0; i < input.length; i += 1) {
+ x = input.charCodeAt(i);
+ output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f);
+ }
+ return output;
+}
+
+/*
+* Encode a string as utf-8
+*/
+function str2rstrUTF8(input) {
+ return unescape(encodeURIComponent(input));
+}
+
+/*
+* Take string arguments and return either raw or hex encoded strings
+*/
+function rawMD5(s) {
+ return rstrMD5(str2rstrUTF8(s));
+}
+function hexMD5(s) {
+ return rstr2hex(rawMD5(s));
+}
+function rawHMACMD5(k, d) {
+ return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d));
+}
+function hexHMACMD5(k, d) {
+ return rstr2hex(rawHMACMD5(k, d));
+}
+
+function md5(string, key, raw) {
+ if (!key) {
+ if (!raw) {
+ return hexMD5(string);
+ }
+ return rawMD5(string);
+ }
+ if (!raw) {
+ return hexHMACMD5(key, string);
+ }
+ return rawHMACMD5(key, string);
+}
+
+module.exports = md5;
+
+},{}]},{},[7,1,2,3])(7)
+});
\ No newline at end of file
diff --git a/packages/raven-js/dist/angular,ember,vue/raven.min.js b/packages/raven-js/dist/angular,ember,vue/raven.min.js
new file mode 100644
index 000000000000..f1108c4eddd4
--- /dev/null
+++ b/packages/raven-js/dist/angular,ember,vue/raven.min.js
@@ -0,0 +1,4 @@
+/*! Raven.js 3.25.2 (30b6d4e) | github.com/getsentry/raven-js */
+!function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,b.Raven=a()}}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c?c:a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g":"anonymous component")+(a._isVue&&a.$options.__file?" at "+a.$options.__file:"")}function e(a,b){if(b=b||window.Vue,b&&b.config){var c=b.config.errorHandler;b.config.errorHandler=function(b,e,f){var g={};"[object Object]"===Object.prototype.toString.call(e)&&(g.componentName=d(e),g.propsData=e.$options.propsData),"undefined"!=typeof f&&(g.lifecycleHook=f),a.captureException(b,{extra:g}),"function"==typeof c&&c.call(this,b,e,f)}}}b.exports=e,a(7).addPlugin(b.exports)},{7:7}],4:[function(a,b,c){function d(a){this.name="RavenConfigError",this.message=a}d.prototype=new Error,d.prototype.constructor=d,b.exports=d},{}],5:[function(a,b,c){var d=a(8),e=function(a,b,c){var e=a[b],f=a;if(b in a){var g="warn"===b?"warning":b;a[b]=function(){var a=[].slice.call(arguments),h=d.safeJoin(a," "),i={level:g,logger:"console",extra:{arguments:a}};"assert"===b?a[0]===!1&&(h="Assertion failed: "+(d.safeJoin(a.slice(1)," ")||"console.assert"),i.extra.arguments=a.slice(1),c&&c(h,i)):c&&c(h,i),e&&Function.prototype.apply.call(e,f,a)}}};b.exports={wrapMethod:e}},{8:8}],6:[function(a,b,c){(function(c){function d(){return+new Date}function e(a,b){return s(b)?function(c){return b(c,a)}:b}function f(){this.b=!("object"!=typeof JSON||!JSON.stringify),this.c=!r(S),this.d=!r(T),this.e=null,this.f=null,this.g=null,this.h=null,this.i=null,this.j=null,this.k={},this.l={release:R.SENTRY_RELEASE&&R.SENTRY_RELEASE.id,logger:"javascript",ignoreErrors:[],ignoreUrls:[],whitelistUrls:[],includePaths:[],headers:null,collectWindowErrors:!0,captureUnhandledRejections:!0,maxMessageLength:0,maxUrlLength:250,stackTraceLimit:50,autoBreadcrumbs:!0,instrument:!0,sampleRate:1,sanitizeKeys:[]},this.m={method:"POST",keepalive:!0,referrerPolicy:K()?"origin":""},this.n=0,this.o=!1,this.p=Error.stackTraceLimit,this.q=R.console||{},this.r={},this.s=[],this.t=d(),this.u=[],this.v=[],this.w=null,this.x=R.location,this.y=this.x&&this.x.href,this.z();for(var a in this.q)this.r[a]=this.q[a]}var g=a(9),h=a(10),i=a(11),j=a(4),k=a(8),l=k.isErrorEvent,m=k.isDOMError,n=k.isDOMException,o=k.isError,p=k.isObject,q=k.isPlainObject,r=k.isUndefined,s=k.isFunction,t=k.isString,u=k.isArray,v=k.isEmptyObject,w=k.each,x=k.objectMerge,y=k.truncate,z=k.objectFrozen,A=k.hasKey,B=k.joinRegExp,C=k.urlencode,D=k.uuid4,E=k.htmlTreeAsString,F=k.isSameException,G=k.isSameStacktrace,H=k.parseUrl,I=k.fill,J=k.supportsFetch,K=k.supportsReferrerPolicy,L=k.serializeKeysForMessage,M=k.serializeException,N=k.sanitize,O=a(5).wrapMethod,P="source protocol user pass host port path".split(" "),Q=/^(?:(\w+):)?\/\/(?:(\w+)(:\w+)?@)?([\w\.-]+)(?::(\d+))?(\/.*)/,R="undefined"!=typeof window?window:"undefined"!=typeof c?c:"undefined"!=typeof self?self:{},S=R.document,T=R.navigator;f.prototype={VERSION:"3.25.2",debug:!1,TraceKit:g,config:function(a,b){var c=this;if(c.h)return this.A("error","Error: Raven has already been configured"),c;if(!a)return c;var d=c.l;b&&w(b,function(a,b){"tags"===a||"extra"===a||"user"===a?c.k[a]=b:d[a]=b}),c.setDSN(a),d.ignoreErrors.push(/^Script error\.?$/),d.ignoreErrors.push(/^Javascript error: Script error\.? on line 0$/),d.ignoreErrors=B(d.ignoreErrors),d.ignoreUrls=!!d.ignoreUrls.length&&B(d.ignoreUrls),d.whitelistUrls=!!d.whitelistUrls.length&&B(d.whitelistUrls),d.includePaths=B(d.includePaths),d.maxBreadcrumbs=Math.max(0,Math.min(d.maxBreadcrumbs||100,100));var e={xhr:!0,console:!0,dom:!0,location:!0,sentry:!0},f=d.autoBreadcrumbs;"[object Object]"==={}.toString.call(f)?f=x(e,f):f!==!1&&(f=e),d.autoBreadcrumbs=f;var h={tryCatch:!0},i=d.instrument;return"[object Object]"==={}.toString.call(i)?i=x(h,i):i!==!1&&(i=h),d.instrument=i,g.collectWindowErrors=!!d.collectWindowErrors,c},install:function(){var a=this;return a.isSetup()&&!a.o&&(g.report.subscribe(function(){a.B.apply(a,arguments)}),a.l.captureUnhandledRejections&&a.C(),a.D(),a.l.instrument&&a.l.instrument.tryCatch&&a.E(),a.l.autoBreadcrumbs&&a.F(),a.G(),a.o=!0),Error.stackTraceLimit=a.l.stackTraceLimit,this},setDSN:function(a){var b=this,c=b.H(a),d=c.path.lastIndexOf("/"),e=c.path.substr(1,d);b.I=a,b.i=c.user,b.J=c.pass&&c.pass.substr(1),b.j=c.path.substr(d+1),b.h=b.K(c),b.L=b.h+"/"+e+"api/"+b.j+"/store/",this.z()},context:function(a,b,c){return s(a)&&(c=b||[],b=a,a=void 0),this.wrap(a,b).apply(this,c)},wrap:function(a,b,c){function d(){var d=[],f=arguments.length,g=!a||a&&a.deep!==!1;for(c&&s(c)&&c.apply(this,arguments);f--;)d[f]=g?e.wrap(a,arguments[f]):arguments[f];try{return b.apply(this,d)}catch(h){throw e.M(),e.captureException(h,a),h}}var e=this;if(r(b)&&!s(a))return a;if(s(a)&&(b=a,a=void 0),!s(b))return b;try{if(b.N)return b;if(b.O)return b.O}catch(f){return b}for(var g in b)A(b,g)&&(d[g]=b[g]);return d.prototype=b.prototype,b.O=d,d.N=!0,d.P=b,d},uninstall:function(){return g.report.uninstall(),this.Q(),this.R(),this.S(),this.T(),Error.stackTraceLimit=this.p,this.o=!1,this},U:function(a){this.A("debug","Raven caught unhandled promise rejection:",a),this.captureException(a.reason,{extra:{unhandledPromiseRejection:!0}})},C:function(){return this.U=this.U.bind(this),R.addEventListener&&R.addEventListener("unhandledrejection",this.U),this},Q:function(){return R.removeEventListener&&R.removeEventListener("unhandledrejection",this.U),this},captureException:function(a,b){if(b=x({trimHeadFrames:0},b?b:{}),l(a)&&a.error)a=a.error;else{if(m(a)||n(a)){var c=a.name||(m(a)?"DOMError":"DOMException"),d=a.message?c+": "+a.message:c;return this.captureMessage(d,x(b,{stacktrace:!0,trimHeadFrames:b.trimHeadFrames+1}))}if(o(a))a=a;else{if(!q(a))return this.captureMessage(a,x(b,{stacktrace:!0,trimHeadFrames:b.trimHeadFrames+1}));b=this.V(b,a),a=new Error(b.message)}}this.e=a;try{var e=g.computeStackTrace(a);this.W(e,b)}catch(f){if(a!==f)throw f}return this},V:function(a,b){var c=Object.keys(b).sort(),d=x(a,{message:"Non-Error exception captured with keys: "+L(c),fingerprint:[i(c)],extra:a.extra||{}});return d.extra.X=M(b),d},captureMessage:function(a,b){if(!this.l.ignoreErrors.test||!this.l.ignoreErrors.test(a)){b=b||{},a+="";var c,d=x({message:a},b);try{throw new Error(a)}catch(e){c=e}c.name=null;var f=g.computeStackTrace(c),h=u(f.stack)&&f.stack[1];h&&"Raven.captureException"===h.func&&(h=f.stack[2]);var i=h&&h.url||"";if((!this.l.ignoreUrls.test||!this.l.ignoreUrls.test(i))&&(!this.l.whitelistUrls.test||this.l.whitelistUrls.test(i))){if(this.l.stacktrace||b&&b.stacktrace){d.fingerprint=null==d.fingerprint?a:d.fingerprint,b=x({trimHeadFrames:0},b),b.trimHeadFrames+=1;var j=this.Y(f,b);d.stacktrace={frames:j.reverse()}}return d.fingerprint&&(d.fingerprint=u(d.fingerprint)?d.fingerprint:[d.fingerprint]),this.Z(d),this}}},captureBreadcrumb:function(a){var b=x({timestamp:d()/1e3},a);if(s(this.l.breadcrumbCallback)){var c=this.l.breadcrumbCallback(b);if(p(c)&&!v(c))b=c;else if(c===!1)return this}return this.v.push(b),this.v.length>this.l.maxBreadcrumbs&&this.v.shift(),this},addPlugin:function(a){var b=[].slice.call(arguments,1);return this.s.push([a,b]),this.o&&this.G(),this},setUserContext:function(a){return this.k.user=a,this},setExtraContext:function(a){return this.$("extra",a),this},setTagsContext:function(a){return this.$("tags",a),this},clearContext:function(){return this.k={},this},getContext:function(){return JSON.parse(h(this.k))},setEnvironment:function(a){return this.l.environment=a,this},setRelease:function(a){return this.l.release=a,this},setDataCallback:function(a){var b=this.l.dataCallback;return this.l.dataCallback=e(b,a),this},setBreadcrumbCallback:function(a){var b=this.l.breadcrumbCallback;return this.l.breadcrumbCallback=e(b,a),this},setShouldSendCallback:function(a){var b=this.l.shouldSendCallback;return this.l.shouldSendCallback=e(b,a),this},setTransport:function(a){return this.l.transport=a,this},lastException:function(){return this.e},lastEventId:function(){return this.g},isSetup:function(){return!!this.b&&(!!this.h||(this.ravenNotConfiguredError||(this.ravenNotConfiguredError=!0,this.A("error","Error: Raven has not been configured.")),!1))},afterLoad:function(){var a=R.RavenConfig;a&&this.config(a.dsn,a.config).install()},showReportDialog:function(a){if(S){a=a||{};var b=a.eventId||this.lastEventId();if(!b)throw new j("Missing eventId");var c=a.dsn||this.I;if(!c)throw new j("Missing DSN");var d=encodeURIComponent,e="";e+="?eventId="+d(b),e+="&dsn="+d(c);var f=a.user||this.k.user;f&&(f.name&&(e+="&name="+d(f.name)),f.email&&(e+="&email="+d(f.email)));var g=this.K(this.H(c)),h=S.createElement("script");h.async=!0,h.src=g+"/api/embed/error-page/"+e,(S.head||S.body).appendChild(h)}},M:function(){var a=this;this.n+=1,setTimeout(function(){a.n-=1})},_:function(a,b){var c,d;if(this.c){b=b||{},a="raven"+a.substr(0,1).toUpperCase()+a.substr(1),S.createEvent?(c=S.createEvent("HTMLEvents"),c.initEvent(a,!0,!0)):(c=S.createEventObject(),c.eventType=a);for(d in b)A(b,d)&&(c[d]=b[d]);if(S.createEvent)S.dispatchEvent(c);else try{S.fireEvent("on"+c.eventType.toLowerCase(),c)}catch(e){}}},aa:function(a){var b=this;return function(c){if(b.ba=null,b.w!==c){b.w=c;var d;try{d=E(c.target)}catch(e){d=""}b.captureBreadcrumb({category:"ui."+a,message:d})}}},ca:function(){var a=this,b=1e3;return function(c){var d;try{d=c.target}catch(e){return}var f=d&&d.tagName;if(f&&("INPUT"===f||"TEXTAREA"===f||d.isContentEditable)){var g=a.ba;g||a.aa("input")(c),clearTimeout(g),a.ba=setTimeout(function(){a.ba=null},b)}}},da:function(a,b){var c=H(this.x.href),d=H(b),e=H(a);this.y=b,c.protocol===d.protocol&&c.host===d.host&&(b=d.relative),c.protocol===e.protocol&&c.host===e.host&&(a=e.relative),this.captureBreadcrumb({category:"navigation",data:{to:b,from:a}})},D:function(){var a=this;a.ea=Function.prototype.toString,Function.prototype.toString=function(){return"function"==typeof this&&this.N?a.ea.apply(this.P,arguments):a.ea.apply(this,arguments)}},R:function(){this.ea&&(Function.prototype.toString=this.ea)},E:function(){function a(a){return function(b,d){for(var e=new Array(arguments.length),f=0;f2?arguments[2]:void 0;return c&&b.da(b.y,c+""),a.apply(this,arguments)}};I(R.history,"pushState",j,d),I(R.history,"replaceState",j,d)}if(c.console&&"console"in R&&console.log){var k=function(a,c){b.captureBreadcrumb({message:a,level:c.level,category:"console"})};w(["debug","info","warn","error","log"],function(a,b){O(console,b,k)})}},S:function(){for(var a;this.u.length;){a=this.u.shift();var b=a[0],c=a[1],d=a[2];b[c]=d}},T:function(){for(var a in this.r)this.q[a]=this.r[a]},G:function(){var a=this;w(this.s,function(b,c){var d=c[0],e=c[1];d.apply(a,[a].concat(e))})},H:function(a){var b=Q.exec(a),c={},d=7;try{for(;d--;)c[P[d]]=b[d]||""}catch(e){throw new j("Invalid DSN: "+a)}if(c.pass&&!this.l.allowSecretKey)throw new j("Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key");return c},K:function(a){var b="//"+a.host+(a.port?":"+a.port:"");return a.protocol&&(b=a.protocol+":"+b),b},B:function(){this.n||this.W.apply(this,arguments)},W:function(a,b){var c=this.Y(a,b);this._("handle",{stackInfo:a,options:b}),this.ga(a.name,a.message,a.url,a.lineno,c,b)},Y:function(a,b){var c=this,d=[];if(a.stack&&a.stack.length&&(w(a.stack,function(b,e){var f=c.ha(e,a.url);f&&d.push(f)}),b&&b.trimHeadFrames))for(var e=0;e0&&(a.breadcrumbs={values:[].slice.call(this.v,0)}),this.k.user&&(a.user=this.k.user),b.environment&&(a.environment=b.environment),b.release&&(a.release=b.release),b.serverName&&(a.server_name=b.serverName),a=this.qa(a),Object.keys(a).forEach(function(b){(null==a[b]||""===a[b]||v(a[b]))&&delete a[b]}),s(b.dataCallback)&&(a=b.dataCallback(a)||a),a&&!v(a)&&(!s(b.shouldSendCallback)||b.shouldSendCallback(a)))return this.na()?void this.A("warn","Raven dropped error due to backoff: ",a):void("number"==typeof b.sampleRate?Math.random() ",i=h.length;a&&f++1&&g+e.length*i+b.length>=d));)e.push(b),g+=b.length,a=a.parentNode;return e.reverse().join(h)}function F(a){var b,c,d,e,f,g=[];if(!a||!a.tagName)return"";if(g.push(a.tagName.toLowerCase()),a.id&&g.push("#"+a.id),b=a.className,b&&l(b))for(c=b.split(/\s+/),f=0;fc?Q(a,b-1):d}function R(a,b){if("number"==typeof a||"string"==typeof a)return a.toString();if(!Array.isArray(a))return"";if(a=a.filter(function(a){return"string"==typeof a}),0===a.length)return"[object has no keys]";if(b="number"!=typeof b?X:b,a[0].length>=b)return a[0];for(var c=a.length;c>0;c--){var d=a.slice(0,c).join(", ");if(!(d.length>b))return c===a.length?d:d+"…"}return""}function S(a,b){function c(a){return m(a)?a.map(function(a){return c(a)}):k(a)?Object.keys(a).reduce(function(b,d){return b[d]=e.test(d)?f:c(a[d]),b},{}):a}if(!m(b)||m(b)&&0===b.length)return a;var d,e=A(b),f="********";try{d=JSON.parse(T(a))}catch(g){return a}return c(d)}var T=a(10),U="undefined"!=typeof window?window:"undefined"!=typeof c?c:"undefined"!=typeof self?self:{},V=3,W=51200,X=40;b.exports={isObject:d,isError:e,isErrorEvent:f,isDOMError:g,isDOMException:h,isUndefined:i,isFunction:j,isPlainObject:k,isString:l,isArray:m,isEmptyObject:n,supportsErrorEvent:o,supportsDOMError:p,supportsDOMException:q,supportsFetch:r,supportsReferrerPolicy:s,supportsPromiseRejectionEvent:t,wrappedCallback:u,each:v,objectMerge:w,truncate:y,objectFrozen:x,hasKey:z,joinRegExp:A,urlencode:B,uuid4:D,htmlTreeAsString:E,htmlElementAsString:F,isSameException:I,isSameStacktrace:J,parseUrl:C,fill:K,safeJoin:L,serializeException:Q,serializeKeysForMessage:R,sanitize:S}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{10:10}],9:[function(a,b,c){(function(c){function d(){return"undefined"==typeof document||null==document.location?"":document.location.href}function e(){return"undefined"==typeof document||null==document.location?"":(document.location.origin||(document.location.origin=document.location.protocol+"//"+document.location.hostname+(document.location.port?":"+document.location.port:"")),document.location.origin)}var f=a(8),g={collectWindowErrors:!0,debug:!1},h="undefined"!=typeof window?window:"undefined"!=typeof c?c:"undefined"!=typeof self?self:{},i=[].slice,j="?",k=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;g.report=function(){function a(a){m(),s.push(a)}function b(a){for(var b=s.length-1;b>=0;--b)s[b]===a&&s.splice(b,1)}function c(){n(),s=[]}function e(a,b){var c=null;if(!b||g.collectWindowErrors){for(var d in s)if(s.hasOwnProperty(d))try{s[d].apply(null,[a].concat(i.call(arguments,2)))}catch(e){c=e}if(c)throw c}}function l(a,b,c,h,i){var l=null,m=f.isErrorEvent(i)?i.error:i,n=f.isErrorEvent(a)?a.message:a;if(v)g.computeStackTrace.augmentStackTraceWithInitialElement(v,b,c,n),o();else if(m&&f.isError(m))l=g.computeStackTrace(m),e(l,!0);else{var p,r={url:b,line:c,column:h},s=void 0;if("[object String]"==={}.toString.call(n)){var p=n.match(k);p&&(s=p[1],n=p[2])}r.func=j,l={name:s,message:n,url:d(),stack:[r]},e(l,!0)}return!!q&&q.apply(this,arguments)}function m(){r||(q=h.onerror,h.onerror=l,r=!0)}function n(){r&&(h.onerror=q,r=!1,q=void 0)}function o(){var a=v,b=t;t=null,v=null,u=null,e.apply(null,[a,!1].concat(b))}function p(a,b){var c=i.call(arguments,1);if(v){if(u===a)return;o()}var d=g.computeStackTrace(a);if(v=d,u=a,t=c,setTimeout(function(){u===a&&o()},d.incomplete?2e3:0),b!==!1)throw a}var q,r,s=[],t=null,u=null,v=null;return p.subscribe=a,p.unsubscribe=b,p.uninstall=c,p}(),g.computeStackTrace=function(){function a(a){if("undefined"!=typeof a.stack&&a.stack){for(var b,c,f,g=/^\s*at (?:(.*?) ?\()?((?:file|https?|blob|chrome-extension|native|eval|webpack||[a-z]:|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,h=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i,i=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\/.*?|\[native code\]|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i,k=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,l=/\((\S*)(?::(\d+))(?::(\d+))\)/,m=a.stack.split("\n"),n=[],o=(/^(.*) is undefined$/.exec(a.message),0),p=m.length;o