From a7552ebefa827cfe56a95b7452102555e6968398 Mon Sep 17 00:00:00 2001 From: Frank Ebersoll Date: Mon, 11 Jan 2016 19:32:39 +0100 Subject: [PATCH 01/14] Added session management components --- dist/exceptionless.d.ts | 13 +++++++ dist/exceptionless.js | 30 ++++++++++++++- dist/exceptionless.js.map | 2 +- dist/exceptionless.min.js | 4 +- dist/exceptionless.min.js.map | 2 +- dist/exceptionless.node.js | 30 ++++++++++++++- dist/exceptionless.node.js.map | 2 +- src/configuration/Configuration.ts | 6 ++- src/configuration/IConfigurationSettings.ts | 2 + src/models/ISessionInfo.ts | 7 ++++ .../default/SessionManagerPlugin-spec.ts | 16 ++++++++ src/plugins/default/SessionManagerPlugin.ts | 18 +++++++++ src/services/DefaultSessionManager-spec.ts | 37 +++++++++++++++++++ src/services/DefaultSessionManager.ts | 32 ++++++++++++++++ src/services/ISessionManager.ts | 5 +++ 15 files changed, 198 insertions(+), 8 deletions(-) create mode 100644 src/models/ISessionInfo.ts create mode 100644 src/plugins/default/SessionManagerPlugin-spec.ts create mode 100644 src/plugins/default/SessionManagerPlugin.ts create mode 100644 src/services/DefaultSessionManager-spec.ts create mode 100644 src/services/DefaultSessionManager.ts create mode 100644 src/services/ISessionManager.ts diff --git a/dist/exceptionless.d.ts b/dist/exceptionless.d.ts index 96df0c3a..3c9e62dc 100644 --- a/dist/exceptionless.d.ts +++ b/dist/exceptionless.d.ts @@ -28,6 +28,11 @@ export interface IEventQueue { export interface IEnvironmentInfoCollector { getEnvironmentInfo(context: EventPluginContext): IEnvironmentInfo; } +export interface ISessionManager { + getSessionId(identity: string): string; + startSession(identity: string): string; + endSession(sessionId: string): void; +} export interface IErrorParser { parse(context: EventPluginContext, exception: Error): IError; } @@ -55,6 +60,7 @@ export interface IConfigurationSettings { apiKey?: string; serverUrl?: string; environmentInfoCollector?: IEnvironmentInfoCollector; + sessionManager?: ISessionManager; errorParser?: IErrorParser; lastReferenceIdManager?: ILastReferenceIdManager; log?: ILog; @@ -137,6 +143,12 @@ export declare class DefaultEventQueue implements IEventQueue { private processSubmissionResponse(response, events); private removeEvents(events); } +export declare class DefaultSessionManager implements ISessionManager { + private sessionMap; + getSessionId(identity: string): string; + startSession(identity: string): string; + endSession(sessionId: string): void; +} export declare class InMemoryStorage implements IStorage { private _items; private _maxItems; @@ -178,6 +190,7 @@ export declare class Configuration implements IConfigurationSettings { log: ILog; moduleCollector: IModuleCollector; requestInfoCollector: IRequestInfoCollector; + sessionManager: ISessionManager; submissionBatchSize: number; submissionAdapter: ISubmissionAdapter; submissionClient: ISubmissionClient; diff --git a/dist/exceptionless.js b/dist/exceptionless.js index 26b1c536..b7597508 100644 --- a/dist/exceptionless.js +++ b/dist/exceptionless.js @@ -1504,6 +1504,34 @@ var DefaultEventQueue = (function () { return DefaultEventQueue; })(); exports.DefaultEventQueue = DefaultEventQueue; +var DefaultSessionManager = (function () { + function DefaultSessionManager() { + this.sessionMap = {}; + } + DefaultSessionManager.prototype.getSessionId = function (identity) { + if (this.sessionMap.hasOwnProperty(identity)) { + return this.sessionMap[identity]; + } + return null; + }; + DefaultSessionManager.prototype.startSession = function (identity) { + var sessionId = Utils.guid(); + this.sessionMap[identity] = sessionId; + return sessionId; + }; + DefaultSessionManager.prototype.endSession = function (sessionId) { + var identities = Object.keys(this.sessionMap); + for (var i = 0; i < identities.length; i++) { + var identity = identities[i]; + if (this.sessionMap[identity] === sessionId) { + delete this.sessionMap[identity]; + return; + } + } + }; + return DefaultSessionManager; +})(); +exports.DefaultSessionManager = DefaultSessionManager; var InMemoryStorage = (function () { function InMemoryStorage(maxItems) { this._items = []; @@ -1787,7 +1815,6 @@ var Configuration = (function () { this.defaultTags = []; this.defaultData = {}; this.enabled = true; - this.lastReferenceIdManager = new DefaultLastReferenceIdManager(); this.settings = {}; this._plugins = []; this._serverUrl = 'https://collector.exceptionless.io'; @@ -1800,6 +1827,7 @@ var Configuration = (function () { this.apiKey = configSettings.apiKey; this.serverUrl = configSettings.serverUrl; this.environmentInfoCollector = inject(configSettings.environmentInfoCollector); + this.sessionManager = inject(configSettings.sessionManager) || new DefaultSessionManager(); this.errorParser = inject(configSettings.errorParser); this.lastReferenceIdManager = inject(configSettings.lastReferenceIdManager) || new DefaultLastReferenceIdManager(); this.moduleCollector = inject(configSettings.moduleCollector); diff --git a/dist/exceptionless.js.map b/dist/exceptionless.js.map index f71f230c..0a5fd34e 100644 --- a/dist/exceptionless.js.map +++ b/dist/exceptionless.js.map @@ -1 +1 @@ -{"version":3,"sources":["tracekit.js","/source/exceptionless.ts"],"names":["getDefaultsSettingsFromScriptTag","processUnhandledException"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9oCA,8BAA8B,+BAA+B,CAAC,CAAA;AAE9D,mCAAmC,+BAA+B,CAAC,CAAA;AACnE,uCAAuC,mCAAmC,CAAC,CAAA;AAC3E,4CAA4C,wCAAwC,CAAC,CAAA;AACrF,yCAAyC,uCAAuC,CAAC,CAAA;AACjF,oCAAoC,uBAAuB,CAAC,CAAA;AAC5D,sBAAsB,SAAS,CAAC,CAAA;AAEhC;IACEA,EAAEA,CAACA,CAACA,CAACA,QAAQA,IAAIA,CAACA,QAAQA,CAACA,oBAAoBA,CAACA,CAACA,CAACA;QAChDA,MAAMA,CAACA,IAAIA,CAACA;IACdA,CAACA;IAEDA,IAAIA,OAAOA,GAAGA,QAAQA,CAACA,oBAAoBA,CAACA,QAAQA,CAACA,CAACA;IACtDA,GAAGA,CAACA,CAACA,GAAGA,CAACA,KAAKA,GAAGA,CAACA,EAAEA,KAAKA,GAAGA,OAAOA,CAACA,MAAMA,EAAEA,KAAKA,EAAEA,EAAEA,CAACA;QACpDA,EAAEA,CAACA,CAACA,OAAOA,CAACA,KAAKA,CAACA,CAACA,GAAGA,IAAIA,OAAOA,CAACA,KAAKA,CAACA,CAACA,GAAGA,CAACA,OAAOA,CAACA,gBAAgBA,CAACA,GAAGA,CAACA,CAACA,CAACA,CAACA,CAACA;YAC5EA,MAAMA,CAACA,aAAKA,CAACA,gBAAgBA,CAACA,OAAOA,CAACA,KAAKA,CAACA,CAACA,GAAGA,CAACA,KAAKA,CAACA,GAAGA,CAACA,CAACA,GAAGA,EAAEA,CAACA,CAACA;QACrEA,CAACA;IACHA,CAACA;IACDA,MAAMA,CAACA,IAAIA,CAACA;AACdA,CAACA;AAED,mCAAmC,UAA+B,EAAE,OAAa;IAC/EC,IAAIA,OAAOA,GAAGA,yCAAmBA,CAACA,OAAOA,CAACA,wBAAwBA,CAACA,IAAIA,KAAKA,CAACA,UAAUA,CAACA,OAAOA,IAAIA,CAACA,OAAOA,IAAIA,EAAEA,CAACA,CAACA,MAAMA,IAAIA,cAAcA,CAACA,EAAEA,SAASA,CAACA,CAACA;IACzJA,OAAOA,CAACA,iBAAiBA,CAACA,wBAAwBA,CAACA,GAAGA,UAAUA,CAACA;IACjEA,OAAOA,CAACA,MAAMA,EAAEA,CAACA;AACnBA,CAACA;AAmBD,IAAI,QAAQ,GAAG,6BAAa,CAAC,QAAQ,CAAC;AACtC,IAAI,QAAQ,GAAG,gCAAgC,EAAE,CAAC;AAClD,EAAE,CAAC,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACxD,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;IAClC,QAAQ,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;AAC1C,CAAC;AAED,QAAQ,CAAC,WAAW,GAAG,IAAI,uCAAkB,EAAE,CAAC;AAChD,QAAQ,CAAC,eAAe,GAAG,IAAI,+CAAsB,EAAE,CAAC;AACxD,QAAQ,CAAC,oBAAoB,GAAG,IAAI,yDAA2B,EAAE,CAAC;AAClE,QAAQ,CAAC,iBAAiB,GAAG,IAAI,mDAAwB,EAAE,CAAC;AAE5D,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;AACrD,QAAQ,CAAC,6BAA6B,EAAE,CAAC;AAUnC,KAAM,CAAC,eAAe,GAAG,QAAQ,CAAC","file":"exceptionless.js","sourcesContent":["/*\n TraceKit - Cross browser stack traces - github.com/csnover/TraceKit\n MIT license\n*/\n\n(function(window, undefined) {\nif (!window) {\n return;\n}\n\nvar TraceKit = {};\nvar _oldTraceKit = window.TraceKit;\n\n// global reference to slice\nvar _slice = [].slice;\nvar UNKNOWN_FUNCTION = '?';\n\n\n/**\n * _has, a better form of hasOwnProperty\n * Example: _has(MainHostObject, property) === true/false\n *\n * @param {Object} object to check property\n * @param {string} key to check\n */\nfunction _has(object, key) {\n return Object.prototype.hasOwnProperty.call(object, key);\n}\n\nfunction _isUndefined(what) {\n return typeof what === 'undefined';\n}\n\n/**\n * TraceKit.noConflict: Export TraceKit out to another variable\n * Example: var TK = TraceKit.noConflict()\n */\nTraceKit.noConflict = function noConflict() {\n window.TraceKit = _oldTraceKit;\n return TraceKit;\n};\n\n/**\n * TraceKit.wrap: Wrap any function in a TraceKit reporter\n * Example: func = TraceKit.wrap(func);\n *\n * @param {Function} func Function to be wrapped\n * @return {Function} The wrapped func\n */\nTraceKit.wrap = function traceKitWrapper(func) {\n function wrapped() {\n try {\n return func.apply(this, arguments);\n } catch (e) {\n TraceKit.report(e);\n throw e;\n }\n }\n return wrapped;\n};\n\n/**\n * TraceKit.report: cross-browser processing of unhandled exceptions\n *\n * Syntax:\n * TraceKit.report.subscribe(function(stackInfo) { ... })\n * TraceKit.report.unsubscribe(function(stackInfo) { ... })\n * TraceKit.report(exception)\n * try { ...code... } catch(ex) { TraceKit.report(ex); }\n *\n * Supports:\n * - Firefox: full stack trace with line numbers, plus column number\n * on top frame; column number is not guaranteed\n * - Opera: full stack trace with line and column numbers\n * - Chrome: full stack trace with line and column numbers\n * - Safari: line and column number for the top frame only; some frames\n * may be missing, and column number is not guaranteed\n * - IE: line and column number for the top frame only; some frames\n * may be missing, and column number is not guaranteed\n *\n * In theory, TraceKit should work on all of the following versions:\n * - IE5.5+ (only 8.0 tested)\n * - Firefox 0.9+ (only 3.5+ tested)\n * - Opera 7+ (only 10.50 tested; versions 9 and earlier may require\n * Exceptions Have Stacktrace to be enabled in opera:config)\n * - Safari 3+ (only 4+ tested)\n * - Chrome 1+ (only 5+ tested)\n * - Konqueror 3.5+ (untested)\n *\n * Requires TraceKit.computeStackTrace.\n *\n * Tries to catch all unhandled exceptions and report them to the\n * subscribed handlers. Please note that TraceKit.report will rethrow the\n * exception. This is REQUIRED in order to get a useful stack trace in IE.\n * If the exception does not reach the top of the browser, you will only\n * get a stack trace from the point where TraceKit.report was called.\n *\n * Handlers receive a stackInfo object as described in the\n * TraceKit.computeStackTrace docs.\n */\nTraceKit.report = (function reportModuleWrapper() {\n var handlers = [],\n lastArgs = null,\n lastException = null,\n lastExceptionStack = null;\n\n /**\n * Add a crash handler.\n * @param {Function} handler\n */\n function subscribe(handler) {\n installGlobalHandler();\n handlers.push(handler);\n }\n\n /**\n * Remove a crash handler.\n * @param {Function} handler\n */\n function unsubscribe(handler) {\n for (var i = handlers.length - 1; i >= 0; --i) {\n if (handlers[i] === handler) {\n handlers.splice(i, 1);\n }\n }\n }\n\n /**\n * Dispatch stack information to all handlers.\n * @param {Object.} stack\n */\n function notifyHandlers(stack, isWindowError) {\n var exception = null;\n if (isWindowError && !TraceKit.collectWindowErrors) {\n return;\n }\n for (var i in handlers) {\n if (_has(handlers, i)) {\n try {\n handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2)));\n } catch (inner) {\n exception = inner;\n }\n }\n }\n\n if (exception) {\n throw exception;\n }\n }\n\n var _oldOnerrorHandler, _onErrorHandlerInstalled;\n\n /**\n * Ensures all global unhandled exceptions are recorded.\n * Supported by Gecko and IE.\n * @param {string} message Error message.\n * @param {string} url URL of script that generated the exception.\n * @param {(number|string)} lineNo The line number at which the error\n * occurred.\n * @param {?(number|string)} columnNo The column number at which the error\n * occurred.\n * @param {?Error} errorObj The actual Error object.\n */\n function traceKitWindowOnError(message, url, lineNo, columnNo, errorObj) {\n var stack = null;\n\n if (lastExceptionStack) {\n TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(lastExceptionStack, url, lineNo, message);\n \t processLastException();\n\t } else if (errorObj) {\n stack = TraceKit.computeStackTrace(errorObj);\n notifyHandlers(stack, true);\n } else {\n var location = {\n 'url': url,\n 'line': lineNo,\n 'column': columnNo\n };\n location.func = TraceKit.computeStackTrace.guessFunctionName(location.url, location.line);\n location.context = TraceKit.computeStackTrace.gatherContext(location.url, location.line);\n stack = {\n 'mode': 'onerror',\n 'message': message,\n 'stack': [location]\n };\n\n notifyHandlers(stack, true);\n }\n\n if (_oldOnerrorHandler) {\n return _oldOnerrorHandler.apply(this, arguments);\n }\n\n return false;\n }\n\n function installGlobalHandler () {\n if (_onErrorHandlerInstalled === true) {\n return;\n }\n _oldOnerrorHandler = window.onerror;\n window.onerror = traceKitWindowOnError;\n _onErrorHandlerInstalled = true;\n }\n\n function processLastException() {\n var _lastExceptionStack = lastExceptionStack,\n _lastArgs = lastArgs;\n lastArgs = null;\n lastExceptionStack = null;\n lastException = null;\n notifyHandlers.apply(null, [_lastExceptionStack, false].concat(_lastArgs));\n }\n /**\n * Reports an unhandled Error to TraceKit.\n * @param {Error} ex\n */\n function report(ex) {\n if (lastExceptionStack) {\n if (lastException === ex) {\n return; // already caught by an inner catch block, ignore\n } else {\n processLastException();\n }\n }\n\n var stack = TraceKit.computeStackTrace(ex);\n lastExceptionStack = stack;\n lastException = ex;\n lastArgs = _slice.call(arguments, 1);\n\n // If the stack trace is incomplete, wait for 2 seconds for\n // slow slow IE to see if onerror occurs or not before reporting\n // this exception; otherwise, we will end up with an incomplete\n // stack trace\n window.setTimeout(function () {\n if (lastException === ex) {\n processLastException();\n }\n }, (stack.incomplete ? 2000 : 0));\n\n throw ex; // re-throw to propagate to the top level (and cause window.onerror)\n }\n\n report.subscribe = subscribe;\n report.unsubscribe = unsubscribe;\n return report;\n}());\n\n/**\n * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript\n *\n * Syntax:\n * s = TraceKit.computeStackTrace.ofCaller([depth])\n * s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below)\n * Returns:\n * s.name - exception name\n * s.message - exception message\n * s.stack[i].url - JavaScript or HTML file URL\n * s.stack[i].func - function name, or empty for anonymous functions (if guessing did not work)\n * s.stack[i].args - arguments passed to the function, if known\n * s.stack[i].line - line number, if known\n * s.stack[i].column - column number, if known\n * s.stack[i].context - an array of source code lines; the middle element corresponds to the correct line#\n * s.mode - 'stack', 'stacktrace', 'multiline', 'callers', 'onerror', or 'failed' -- method used to collect the stack trace\n *\n * Supports:\n * - Firefox: full stack trace with line numbers and unreliable column\n * number on top frame\n * - Opera 10: full stack trace with line and column numbers\n * - Opera 9-: full stack trace with line numbers\n * - Chrome: full stack trace with line and column numbers\n * - Safari: line and column number for the topmost stacktrace element\n * only\n * - IE: no line numbers whatsoever\n *\n * Tries to guess names of anonymous functions by looking for assignments\n * in the source code. In IE and Safari, we have to guess source file names\n * by searching for function bodies inside all page scripts. This will not\n * work for scripts that are loaded cross-domain.\n * Here be dragons: some function names may be guessed incorrectly, and\n * duplicate functions may be mismatched.\n *\n * TraceKit.computeStackTrace should only be used for tracing purposes.\n * Logging of unhandled exceptions should be done with TraceKit.report,\n * which builds on top of TraceKit.computeStackTrace and provides better\n * IE support by utilizing the window.onerror event to retrieve information\n * about the top of the stack.\n *\n * Note: In IE and Safari, no stack trace is recorded on the Error object,\n * so computeStackTrace instead walks its *own* chain of callers.\n * This means that:\n * * in Safari, some methods may be missing from the stack trace;\n * * in IE, the topmost function in the stack trace will always be the\n * caller of computeStackTrace.\n *\n * This is okay for tracing (because you are likely to be calling\n * computeStackTrace from the function you want to be the topmost element\n * of the stack trace anyway), but not okay for logging unhandled\n * exceptions (because your catch block will likely be far away from the\n * inner function that actually caused the exception).\n *\n * Tracing example:\n * function trace(message) {\n * var stackInfo = TraceKit.computeStackTrace.ofCaller();\n * var data = message + \"\\n\";\n * for(var i in stackInfo.stack) {\n * var item = stackInfo.stack[i];\n * data += (item.func || '[anonymous]') + \"() in \" + item.url + \":\" + (item.line || '0') + \"\\n\";\n * }\n * if (window.console)\n * console.info(data);\n * else\n * alert(data);\n * }\n */\nTraceKit.computeStackTrace = (function computeStackTraceWrapper() {\n var debug = false,\n sourceCache = {};\n\n /**\n * Attempts to retrieve source code via XMLHttpRequest, which is used\n * to look up anonymous function names.\n * @param {string} url URL of source code.\n * @return {string} Source contents.\n */\n function loadSource(url) {\n if (!TraceKit.remoteFetching) { //Only attempt request if remoteFetching is on.\n return '';\n }\n try {\n var getXHR = function() {\n try {\n return new window.XMLHttpRequest();\n } catch (e) {\n // explicitly bubble up the exception if not found\n return new window.ActiveXObject('Microsoft.XMLHTTP');\n }\n };\n\n var request = getXHR();\n request.open('GET', url, false);\n request.send('');\n return request.responseText;\n } catch (e) {\n return '';\n }\n }\n\n /**\n * Retrieves source code from the source code cache.\n * @param {string} url URL of source code.\n * @return {Array.} Source contents.\n */\n function getSource(url) {\n if (typeof url !== 'string') {\n return [];\n }\n\n if (!_has(sourceCache, url)) {\n // URL needs to be able to fetched within the acceptable domain. Otherwise,\n // cross-domain errors will be triggered.\n var source = '';\n var domain = '';\n try { domain = document.domain; } catch (e) {}\n if (url.indexOf(domain) !== -1) {\n source = loadSource(url);\n }\n sourceCache[url] = source ? source.split('\\n') : [];\n }\n\n return sourceCache[url];\n }\n\n /**\n * Tries to use an externally loaded copy of source code to determine\n * the name of a function by looking at the name of the variable it was\n * assigned to, if any.\n * @param {string} url URL of source code.\n * @param {(string|number)} lineNo Line number in source code.\n * @return {string} The function name, if discoverable.\n */\n function guessFunctionName(url, lineNo) {\n var reFunctionArgNames = /function ([^(]*)\\(([^)]*)\\)/,\n reGuessFunction = /['\"]?([0-9A-Za-z$_]+)['\"]?\\s*[:=]\\s*(function|eval|new Function)/,\n line = '',\n maxLines = 10,\n source = getSource(url),\n m;\n\n if (!source.length) {\n return UNKNOWN_FUNCTION;\n }\n\n // Walk backwards from the first line in the function until we find the line which\n // matches the pattern above, which is the function definition\n for (var i = 0; i < maxLines; ++i) {\n line = source[lineNo - i] + line;\n\n if (!_isUndefined(line)) {\n if ((m = reGuessFunction.exec(line))) {\n return m[1];\n } else if ((m = reFunctionArgNames.exec(line))) {\n return m[1];\n }\n }\n }\n\n return UNKNOWN_FUNCTION;\n }\n\n /**\n * Retrieves the surrounding lines from where an exception occurred.\n * @param {string} url URL of source code.\n * @param {(string|number)} line Line number in source code to centre\n * around for context.\n * @return {?Array.} Lines of source code.\n */\n function gatherContext(url, line) {\n var source = getSource(url);\n\n if (!source.length) {\n return null;\n }\n\n var context = [],\n // linesBefore & linesAfter are inclusive with the offending line.\n // if linesOfContext is even, there will be one extra line\n // *before* the offending line.\n linesBefore = Math.floor(TraceKit.linesOfContext / 2),\n // Add one extra line if linesOfContext is odd\n linesAfter = linesBefore + (TraceKit.linesOfContext % 2),\n start = Math.max(0, line - linesBefore - 1),\n end = Math.min(source.length, line + linesAfter - 1);\n\n line -= 1; // convert to 0-based index\n\n for (var i = start; i < end; ++i) {\n if (!_isUndefined(source[i])) {\n context.push(source[i]);\n }\n }\n\n return context.length > 0 ? context : null;\n }\n\n /**\n * Escapes special characters, except for whitespace, in a string to be\n * used inside a regular expression as a string literal.\n * @param {string} text The string.\n * @return {string} The escaped string literal.\n */\n function escapeRegExp(text) {\n return text.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#]/g, '\\\\$&');\n }\n\n /**\n * Escapes special characters in a string to be used inside a regular\n * expression as a string literal. Also ensures that HTML entities will\n * be matched the same as their literal friends.\n * @param {string} body The string.\n * @return {string} The escaped string.\n */\n function escapeCodeAsRegExpForMatchingInsideHTML(body) {\n return escapeRegExp(body).replace('<', '(?:<|<)').replace('>', '(?:>|>)').replace('&', '(?:&|&)').replace('\"', '(?:\"|")').replace(/\\s+/g, '\\\\s+');\n }\n\n /**\n * Determines where a code fragment occurs in the source code.\n * @param {RegExp} re The function definition.\n * @param {Array.} urls A list of URLs to search.\n * @return {?Object.} An object containing\n * the url, line, and column number of the defined function.\n */\n function findSourceInUrls(re, urls) {\n var source, m;\n for (var i = 0, j = urls.length; i < j; ++i) {\n // console.log('searching', urls[i]);\n if ((source = getSource(urls[i])).length) {\n source = source.join('\\n');\n if ((m = re.exec(source))) {\n // console.log('Found function in ' + urls[i]);\n\n return {\n 'url': urls[i],\n 'line': source.substring(0, m.index).split('\\n').length,\n 'column': m.index - source.lastIndexOf('\\n', m.index) - 1\n };\n }\n }\n }\n\n // console.log('no match');\n\n return null;\n }\n\n /**\n * Determines at which column a code fragment occurs on a line of the\n * source code.\n * @param {string} fragment The code fragment.\n * @param {string} url The URL to search.\n * @param {(string|number)} line The line number to examine.\n * @return {?number} The column number.\n */\n function findSourceInLine(fragment, url, line) {\n var source = getSource(url),\n re = new RegExp('\\\\b' + escapeRegExp(fragment) + '\\\\b'),\n m;\n\n line -= 1;\n\n if (source && source.length > line && (m = re.exec(source[line]))) {\n return m.index;\n }\n\n return null;\n }\n\n /**\n * Determines where a function was defined within the source code.\n * @param {(Function|string)} func A function reference or serialized\n * function definition.\n * @return {?Object.} An object containing\n * the url, line, and column number of the defined function.\n */\n function findSourceByFunctionBody(func) {\n if (_isUndefined(document)) {\n return;\n }\n\n var urls = [window.location.href],\n scripts = document.getElementsByTagName('script'),\n body,\n code = '' + func,\n codeRE = /^function(?:\\s+([\\w$]+))?\\s*\\(([\\w\\s,]*)\\)\\s*\\{\\s*(\\S[\\s\\S]*\\S)\\s*\\}\\s*$/,\n eventRE = /^function on([\\w$]+)\\s*\\(event\\)\\s*\\{\\s*(\\S[\\s\\S]*\\S)\\s*\\}\\s*$/,\n re,\n parts,\n result;\n\n for (var i = 0; i < scripts.length; ++i) {\n var script = scripts[i];\n if (script.src) {\n urls.push(script.src);\n }\n }\n\n if (!(parts = codeRE.exec(code))) {\n re = new RegExp(escapeRegExp(code).replace(/\\s+/g, '\\\\s+'));\n }\n\n // not sure if this is really necessary, but I don’t have a test\n // corpus large enough to confirm that and it was in the original.\n else {\n var name = parts[1] ? '\\\\s+' + parts[1] : '',\n args = parts[2].split(',').join('\\\\s*,\\\\s*');\n\n body = escapeRegExp(parts[3]).replace(/;$/, ';?'); // semicolon is inserted if the function ends with a comment.replace(/\\s+/g, '\\\\s+');\n re = new RegExp('function' + name + '\\\\s*\\\\(\\\\s*' + args + '\\\\s*\\\\)\\\\s*{\\\\s*' + body + '\\\\s*}');\n }\n\n // look for a normal function definition\n if ((result = findSourceInUrls(re, urls))) {\n return result;\n }\n\n // look for an old-school event handler function\n if ((parts = eventRE.exec(code))) {\n var event = parts[1];\n body = escapeCodeAsRegExpForMatchingInsideHTML(parts[2]);\n\n // look for a function defined in HTML as an onXXX handler\n re = new RegExp('on' + event + '=[\\\\\\'\"]\\\\s*' + body + '\\\\s*[\\\\\\'\"]', 'i');\n\n if ((result = findSourceInUrls(re, urls[0]))) {\n return result;\n }\n\n // look for ???\n re = new RegExp(body);\n\n if ((result = findSourceInUrls(re, urls))) {\n return result;\n }\n }\n\n return null;\n }\n\n // Contents of Exception in various browsers.\n //\n // SAFARI:\n // ex.message = Can't find variable: qq\n // ex.line = 59\n // ex.sourceId = 580238192\n // ex.sourceURL = http://...\n // ex.expressionBeginOffset = 96\n // ex.expressionCaretOffset = 98\n // ex.expressionEndOffset = 98\n // ex.name = ReferenceError\n //\n // FIREFOX:\n // ex.message = qq is not defined\n // ex.fileName = http://...\n // ex.lineNumber = 59\n // ex.columnNumber = 69\n // ex.stack = ...stack trace... (see the example below)\n // ex.name = ReferenceError\n //\n // CHROME:\n // ex.message = qq is not defined\n // ex.name = ReferenceError\n // ex.type = not_defined\n // ex.arguments = ['aa']\n // ex.stack = ...stack trace...\n //\n // INTERNET EXPLORER:\n // ex.message = ...\n // ex.name = ReferenceError\n //\n // OPERA:\n // ex.message = ...message... (see the example below)\n // ex.name = ReferenceError\n // ex.opera#sourceloc = 11 (pretty much useless, duplicates the info in ex.message)\n // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'\n\n /**\n * Computes stack trace information from the stack property.\n * Chrome and Gecko use this property.\n * @param {Error} ex\n * @return {?Object.} Stack trace information.\n */\n function computeStackTraceFromStackProp(ex) {\n if (!ex.stack) {\n return null;\n }\n\n var chrome = /^\\s*at (.*?) ?\\(((?:file|https?|blob|chrome-extension|native|eval).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i,\n gecko = /^\\s*(.*?)(?:\\((.*?)\\))?@?((?:file|https?|blob|chrome|\\[).*?)(?::(\\d+))?(?::(\\d+))?\\s*$/i,\n winjs = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:ms-appx|https?|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i,\n lines = ex.stack.split('\\n'),\n stack = [],\n parts,\n element,\n reference = /^(.*) is undefined$/.exec(ex.message);\n\n for (var i = 0, j = lines.length; i < j; ++i) {\n if ((parts = chrome.exec(lines[i]))) {\n var isNative = parts[2] && parts[2].indexOf('native') !== -1;\n element = {\n 'url': !isNative ? parts[2] : null,\n 'func': parts[1] || UNKNOWN_FUNCTION,\n 'args': isNative ? [parts[2]] : [],\n 'line': parts[3] ? +parts[3] : null,\n 'column': parts[4] ? +parts[4] : null\n };\n } else if ( parts = winjs.exec(lines[i]) ) {\n element = {\n 'url': parts[2],\n 'func': parts[1] || UNKNOWN_FUNCTION,\n 'args': [],\n 'line': +parts[3],\n 'column': parts[4] ? +parts[4] : null\n };\n } else if ((parts = gecko.exec(lines[i]))) {\n element = {\n 'url': parts[3],\n 'func': parts[1] || UNKNOWN_FUNCTION,\n 'args': parts[2] ? parts[2].split(',') : [],\n 'line': parts[4] ? +parts[4] : null,\n 'column': parts[5] ? +parts[5] : null\n };\n } else {\n continue;\n }\n\n if (!element.func && element.line) {\n element.func = guessFunctionName(element.url, element.line);\n }\n\n if (element.line) {\n element.context = gatherContext(element.url, element.line);\n }\n\n stack.push(element);\n }\n\n if (!stack.length) {\n return null;\n }\n\n if (stack[0] && stack[0].line && !stack[0].column && reference) {\n stack[0].column = findSourceInLine(reference[1], stack[0].url, stack[0].line);\n } else if (!stack[0].column && !_isUndefined(ex.columnNumber)) {\n // FireFox uses this awesome columnNumber property for its top frame\n // Also note, Firefox's column number is 0-based and everything else expects 1-based,\n // so adding 1\n stack[0].column = ex.columnNumber + 1;\n }\n\n return {\n 'mode': 'stack',\n 'name': ex.name,\n 'message': ex.message,\n 'stack': stack\n };\n }\n\n /**\n * Computes stack trace information from the stacktrace property.\n * Opera 10+ uses this property.\n * @param {Error} ex\n * @return {?Object.} Stack trace information.\n */\n function computeStackTraceFromStacktraceProp(ex) {\n // Access and store the stacktrace property before doing ANYTHING\n // else to it because Opera is not very good at providing it\n // reliably in other circumstances.\n var stacktrace = ex.stacktrace;\n if (!stacktrace) {\n return;\n }\n\n var opera10Regex = / line (\\d+).*script (?:in )?(\\S+)(?:: in function (\\S+))?$/i,\n opera11Regex = / line (\\d+), column (\\d+)\\s*(?:in (?:]+)>|([^\\)]+))\\((.*)\\))? in (.*):\\s*$/i,\n lines = stacktrace.split('\\n'),\n stack = [],\n parts;\n\n for (var line = 0; line < lines.length; line += 2) {\n var element = null;\n if ((parts = opera10Regex.exec(lines[line]))) {\n element = {\n 'url': parts[2],\n 'line': +parts[1],\n 'column': null,\n 'func': parts[3],\n 'args':[]\n };\n } else if ((parts = opera11Regex.exec(lines[line]))) {\n element = {\n 'url': parts[6],\n 'line': +parts[1],\n 'column': +parts[2],\n 'func': parts[3] || parts[4],\n 'args': parts[5] ? parts[5].split(',') : []\n };\n }\n\n if (element) {\n if (!element.func && element.line) {\n element.func = guessFunctionName(element.url, element.line);\n }\n if (element.line) {\n try {\n element.context = gatherContext(element.url, element.line);\n } catch (exc) {}\n }\n\n if (!element.context) {\n element.context = [lines[line + 1]];\n }\n\n stack.push(element);\n }\n }\n\n if (!stack.length) {\n return null;\n }\n\n return {\n 'mode': 'stacktrace',\n 'name': ex.name,\n 'message': ex.message,\n 'stack': stack\n };\n }\n\n /**\n * NOT TESTED.\n * Computes stack trace information from an error message that includes\n * the stack trace.\n * Opera 9 and earlier use this method if the option to show stack\n * traces is turned on in opera:config.\n * @param {Error} ex\n * @return {?Object.} Stack information.\n */\n function computeStackTraceFromOperaMultiLineMessage(ex) {\n // TODO: Clean this function up\n // Opera includes a stack trace into the exception message. An example is:\n //\n // Statement on line 3: Undefined variable: undefinedFunc\n // Backtrace:\n // Line 3 of linked script file://localhost/Users/andreyvit/Projects/TraceKit/javascript-client/sample.js: In function zzz\n // undefinedFunc(a);\n // Line 7 of inline#1 script in file://localhost/Users/andreyvit/Projects/TraceKit/javascript-client/sample.html: In function yyy\n // zzz(x, y, z);\n // Line 3 of inline#1 script in file://localhost/Users/andreyvit/Projects/TraceKit/javascript-client/sample.html: In function xxx\n // yyy(a, a, a);\n // Line 1 of function script\n // try { xxx('hi'); return false; } catch(ex) { TraceKit.report(ex); }\n // ...\n\n var lines = ex.message.split('\\n');\n if (lines.length < 4) {\n return null;\n }\n\n var lineRE1 = /^\\s*Line (\\d+) of linked script ((?:file|https?|blob)\\S+)(?:: in function (\\S+))?\\s*$/i,\n lineRE2 = /^\\s*Line (\\d+) of inline#(\\d+) script in ((?:file|https?|blob)\\S+)(?:: in function (\\S+))?\\s*$/i,\n lineRE3 = /^\\s*Line (\\d+) of function script\\s*$/i,\n stack = [],\n scripts = document.getElementsByTagName('script'),\n inlineScriptBlocks = [],\n parts;\n\n for (var s in scripts) {\n if (_has(scripts, s) && !scripts[s].src) {\n inlineScriptBlocks.push(scripts[s]);\n }\n }\n\n for (var line = 2; line < lines.length; line += 2) {\n var item = null;\n if ((parts = lineRE1.exec(lines[line]))) {\n item = {\n 'url': parts[2],\n 'func': parts[3],\n 'args': [],\n 'line': +parts[1],\n 'column': null\n };\n } else if ((parts = lineRE2.exec(lines[line]))) {\n item = {\n 'url': parts[3],\n 'func': parts[4],\n 'args': [],\n 'line': +parts[1],\n 'column': null // TODO: Check to see if inline#1 (+parts[2]) points to the script number or column number.\n };\n var relativeLine = (+parts[1]); // relative to the start of the + + ``` - **Bower:** diff --git a/appveyor.yml b/appveyor.yml index ccb263e1..2e0e850f 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,4 +1,4 @@ -version: 1.2.{build} +version: 1.3.{build} install: - ps: Install-Product node 4 diff --git a/bower.json b/bower.json index 3d2f2f3c..1d287763 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "exceptionless", - "version": "1.2.0", + "version": "1.3.0", "description": "JavaScript client for Exceptionless", "license": "Apache-2.0", "main": "dist/exceptionless.js", diff --git a/dist/exceptionless.js b/dist/exceptionless.js index 8c37fb79..0565ea4e 100644 --- a/dist/exceptionless.js +++ b/dist/exceptionless.js @@ -1964,7 +1964,7 @@ var Configuration = (function () { }; Object.defineProperty(Configuration.prototype, "userAgent", { get: function () { - return 'exceptionless-js/1.2.0'; + return 'exceptionless-js/1.3.0'; }, enumerable: true, configurable: true diff --git a/dist/exceptionless.min.js b/dist/exceptionless.min.js index e687ec8b..e1e9f1b5 100644 --- a/dist/exceptionless.min.js +++ b/dist/exceptionless.min.js @@ -1,3 +1,3 @@ -!function(e,t){function n(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function r(e){return"undefined"==typeof e}if(e){var i={},o=e.TraceKit,s=[].slice,u="?";i.noConflict=function(){return e.TraceKit=o,i},i.wrap=function(e){function t(){try{return e.apply(this,arguments)}catch(t){throw i.report(t),t}}return t},i.report=function(){function t(e){a(),g.push(e)}function r(e){for(var t=g.length-1;t>=0;--t)g[t]===e&&g.splice(t,1)}function o(e,t){var r=null;if(!t||i.collectWindowErrors){for(var o in g)if(n(g,o))try{g[o].apply(null,[e].concat(s.call(arguments,2)))}catch(u){r=u}if(r)throw r}}function u(e,t,n,r,s){var u=null;if(v)i.computeStackTrace.augmentStackTraceWithInitialElement(v,t,n,e),c();else if(s)u=i.computeStackTrace(s),o(u,!0);else{var a={url:t,line:n,column:r};a.func=i.computeStackTrace.guessFunctionName(a.url,a.line),a.context=i.computeStackTrace.gatherContext(a.url,a.line),u={mode:"onerror",message:e,stack:[a]},o(u,!0)}return f?f.apply(this,arguments):!1}function a(){p!==!0&&(f=e.onerror,e.onerror=u,p=!0)}function c(){var e=v,t=h;h=null,v=null,d=null,o.apply(null,[e,!1].concat(t))}function l(t){if(v){if(d===t)return;c()}var n=i.computeStackTrace(t);throw v=n,d=t,h=s.call(arguments,1),e.setTimeout(function(){d===t&&c()},n.incomplete?2e3:0),t}var f,p,g=[],h=null,d=null,v=null;return l.subscribe=t,l.unsubscribe=r,l}(),i.computeStackTrace=function(){function t(t){if(!i.remoteFetching)return"";try{var n=function(){try{return new e.XMLHttpRequest}catch(t){return new e.ActiveXObject("Microsoft.XMLHTTP")}},r=n();return r.open("GET",t,!1),r.send(""),r.responseText}catch(o){return""}}function o(e){if("string"!=typeof e)return[];if(!n(E,e)){var r="",i="";try{i=document.domain}catch(o){}-1!==e.indexOf(i)&&(r=t(e)),E[e]=r?r.split("\n"):[]}return E[e]}function s(e,t){var n,i=/function ([^(]*)\(([^)]*)\)/,s=/['"]?([0-9A-Za-z$_]+)['"]?\s*[:=]\s*(function|eval|new Function)/,a="",c=10,l=o(e);if(!l.length)return u;for(var f=0;c>f;++f)if(a=l[t-f]+a,!r(a)){if(n=s.exec(a))return n[1];if(n=i.exec(a))return n[1]}return u}function a(e,t){var n=o(e);if(!n.length)return null;var s=[],u=Math.floor(i.linesOfContext/2),a=u+i.linesOfContext%2,c=Math.max(0,t-u-1),l=Math.min(n.length,t+a-1);t-=1;for(var f=c;l>f;++f)r(n[f])||s.push(n[f]);return s.length>0?s:null}function c(e){return e.replace(/[\-\[\]{}()*+?.,\\\^$|#]/g,"\\$&")}function l(e){return c(e).replace("<","(?:<|<)").replace(">","(?:>|>)").replace("&","(?:&|&)").replace('"','(?:"|")').replace(/\s+/g,"\\s+")}function f(e,t){for(var n,r,i=0,s=t.length;s>i;++i)if((n=o(t[i])).length&&(n=n.join("\n"),r=e.exec(n)))return{url:t[i],line:n.substring(0,r.index).split("\n").length,column:r.index-n.lastIndexOf("\n",r.index)-1};return null}function p(e,t,n){var r,i=o(t),s=new RegExp("\\b"+c(e)+"\\b");return n-=1,i&&i.length>n&&(r=s.exec(i[n]))?r.index:null}function g(t){if(!r(document)){for(var n,i,o,s,u=[e.location.href],a=document.getElementsByTagName("script"),p=""+t,g=/^function(?:\s+([\w$]+))?\s*\(([\w\s,]*)\)\s*\{\s*(\S[\s\S]*\S)\s*\}\s*$/,h=/^function on([\w$]+)\s*\(event\)\s*\{\s*(\S[\s\S]*\S)\s*\}\s*$/,d=0;dh;++h){if(t=i.exec(l[h])){var v=t[2]&&-1!==t[2].indexOf("native");n={url:v?null:t[2],func:t[1]||u,args:v?[t[2]]:[],line:t[3]?+t[3]:null,column:t[4]?+t[4]:null}}else if(t=c.exec(l[h]))n={url:t[2],func:t[1]||u,args:[],line:+t[3],column:t[4]?+t[4]:null};else{if(!(t=o.exec(l[h])))continue;n={url:t[3],func:t[1]||u,args:t[2]?t[2].split(","):[],line:t[4]?+t[4]:null,column:t[5]?+t[5]:null}}!n.func&&n.line&&(n.func=s(n.url,n.line)),n.line&&(n.context=a(n.url,n.line)),f.push(n)}return f.length?(f[0]&&f[0].line&&!f[0].column&&g?f[0].column=p(g[1],f[0].url,f[0].line):f[0].column||r(e.columnNumber)||(f[0].column=e.columnNumber+1),{mode:"stack",name:e.name,message:e.message,stack:f}):null}function d(e){var t=e.stacktrace;if(t){for(var n,r=/ line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i,i=/ line (\d+), column (\d+)\s*(?:in (?:]+)>|([^\)]+))\((.*)\))? in (.*):\s*$/i,o=t.split("\n"),u=[],c=0;c=0&&(y.line=b+S.substring(0,E).split("\n").length)}}}else if(i=p.exec(r[m])){var w=e.location.href.replace(/#.*$/,""),_=new RegExp(l(r[m+1])),P=f(_,[w]);y={url:w,func:"",args:[],line:P?P.line:i[1],column:null}}if(y){y.func||(y.func=s(y.url,y.line));var I=a(y.url,y.line),T=I?I[Math.floor(I.length/2)]:null;I&&T.replace(/^\s*/,"")===r[m+1].replace(/^\s*/,"")?y.context=I:y.context=[r[m+1]],g.push(y)}}return g.length?{mode:"multiline",name:t.name,message:r[0],stack:g}:null}function m(e,t,n,r){var i={url:t,line:n};if(i.url&&i.line){e.incomplete=!1,i.func||(i.func=s(i.url,i.line)),i.context||(i.context=a(i.url,i.line));var o=/ '([^']+)' /.exec(r);if(o&&(i.column=p(o[1],i.url,i.line)),e.stack.length>0&&e.stack[0].url===i.url){if(e.stack[0].line===i.line)return!1;if(!e.stack[0].line&&e.stack[0].func===i.func)return e.stack[0].line=i.line,e.stack[0].context=i.context,!1}return e.stack.unshift(i),e.partial=!0,!0}return e.incomplete=!0,!1}function y(e,t){for(var n,r,o,a=/function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,c=[],l={},f=!1,h=y.caller;h&&!f;h=h.caller)if(h!==b&&h!==i.report){if(r={url:null,func:u,args:[],line:null,column:null},h.name?r.func=h.name:(n=a.exec(h.toString()))&&(r.func=n[1]),"undefined"==typeof r.func)try{r.func=n.input.substring(0,n.input.indexOf("{"))}catch(d){}if(o=g(h)){r.url=o.url,r.line=o.line,r.func===u&&(r.func=s(r.url,r.line));var v=/ '([^']+)' /.exec(e.message||e.description);v&&(r.column=p(v[1],o.url,o.line))}l[""+h]?f=!0:l[""+h]=!0,c.push(r)}t&&c.splice(0,t);var x={mode:"callers",name:e.name,message:e.message,stack:c};return m(x,e.sourceURL||e.fileName,e.line||e.lineNumber,e.message||e.description),x}function b(e,t){var n=null;t=null==t?0:+t;try{if(n=d(e))return n}catch(r){if(S)throw r}try{if(n=h(e))return n}catch(r){if(S)throw r}try{if(n=v(e))return n}catch(r){if(S)throw r}try{if(n=y(e,t+1))return n}catch(r){if(S)throw r}return{mode:"failed"}}function x(e){e=(null==e?0:+e)+1;try{throw new Error}catch(t){return b(t,e+1)}}var S=!1,E={};return b.augmentStackTraceWithInitialElement=m,b.guessFunctionName=s,b.gatherContext=a,b.ofCaller=x,b.getSource=o,b}(),i.extendToAsynchronousCallbacks=function(){var t=function(t){var n=e[t];e[t]=function(){var e=s.call(arguments),t=e[0];return"function"==typeof t&&(e[0]=i.wrap(t)),n.apply?n.apply(this,e):n(e[0],e[1])}};t("setTimeout"),t("setInterval")},i.remoteFetching||(i.remoteFetching=!0),i.collectWindowErrors||(i.collectWindowErrors=!0),(!i.linesOfContext||i.linesOfContext<1)&&(i.linesOfContext=11),e.TraceKit=i}}("undefined"!=typeof window?window:global),function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t(require,exports,module):e.exceptionless=t()}(this,function(e,t,n){function r(){if(!document||!document.getElementsByTagName)return null;for(var e=document.getElementsByTagName("script"),t=0;t-1)return v.parseQueryString(e[t].src.split("?").pop());return null}function i(e,t){var n=S["default"].createUnhandledException(new Error(e.message||(t||{}).status||"Script error"),"onerror");n.pluginContextData["@@_TraceKit.StackTrace"]=e,n.submit()}if(!t)var t={};var o=function(){function e(){}return e.onChanged=function(e){!!e&&this._handlers.push(e)},e.applySavedServerSettings=function(e){e.log.info("Applying saved settings."),e.settings=v.merge(e.settings,this.getSavedServerSettings(e)),this.changed(e)},e.checkVersion=function(e,t){if(e){var n=parseInt(t.storage.get(this._configPath+"-version"),10);(isNaN(n)||e>n)&&(t.log.info("Updating settings from v"+(isNaN(n)?0:n)+" to v"+e),this.updateSettings(t))}},e.updateSettings=function(t){var n=this;return t.isValid?void t.submissionClient.getSettings(t,function(r){if(r&&r.success&&r.settings){t.settings=v.merge(t.settings,r.settings);var i=e.getSavedServerSettings(t);for(var o in i)r.settings[o]||delete t.settings[o];var s=e._configPath;t.storage.save(s+"-version",r.settingsVersion),t.storage.save(s,r.settings),t.log.info("Updated settings"),n.changed(t)}}):void t.log.error("Unable to update settings: ApiKey is not set.")},e.changed=function(e){for(var t=this._handlers,n=0;n-1;o--)i[o]=n(r[o],t||o=e)&&(e=5),r.log.info("Suspending processing for "+e+" minutes."),this._suspendProcessingUntil=new Date((new Date).getTime()+6e4*e),t&&(this._discardQueuedItemsUntil=new Date((new Date).getTime()+6e4*e)),n&&this.removeEvents(r.storage.getList("ex-q"))},e.prototype.areQueuedItemsDiscarded=function(){return this._discardQueuedItemsUntil&&this._discardQueuedItemsUntil>new Date},e.prototype.ensureQueueTimer=function(){var e=this;this._queueTimer||(this._queueTimer=setInterval(function(){return e.onProcessQueue()},1e4))},e.prototype.isQueueProcessingSuspended=function(){return this._suspendProcessingUntil&&this._suspendProcessingUntil>new Date},e.prototype.onProcessQueue=function(){this.isQueueProcessingSuspended()||this._processingQueue||this.process()},e.prototype.processSubmissionResponse=function(e,t){var n="The event will not be submitted.",r=this._config,i=r.log;if(e.success)return i.info("Sent "+t.length+" events."),void this.removeEvents(t);if(e.serviceUnavailable)return i.error("Server returned service unavailable."),void this.suspendProcessing();if(e.paymentRequired)return i.info("Too many events have been submitted, please upgrade your plan."),void this.suspendProcessing(null,!0,!0);if(e.unableToAuthenticate)return i.info("Unable to authenticate, please check your configuration. "+n),this.suspendProcessing(15),void this.removeEvents(t);if(e.notFound||e.badRequest)return i.error("Error while trying to submit data: "+e.message),this.suspendProcessing(240),void this.removeEvents(t);if(e.requestEntityTooLarge){var o="Event submission discarded for being too large.";return void(r.submissionBatchSize>1?(i.error(o+" Retrying with smaller batch size."),r.submissionBatchSize=Math.max(1,Math.round(r.submissionBatchSize/1.5))):(i.error(o+" "+n),this.removeEvents(t)))}e.success||(i.error("Error submitting events: "+(e.message||"Please check the network tab for more info.")),this.suspendProcessing())},e.prototype.removeEvents=function(e){for(var t=0;t<(e||[]).length;t++)this._config.storage.remove(e[t].path)},e}();t.DefaultEventQueue=g;var h=function(){function e(e){this._items=[],this._maxItems=e>0?e:250}return e.prototype.save=function(e,t){return e&&t?(this.remove(e),this._items.push({created:(new Date).getTime(),path:e,value:t})>this._maxItems&&this._items.shift(),!0):!1},e.prototype.get=function(e){var t=e?this.getList("^"+e+"$",1)[0]:null;return t?t.value:null},e.prototype.getList=function(e,t){var n=this._items;if(!e)return n.slice(0,t);for(var r=new RegExp(e),i=[],o=0;o=t));o++);return i},e.prototype.remove=function(e){if(e){var t=this.getList("^"+e+"$",1)[0];t&&this._items.splice(this._items.indexOf(t),1)}},e}();t.InMemoryStorage=h;var d=function(){function e(){this.configurationVersionHeader="x-exceptionless-configversion"}return e.prototype.postEvents=function(e,t,n,r){var i=JSON.stringify(e),o=this.createRequest(t,"POST","/api/v2/events",i),s=this.createSubmissionCallback(t,n);return t.submissionAdapter.sendRequest(o,s,r)},e.prototype.postUserDescription=function(e,t,n,r){var i="/api/v2/events/by-ref/"+encodeURIComponent(e)+"/user-description",o=JSON.stringify(t),s=this.createRequest(n,"POST",i,o),u=this.createSubmissionCallback(n,r);return n.submissionAdapter.sendRequest(s,u)},e.prototype.getSettings=function(e,t){var n=this.createRequest(e,"GET","/api/v2/projects/config"),r=function(n,r,i,o){if(200!==n)return t(new q(!1,null,-1,null,r));var s;try{s=JSON.parse(i)}catch(u){e.log.error("Unable to parse settings: '"+i+"'")}return!s||isNaN(s.version)?t(new q(!1,null,-1,null,"Invalid configuration settings.")):void t(new q(!0,s.settings||{},s.version))};return e.submissionAdapter.sendRequest(n,r)},e.prototype.createRequest=function(e,t,n,r){return void 0===r&&(r=null),{method:t,path:n,data:r,serverUrl:e.serverUrl,apiKey:e.apiKey,userAgent:e.userAgent}},e.prototype.createSubmissionCallback=function(e,t){var n=this;return function(r,i,s,u){var a=u&&parseInt(u[n.configurationVersionHeader],10);o.checkVersion(a,e),t(new x(r,i))}},e}();t.DefaultSubmissionClient=d;var v=function(){function e(){}return e.addRange=function(e){for(var t=[],n=1;n0?n[0]:null},e.parseQueryString=function(t,n){if(!t||0===t.length)return null;var r=t.split("&");if(0===r.length)return null;for(var i={},o=0;o=10},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"serverUrl",{get:function(){return this._serverUrl},set:function(e){e&&(this._serverUrl=e,this.log.info("serverUrl: "+this._serverUrl))},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"dataExclusions",{get:function(){var e=this.settings["@@DataExclusions"];return this._dataExclusions.concat(e&&e.split(",")||[])},enumerable:!0,configurable:!0}),e.prototype.addDataExclusions=function(){for(var e=[],t=0;tt.priority?1:0})},enumerable:!0,configurable:!0}),e.prototype.addPlugin=function(e,t,n){var r=n?{name:e,priority:t,run:n}:e;if(!r||!r.run)return void this.log.error("Add plugin failed: Run method not defined");r.name||(r.name=v.guid()),r.priority||(r.priority=0);for(var i=!1,o=this._plugins,s=0;se||e>90)throw new Error("Must be a valid latitude value between -90.0 and 90.0.");if(-180>t||t>180)throw new Error("Must be a valid longitude value between -180.0 and 180.0.");return this.target.geo=e+","+t,this},e.prototype.setUserIdentity=function(e,t){var n="string"!=typeof e?e:{identity:e,name:t};return n&&(n.identity||n.name)?(this.setProperty("@user",n),this):this},e.prototype.setValue=function(e){return e&&(this.target.value=e),this},e.prototype.addTags=function(){for(var e=[],t=0;t100)return!1;for(var t=0;t=48&&57>=n,i=n>=65&&90>=n||n>=97&&122>=n,o=45===n;if(!r&&!i&&!o)return!1}return!0},e}();t.EventBuilder=y;var b=function(){function e(){}return e.prototype.setException=function(e){e&&(this["@@_Exception"]=e)},Object.defineProperty(e.prototype,"hasException",{get:function(){return!!this["@@_Exception"]},enumerable:!0,configurable:!0}),e.prototype.getException=function(){return this["@@_Exception"]||null},e.prototype.markAsUnhandledError=function(){this["@@_IsUnhandledError"]=!0},Object.defineProperty(e.prototype,"isUnhandledError",{get:function(){return!!this["@@_IsUnhandledError"]},enumerable:!0,configurable:!0}),e.prototype.setSubmissionMethod=function(e){e&&(this["@@_SubmissionMethod"]=e)},e.prototype.getSubmissionMethod=function(){return this["@@_SubmissionMethod"]||null},e}();t.ContextData=b;var x=function(){function e(e,t){this.success=!1,this.badRequest=!1,this.serviceUnavailable=!1,this.paymentRequired=!1,this.unableToAuthenticate=!1,this.notFound=!1,this.requestEntityTooLarge=!1,this.statusCode=e,this.message=t,this.success=e>=200&&299>=e,this.badRequest=400===e,this.serviceUnavailable=503===e,this.paymentRequired=402===e,this.unableToAuthenticate=401===e||403===e,this.notFound=404===e,this.requestEntityTooLarge=413===e}return e}();t.SubmissionResponse=x;var S=function(){function e(e,t){"object"!=typeof e?this.config=new m(e):this.config=new m({apiKey:e,serverUrl:t})}return e.prototype.createException=function(e){var t=new b;return t.setException(e),this.createEvent(t).setType("error")},e.prototype.submitException=function(e,t){this.createException(e).submit(t)},e.prototype.createUnhandledException=function(e,t){var n=this.createException(e);return n.pluginContextData.markAsUnhandledError(),n.pluginContextData.setSubmissionMethod(t),n},e.prototype.submitUnhandledException=function(e,t,n){this.createUnhandledException(e,t).submit(n)},e.prototype.createFeatureUsage=function(e){return this.createEvent().setType("usage").setSource(e)},e.prototype.submitFeatureUsage=function(e,t){this.createFeatureUsage(e).submit(t)},e.prototype.createLog=function(e,t,n){var r=this.createEvent().setType("log");if(t&&n)r=r.setSource(e).setMessage(t).setProperty("@level",n);else if(t)r=r.setSource(e).setMessage(t);else{var i=arguments.callee.caller;r=r.setSource(i&&i.name).setMessage(e)}return r},e.prototype.submitLog=function(e,t,n,r){this.createLog(e,t,n).submit(r)},e.prototype.createNotFound=function(e){return this.createEvent().setType("404").setSource(e)},e.prototype.submitNotFound=function(e,t){this.createNotFound(e).submit(t)},e.prototype.createSessionStart=function(){return this.createEvent().setType("session")},e.prototype.submitSessionStart=function(e){this.createSessionStart().submit(e)},e.prototype.createSessionEnd=function(){return this.createEvent().setType("sessionend")},e.prototype.submitSessionEnd=function(e){this.createSessionEnd().submit(e)},e.prototype.createSessionHeartbeat=function(){return this.createEvent().setType("heartbeat")},e.prototype.submitSessionHeartbeat=function(e){this.createSessionHeartbeat().submit(e)},e.prototype.createEvent=function(e){return new y({date:new Date},this,e)},e.prototype.submitEvent=function(e,t,n){function r(e){return e&&(e.cancelled=!0),!!n&&n(e)}var i=new c(this,e,t);return e?this.config.enabled?(e.data||(e.data={}),e.tags&&e.tags.length||(e.tags=[]),void l.run(i,function(e){var t=e.event;if(!e.cancelled){t.type&&0!==t.type.length||(t.type="log"),t.date||(t.date=new Date);var r=e.client.config;r.queue.enqueue(t),t.reference_id&&t.reference_id.length>0&&(e.log.info("Setting last reference id '"+t.reference_id+"'"),r.lastReferenceIdManager.setLast(t.reference_id))}!!n&&n(e)})):(this.config.log.info("Event submission is currently disabled."),r(i)):r(i)},e.prototype.updateUserEmailAndDescription=function(e,t,n,r){var i=this;if(!(e&&t&&n&&this.config.enabled))return!!r&&r(new x(500,"cancelled"));var o={email_address:t,description:n};this.config.submissionClient.postUserDescription(e,o,this.config,function(t){t.success||i.config.log.error("Failed to submit user email and description for event '"+e+"': "+t.statusCode+" "+t.message),!!r&&r(t)})},e.prototype.getLastReferenceId=function(){return this.config.lastReferenceIdManager.getLast()},Object.defineProperty(e,"default",{get:function(){return null===e._instance&&(e._instance=new e(null)),e._instance},enumerable:!0,configurable:!0}),e._instance=null,e}();t.ExceptionlessClient=S;var E=function(){function e(){this.priority=10,this.name="ConfigurationDefaultsPlugin"}return e.prototype.run=function(e,t){for(var n=e.client.config,r=n.defaultTags||[],i=0;i=0;--t)g[t]===e&&g.splice(t,1)}function o(e,t){var r=null;if(!t||i.collectWindowErrors){for(var o in g)if(n(g,o))try{g[o].apply(null,[e].concat(s.call(arguments,2)))}catch(u){r=u}if(r)throw r}}function u(e,t,n,r,s){var u=null;if(v)i.computeStackTrace.augmentStackTraceWithInitialElement(v,t,n,e),c();else if(s)u=i.computeStackTrace(s),o(u,!0);else{var a={url:t,line:n,column:r};a.func=i.computeStackTrace.guessFunctionName(a.url,a.line),a.context=i.computeStackTrace.gatherContext(a.url,a.line),u={mode:"onerror",message:e,stack:[a]},o(u,!0)}return f?f.apply(this,arguments):!1}function a(){p!==!0&&(f=e.onerror,e.onerror=u,p=!0)}function c(){var e=v,t=h;h=null,v=null,d=null,o.apply(null,[e,!1].concat(t))}function l(t){if(v){if(d===t)return;c()}var n=i.computeStackTrace(t);throw v=n,d=t,h=s.call(arguments,1),e.setTimeout(function(){d===t&&c()},n.incomplete?2e3:0),t}var f,p,g=[],h=null,d=null,v=null;return l.subscribe=t,l.unsubscribe=r,l}(),i.computeStackTrace=function(){function t(t){if(!i.remoteFetching)return"";try{var n=function(){try{return new e.XMLHttpRequest}catch(t){return new e.ActiveXObject("Microsoft.XMLHTTP")}},r=n();return r.open("GET",t,!1),r.send(""),r.responseText}catch(o){return""}}function o(e){if("string"!=typeof e)return[];if(!n(E,e)){var r="",i="";try{i=document.domain}catch(o){}-1!==e.indexOf(i)&&(r=t(e)),E[e]=r?r.split("\n"):[]}return E[e]}function s(e,t){var n,i=/function ([^(]*)\(([^)]*)\)/,s=/['"]?([0-9A-Za-z$_]+)['"]?\s*[:=]\s*(function|eval|new Function)/,a="",c=10,l=o(e);if(!l.length)return u;for(var f=0;c>f;++f)if(a=l[t-f]+a,!r(a)){if(n=s.exec(a))return n[1];if(n=i.exec(a))return n[1]}return u}function a(e,t){var n=o(e);if(!n.length)return null;var s=[],u=Math.floor(i.linesOfContext/2),a=u+i.linesOfContext%2,c=Math.max(0,t-u-1),l=Math.min(n.length,t+a-1);t-=1;for(var f=c;l>f;++f)r(n[f])||s.push(n[f]);return s.length>0?s:null}function c(e){return e.replace(/[\-\[\]{}()*+?.,\\\^$|#]/g,"\\$&")}function l(e){return c(e).replace("<","(?:<|<)").replace(">","(?:>|>)").replace("&","(?:&|&)").replace('"','(?:"|")').replace(/\s+/g,"\\s+")}function f(e,t){for(var n,r,i=0,s=t.length;s>i;++i)if((n=o(t[i])).length&&(n=n.join("\n"),r=e.exec(n)))return{url:t[i],line:n.substring(0,r.index).split("\n").length,column:r.index-n.lastIndexOf("\n",r.index)-1};return null}function p(e,t,n){var r,i=o(t),s=new RegExp("\\b"+c(e)+"\\b");return n-=1,i&&i.length>n&&(r=s.exec(i[n]))?r.index:null}function g(t){if(!r(document)){for(var n,i,o,s,u=[e.location.href],a=document.getElementsByTagName("script"),p=""+t,g=/^function(?:\s+([\w$]+))?\s*\(([\w\s,]*)\)\s*\{\s*(\S[\s\S]*\S)\s*\}\s*$/,h=/^function on([\w$]+)\s*\(event\)\s*\{\s*(\S[\s\S]*\S)\s*\}\s*$/,d=0;dh;++h){if(t=i.exec(l[h])){var v=t[2]&&-1!==t[2].indexOf("native");n={url:v?null:t[2],func:t[1]||u,args:v?[t[2]]:[],line:t[3]?+t[3]:null,column:t[4]?+t[4]:null}}else if(t=c.exec(l[h]))n={url:t[2],func:t[1]||u,args:[],line:+t[3],column:t[4]?+t[4]:null};else{if(!(t=o.exec(l[h])))continue;n={url:t[3],func:t[1]||u,args:t[2]?t[2].split(","):[],line:t[4]?+t[4]:null,column:t[5]?+t[5]:null}}!n.func&&n.line&&(n.func=s(n.url,n.line)),n.line&&(n.context=a(n.url,n.line)),f.push(n)}return f.length?(f[0]&&f[0].line&&!f[0].column&&g?f[0].column=p(g[1],f[0].url,f[0].line):f[0].column||r(e.columnNumber)||(f[0].column=e.columnNumber+1),{mode:"stack",name:e.name,message:e.message,stack:f}):null}function d(e){var t=e.stacktrace;if(t){for(var n,r=/ line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i,i=/ line (\d+), column (\d+)\s*(?:in (?:]+)>|([^\)]+))\((.*)\))? in (.*):\s*$/i,o=t.split("\n"),u=[],c=0;c=0&&(y.line=b+S.substring(0,E).split("\n").length)}}}else if(i=p.exec(r[m])){var w=e.location.href.replace(/#.*$/,""),_=new RegExp(l(r[m+1])),P=f(_,[w]);y={url:w,func:"",args:[],line:P?P.line:i[1],column:null}}if(y){y.func||(y.func=s(y.url,y.line));var I=a(y.url,y.line),T=I?I[Math.floor(I.length/2)]:null;I&&T.replace(/^\s*/,"")===r[m+1].replace(/^\s*/,"")?y.context=I:y.context=[r[m+1]],g.push(y)}}return g.length?{mode:"multiline",name:t.name,message:r[0],stack:g}:null}function m(e,t,n,r){var i={url:t,line:n};if(i.url&&i.line){e.incomplete=!1,i.func||(i.func=s(i.url,i.line)),i.context||(i.context=a(i.url,i.line));var o=/ '([^']+)' /.exec(r);if(o&&(i.column=p(o[1],i.url,i.line)),e.stack.length>0&&e.stack[0].url===i.url){if(e.stack[0].line===i.line)return!1;if(!e.stack[0].line&&e.stack[0].func===i.func)return e.stack[0].line=i.line,e.stack[0].context=i.context,!1}return e.stack.unshift(i),e.partial=!0,!0}return e.incomplete=!0,!1}function y(e,t){for(var n,r,o,a=/function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,c=[],l={},f=!1,h=y.caller;h&&!f;h=h.caller)if(h!==b&&h!==i.report){if(r={url:null,func:u,args:[],line:null,column:null},h.name?r.func=h.name:(n=a.exec(h.toString()))&&(r.func=n[1]),"undefined"==typeof r.func)try{r.func=n.input.substring(0,n.input.indexOf("{"))}catch(d){}if(o=g(h)){r.url=o.url,r.line=o.line,r.func===u&&(r.func=s(r.url,r.line));var v=/ '([^']+)' /.exec(e.message||e.description);v&&(r.column=p(v[1],o.url,o.line))}l[""+h]?f=!0:l[""+h]=!0,c.push(r)}t&&c.splice(0,t);var x={mode:"callers",name:e.name,message:e.message,stack:c};return m(x,e.sourceURL||e.fileName,e.line||e.lineNumber,e.message||e.description),x}function b(e,t){var n=null;t=null==t?0:+t;try{if(n=d(e))return n}catch(r){if(S)throw r}try{if(n=h(e))return n}catch(r){if(S)throw r}try{if(n=v(e))return n}catch(r){if(S)throw r}try{if(n=y(e,t+1))return n}catch(r){if(S)throw r}return{mode:"failed"}}function x(e){e=(null==e?0:+e)+1;try{throw new Error}catch(t){return b(t,e+1)}}var S=!1,E={};return b.augmentStackTraceWithInitialElement=m,b.guessFunctionName=s,b.gatherContext=a,b.ofCaller=x,b.getSource=o,b}(),i.extendToAsynchronousCallbacks=function(){var t=function(t){var n=e[t];e[t]=function(){var e=s.call(arguments),t=e[0];return"function"==typeof t&&(e[0]=i.wrap(t)),n.apply?n.apply(this,e):n(e[0],e[1])}};t("setTimeout"),t("setInterval")},i.remoteFetching||(i.remoteFetching=!0),i.collectWindowErrors||(i.collectWindowErrors=!0),(!i.linesOfContext||i.linesOfContext<1)&&(i.linesOfContext=11),e.TraceKit=i}}("undefined"!=typeof window?window:global),function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t(require,exports,module):e.exceptionless=t()}(this,function(e,t,n){function r(){if(!document||!document.getElementsByTagName)return null;for(var e=document.getElementsByTagName("script"),t=0;t-1)return v.parseQueryString(e[t].src.split("?").pop());return null}function i(e,t){var n=S["default"].createUnhandledException(new Error(e.message||(t||{}).status||"Script error"),"onerror");n.pluginContextData["@@_TraceKit.StackTrace"]=e,n.submit()}if(!t)var t={};var o=function(){function e(){}return e.onChanged=function(e){!!e&&this._handlers.push(e)},e.applySavedServerSettings=function(e){e.log.info("Applying saved settings."),e.settings=v.merge(e.settings,this.getSavedServerSettings(e)),this.changed(e)},e.checkVersion=function(e,t){if(e){var n=parseInt(t.storage.get(this._configPath+"-version"),10);(isNaN(n)||e>n)&&(t.log.info("Updating settings from v"+(isNaN(n)?0:n)+" to v"+e),this.updateSettings(t))}},e.updateSettings=function(t){var n=this;return t.isValid?void t.submissionClient.getSettings(t,function(r){if(r&&r.success&&r.settings){t.settings=v.merge(t.settings,r.settings);var i=e.getSavedServerSettings(t);for(var o in i)r.settings[o]||delete t.settings[o];var s=e._configPath;t.storage.save(s+"-version",r.settingsVersion),t.storage.save(s,r.settings),t.log.info("Updated settings"),n.changed(t)}}):void t.log.error("Unable to update settings: ApiKey is not set.")},e.changed=function(e){for(var t=this._handlers,n=0;n-1;o--)i[o]=n(r[o],t||o=e)&&(e=5),r.log.info("Suspending processing for "+e+" minutes."),this._suspendProcessingUntil=new Date((new Date).getTime()+6e4*e),t&&(this._discardQueuedItemsUntil=new Date((new Date).getTime()+6e4*e)),n&&this.removeEvents(r.storage.getList("ex-q"))},e.prototype.areQueuedItemsDiscarded=function(){return this._discardQueuedItemsUntil&&this._discardQueuedItemsUntil>new Date},e.prototype.ensureQueueTimer=function(){var e=this;this._queueTimer||(this._queueTimer=setInterval(function(){return e.onProcessQueue()},1e4))},e.prototype.isQueueProcessingSuspended=function(){return this._suspendProcessingUntil&&this._suspendProcessingUntil>new Date},e.prototype.onProcessQueue=function(){this.isQueueProcessingSuspended()||this._processingQueue||this.process()},e.prototype.processSubmissionResponse=function(e,t){var n="The event will not be submitted.",r=this._config,i=r.log;if(e.success)return i.info("Sent "+t.length+" events."),void this.removeEvents(t);if(e.serviceUnavailable)return i.error("Server returned service unavailable."),void this.suspendProcessing();if(e.paymentRequired)return i.info("Too many events have been submitted, please upgrade your plan."),void this.suspendProcessing(null,!0,!0);if(e.unableToAuthenticate)return i.info("Unable to authenticate, please check your configuration. "+n),this.suspendProcessing(15),void this.removeEvents(t);if(e.notFound||e.badRequest)return i.error("Error while trying to submit data: "+e.message),this.suspendProcessing(240),void this.removeEvents(t);if(e.requestEntityTooLarge){var o="Event submission discarded for being too large.";return void(r.submissionBatchSize>1?(i.error(o+" Retrying with smaller batch size."),r.submissionBatchSize=Math.max(1,Math.round(r.submissionBatchSize/1.5))):(i.error(o+" "+n),this.removeEvents(t)))}e.success||(i.error("Error submitting events: "+(e.message||"Please check the network tab for more info.")),this.suspendProcessing())},e.prototype.removeEvents=function(e){for(var t=0;t<(e||[]).length;t++)this._config.storage.remove(e[t].path)},e}();t.DefaultEventQueue=g;var h=function(){function e(e){this._items=[],this._maxItems=e>0?e:250}return e.prototype.save=function(e,t){return e&&t?(this.remove(e),this._items.push({created:(new Date).getTime(),path:e,value:t})>this._maxItems&&this._items.shift(),!0):!1},e.prototype.get=function(e){var t=e?this.getList("^"+e+"$",1)[0]:null;return t?t.value:null},e.prototype.getList=function(e,t){var n=this._items;if(!e)return n.slice(0,t);for(var r=new RegExp(e),i=[],o=0;o=t));o++);return i},e.prototype.remove=function(e){if(e){var t=this.getList("^"+e+"$",1)[0];t&&this._items.splice(this._items.indexOf(t),1)}},e}();t.InMemoryStorage=h;var d=function(){function e(){this.configurationVersionHeader="x-exceptionless-configversion"}return e.prototype.postEvents=function(e,t,n,r){var i=JSON.stringify(e),o=this.createRequest(t,"POST","/api/v2/events",i),s=this.createSubmissionCallback(t,n);return t.submissionAdapter.sendRequest(o,s,r)},e.prototype.postUserDescription=function(e,t,n,r){var i="/api/v2/events/by-ref/"+encodeURIComponent(e)+"/user-description",o=JSON.stringify(t),s=this.createRequest(n,"POST",i,o),u=this.createSubmissionCallback(n,r);return n.submissionAdapter.sendRequest(s,u)},e.prototype.getSettings=function(e,t){var n=this.createRequest(e,"GET","/api/v2/projects/config"),r=function(n,r,i,o){if(200!==n)return t(new q(!1,null,-1,null,r));var s;try{s=JSON.parse(i)}catch(u){e.log.error("Unable to parse settings: '"+i+"'")}return!s||isNaN(s.version)?t(new q(!1,null,-1,null,"Invalid configuration settings.")):void t(new q(!0,s.settings||{},s.version))};return e.submissionAdapter.sendRequest(n,r)},e.prototype.createRequest=function(e,t,n,r){return void 0===r&&(r=null),{method:t,path:n,data:r,serverUrl:e.serverUrl,apiKey:e.apiKey,userAgent:e.userAgent}},e.prototype.createSubmissionCallback=function(e,t){var n=this;return function(r,i,s,u){var a=u&&parseInt(u[n.configurationVersionHeader],10);o.checkVersion(a,e),t(new x(r,i))}},e}();t.DefaultSubmissionClient=d;var v=function(){function e(){}return e.addRange=function(e){for(var t=[],n=1;n0?n[0]:null},e.parseQueryString=function(t,n){if(!t||0===t.length)return null;var r=t.split("&");if(0===r.length)return null;for(var i={},o=0;o=10},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"serverUrl",{get:function(){return this._serverUrl},set:function(e){e&&(this._serverUrl=e,this.log.info("serverUrl: "+this._serverUrl))},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"dataExclusions",{get:function(){var e=this.settings["@@DataExclusions"];return this._dataExclusions.concat(e&&e.split(",")||[])},enumerable:!0,configurable:!0}),e.prototype.addDataExclusions=function(){for(var e=[],t=0;tt.priority?1:0})},enumerable:!0,configurable:!0}),e.prototype.addPlugin=function(e,t,n){var r=n?{name:e,priority:t,run:n}:e;if(!r||!r.run)return void this.log.error("Add plugin failed: Run method not defined");r.name||(r.name=v.guid()),r.priority||(r.priority=0);for(var i=!1,o=this._plugins,s=0;se||e>90)throw new Error("Must be a valid latitude value between -90.0 and 90.0.");if(-180>t||t>180)throw new Error("Must be a valid longitude value between -180.0 and 180.0.");return this.target.geo=e+","+t,this},e.prototype.setUserIdentity=function(e,t){var n="string"!=typeof e?e:{identity:e,name:t};return n&&(n.identity||n.name)?(this.setProperty("@user",n),this):this},e.prototype.setValue=function(e){return e&&(this.target.value=e),this},e.prototype.addTags=function(){for(var e=[],t=0;t100)return!1;for(var t=0;t=48&&57>=n,i=n>=65&&90>=n||n>=97&&122>=n,o=45===n;if(!r&&!i&&!o)return!1}return!0},e}();t.EventBuilder=y;var b=function(){function e(){}return e.prototype.setException=function(e){e&&(this["@@_Exception"]=e)},Object.defineProperty(e.prototype,"hasException",{get:function(){return!!this["@@_Exception"]},enumerable:!0,configurable:!0}),e.prototype.getException=function(){return this["@@_Exception"]||null},e.prototype.markAsUnhandledError=function(){this["@@_IsUnhandledError"]=!0},Object.defineProperty(e.prototype,"isUnhandledError",{get:function(){return!!this["@@_IsUnhandledError"]},enumerable:!0,configurable:!0}),e.prototype.setSubmissionMethod=function(e){e&&(this["@@_SubmissionMethod"]=e)},e.prototype.getSubmissionMethod=function(){return this["@@_SubmissionMethod"]||null},e}();t.ContextData=b;var x=function(){function e(e,t){this.success=!1,this.badRequest=!1,this.serviceUnavailable=!1,this.paymentRequired=!1,this.unableToAuthenticate=!1,this.notFound=!1,this.requestEntityTooLarge=!1,this.statusCode=e,this.message=t,this.success=e>=200&&299>=e,this.badRequest=400===e,this.serviceUnavailable=503===e,this.paymentRequired=402===e,this.unableToAuthenticate=401===e||403===e,this.notFound=404===e,this.requestEntityTooLarge=413===e}return e}();t.SubmissionResponse=x;var S=function(){function e(e,t){"object"!=typeof e?this.config=new m(e):this.config=new m({apiKey:e,serverUrl:t})}return e.prototype.createException=function(e){var t=new b;return t.setException(e),this.createEvent(t).setType("error")},e.prototype.submitException=function(e,t){this.createException(e).submit(t)},e.prototype.createUnhandledException=function(e,t){var n=this.createException(e);return n.pluginContextData.markAsUnhandledError(),n.pluginContextData.setSubmissionMethod(t),n},e.prototype.submitUnhandledException=function(e,t,n){this.createUnhandledException(e,t).submit(n)},e.prototype.createFeatureUsage=function(e){return this.createEvent().setType("usage").setSource(e)},e.prototype.submitFeatureUsage=function(e,t){this.createFeatureUsage(e).submit(t)},e.prototype.createLog=function(e,t,n){var r=this.createEvent().setType("log");if(t&&n)r=r.setSource(e).setMessage(t).setProperty("@level",n);else if(t)r=r.setSource(e).setMessage(t);else{var i=arguments.callee.caller;r=r.setSource(i&&i.name).setMessage(e)}return r},e.prototype.submitLog=function(e,t,n,r){this.createLog(e,t,n).submit(r)},e.prototype.createNotFound=function(e){return this.createEvent().setType("404").setSource(e)},e.prototype.submitNotFound=function(e,t){this.createNotFound(e).submit(t)},e.prototype.createSessionStart=function(){return this.createEvent().setType("session")},e.prototype.submitSessionStart=function(e){this.createSessionStart().submit(e)},e.prototype.createSessionEnd=function(){return this.createEvent().setType("sessionend")},e.prototype.submitSessionEnd=function(e){this.createSessionEnd().submit(e)},e.prototype.createSessionHeartbeat=function(){return this.createEvent().setType("heartbeat")},e.prototype.submitSessionHeartbeat=function(e){this.createSessionHeartbeat().submit(e)},e.prototype.createEvent=function(e){return new y({date:new Date},this,e)},e.prototype.submitEvent=function(e,t,n){function r(e){return e&&(e.cancelled=!0),!!n&&n(e)}var i=new c(this,e,t);return e?this.config.enabled?(e.data||(e.data={}),e.tags&&e.tags.length||(e.tags=[]),void l.run(i,function(e){var t=e.event;if(!e.cancelled){t.type&&0!==t.type.length||(t.type="log"),t.date||(t.date=new Date);var r=e.client.config;r.queue.enqueue(t),t.reference_id&&t.reference_id.length>0&&(e.log.info("Setting last reference id '"+t.reference_id+"'"),r.lastReferenceIdManager.setLast(t.reference_id))}!!n&&n(e)})):(this.config.log.info("Event submission is currently disabled."),r(i)):r(i)},e.prototype.updateUserEmailAndDescription=function(e,t,n,r){var i=this;if(!(e&&t&&n&&this.config.enabled))return!!r&&r(new x(500,"cancelled"));var o={email_address:t,description:n};this.config.submissionClient.postUserDescription(e,o,this.config,function(t){t.success||i.config.log.error("Failed to submit user email and description for event '"+e+"': "+t.statusCode+" "+t.message),!!r&&r(t)})},e.prototype.getLastReferenceId=function(){return this.config.lastReferenceIdManager.getLast()},Object.defineProperty(e,"default",{get:function(){return null===e._instance&&(e._instance=new e(null)),e._instance},enumerable:!0,configurable:!0}),e._instance=null,e}();t.ExceptionlessClient=S;var E=function(){function e(){this.priority=10,this.name="ConfigurationDefaultsPlugin"}return e.prototype.run=function(e,t){for(var n=e.client.config,r=n.defaultTags||[],i=0;i0&&(e.event.data[n].modules=i)}t&&t()},e}();t.ModuleInfoPlugin=_;var P=function(){function e(){this.priority=70,this.name="RequestInfoPlugin"}return e.prototype.run=function(e,t){var n="@request",r=e.client.config.requestInfoCollector;if(!e.event.data[n]&&r){var i=r.getRequestInfo(e);i&&(e.event.data[n]=i)}t&&t()},e}();t.RequestInfoPlugin=P;var I=function(){function e(){this.priority=80,this.name="EnvironmentInfoPlugin"}return e.prototype.run=function(e,t){var n="@environment",r=e.client.config.environmentInfoCollector;if(!e.event.data[n]&&r){var i=r.getEnvironmentInfo(e);i&&(e.event.data[n]=i)}t&&t()},e}();t.EnvironmentInfoPlugin=I;var T=function(){function e(){this.priority=100,this.name="SubmissionMethodPlugin"}return e.prototype.run=function(e,t){var n=e.contextData.getSubmissionMethod();n&&(e.event.data["@submission_method"]=n),t&&t()},e}();t.SubmissionMethodPlugin=T;var C="@error",R=2e3,k=10,U=function(){function e(){this.priority=40,this.name="DuplicateCheckerPlugin",this.recentlyProcessedErrors=[]}return e.prototype.run=function(e,t){if("error"===e.event.type){var n=e.event.data[C],r=this.checkDuplicate(n,e.log);if(r)return void(e.cancelled=!0)}t&&t()},e.prototype.getNow=function(){return Date.now()},e.prototype.checkDuplicate=function(e,t){function n(e){return e.stack_trace?v.getHashCode(JSON.stringify(e.stack_trace)):null}for(var r,i=this.getNow(),o=i-R;e;){if(r=n(e),r&&this.recentlyProcessedErrors.some(function(e){return e.hash===r&&e.timestamp>=o}))return t.info("Ignoring duplicate error event: hash="+r),!0;for(this.recentlyProcessedErrors.push({hash:r,timestamp:i});this.recentlyProcessedErrors.length>k;)this.recentlyProcessedErrors.shift();e=e.inner}return!1},e}();t.DuplicateCheckerPlugin=U;var q=function(){function e(e,t,n,r,i){void 0===n&&(n=-1),void 0===r&&(r=null),void 0===i&&(i=null),this.success=!1,this.settingsVersion=-1,this.success=e,this.settings=t,this.settingsVersion=n,this.exception=r,this.message=i}return e}();t.SettingsResponse=q;var D=function(){function e(){}return e.prototype.parse=function(e,t){function n(e){for(var t=("string"==typeof e?[e]:e)||[],n=[],r=0;r0)for(var r=0;r0&&(n[t(o.substring(0,s).toLowerCase())]=o.substring(s+2))}return n}if(!a){a=!0;var u=r.statusText,c=r.responseText,l=r.status;if(n===o||0===l)u="Unable to connect to server.",l=0;else if(n!==s||l){if(200>l||l>299){var f=r.responseBody;if(f&&f.message)u=f.message;else if(c&&-1!==c.indexOf("message"))try{u=JSON.parse(c).message}catch(p){u=c}}}else l="POST"===e.method?202:200;t(l||500,u||"",c,i(r.getAllResponseHeaders&&r.getAllResponseHeaders()))}}function i(e,t,n){var r=new XMLHttpRequest;return u in r?(r.open(t,n,!0),r.setRequestHeader("X-Exceptionless-Client",e),"POST"===t&&r.setRequestHeader("Content-Type","application/json")):"undefined"!=typeof XDomainRequest?(c=!0,r=new XDomainRequest,r.open(t,"http:"===location.protocol?n.replace("https:","http:"):n)):r=null,r&&(r.timeout=1e4),r}var o="timeout",s="loaded",u="withCredentials",a=!1,c=!1,l=""+e.serverUrl+e.path+"?access_token="+encodeURIComponent(e.apiKey),f=i(e.userAgent,e.method||"POST",l);return f?(u in f&&(f.onreadystatechange=function(){4===f.readyState&&r(s,f)}),f.onprogress=function(){},f.ontimeout=function(){return r(o,f)},f.onerror=function(){return r("error",f)},f.onload=function(){return r(s,f)},void(c?setTimeout(function(){return f.send(e.data)},500):f.send(e.data))):t(503,"CORS not supported.")},e}();t.DefaultSubmissionAdapter=A;var N=m.defaults,F=r();return F&&(F.apiKey||F.serverUrl)&&(N.apiKey=F.apiKey,N.serverUrl=F.serverUrl),N.enableSessions=!0,N.errorParser=new D,N.moduleCollector=new O,N.requestInfoCollector=new M,N.submissionAdapter=new A,TraceKit.report.subscribe(i),TraceKit.extendToAsynchronousCallbacks(),Error.stackTraceLimit=1/0,t}); //# sourceMappingURL=exceptionless.min.js.map diff --git a/dist/exceptionless.min.js.map b/dist/exceptionless.min.js.map index 96d606fc..71c0f114 100644 --- a/dist/exceptionless.min.js.map +++ b/dist/exceptionless.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["tracekit.js","exceptionless.min.js","/source/exceptionless.ts"],"names":["window","undefined","_has","object","key","Object","prototype","hasOwnProperty","call","_isUndefined","what","TraceKit","_oldTraceKit","_slice","slice","UNKNOWN_FUNCTION","noConflict","wrap","func","wrapped","apply","this","arguments","e","report","subscribe","handler","installGlobalHandler","handlers","push","unsubscribe","i","length","splice","notifyHandlers","stack","isWindowError","exception","collectWindowErrors","concat","inner","traceKitWindowOnError","message","url","lineNo","columnNo","errorObj","lastExceptionStack","computeStackTrace","augmentStackTraceWithInitialElement","processLastException","location","line","column","guessFunctionName","context","gatherContext","mode","_oldOnerrorHandler","_onErrorHandlerInstalled","onerror","_lastExceptionStack","_lastArgs","lastArgs","lastException","ex","setTimeout","incomplete","loadSource","remoteFetching","getXHR","XMLHttpRequest","ActiveXObject","request","open","send","responseText","getSource","sourceCache","source","domain","document","indexOf","split","m","reFunctionArgNames","reGuessFunction","maxLines","exec","linesBefore","Math","floor","linesOfContext","linesAfter","start","max","end","min","escapeRegExp","text","replace","escapeCodeAsRegExpForMatchingInsideHTML","body","findSourceInUrls","re","urls","j","join","substring","index","lastIndexOf","findSourceInLine","fragment","RegExp","findSourceByFunctionBody","parts","result","href","scripts","getElementsByTagName","code","codeRE","eventRE","script","src","name","args","event","computeStackTraceFromStackProp","element","chrome","gecko","winjs","lines","reference","isNative","columnNumber","computeStackTraceFromStacktraceProp","stacktrace","opera10Regex","opera11Regex","exc","computeStackTraceFromOperaMultiLineMessage","lineRE1","lineRE2","lineRE3","inlineScriptBlocks","s","item","relativeLine","pos","innerText","midline","stackInfo","initial","unshift","partial","computeStackTraceByWalkingCallerChain","depth","functionName","funcs","recursion","curr","caller","toString","input","description","sourceURL","fileName","lineNumber","debug","computeStackTraceOfCaller","Error","ofCaller","extendToAsynchronousCallbacks","_helper","fnName","originalFn","originalCallback","global","SettingsManager","SettingsManager.constructor","SettingsManager.onChanged","root","SettingsManager.applySavedServerSettings","processUnhandledException","Utils","parseQueryString","pop","stackTrace","options","builder","ExceptionlessClient","createUnhandledException","status","pluginContextData","submit","SettingsManager.checkVersion","DefaultLastReferenceIdManager.setLast","SettingsManager.updateSettings","config","_this","SettingsManager.changed","SettingsManager.getSavedServerSettings","changed","DefaultLastReferenceIdManager","DefaultLastReferenceIdManager.constructor","DefaultLastReferenceIdManager.clearLast","ConsoleLog","ConsoleLog.info","ConsoleLog.warn","ConsoleLog.error","exports","ConsoleLog.log","info","log","NullLog","NullLog.constructor","level","console","EventPluginContext.constructor","EventPluginContext","EventPluginContext.log","warn","error","client","contextData","EventPluginManager","EventPluginManager.constructor","defineProperty","get","enumerable","configurable","run","callback","EventPluginManager.run","EventPluginManager.addDefaultPlugins","plugins","wrappedPlugins","HeartbeatPlugin","HeartbeatPlugin.constructor","HeartbeatPlugin.run","addPlugin","clearHeartbeatInterval","_heartbeatIntervalId","clearInterval","type","user","identity","submitHeartbeatFn","createSessionHeartbeat","setUserIdentity","ReferenceIdPlugin.constructor","ReferenceIdPlugin","ReferenceIdPlugin.run","DefaultEventQueue","DefaultEventQueue.constructor","DefaultEventQueue.enqueue","next","DefaultEventQueue.process","DefaultEventQueue.process.getEvents","DefaultEventQueue.suspendProcessing","DefaultEventQueue.areQueuedItemsDiscarded","DefaultEventQueue.ensureQueueTimer","DefaultEventQueue.isQueueProcessingSuspended","DefaultEventQueue.onProcessQueue","DefaultEventQueue.processSubmissionResponse","response","DefaultEventQueue.removeEvents","removeEvents","events","InMemoryStorage.constructor","InMemoryStorage.save","InMemoryStorage","InMemoryStorage.get","InMemoryStorage.getList","InMemoryStorage.remove","results","DefaultSubmissionClient.constructor","DefaultSubmissionClient","DefaultSubmissionClient.postEvents","DefaultSubmissionClient.postUserDescription","DefaultSubmissionClient.getSettings","DefaultSubmissionClient.createRequest","DefaultSubmissionClient.createSubmissionCallback","data","serverUrl","apiKey","Utils.addRange","settingsVersion","headers","parseInt","configurationVersionHeader","Utils.getHashCode","Utils.getCookies","Utils.guid.s4","Utils.guid","Utils.merge","guid","Utils.parseVersion","Utils.parseQueryString","Utils.randomNumber","Utils.isMatch","randomNumber","isMatch","Utils.isEmpty","Utils.stringify.stringifyImpl","pattern","endsWithWildcard","isEmpty","keys","Utils.stringify","flattened","prop","Configuration","Configuration.constructor","Configuration.constructor.inject","Configuration.apiKey","queue","inject","configSettings","applySavedServerSettings","EventBuilder.setType","set","Configuration.serverUrl","Configuration.dataExclusions","value","Configuration.addDataExclusions","Configuration.plugins","Configuration.addPlugin","plugin","Configuration.removePlugin","Configuration.setVersion","Configuration.setUserIdentity","Configuration.userAgent","USER_KEY","userInfo","userInfoOrIdentity","Configuration.useSessions","Configuration.useReferenceIds","Configuration.useDebugLogger","Configuration.defaults","useDebugLogger","EventBuilder","EventBuilder.constructor","EventBuilder.setSource","EventBuilder.setReferenceId","EventBuilder.setEventReference","EventBuilder.setMessage","EventBuilder.setGeo","EventBuilder.setUserIdentity","EventBuilder.setValue","EventBuilder.addTags","EventBuilder.setProperty","EventBuilder.markAsCritical","EventBuilder.addRequestInfo","EventBuilder.submit","EventBuilder.isValidIdentifier","ContextData","ContextData.constructor","ContextData.setException","ContextData.hasException","ContextData.getException","ContextData.markAsUnhandledError","ContextData.isUnhandledError","ContextData.setSubmissionMethod","ContextData.getSubmissionMethod","SubmissionResponse","SubmissionResponse.constructor","paymentRequired","unableToAuthenticate","notFound","ExceptionlessClient.constructor","ExceptionlessClient.createException","ExceptionlessClient.submitException","ExceptionlessClient.createUnhandledException","ExceptionlessClient.submitUnhandledException","ExceptionlessClient.createFeatureUsage","ExceptionlessClient.submitFeatureUsage","ExceptionlessClient.createLog","ExceptionlessClient.submitLog","ExceptionlessClient.createNotFound","ExceptionlessClient.submitNotFound","ExceptionlessClient.createSessionStart","ExceptionlessClient.submitSessionStart","ExceptionlessClient.createSessionEnd","ExceptionlessClient.submitSessionEnd","ExceptionlessClient.createSessionHeartbeat","ExceptionlessClient.submitSessionHeartbeat","ExceptionlessClient.createEvent","ExceptionlessClient.submitEvent","ExceptionlessClient.submitEvent.cancelled","enabled","tags","ctx","ev","ExceptionlessClient.updateUserEmailAndDescription","cancelled","ExceptionlessClient.getLastReferenceId","ExceptionlessClient.default","referenceId","statusCode","getLastReferenceId","lastReferenceIdManager","getLast","ConfigurationDefaultsPlugin","ConfigurationDefaultsPlugin.constructor","ConfigurationDefaultsPlugin.run","priority","tag","ErrorPlugin","ErrorPlugin.constructor","ErrorPlugin.run","additionalData","JSON","parse","stringify","dataExclusions","ignoredProperties","ModuleInfoPlugin","ModuleInfoPlugin.constructor","ModuleInfoPlugin.run","RequestInfoPlugin","RequestInfoPlugin.constructor","RequestInfoPlugin.run","EnvironmentInfoPlugin","EnvironmentInfoPlugin.constructor","EnvironmentInfoPlugin.run","SubmissionMethodPlugin","SubmissionMethodPlugin.constructor","SubmissionMethodPlugin.run","DuplicateCheckerPlugin.constructor","DuplicateCheckerPlugin.run","ERROR_KEY","WINDOW_MILLISECONDS","MAX_QUEUE_LENGTH","DuplicateCheckerPlugin","DuplicateCheckerPlugin.getNow","SettingsResponse.constructor","DuplicateCheckerPlugin.checkDuplicate","DuplicateCheckerPlugin.checkDuplicate.getHashCodeForError","Date","now","hashCode","recentlyProcessedErrors","some","h","hash","timestamp","repeatWindow","SettingsResponse","success","settings","DefaultErrorParser","DefaultErrorParser.constructor","DefaultErrorParser.parse","DefaultErrorParser.parse.getParameters","DefaultErrorParser.parse.getStackFrames","getParameters","params","TRACEKIT_STACK_TRACE_KEY","DefaultModuleCollector","DefaultModuleCollector.constructor","DefaultModuleCollector.getModules","modules","version","parseVersion","DefaultRequestInfoCollector","DefaultRequestInfoCollector.constructor","DefaultRequestInfoCollector.getRequestInfo","requestInfo","user_agent","navigator","userAgent","is_secure","protocol","DefaultSubmissionAdapter","DefaultSubmissionAdapter.constructor","DefaultSubmissionAdapter.sendRequest","DefaultSubmissionAdapter.sendRequest.complete","DefaultSubmissionAdapter.sendRequest.complete.parseResponseHeaders","isCompleted","DefaultSubmissionAdapter.sendRequest.createRequest","xhr","TIMEOUT","LOADED","WITH_CREDENTIALS","useSetTimeout","complete","getDefaultsSettingsFromScriptTag","defaults","enableSessions","errorParser","moduleCollector","requestInfoCollector","submissionAdapter","stackTraceLimit","Infinity"],"mappings":"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","file":"exceptionless.min.js","sourcesContent":["/*\n TraceKit - Cross browser stack traces - github.com/csnover/TraceKit\n MIT license\n*/\n\n(function(window, undefined) {\nif (!window) {\n return;\n}\n\nvar TraceKit = {};\nvar _oldTraceKit = window.TraceKit;\n\n// global reference to slice\nvar _slice = [].slice;\nvar UNKNOWN_FUNCTION = '?';\n\n\n/**\n * _has, a better form of hasOwnProperty\n * Example: _has(MainHostObject, property) === true/false\n *\n * @param {Object} object to check property\n * @param {string} key to check\n */\nfunction _has(object, key) {\n return Object.prototype.hasOwnProperty.call(object, key);\n}\n\nfunction _isUndefined(what) {\n return typeof what === 'undefined';\n}\n\n/**\n * TraceKit.noConflict: Export TraceKit out to another variable\n * Example: var TK = TraceKit.noConflict()\n */\nTraceKit.noConflict = function noConflict() {\n window.TraceKit = _oldTraceKit;\n return TraceKit;\n};\n\n/**\n * TraceKit.wrap: Wrap any function in a TraceKit reporter\n * Example: func = TraceKit.wrap(func);\n *\n * @param {Function} func Function to be wrapped\n * @return {Function} The wrapped func\n */\nTraceKit.wrap = function traceKitWrapper(func) {\n function wrapped() {\n try {\n return func.apply(this, arguments);\n } catch (e) {\n TraceKit.report(e);\n throw e;\n }\n }\n return wrapped;\n};\n\n/**\n * TraceKit.report: cross-browser processing of unhandled exceptions\n *\n * Syntax:\n * TraceKit.report.subscribe(function(stackInfo) { ... })\n * TraceKit.report.unsubscribe(function(stackInfo) { ... })\n * TraceKit.report(exception)\n * try { ...code... } catch(ex) { TraceKit.report(ex); }\n *\n * Supports:\n * - Firefox: full stack trace with line numbers, plus column number\n * on top frame; column number is not guaranteed\n * - Opera: full stack trace with line and column numbers\n * - Chrome: full stack trace with line and column numbers\n * - Safari: line and column number for the top frame only; some frames\n * may be missing, and column number is not guaranteed\n * - IE: line and column number for the top frame only; some frames\n * may be missing, and column number is not guaranteed\n *\n * In theory, TraceKit should work on all of the following versions:\n * - IE5.5+ (only 8.0 tested)\n * - Firefox 0.9+ (only 3.5+ tested)\n * - Opera 7+ (only 10.50 tested; versions 9 and earlier may require\n * Exceptions Have Stacktrace to be enabled in opera:config)\n * - Safari 3+ (only 4+ tested)\n * - Chrome 1+ (only 5+ tested)\n * - Konqueror 3.5+ (untested)\n *\n * Requires TraceKit.computeStackTrace.\n *\n * Tries to catch all unhandled exceptions and report them to the\n * subscribed handlers. Please note that TraceKit.report will rethrow the\n * exception. This is REQUIRED in order to get a useful stack trace in IE.\n * If the exception does not reach the top of the browser, you will only\n * get a stack trace from the point where TraceKit.report was called.\n *\n * Handlers receive a stackInfo object as described in the\n * TraceKit.computeStackTrace docs.\n */\nTraceKit.report = (function reportModuleWrapper() {\n var handlers = [],\n lastArgs = null,\n lastException = null,\n lastExceptionStack = null;\n\n /**\n * Add a crash handler.\n * @param {Function} handler\n */\n function subscribe(handler) {\n installGlobalHandler();\n handlers.push(handler);\n }\n\n /**\n * Remove a crash handler.\n * @param {Function} handler\n */\n function unsubscribe(handler) {\n for (var i = handlers.length - 1; i >= 0; --i) {\n if (handlers[i] === handler) {\n handlers.splice(i, 1);\n }\n }\n }\n\n /**\n * Dispatch stack information to all handlers.\n * @param {Object.} stack\n */\n function notifyHandlers(stack, isWindowError) {\n var exception = null;\n if (isWindowError && !TraceKit.collectWindowErrors) {\n return;\n }\n for (var i in handlers) {\n if (_has(handlers, i)) {\n try {\n handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2)));\n } catch (inner) {\n exception = inner;\n }\n }\n }\n\n if (exception) {\n throw exception;\n }\n }\n\n var _oldOnerrorHandler, _onErrorHandlerInstalled;\n\n /**\n * Ensures all global unhandled exceptions are recorded.\n * Supported by Gecko and IE.\n * @param {string} message Error message.\n * @param {string} url URL of script that generated the exception.\n * @param {(number|string)} lineNo The line number at which the error\n * occurred.\n * @param {?(number|string)} columnNo The column number at which the error\n * occurred.\n * @param {?Error} errorObj The actual Error object.\n */\n function traceKitWindowOnError(message, url, lineNo, columnNo, errorObj) {\n var stack = null;\n\n if (lastExceptionStack) {\n TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(lastExceptionStack, url, lineNo, message);\n \t processLastException();\n\t } else if (errorObj) {\n stack = TraceKit.computeStackTrace(errorObj);\n notifyHandlers(stack, true);\n } else {\n var location = {\n 'url': url,\n 'line': lineNo,\n 'column': columnNo\n };\n location.func = TraceKit.computeStackTrace.guessFunctionName(location.url, location.line);\n location.context = TraceKit.computeStackTrace.gatherContext(location.url, location.line);\n stack = {\n 'mode': 'onerror',\n 'message': message,\n 'stack': [location]\n };\n\n notifyHandlers(stack, true);\n }\n\n if (_oldOnerrorHandler) {\n return _oldOnerrorHandler.apply(this, arguments);\n }\n\n return false;\n }\n\n function installGlobalHandler () {\n if (_onErrorHandlerInstalled === true) {\n return;\n }\n _oldOnerrorHandler = window.onerror;\n window.onerror = traceKitWindowOnError;\n _onErrorHandlerInstalled = true;\n }\n\n function processLastException() {\n var _lastExceptionStack = lastExceptionStack,\n _lastArgs = lastArgs;\n lastArgs = null;\n lastExceptionStack = null;\n lastException = null;\n notifyHandlers.apply(null, [_lastExceptionStack, false].concat(_lastArgs));\n }\n /**\n * Reports an unhandled Error to TraceKit.\n * @param {Error} ex\n */\n function report(ex) {\n if (lastExceptionStack) {\n if (lastException === ex) {\n return; // already caught by an inner catch block, ignore\n } else {\n processLastException();\n }\n }\n\n var stack = TraceKit.computeStackTrace(ex);\n lastExceptionStack = stack;\n lastException = ex;\n lastArgs = _slice.call(arguments, 1);\n\n // If the stack trace is incomplete, wait for 2 seconds for\n // slow slow IE to see if onerror occurs or not before reporting\n // this exception; otherwise, we will end up with an incomplete\n // stack trace\n window.setTimeout(function () {\n if (lastException === ex) {\n processLastException();\n }\n }, (stack.incomplete ? 2000 : 0));\n\n throw ex; // re-throw to propagate to the top level (and cause window.onerror)\n }\n\n report.subscribe = subscribe;\n report.unsubscribe = unsubscribe;\n return report;\n}());\n\n/**\n * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript\n *\n * Syntax:\n * s = TraceKit.computeStackTrace.ofCaller([depth])\n * s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below)\n * Returns:\n * s.name - exception name\n * s.message - exception message\n * s.stack[i].url - JavaScript or HTML file URL\n * s.stack[i].func - function name, or empty for anonymous functions (if guessing did not work)\n * s.stack[i].args - arguments passed to the function, if known\n * s.stack[i].line - line number, if known\n * s.stack[i].column - column number, if known\n * s.stack[i].context - an array of source code lines; the middle element corresponds to the correct line#\n * s.mode - 'stack', 'stacktrace', 'multiline', 'callers', 'onerror', or 'failed' -- method used to collect the stack trace\n *\n * Supports:\n * - Firefox: full stack trace with line numbers and unreliable column\n * number on top frame\n * - Opera 10: full stack trace with line and column numbers\n * - Opera 9-: full stack trace with line numbers\n * - Chrome: full stack trace with line and column numbers\n * - Safari: line and column number for the topmost stacktrace element\n * only\n * - IE: no line numbers whatsoever\n *\n * Tries to guess names of anonymous functions by looking for assignments\n * in the source code. In IE and Safari, we have to guess source file names\n * by searching for function bodies inside all page scripts. This will not\n * work for scripts that are loaded cross-domain.\n * Here be dragons: some function names may be guessed incorrectly, and\n * duplicate functions may be mismatched.\n *\n * TraceKit.computeStackTrace should only be used for tracing purposes.\n * Logging of unhandled exceptions should be done with TraceKit.report,\n * which builds on top of TraceKit.computeStackTrace and provides better\n * IE support by utilizing the window.onerror event to retrieve information\n * about the top of the stack.\n *\n * Note: In IE and Safari, no stack trace is recorded on the Error object,\n * so computeStackTrace instead walks its *own* chain of callers.\n * This means that:\n * * in Safari, some methods may be missing from the stack trace;\n * * in IE, the topmost function in the stack trace will always be the\n * caller of computeStackTrace.\n *\n * This is okay for tracing (because you are likely to be calling\n * computeStackTrace from the function you want to be the topmost element\n * of the stack trace anyway), but not okay for logging unhandled\n * exceptions (because your catch block will likely be far away from the\n * inner function that actually caused the exception).\n *\n * Tracing example:\n * function trace(message) {\n * var stackInfo = TraceKit.computeStackTrace.ofCaller();\n * var data = message + \"\\n\";\n * for(var i in stackInfo.stack) {\n * var item = stackInfo.stack[i];\n * data += (item.func || '[anonymous]') + \"() in \" + item.url + \":\" + (item.line || '0') + \"\\n\";\n * }\n * if (window.console)\n * console.info(data);\n * else\n * alert(data);\n * }\n */\nTraceKit.computeStackTrace = (function computeStackTraceWrapper() {\n var debug = false,\n sourceCache = {};\n\n /**\n * Attempts to retrieve source code via XMLHttpRequest, which is used\n * to look up anonymous function names.\n * @param {string} url URL of source code.\n * @return {string} Source contents.\n */\n function loadSource(url) {\n if (!TraceKit.remoteFetching) { //Only attempt request if remoteFetching is on.\n return '';\n }\n try {\n var getXHR = function() {\n try {\n return new window.XMLHttpRequest();\n } catch (e) {\n // explicitly bubble up the exception if not found\n return new window.ActiveXObject('Microsoft.XMLHTTP');\n }\n };\n\n var request = getXHR();\n request.open('GET', url, false);\n request.send('');\n return request.responseText;\n } catch (e) {\n return '';\n }\n }\n\n /**\n * Retrieves source code from the source code cache.\n * @param {string} url URL of source code.\n * @return {Array.} Source contents.\n */\n function getSource(url) {\n if (typeof url !== 'string') {\n return [];\n }\n\n if (!_has(sourceCache, url)) {\n // URL needs to be able to fetched within the acceptable domain. Otherwise,\n // cross-domain errors will be triggered.\n var source = '';\n var domain = '';\n try { domain = document.domain; } catch (e) {}\n if (url.indexOf(domain) !== -1) {\n source = loadSource(url);\n }\n sourceCache[url] = source ? source.split('\\n') : [];\n }\n\n return sourceCache[url];\n }\n\n /**\n * Tries to use an externally loaded copy of source code to determine\n * the name of a function by looking at the name of the variable it was\n * assigned to, if any.\n * @param {string} url URL of source code.\n * @param {(string|number)} lineNo Line number in source code.\n * @return {string} The function name, if discoverable.\n */\n function guessFunctionName(url, lineNo) {\n var reFunctionArgNames = /function ([^(]*)\\(([^)]*)\\)/,\n reGuessFunction = /['\"]?([0-9A-Za-z$_]+)['\"]?\\s*[:=]\\s*(function|eval|new Function)/,\n line = '',\n maxLines = 10,\n source = getSource(url),\n m;\n\n if (!source.length) {\n return UNKNOWN_FUNCTION;\n }\n\n // Walk backwards from the first line in the function until we find the line which\n // matches the pattern above, which is the function definition\n for (var i = 0; i < maxLines; ++i) {\n line = source[lineNo - i] + line;\n\n if (!_isUndefined(line)) {\n if ((m = reGuessFunction.exec(line))) {\n return m[1];\n } else if ((m = reFunctionArgNames.exec(line))) {\n return m[1];\n }\n }\n }\n\n return UNKNOWN_FUNCTION;\n }\n\n /**\n * Retrieves the surrounding lines from where an exception occurred.\n * @param {string} url URL of source code.\n * @param {(string|number)} line Line number in source code to centre\n * around for context.\n * @return {?Array.} Lines of source code.\n */\n function gatherContext(url, line) {\n var source = getSource(url);\n\n if (!source.length) {\n return null;\n }\n\n var context = [],\n // linesBefore & linesAfter are inclusive with the offending line.\n // if linesOfContext is even, there will be one extra line\n // *before* the offending line.\n linesBefore = Math.floor(TraceKit.linesOfContext / 2),\n // Add one extra line if linesOfContext is odd\n linesAfter = linesBefore + (TraceKit.linesOfContext % 2),\n start = Math.max(0, line - linesBefore - 1),\n end = Math.min(source.length, line + linesAfter - 1);\n\n line -= 1; // convert to 0-based index\n\n for (var i = start; i < end; ++i) {\n if (!_isUndefined(source[i])) {\n context.push(source[i]);\n }\n }\n\n return context.length > 0 ? context : null;\n }\n\n /**\n * Escapes special characters, except for whitespace, in a string to be\n * used inside a regular expression as a string literal.\n * @param {string} text The string.\n * @return {string} The escaped string literal.\n */\n function escapeRegExp(text) {\n return text.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#]/g, '\\\\$&');\n }\n\n /**\n * Escapes special characters in a string to be used inside a regular\n * expression as a string literal. Also ensures that HTML entities will\n * be matched the same as their literal friends.\n * @param {string} body The string.\n * @return {string} The escaped string.\n */\n function escapeCodeAsRegExpForMatchingInsideHTML(body) {\n return escapeRegExp(body).replace('<', '(?:<|<)').replace('>', '(?:>|>)').replace('&', '(?:&|&)').replace('\"', '(?:\"|")').replace(/\\s+/g, '\\\\s+');\n }\n\n /**\n * Determines where a code fragment occurs in the source code.\n * @param {RegExp} re The function definition.\n * @param {Array.} urls A list of URLs to search.\n * @return {?Object.} An object containing\n * the url, line, and column number of the defined function.\n */\n function findSourceInUrls(re, urls) {\n var source, m;\n for (var i = 0, j = urls.length; i < j; ++i) {\n // console.log('searching', urls[i]);\n if ((source = getSource(urls[i])).length) {\n source = source.join('\\n');\n if ((m = re.exec(source))) {\n // console.log('Found function in ' + urls[i]);\n\n return {\n 'url': urls[i],\n 'line': source.substring(0, m.index).split('\\n').length,\n 'column': m.index - source.lastIndexOf('\\n', m.index) - 1\n };\n }\n }\n }\n\n // console.log('no match');\n\n return null;\n }\n\n /**\n * Determines at which column a code fragment occurs on a line of the\n * source code.\n * @param {string} fragment The code fragment.\n * @param {string} url The URL to search.\n * @param {(string|number)} line The line number to examine.\n * @return {?number} The column number.\n */\n function findSourceInLine(fragment, url, line) {\n var source = getSource(url),\n re = new RegExp('\\\\b' + escapeRegExp(fragment) + '\\\\b'),\n m;\n\n line -= 1;\n\n if (source && source.length > line && (m = re.exec(source[line]))) {\n return m.index;\n }\n\n return null;\n }\n\n /**\n * Determines where a function was defined within the source code.\n * @param {(Function|string)} func A function reference or serialized\n * function definition.\n * @return {?Object.} An object containing\n * the url, line, and column number of the defined function.\n */\n function findSourceByFunctionBody(func) {\n if (_isUndefined(document)) {\n return;\n }\n\n var urls = [window.location.href],\n scripts = document.getElementsByTagName('script'),\n body,\n code = '' + func,\n codeRE = /^function(?:\\s+([\\w$]+))?\\s*\\(([\\w\\s,]*)\\)\\s*\\{\\s*(\\S[\\s\\S]*\\S)\\s*\\}\\s*$/,\n eventRE = /^function on([\\w$]+)\\s*\\(event\\)\\s*\\{\\s*(\\S[\\s\\S]*\\S)\\s*\\}\\s*$/,\n re,\n parts,\n result;\n\n for (var i = 0; i < scripts.length; ++i) {\n var script = scripts[i];\n if (script.src) {\n urls.push(script.src);\n }\n }\n\n if (!(parts = codeRE.exec(code))) {\n re = new RegExp(escapeRegExp(code).replace(/\\s+/g, '\\\\s+'));\n }\n\n // not sure if this is really necessary, but I don’t have a test\n // corpus large enough to confirm that and it was in the original.\n else {\n var name = parts[1] ? '\\\\s+' + parts[1] : '',\n args = parts[2].split(',').join('\\\\s*,\\\\s*');\n\n body = escapeRegExp(parts[3]).replace(/;$/, ';?'); // semicolon is inserted if the function ends with a comment.replace(/\\s+/g, '\\\\s+');\n re = new RegExp('function' + name + '\\\\s*\\\\(\\\\s*' + args + '\\\\s*\\\\)\\\\s*{\\\\s*' + body + '\\\\s*}');\n }\n\n // look for a normal function definition\n if ((result = findSourceInUrls(re, urls))) {\n return result;\n }\n\n // look for an old-school event handler function\n if ((parts = eventRE.exec(code))) {\n var event = parts[1];\n body = escapeCodeAsRegExpForMatchingInsideHTML(parts[2]);\n\n // look for a function defined in HTML as an onXXX handler\n re = new RegExp('on' + event + '=[\\\\\\'\"]\\\\s*' + body + '\\\\s*[\\\\\\'\"]', 'i');\n\n if ((result = findSourceInUrls(re, urls[0]))) {\n return result;\n }\n\n // look for ???\n re = new RegExp(body);\n\n if ((result = findSourceInUrls(re, urls))) {\n return result;\n }\n }\n\n return null;\n }\n\n // Contents of Exception in various browsers.\n //\n // SAFARI:\n // ex.message = Can't find variable: qq\n // ex.line = 59\n // ex.sourceId = 580238192\n // ex.sourceURL = http://...\n // ex.expressionBeginOffset = 96\n // ex.expressionCaretOffset = 98\n // ex.expressionEndOffset = 98\n // ex.name = ReferenceError\n //\n // FIREFOX:\n // ex.message = qq is not defined\n // ex.fileName = http://...\n // ex.lineNumber = 59\n // ex.columnNumber = 69\n // ex.stack = ...stack trace... (see the example below)\n // ex.name = ReferenceError\n //\n // CHROME:\n // ex.message = qq is not defined\n // ex.name = ReferenceError\n // ex.type = not_defined\n // ex.arguments = ['aa']\n // ex.stack = ...stack trace...\n //\n // INTERNET EXPLORER:\n // ex.message = ...\n // ex.name = ReferenceError\n //\n // OPERA:\n // ex.message = ...message... (see the example below)\n // ex.name = ReferenceError\n // ex.opera#sourceloc = 11 (pretty much useless, duplicates the info in ex.message)\n // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'\n\n /**\n * Computes stack trace information from the stack property.\n * Chrome and Gecko use this property.\n * @param {Error} ex\n * @return {?Object.} Stack trace information.\n */\n function computeStackTraceFromStackProp(ex) {\n if (!ex.stack) {\n return null;\n }\n\n var chrome = /^\\s*at (.*?) ?\\(((?:file|https?|blob|chrome-extension|native|eval).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i,\n gecko = /^\\s*(.*?)(?:\\((.*?)\\))?@?((?:file|https?|blob|chrome|\\[).*?)(?::(\\d+))?(?::(\\d+))?\\s*$/i,\n winjs = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:ms-appx|https?|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i,\n lines = ex.stack.split('\\n'),\n stack = [],\n parts,\n element,\n reference = /^(.*) is undefined$/.exec(ex.message);\n\n for (var i = 0, j = lines.length; i < j; ++i) {\n if ((parts = chrome.exec(lines[i]))) {\n var isNative = parts[2] && parts[2].indexOf('native') !== -1;\n element = {\n 'url': !isNative ? parts[2] : null,\n 'func': parts[1] || UNKNOWN_FUNCTION,\n 'args': isNative ? [parts[2]] : [],\n 'line': parts[3] ? +parts[3] : null,\n 'column': parts[4] ? +parts[4] : null\n };\n } else if ( parts = winjs.exec(lines[i]) ) {\n element = {\n 'url': parts[2],\n 'func': parts[1] || UNKNOWN_FUNCTION,\n 'args': [],\n 'line': +parts[3],\n 'column': parts[4] ? +parts[4] : null\n };\n } else if ((parts = gecko.exec(lines[i]))) {\n element = {\n 'url': parts[3],\n 'func': parts[1] || UNKNOWN_FUNCTION,\n 'args': parts[2] ? parts[2].split(',') : [],\n 'line': parts[4] ? +parts[4] : null,\n 'column': parts[5] ? +parts[5] : null\n };\n } else {\n continue;\n }\n\n if (!element.func && element.line) {\n element.func = guessFunctionName(element.url, element.line);\n }\n\n if (element.line) {\n element.context = gatherContext(element.url, element.line);\n }\n\n stack.push(element);\n }\n\n if (!stack.length) {\n return null;\n }\n\n if (stack[0] && stack[0].line && !stack[0].column && reference) {\n stack[0].column = findSourceInLine(reference[1], stack[0].url, stack[0].line);\n } else if (!stack[0].column && !_isUndefined(ex.columnNumber)) {\n // FireFox uses this awesome columnNumber property for its top frame\n // Also note, Firefox's column number is 0-based and everything else expects 1-based,\n // so adding 1\n stack[0].column = ex.columnNumber + 1;\n }\n\n return {\n 'mode': 'stack',\n 'name': ex.name,\n 'message': ex.message,\n 'stack': stack\n };\n }\n\n /**\n * Computes stack trace information from the stacktrace property.\n * Opera 10+ uses this property.\n * @param {Error} ex\n * @return {?Object.} Stack trace information.\n */\n function computeStackTraceFromStacktraceProp(ex) {\n // Access and store the stacktrace property before doing ANYTHING\n // else to it because Opera is not very good at providing it\n // reliably in other circumstances.\n var stacktrace = ex.stacktrace;\n if (!stacktrace) {\n return;\n }\n\n var opera10Regex = / line (\\d+).*script (?:in )?(\\S+)(?:: in function (\\S+))?$/i,\n opera11Regex = / line (\\d+), column (\\d+)\\s*(?:in (?:]+)>|([^\\)]+))\\((.*)\\))? in (.*):\\s*$/i,\n lines = stacktrace.split('\\n'),\n stack = [],\n parts;\n\n for (var line = 0; line < lines.length; line += 2) {\n var element = null;\n if ((parts = opera10Regex.exec(lines[line]))) {\n element = {\n 'url': parts[2],\n 'line': +parts[1],\n 'column': null,\n 'func': parts[3],\n 'args':[]\n };\n } else if ((parts = opera11Regex.exec(lines[line]))) {\n element = {\n 'url': parts[6],\n 'line': +parts[1],\n 'column': +parts[2],\n 'func': parts[3] || parts[4],\n 'args': parts[5] ? parts[5].split(',') : []\n };\n }\n\n if (element) {\n if (!element.func && element.line) {\n element.func = guessFunctionName(element.url, element.line);\n }\n if (element.line) {\n try {\n element.context = gatherContext(element.url, element.line);\n } catch (exc) {}\n }\n\n if (!element.context) {\n element.context = [lines[line + 1]];\n }\n\n stack.push(element);\n }\n }\n\n if (!stack.length) {\n return null;\n }\n\n return {\n 'mode': 'stacktrace',\n 'name': ex.name,\n 'message': ex.message,\n 'stack': stack\n };\n }\n\n /**\n * NOT TESTED.\n * Computes stack trace information from an error message that includes\n * the stack trace.\n * Opera 9 and earlier use this method if the option to show stack\n * traces is turned on in opera:config.\n * @param {Error} ex\n * @return {?Object.} Stack information.\n */\n function computeStackTraceFromOperaMultiLineMessage(ex) {\n // TODO: Clean this function up\n // Opera includes a stack trace into the exception message. An example is:\n //\n // Statement on line 3: Undefined variable: undefinedFunc\n // Backtrace:\n // Line 3 of linked script file://localhost/Users/andreyvit/Projects/TraceKit/javascript-client/sample.js: In function zzz\n // undefinedFunc(a);\n // Line 7 of inline#1 script in file://localhost/Users/andreyvit/Projects/TraceKit/javascript-client/sample.html: In function yyy\n // zzz(x, y, z);\n // Line 3 of inline#1 script in file://localhost/Users/andreyvit/Projects/TraceKit/javascript-client/sample.html: In function xxx\n // yyy(a, a, a);\n // Line 1 of function script\n // try { xxx('hi'); return false; } catch(ex) { TraceKit.report(ex); }\n // ...\n\n var lines = ex.message.split('\\n');\n if (lines.length < 4) {\n return null;\n }\n\n var lineRE1 = /^\\s*Line (\\d+) of linked script ((?:file|https?|blob)\\S+)(?:: in function (\\S+))?\\s*$/i,\n lineRE2 = /^\\s*Line (\\d+) of inline#(\\d+) script in ((?:file|https?|blob)\\S+)(?:: in function (\\S+))?\\s*$/i,\n lineRE3 = /^\\s*Line (\\d+) of function script\\s*$/i,\n stack = [],\n scripts = document.getElementsByTagName('script'),\n inlineScriptBlocks = [],\n parts;\n\n for (var s in scripts) {\n if (_has(scripts, s) && !scripts[s].src) {\n inlineScriptBlocks.push(scripts[s]);\n }\n }\n\n for (var line = 2; line < lines.length; line += 2) {\n var item = null;\n if ((parts = lineRE1.exec(lines[line]))) {\n item = {\n 'url': parts[2],\n 'func': parts[3],\n 'args': [],\n 'line': +parts[1],\n 'column': null\n };\n } else if ((parts = lineRE2.exec(lines[line]))) {\n item = {\n 'url': parts[3],\n 'func': parts[4],\n 'args': [],\n 'line': +parts[1],\n 'column': null // TODO: Check to see if inline#1 (+parts[2]) points to the script number or column number.\n };\n var relativeLine = (+parts[1]); // relative to the start of the