exceptionless.node.js.map 177 KB
Newer Older
eddie.woo's avatar
eddie.woo committed
1
{"version":3,"file":"exceptionless.node.js","sourceRoot":"/source/","sources":["exceptionless.node.ts"],"names":[],"mappings":"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","sourcesContent":["import * as events from \"events\";\nimport * as net from \"net\";\nimport * as stream from \"stream\";\nimport * as child from \"child_process\";\nimport * as tls from \"tls\";\nimport * as http from \"http\";\nimport * as crypto from \"crypto\";\nimport os = require('os');\nimport nodestacktrace = require('stack-trace');\nimport path = require('path');\nimport https = require('https');\nimport url = require('url');\nimport * as Fs from 'fs';\nimport * as Path from 'path';\nexport interface IEvent {\n  type?: string;\n  source?: string;\n  date?: Date;\n  tags?: string[];\n  message?: string;\n  geo?: string;\n  value?: number;\n  data?: any;\n  reference_id?: string;\n  count?: number;\n}\n\nexport class SubmissionResponse {\n  public success: boolean = false;\n  public badRequest: boolean = false;\n  public serviceUnavailable: boolean = false;\n  public paymentRequired: boolean = false;\n  public unableToAuthenticate: boolean = false;\n  public notFound: boolean = false;\n  public requestEntityTooLarge: boolean = false;\n  public statusCode: number;\n  public message: string;\n\n  constructor(statusCode: number, message?: string) {\n    this.statusCode = statusCode;\n    this.message = message;\n\n    this.success = statusCode >= 200 && statusCode <= 299;\n    this.badRequest = statusCode === 400;\n    this.serviceUnavailable = statusCode === 503;\n    this.paymentRequired = statusCode === 402;\n    this.unableToAuthenticate = statusCode === 401 || statusCode === 403;\n    this.notFound = statusCode === 404;\n    this.requestEntityTooLarge = statusCode === 413;\n  }\n}\n\nexport interface ILastReferenceIdManager {\n  getLast(): string;\n  clearLast(): void;\n  setLast(eventId: string): void;\n}\n\nexport interface ILog {\n  trace(message: string): void;\n  info(message: string): void;\n  warn(message: string): void;\n  error(message: string): void;\n}\n\n                                                                                                                 \n\nexport interface IEventQueue {\n  enqueue(event: IEvent): void;\n  process(isAppExiting?: boolean): void;\n  suspendProcessing(durationInMinutes?: number, discardFutureQueuedItems?: boolean, clearQueue?: boolean): void;\n  onEventsPosted(handler: (events: IEvent[], response: SubmissionResponse) => void): void;\n}\n\n                                                                                                                                  \n\nexport interface IEnvironmentInfoCollector {\n  getEnvironmentInfo(context: EventPluginContext): IEnvironmentInfo;\n}\n\n                                                                                                              \n\nexport interface IErrorParser {\n  parse(context: EventPluginContext, exception: Error): IError;\n}\n\n                                                                                                                \n\nexport interface IModuleCollector {\n  getModules(context: EventPluginContext): IModule[];\n}\n\n                                                                                                                          \n\nexport interface IRequestInfoCollector {\n  getRequestInfo(context: EventPluginContext): IRequestInfo;\n}\n\n                                      \n\nexport interface IStorageProvider {\n  queue: IStorage;\n  settings: IStorage;\n}\n\n                                                                                                                   \n\nexport interface ISubmissionAdapter {\n  sendRequest(request: SubmissionRequest, callback?: SubmissionCallback, isAppExiting?: boolean): void;\n}\n\n                                                                                                                                                                                                                                                                                           \n\nexport interface ISubmissionClient {\n  postEvents(events: IEvent[], config: Configuration, callback: (response: SubmissionResponse) => void, isAppExiting?: boolean): void;\n  postUserDescription(referenceId: string, description: IUserDescription, config: Configuration, callback: (response: SubmissionResponse) => void): void;\n  getSettings(config: Configuration, version: number, callback: (response: SettingsResponse) => void): void;\n  sendHeartbeat(sessionIdOrUserId: string, closeSession: boolean, config: Configuration): void;\n}\n\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n\nexport interface IConfigurationSettings {\n  apiKey?: string;\n  serverUrl?: string;\n  heartbeatServerUrl?: string;\n  updateSettingsWhenIdleInterval?: number;\n  environmentInfoCollector?: IEnvironmentInfoCollector;\n  errorParser?: IErrorParser;\n  lastReferenceIdManager?: ILastReferenceIdManager;\n  log?: ILog;\n  moduleCollector?: IModuleCollector;\n  requestInfoCollector?: IRequestInfoCollector;\n  submissionBatchSize?: number;\n  submissionClient?: ISubmissionClient;\n  submissionAdapter?: ISubmissionAdapter;\n  storage?: IStorageProvider;\n  queue?: IEventQueue;\n}\n\n                                                                                                                                                     \n\ninterface ISettingsWithVersion {\n  version: number;\n  settings: { [key: string]: string };\n}\n\nexport class SettingsManager {\n  /**\n   * A list of handlers that will be fired when the settings change.\n   * @type {Array}\n   * @private\n   */\n  private static _handlers: { (config: Configuration): void }[] = [];\n\n  public static onChanged(handler: (config: Configuration) => void) {\n    !!handler && this._handlers.push(handler);\n  }\n\n  public static applySavedServerSettings(config: Configuration): void {\n    if (!config || !config.isValid) {\n      return;\n    }\n\n    let savedSettings = this.getSavedServerSettings(config);\n    config.log.info(`Applying saved settings: v${savedSettings.version}`);\n    config.settings = Utils.merge(config.settings, savedSettings.settings);\n    this.changed(config);\n  }\n\n  public static getVersion(config: Configuration): number {\n    if (!config || !config.isValid) {\n      return 0;\n    }\n\n    let savedSettings = this.getSavedServerSettings(config);\n    return savedSettings.version || 0;\n  }\n\n  public static checkVersion(version: number, config: Configuration): void {\n    let currentVersion: number = this.getVersion(config);\n    if (version <= currentVersion) {\n      return;\n    }\n\n    config.log.info(`Updating settings from v${currentVersion} to v${version}`);\n    this.updateSettings(config, currentVersion);\n  }\n\n  public static updateSettings(config: Configuration, version?: number): void {\n    if (!config || !config.enabled) {\n      return;\n    }\n\n    let unableToUpdateMessage = 'Unable to update settings';\n    if (!config.isValid) {\n      config.log.error(`${unableToUpdateMessage}: ApiKey is not set.`);\n      return;\n    }\n\n    if (!version || version < 0) {\n      version = this.getVersion(config);\n    }\n\n    config.log.info(`Checking for updated settings from: v${version}.`);\n    config.submissionClient.getSettings(config, version, (response: SettingsResponse) => {\n      if (!config || !response || !response.success || !response.settings) {\n        config.log.warn(`${unableToUpdateMessage}: ${response.message}`);\n        return;\n      }\n\n      config.settings = Utils.merge(config.settings, response.settings);\n\n      // TODO: Store snapshot of settings after reading from config and attributes and use that to revert to defaults.\n      // Remove any existing server settings that are not in the new server settings.\n      let savedServerSettings = SettingsManager.getSavedServerSettings(config);\n      for (let key in savedServerSettings) {\n        if (response.settings[key]) {\n          continue;\n        }\n\n        delete config.settings[key];\n      }\n\n      let newSettings = <ISettingsWithVersion>{\n        version: response.settingsVersion,\n        settings: response.settings\n      };\n\n      config.storage.settings.save(newSettings);\n\n      config.log.info(`Updated settings: v${newSettings.version}`);\n      this.changed(config);\n    });\n  }\n\n  private static changed(config: Configuration) {\n    let handlers = this._handlers; // optimization for minifier.\n    for (let index = 0; index < handlers.length; index++) {\n      try {\n        handlers[index](config);\n      } catch (ex) {\n        config.log.error(`Error calling onChanged handler: ${ex}`);\n      }\n    }\n  }\n\n  private static getSavedServerSettings(config: Configuration): ISettingsWithVersion {\n    let item = config.storage.settings.get()[0];\n    if (item && item.value && item.value.version && item.value.settings) {\n      return item.value;\n    }\n\n    return { version: 0, settings: {} };\n  }\n}\n\n                                                                    \n\nexport class DefaultLastReferenceIdManager implements ILastReferenceIdManager {\n  /**\n   * Gets the last event's reference id that was submitted to the server.\n   * @type {string}\n   * @private\n   */\n  private _lastReferenceId: string = null;\n\n  /**\n   * Gets the last event's reference id that was submitted to the server.\n   * @returns {string}\n   */\n  public getLast(): string {\n    return this._lastReferenceId;\n  }\n\n  /**\n   * Clears the last event's reference id.\n   */\n  public clearLast(): void {\n    this._lastReferenceId = null;\n  }\n\n  /**\n   * Sets the last event's reference id.\n   * @param eventId\n   */\n  public setLast(eventId: string): void {\n    this._lastReferenceId = eventId;\n  }\n}\n\n                              \n\nexport class ConsoleLog implements ILog {\n  public trace(message: string): void {\n    this.log('trace', message);\n  }\n\n  public info(message: string): void {\n    this.log('info', message);\n  }\n\n  public warn(message: string): void {\n    this.log('warn', message);\n  }\n\n  public error(message: string): void {\n    this.log('error', message);\n  }\n\n  private log(level: string, message: string) {\n    if (console) {\n      let msg = `[${level}] Exceptionless: ${message}`;\n\n      if (console[level]) {\n        console[level](msg);\n      } else if (console.log) {\n        console[`log`](msg);\n      }\n    }\n  }\n}\n\n                              \n\nexport class NullLog implements ILog {\n  public trace(message: string): void { }\n  public info(message: string): void { }\n  public warn(message: string): void { }\n  public error(message: string): void { }\n}\n\nexport interface IUserInfo {\n  identity?: string;\n  name?: string;\n  data?: any;\n}\n\n                                                                                                         \n\nexport interface IEventPlugin {\n  priority?: number;\n  name?: string;\n  run(context: EventPluginContext, next?: () => void): void;\n}\n\n                                                                                                                                                                                             \n\nexport class EventPluginContext {\n  public cancelled: boolean;\n  public client: ExceptionlessClient;\n  public event: IEvent;\n  public contextData: ContextData;\n\n  constructor(client: ExceptionlessClient, event: IEvent, contextData?: ContextData) {\n    this.client = client;\n    this.event = event;\n    this.contextData = contextData ? contextData : new ContextData();\n  }\n\n  public get log(): ILog {\n    return this.client.config.log;\n  }\n}\n\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         \n\nexport class EventPluginManager {\n  public static run(context: EventPluginContext, callback: (context?: EventPluginContext) => void): void {\n    let wrap = function(plugin: IEventPlugin, next?: () => void): () => void {\n      return () => {\n        try {\n          if (!context.cancelled) {\n            plugin.run(context, next);\n          }\n        } catch (ex) {\n          context.cancelled = true;\n          context.log.error(`Error running plugin '${plugin.name}': ${ex.message}. Discarding Event.`);\n        }\n\n        if (context.cancelled && !!callback) {\n          callback(context);\n        }\n      };\n    };\n\n    let plugins: IEventPlugin[] = context.client.config.plugins; // optimization for minifier.\n    let wrappedPlugins: { (): void }[] = [];\n    if (!!callback) {\n      wrappedPlugins[plugins.length] = wrap({ name: 'cb', priority: 9007199254740992, run: callback }, null);\n    }\n\n    for (let index = plugins.length - 1; index > -1; index--) {\n      wrappedPlugins[index] = wrap(plugins[index], !!callback || (index < plugins.length - 1) ? wrappedPlugins[index + 1] : null);\n    }\n\n    wrappedPlugins[0]();\n  }\n\n  public static addDefaultPlugins(config: Configuration): void {\n    config.addPlugin(new ConfigurationDefaultsPlugin());\n    config.addPlugin(new ErrorPlugin());\n    config.addPlugin(new DuplicateCheckerPlugin());\n    config.addPlugin(new EventExclusionPlugin());\n    config.addPlugin(new ModuleInfoPlugin());\n    config.addPlugin(new RequestInfoPlugin());\n    config.addPlugin(new EnvironmentInfoPlugin());\n    config.addPlugin(new SubmissionMethodPlugin());\n  }\n}\n\n                                                                                                                                                               \n\nexport class HeartbeatPlugin implements IEventPlugin {\n  public priority: number = 100;\n  public name: string = 'HeartbeatPlugin';\n\n  private _interval: number;\n  private _intervalId: any;\n\n  constructor (heartbeatInterval: number = 30000) {\n    this._interval = heartbeatInterval;\n  }\n\n\n  public run(context: EventPluginContext, next?: () => void): void {\n    clearInterval(this._intervalId);\n\n    let user: IUserInfo = context.event.data['@user'];\n    if (user && user.identity) {\n      this._intervalId = setInterval(() => context.client.submitSessionHeartbeat(user.identity), this._interval);\n    }\n\n    next && next();\n  }\n}\n\n                                                                                                                                                \n\nexport class ReferenceIdPlugin implements IEventPlugin {\n  public priority: number = 20;\n  public name: string = 'ReferenceIdPlugin';\n\n  public run(context: EventPluginContext, next?: () => void): void {\n    if ((!context.event.reference_id || context.event.reference_id.length === 0) && context.event.type === 'error') {\n      context.event.reference_id = Utils.guid().replace('-', '').substring(0, 10);\n    }\n\n    next && next();\n  }\n}\n\n                                                                                                                                                                                                                                                                                                                                     \n\nexport class DefaultEventQueue implements IEventQueue {\n  /**\n   * The configuration object.\n   * @type {Configuration}\n   * @private\n   */\n  private _config: Configuration;\n\n  /**\n   * A list of handlers that will be fired when events are submitted.\n   * @type {Array}\n   * @private\n   */\n  private _handlers: { (events: IEvent[], response: SubmissionResponse): void }[] = [];\n\n  /**\n   * Suspends processing until the specified time.\n   * @type {Date}\n   * @private\n   */\n  private _suspendProcessingUntil: Date;\n\n  /**\n   * Discards queued items until the specified time.\n   * @type {Date}\n   * @private\n   */\n  private _discardQueuedItemsUntil: Date;\n\n  /**\n   * Returns true if the queue is processing.\n   * @type {boolean}\n   * @private\n   */\n  private _processingQueue: boolean = false;\n\n  /**\n   * Processes the queue every xx seconds.\n   * @type {Timer}\n   * @private\n   */\n  private _queueTimer: any;\n\n  constructor(config: Configuration) {\n    this._config = config;\n  }\n\n  public enqueue(event: IEvent): void {\n    const eventWillNotBeQueued: string = 'The event will not be queued.'; // optimization for minifier.\n    let config: Configuration = this._config; // Optimization for minifier.\n    let log: ILog = config.log; // Optimization for minifier.\n\n    if (!config.enabled) {\n      log.info(`Configuration is disabled. ${eventWillNotBeQueued}`);\n      return;\n    }\n\n    if (!config.isValid) {\n      log.info(`Invalid Api Key. ${eventWillNotBeQueued}`);\n      return;\n    }\n\n    if (this.areQueuedItemsDiscarded()) {\n      log.info(`Queue items are currently being discarded. ${eventWillNotBeQueued}`);\n      return;\n    }\n\n    this.ensureQueueTimer();\n\n    let timestamp = config.storage.queue.save(event);\n    let logText = `type=${event.type} ${!!event.reference_id ? 'refid=' + event.reference_id : ''}`;\n    if (timestamp) {\n      log.info(`Enqueuing event: ${timestamp} ${logText}`);\n    } else {\n      log.error(`Could not enqueue event ${logText}`);\n    }\n  }\n\n  public process(isAppExiting?: boolean): void {\n    const queueNotProcessed: string = 'The queue will not be processed.'; // optimization for minifier.\n    let config: Configuration = this._config; // Optimization for minifier.\n    let log: ILog = config.log; // Optimization for minifier.\n\n    if (this._processingQueue) {\n      return;\n    }\n\n    log.info('Processing queue...');\n    if (!config.enabled) {\n      log.info(`Configuration is disabled. ${queueNotProcessed}`);\n      return;\n    }\n\n    if (!config.isValid) {\n      log.info(`Invalid Api Key. ${queueNotProcessed}`);\n      return;\n    }\n\n    this._processingQueue = true;\n    this.ensureQueueTimer();\n\n    try {\n      let events = config.storage.queue.get(config.submissionBatchSize);\n      if (!events || events.length === 0) {\n        this._processingQueue = false;\n        return;\n      }\n\n      log.info(`Sending ${events.length} events to ${config.serverUrl}.`);\n      config.submissionClient.postEvents(events.map(e => e.value), config, (response: SubmissionResponse) => {\n        this.processSubmissionResponse(response, events);\n        this.eventsPosted(events.map(e => e.value), response);\n        log.info('Finished processing queue.');\n        this._processingQueue = false;\n      }, isAppExiting);\n    } catch (ex) {\n      log.error(`Error processing queue: ${ex}`);\n      this.suspendProcessing();\n      this._processingQueue = false;\n    }\n  }\n\n  public suspendProcessing(durationInMinutes?: number, discardFutureQueuedItems?: boolean, clearQueue?: boolean): void {\n    let config: Configuration = this._config; // Optimization for minifier.\n\n    if (!durationInMinutes || durationInMinutes <= 0) {\n      durationInMinutes = 5;\n    }\n\n    config.log.info(`Suspending processing for ${durationInMinutes} minutes.`);\n    this._suspendProcessingUntil = new Date(new Date().getTime() + (durationInMinutes * 60000));\n\n    if (discardFutureQueuedItems) {\n      this._discardQueuedItemsUntil = this._suspendProcessingUntil;\n    }\n\n    if (clearQueue) {\n      // Account is over the limit and we want to ensure that the sample size being sent in will contain newer errors.\n      config.storage.queue.clear();\n    }\n  }\n\n  public onEventsPosted(handler: (events: IEvent[], response: SubmissionResponse) => void): void {\n    !!handler && this._handlers.push(handler);\n  }\n\n  private eventsPosted(events: IEvent[], response: SubmissionResponse) {\n    let handlers = this._handlers; // optimization for minifier.\n    for (let index = 0; index < handlers.length; index++) {\n      try {\n        handlers[index](events, response);\n      } catch (ex) {\n        this._config.log.error(`Error calling onEventsPosted handler: ${ex}`);\n      }\n    }\n  }\n\n  private areQueuedItemsDiscarded(): boolean {\n    return this._discardQueuedItemsUntil && this._discardQueuedItemsUntil > new Date();\n  }\n\n  private ensureQueueTimer(): void {\n    if (!this._queueTimer) {\n      this._queueTimer = setInterval(() => this.onProcessQueue(), 10000);\n    }\n  }\n\n  private isQueueProcessingSuspended(): boolean {\n    return this._suspendProcessingUntil && this._suspendProcessingUntil > new Date();\n  }\n\n  private onProcessQueue(): void {\n    if (!this.isQueueProcessingSuspended() && !this._processingQueue) {\n      this.process();\n    }\n  }\n\n  private processSubmissionResponse(response: SubmissionResponse, events: IStorageItem[]): void {\n    const noSubmission: string = 'The event will not be submitted.'; // Optimization for minifier.\n    let config: Configuration = this._config; // Optimization for minifier.\n    let log: ILog = config.log; // Optimization for minifier.\n\n    if (response.success) {\n      log.info(`Sent ${events.length} events.`);\n      this.removeEvents(events);\n      return;\n    }\n\n    if (response.serviceUnavailable) {\n      // You are currently over your rate limit or the servers are under stress.\n      log.error('Server returned service unavailable.');\n      this.suspendProcessing();\n      return;\n    }\n\n    if (response.paymentRequired) {\n      // If the organization over the rate limit then discard the event.\n      log.info('Too many events have been submitted, please upgrade your plan.');\n      this.suspendProcessing(null, true, true);\n      return;\n    }\n\n    if (response.unableToAuthenticate) {\n      // The api key was suspended or could not be authorized.\n      log.info(`Unable to authenticate, please check your configuration. ${noSubmission}`);\n      this.suspendProcessing(15);\n      this.removeEvents(events);\n      return;\n    }\n\n    if (response.notFound || response.badRequest) {\n      // The service end point could not be found.\n      log.error(`Error while trying to submit data: ${response.message}`);\n      this.suspendProcessing(60 * 4);\n      this.removeEvents(events);\n      return;\n    }\n\n    if (response.requestEntityTooLarge) {\n      let message = 'Event submission discarded for being too large.';\n      if (config.submissionBatchSize > 1) {\n        log.error(`${message} Retrying with smaller batch size.`);\n        config.submissionBatchSize = Math.max(1, Math.round(config.submissionBatchSize / 1.5));\n      } else {\n        log.error(`${message} ${noSubmission}`);\n        this.removeEvents(events);\n      }\n\n      return;\n    }\n\n    if (!response.success) {\n      log.error(`Error submitting events: ${response.message || 'Please check the network tab for more info.'}`);\n      this.suspendProcessing();\n    }\n  }\n\n  private removeEvents(events: IStorageItem[]) {\n    for (let index = 0; index < (events || []).length; index++) {\n      this._config.storage.queue.remove(events[index].timestamp);\n    }\n  }\n}\n\n                                                                                                                                                  \n\nexport class InMemoryStorageProvider implements IStorageProvider {\n  public queue: IStorage;\n  public settings: IStorage;\n\n  constructor(maxQueueItems: number = 250) {\n    this.queue = new InMemoryStorage(maxQueueItems);\n    this.settings = new InMemoryStorage(1);\n  }\n\n}\n\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        \n\ndeclare var XDomainRequest: { new (); create(); };\n\nexport class DefaultSubmissionClient implements ISubmissionClient {\n  public configurationVersionHeader: string = 'x-exceptionless-configversion';\n\n  public postEvents(events: IEvent[], config: Configuration, callback: (response: SubmissionResponse) => void, isAppExiting?: boolean): void {\n    let data = JSON.stringify(events);\n    let request = this.createRequest(config, 'POST',  `${config.serverUrl}/api/v2/events`, data);\n    let cb = this.createSubmissionCallback(config, callback);\n\n    return config.submissionAdapter.sendRequest(request, cb, isAppExiting);\n  }\n\n  public postUserDescription(referenceId: string, description: IUserDescription, config: Configuration, callback: (response: SubmissionResponse) => void): void {\n    let path = `${config.serverUrl}/api/v2/events/by-ref/${encodeURIComponent(referenceId)}/user-description`;\n    let data = JSON.stringify(description);\n    let request = this.createRequest(config, 'POST', path, data);\n    let cb = this.createSubmissionCallback(config, callback);\n\n    return config.submissionAdapter.sendRequest(request, cb);\n  }\n\n  public getSettings(config: Configuration, version: number, callback: (response: SettingsResponse) => void): void {\n    let request = this.createRequest(config, 'GET', `${config.serverUrl}/api/v2/projects/config?v=${version}`);\n    let cb = (status, message, data?, headers?) => {\n      if (status !== 200) {\n        return callback(new SettingsResponse(false, null, -1, null, message));\n      }\n\n      let settings: IClientConfiguration;\n      try {\n        settings = JSON.parse(data);\n      } catch (e) {\n        config.log.error(`Unable to parse settings: '${data}'`);\n      }\n\n      if (!settings || isNaN(settings.version)) {\n        return callback(new SettingsResponse(false, null, -1, null, 'Invalid configuration settings.'));\n      }\n\n      callback(new SettingsResponse(true, settings.settings || {}, settings.version));\n    };\n\n    return config.submissionAdapter.sendRequest(request, cb);\n  }\n\n  public sendHeartbeat(sessionIdOrUserId: string, closeSession: boolean, config: Configuration): void {\n    let request = this.createRequest(config, 'GET', `${config.heartbeatServerUrl}/api/v2/events/session/heartbeat?id=${sessionIdOrUserId}&close=${closeSession}`);\n    config.submissionAdapter.sendRequest(request);\n  }\n\n  private createRequest(config: Configuration, method: string, url: string, data: string = null): SubmissionRequest {\n    return {\n      method,\n      url,\n      data,\n      apiKey: config.apiKey,\n      userAgent: config.userAgent\n    };\n  }\n\n  private createSubmissionCallback(config: Configuration, callback: (response: SubmissionResponse) => void) {\n    return (status, message, data?, headers?) => {\n      let settingsVersion: number = headers && parseInt(headers[this.configurationVersionHeader], 10);\n      SettingsManager.checkVersion(settingsVersion, config);\n\n      callback(new SubmissionResponse(status, message));\n    };\n  }\n}\n\nexport class Utils {\n  public static addRange<T>(target: T[], ...values: T[]) {\n    if (!target) {\n      target = [];\n    }\n\n    if (!values || values.length === 0) {\n      return target;\n    }\n\n    for (let index = 0; index < values.length; index++) {\n      if (values[index] && target.indexOf(values[index]) < 0) {\n        target.push(values[index]);\n      }\n    }\n\n    return target;\n  }\n\n  public static getHashCode(source: string): number {\n    if (!source || source.length === 0) {\n      return 0;\n    }\n\n    let hash: number = 0;\n    for (let index = 0; index < source.length; index++) {\n      let character = source.charCodeAt(index);\n      hash = ((hash << 5) - hash) + character;\n      hash |= 0;\n    }\n\n    return hash;\n  }\n\n  public static getCookies(cookies: string, exclusions?: string[]): Object {\n    let result: Object = {};\n\n    let parts: string[] = (cookies || '').split('; ');\n    for (let index = 0; index < parts.length; index++) {\n      let cookie: string[] = parts[index].split('=');\n      if (!Utils.isMatch(cookie[0], exclusions)) {\n        result[cookie[0]] = cookie[1];\n      }\n    }\n\n    return !Utils.isEmpty(result) ? result : null;\n  }\n\n  public static guid(): string {\n    function s4() {\n      return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);\n    }\n\n    return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();\n  }\n\n  public static merge(defaultValues: Object, values: Object) {\n    let result: Object = {};\n\n    for (let key in defaultValues || {}) {\n      if (!!defaultValues[key]) {\n        result[key] = defaultValues[key];\n      }\n    }\n\n    for (let key in values || {}) {\n      if (!!values[key]) {\n        result[key] = values[key];\n      }\n    }\n\n    return result;\n  }\n\n  public static parseVersion(source: string): string {\n    if (!source) {\n      return null;\n    }\n\n    let versionRegex = /(v?((\\d+)\\.(\\d+)(\\.(\\d+))?)(?:-([\\dA-Za-z\\-]+(?:\\.[\\dA-Za-z\\-]+)*))?(?:\\+([\\dA-Za-z\\-]+(?:\\.[\\dA-Za-z\\-]+)*))?)/;\n    let matches = versionRegex.exec(source);\n    if (matches && matches.length > 0) {\n      return matches[0];\n    }\n\n    return null;\n  }\n\n  public static parseQueryString(query: string, exclusions?: string[]) {\n    if (!query || query.length === 0) {\n      return null;\n    }\n\n    let pairs: string[] = query.split('&');\n    if (pairs.length === 0) {\n      return null;\n    }\n\n    let result: Object = {};\n    for (let index = 0; index < pairs.length; index++) {\n      let pair = pairs[index].split('=');\n      if (!Utils.isMatch(pair[0], exclusions)) {\n        result[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\n      }\n    }\n\n    return !Utils.isEmpty(result) ? result : null;\n  }\n\n  public static randomNumber(): number {\n    return Math.floor(Math.random() * 9007199254740992);\n  }\n\n  /**\n   * Checks to see if a value matches a pattern.\n   * @param input the value to check against the @pattern.\n   * @param pattern The pattern to check, supports wild cards (*).\n   */\n  public static isMatch(input: string, patterns: string[], ignoreCase: boolean = true): boolean {\n    if (!input || typeof input !== 'string') {\n      return false;\n    }\n\n    let trim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n    input = (ignoreCase ? input.toLowerCase() : input).replace(trim, '');\n\n    return (patterns || []).some(pattern => {\n      if (typeof pattern !== 'string') {\n        return false;\n      }\n\n      pattern = (ignoreCase ? pattern.toLowerCase() : pattern).replace(trim, '');\n      if (pattern.length <= 0) {\n        return false;\n      }\n\n      let startsWithWildcard: boolean = pattern[0] === '*';\n      if (startsWithWildcard) {\n        pattern = pattern.slice(1);\n      }\n\n      let endsWithWildcard: boolean = pattern[pattern.length - 1] === '*';\n      if (endsWithWildcard) {\n        pattern = pattern.substring(0, pattern.length - 1);\n      }\n\n      if (startsWithWildcard && endsWithWildcard) {\n        return pattern.length <= input.length && input.indexOf(pattern, 0) !== -1;\n      }\n\n      if (startsWithWildcard) {\n        return Utils.endsWith(input, pattern);\n      }\n\n      if (endsWithWildcard) {\n        return Utils.startsWith(input, pattern);\n      }\n\n      return input === pattern;\n    });\n  }\n\n  public static isEmpty(input: Object) {\n    return input === null || (typeof (input) === 'object' && Object.keys(input).length === 0);\n  }\n\n  public static startsWith(input: string, prefix: string): boolean {\n    return input.substring(0, prefix.length) === prefix;\n  }\n\n  public static endsWith(input: string, suffix: string): boolean {\n    return input.indexOf(suffix, input.length - suffix.length) !== -1;\n  }\n\n  /**\n   * Stringifys an object with optional exclusions and max depth.\n   * @param data The data object to add.\n   * @param exclusions Any property names that should be excluded.\n   * @param maxDepth The max depth of the object to include.\n   */\n  public static stringify(data: any, exclusions?: string[], maxDepth?: number): string {\n    function stringifyImpl(obj: any, excludedKeys: string[]): string {\n      let cache: string[] = [];\n      return JSON.stringify(obj, function(key: string, value: any) {\n        if (Utils.isMatch(key, excludedKeys)) {\n          return;\n        }\n\n        if (typeof value === 'object' && !!value) {\n          if (cache.indexOf(value) !== -1) {\n            // Circular reference found, discard key\n            return;\n          }\n\n          cache.push(value);\n        }\n\n        return value;\n      });\n    }\n\n    if (({}).toString.call(data) === '[object Object]') {\n      let flattened = {};\n      /* tslint:disable:forin */\n      for (let prop in data) {\n        let value = data[prop];\n        if (value === data) {\n          continue;\n        }\n        flattened[prop] = data[prop];\n      }\n      /* tslint:enable:forin */\n\n      return stringifyImpl(flattened, exclusions);\n    }\n\n    if (({}).toString.call(data) === '[object Array]') {\n      let result = [];\n      for (let index = 0; index < data.length; index++) {\n        result[index] = JSON.parse(stringifyImpl(data[index], exclusions));\n      }\n\n      return JSON.stringify(result);\n    }\n\n    return stringifyImpl(data, exclusions);\n  }\n\n  public static toBoolean(input, defaultValue: boolean = false): boolean {\n    if (typeof input === 'boolean') {\n      return input;\n    }\n\n    if (input === null || typeof input !== 'number' && typeof input !== 'string') {\n      return defaultValue;\n    }\n\n    switch ((input + '').toLowerCase().trim()) {\n      case 'true': case 'yes': case '1': return true;\n      case 'false': case 'no': case '0': case null: return false;\n    }\n\n    return defaultValue;\n  }\n}\n\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 \n\nexport class Configuration implements IConfigurationSettings {\n  /**\n   * The default configuration settings that are applied to new configuration instances.\n   * @type {IConfigurationSettings}\n   * @private\n   */\n  private static _defaultSettings: IConfigurationSettings = null;\n\n  /**\n   * A default list of tags that will automatically be added to every\n   * report submitted to the server.\n   *\n   * @type {Array}\n   */\n  public defaultTags: string[] = [];\n\n  /**\n   * A default list of of extended data objects that will automatically\n   * be added to every report submitted to the server.\n   *\n   * @type {{}}\n   */\n  public defaultData: Object = {};\n\n  /**\n   * Whether the client is currently enabled or not. If it is disabled,\n   * submitted errors will be discarded and no data will be sent to the server.\n   *\n   * @returns {boolean}\n   */\n  public enabled: boolean = true;\n\n  public environmentInfoCollector: IEnvironmentInfoCollector;\n  public errorParser: IErrorParser;\n  public lastReferenceIdManager: ILastReferenceIdManager = new DefaultLastReferenceIdManager();\n  public log: ILog;\n  public moduleCollector: IModuleCollector;\n  public requestInfoCollector: IRequestInfoCollector;\n\n  /**\n   * Maximum number of events that should be sent to the server together in a batch. (Defaults to 50)\n   */\n  public submissionBatchSize: number;\n  public submissionAdapter: ISubmissionAdapter;\n  public submissionClient: ISubmissionClient;\n\n  /**\n   * Contains a dictionary of custom settings that can be used to control\n   * the client and will be automatically updated from the server.\n   */\n  public settings: Object = {};\n\n  public storage: IStorageProvider;\n\n  public queue: IEventQueue;\n\n  /**\n   * The API key that will be used when sending events to the server.\n   * @type {string}\n   * @private\n   */\n  private _apiKey: string;\n\n  /**\n   * The server url that all events will be sent to.\n   * @type {string}\n   * @private\n   */\n  private _serverUrl: string = 'https://collector.exceptionless.io';\n\n  /**\n   * The heartbeat server url that all heartbeats will be sent to.\n   * @type {string}\n   * @private\n   */\n  private _heartbeatServerUrl: string = 'https://heartbeat.exceptionless.io';\n\n  /**\n   * How often the client should check for updated server settings when idle. The default is every 2 minutes.\n   * @type {number}\n   * @private\n   */\n  private _updateSettingsWhenIdleInterval: number = 120000;\n\n  /**\n   * A list of exclusion patterns.\n   * @type {Array}\n   * @private\n   */\n  private _dataExclusions: string[] = [];\n\n  /**\n   * A list of user agent patterns.\n   * @type {Array}\n   * @private\n   */\n  private _userAgentBotPatterns: string[] = [];\n\n  /**\n   * The list of plugins that will be used in this configuration.\n   * @type {Array}\n   * @private\n   */\n  private _plugins: IEventPlugin[] = [];\n\n  /**\n   * A list of handlers that will be fired when configuration changes.\n   * @type {Array}\n   * @private\n   */\n  private _handlers: { (config: Configuration): void }[] = [];\n\n  constructor(configSettings?: IConfigurationSettings) {\n    function inject(fn: any) {\n      return typeof fn === 'function' ? fn(this) : fn;\n    }\n\n    configSettings = Utils.merge(Configuration.defaults, configSettings);\n\n    this.log = inject(configSettings.log) || new NullLog();\n    this.apiKey = configSettings.apiKey;\n    this.serverUrl = configSettings.serverUrl;\n    this.heartbeatServerUrl = configSettings.heartbeatServerUrl;\n    this.updateSettingsWhenIdleInterval = configSettings.updateSettingsWhenIdleInterval;\n\n    this.environmentInfoCollector = inject(configSettings.environmentInfoCollector);\n    this.errorParser = inject(configSettings.errorParser);\n    this.lastReferenceIdManager = inject(configSettings.lastReferenceIdManager) || new DefaultLastReferenceIdManager();\n    this.moduleCollector = inject(configSettings.moduleCollector);\n    this.requestInfoCollector = inject(configSettings.requestInfoCollector);\n    this.submissionBatchSize = inject(configSettings.submissionBatchSize) || 50;\n    this.submissionAdapter = inject(configSettings.submissionAdapter);\n    this.submissionClient = inject(configSettings.submissionClient) || new DefaultSubmissionClient();\n    this.storage = inject(configSettings.storage) || new InMemoryStorageProvider();\n    this.queue = inject(configSettings.queue) || new DefaultEventQueue(this);\n\n    SettingsManager.applySavedServerSettings(this);\n    EventPluginManager.addDefaultPlugins(this);\n  }\n\n  /**\n   * The API key that will be used when sending events to the server.\n   * @returns {string}\n   */\n  public get apiKey(): string {\n    return this._apiKey;\n  }\n\n  /**\n   * The API key that will be used when sending events to the server.\n   * @param value\n   */\n  public set apiKey(value: string) {\n    this._apiKey = value || null;\n    this.log.info(`apiKey: ${this._apiKey}`);\n    this.changed();\n  }\n\n  /**\n   * Returns true if the apiKey is valid.\n   * @returns {boolean}\n   */\n  public get isValid(): boolean {\n    return !!this.apiKey && this.apiKey.length >= 10;\n  }\n\n  /**\n   * The server url that all events will be sent to.\n   * @returns {string}\n   */\n  public get serverUrl(): string {\n    return this._serverUrl;\n  }\n\n  /**\n   * The server url that all events will be sent to.\n   * @param value\n   */\n  public set serverUrl(value: string) {\n    if (!!value) {\n      this._serverUrl = value;\n      this._heartbeatServerUrl = value;\n      this.log.info(`serverUrl: ${value}`);\n      this.changed();\n    }\n  }\n\n  /**\n   * The heartbeat server url that all heartbeats will be sent to.\n   * @returns {string}\n   */\n  public get heartbeatServerUrl(): string {\n    return this._heartbeatServerUrl;\n  }\n\n  /**\n   * The heartbeat server url that all heartbeats will be sent to.\n   * @param value\n   */\n  public set heartbeatServerUrl(value: string) {\n    if (!!value) {\n      this._heartbeatServerUrl = value;\n      this.log.info(`heartbeatServerUrl: ${value}`);\n      this.changed();\n    }\n  }\n\n  /**\n   * How often the client should check for updated server settings when idle. The default is every 2 minutes.\n   * @returns {number}\n   */\n  public get updateSettingsWhenIdleInterval(): number {\n    return this._updateSettingsWhenIdleInterval;\n  }\n\n  /**\n   * How often the client should check for updated server settings when idle. The default is every 2 minutes.\n   * @param value\n   */\n  public set updateSettingsWhenIdleInterval(value: number) {\n    if (typeof value !== 'number') {\n      return;\n    }\n\n    if (value <= 0) {\n      value = -1;\n    } else if (value > 0 && value < 15000) {\n      value = 15000;\n    }\n\n    this._updateSettingsWhenIdleInterval = value;\n    this.log.info(`updateSettingsWhenIdleInterval: ${value}`);\n    this.changed();\n  }\n\n  /**\n   *  A list of exclusion patterns that will automatically remove any data that\n   *  matches them from any data submitted to the server.\n   *\n   *  For example, entering CreditCard will remove any extended data properties,\n   *  form fields, cookies and query parameters from the report.\n   *\n   * @returns {string[]}\n   */\n  public get dataExclusions(): string[] {\n    let exclusions: string = this.settings['@@DataExclusions'];\n    return this._dataExclusions.concat(exclusions && exclusions.split(',') || []);\n  }\n\n  /**\n   * Add items to the list of exclusion patterns that will automatically remove any\n   * data that matches them from any data submitted to the server.\n   *\n   * For example, entering CreditCard will remove any extended data properties, form\n   * fields, cookies and query parameters from the report.\n   *\n   * @param exclusions\n   */\n  public addDataExclusions(...exclusions: string[]) {\n    this._dataExclusions = Utils.addRange<string>(this._dataExclusions, ...exclusions);\n  }\n\n  /**\n   * A list of user agent patterns that will cause any event with a matching user agent to not be submitted.\n   *\n   * For example, entering *Bot* will cause any events that contains a user agent of Bot will not be submitted.\n   *\n   * @returns {string[]}\n   */\n  public get userAgentBotPatterns(): string[] {\n    let patterns: string = this.settings['@@UserAgentBotPatterns'];\n    return this._userAgentBotPatterns.concat(patterns && patterns.split(',') || []);\n  }\n\n  /**\n   * Add items to the list of user agent patterns that will cause any event with a matching user agent to not be submitted.\n   *\n   * For example, entering *Bot* will cause any events that contains a user agent of Bot will not be submitted.\n   *\n   * @param userAgentBotPatterns\n   */\n  public addUserAgentBotPatterns(...userAgentBotPatterns: string[]) {\n    this._userAgentBotPatterns = Utils.addRange<string>(this._userAgentBotPatterns, ...userAgentBotPatterns);\n  }\n\n  /**\n   * The list of plugins that will be used in this configuration.\n   * @returns {IEventPlugin[]}\n   */\n  public get plugins(): IEventPlugin[] {\n    return this._plugins.sort((p1: IEventPlugin, p2: IEventPlugin) => {\n      return (p1.priority < p2.priority) ? -1 : (p1.priority > p2.priority) ? 1 : 0;\n    });\n  }\n\n  /**\n   * Register an plugin to be used in this configuration.\n   * @param plugin\n   */\n  public addPlugin(plugin: IEventPlugin): void;\n\n  /**\n   * Register an plugin to be used in this configuration.\n   * @param name The name used to identify the plugin.\n   * @param priority Used to determine plugins priority.\n   * @param pluginAction A function that is run.\n   */\n  public addPlugin(name: string, priority: number, pluginAction: (context: EventPluginContext, next?: () => void) => void): void;\n  public addPlugin(pluginOrName: IEventPlugin | string, priority?: number, pluginAction?: (context: EventPluginContext, next?: () => void) => void): void {\n    let plugin: IEventPlugin = !!pluginAction ? { name: <string>pluginOrName, priority: priority, run: pluginAction } : <IEventPlugin>pluginOrName;\n    if (!plugin || !plugin.run) {\n      this.log.error('Add plugin failed: Run method not defined');\n      return;\n    }\n\n    if (!plugin.name) {\n      plugin.name = Utils.guid();\n    }\n\n    if (!plugin.priority) {\n      plugin.priority = 0;\n    }\n\n    let pluginExists: boolean = false;\n    let plugins = this._plugins; // optimization for minifier.\n    for (let index = 0; index < plugins.length; index++) {\n      if (plugins[index].name === plugin.name) {\n        pluginExists = true;\n        break;\n      }\n    }\n\n    if (!pluginExists) {\n      plugins.push(plugin);\n    }\n  }\n\n  /**\n   * Remove the plugin from this configuration.\n   * @param plugin\n   */\n  public removePlugin(plugin: IEventPlugin): void;\n\n  /**\n   * Remove an plugin by key from this configuration.\n   * @param name\n   */\n  public removePlugin(name: string): void;\n  public removePlugin(pluginOrName: IEventPlugin | string): void {\n    let name: string = typeof pluginOrName === 'string' ? pluginOrName : pluginOrName.name;\n    if (!name) {\n      this.log.error('Remove plugin failed: Plugin name not defined');\n      return;\n    }\n\n    let plugins = this._plugins; // optimization for minifier.\n    for (let index = 0; index < plugins.length; index++) {\n      if (plugins[index].name === name) {\n        plugins.splice(index, 1);\n        break;\n      }\n    }\n  }\n\n  /**\n   * Automatically set the application version for events.\n   * @param version\n   */\n  public setVersion(version: string): void {\n    if (!!version) {\n      this.defaultData['@version'] = version;\n    }\n  }\n\n  public setUserIdentity(userInfo: IUserInfo): void;\n  public setUserIdentity(identity: string): void;\n  public setUserIdentity(identity: string, name: string): void;\n  public setUserIdentity(userInfoOrIdentity: IUserInfo | string, name?: string): void {\n    const USER_KEY: string = '@user'; // optimization for minifier.\n    let userInfo: IUserInfo = typeof userInfoOrIdentity !== 'string' ? userInfoOrIdentity : { identity: userInfoOrIdentity, name: name };\n\n    let shouldRemove: boolean = !userInfo || (!userInfo.identity && !userInfo.name);\n    if (shouldRemove) {\n      delete this.defaultData[USER_KEY];\n    } else {\n      this.defaultData[USER_KEY] = userInfo;\n    }\n\n    this.log.info(`user identity: ${shouldRemove ? 'null' : userInfo.identity}`);\n  }\n\n  /**\n   * Used to identify the client that sent the events to the server.\n   * @returns {string}\n   */\n  public get userAgent(): string {\n    return 'exceptionless-js/1.0.0.0';\n  }\n\n  /**\n   * Automatically send a heartbeat to keep the session alive.\n   */\n  public useSessions(sendHeartbeats: boolean = true, heartbeatInterval: number = 30000): void {\n    if (sendHeartbeats) {\n      this.addPlugin(new HeartbeatPlugin(heartbeatInterval));\n    }\n  }\n\n  /**\n   * Automatically set a reference id for error events.\n   */\n  public useReferenceIds(): void {\n    this.addPlugin(new ReferenceIdPlugin());\n  }\n\n  public useLocalStorage(): void {\n    // This method will be injected via the prototype.\n  }\n\n  // TODO: Support a min log level.\n  public useDebugLogger(): void {\n    this.log = new ConsoleLog();\n  }\n\n  public onChanged(handler: (config: Configuration) => void) {\n    !!handler && this._handlers.push(handler);\n  }\n\n  private changed() {\n    let handlers = this._handlers; // optimization for minifier.\n    for (let index = 0; index < handlers.length; index++) {\n      try {\n        handlers[index](this);\n      } catch (ex) {\n        this.log.error(`Error calling onChanged handler: ${ex}`);\n      }\n    }\n  }\n\n  /**\n   * The default configuration settings that are applied to new configuration instances.\n   * @returns {IConfigurationSettings}\n   */\n  public static get defaults() {\n    if (Configuration._defaultSettings === null) {\n      Configuration._defaultSettings = {};\n    }\n\n    return Configuration._defaultSettings;\n  }\n}\n\n                                                                                                                                                                                                                                                                                                                                                                                   \n\nexport class EventBuilder {\n  public target: IEvent;\n  public client: ExceptionlessClient;\n  public pluginContextData: ContextData;\n\n  private _validIdentifierErrorMessage: string = 'must contain between 8 and 100 alphanumeric or \\'-\\' characters.'; // optimization for minifier.\n\n  constructor(event: IEvent, client: ExceptionlessClient, pluginContextData?: ContextData) {\n    this.target = event;\n    this.client = client;\n    this.pluginContextData = pluginContextData || new ContextData();\n  }\n\n  public setType(type: string): EventBuilder {\n    if (!!type) {\n      this.target.type = type;\n    }\n\n    return this;\n  }\n\n  public setSource(source: string): EventBuilder {\n    if (!!source) {\n      this.target.source = source;\n    }\n\n    return this;\n  }\n\n  public setReferenceId(referenceId: string): EventBuilder {\n    if (!this.isValidIdentifier(referenceId)) {\n      throw new Error(`ReferenceId ${this._validIdentifierErrorMessage}`);\n    }\n\n    this.target.reference_id = referenceId;\n    return this;\n  }\n\n  /**\n   * Allows you to reference a parent event by its ReferenceId property. This allows you to have parent and child relationships.\n   * @param name Reference name\n   * @param id The reference id that points to a specific event\n   * @returns {EventBuilder}\n     */\n  public setEventReference(name: string, id: string): EventBuilder {\n    if (!name) {\n      throw new Error('Invalid name');\n    }\n\n    if (!id || !this.isValidIdentifier(id)) {\n      throw new Error(`Id ${this._validIdentifierErrorMessage}`);\n    }\n\n    this.setProperty('@ref:' + name, id);\n    return this;\n  }\n\n  public setMessage(message: string): EventBuilder {\n    if (!!message) {\n      this.target.message = message;\n    }\n\n    return this;\n  }\n\n  public setGeo(latitude: number, longitude: number): EventBuilder {\n    if (latitude < -90.0 || latitude > 90.0) {\n      throw new Error('Must be a valid latitude value between -90.0 and 90.0.');\n    }\n\n    if (longitude < -180.0 || longitude > 180.0) {\n      throw new Error('Must be a valid longitude value between -180.0 and 180.0.');\n    }\n\n    this.target.geo = `${latitude},${longitude}`;\n    return this;\n  }\n\n  public setUserIdentity(userInfo: IUserInfo): EventBuilder;\n  public setUserIdentity(identity: string): EventBuilder;\n  public setUserIdentity(identity: string, name: string): EventBuilder;\n  public setUserIdentity(userInfoOrIdentity: IUserInfo | string, name?: string): EventBuilder {\n    let userInfo = typeof userInfoOrIdentity !== 'string' ? userInfoOrIdentity : { identity: userInfoOrIdentity, name: name };\n    if (!userInfo || (!userInfo.identity && !userInfo.name)) {\n      return this;\n    }\n\n    this.setProperty('@user', userInfo);\n    return this;\n  }\n\n  /**\n   * Sets the user's description of the event.\n   *\n   * @param emailAddress The email address\n   * @param description The user's description of the event.\n   * @returns {EventBuilder}\n     */\n  public setUserDescription(emailAddress: string, description: string): EventBuilder {\n    if (emailAddress && description) {\n      this.setProperty('@user_description', { email_address: emailAddress, description: description });\n    }\n\n    return this;\n  }\n\n  /**\n   * Changes default stacking behavior by setting manual\n   * stacking information.\n   * @param signatureData A dictionary of strings to use for stacking.\n   * @param title An optional title for the stacking information.\n   * @returns {EventBuilder}\n     */\n  public setManualStackingInfo(signatureData: any, title?: string) {\n    if (signatureData) {\n      let stack = <IManualStackingInfo>{\n        signature_data: signatureData\n      };\n      if (title) {\n        stack.title = title;\n      }\n      this.setProperty('@stack', stack);\n    }\n\n    return this;\n  }\n\n  /**\n   * Changes default stacking behavior by setting the stacking key.\n   * @param manualStackingKey The manual stacking key.\n   * @param title An optional title for the stacking information.\n   * @returns {EventBuilder}\n     */\n  public setManualStackingKey(manualStackingKey: string, title?: string): EventBuilder {\n    if (manualStackingKey) {\n      let data = {\n        'ManualStackingKey': manualStackingKey\n      };\n      this.setManualStackingInfo(data, title);\n    }\n\n    return this;\n  }\n\n  public setValue(value: number): EventBuilder {\n    if (!!value) {\n      this.target.value = value;\n    }\n\n    return this;\n  }\n\n  public addTags(...tags: string[]): EventBuilder {\n    this.target.tags = Utils.addRange<string>(this.target.tags, ...tags);\n    return this;\n  }\n\n  /**\n   * Adds the object to extended data. Uses @excludedPropertyNames\n   * to exclude data from being included in the event.\n   * @param name The data object to add.\n   * @param value The name of the object to add.\n   * @param maxDepth The max depth of the object to include.\n   * @param excludedPropertyNames Any property names that should be excluded.\n   */\n  public setProperty(name: string, value: any, maxDepth?: number, excludedPropertyNames?: string[]): EventBuilder {\n    if (!name || (value === undefined || value == null)) {\n      return this;\n    }\n\n    if (!this.target.data) {\n      this.target.data = {};\n    }\n\n    let result = JSON.parse(Utils.stringify(value, this.client.config.dataExclusions.concat(excludedPropertyNames || []), maxDepth));\n    if (!Utils.isEmpty(result)) {\n      this.target.data[name] = result;\n    }\n\n    return this;\n  }\n\n  public markAsCritical(critical: boolean): EventBuilder {\n    if (critical) {\n      this.addTags('Critical');\n    }\n\n    return this;\n  }\n\n  public addRequestInfo(request: Object): EventBuilder {\n    if (!!request) {\n      this.pluginContextData['@request'] = request;\n    }\n\n    return this;\n  }\n\n  public submit(callback?: (context: EventPluginContext) => void): void {\n    this.client.submitEvent(this.target, this.pluginContextData, callback);\n  }\n\n  private isValidIdentifier(value: string): boolean {\n    if (!value) {\n      return true;\n    }\n\n    if (value.length < 8 || value.length > 100) {\n      return false;\n    }\n\n    for (let index = 0; index < value.length; index++) {\n      let code = value.charCodeAt(index);\n      let isDigit = (code >= 48) && (code <= 57);\n      let isLetter = ((code >= 65) && (code <= 90)) || ((code >= 97) && (code <= 122));\n      let isMinus = code === 45;\n\n      if (!(isDigit || isLetter) && !isMinus) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n}\n\nexport interface IUserDescription {\n  email_address?: string;\n  description?: string;\n  data?: any;\n}\n\nexport class ContextData {\n  public setException(exception: Error): void {\n    if (exception) {\n      this['@@_Exception'] = exception;\n    }\n  }\n\n  public get hasException(): boolean {\n    return !!this['@@_Exception'];\n  }\n\n  public getException(): Error {\n    return this['@@_Exception'] || null;\n  }\n\n  public markAsUnhandledError(): void {\n    this['@@_IsUnhandledError'] = true;\n  }\n\n  public get isUnhandledError(): boolean {\n    return !!this['@@_IsUnhandledError'];\n  }\n\n  public setSubmissionMethod(method: string): void {\n    if (method) {\n      this['@@_SubmissionMethod'] = method;\n    }\n  }\n\n  public getSubmissionMethod(): string {\n    return this['@@_SubmissionMethod'] || null;\n  }\n}\n\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n\nexport class ExceptionlessClient {\n  /**\n   * The default ExceptionlessClient instance.\n   * @type {ExceptionlessClient}\n   * @private\n   */\n  private static _instance: ExceptionlessClient = null;\n\n  public config: Configuration;\n\n  private _intervalId: any;\n  private _timeoutId: any;\n\n  constructor();\n  constructor(settings: IConfigurationSettings);\n  constructor(apiKey: string, serverUrl?: string);\n  constructor(settingsOrApiKey?: IConfigurationSettings | string, serverUrl?: string) {\n    if (typeof settingsOrApiKey === 'object') {\n      this.config = new Configuration(settingsOrApiKey);\n    } else {\n      this.config = new Configuration({ apiKey: <string>settingsOrApiKey, serverUrl: serverUrl });\n    }\n\n    this.updateSettingsTimer(5000);\n    this.config.onChanged((config) => this.updateSettingsTimer(this._timeoutId > 0 ? 5000 : 0));\n    this.config.queue.onEventsPosted((events, response) =>  this.updateSettingsTimer());\n  }\n\n  public createException(exception: Error): EventBuilder {\n    let pluginContextData = new ContextData();\n    pluginContextData.setException(exception);\n    return this.createEvent(pluginContextData).setType('error');\n  }\n\n  public submitException(exception: Error, callback?: (context: EventPluginContext) => void): void {\n    this.createException(exception).submit(callback);\n  }\n\n  public createUnhandledException(exception: Error, submissionMethod?: string): EventBuilder {\n    let builder = this.createException(exception);\n    builder.pluginContextData.markAsUnhandledError();\n    builder.pluginContextData.setSubmissionMethod(submissionMethod);\n\n    return builder;\n  }\n\n  public submitUnhandledException(exception: Error, submissionMethod?: string, callback?: (context: EventPluginContext) => void) {\n    this.createUnhandledException(exception, submissionMethod).submit(callback);\n  }\n\n  public createFeatureUsage(feature: string): EventBuilder {\n    return this.createEvent().setType('usage').setSource(feature);\n  }\n\n  public submitFeatureUsage(feature: string, callback?: (context: EventPluginContext) => void): void {\n    this.createFeatureUsage(feature).submit(callback);\n  }\n\n  public createLog(message: string): EventBuilder;\n  public createLog(source: string, message: string): EventBuilder;\n  public createLog(source: string, message: string, level: string): EventBuilder;\n  public createLog(sourceOrMessage: string, message?: string, level?: string): EventBuilder {\n    let builder = this.createEvent().setType('log');\n\n    if (message && level) {\n      builder = builder.setSource(sourceOrMessage).setMessage(message).setProperty('@level', level);\n    } else if (message) {\n      builder = builder.setSource(sourceOrMessage).setMessage(message);\n    } else {\n      builder = builder.setMessage(sourceOrMessage);\n\n      try {\n        // TODO: Look into using https: //www.stevefenton.co.uk/Content/Blog/Date/201304/Blog/Obtaining-A-Class-Name-At-Runtime-In-TypeScript/\n        let caller: any = this.createLog.caller;\n        builder = builder.setSource(caller && caller.caller && caller.caller.name);\n      } catch (e) {\n        this.config.log.trace('Unable to resolve log source: ' + e.message);\n      }\n    }\n\n    return builder;\n  }\n\n  public submitLog(message: string): void;\n  public submitLog(source: string, message: string): void;\n  public submitLog(source: string, message: string, level: string, callback?: (context: EventPluginContext) => void): void;\n  public submitLog(sourceOrMessage: string, message?: string, level?: string, callback?: (context: EventPluginContext) => void): void {\n    this.createLog(sourceOrMessage, message, level).submit(callback);\n  }\n\n  public createNotFound(resource: string): EventBuilder {\n    return this.createEvent().setType('404').setSource(resource);\n  }\n\n  public submitNotFound(resource: string, callback?: (context: EventPluginContext) => void): void {\n    this.createNotFound(resource).submit(callback);\n  }\n\n  public createSessionStart(): EventBuilder {\n    return this.createEvent().setType('session');\n  }\n\n  public submitSessionStart(callback?: (context: EventPluginContext) => void): void {\n    this.createSessionStart().submit(callback);\n  }\n\n  public submitSessionEnd(sessionIdOrUserId: string): void {\n    if (sessionIdOrUserId) {\n      this.config.log.info(`Submitting session end: ${sessionIdOrUserId}`);\n      this.config.submissionClient.sendHeartbeat(sessionIdOrUserId, true, this.config);\n    }\n  }\n\n  public submitSessionHeartbeat(sessionIdOrUserId: string): void {\n    if (sessionIdOrUserId) {\n      this.config.log.info(`Submitting session heartbeat: ${sessionIdOrUserId}`);\n      this.config.submissionClient.sendHeartbeat(sessionIdOrUserId, false, this.config);\n    }\n  }\n\n  public createEvent(pluginContextData?: ContextData): EventBuilder {\n    return new EventBuilder({ date: new Date() }, this, pluginContextData);\n  }\n\n  /**\n   * Submits the event to be sent to the server.\n   * @param event The event data.\n   * @param pluginContextData Any contextual data objects to be used by Exceptionless plugins to gather default information for inclusion in the report information.\n   * @param callback\n   */\n  public submitEvent(event: IEvent, pluginContextData?: ContextData, callback?: (context: EventPluginContext) => void): void {\n    function cancelled(context: EventPluginContext) {\n      if (!!context) {\n        context.cancelled = true;\n      }\n\n      return !!callback && callback(context);\n    }\n\n    let context = new EventPluginContext(this, event, pluginContextData);\n    if (!event) {\n      return cancelled(context);\n    }\n\n    if (!this.config.enabled) {\n      this.config.log.info('Event submission is currently disabled.');\n      return cancelled(context);\n    }\n\n    if (!event.data) {\n      event.data = {};\n    }\n\n    if (!event.tags || !event.tags.length) {\n      event.tags = [];\n    }\n\n    EventPluginManager.run(context, function (ctx: EventPluginContext) {\n      let config = ctx.client.config;\n      let ev = ctx.event;\n\n      if (!ctx.cancelled) {\n        // ensure all required data\n        if (!ev.type || ev.type.length === 0) {\n          ev.type = 'log';\n        }\n\n        if (!ev.date) {\n          ev.date = new Date();\n        }\n\n        config.queue.enqueue(ev);\n\n        if (ev.reference_id && ev.reference_id.length > 0) {\n          ctx.log.info(`Setting last reference id '${ev.reference_id}'`);\n          config.lastReferenceIdManager.setLast(ev.reference_id);\n        }\n      }\n\n      !!callback && callback(ctx);\n    });\n  }\n\n  /**\n   * Updates the user's email address and description of an event for the specified reference id.\n   * @param referenceId The reference id of the event to update.\n   * @param email The user's email address to set on the event.\n   * @param description The user's description of the event.\n   * @param callback The submission response.\n   */\n  public updateUserEmailAndDescription(referenceId: string, email: string, description: string, callback?: (response: SubmissionResponse) => void) {\n    if (!referenceId || !email || !description || !this.config.enabled) {\n      return !!callback && callback(new SubmissionResponse(500, 'cancelled'));\n    }\n\n    let userDescription: IUserDescription = { email_address: email, description: description };\n    this.config.submissionClient.postUserDescription(referenceId, userDescription, this.config, (response: SubmissionResponse) => {\n      if (!response.success) {\n        this.config.log.error(`Failed to submit user email and description for event '${referenceId}': ${response.statusCode} ${response.message}`);\n      }\n\n      !!callback && callback(response);\n    });\n  }\n\n  /**\n   * Gets the last event client id that was submitted to the server.\n   * @returns {string} The event client id.\n   */\n  public getLastReferenceId(): string {\n    return this.config.lastReferenceIdManager.getLast();\n  }\n\n  private updateSettingsTimer(initialDelay?: number) {\n    this.config.log.info(`Updating settings timer with delay: ${initialDelay}`);\n\n    this._timeoutId = clearTimeout(this._timeoutId);\n    this._timeoutId = clearInterval(this._intervalId);\n\n    let interval = this.config.updateSettingsWhenIdleInterval;\n    if (interval > 0) {\n      let updateSettings = () => SettingsManager.updateSettings(this.config);\n      if (initialDelay > 0) {\n        this._timeoutId = setTimeout(updateSettings, initialDelay);\n      }\n\n      this._intervalId = setInterval(updateSettings, interval);\n    }\n  }\n\n  /**\n   * The default ExceptionlessClient instance.\n   * @type {ExceptionlessClient}\n   */\n  public static get default() {\n    if (ExceptionlessClient._instance === null) {\n      ExceptionlessClient._instance = new ExceptionlessClient(null);\n    }\n\n    return ExceptionlessClient._instance;\n  }\n}\n\nexport interface IManualStackingInfo {\n  title?: string;\n  signature_data?: any;\n}\n\nexport interface IModule {\n  data?: any;\n\n  module_id?: number;\n  name?: string;\n  version?: string;\n  is_entry?: boolean;\n  created_date?: Date;\n  modified_date?: Date;\n}\n\nexport interface IRequestInfo {\n  user_agent?: string;\n  http_method?: string;\n  is_secure?: boolean;\n  host?: string;\n  port?: number;\n  path?: string;\n  referrer?: string;\n  client_ip_address?: string;\n  cookies?: any;\n  post_data?: any;\n  query_string?: any;\n  data?: any;\n}\n\nexport interface IEnvironmentInfo {\n  processor_count?: number;\n  total_physical_memory?: number;\n  available_physical_memory?: number;\n  command_line?: string;\n  process_name?: string;\n  process_id?: string;\n  process_memory_size?: number;\n  thread_id?: string;\n  architecture?: string;\n  o_s_name?: string;\n  o_s_version?: string;\n  ip_address?: string;\n  machine_name?: string;\n  install_id?: string;\n  runtime_version?: string;\n  data?: any;\n}\n\nexport interface IParameter {\n  data?: any;\n  generic_arguments?: string[];\n\n  name?: string;\n  type?: string;\n  type_namespace?: string;\n}\n\n                                          \n\nexport interface IMethod {\n  data?: any;\n  generic_arguments?: string[];\n  parameters?: IParameter[];\n\n  is_signature_target?: boolean;\n  declaring_namespace?: string;\n  declaring_type?: string;\n  name?: string;\n  module_id?: number;\n}\n\n                                    \n\nexport interface IStackFrame extends IMethod {\n  file_name?: string;\n  line_number?: number;\n  column?: number;\n}\n\n                                                                                 \n\nexport interface IInnerError {\n  message?: string;\n  type?: string;\n  code?: string;\n  data?: any;\n  inner?: IInnerError;\n  stack_trace?: IStackFrame[];\n  target_method?: IMethod;\n}\n\n                                                                                                                                                \n\nexport class ConfigurationDefaultsPlugin implements IEventPlugin {\n  public priority: number = 10;\n  public name: string = 'ConfigurationDefaultsPlugin';\n\n  public run(context: EventPluginContext, next?: () => void): void {\n    let config = context.client.config;\n    let defaultTags: string[] = config.defaultTags || [];\n    for (let index = 0; index < defaultTags.length; index++) {\n      let tag = defaultTags[index];\n      if (!!tag && context.event.tags.indexOf(tag) < 0) {\n        context.event.tags.push(tag);\n      }\n    }\n\n    let defaultData: Object = config.defaultData || {};\n    for (let key in defaultData) {\n      if (!!defaultData[key]) {\n        let result = JSON.parse(Utils.stringify(defaultData[key], config.dataExclusions));\n        if (!Utils.isEmpty(result)) {\n          context.event.data[key] = result;\n        }\n      }\n    }\n\n    next && next();\n  }\n}\n\n                                                                                                                                                \n\nexport class ErrorPlugin implements IEventPlugin {\n  public priority: number = 30;\n  public name: string = 'ErrorPlugin';\n\n  public run(context: EventPluginContext, next?: () => void): void {\n    const ERROR_KEY: string = '@error'; // optimization for minifier.\n    let ignoredProperties: string[] = [\n      'arguments',\n      'column',\n      'columnNumber',\n      'description',\n      'fileName',\n      'message',\n      'name',\n      'number',\n      'line',\n      'lineNumber',\n      'opera#sourceloc',\n      'sourceId',\n      'sourceURL',\n      'stack',\n      'stackArray',\n      'stacktrace'\n    ];\n\n    let exception = context.contextData.getException();\n    if (!!exception) {\n      context.event.type = 'error';\n\n      if (!context.event.data[ERROR_KEY]) {\n        let config = context.client.config;\n        let parser = config.errorParser;\n        if (!parser) {\n          throw new Error('No error parser was defined.');\n        }\n\n        let result = parser.parse(context, exception);\n        if (!!result) {\n          let additionalData = JSON.parse(Utils.stringify(exception, config.dataExclusions.concat(ignoredProperties)));\n          if (!Utils.isEmpty(additionalData)) {\n            if (!result.data) {\n              result.data = {};\n            }\n            result.data['@ext'] = additionalData;\n          }\n\n          context.event.data[ERROR_KEY] = result;\n        }\n      }\n    }\n\n    next && next();\n  }\n}\n\n                                                                                                                                                           \n\nexport class ModuleInfoPlugin implements IEventPlugin {\n  public priority: number = 50;\n  public name: string = 'ModuleInfoPlugin';\n\n  public run(context: EventPluginContext, next?: () => void): void {\n    const ERROR_KEY: string = '@error'; // optimization for minifier.\n\n    let collector = context.client.config.moduleCollector;\n    if (context.event.data[ERROR_KEY] && !context.event.data['@error'].modules && !!collector) {\n      let modules: IModule[] = collector.getModules(context);\n      if (modules && modules.length > 0) {\n        context.event.data[ERROR_KEY].modules = modules;\n      }\n    }\n\n    next && next();\n  }\n}\n\n                                                                                                                                                                                                          \n\nexport class RequestInfoPlugin implements IEventPlugin {\n  public priority: number = 70;\n  public name: string = 'RequestInfoPlugin';\n\n  public run(context: EventPluginContext, next?: () => void): void {\n    const REQUEST_KEY: string = '@request'; // optimization for minifier.\n\n    let config = context.client.config;\n    let collector = config.requestInfoCollector;\n    if (!context.event.data[REQUEST_KEY] && !!collector) {\n      let requestInfo: IRequestInfo = collector.getRequestInfo(context);\n      if (!!requestInfo) {\n        if (Utils.isMatch(requestInfo.user_agent, config.userAgentBotPatterns)) {\n          context.log.info('Cancelling event as the request user agent matches a known bot pattern');\n          context.cancelled = true;\n        } else {\n          context.event.data[REQUEST_KEY] = requestInfo;\n        }\n      }\n    }\n\n    next && next();\n  }\n}\n\n                                                                                                                                                                             \n\nexport class EnvironmentInfoPlugin implements IEventPlugin {\n  public priority: number = 80;\n  public name: string = 'EnvironmentInfoPlugin';\n\n  public run(context: EventPluginContext, next?: () => void): void {\n    const ENVIRONMENT_KEY: string = '@environment'; // optimization for minifier.\n\n    let collector = context.client.config.environmentInfoCollector;\n    if (!context.event.data[ENVIRONMENT_KEY] && collector) {\n      let environmentInfo: IEnvironmentInfo = collector.getEnvironmentInfo(context);\n      if (!!environmentInfo) {\n        context.event.data[ENVIRONMENT_KEY] = environmentInfo;\n      }\n    }\n\n    next && next();\n  }\n}\n\n                                                                                                           \n\nexport class SubmissionMethodPlugin implements IEventPlugin {\n  public priority: number = 100;\n  public name: string = 'SubmissionMethodPlugin';\n\n  public run(context: EventPluginContext, next?: () => void): void {\n    let submissionMethod: string = context.contextData.getSubmissionMethod();\n    if (!!submissionMethod) {\n      context.event.data['@submission_method'] = submissionMethod;\n    }\n\n    next && next();\n  }\n}\n\n                                                                                                                                                                                                        \n\nexport class DuplicateCheckerPlugin implements IEventPlugin {\n  public priority: number = 1010;\n  public name: string = 'DuplicateCheckerPlugin';\n\n  private _mergedEvents: MergedEvent[] = [];\n  private _processedHashcodes: TimestampedHash[] = [];\n  private _getCurrentTime: () => number;\n  private _interval: number;\n\n  constructor(getCurrentTime: () => number = () => Date.now(), interval: number = 30000) {\n    this._getCurrentTime = getCurrentTime;\n    this._interval = interval;\n\n    setInterval(() => {\n      while (this._mergedEvents.length > 0) {\n        this._mergedEvents.shift().resubmit();\n      }\n    }, interval);\n  }\n\n  public run(context: EventPluginContext, next?: () => void): void {\n    function getHashCode(error: IInnerError): number {\n      let hashCode = 0;\n      while (error) {\n        if (error.message && error.message.length) {\n          hashCode += (hashCode * 397) ^ Utils.getHashCode(error.message);\n        }\n        if (error.stack_trace && error.stack_trace.length) {\n          hashCode += (hashCode * 397) ^ Utils.getHashCode(JSON.stringify(error.stack_trace));\n        }\n        error = error.inner;\n      }\n\n      return hashCode;\n    }\n\n    let error = context.event.data['@error'];\n    let hashCode = getHashCode(error);\n    if (hashCode) {\n      let count = context.event.count || 1;\n      let now = this._getCurrentTime();\n\n      let merged = this._mergedEvents.filter(s => s.hashCode === hashCode)[0];\n      if (merged) {\n        merged.incrementCount(count);\n        merged.updateDate(context.event.date);\n        context.log.info('Ignoring duplicate event with hash: ' + hashCode);\n        context.cancelled = true;\n      }\n\n      if (!context.cancelled && this._processedHashcodes.some(h => h.hash === hashCode && h.timestamp >= (now - this._interval))) {\n        context.log.trace('Adding event with hash: ' + hashCode);\n        this._mergedEvents.push(new MergedEvent(hashCode, context, count));\n        context.cancelled = true;\n      }\n\n      if (!context.cancelled) {\n        context.log.trace('Enqueueing event with hash: ' + hashCode + 'to cache.');\n        this._processedHashcodes.push({ hash: hashCode, timestamp: now });\n\n        // Only keep the last 50 recent errors.\n        while (this._processedHashcodes.length > 50) {\n          this._processedHashcodes.shift();\n        }\n      }\n    }\n\n    next && next();\n  }\n}\n\ninterface TimestampedHash {\n  hash: number;\n  timestamp: number;\n}\n\nclass MergedEvent {\n  public hashCode: number;\n  private _count: number;\n  private _context: EventPluginContext;\n\n  constructor(hashCode: number, context: EventPluginContext, count: number) {\n    this.hashCode = hashCode;\n    this._context = context;\n    this._count = count;\n  }\n\n  public incrementCount(count: number) {\n    this._count += count;\n  }\n\n  public resubmit() {\n    this._context.event.count = this._count;\n    this._context.client.config.queue.enqueue(this._context.event);\n  }\n\n  public updateDate(date) {\n    if (date > this._context.event.date) {\n      this._context.event.date = date;\n    }\n  }\n}\n\n                                                                                                                                                                                                        \n\nexport class EventExclusionPlugin implements IEventPlugin {\n  public priority: number = 45;\n  public name: string = 'EventExclusionPlugin';\n\n  public run(context: EventPluginContext, next?: () => void): void {\n    function getLogLevel(level: string): number {\n      switch ((level || '').toLowerCase().trim()) {\n        case 'trace':\n        case 'true':\n        case '1':\n        case 'yes':\n          return 0;\n        case 'debug':\n          return 1;\n        case 'info':\n          return 2;\n        case 'warn':\n          return 3;\n        case 'error':\n          return 4;\n        case 'fatal':\n          return 5;\n        case 'off':\n        case 'false':\n        case '0':\n        case 'no':\n          return 6;\n        default:\n          return -1;\n      }\n    }\n\n    function getMinLogLevel(settings: Object, loggerName: string = '*'): number {\n      return getLogLevel(getTypeAndSourceSetting(settings, 'log', loggerName, 'Trace') + '');\n    }\n\n    function getTypeAndSourceSetting(settings: Object = {}, type: string, source: string, defaultValue: string|boolean = undefined): string|boolean {\n      if (!type) {\n        return defaultValue;\n      }\n\n      let isLog = type === 'log';\n      let sourcePrefix =  `@@${type}:`;\n\n      let value = settings[sourcePrefix + source];\n      if (value) {\n        return !isLog ? Utils.toBoolean(value) : value;\n      }\n\n      // check for wildcard match\n      for (let key in settings) {\n        if (Utils.startsWith(key.toLowerCase(), sourcePrefix.toLowerCase()) && Utils.isMatch(source, [key.substring(sourcePrefix.length)])) {\n          return !isLog ? Utils.toBoolean(settings[key]) : settings[key];\n        }\n      }\n\n      return defaultValue;\n    }\n\n    let ev = context.event;\n    let log = context.log;\n    let settings = context.client.config.settings;\n\n    if (ev.type === 'log') {\n      let minLogLevel = getMinLogLevel(settings, ev.source);\n      let logLevel = getLogLevel(ev.data['@level']);\n\n      if (logLevel >= 0 && (logLevel > 5 || logLevel < minLogLevel)) {\n        log.info('Cancelling log event due to minimum log level.');\n        context.cancelled = true;\n      }\n    } else if (ev.type === 'error') {\n      let error: IInnerError = ev.data['@error'];\n      while (!context.cancelled && error) {\n        if (getTypeAndSourceSetting(settings, ev.type, error.type, true) === false) {\n          log.info(`Cancelling error from excluded exception type: ${error.type}`);\n          context.cancelled = true;\n        }\n\n        error = error.inner;\n      }\n    } else if (getTypeAndSourceSetting(settings, ev.type, ev.source, true) === false) {\n      log.info(`Cancelling event from excluded type: ${ev.type} and source: ${ev.source}`);\n      context.cancelled = true;\n    }\n\n    next && next();\n  }\n}\n\nexport class SettingsResponse {\n  public success: boolean = false;\n  public settings: any;\n  public settingsVersion: number = -1;\n  public message: string;\n  public exception: any;\n\n  constructor(success: boolean, settings: any, settingsVersion: number = -1, exception: any = null, message: string = null) {\n    this.success = success;\n    this.settings = settings;\n    this.settingsVersion = settingsVersion;\n    this.exception = exception;\n    this.message = message;\n  }\n}\n\n                                                                                 \n\nexport interface IError extends IInnerError {\n  modules?: IModule[];\n}\n\nexport interface IStorageItem {\n  timestamp: number;\n  value: any;\n}\n\n                                              \n\nexport interface IStorage {\n  save(value: any): number;\n  get(limit?: number): IStorageItem[];\n  remove(timestamp: number): void;\n  clear(): void;\n}\n\nexport interface SubmissionCallback {\n  (status: number, message: string, data?: string, headers?: Object): void;\n}\n\nexport interface SubmissionRequest {\n  apiKey: string;\n  userAgent: string;\n  method: string;\n  url: string;\n  data: string;\n}\n\n                                                                                     \n\nexport class InMemoryStorage implements IStorage {\n  private maxItems: number;\n  private items: IStorageItem[] = [];\n  private lastTimestamp: number = 0;\n\n  constructor(maxItems: number) {\n    this.maxItems = maxItems;\n  }\n\n  public save(value: any): number {\n    if (!value) {\n      return null;\n    }\n\n    let items = this.items;\n    let timestamp = Math.max(Date.now(), this.lastTimestamp + 1);\n    let item = { timestamp, value };\n\n    if (items.push(item) > this.maxItems) {\n      items.shift();\n    }\n\n    this.lastTimestamp = timestamp;\n    return item.timestamp;\n  }\n\n  public get(limit?: number): IStorageItem[] {\n    return this.items.slice(0, limit);\n  }\n\n  public remove(timestamp: number): void {\n    let items = this.items;\n    for (let i = 0; i < items.length; i++) {\n      if (items[i].timestamp === timestamp) {\n        items.splice(i, 1);\n        return;\n      }\n    }\n  }\n\n  public clear(): void {\n    this.items = [];\n  }\n}\n\nexport interface IClientConfiguration {\n  settings: Object;\n  version: number;\n}\n\n                                                                                     \n\nexport abstract class KeyValueStorageBase implements IStorage {\n  private maxItems: number;\n  private items: number[];\n  private lastTimestamp: number = 0;\n\n  constructor(maxItems) {\n    this.maxItems = maxItems;\n  }\n\n  public save(value: any, single?: boolean): number {\n    if (!value) {\n      return null;\n    }\n\n    this.ensureIndex();\n\n    let items = this.items;\n    let timestamp = Math.max(Date.now(), this.lastTimestamp + 1);\n    let key = this.getKey(timestamp);\n    let json = JSON.stringify(value);\n\n    try {\n      this.write(key, json);\n      this.lastTimestamp = timestamp;\n      if (items.push(timestamp) > this.maxItems) {\n        this.delete(this.getKey(items.shift()));\n      }\n    } catch (e) {\n      return null;\n    }\n\n    return timestamp;\n  }\n\n  public get(limit?: number): IStorageItem[] {\n    this.ensureIndex();\n\n    return this.items.slice(0, limit)\n      .map(timestamp => {\n        // Read and parse item for this timestamp\n        let key = this.getKey(timestamp);\n        try {\n          let json = this.read(key);\n          let value = JSON.parse(json, parseDate);\n          return { timestamp, value };\n        } catch (error) {\n          // Something went wrong - try to delete the cause.\n          this.safeDelete(key);\n          return null;\n        }\n      })\n      .filter(item => item != null);\n  }\n\n  public remove(timestamp: number): void {\n    this.ensureIndex();\n\n    let items = this.items;\n    let index = items.indexOf(timestamp);\n    if (index >= 0) {\n      let key = this.getKey(timestamp);\n      this.safeDelete(key);\n      items.splice(index, 1);\n    };\n  }\n\n  public clear(): void {\n    this.items.forEach(item => this.safeDelete(this.getKey(item)));\n    this.items = [];\n  }\n\n  protected abstract write(key: string, value: string): void;\n  protected abstract read(key: string): string;\n  protected abstract readAllKeys(): string[];\n  protected abstract delete(key: string);\n  protected abstract getKey(timestamp: number): string;\n  protected abstract getTimestamp(key: string): number;\n\n  private ensureIndex() {\n    if (!this.items) {\n      this.items = this.createIndex();\n      this.lastTimestamp = Math.max(0, ...this.items) + 1;\n    }\n  }\n\n  private safeDelete(key: string): void {\n    try {\n      this.delete(key);\n    } catch (error) {\n    }\n  }\n\n  private createIndex() {\n    try {\n      let keys = this.readAllKeys();\n      return keys.map(key => {\n        try {\n          let timestamp = this.getTimestamp(key);\n          if (!timestamp) {\n            this.safeDelete(key);\n            return null;\n          }\n          return timestamp;\n        } catch (error) {\n          this.safeDelete(key);\n          return null;\n        }\n      }).filter(timestamp => timestamp != null)\n        .sort((a, b) => a - b);\n    } catch (error) {\n      return [];\n    }\n  }\n}\n\nfunction parseDate(key, value) {\n  let dateRegx = /\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z)/g;\n  if (typeof value === 'string') {\n    let a = dateRegx.exec(value);\n    if (a) {\n      return new Date(value);\n    }\n  }\n  return value;\n};\n\n                                                                                                                     \n\nexport class NodeFileStorage extends KeyValueStorageBase {\n  private directory: string;\n  private prefix: string;\n  private fs: any;\n\n  constructor(namespace: string, folder?: string, prefix: string = 'ex-', maxItems: number = 20, fs?: any) {\n    super(maxItems);\n\n    if (!folder) {\n      folder = Path.join(Path.dirname(require.main.filename), '.exceptionless');\n    }\n    let subfolder = Path.join(folder, namespace);\n\n    this.directory = Path.resolve(subfolder);\n    this.prefix = prefix;\n    this.fs = fs ? fs : Fs;\n\n    this.mkdir(this.directory);\n  }\n\n  public write(key: string, value: string) {\n    this.fs.writeFileSync(key, value);\n  }\n\n  public read(key: string) {\n    return this.fs.readFileSync(key, 'utf8');\n  }\n\n  public readAllKeys() {\n    return this.fs.readdirSync(this.directory)\n      .filter(file => file.indexOf(this.prefix) === 0)\n      .map(file => Path.join(this.directory, file));\n  }\n\n  public delete(key: string) {\n    this.fs.unlinkSync(key);\n  }\n\n  public getKey(timestamp) {\n    return Path.join(this.directory, `${this.prefix}${timestamp}.json`);\n  }\n\n  public getTimestamp(key) {\n    return parseInt(Path.basename(key, '.json')\n      .substr(this.prefix.length), 10);\n  }\n\n  private mkdir(path) {\n    let dirs = path.split(Path.sep);\n    let root = '';\n\n    while (dirs.length > 0) {\n      let dir = dirs.shift();\n      if (dir === '') {\n        root = Path.sep;\n      }\n      if (!this.fs.existsSync(root + dir)) {\n        this.fs.mkdirSync(root + dir);\n      }\n      root += dir + Path.sep;\n    }\n  };\n}\n\n                                                                                                                                                                                                                                       \n\nexport class NodeEnvironmentInfoCollector implements IEnvironmentInfoCollector {\n  public getEnvironmentInfo(context: EventPluginContext): IEnvironmentInfo {\n    function getIpAddresses(): string {\n      let ips: string[] = [];\n      let interfaces = os.networkInterfaces();\n      Object.keys(interfaces).forEach((name) => {\n        interfaces[name].forEach((iface: any) => {\n          if ('IPv4' === iface.family && !iface.internal) {\n            ips.push(iface.address);\n          }\n        });\n      });\n\n      return ips.join(', ');\n    }\n\n    if (!os) {\n      return null;\n    }\n\n    let environmentInfo: IEnvironmentInfo = {\n      processor_count: os.cpus().length,\n      total_physical_memory: os.totalmem(),\n      available_physical_memory: os.freemem(),\n      command_line: process.argv.join(' '),\n      process_name: (process.title || '').replace(/[\\uE000-\\uF8FF]/g, ''),\n      process_id: process.pid + '',\n      process_memory_size: process.memoryUsage().heapTotal,\n      // thread_id: '',\n      architecture: os.arch(),\n      o_s_name: os.type(),\n      o_s_version: os.release(),\n      ip_address: getIpAddresses(),\n      machine_name: os.hostname(),\n      // install_id: '',\n      runtime_version: process.version,\n      data: {\n        loadavg: os.loadavg(),\n        platform: os.platform(),\n        tmpdir: os.tmpdir(),\n        uptime: os.uptime()\n      }\n    };\n\n    if ((<any>os).endianness) {\n      environmentInfo.data.endianness = (<any>os).endianness();\n    }\n\n    return environmentInfo;\n  }\n}\n\n                                                                                                                                                                                                                                                                   \n\nexport class NodeErrorParser implements IErrorParser {\n  public parse(context: EventPluginContext, exception: Error): IError {\n    function getStackFrames(stackFrames: any[]): IStackFrame[] {\n      let frames: IStackFrame[] = [];\n\n      for (let index = 0; index < stackFrames.length; index++) {\n        let frame = stackFrames[index];\n        frames.push({\n          name: frame.getMethodName() || frame.getFunctionName(),\n          // parameters: frame.args,\n          file_name: frame.getFileName(),\n          line_number: frame.getLineNumber() || 0,\n          column: frame.getColumnNumber() || 0,\n          declaring_type: frame.getTypeName(),\n          data: {\n            is_native: frame.isNative() || (!!frame.filename && frame.filename[0] !== '/' && frame.filename[0] !== '.')\n          }\n        });\n      }\n\n      return frames;\n    }\n\n    if (!nodestacktrace) {\n      throw new Error('Unable to load the stack trace library.');\n    }\n\n    let stackFrames = nodestacktrace.parse(exception) || [];\n    return {\n      type: exception.name,\n      message: exception.message,\n      stack_trace: getStackFrames(stackFrames)\n    };\n  }\n}\n\n                                                                                                                                                                                                                                                \n\nexport class NodeModuleCollector implements IModuleCollector {\n\n  private initialized: boolean = false;\n  private installedModules: { [id: string]: IModule } = {};\n\n  public getModules(context: EventPluginContext): IModule[] {\n    this.initialize();\n\n    if (!require.main) {\n      return [];\n    }\n\n    let modulePath = path.dirname(require.main.filename) + '/node_modules/';\n    let pathLength = modulePath.length;\n\n    let loadedKeys = Object.keys(require.cache);\n    let loadedModules = {};\n\n    loadedKeys.forEach(key => {\n      let id = key.substr(pathLength);\n      id = id.substr(0, id.indexOf('/'));\n      loadedModules[id] = true;\n    });\n\n    return Object.keys(loadedModules)\n      .map(key => this.installedModules[key])\n      .filter(m => m !== undefined);\n  }\n\n  private initialize() {\n    if (this.initialized) {\n      return;\n    }\n\n    this.initialized = true;\n\n    let output = child.spawnSync('npm', ['ls', '--depth=0', '--json']).stdout;\n\n    if (!output) {\n      return;\n    }\n\n    let json;\n    try {\n      json = JSON.parse(output.toString());\n    } catch (e) {\n      return;\n    }\n\n    let items = json.dependencies;\n    if (!items) {\n      return;\n    }\n\n    let id = 0;\n    this.installedModules = {};\n\n    Object.keys(items).forEach(key => {\n      let item = items[key];\n      let theModule = <IModule>{\n        module_id: id++,\n        name: key,\n        version: item.version\n      };\n\n      this.installedModules[key] = theModule;\n    });\n  }\n}\n\n                                                                                                                                                                                                                             \n\nexport class NodeRequestInfoCollector implements IRequestInfoCollector {\n  public getRequestInfo(context: EventPluginContext): IRequestInfo {\n    const REQUEST_KEY: string = '@request'; // optimization for minifier.\n    if (!context.contextData[REQUEST_KEY]) {\n      return null;\n    }\n\n    let exclusions = context.client.config.dataExclusions;\n\n    // TODO: include referrer\n    let request = context.contextData[REQUEST_KEY];\n    let requestInfo: IRequestInfo = {\n      client_ip_address: request.ip,\n      user_agent: request.headers['user-agent'],\n      is_secure: request.secure,\n      http_method: request.method,\n      host: request.hostname || request.host,\n      path: request.path,\n      post_data: JSON.parse(Utils.stringify(request.body || {}, exclusions)),\n      cookies: Utils.getCookies(request.headers.cookie, exclusions),\n      query_string: JSON.parse(Utils.stringify(request.params || {}, exclusions))\n    };\n\n    let host = request.headers.host;\n    let port: number = host && parseInt(host.slice(host.indexOf(':') + 1), 10);\n    if (port > 0) {\n      requestInfo.port = port;\n    }\n\n    return requestInfo;\n  }\n}\n\n                                                                                                                                                                                                                                                                                                                     \n\nexport class NodeSubmissionAdapter implements ISubmissionAdapter {\n  public sendRequest(request: SubmissionRequest, callback?: SubmissionCallback, isAppExiting?: boolean) {\n    if (isAppExiting) {\n      this.sendRequestSync(request, callback);\n      return;\n    }\n\n    let parsedHost = url.parse(request.url);\n\n    let options: https.RequestOptions = {\n      auth: `client:${request.apiKey}`,\n      headers: {},\n      hostname: parsedHost.hostname,\n      method: request.method,\n      port: parsedHost.port && parseInt(parsedHost.port, 10),\n      path: request.url\n    };\n\n    options.headers['User-Agent'] = request.userAgent;\n\n    if (request.method === 'POST') {\n      options.headers = {\n        'Content-Type': 'application/json',\n        'Content-Length': Buffer.byteLength(request.data)\n      };\n    }\n\n    let protocol = (parsedHost.protocol === 'https' ? https : http);\n    let clientRequest: http.ClientRequest = protocol.request(options, (response: http.IncomingMessage) => {\n      let body = '';\n      response.setEncoding('utf8');\n      response.on('data', (chunk) => body += chunk);\n      response.on('end', () => this.complete(response, body, response.headers, callback));\n    });\n\n    clientRequest.on('error', (error: Error) => callback && callback(500, error.message));\n    clientRequest.end(request.data);\n  }\n\n  private complete(response: http.IncomingMessage, responseBody: string, responseHeaders: Object, callback: SubmissionCallback): void {\n    let message: string;\n    if (response.statusCode === 0) {\n      message = 'Unable to connect to server.';\n    } else if (response.statusCode < 200 || response.statusCode > 299) {\n      message = response.statusMessage || (<any>response).message;\n    }\n\n    callback && callback(response.statusCode || 500, message, responseBody, responseHeaders);\n  }\n\n  private sendRequestSync(request: SubmissionRequest, callback: SubmissionCallback): void {\n    let requestJson = JSON.stringify(request);\n    let res = child.spawnSync(process.execPath, [require.resolve('./submitSync.js')],\n      {\n        input: requestJson,\n        stdio: ['pipe', 'pipe', process.stderr]\n      });\n\n    let out = res.stdout.toString();\n    let result = JSON.parse(out);\n\n    callback && callback(result.status, result.message, result.data, result.headers);\n  }\n}\n\n                                                                                                                                                  \n\nexport class NodeFileStorageProvider implements IStorageProvider {\n  public queue: IStorage;\n  public settings: IStorage;\n\n  constructor(folder?: string, prefix?: string, maxQueueItems: number = 250) {\n    this.queue = new NodeFileStorage('q', folder, prefix, maxQueueItems);\n    this.settings = new NodeFileStorage('settings', folder, prefix, 1);\n  }\n\n}\n\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   \n\nconst EXIT: string = 'exit';\nconst UNCAUGHT_EXCEPTION: string = 'uncaughtException';\nconst SIGINT: string = 'SIGINT';\nconst SIGINT_CODE: number = 2;\n\nlet defaults = Configuration.defaults;\ndefaults.environmentInfoCollector = new NodeEnvironmentInfoCollector();\ndefaults.errorParser = new NodeErrorParser();\ndefaults.moduleCollector = new NodeModuleCollector();\ndefaults.requestInfoCollector = new NodeRequestInfoCollector();\ndefaults.submissionAdapter = new NodeSubmissionAdapter();\n\nConfiguration.prototype.useLocalStorage = function() {\n  this.storage = new NodeFileStorageProvider();\n  SettingsManager.applySavedServerSettings(this);\n  this.changed();\n};\n\nfunction getListenerCount(emitter, event: string): number {\n  if (emitter.listenerCount) {\n    return emitter.listenerCount(event);\n  }\n  return require('events').listenerCount(emitter, event);\n}\n\n/*\n * Adding a event handler for 'uncaughtException' modifies the default\n * Node behavior, so it won't exit or log to the console. Instead,\n * we hijack the event emitter and forward the exception to the callback.\n */\nfunction onUncaughtException(callback: (error: Error) => void) {\n  let originalEmit = process.emit;\n\n  process.emit = function(type: string, error: Error) {\n    if (type === UNCAUGHT_EXCEPTION) {\n      callback(error);\n    }\n\n    return originalEmit.apply(this, arguments);\n  };\n}\n\nonUncaughtException(function(error: Error) {\n  ExceptionlessClient.default.submitUnhandledException(error, UNCAUGHT_EXCEPTION);\n});\n\n/*\n * We cannot hijack SIGINT, so if there are no other handlers,\n * we just reproduce default Node.js behavior by exiting.\n */\nprocess.on(SIGINT, function() {\n  if (getListenerCount(process, SIGINT) <= 1) {\n    process.exit(128 + SIGINT_CODE);\n  }\n});\n\nprocess.on(EXIT, function(code: number) {\n  /**\n   * exit codes: https://nodejs.org/api/process.html#process_event_exit\n   * From now on, only synchronous code may run. As soon as this method\n   * ends, the application inevitably will exit.\n   */\n  function getExitCodeReason(exitCode: number): string {\n    if (exitCode === 1) {\n      return 'Uncaught Fatal Exception';\n    }\n\n    if (exitCode === 3) {\n      return 'Internal JavaScript Parse Error';\n    }\n\n    if (exitCode === 4) {\n      return 'Internal JavaScript Evaluation Failure';\n    }\n\n    if (exitCode === 5) {\n      return 'Fatal Exception';\n    }\n\n    if (exitCode === 6) {\n      return 'Non-function Internal Exception Handler ';\n    }\n\n    if (exitCode === 7) {\n      return 'Internal Exception Handler Run-Time Failure';\n    }\n\n    if (exitCode === 8) {\n      return 'Uncaught Exception';\n    }\n\n    if (exitCode === 9) {\n      return 'Invalid Argument';\n    }\n\n    if (exitCode === 10) {\n      return 'Internal JavaScript Run-Time Failure';\n    }\n\n    if (exitCode === 12) {\n      return 'Invalid Debug Argument';\n    }\n\n    return null;\n  }\n\n  let client = ExceptionlessClient.default;\n  let message = getExitCodeReason(code);\n\n  if (message !== null) {\n    client.submitLog(EXIT, message, 'Error');\n  }\n\n  client.config.queue.process(true);\n  // Application will now exit.\n});\n\n(<any>Error).stackTraceLimit = Infinity;\n\n"]}