{"version":3,"file":"opossum.js","mappings":"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/C,IAAM2D,aAAa,GAAG3D,MAAM,CAAC,eAAe,CAAC;AAC7C,IAAM4D,WAAW,mFAC2B;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA1HA,IA2HMC,cAAc,0BAAAC,aAAA;EAyBlB,SAAAD,eAAaE,MAAM,EAAgB;IAAA,IAAAC,gBAAA,EAAAC,qBAAA,EAAAC,qBAAA,EAAAC,qBAAA,EAAAC,sBAAA,EAAAC,iBAAA,EAAAC,oBAAA,EAAAC,oBAAA,EAAAC,qBAAA;IAAA,IAAAC,KAAA;IAAA,IAAdC,OAAO,GAAAC,SAAA,CAAAxE,MAAA,QAAAwE,SAAA,QAAAtG,SAAA,GAAAsG,SAAA,MAAG,CAAC,CAAC;IAAAnH,eAAA,OAAAqG,cAAA;IAC/BY,KAAA,GAAAnD,UAAA,OAAAuC,cAAA;IACAY,KAAA,CAAKC,OAAO,GAAGA,OAAO;IACtBD,KAAA,CAAKC,OAAO,CAACE,OAAO,IAAAZ,gBAAA,GAAGU,OAAO,CAACE,OAAO,cAAAZ,gBAAA,cAAAA,gBAAA,GAAI,KAAK;IAC/CS,KAAA,CAAKC,OAAO,CAACG,YAAY,IAAAZ,qB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AE,CAAC;IACtBlB,WAAW,EAAE,CAAC,CAAC;IACfL,YAAY,EAAE;EAChB,CAAC;AAAA,CAAC;AAEF,SAASM,mBAAmBA,CAAEF,UAAU,EAAEoB,GAAG,EAAE;EAC7C,IAAIpB,UAAU,KAAK,CAAC,EAAE;IACpB,OAAOoB,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;EACpB;EACA,IAAMC,GAAG,GAAG3S,IAAI,CAAC4S,IAAI,CAACtB,UAAU,GAAGoB,GAAG,CAAClQ,MAAM,CAAC;EAC9C,OAAOkQ,GAAG,CAACC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC;AAC1B;AAEAnT,MAAM,CAACC,OAAO,GAAGA,OAAO,GAAGqF,MAAM;;;;;;;;;;;ACtPjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB;;AAEnB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,sBAAsB;AACxC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,eAAe;AACf;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA,oBAAoB,SAAS;AAC7B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;;AAEA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA,uCAAuC,QAAQ;AAC/C;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;;AAEA;AACA,SAAS,yBAAyB;AAClC;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,8DAA8D,YAAY;AAC1E;AACA,8DAA8D,YAAY;AAC1E;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,qCAAqC,YAAY;AACjD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;AACA;;;;;;;UChfA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;UEtBA;UACA;UACA;UACA","sources":["webpack://circuitBreaker/webpack/universalModuleDefinition","webpack://circuitBreaker/./index.js","webpack://circuitBreaker/./lib/cache.js","webpack://circuitBreaker/./lib/circuit.js","webpack://circuitBreaker/./lib/semaphore.js","webpack://circuitBreaker/./lib/status.js","webpack://circuitBreaker/./node_modules/events/events.js","webpack://circuitBreaker/webpack/bootstrap","webpack://circuitBreaker/webpack/before-startup","webpack://circuitBreaker/webpack/startup","webpack://circuitBreaker/webpack/after-startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"circuitBreaker\"] = factory();\n\telse\n\t\troot[\"circuitBreaker\"] = factory();\n})(self, () => {\nreturn ","'use strict';\n\nmodule.exports = exports = require('./lib/circuit');\n","/**\n * Simple in-memory cache implementation\n * @class MemoryCache\n * @property {Map} cache Cache map\n */\nclass MemoryCache {\n  constructor (maxEntries) {\n    this.cache = new Map();\n    this.maxEntries = maxEntries ?? 2 ** 24 - 1; // Max size for Map is 2^24.\n  }\n\n  /**\n   * Get cache value by key\n   * @param {string} key Cache key\n   * @return {any} Response from cache\n   */\n  get (key) {\n    const cached = this.cache.get(key);\n    if (cached) {\n      if (cached.expiresAt > Date.now() || cached.expiresAt === 0) {\n        return cached.value;\n      }\n      this.cache.delete(key);\n    }\n    return undefined;\n  }\n\n  /**\n   * Set cache key with value and ttl\n   * @param {string} key Cache key\n   * @param {any} value Value to cache\n   * @param {number} ttl Time to live in milliseconds\n   * @return {void}\n   */\n  set (key, value, ttl) {\n    // Evict first entry when at capacity - only when it's a new key.\n    if (this.cache.size === this.maxEntries && this.get(key) === undefined) {\n      this.cache.delete(this.cache.keys().next().value);\n    }\n\n    this.cache.set(key, {\n      expiresAt: ttl,\n      value\n    });\n  }\n\n  /**\n   * Delete cache key\n   * @param {string} key Cache key\n   * @return {void}\n   */\n  delete (key) {\n    this.cache.delete(key);\n  }\n\n  /**\n   * Clear cache\n   * @returns {void}\n   */\n  flush () {\n    this.cache.clear();\n  }\n}\n\nmodule.exports = exports = MemoryCache;\n","'use strict';\n\nconst EventEmitter = require('events');\nconst Status = require('./status');\nconst Semaphore = require('./semaphore');\nconst MemoryCache = require('./cache');\n\nconst STATE = Symbol('state');\nconst OPEN = Symbol('open');\nconst CLOSED = Symbol('closed');\nconst HALF_OPEN = Symbol('half-open');\nconst PENDING_CLOSE = Symbol('pending-close');\nconst SHUTDOWN = Symbol('shutdown');\nconst FALLBACK_FUNCTION = Symbol('fallback');\nconst STATUS = Symbol('status');\nconst NAME = Symbol('name');\nconst GROUP = Symbol('group');\nconst ENABLED = Symbol('Enabled');\nconst WARMING_UP = Symbol('warming-up');\nconst VOLUME_THRESHOLD = Symbol('volume-threshold');\nconst OUR_ERROR = Symbol('our-error');\nconst RESET_TIMEOUT = Symbol('reset-timeout');\nconst WARMUP_TIMEOUT = Symbol('warmup-timeout');\nconst LAST_TIMER_AT = Symbol('last-timer-at');\nconst deprecation = `options.maxFailures is deprecated. \\\nPlease use options.errorThresholdPercentage`;\n\n/**\n * Constructs a {@link CircuitBreaker}.\n *\n * @class CircuitBreaker\n * @extends EventEmitter\n * @param {Function} action The action to fire for this {@link CircuitBreaker}\n * @param {Object} options Options for the {@link CircuitBreaker}\n * @param {Status} options.status A {@link Status} object that might\n *   have pre-prime stats\n * @param {Number} options.timeout The time in milliseconds that action should\n * be allowed to execute before timing out. Timeout can be disabled by setting\n * this to `false`. Default 10000 (10 seconds)\n * @param {Number} options.maxFailures (Deprecated) The number of times the\n * circuit can fail before opening. Default 10.\n * @param {Number} options.resetTimeout The time in milliseconds to wait before\n * setting the breaker to `halfOpen` state, and trying the action again.\n * Default: 30000 (30 seconds)\n * @param {Number} options.rollingCountTimeout Sets the duration of the\n * statistical rolling window, in milliseconds. This is how long Opossum keeps\n * metrics for the circuit breaker to use and for publishing. Default: 10000\n * @param {Number} options.rollingCountBuckets Sets the number of buckets the\n * rolling statistical window is divided into. So, if\n * options.rollingCountTimeout is 10000, and options.rollingCountBuckets is 10,\n * then the statistical window will be 1000/1 second snapshots in the\n * statistical window. Default: 10\n * @param {String} options.name the circuit name to use when reporting stats.\n * Default: the name of the function this circuit controls.\n * @param {boolean} options.rollingPercentilesEnabled This property indicates\n * whether execution latencies should be tracked and calculated as percentiles.\n * If they are disabled, all summary statistics (mean, percentiles) are\n * returned as -1. Default: true\n * @param {Number} options.capacity the number of concurrent requests allowed.\n * If the number currently executing function calls is equal to\n * options.capacity, further calls to `fire()` are rejected until at least one\n * of the current requests completes. Default: `Number.MAX_SAFE_INTEGER`.\n * @param {Number} options.errorThresholdPercentage the error percentage at\n * which to open the circuit and start short-circuiting requests to fallback.\n * Default: 50\n * @param {boolean} options.enabled whether this circuit is enabled upon\n * construction. Default: true\n * @param {boolean} options.allowWarmUp determines whether to allow failures\n * without opening the circuit during a brief warmup period (this is the\n * `rollingCountTimeout` property). Default: false\n * This can help in situations where no matter what your\n * `errorThresholdPercentage` is, if the first execution times out or fails,\n * the circuit immediately opens.\n * @param {Number} options.volumeThreshold the minimum number of requests within\n * the rolling statistical window that must exist before the circuit breaker\n * can open. This is similar to `options.allowWarmUp` in that no matter how many\n * failures there are, if the number of requests within the statistical window\n * does not exceed this threshold, the circuit will remain closed. Default: 0\n * @param {Function} options.errorFilter an optional function that will be\n * called when the circuit's function fails (returns a rejected Promise). If\n * this function returns truthy, the circuit's failPure statistics will not be\n * incremented. This is useful, for example, when you don't want HTTP 404 to\n * trip the circuit, but still want to handle it as a failure case.\n * @param {boolean} options.cache whether the return value of the first\n * successful execution of the circuit's function will be cached. Once a value\n * has been cached that value will be returned for every subsequent execution:\n * the cache can be cleared using `clearCache`. (The metrics `cacheHit` and\n * `cacheMiss` reflect cache activity.) Default: false\n * @param {Number} options.cacheTTL the time to live for the cache\n * in milliseconds. Set 0 for infinity cache. Default: 0 (no TTL)\n * @param {Number} options.cacheSize the max amount of entries in the internal\n * cache. Only used when cacheTransport is not defined.\n * Default: max size of JS map (2^24).\n * @param {Function} options.cacheGetKey function that returns the key to use\n * when caching the result of the circuit's fire.\n * Better to use custom one, because `JSON.stringify` is not good\n * from performance perspective.\n * Default: `(...args) => JSON.stringify(args)`\n * @param {CacheTransport} options.cacheTransport custom cache transport\n * should implement `get`, `set` and `flush` methods.\n * @param {boolean} options.coalesce  If true, this provides coalescing of\n * requests to this breaker, in other words: the promise will be cached.\n * Only one action (with same cache key) is executed at a time, and the other\n * pending actions wait for the result. Performance will improve when rapidly\n * firing the circuitbreaker with the same request, especially on a slower\n * action (e.g. multiple end-users fetching same data from remote).\n * Will use internal cache only. Can be used in combination with options.cache.\n * The metrics `coalesceCacheHit` and `coalesceCacheMiss` are available.\n * Default: false\n * @param {Number} options.coalesceTTL the time to live for the coalescing\n * in milliseconds. Set 0 for infinity cache. Default: same as options.timeout\n * @param {Number} options.coalesceSize the max amount of entries in the\n * coalescing cache. Default: max size of JS map (2^24).\n * @param {string[]} options.coalesceResetOn when to reset the coalesce cache.\n * Options: `error`, `success`, `timeout`. Default: not set, reset using TTL.\n * @param {AbortController} options.abortController this allows Opossum to\n * signal upon timeout and properly abort your on going requests instead of\n * leaving it in the background\n * @param {boolean} options.enableSnapshots whether to enable the rolling\n * stats snapshots that opossum emits at the bucketInterval. Disable this\n * as an optimization if you don't listen to the 'snapshot' event to reduce\n * the number of timers opossum initiates.\n * @param {EventEmitter} options.rotateBucketController if you have multiple\n * breakers in your app, the number of timers across breakers can get costly.\n * This option allows you to provide an EventEmitter that rotates the buckets\n * so you can have one global timer in your app. Make sure that you are\n * emitting a 'rotate' event from this EventEmitter\n * @param {boolean} options.autoRenewAbortController Automatically recreates\n * the instance of AbortController whenever the circuit transitions to\n * 'halfOpen' or 'closed' state. This ensures that new requests are not\n * impacted by previous signals that were triggered when the circuit was 'open'.\n * Default: false\n *\n *\n * @fires CircuitBreaker#halfOpen\n * @fires CircuitBreaker#close\n * @fires CircuitBreaker#open\n * @fires CircuitBreaker#fire\n * @fires CircuitBreaker#cacheHit\n * @fires CircuitBreaker#cacheMiss\n * @fires CircuitBreaker#coalesceCacheHit\n * @fires CircuitBreaker#coalesceCacheMiss\n * @fires CircuitBreaker#reject\n * @fires CircuitBreaker#timeout\n * @fires CircuitBreaker#success\n * @fires CircuitBreaker#semaphoreLocked\n * @fires CircuitBreaker#healthCheckFailed\n * @fires CircuitBreaker#fallback\n * @fires CircuitBreaker#failure\n */\nclass CircuitBreaker extends EventEmitter {\n  /**\n   * Returns true if the provided error was generated here. It will be false\n   * if the error came from the action itself.\n   * @param {Error} error The Error to check.\n   * @returns {Boolean} true if the error was generated here\n   */\n  static isOurError (error) {\n    return !!error[OUR_ERROR];\n  }\n\n  /**\n  * Create a new Status object,\n  * helpful when you need to prime a breaker with stats\n  * @param {Object} options -\n  * @param {Number} options.rollingCountBuckets number of buckets in the window\n  * @param {Number} options.rollingCountTimeout the duration of the window\n  * @param {Boolean} options.rollingPercentilesEnabled whether to calculate\n  * @param {Object} options.stats user supplied stats\n  * @returns {Status} a new {@link Status} object\n  */\n  static newStatus (options) {\n    return new Status(options);\n  }\n\n  constructor (action, options = {}) {\n    super();\n    this.options = options;\n    this.options.timeout = options.timeout ?? 10000;\n    this.options.resetTimeout = options.resetTimeout ?? 30000;\n    this.options.errorThresholdPercentage =\n      options.errorThresholdPercentage ?? 50;\n    this.options.rollingCountTimeout = options.rollingCountTimeout ?? 10000;\n    this.options.rollingCountBuckets = options.rollingCountBuckets ?? 10;\n    this.options.rollingPercentilesEnabled =\n      options.rollingPercentilesEnabled !== false;\n    this.options.capacity = Number.isInteger(options.capacity)\n      ? options.capacity\n      : Number.MAX_SAFE_INTEGER;\n    this.options.errorFilter = options.errorFilter || (_ => false);\n    this.options.cacheTTL = options.cacheTTL ?? 0;\n    this.options.cacheGetKey = options.cacheGetKey ??\n      ((...args) => JSON.stringify(args));\n    this.options.enableSnapshots = options.enableSnapshots !== false;\n    this.options.rotateBucketController = options.rotateBucketController;\n    this.options.coalesce = !!options.coalesce;\n    this.options.coalesceTTL = options.coalesceTTL ?? this.options.timeout;\n    this.options.coalesceResetOn = options.coalesceResetOn?.filter(o => ['error', 'success', 'timeout'].includes(o)) || [];\n\n    // Set default cache transport if not provided\n    if (this.options.cache) {\n      if (this.options.cacheTransport === undefined) {\n        this.options.cacheTransport = new MemoryCache(options.cacheSize);\n      } else if (typeof this.options.cacheTransport !== 'object' ||\n        !this.options.cacheTransport.get ||\n        !this.options.cacheTransport.set ||\n        !this.options.cacheTransport.flush\n      ) {\n        throw new TypeError(\n          'options.cacheTransport should be an object with `get`, `set` and `flush` methods'\n        );\n      }\n    }\n\n    if (this.options.coalesce) {\n      this.options.coalesceCache = new MemoryCache(options.coalesceSize);\n    }\n\n    this.semaphore = new Semaphore(this.options.capacity);\n\n    // check if action is defined\n    if (!action) {\n      throw new TypeError(\n        'No action provided. Cannot construct a CircuitBreaker without an invocable action.'\n      );\n    }\n\n    if (options.autoRenewAbortController && !options.abortController) {\n      options.abortController = new AbortController();\n    }\n\n    if (options.abortController && typeof options.abortController.abort !== 'function') {\n      throw new TypeError(\n        'AbortController does not contain `abort()` method'\n      );\n    }\n\n    this[VOLUME_THRESHOLD] = Number.isInteger(options.volumeThreshold)\n      ? options.volumeThreshold\n      : 0;\n    this[WARMING_UP] = options.allowWarmUp === true;\n\n    // The user can pass in a Status object to initialize the Status/stats\n    if (this.options.status) {\n      // Do a check that this is a Status Object,\n      if (this.options.status instanceof Status) {\n        this[STATUS] = this.options.status;\n      } else {\n        this[STATUS] = new Status({ stats: this.options.status });\n      }\n    } else {\n      this[STATUS] = new Status(this.options);\n    }\n\n    this[STATE] = CLOSED;\n\n    if (options.state) {\n      this[ENABLED] = options.state.enabled !== false;\n      this[WARMING_UP] = options.state.warmUp || this[WARMING_UP];\n      // Closed if nothing is passed in\n      this[CLOSED] = options.state.closed !== false;\n      // These should be in sync\n      this[HALF_OPEN] = this[PENDING_CLOSE] = options.state.halfOpen || false;\n      // Open should be the opposite of closed,\n      // but also the opposite of half_open\n      this[OPEN] = !this[CLOSED] && !this[HALF_OPEN];\n      this[SHUTDOWN] = options.state.shutdown || false;\n    } else {\n      this[PENDING_CLOSE] = false;\n      this[ENABLED] = options.enabled !== false;\n    }\n\n    this[FALLBACK_FUNCTION] = null;\n    this[NAME] = options.name || action.name || nextName();\n    this[GROUP] = options.group || this[NAME];\n\n    if (this[WARMING_UP]) {\n      const timer = this[WARMUP_TIMEOUT] = setTimeout(\n        _ => (this[WARMING_UP] = false),\n        this.options.rollingCountTimeout\n      );\n      if (typeof timer.unref === 'function') {\n        timer.unref();\n      }\n    }\n\n    if (typeof action !== 'function') {\n      this.action = _ => Promise.resolve(action);\n    } else this.action = action;\n\n    if (options.maxFailures) console.error(deprecation);\n\n    const increment = property =>\n      (result, runTime) => this[STATUS].increment(property, runTime);\n\n    this.on('success', increment('successes'));\n    this.on('failure', increment('failures'));\n    this.on('fallback', increment('fallbacks'));\n    this.on('timeout', increment('timeouts'));\n    this.on('fire', increment('fires'));\n    this.on('reject', increment('rejects'));\n    this.on('cacheHit', increment('cacheHits'));\n    this.on('cacheMiss', increment('cacheMisses'));\n    this.on('coalesceCacheHit', increment('coalesceCacheHits'));\n    this.on('coalesceCacheMiss', increment('coalesceCacheMisses'));\n    this.on('open', _ => this[STATUS].open());\n    this.on('close', _ => this[STATUS].close());\n    this.on('semaphoreLocked', increment('semaphoreRejections'));\n\n    /**\n     * @param {CircuitBreaker} circuit This current circuit\n     * @returns {function(): void} A bound reset callback\n     * @private\n     */\n    function _startTimer (circuit) {\n      circuit[LAST_TIMER_AT] = Date.now();\n      return _ => {\n        const timer = circuit[RESET_TIMEOUT] = setTimeout(() => {\n          _halfOpen(circuit);\n        }, circuit.options.resetTimeout);\n        if (typeof timer.unref === 'function') {\n          timer.unref();\n        }\n      };\n    }\n\n    /**\n     * Sets the circuit breaker to half open\n     * @private\n     * @param {CircuitBreaker} circuit The current circuit breaker\n     * @returns {void}\n     */\n    function _halfOpen (circuit) {\n      circuit[STATE] = HALF_OPEN;\n      circuit[PENDING_CLOSE] = true;\n      circuit._renewAbortControllerIfNeeded();\n      /**\n       * Emitted after `options.resetTimeout` has elapsed, allowing for\n       * a single attempt to call the service again. If that attempt is\n       * successful, the circuit will be closed. Otherwise it remains open.\n       *\n       * @event CircuitBreaker#halfOpen\n       * @type {Number} how long the circuit remained open\n       */\n      circuit.emit('halfOpen', circuit.options.resetTimeout);\n    }\n\n    this.on('open', _startTimer(this));\n    this.on('success', _ => {\n      if (this.halfOpen) {\n        this.close();\n      }\n    });\n\n    // Prepopulate the State of the Breaker\n    if (this[SHUTDOWN]) {\n      this[STATE] = SHUTDOWN;\n      this.shutdown();\n    } else if (this[CLOSED]) {\n      this.close();\n    } else if (this[OPEN]) {\n      // If the state being passed in is OPEN but more time has elapsed\n      // than the resetTimeout, then we should be in halfOpen state\n      if (this.options.state.lastTimerAt !== undefined &&\n        (Date.now() - this.options.state.lastTimerAt) >\n        this.options.resetTimeout) {\n        _halfOpen(this);\n      } else {\n        this.open();\n      }\n    } else if (this[HALF_OPEN]) {\n      // Not sure if anything needs to be done here\n      this[STATE] = HALF_OPEN;\n    }\n  }\n\n  /**\n   * Renews the abort controller if needed\n   * @private\n   * @returns {void}\n   */\n  _renewAbortControllerIfNeeded () {\n    if (\n      this.options.autoRenewAbortController &&\n        this.options.abortController &&\n        this.options.abortController.signal.aborted\n    ) {\n      this.options.abortController = new AbortController();\n    }\n  }\n\n  /**\n   * Closes the breaker, allowing the action to execute again\n   * @fires CircuitBreaker#close\n   * @returns {void}\n   */\n  close () {\n    if (this[STATE] !== CLOSED) {\n      if (this[RESET_TIMEOUT]) {\n        clearTimeout(this[RESET_TIMEOUT]);\n      }\n      this[STATE] = CLOSED;\n      this[PENDING_CLOSE] = false;\n      this._renewAbortControllerIfNeeded();\n      /**\n       * Emitted when the breaker is reset allowing the action to execute again\n       * @event CircuitBreaker#close\n       */\n      this.emit('close');\n    }\n  }\n\n  /**\n   * Opens the breaker. Each time the breaker is fired while the circuit is\n   * opened, a failed Promise is returned, or if any fallback function\n   * has been provided, it is invoked.\n   *\n   * If the breaker is already open this call does nothing.\n   * @fires CircuitBreaker#open\n   * @returns {void}\n   */\n  open () {\n    if (this[STATE] !== OPEN) {\n      this[STATE] = OPEN;\n      this[PENDING_CLOSE] = false;\n      /**\n       * Emitted when the breaker opens because the action has\n       * failure percentage greater than `options.errorThresholdPercentage`.\n       * @event CircuitBreaker#open\n       */\n      this.emit('open');\n    }\n  }\n\n  /**\n   * Shuts down this circuit breaker. All subsequent calls to the\n   * circuit will fail, returning a rejected promise.\n   * @returns {void}\n   */\n  shutdown () {\n    /**\n     * Emitted when the circuit breaker has been shut down.\n     * @event CircuitBreaker#shutdown\n     */\n    this.emit('shutdown');\n\n    this.disable();\n    this.removeAllListeners();\n    if (this[RESET_TIMEOUT]) {\n      clearTimeout(this[RESET_TIMEOUT]);\n    }\n    if (this[WARMUP_TIMEOUT]) {\n      clearTimeout(this[WARMUP_TIMEOUT]);\n    }\n    this.status.shutdown();\n    this[STATE] = SHUTDOWN;\n\n    // clear cache on shutdown\n    this.clearCache();\n  }\n\n  /**\n   * Determines if the circuit has been shutdown.\n   * @type {Boolean}\n   */\n  get isShutdown () {\n    return this[STATE] === SHUTDOWN;\n  }\n\n  /**\n   * Gets the name of this circuit\n   * @type {String}\n   */\n  get name () {\n    return this[NAME];\n  }\n\n  /**\n   * Gets the name of this circuit group\n   * @type {String}\n   */\n  get group () {\n    return this[GROUP];\n  }\n\n  /**\n   * Gets whether this circuit is in the `pendingClosed` state\n   * @type {Boolean}\n   */\n  get pendingClose () {\n    return this[PENDING_CLOSE];\n  }\n\n  /**\n   * True if the circuit is currently closed. False otherwise.\n   * @type {Boolean}\n   */\n  get closed () {\n    return this[STATE] === CLOSED;\n  }\n\n  /**\n   * True if the circuit is currently opened. False otherwise.\n   * @type {Boolean}\n   */\n  get opened () {\n    return this[STATE] === OPEN;\n  }\n\n  /**\n   * True if the circuit is currently half opened. False otherwise.\n   * @type {Boolean}\n   */\n  get halfOpen () {\n    return this[STATE] === HALF_OPEN;\n  }\n\n  /**\n   * The current {@link Status} of this {@link CircuitBreaker}\n   * @type {Status}\n   */\n  get status () {\n    return this[STATUS];\n  }\n\n  /**\n   * Get the current stats for the circuit.\n   * @see Status#stats\n   * @type {Object}\n   */\n  get stats () {\n    return this[STATUS].stats;\n  }\n\n  toJSON () {\n    return {\n      state: {\n        name: this.name,\n        enabled: this.enabled,\n        closed: this.closed,\n        open: this.opened,\n        halfOpen: this.halfOpen,\n        warmUp: this.warmUp,\n        shutdown: this.isShutdown,\n        lastTimerAt: this[LAST_TIMER_AT]\n      },\n      status: this.status.stats\n    };\n  }\n\n  /**\n   * Gets whether the circuit is enabled or not\n   * @type {Boolean}\n   */\n  get enabled () {\n    return this[ENABLED];\n  }\n\n  /**\n   * Gets whether the circuit is currently in warm up phase\n   * @type {Boolean}\n   */\n  get warmUp () {\n    return this[WARMING_UP];\n  }\n\n  /**\n   * Gets the volume threshold for this circuit\n   * @type {Boolean}\n   */\n  get volumeThreshold () {\n    return this[VOLUME_THRESHOLD];\n  }\n\n  /**\n   * Provide a fallback function for this {@link CircuitBreaker}. This\n   * function will be executed when the circuit is `fire`d and fails.\n   * It will always be preceded by a `failure` event, and `breaker.fire` returns\n   * a rejected Promise.\n   * @param {Function | CircuitBreaker} func the fallback function to execute\n   * when the breaker has opened or when a timeout or error occurs.\n   * @return {CircuitBreaker} this\n   */\n  fallback (func) {\n    let fb = func;\n    if (func instanceof CircuitBreaker) {\n      fb = (...args) => func.fire(...args);\n    }\n    this[FALLBACK_FUNCTION] = fb;\n    return this;\n  }\n\n  /**\n   * Execute the action for this circuit. If the action fails or times out, the\n   * returned promise will be rejected. If the action succeeds, the promise will\n   * resolve with the resolved value from action. If a fallback function was\n   * provided, it will be invoked in the event of any failure or timeout.\n   *\n   * Any parameters passed to this function will be proxied to the circuit\n   * function.\n   *\n   * @return {Promise<any>} promise resolves with the circuit function's return\n   * value on success or is rejected on failure of the action. Use isOurError()\n   * to determine if a rejection was a result of the circuit breaker or the\n   * action.\n   *\n   * @fires CircuitBreaker#failure\n   * @fires CircuitBreaker#fallback\n   * @fires CircuitBreaker#fire\n   * @fires CircuitBreaker#reject\n   * @fires CircuitBreaker#success\n   * @fires CircuitBreaker#timeout\n   * @fires CircuitBreaker#semaphoreLocked\n   */\n  fire (...args) {\n    return this.call(this.action, ...args);\n  }\n\n  /**\n   * Execute the action for this circuit using `context` as `this`.\n   * If the action fails or times out, the\n   * returned promise will be rejected. If the action succeeds, the promise will\n   * resolve with the resolved value from action. If a fallback function was\n   * provided, it will be invoked in the event of any failure or timeout.\n   *\n   * Any parameters in addition to `context will be passed to the\n   * circuit function.\n   *\n   * @param {any} context the `this` context used for function execution\n   * @param {any} rest the arguments passed to the action\n   *\n   * @return {Promise<any>} promise resolves with the circuit function's return\n   * value on success or is rejected on failure of the action.\n   *\n   * @fires CircuitBreaker#failure\n   * @fires CircuitBreaker#fallback\n   * @fires CircuitBreaker#fire\n   * @fires CircuitBreaker#reject\n   * @fires CircuitBreaker#success\n   * @fires CircuitBreaker#timeout\n   * @fires CircuitBreaker#semaphoreLocked\n   */\n  call (context, ...rest) {\n    if (this.isShutdown) {\n      const err = buildError('The circuit has been shutdown.', 'ESHUTDOWN');\n      return Promise.reject(err);\n    }\n\n    const args = rest.slice();\n\n    /**\n     * Emitted when the circuit breaker action is executed\n     * @event CircuitBreaker#fire\n     * @type {any} the arguments passed to the fired function\n     */\n    this.emit('fire', args);\n\n    // Protection, caches and coalesce disabled.\n    if (!this[ENABLED]) {\n      const result = this.action.apply(context, args);\n      return (typeof result.then === 'function')\n        ? result\n        : Promise.resolve(result);\n    }\n\n    // Generate cachekey only when cache and/or coalesce is enabled.\n    const cacheKey = this.options.cache || this.options.coalesce ? this.options.cacheGetKey.apply(this, rest) : '';\n\n    // If cache is enabled, check if we have a cached value\n    if (this.options.cache) {\n      const cached = this.options.cacheTransport.get(cacheKey);\n      if (cached) {\n        /**\n         * Emitted when the circuit breaker is using the cache\n         * and finds a value.\n         * @event CircuitBreaker#cacheHit\n         */\n        this.emit('cacheHit');\n        return cached;\n      }\n      /**\n       * Emitted when the circuit breaker does not find a value in\n       * the cache, but the cache option is enabled.\n       * @event CircuitBreaker#cacheMiss\n       */\n      this.emit('cacheMiss');\n    }\n\n    /* When coalesce is enabled, check coalesce cache and return\n     promise, if any. */\n    if (this.options.coalesce) {\n      const cachedCall = this.options.coalesceCache.get(cacheKey);\n\n      if (cachedCall) {\n        /**\n         * Emitted when the circuit breaker is using coalesce cache\n         * and finds a cached promise.\n         * @event CircuitBreaker#coalesceCacheHit\n         */\n        this.emit('coalesceCacheHit');\n        return cachedCall;\n      }\n      /**\n       * Emitted when the circuit breaker does not find a value in\n       * coalesce cache, but the coalesce option is enabled.\n       * @event CircuitBreaker#coalesceCacheMiss\n       */\n      this.emit('coalesceCacheMiss');\n    }\n\n    if (!this.closed && !this.pendingClose) {\n      /**\n       * Emitted when the circuit breaker is open and failing fast\n       * @event CircuitBreaker#reject\n       * @type {Error}\n       */\n      const error = buildError('Breaker is open', 'EOPENBREAKER');\n\n      this.emit('reject', error);\n\n      return fallback(this, error, args) ||\n        Promise.reject(error);\n    }\n    this[PENDING_CLOSE] = false;\n\n    let timeout;\n    let timeoutError = false;\n\n    const call = new Promise((resolve, reject) => {\n      const latencyStartTime = Date.now();\n      if (this.semaphore.test()) {\n        if (this.options.timeout) {\n          timeout = setTimeout(\n            () => {\n              timeoutError = true;\n              const error = buildError(\n                `Timed out after ${this.options.timeout}ms`, 'ETIMEDOUT'\n              );\n              const latency = Date.now() - latencyStartTime;\n              this.semaphore.release();\n              /**\n               * Emitted when the circuit breaker action takes longer than\n               * `options.timeout`\n               * @event CircuitBreaker#timeout\n               * @type {Error}\n               */\n              this.emit('timeout', error, latency, args);\n              handleError(error, this, timeout, args, latency, resolve, reject);\n              resetCoalesce(this, cacheKey, 'timeout');\n\n              if (this.options.abortController) {\n                this.options.abortController.abort();\n              }\n            }, this.options.timeout);\n        }\n\n        try {\n          const result = this.action.apply(context, args);\n          const promise = (typeof result.then === 'function')\n            ? result\n            : Promise.resolve(result);\n\n          promise.then(result => {\n            if (!timeoutError) {\n              clearTimeout(timeout);\n              /**\n               * Emitted when the circuit breaker action succeeds\n               * @event CircuitBreaker#success\n               * @type {any} the return value from the circuit\n               */\n              this.emit('success', result, (Date.now() - latencyStartTime));\n              resetCoalesce(this, cacheKey, 'success');\n              this.semaphore.release();\n              resolve(result);\n              if (this.options.cache) {\n                this.options.cacheTransport.set(\n                  cacheKey,\n                  promise,\n                  this.options.cacheTTL > 0\n                    ? Date.now() + this.options.cacheTTL\n                    : 0\n                );\n              }\n            }\n          })\n            .catch(error => {\n              if (!timeoutError) {\n                this.semaphore.release();\n                const latencyEndTime = Date.now() - latencyStartTime;\n                handleError(\n                  error, this, timeout, args, latencyEndTime, resolve, reject);\n                resetCoalesce(this, cacheKey, 'error');\n              }\n            });\n        } catch (error) {\n          this.semaphore.release();\n          const latency = Date.now() - latencyStartTime;\n          handleError(error, this, timeout, args, latency, resolve, reject);\n          resetCoalesce(this, cacheKey, 'error');\n        }\n      } else {\n        const latency = Date.now() - latencyStartTime;\n        const err = buildError('Semaphore locked', 'ESEMLOCKED');\n        /**\n         * Emitted when the rate limit has been reached and there\n         * are no more locks to be obtained.\n         * @event CircuitBreaker#semaphoreLocked\n         * @type {Error}\n         */\n        this.emit('semaphoreLocked', err, latency);\n        handleError(err, this, timeout, args, latency, resolve, reject);\n        resetCoalesce(this, cacheKey);\n      }\n    });\n\n    /* When coalesce is enabled, store promise in coalesceCache */\n    if (this.options.coalesce) {\n      this.options.coalesceCache.set(\n        cacheKey,\n        call,\n        this.options.coalesceTTL > 0\n          ? Date.now() + this.options.coalesceTTL\n          : 0\n      );\n    }\n\n    return call;\n  }\n\n  /**\n   * Clears the cache of this {@link CircuitBreaker}\n   * @returns {void}\n   */\n  clearCache () {\n    if (this.options.cache) {\n      this.options.cacheTransport.flush();\n    }\n\n    if (this.options.coalesceCache) {\n      this.options.coalesceCache.flush();\n    }\n  }\n\n  /**\n   * Provide a health check function to be called periodically. The function\n   * should return a Promise. If the promise is rejected the circuit will open.\n   * This is in addition to the existing circuit behavior as defined by\n   * `options.errorThresholdPercentage` in the constructor. For example, if the\n   * health check function provided here always returns a resolved promise, the\n   * circuit can still trip and open if there are failures exceeding the\n   * configured threshold. The health check function is executed within the\n   * circuit breaker's execution context, so `this` within the function is the\n   * circuit breaker itself.\n   *\n   * @param {Function} func a health check function which returns a promise.\n   * @param {Number} [interval] the amount of time between calls to the health\n   * check function. Default: 5000 (5 seconds)\n   *\n   * @returns {void}\n   *\n   * @fires CircuitBreaker#healthCheckFailed\n   * @throws {TypeError} if `interval` is supplied but not a number\n   */\n  healthCheck (func, interval) {\n    interval = interval || 5000;\n    if (typeof func !== 'function') {\n      throw new TypeError('Health check function must be a function');\n    }\n    if (isNaN(interval)) {\n      throw new TypeError('Health check interval must be a number');\n    }\n\n    const check = _ => {\n      func.apply(this).catch(e => {\n        /**\n         * Emitted with the user-supplied health check function\n         * returns a rejected promise.\n         * @event CircuitBreaker#healthCheckFailed\n         * @type {Error}\n         */\n        this.emit('healthCheckFailed', e);\n        this.open();\n      });\n    };\n\n    const timer = setInterval(check, interval);\n    if (typeof timer.unref === 'function') {\n      timer.unref();\n    }\n\n    check();\n  }\n\n  /**\n   * Enables this circuit. If the circuit is the  disabled\n   * state, it will be re-enabled. If not, this is essentially\n   * a noop.\n   * @returns {void}\n   */\n  enable () {\n    this[ENABLED] = true;\n    this.status.startListeneningForRotateEvent();\n  }\n\n  /**\n   * Disables this circuit, causing all calls to the circuit's function\n   * to be executed without circuit or fallback protection.\n   * @returns {void}\n   */\n  disable () {\n    this[ENABLED] = false;\n    this.status.removeRotateBucketControllerListener();\n  }\n\n  /**\n   * Retrieves the current AbortSignal from the abortController, if available.\n   * This signal can be used to monitor ongoing requests.\n   * @returns {AbortSignal|undefined} The AbortSignal if present,\n   * otherwise undefined.\n   */\n  getSignal () {\n    if (this.options.abortController && this.options.abortController.signal) {\n      return this.options.abortController.signal;\n    }\n\n    return undefined;\n  }\n\n  /**\n   * Retrieves the current AbortController instance.\n   * This controller can be used to manually abort ongoing requests or create\n   * a new signal.\n   * @returns {AbortController|undefined} The AbortController if present,\n   * otherwise undefined.\n   */\n  getAbortController () {\n    return this.options.abortController;\n  }\n}\n\nfunction handleError (error, circuit, timeout, args, latency, resolve, reject) {\n  clearTimeout(timeout);\n\n  if (circuit.options.errorFilter(error, ...args)) {\n    // The error was filtered, so emit 'success'\n    circuit.emit('success', error, latency);\n  } else {\n    // Error was not filtered, so emit 'failure'\n    fail(circuit, error, args, latency);\n\n    // Only call the fallback function if errorFilter doesn't succeed\n    // If the fallback function succeeds, resolve\n    const fb = fallback(circuit, error, args);\n    if (fb) return resolve(fb);\n  }\n\n  // In all other cases, reject\n  reject(error);\n}\n\nfunction fallback (circuit, err, args) {\n  if (circuit[FALLBACK_FUNCTION]) {\n    try {\n      const result =\n      circuit[FALLBACK_FUNCTION]\n        .apply(circuit[FALLBACK_FUNCTION], [...args, err]);\n      /**\n       * Emitted when the circuit breaker executes a fallback function\n       * @event CircuitBreaker#fallback\n       * @type {any} the return value of the fallback function\n       */\n      circuit.emit('fallback', result, err);\n      if (result instanceof Promise) return result;\n      return Promise.resolve(result);\n    } catch (e) {\n      return Promise.reject(e);\n    }\n  }\n}\n\nfunction fail (circuit, err, args, latency) {\n  /**\n   * Emitted when the circuit breaker action fails\n   * @event CircuitBreaker#failure\n   * @type {Error}\n   */\n  circuit.emit('failure', err, latency, args);\n  if (circuit.warmUp) return;\n\n  // check stats to see if the circuit should be opened\n  const stats = circuit.stats;\n  if ((stats.fires < circuit.volumeThreshold) && !circuit.halfOpen) return;\n  const errorRate = stats.failures / stats.fires * 100;\n  if (errorRate > circuit.options.errorThresholdPercentage ||\n    circuit.halfOpen) {\n    circuit.open();\n  }\n}\n\nfunction resetCoalesce (circuit, cacheKey, event) {\n/**\n * Reset coalesce cache for this cacheKey, depending on\n * options.coalesceResetOn set.\n * @param {@link CircuitBreaker} circuit what circuit is to be cleared\n * @param {string} cacheKey cache key to clear.\n * @param {string} event optional, can be `error`, `success`, `timeout`\n * @returns {void}\n */\n  if (!event || circuit.options.coalesceResetOn.includes(event)) {\n    circuit.options.coalesceCache?.delete(cacheKey);\n  }\n}\n\nfunction buildError (msg, code) {\n  const error = new Error(msg);\n  error.code = code;\n  error[OUR_ERROR] = true;\n  return error;\n}\n\n// http://stackoverflow.com/a/2117523\nconst nextName = () =>\n  'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {\n    const r = Math.random() * 16 | 0;\n    const v = c === 'x' ? r : (r & 0x3 | 0x8);\n    return v.toString(16);\n  });\n\nmodule.exports = exports = CircuitBreaker;\n","'use strict';\n\nmodule.exports = exports = semaphore;\n\nfunction semaphore (count) {\n  const resolvers = [];\n  let counter = count;\n\n  const sem = {\n    take,\n    release,\n    test\n  };\n\n  Object.defineProperty(sem, 'count', {\n    get: _ => counter,\n    enumerable: true\n  });\n\n  return sem;\n\n  function take (timeout) {\n    if (counter > 0) {\n      --counter;\n      return Promise.resolve(release);\n    }\n    return new Promise((resolve, reject) => {\n      resolvers.push(_ => {\n        --counter;\n        resolve(release);\n      });\n      if (timeout) {\n        setTimeout(_ => {\n          resolvers.shift();\n          const err = new Error(`Timed out after ${timeout}ms`);\n          err.code = 'ETIMEDOUT';\n          reject(err);\n        }, timeout);\n      }\n    });\n  }\n\n  function release () {\n    counter++;\n    if (resolvers.length > 0) {\n      resolvers.shift()();\n    }\n  }\n\n  function test () {\n    if (counter < 1) return false;\n    return take() && true;\n  }\n}\n","'use strict';\n\nconst WINDOW = Symbol('window');\nconst BUCKETS = Symbol('buckets');\nconst TIMEOUT = Symbol('timeout');\nconst PERCENTILES = Symbol('percentiles');\nconst BUCKET_INTERVAL = Symbol('bucket-interval');\nconst SNAPSHOT_INTERVAL = Symbol('snapshot-interval');\nconst ROTATE_EVENT_NAME = Symbol('rotate-event-name');\n\nconst EventEmitter = require('events').EventEmitter;\n\n/**\n * Tracks execution status for a given {@link CircuitBreaker}.\n * A Status instance is created for every {@link CircuitBreaker}\n * and does not typically need to be created by a user.\n *\n * A Status instance will listen for all events on the {@link CircuitBreaker}\n * and track them in a rolling statistical window. The window duration is\n * determined by the `rollingCountTimeout` option provided to the\n * {@link CircuitBreaker}. The window consists of an array of Objects,\n * each representing the counts for a {@link CircuitBreaker}'s events.\n *\n * The array's length is determined by the {@link CircuitBreaker}'s\n * `rollingCountBuckets` option. The duration of each slice of the window\n * is determined by dividing the `rollingCountTimeout` by\n * `rollingCountBuckets`.\n *\n * @class Status\n * @extends EventEmitter\n * @param {Object} options for the status window\n * @param {Number} options.rollingCountBuckets number of buckets in the window\n * @param {Number} options.rollingCountTimeout the duration of the window\n * @param {Boolean} options.rollingPercentilesEnabled whether to calculate\n * percentiles\n * @param {Object} options.stats object of previous stats\n * @example\n * // Creates a 1 second window consisting of ten time slices,\n * // each 100ms long.\n * const circuit = circuitBreaker(fs.readFile,\n *  { rollingCountBuckets: 10, rollingCountTimeout: 1000});\n *\n * // get the cumulative statistics for the last second\n * circuit.status.stats;\n *\n * // get the array of 10, 1 second time slices for the last second\n * circuit.status.window;\n * @fires Status#snapshot\n * @see CircuitBreaker#status\n */\nclass Status extends EventEmitter {\n  constructor (options) {\n    super();\n\n    // Set up our statistical rolling window\n    this[BUCKETS] = options.rollingCountBuckets || 10;\n    this[TIMEOUT] = options.rollingCountTimeout || 10000;\n    this[WINDOW] = new Array(this[BUCKETS]);\n    this[PERCENTILES] = [0.0, 0.25, 0.5, 0.75, 0.9, 0.95, 0.99, 0.995, 1];\n    this[ROTATE_EVENT_NAME] = 'rotate';\n\n    // Default this value to true\n    this.rollingPercentilesEnabled =\n    options.rollingPercentilesEnabled !== false;\n\n    // Default this value to true\n    this.enableSnapshots = options.enableSnapshots !== false;\n\n    // can be undefined\n    this.rotateBucketController = options.rotateBucketController;\n    this.rotateBucket = nextBucket(this[WINDOW]);\n\n    // prime the window with buckets\n    for (let i = 0; i < this[BUCKETS]; i++) this[WINDOW][i] = bucket();\n\n    const bucketInterval = Math.floor(this[TIMEOUT] / this[BUCKETS]);\n\n    if (this.rotateBucketController) {\n      // rotate the buckets based on an optional EventEmitter\n      this.startListeneningForRotateEvent();\n    } else {\n      // or rotate the buckets periodically\n      this[BUCKET_INTERVAL] = setInterval(this.rotateBucket, bucketInterval);\n      // No unref() in the browser\n      if (typeof this[BUCKET_INTERVAL].unref === 'function') {\n        this[BUCKET_INTERVAL].unref();\n      }\n    }\n\n    /**\n     * Emitted at each time-slice. Listeners for this\n     * event will receive a cumulative snapshot of the current status window.\n     * @event Status#snapshot\n     * @type {Object}\n     */\n    if (this.enableSnapshots) {\n      this[SNAPSHOT_INTERVAL] = setInterval(\n        _ => this.emit('snapshot', this.stats),\n        bucketInterval);\n      if (typeof this[SNAPSHOT_INTERVAL].unref === 'function') {\n        this[SNAPSHOT_INTERVAL].unref();\n      }\n    }\n\n    if (options.stats) {\n      this[WINDOW][0] = { ...bucket(), ...options.stats };\n    }\n  }\n\n  /**\n   * Get the cumulative stats for the current window\n   * @type {Object}\n   */\n  get stats () {\n    const totals = this[WINDOW].reduce((acc, val) => {\n      if (!val) { return acc; }\n      Object.keys(acc).forEach(key => {\n        if (key !== 'latencyTimes' && key !== 'percentiles') {\n          (acc[key] += val[key] || 0);\n        }\n      });\n\n      if (this.rollingPercentilesEnabled) {\n        if (val.latencyTimes) {\n          acc.latencyTimes = acc.latencyTimes.concat(val.latencyTimes);\n        }\n      }\n      return acc;\n    }, bucket());\n\n    if (this.rollingPercentilesEnabled) {\n      // Sort the latencyTimes\n      totals.latencyTimes.sort((a, b) => a - b);\n\n      // Get the mean latency\n      // Mean = sum of all values in the array/length of array\n      if (totals.latencyTimes.length) {\n        totals.latencyMean =\n          (totals\n            .latencyTimes\n            .reduce((a, b) => a + b, 0)) / totals.latencyTimes.length;\n      } else {\n        totals.latencyMean = 0;\n      }\n\n      // Calculate Percentiles\n      this[PERCENTILES].forEach(percentile => {\n        totals.percentiles[percentile] =\n          calculatePercentile(percentile, totals.latencyTimes);\n      });\n    } else {\n      totals.latencyMean = -1;\n      this[PERCENTILES].forEach(percentile => {\n        totals.percentiles[percentile] = -1;\n      });\n    }\n\n    return totals;\n  }\n\n  /**\n   * Gets the stats window as an array of time-sliced objects.\n   * @type {Array}\n   */\n  get window () {\n    return this[WINDOW].slice();\n  }\n\n  increment (property, latencyRunTime) {\n    this[WINDOW][0][property]++;\n    if (property === 'successes' ||\n        property === 'failures' ||\n        property === 'timeouts') {\n      this[WINDOW][0].latencyTimes.push(latencyRunTime || 0);\n    }\n  }\n\n  open () {\n    this[WINDOW][0].isCircuitBreakerOpen = true;\n  }\n\n  close () {\n    this[WINDOW][0].isCircuitBreakerOpen = false;\n  }\n\n  shutdown () {\n    this.removeAllListeners();\n    // interval is not set if rotateBucketController is provided\n    if (this.rotateBucketController === undefined) {\n      clearInterval(this[BUCKET_INTERVAL]);\n    } else {\n      this.removeRotateBucketControllerListener();\n    }\n    if (this.enableSnapshots) {\n      clearInterval(this[SNAPSHOT_INTERVAL]);\n    }\n  }\n\n  removeRotateBucketControllerListener () {\n    if (this.rotateBucketController) {\n      this.rotateBucketController.removeListener(this[ROTATE_EVENT_NAME],\n        this.rotateBucket);\n    }\n  }\n\n  startListeneningForRotateEvent () {\n    if (\n      this.rotateBucketController &&\n      this.rotateBucketController.listenerCount(this[ROTATE_EVENT_NAME],\n        this.rotateBucket) === 0\n    ) {\n      this.rotateBucketController.on(this[ROTATE_EVENT_NAME],\n        this.rotateBucket);\n    }\n  }\n}\n\nconst nextBucket = window => _ => {\n  window.pop();\n  window.unshift(bucket());\n};\n\nconst bucket = _ => ({\n  failures: 0,\n  fallbacks: 0,\n  successes: 0,\n  rejects: 0,\n  fires: 0,\n  timeouts: 0,\n  cacheHits: 0,\n  cacheMisses: 0,\n  coalesceCacheHits: 0,\n  coalesceCacheMisses: 0,\n  semaphoreRejections: 0,\n  percentiles: {},\n  latencyTimes: []\n});\n\nfunction calculatePercentile (percentile, arr) {\n  if (percentile === 0) {\n    return arr[0] || 0;\n  }\n  const idx = Math.ceil(percentile * arr.length);\n  return arr[idx - 1] || 0;\n}\n\nmodule.exports = exports = Status;\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n  ? R.apply\n  : function ReflectApply(target, receiver, args) {\n    return Function.prototype.apply.call(target, receiver, args);\n  }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n  ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n  ReflectOwnKeys = function ReflectOwnKeys(target) {\n    return Object.getOwnPropertyNames(target)\n      .concat(Object.getOwnPropertySymbols(target));\n  };\n} else {\n  ReflectOwnKeys = function ReflectOwnKeys(target) {\n    return Object.getOwnPropertyNames(target);\n  };\n}\n\nfunction ProcessEmitWarning(warning) {\n  if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n  return value !== value;\n}\n\nfunction EventEmitter() {\n  EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n  if (typeof listener !== 'function') {\n    throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n  }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n  enumerable: true,\n  get: function() {\n    return defaultMaxListeners;\n  },\n  set: function(arg) {\n    if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n      throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n    }\n    defaultMaxListeners = arg;\n  }\n});\n\nEventEmitter.init = function() {\n\n  if (this._events === undefined ||\n      this._events === Object.getPrototypeOf(this)._events) {\n    this._events = Object.create(null);\n    this._eventsCount = 0;\n  }\n\n  this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n  if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n    throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n  }\n  this._maxListeners = n;\n  return this;\n};\n\nfunction _getMaxListeners(that) {\n  if (that._maxListeners === undefined)\n    return EventEmitter.defaultMaxListeners;\n  return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n  return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n  var args = [];\n  for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n  var doError = (type === 'error');\n\n  var events = this._events;\n  if (events !== undefined)\n    doError = (doError && events.error === undefined);\n  else if (!doError)\n    return false;\n\n  // If there is no 'error' event listener then throw.\n  if (doError) {\n    var er;\n    if (args.length > 0)\n      er = args[0];\n    if (er instanceof Error) {\n      // Note: The comments on the `throw` lines are intentional, they show\n      // up in Node's output if this results in an unhandled exception.\n      throw er; // Unhandled 'error' event\n    }\n    // At least give some kind of context to the user\n    var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n    err.context = er;\n    throw err; // Unhandled 'error' event\n  }\n\n  var handler = events[type];\n\n  if (handler === undefined)\n    return false;\n\n  if (typeof handler === 'function') {\n    ReflectApply(handler, this, args);\n  } else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n    for (var i = 0; i < len; ++i)\n      ReflectApply(listeners[i], this, args);\n  }\n\n  return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n  var m;\n  var events;\n  var existing;\n\n  checkListener(listener);\n\n  events = target._events;\n  if (events === undefined) {\n    events = target._events = Object.create(null);\n    target._eventsCount = 0;\n  } else {\n    // To avoid recursion in the case that type === \"newListener\"! Before\n    // adding it to the listeners, first emit \"newListener\".\n    if (events.newListener !== undefined) {\n      target.emit('newListener', type,\n                  listener.listener ? listener.listener : listener);\n\n      // Re-assign `events` because a newListener handler could have caused the\n      // this._events to be assigned to a new object\n      events = target._events;\n    }\n    existing = events[type];\n  }\n\n  if (existing === undefined) {\n    // Optimize the case of one listener. Don't need the extra array object.\n    existing = events[type] = listener;\n    ++target._eventsCount;\n  } else {\n    if (typeof existing === 'function') {\n      // Adding the second element, need to change to array.\n      existing = events[type] =\n        prepend ? [listener, existing] : [existing, listener];\n      // If we've already got an array, just append.\n    } else if (prepend) {\n      existing.unshift(listener);\n    } else {\n      existing.push(listener);\n    }\n\n    // Check for listener leak\n    m = _getMaxListeners(target);\n    if (m > 0 && existing.length > m && !existing.warned) {\n      existing.warned = true;\n      // No error code for this since it is a Warning\n      // eslint-disable-next-line no-restricted-syntax\n      var w = new Error('Possible EventEmitter memory leak detected. ' +\n                          existing.length + ' ' + String(type) + ' listeners ' +\n                          'added. Use emitter.setMaxListeners() to ' +\n                          'increase limit');\n      w.name = 'MaxListenersExceededWarning';\n      w.emitter = target;\n      w.type = type;\n      w.count = existing.length;\n      ProcessEmitWarning(w);\n    }\n  }\n\n  return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n  return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n    function prependListener(type, listener) {\n      return _addListener(this, type, listener, true);\n    };\n\nfunction onceWrapper() {\n  if (!this.fired) {\n    this.target.removeListener(this.type, this.wrapFn);\n    this.fired = true;\n    if (arguments.length === 0)\n      return this.listener.call(this.target);\n    return this.listener.apply(this.target, arguments);\n  }\n}\n\nfunction _onceWrap(target, type, listener) {\n  var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n  var wrapped = onceWrapper.bind(state);\n  wrapped.listener = listener;\n  state.wrapFn = wrapped;\n  return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n  checkListener(listener);\n  this.on(type, _onceWrap(this, type, listener));\n  return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n    function prependOnceListener(type, listener) {\n      checkListener(listener);\n      this.prependListener(type, _onceWrap(this, type, listener));\n      return this;\n    };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n    function removeListener(type, listener) {\n      var list, events, position, i, originalListener;\n\n      checkListener(listener);\n\n      events = this._events;\n      if (events === undefined)\n        return this;\n\n      list = events[type];\n      if (list === undefined)\n        return this;\n\n      if (list === listener || list.listener === listener) {\n        if (--this._eventsCount === 0)\n          this._events = Object.create(null);\n        else {\n          delete events[type];\n          if (events.removeListener)\n            this.emit('removeListener', type, list.listener || listener);\n        }\n      } else if (typeof list !== 'function') {\n        position = -1;\n\n        for (i = list.length - 1; i >= 0; i--) {\n          if (list[i] === listener || list[i].listener === listener) {\n            originalListener = list[i].listener;\n            position = i;\n            break;\n          }\n        }\n\n        if (position < 0)\n          return this;\n\n        if (position === 0)\n          list.shift();\n        else {\n          spliceOne(list, position);\n        }\n\n        if (list.length === 1)\n          events[type] = list[0];\n\n        if (events.removeListener !== undefined)\n          this.emit('removeListener', type, originalListener || listener);\n      }\n\n      return this;\n    };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n    function removeAllListeners(type) {\n      var listeners, events, i;\n\n      events = this._events;\n      if (events === undefined)\n        return this;\n\n      // not listening for removeListener, no need to emit\n      if (events.removeListener === undefined) {\n        if (arguments.length === 0) {\n          this._events = Object.create(null);\n          this._eventsCount = 0;\n        } else if (events[type] !== undefined) {\n          if (--this._eventsCount === 0)\n            this._events = Object.create(null);\n          else\n            delete events[type];\n        }\n        return this;\n      }\n\n      // emit removeListener for all listeners on all events\n      if (arguments.length === 0) {\n        var keys = Object.keys(events);\n        var key;\n        for (i = 0; i < keys.length; ++i) {\n          key = keys[i];\n          if (key === 'removeListener') continue;\n          this.removeAllListeners(key);\n        }\n        this.removeAllListeners('removeListener');\n        this._events = Object.create(null);\n        this._eventsCount = 0;\n        return this;\n      }\n\n      listeners = events[type];\n\n      if (typeof listeners === 'function') {\n        this.removeListener(type, listeners);\n      } else if (listeners !== undefined) {\n        // LIFO order\n        for (i = listeners.length - 1; i >= 0; i--) {\n          this.removeListener(type, listeners[i]);\n        }\n      }\n\n      return this;\n    };\n\nfunction _listeners(target, type, unwrap) {\n  var events = target._events;\n\n  if (events === undefined)\n    return [];\n\n  var evlistener = events[type];\n  if (evlistener === undefined)\n    return [];\n\n  if (typeof evlistener === 'function')\n    return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n  return unwrap ?\n    unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n  return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n  return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n  if (typeof emitter.listenerCount === 'function') {\n    return emitter.listenerCount(type);\n  } else {\n    return listenerCount.call(emitter, type);\n  }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n  var events = this._events;\n\n  if (events !== undefined) {\n    var evlistener = events[type];\n\n    if (typeof evlistener === 'function') {\n      return 1;\n    } else if (evlistener !== undefined) {\n      return evlistener.length;\n    }\n  }\n\n  return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n  return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n  var copy = new Array(n);\n  for (var i = 0; i < n; ++i)\n    copy[i] = arr[i];\n  return copy;\n}\n\nfunction spliceOne(list, index) {\n  for (; index + 1 < list.length; index++)\n    list[index] = list[index + 1];\n  list.pop();\n}\n\nfunction unwrapListeners(arr) {\n  var ret = new Array(arr.length);\n  for (var i = 0; i < ret.length; ++i) {\n    ret[i] = arr[i].listener || arr[i];\n  }\n  return ret;\n}\n\nfunction once(emitter, name) {\n  return new Promise(function (resolve, reject) {\n    function errorListener(err) {\n      emitter.removeListener(name, resolver);\n      reject(err);\n    }\n\n    function resolver() {\n      if (typeof emitter.removeListener === 'function') {\n        emitter.removeListener('error', errorListener);\n      }\n      resolve([].slice.call(arguments));\n    };\n\n    eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n    if (name !== 'error') {\n      addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n    }\n  });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n  if (typeof emitter.on === 'function') {\n    eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n  }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n  if (typeof emitter.on === 'function') {\n    if (flags.once) {\n      emitter.once(name, listener);\n    } else {\n      emitter.on(name, listener);\n    }\n  } else if (typeof emitter.addEventListener === 'function') {\n    // EventTarget does not have `error` event semantics like Node\n    // EventEmitters, we do not listen for `error` events here.\n    emitter.addEventListener(name, function wrapListener(arg) {\n      // IE does not have builtin `{ once: true }` support so we\n      // have to do it manually.\n      if (flags.once) {\n        emitter.removeEventListener(name, wrapListener);\n      }\n      listener(arg);\n    });\n  } else {\n    throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n  }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(\"./index.js\");\n",""],"names":["module","exports","require","MemoryCache","maxEntries","_classCallCheck","cache","Map","Math","pow","_createClass","key","value","get","cached","expiresAt","Date","now","undefined","set","ttl","size","keys","next","delete","flush","clear","_toConsumableArray","r","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","TypeError","a","_arrayLikeToArray","t","toString","call","slice","constructor","name","Array","from","test","Symbol","iterator","isArray","length","e","n","_readOnlyError","_typeof","o","prototype","_defineProperties","enumerable","configurable","writable","Object","defineProperty","_toPropertyKey","i","_toPrimitive","toPrimitive","String","Number","_callSuper","_getPrototypeOf","_possibleConstructorReturn","_isNativeReflectConstruct","Reflect","construct","apply","_assertThisInitialized","ReferenceError","Boolean","valueOf","setPrototypeOf","getPrototypeOf","bind","__proto__","_inherits","create","_setPrototypeOf","EventEmitter","Status","Semaphore","STATE","OPEN","CLOSED","HALF_OPEN","PENDING_CLOSE","SHUTDOWN","FALLBACK_FUNCTION","STATUS","NAME","GROUP","ENABLED","WARMING_UP","VOLUME_THRESHOLD","OUR_ERROR","RESET_TIMEOUT","WARMUP_TIMEOUT","LAST_TIMER_AT","deprecation","CircuitBreaker","_EventEmitter","action","_options$timeout","_options$resetTimeout","_options$errorThresho","_options$rollingCount","_options$rollingCount2","_options$cacheTTL","_options$cacheGetKey","_options$coalesceTTL","_options$coalesceRese","_this","options","arguments","timeout","resetTimeout","errorThresholdPercentage","rollingCountTimeout","rollingCountBuckets","rollingPercentilesEnabled","capacity","isInteger","MAX_SAFE_INTEGER","errorFilter","_","cacheTTL","cacheGetKey","_len","args","_key","JSON","stringify","enableSnapshots","rotateBucketController","coalesce","coalesceTTL","coalesceResetOn","filter","includes","cacheTransport","cacheSize","coalesceCache","coalesceSize","semaphore","autoRenewAbortController","abortController","AbortController","abort","volumeThreshold","allowWarmUp","status","stats","state","enabled","warmUp","closed","halfOpen","shutdown","nextName","group","timer","setTimeout","unref","Promise","resolve","maxFailures","console","error","increment","property","result","runTime","on","open","close","_startTimer","circuit","_halfOpen","_renewAbortControllerIfNeeded","emit","lastTimerAt","signal","aborted","clearTimeout","disable","removeAllListeners","clearCache","toJSON","opened","isShutdown","fallback","func","fb","fire","_len2","_key2","concat","context","_this2","err","buildError","reject","_len3","rest","_key3","then","cacheKey","cachedCall","pendingClose","timeoutError","latencyStartTime","latency","release","handleError","resetCoalesce","promise","latencyEndTime","healthCheck","interval","_this3","isNaN","check","setInterval","enable","startListeneningForRotateEvent","removeRotateBucketControllerListener","getSignal","getAbortController","isOurError","newStatus","_circuit$options","fail","fires","errorRate","failures","event","_circuit$options$coal","msg","code","Error","replace","c","random","v","count","resolvers","counter","sem","take","push","shift","ownKeys","getOwnPropertySymbols","getOwnPropertyDescriptor","_objectSpread","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","WINDOW","BUCKETS","TIMEOUT","PERCENTILES","BUCKET_INTERVAL","SNAPSHOT_INTERVAL","ROTATE_EVENT_NAME","rotateBucket","nextBucket","bucket","bucketInterval","floor","totals","reduce","acc","val","latencyTimes","sort","b","latencyMean","percentile","percentiles","calculatePercentile","latencyRunTime","isCircuitBreakerOpen","clearInterval","removeListener","listenerCount","window","pop","unshift","fallbacks","successes","rejects","timeouts","cacheHits","cacheMisses","coalesceCacheHits","coalesceCacheMisses","semaphoreRejections","arr","idx","ceil"],"sourceRoot":""}