construct-hub 0.4.303 → 0.4.304

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../../node_modules/shimmer/index.js", "../../../../node_modules/emitter-listener/listener.js", "../../../../node_modules/cls-hooked/context.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/logger.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/segments/attributes/captured_exception.js", "../../../../node_modules/atomic-batcher/index.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/daemon_config.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/segment_emitter.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/segments/attributes/trace_id.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/utils.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/segments/segment_utils.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/segments/attributes/remote_request_data.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/segments/attributes/subsegment.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/segments/segment.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/context_utils.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/middleware/incoming_request_data.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/middleware/sampling/local_reservoir.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/resources/default_sampling_rules.json", "../../../../node_modules/aws-xray-sdk-core/dist/lib/middleware/sampling/local_sampler.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/middleware/sampling/reservoir.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/middleware/sampling/sampling_rule.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/middleware/sampling/service_connector.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/middleware/sampling/rule_cache.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/middleware/sampling/rule_poller.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/middleware/sampling/target_poller.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/middleware/sampling/default_sampler.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/middleware/mw_utils.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/env/aws_lambda.js", "../../../../node_modules/aws-xray-sdk-core/package.json", "../../../../node_modules/aws-xray-sdk-core/dist/lib/segments/plugins/plugin.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/segments/plugins/ec2_plugin.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/segments/plugins/ecs_plugin.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/segments/plugins/elastic_beanstalk_plugin.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/resources/aws_whitelist.json", "../../../../node_modules/aws-xray-sdk-core/dist/lib/patchers/call_capturer.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/segments/attributes/aws.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/capture.js", "../../../../node_modules/semver/internal/constants.js", "../../../../node_modules/semver/internal/debug.js", "../../../../node_modules/semver/internal/re.js", "../../../../node_modules/semver/internal/parse-options.js", "../../../../node_modules/semver/internal/identifiers.js", "../../../../node_modules/semver/classes/semver.js", "../../../../node_modules/semver/functions/parse.js", "../../../../node_modules/semver/functions/valid.js", "../../../../node_modules/semver/functions/clean.js", "../../../../node_modules/semver/functions/inc.js", "../../../../node_modules/semver/functions/diff.js", "../../../../node_modules/semver/functions/major.js", "../../../../node_modules/semver/functions/minor.js", "../../../../node_modules/semver/functions/patch.js", "../../../../node_modules/semver/functions/prerelease.js", "../../../../node_modules/semver/functions/compare.js", "../../../../node_modules/semver/functions/rcompare.js", "../../../../node_modules/semver/functions/compare-loose.js", "../../../../node_modules/semver/functions/compare-build.js", "../../../../node_modules/semver/functions/sort.js", "../../../../node_modules/semver/functions/rsort.js", "../../../../node_modules/semver/functions/gt.js", "../../../../node_modules/semver/functions/lt.js", "../../../../node_modules/semver/functions/eq.js", "../../../../node_modules/semver/functions/neq.js", "../../../../node_modules/semver/functions/gte.js", "../../../../node_modules/semver/functions/lte.js", "../../../../node_modules/semver/functions/cmp.js", "../../../../node_modules/semver/functions/coerce.js", "../../../../node_modules/yallist/iterator.js", "../../../../node_modules/yallist/yallist.js", "../../../../node_modules/semver/node_modules/lru-cache/index.js", "../../../../node_modules/semver/classes/range.js", "../../../../node_modules/semver/classes/comparator.js", "../../../../node_modules/semver/functions/satisfies.js", "../../../../node_modules/semver/ranges/to-comparators.js", "../../../../node_modules/semver/ranges/max-satisfying.js", "../../../../node_modules/semver/ranges/min-satisfying.js", "../../../../node_modules/semver/ranges/min-version.js", "../../../../node_modules/semver/ranges/valid.js", "../../../../node_modules/semver/ranges/outside.js", "../../../../node_modules/semver/ranges/gtr.js", "../../../../node_modules/semver/ranges/ltr.js", "../../../../node_modules/semver/ranges/intersects.js", "../../../../node_modules/semver/ranges/simplify.js", "../../../../node_modules/semver/ranges/subset.js", "../../../../node_modules/semver/index.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/patchers/aws_p.js", "../../../../node_modules/@aws-sdk/service-error-classification/dist-cjs/constants.js", "../../../../node_modules/@aws-sdk/service-error-classification/dist-cjs/index.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/patchers/aws3_p.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/patchers/http_p.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/patchers/promise_p.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/database/sql_data.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/aws-xray.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/index.js", "../../../../src/backend/ingestion/re-ingest.lambda.ts", "../../../../src/backend/shared/aws.lambda-shared.ts", "../../../../src/backend/shared/language.ts", "../../../../src/backend/shared/constants.ts", "../../../../src/backend/shared/env.lambda-shared.ts", "../../../../src/backend/shared/integrity.lambda-shared.ts"],
4
- "sourcesContent": ["'use strict'\n\nfunction isFunction (funktion) {\n return typeof funktion === 'function'\n}\n\n// Default to complaining loudly when things don't go according to plan.\nvar logger = console.error.bind(console)\n\n// Sets a property on an object, preserving its enumerability.\n// This function assumes that the property is already writable.\nfunction defineProperty (obj, name, value) {\n var enumerable = !!obj[name] && obj.propertyIsEnumerable(name)\n Object.defineProperty(obj, name, {\n configurable: true,\n enumerable: enumerable,\n writable: true,\n value: value\n })\n}\n\n// Keep initialization idempotent.\nfunction shimmer (options) {\n if (options && options.logger) {\n if (!isFunction(options.logger)) logger(\"new logger isn't a function, not replacing\")\n else logger = options.logger\n }\n}\n\nfunction wrap (nodule, name, wrapper) {\n if (!nodule || !nodule[name]) {\n logger('no original function ' + name + ' to wrap')\n return\n }\n\n if (!wrapper) {\n logger('no wrapper function')\n logger((new Error()).stack)\n return\n }\n\n if (!isFunction(nodule[name]) || !isFunction(wrapper)) {\n logger('original object and wrapper must be functions')\n return\n }\n\n var original = nodule[name]\n var wrapped = wrapper(original, name)\n\n defineProperty(wrapped, '__original', original)\n defineProperty(wrapped, '__unwrap', function () {\n if (nodule[name] === wrapped) defineProperty(nodule, name, original)\n })\n defineProperty(wrapped, '__wrapped', true)\n\n defineProperty(nodule, name, wrapped)\n return wrapped\n}\n\nfunction massWrap (nodules, names, wrapper) {\n if (!nodules) {\n logger('must provide one or more modules to patch')\n logger((new Error()).stack)\n return\n } else if (!Array.isArray(nodules)) {\n nodules = [nodules]\n }\n\n if (!(names && Array.isArray(names))) {\n logger('must provide one or more functions to wrap on modules')\n return\n }\n\n nodules.forEach(function (nodule) {\n names.forEach(function (name) {\n wrap(nodule, name, wrapper)\n })\n })\n}\n\nfunction unwrap (nodule, name) {\n if (!nodule || !nodule[name]) {\n logger('no function to unwrap.')\n logger((new Error()).stack)\n return\n }\n\n if (!nodule[name].__unwrap) {\n logger('no original to unwrap to -- has ' + name + ' already been unwrapped?')\n } else {\n return nodule[name].__unwrap()\n }\n}\n\nfunction massUnwrap (nodules, names) {\n if (!nodules) {\n logger('must provide one or more modules to patch')\n logger((new Error()).stack)\n return\n } else if (!Array.isArray(nodules)) {\n nodules = [nodules]\n }\n\n if (!(names && Array.isArray(names))) {\n logger('must provide one or more functions to unwrap on modules')\n return\n }\n\n nodules.forEach(function (nodule) {\n names.forEach(function (name) {\n unwrap(nodule, name)\n })\n })\n}\n\nshimmer.wrap = wrap\nshimmer.massWrap = massWrap\nshimmer.unwrap = unwrap\nshimmer.massUnwrap = massUnwrap\n\nmodule.exports = shimmer\n", "'use strict';\n\nvar shimmer = require('shimmer');\nvar wrap = shimmer.wrap;\nvar unwrap = shimmer.unwrap;\n\n// Default to complaining loudly when things don't go according to plan.\n// dunderscores are boring\nvar SYMBOL = 'wrap@before';\n\n// Sets a property on an object, preserving its enumerability.\n// This function assumes that the property is already writable.\nfunction defineProperty(obj, name, value) {\n var enumerable = !!obj[name] && obj.propertyIsEnumerable(name);\n Object.defineProperty(obj, name, {\n configurable: true,\n enumerable: enumerable,\n writable: true,\n value: value\n });\n}\n\nfunction _process(self, listeners) {\n var l = listeners.length;\n for (var p = 0; p < l; p++) {\n var listener = listeners[p];\n // set up the listener so that onEmit can do whatever it needs\n var before = self[SYMBOL];\n if (typeof before === 'function') {\n before(listener);\n }\n else if (Array.isArray(before)) {\n var length = before.length;\n for (var i = 0; i < length; i++) before[i](listener);\n }\n }\n}\n\nfunction _listeners(self, event) {\n var listeners;\n listeners = self._events && self._events[event];\n if (!Array.isArray(listeners)) {\n if (listeners) {\n listeners = [listeners];\n }\n else {\n listeners = [];\n }\n }\n\n return listeners;\n}\n\nfunction _findAndProcess(self, event, before) {\n var after = _listeners(self, event);\n var unprocessed = after.filter(function(fn) { return before.indexOf(fn) === -1; });\n if (unprocessed.length > 0) _process(self, unprocessed);\n}\n\nfunction _wrap(unwrapped, visit) {\n if (!unwrapped) return;\n\n var wrapped = unwrapped;\n if (typeof unwrapped === 'function') {\n wrapped = visit(unwrapped);\n }\n else if (Array.isArray(unwrapped)) {\n wrapped = [];\n for (var i = 0; i < unwrapped.length; i++) {\n wrapped[i] = visit(unwrapped[i]);\n }\n }\n return wrapped;\n}\n\nmodule.exports = function wrapEmitter(emitter, onAddListener, onEmit) {\n if (!emitter || !emitter.on || !emitter.addListener ||\n !emitter.removeListener || !emitter.emit) {\n throw new Error(\"can only wrap real EEs\");\n }\n\n if (!onAddListener) throw new Error(\"must have function to run on listener addition\");\n if (!onEmit) throw new Error(\"must have function to wrap listeners when emitting\");\n\n /* Attach a context to a listener, and make sure that this hook stays\n * attached to the emitter forevermore.\n */\n function adding(on) {\n return function added(event, listener) {\n var existing = _listeners(this, event).slice();\n\n try {\n var returned = on.call(this, event, listener);\n _findAndProcess(this, event, existing);\n return returned;\n }\n finally {\n // old-style streaming overwrites .on and .addListener, so rewrap\n if (!this.on.__wrapped) wrap(this, 'on', adding);\n if (!this.addListener.__wrapped) wrap(this, 'addListener', adding);\n }\n };\n }\n\n function emitting(emit) {\n return function emitted(event) {\n if (!this._events || !this._events[event]) return emit.apply(this, arguments);\n\n var unwrapped = this._events[event];\n\n /* Ensure that if removeListener gets called, it's working with the\n * unwrapped listeners.\n */\n function remover(removeListener) {\n return function removed() {\n this._events[event] = unwrapped;\n try {\n return removeListener.apply(this, arguments);\n }\n finally {\n unwrapped = this._events[event];\n this._events[event] = _wrap(unwrapped, onEmit);\n }\n };\n }\n wrap(this, 'removeListener', remover);\n\n try {\n /* At emit time, ensure that whatever else is going on, removeListener will\n * still work while at the same time running whatever hooks are necessary to\n * make sure the listener is run in the correct context.\n */\n this._events[event] = _wrap(unwrapped, onEmit);\n return emit.apply(this, arguments);\n }\n finally {\n /* Ensure that regardless of what happens when preparing and running the\n * listeners, the status quo ante is restored before continuing.\n */\n unwrap(this, 'removeListener');\n this._events[event] = unwrapped;\n }\n };\n }\n\n // support multiple onAddListeners\n if (!emitter[SYMBOL]) {\n defineProperty(emitter, SYMBOL, onAddListener);\n }\n else if (typeof emitter[SYMBOL] === 'function') {\n defineProperty(emitter, SYMBOL, [emitter[SYMBOL], onAddListener]);\n }\n else if (Array.isArray(emitter[SYMBOL])) {\n emitter[SYMBOL].push(onAddListener);\n }\n\n // only wrap the core functions once\n if (!emitter.__wrapped) {\n wrap(emitter, 'addListener', adding);\n wrap(emitter, 'on', adding);\n wrap(emitter, 'emit', emitting);\n\n defineProperty(emitter, '__unwrap', function () {\n unwrap(emitter, 'addListener');\n unwrap(emitter, 'on');\n unwrap(emitter, 'emit');\n delete emitter[SYMBOL];\n delete emitter.__wrapped;\n });\n defineProperty(emitter, '__wrapped', true);\n }\n};\n", "/* eslint-disable max-len */\n'use strict';\n\nconst util = require('util');\nconst assert = require('assert');\nconst wrapEmitter = require('emitter-listener');\nconst async_hooks = require('async_hooks');\n\nconst CONTEXTS_SYMBOL = 'cls@contexts';\nconst ERROR_SYMBOL = 'error@context';\n\nconst DEBUG_CLS_HOOKED = process.env.DEBUG_CLS_HOOKED;\n\nlet currentUid = -1;\n\nmodule.exports = {\n getNamespace: getNamespace,\n createNamespace: createNamespace,\n destroyNamespace: destroyNamespace,\n reset: reset,\n ERROR_SYMBOL: ERROR_SYMBOL\n};\n\nfunction Namespace(name) {\n this.name = name;\n // changed in 2.7: no default context\n this.active = null;\n this._set = [];\n this.id = null;\n this._contexts = new Map();\n this._indent = 0;\n}\n\nNamespace.prototype.set = function set(key, value) {\n if (!this.active) {\n throw new Error('No context available. ns.run() or ns.bind() must be called first.');\n }\n\n this.active[key] = value;\n\n if (DEBUG_CLS_HOOKED) {\n const indentStr = ' '.repeat(this._indent < 0 ? 0 : this._indent);\n debug2(indentStr + 'CONTEXT-SET KEY:' + key + '=' + value + ' in ns:' + this.name + ' currentUid:' + currentUid + ' active:' + util.inspect(this.active, {showHidden:true, depth:2, colors:true}));\n }\n\n return value;\n};\n\nNamespace.prototype.get = function get(key) {\n if (!this.active) {\n if (DEBUG_CLS_HOOKED) {\n const asyncHooksCurrentId = async_hooks.currentId();\n const triggerId = async_hooks.triggerAsyncId();\n const indentStr = ' '.repeat(this._indent < 0 ? 0 : this._indent);\n //debug2(indentStr + 'CONTEXT-GETTING KEY NO ACTIVE NS:' + key + '=undefined' + ' (' + this.name + ') currentUid:' + currentUid + ' active:' + util.inspect(this.active, {showHidden:true, depth:2, colors:true}));\n debug2(`${indentStr}CONTEXT-GETTING KEY NO ACTIVE NS: (${this.name}) ${key}=undefined currentUid:${currentUid} asyncHooksCurrentId:${asyncHooksCurrentId} triggerId:${triggerId} len:${this._set.length}`);\n }\n return undefined;\n }\n if (DEBUG_CLS_HOOKED) {\n const asyncHooksCurrentId = async_hooks.executionAsyncId();\n const triggerId = async_hooks.triggerAsyncId();\n const indentStr = ' '.repeat(this._indent < 0 ? 0 : this._indent);\n debug2(indentStr + 'CONTEXT-GETTING KEY:' + key + '=' + this.active[key] + ' (' + this.name + ') currentUid:' + currentUid + ' active:' + util.inspect(this.active, {showHidden:true, depth:2, colors:true}));\n debug2(`${indentStr}CONTEXT-GETTING KEY: (${this.name}) ${key}=${this.active[key]} currentUid:${currentUid} asyncHooksCurrentId:${asyncHooksCurrentId} triggerId:${triggerId} len:${this._set.length} active:${util.inspect(this.active)}`);\n }\n return this.active[key];\n};\n\nNamespace.prototype.createContext = function createContext() {\n // Prototype inherit existing context if created a new child context within existing context.\n let context = Object.create(this.active ? this.active : Object.prototype);\n context._ns_name = this.name;\n context.id = currentUid;\n\n if (DEBUG_CLS_HOOKED) {\n const asyncHooksCurrentId = async_hooks.executionAsyncId();\n const triggerId = async_hooks.triggerAsyncId();\n const indentStr = ' '.repeat(this._indent < 0 ? 0 : this._indent);\n debug2(`${indentStr}CONTEXT-CREATED Context: (${this.name}) currentUid:${currentUid} asyncHooksCurrentId:${asyncHooksCurrentId} triggerId:${triggerId} len:${this._set.length} context:${util.inspect(context, {showHidden:true, depth:2, colors:true})}`);\n }\n\n return context;\n};\n\nNamespace.prototype.run = function run(fn) {\n let context = this.createContext();\n this.enter(context);\n\n try {\n if (DEBUG_CLS_HOOKED) {\n const triggerId = async_hooks.triggerAsyncId();\n const asyncHooksCurrentId = async_hooks.executionAsyncId();\n const indentStr = ' '.repeat(this._indent < 0 ? 0 : this._indent);\n debug2(`${indentStr}CONTEXT-RUN BEGIN: (${this.name}) currentUid:${currentUid} triggerId:${triggerId} asyncHooksCurrentId:${asyncHooksCurrentId} len:${this._set.length} context:${util.inspect(context)}`);\n }\n fn(context);\n return context;\n } catch (exception) {\n if (exception) {\n exception[ERROR_SYMBOL] = context;\n }\n throw exception;\n } finally {\n if (DEBUG_CLS_HOOKED) {\n const triggerId = async_hooks.triggerAsyncId();\n const asyncHooksCurrentId = async_hooks.executionAsyncId();\n const indentStr = ' '.repeat(this._indent < 0 ? 0 : this._indent);\n debug2(`${indentStr}CONTEXT-RUN END: (${this.name}) currentUid:${currentUid} triggerId:${triggerId} asyncHooksCurrentId:${asyncHooksCurrentId} len:${this._set.length} ${util.inspect(context)}`);\n }\n this.exit(context);\n }\n};\n\nNamespace.prototype.runAndReturn = function runAndReturn(fn) {\n let value;\n this.run(function (context) {\n value = fn(context);\n });\n return value;\n};\n\n/**\n * Uses global Promise and assumes Promise is cls friendly or wrapped already.\n * @param {function} fn\n * @returns {*}\n */\nNamespace.prototype.runPromise = function runPromise(fn) {\n let context = this.createContext();\n this.enter(context);\n\n let promise = fn(context);\n if (!promise || !promise.then || !promise.catch) {\n throw new Error('fn must return a promise.');\n }\n\n if (DEBUG_CLS_HOOKED) {\n debug2('CONTEXT-runPromise BEFORE: (' + this.name + ') currentUid:' + currentUid + ' len:' + this._set.length + ' ' + util.inspect(context));\n }\n\n return promise\n .then(result => {\n if (DEBUG_CLS_HOOKED) {\n debug2('CONTEXT-runPromise AFTER then: (' + this.name + ') currentUid:' + currentUid + ' len:' + this._set.length + ' ' + util.inspect(context));\n }\n this.exit(context);\n return result;\n })\n .catch(err => {\n err[ERROR_SYMBOL] = context;\n if (DEBUG_CLS_HOOKED) {\n debug2('CONTEXT-runPromise AFTER catch: (' + this.name + ') currentUid:' + currentUid + ' len:' + this._set.length + ' ' + util.inspect(context));\n }\n this.exit(context);\n throw err;\n });\n};\n\nNamespace.prototype.bind = function bindFactory(fn, context) {\n if (!context) {\n if (!this.active) {\n context = this.createContext();\n } else {\n context = this.active;\n }\n }\n\n let self = this;\n return function clsBind() {\n self.enter(context);\n try {\n return fn.apply(this, arguments);\n } catch (exception) {\n if (exception) {\n exception[ERROR_SYMBOL] = context;\n }\n throw exception;\n } finally {\n self.exit(context);\n }\n };\n};\n\nNamespace.prototype.enter = function enter(context) {\n assert.ok(context, 'context must be provided for entering');\n if (DEBUG_CLS_HOOKED) {\n const asyncHooksCurrentId = async_hooks.executionAsyncId();\n const triggerId = async_hooks.triggerAsyncId();\n const indentStr = ' '.repeat(this._indent < 0 ? 0 : this._indent);\n debug2(`${indentStr}CONTEXT-ENTER: (${this.name}) currentUid:${currentUid} triggerId:${triggerId} asyncHooksCurrentId:${asyncHooksCurrentId} len:${this._set.length} ${util.inspect(context)}`);\n }\n\n this._set.push(this.active);\n this.active = context;\n};\n\nNamespace.prototype.exit = function exit(context) {\n assert.ok(context, 'context must be provided for exiting');\n if (DEBUG_CLS_HOOKED) {\n const asyncHooksCurrentId = async_hooks.executionAsyncId();\n const triggerId = async_hooks.triggerAsyncId();\n const indentStr = ' '.repeat(this._indent < 0 ? 0 : this._indent);\n debug2(`${indentStr}CONTEXT-EXIT: (${this.name}) currentUid:${currentUid} triggerId:${triggerId} asyncHooksCurrentId:${asyncHooksCurrentId} len:${this._set.length} ${util.inspect(context)}`);\n }\n\n // Fast path for most exits that are at the top of the stack\n if (this.active === context) {\n assert.ok(this._set.length, 'can\\'t remove top context');\n this.active = this._set.pop();\n return;\n }\n\n // Fast search in the stack using lastIndexOf\n let index = this._set.lastIndexOf(context);\n\n if (index < 0) {\n if (DEBUG_CLS_HOOKED) {\n debug2('??ERROR?? context exiting but not entered - ignoring: ' + util.inspect(context));\n }\n assert.ok(index >= 0, 'context not currently entered; can\\'t exit. \\n' + util.inspect(this) + '\\n' + util.inspect(context));\n } else {\n assert.ok(index, 'can\\'t remove top context');\n this._set.splice(index, 1);\n }\n};\n\nNamespace.prototype.bindEmitter = function bindEmitter(emitter) {\n assert.ok(emitter.on && emitter.addListener && emitter.emit, 'can only bind real EEs');\n\n let namespace = this;\n let thisSymbol = 'context@' + this.name;\n\n // Capture the context active at the time the emitter is bound.\n function attach(listener) {\n if (!listener) {\n return;\n }\n if (!listener[CONTEXTS_SYMBOL]) {\n listener[CONTEXTS_SYMBOL] = Object.create(null);\n }\n\n listener[CONTEXTS_SYMBOL][thisSymbol] = {\n namespace: namespace,\n context: namespace.active\n };\n }\n\n // At emit time, bind the listener within the correct context.\n function bind(unwrapped) {\n if (!(unwrapped && unwrapped[CONTEXTS_SYMBOL])) {\n return unwrapped;\n }\n\n let wrapped = unwrapped;\n let unwrappedContexts = unwrapped[CONTEXTS_SYMBOL];\n Object.keys(unwrappedContexts).forEach(function (name) {\n let thunk = unwrappedContexts[name];\n wrapped = thunk.namespace.bind(wrapped, thunk.context);\n });\n return wrapped;\n }\n\n wrapEmitter(emitter, attach, bind);\n};\n\n/**\n * If an error comes out of a namespace, it will have a context attached to it.\n * This function knows how to find it.\n *\n * @param {Error} exception Possibly annotated error.\n */\nNamespace.prototype.fromException = function fromException(exception) {\n return exception[ERROR_SYMBOL];\n};\n\nfunction getNamespace(name) {\n return process.namespaces[name];\n}\n\nfunction createNamespace(name) {\n assert.ok(name, 'namespace must be given a name.');\n\n if (DEBUG_CLS_HOOKED) {\n debug2(`NS-CREATING NAMESPACE (${name})`);\n }\n let namespace = new Namespace(name);\n namespace.id = currentUid;\n\n const hook = async_hooks.createHook({\n init(asyncId, type, triggerId, resource) {\n currentUid = async_hooks.executionAsyncId();\n\n //CHAIN Parent's Context onto child if none exists. This is needed to pass net-events.spec\n // let initContext = namespace.active;\n // if(!initContext && triggerId) {\n // let parentContext = namespace._contexts.get(triggerId);\n // if (parentContext) {\n // namespace.active = parentContext;\n // namespace._contexts.set(currentUid, parentContext);\n // if (DEBUG_CLS_HOOKED) {\n // const indentStr = ' '.repeat(namespace._indent < 0 ? 0 : namespace._indent);\n // debug2(`${indentStr}INIT [${type}] (${name}) WITH PARENT CONTEXT asyncId:${asyncId} currentUid:${currentUid} triggerId:${triggerId} active:${util.inspect(namespace.active, true)} resource:${resource}`);\n // }\n // } else if (DEBUG_CLS_HOOKED) {\n // const indentStr = ' '.repeat(namespace._indent < 0 ? 0 : namespace._indent);\n // debug2(`${indentStr}INIT [${type}] (${name}) MISSING CONTEXT asyncId:${asyncId} currentUid:${currentUid} triggerId:${triggerId} active:${util.inspect(namespace.active, true)} resource:${resource}`);\n // }\n // }else {\n // namespace._contexts.set(currentUid, namespace.active);\n // if (DEBUG_CLS_HOOKED) {\n // const indentStr = ' '.repeat(namespace._indent < 0 ? 0 : namespace._indent);\n // debug2(`${indentStr}INIT [${type}] (${name}) asyncId:${asyncId} currentUid:${currentUid} triggerId:${triggerId} active:${util.inspect(namespace.active, true)} resource:${resource}`);\n // }\n // }\n if(namespace.active) {\n namespace._contexts.set(asyncId, namespace.active);\n\n if (DEBUG_CLS_HOOKED) {\n const indentStr = ' '.repeat(namespace._indent < 0 ? 0 : namespace._indent);\n debug2(`${indentStr}INIT [${type}] (${name}) asyncId:${asyncId} currentUid:${currentUid} triggerId:${triggerId} active:${util.inspect(namespace.active, {showHidden:true, depth:2, colors:true})} resource:${resource}`);\n }\n }else if(currentUid === 0){\n // CurrentId will be 0 when triggered from C++. Promise events\n // https://github.com/nodejs/node/blob/master/doc/api/async_hooks.md#triggerid\n const triggerId = async_hooks.triggerAsyncId();\n const triggerIdContext = namespace._contexts.get(triggerId);\n if (triggerIdContext) {\n namespace._contexts.set(asyncId, triggerIdContext);\n if (DEBUG_CLS_HOOKED) {\n const indentStr = ' '.repeat(namespace._indent < 0 ? 0 : namespace._indent);\n debug2(`${indentStr}INIT USING CONTEXT FROM TRIGGERID [${type}] (${name}) asyncId:${asyncId} currentUid:${currentUid} triggerId:${triggerId} active:${util.inspect(namespace.active, { showHidden: true, depth: 2, colors: true })} resource:${resource}`);\n }\n } else if (DEBUG_CLS_HOOKED) {\n const indentStr = ' '.repeat(namespace._indent < 0 ? 0 : namespace._indent);\n debug2(`${indentStr}INIT MISSING CONTEXT [${type}] (${name}) asyncId:${asyncId} currentUid:${currentUid} triggerId:${triggerId} active:${util.inspect(namespace.active, { showHidden: true, depth: 2, colors: true })} resource:${resource}`);\n }\n }\n\n\n if(DEBUG_CLS_HOOKED && type === 'PROMISE'){\n debug2(util.inspect(resource, {showHidden: true}));\n const parentId = resource.parentId;\n const indentStr = ' '.repeat(namespace._indent < 0 ? 0 : namespace._indent);\n debug2(`${indentStr}INIT RESOURCE-PROMISE [${type}] (${name}) parentId:${parentId} asyncId:${asyncId} currentUid:${currentUid} triggerId:${triggerId} active:${util.inspect(namespace.active, {showHidden:true, depth:2, colors:true})} resource:${resource}`);\n }\n\n },\n before(asyncId) {\n currentUid = async_hooks.executionAsyncId();\n let context;\n\n /*\n if(currentUid === 0){\n // CurrentId will be 0 when triggered from C++. Promise events\n // https://github.com/nodejs/node/blob/master/doc/api/async_hooks.md#triggerid\n //const triggerId = async_hooks.triggerAsyncId();\n context = namespace._contexts.get(asyncId); // || namespace._contexts.get(triggerId);\n }else{\n context = namespace._contexts.get(currentUid);\n }\n */\n\n //HACK to work with promises until they are fixed in node > 8.1.1\n context = namespace._contexts.get(asyncId) || namespace._contexts.get(currentUid);\n\n if (context) {\n if (DEBUG_CLS_HOOKED) {\n const triggerId = async_hooks.triggerAsyncId();\n const indentStr = ' '.repeat(namespace._indent < 0 ? 0 : namespace._indent);\n debug2(`${indentStr}BEFORE (${name}) asyncId:${asyncId} currentUid:${currentUid} triggerId:${triggerId} active:${util.inspect(namespace.active, {showHidden:true, depth:2, colors:true})} context:${util.inspect(context)}`);\n namespace._indent += 2;\n }\n\n namespace.enter(context);\n\n } else if (DEBUG_CLS_HOOKED) {\n const triggerId = async_hooks.triggerAsyncId();\n const indentStr = ' '.repeat(namespace._indent < 0 ? 0 : namespace._indent);\n debug2(`${indentStr}BEFORE MISSING CONTEXT (${name}) asyncId:${asyncId} currentUid:${currentUid} triggerId:${triggerId} active:${util.inspect(namespace.active, {showHidden:true, depth:2, colors:true})} namespace._contexts:${util.inspect(namespace._contexts, {showHidden:true, depth:2, colors:true})}`);\n namespace._indent += 2;\n }\n },\n after(asyncId) {\n currentUid = async_hooks.executionAsyncId();\n let context; // = namespace._contexts.get(currentUid);\n /*\n if(currentUid === 0){\n // CurrentId will be 0 when triggered from C++. Promise events\n // https://github.com/nodejs/node/blob/master/doc/api/async_hooks.md#triggerid\n //const triggerId = async_hooks.triggerAsyncId();\n context = namespace._contexts.get(asyncId); // || namespace._contexts.get(triggerId);\n }else{\n context = namespace._contexts.get(currentUid);\n }\n */\n //HACK to work with promises until they are fixed in node > 8.1.1\n context = namespace._contexts.get(asyncId) || namespace._contexts.get(currentUid);\n\n if (context) {\n if (DEBUG_CLS_HOOKED) {\n const triggerId = async_hooks.triggerAsyncId();\n namespace._indent -= 2;\n const indentStr = ' '.repeat(namespace._indent < 0 ? 0 : namespace._indent);\n debug2(`${indentStr}AFTER (${name}) asyncId:${asyncId} currentUid:${currentUid} triggerId:${triggerId} active:${util.inspect(namespace.active, {showHidden:true, depth:2, colors:true})} context:${util.inspect(context)}`);\n }\n\n namespace.exit(context);\n\n } else if (DEBUG_CLS_HOOKED) {\n const triggerId = async_hooks.triggerAsyncId();\n namespace._indent -= 2;\n const indentStr = ' '.repeat(namespace._indent < 0 ? 0 : namespace._indent);\n debug2(`${indentStr}AFTER MISSING CONTEXT (${name}) asyncId:${asyncId} currentUid:${currentUid} triggerId:${triggerId} active:${util.inspect(namespace.active, {showHidden:true, depth:2, colors:true})} context:${util.inspect(context)}`);\n }\n },\n destroy(asyncId) {\n currentUid = async_hooks.executionAsyncId();\n if (DEBUG_CLS_HOOKED) {\n const triggerId = async_hooks.triggerAsyncId();\n const indentStr = ' '.repeat(namespace._indent < 0 ? 0 : namespace._indent);\n debug2(`${indentStr}DESTROY (${name}) currentUid:${currentUid} asyncId:${asyncId} triggerId:${triggerId} active:${util.inspect(namespace.active, {showHidden:true, depth:2, colors:true})} context:${util.inspect(namespace._contexts.get(currentUid))}`);\n }\n\n namespace._contexts.delete(asyncId);\n }\n });\n\n hook.enable();\n\n process.namespaces[name] = namespace;\n return namespace;\n}\n\nfunction destroyNamespace(name) {\n let namespace = getNamespace(name);\n\n assert.ok(namespace, 'can\\'t delete nonexistent namespace! \"' + name + '\"');\n assert.ok(namespace.id, 'don\\'t assign to process.namespaces directly! ' + util.inspect(namespace));\n\n process.namespaces[name] = null;\n}\n\nfunction reset() {\n // must unregister async listeners\n if (process.namespaces) {\n Object.keys(process.namespaces).forEach(function (name) {\n destroyNamespace(name);\n });\n }\n process.namespaces = Object.create(null);\n}\n\nprocess.namespaces = {};\n\n//const fs = require('fs');\nfunction debug2(...args) {\n if (DEBUG_CLS_HOOKED) {\n //fs.writeSync(1, `${util.format(...args)}\\n`);\n process._rawDebug(`${util.format(...args)}`);\n }\n}\n\n/*function getFunctionName(fn) {\n if (!fn) {\n return fn;\n }\n if (typeof fn === 'function') {\n if (fn.name) {\n return fn.name;\n }\n return (fn.toString().trim().match(/^function\\s*([^\\s(]+)/) || [])[1];\n } else if (fn.constructor && fn.constructor.name) {\n return fn.constructor.name;\n }\n}*/\n\n\n", "\"use strict\";\nvar validLogLevels = ['debug', 'info', 'warn', 'error', 'silent'];\nvar defaultLogLevel = validLogLevels.indexOf('error');\nvar logLevel = calculateLogLevel(process.env.AWS_XRAY_DEBUG_MODE ? 'debug' : process.env.AWS_XRAY_LOG_LEVEL);\nvar logger = {\n error: createLoggerForLevel('error'),\n info: createLoggerForLevel('info'),\n warn: createLoggerForLevel('warn'),\n debug: createLoggerForLevel('debug'),\n};\nfunction createLoggerForLevel(level) {\n var loggerLevel = validLogLevels.indexOf(level);\n var consoleMethod = console[level] || console.log || (() => { });\n if (loggerLevel >= logLevel) {\n return (message, meta) => {\n if (message || meta) {\n consoleMethod(formatLogMessage(level, message, meta));\n }\n };\n }\n else {\n return () => { };\n }\n}\nfunction calculateLogLevel(level) {\n if (level) {\n var normalisedLevel = level.toLowerCase();\n var index = validLogLevels.indexOf(normalisedLevel);\n return index >= 0 ? index : defaultLogLevel;\n }\n // Silently ignore invalid log levels, default to default level\n return defaultLogLevel;\n}\nfunction createTimestamp(date) {\n var tzo = -date.getTimezoneOffset(), // Negate to make this tzo = local - UTC\n dif = tzo >= 0 ? '+' : '-', pad = function (num) {\n var norm = Math.floor(Math.abs(num));\n return (norm < 10 ? '0' : '') + norm;\n };\n return new Date(date.getTime() + (tzo * 60 * 1000)).toISOString()\n .replace(/T/, ' ')\n .replace(/Z/, ' ') +\n dif + pad(tzo / 60) +\n ':' + pad(tzo % 60);\n}\nfunction isLambdaFunction() {\n return process.env.LAMBDA_TASK_ROOT !== undefined;\n}\nfunction formatLogMessage(level, message, meta) {\n var messageParts = [];\n if (!isLambdaFunction()) {\n messageParts.push(createTimestamp(new Date()));\n messageParts.push(`[${level.toUpperCase()}]`);\n }\n if (message) {\n messageParts.push(message);\n }\n var logString = messageParts.join(' ');\n var metaDataString = formatMetaData(meta);\n return [logString, metaDataString].filter(str => str.length > 0).join('\\n ');\n}\nfunction formatMetaData(meta) {\n if (!meta) {\n return '';\n }\n return ((typeof (meta) === 'string') ? meta : JSON.stringify(meta));\n}\nvar logging = {\n setLogger: function setLogger(logObj) {\n logger = logObj;\n },\n getLogger: function getLogger() {\n return logger;\n }\n};\nmodule.exports = logging;\n", "\"use strict\";\nconst crypto = require('crypto');\n/**\n * Represents a captured exception.\n * @constructor\n * @param {Exception} err - The exception to capture.\n * @param {boolean} [remote] - Flag for whether the error was remote.\n */\nfunction CapturedException(err, remote) {\n this.init(err, remote);\n}\nCapturedException.prototype.init = function init(err, remote) {\n var e = (typeof err === 'string' || err instanceof String) ? { message: err, name: '' } : err;\n this.message = e.message;\n this.type = e.name;\n this.stack = [];\n this.remote = !!remote;\n this.id = crypto.randomBytes(8).toString('hex');\n if (e.stack) {\n var stack = e.stack.split('\\n');\n stack.shift();\n stack.forEach((stackline) => {\n var line = stackline.trim().replace(/\\(|\\)/g, '');\n line = line.substring(line.indexOf(' ') + 1);\n var label = line.lastIndexOf(' ') >= 0 ? line.slice(0, line.lastIndexOf(' ')) : null;\n var path = Array.isArray(label) && !label.length ? line : line.slice(line.lastIndexOf(' ') + 1);\n path = path.split(':');\n var entry = {\n path: path[0],\n line: parseInt(path[1]),\n label: label || 'anonymous'\n };\n this.stack.push(entry);\n }, this);\n }\n};\nmodule.exports = CapturedException;\n", "module.exports = batcher\n\nfunction batcher (run) {\n var running = false\n var pendingBatch = null\n var pendingCallbacks = null\n var callbacks = null\n\n return append\n\n function done (err) {\n if (callbacks) callAll(callbacks, err)\n\n running = false\n callbacks = pendingCallbacks\n var nextBatch = pendingBatch\n\n pendingBatch = null\n pendingCallbacks = null\n\n if (!nextBatch || !nextBatch.length) {\n if (!callbacks || !callbacks.length) {\n callbacks = null\n return\n }\n if (!nextBatch) nextBatch = []\n }\n\n running = true\n run(nextBatch, done)\n }\n\n function append (val, cb) {\n if (running) {\n if (!pendingBatch) {\n pendingBatch = []\n pendingCallbacks = []\n }\n pushAll(pendingBatch, val)\n if (cb) pendingCallbacks.push(cb)\n } else {\n if (cb) callbacks = [cb]\n running = true\n run(Array.isArray(val) ? val : [val], done)\n }\n }\n}\n\nfunction pushAll (list, val) {\n if (Array.isArray(val)) pushArray(list, val)\n else list.push(val)\n}\n\nfunction pushArray (list, val) {\n for (var i = 0; i < val.length; i++) list.push(val[i])\n}\n\nfunction callAll (list, err) {\n for (var i = 0; i < list.length; i++) list[i](err)\n}\n", "\"use strict\";\nvar logger = require('./logger');\n/**\n * A module representing the X-Ray daemon configuration including the udp and tcp addresses.\n * @module DaemonConfig\n */\nvar DaemonConfig = {\n udp_ip: '127.0.0.1',\n udp_port: 2000,\n tcp_ip: '127.0.0.1',\n tcp_port: 2000,\n setDaemonAddress: function setDaemonAddress(address) {\n if (!process.env.AWS_XRAY_DAEMON_ADDRESS) {\n processAddress(address);\n logger.getLogger().info('Configured daemon address to ' + address + '.');\n }\n else {\n logger.getLogger().warn('Ignoring call to setDaemonAddress as AWS_XRAY_DAEMON_ADDRESS is set. ' +\n 'The current daemon address will not be changed.');\n }\n }\n};\nvar processAddress = function processAddress(address) {\n if (address.indexOf(':') === -1) {\n throw new Error('Invalid Daemon Address. You must specify an ip and port.');\n }\n else {\n var splitAddress = address.split(' ');\n if (splitAddress.length === 1) {\n // in format of 127.0.0.1:2000\n if (address.indexOf('udp') > -1 || address.indexOf('tcp') > -1) {\n throw new Error('Invalid Daemon Address. You must specify both tcp and udp addresses.');\n }\n var addr = address.split(':');\n if (!addr[0]) {\n throw new Error('Invalid Daemon Address. You must specify an ip.');\n }\n DaemonConfig.udp_ip = addr[0];\n DaemonConfig.tcp_ip = addr[0];\n DaemonConfig.udp_port = addr[1];\n DaemonConfig.tcp_port = addr[1];\n }\n else if (splitAddress.length === 2) {\n // in format of udp:127.0.0.1:2000 tcp:127.0.0.1:2001\n var part_1 = splitAddress[0].split(':');\n var part_2 = splitAddress[1].split(':');\n var addr_map = {};\n addr_map[part_1[0]] = part_1;\n addr_map[part_2[0]] = part_2;\n DaemonConfig.udp_ip = addr_map['udp'][1];\n DaemonConfig.udp_port = parseInt(addr_map['udp'][2]);\n DaemonConfig.tcp_ip = addr_map['tcp'][1];\n DaemonConfig.tcp_port = parseInt(addr_map['tcp'][2]);\n if (!DaemonConfig.udp_port || !DaemonConfig.tcp_port) {\n throw new Error('Invalid Daemon Address. You must specify port number.');\n }\n }\n }\n};\nif (process.env.AWS_XRAY_DAEMON_ADDRESS) {\n processAddress(process.env.AWS_XRAY_DAEMON_ADDRESS);\n}\nmodule.exports = DaemonConfig;\n", "\"use strict\";\nvar dgram = require('dgram');\nvar batcher = require('atomic-batcher');\nvar logger = require('./logger');\nvar PROTOCOL_HEADER = '{\"format\":\"json\",\"version\":1}';\nvar PROTOCOL_DELIMITER = '\\n';\n/**\n * Sends a collection of data over a UDP socket. This method\n * is designed to be used by `atomic-batcher` as a way to share\n * a single UDP socket for sending multiple data blocks.\n *\n * @param {object} ops - Details of the data to send\n * @param {Function} callback - The function to call when done\n */\nfunction batchSendData(ops, callback) {\n var client = dgram.createSocket('udp4');\n executeSendData(client, ops, 0, function () {\n try {\n client.close();\n }\n finally {\n callback();\n }\n });\n}\n/**\n * Execute sending data starting at the specified index and\n * using the provided client.\n *\n * @param {Socket} client - Socket to send data with\n * @param {object} ops - Details of data to send\n * @param {number} index - Starting index for sending\n * @param {Function} callback - Function to call when done\n */\nfunction executeSendData(client, ops, index, callback) {\n if (index >= ops.length) {\n callback();\n return;\n }\n sendMessage(client, ops[index], function () {\n executeSendData(client, ops, index + 1, callback);\n });\n}\n/**\n * Send a single message over a UDP socket.\n *\n * @param {Socket} client - Socket to send data with\n * @param {object} data - Details of the data to send\n * @param {Function} batchCallback - Function to call when done\n */\nfunction sendMessage(client, data, batchCallback) {\n var msg = data.msg;\n var offset = data.offset;\n var length = data.length;\n var port = data.port;\n var address = data.address;\n var callback = data.callback;\n client.send(msg, offset, length, port, address, function (err) {\n try {\n callback(err);\n }\n finally {\n batchCallback();\n }\n });\n}\n/**\n * Class to mimic the Socket interface for a UDP client, but to provided\n * batching of outgoing sends using temporary Sockets that are created and\n * destroyed as needed.\n */\nfunction BatchingTemporarySocket() {\n this.batchSend = batcher(batchSendData);\n}\n/**\n * Provide the same signature as the Socket.send method but the work will be\n * batched to share temporary UDP sockets whenever possible.\n */\nBatchingTemporarySocket.prototype.send = function (msg, offset, length, port, address, callback) {\n var work = {\n msg: msg,\n offset: offset,\n length: length,\n port: port,\n address: address,\n callback: callback\n };\n this.batchSend(work);\n};\n/**\n * Segment emitter module.\n * @module SegmentEmitter\n */\nvar SegmentEmitter = {\n daemonConfig: require('./daemon_config'),\n /**\n * Returns the formatted segment JSON string.\n */\n format: function format(segment) {\n return PROTOCOL_HEADER + PROTOCOL_DELIMITER + segment.toString();\n },\n /**\n * Creates a UDP socket connection and send the formatted segment.\n * @param {Segment} segment - The segment to send to the daemon.\n */\n send: function send(segment) {\n if (!this.socket) {\n if (this.useBatchingTemporarySocket) {\n this.socket = new BatchingTemporarySocket();\n }\n else {\n this.socket = dgram.createSocket('udp4').unref();\n }\n }\n var client = this.socket;\n var formatted = segment.format();\n var data = PROTOCOL_HEADER + PROTOCOL_DELIMITER + formatted;\n var message = Buffer.from(data);\n var short = '{\"trace_id:\"' + segment.trace_id + '\",\"id\":\"' + segment.id + '\"}';\n var type = segment.type === 'subsegment' ? 'Subsegment' : 'Segment';\n client.send(message, 0, message.length, this.daemonConfig.udp_port, this.daemonConfig.udp_ip, function (err) {\n if (err) {\n if (err.code === 'EMSGSIZE') {\n logger.getLogger().error(type + ' too large to send: ' + short + ' (' + message.length + ' bytes).');\n }\n else {\n logger.getLogger().error('Error occured sending segment: ', err);\n }\n }\n else {\n logger.getLogger().debug(type + ' sent: {\"trace_id:\"' + segment.trace_id + '\",\"id\":\"' + segment.id + '\"}');\n logger.getLogger().debug('UDP message sent: ' + segment);\n }\n });\n },\n /**\n * Configures the address and/or port the daemon is expected to be on.\n * @param {string} address - Address of the daemon the segments should be sent to. Should be formatted as an IPv4 address.\n * @module SegmentEmitter\n * @function setDaemonAddress\n */\n setDaemonAddress: function setDaemonAddress(address) {\n this.daemonConfig.setDaemonAddress(address);\n },\n /**\n * Get the UDP IP the emitter is configured to.\n * @module SegmentEmitter\n * @function getIp\n */\n getIp: function getIp() {\n return this.daemonConfig.udp_ip;\n },\n /**\n * Get the UDP port the emitter is configured to.\n * @module SegmentEmitter\n * @function getPort\n */\n getPort: function getPort() {\n return this.daemonConfig.udp_port;\n },\n /**\n * Forces the segment emitter to create a new socket on send, and close it on complete.\n * @module SegmentEmitter\n * @function disableReusableSocket\n */\n disableReusableSocket: function () {\n this.useBatchingTemporarySocket = true;\n }\n};\nmodule.exports = SegmentEmitter;\n", "\"use strict\";\nvar crypto = require('crypto');\nvar logger = require('../../logger');\n/**\n * Class describing an AWS X-Ray trace ID.\n * @see https://docs.aws.amazon.com/xray/latest/devguide/xray-concepts.html#xray-concepts-traces\n */\nclass TraceID {\n /**\n * Constructs a new trace ID using the current time.\n * @param {string} [tsHex] - time stamp to use for trace ID in hexadecimal format\n * @param {string} [numberhex] - string of hexadecimal characters for random portion of Trace ID\n * @constructor\n */\n constructor(tsHex, numberhex) {\n this.version = 1;\n this.timestamp = tsHex || Math.round(new Date().getTime() / 1000).toString(16);\n this.id = numberhex || crypto.randomBytes(12).toString('hex');\n }\n /**\n * @returns {TraceID} - a hardcoded trace ID using zeroed timestamp and random ID\n */\n static Invalid() {\n return new TraceID('00000000', '000000000000000000000000');\n }\n /**\n * Constructs a new trace ID from provided string. If no string is provided or the provided string is invalid,\n * log an error but a new trace ID still returned. This can be used as a trace ID string validator.\n * @param {string} [rawID] - string to create a Trace ID object from.\n */\n static FromString(rawID) {\n const DELIMITER = '-';\n var traceID = new TraceID();\n var version, timestamp;\n if (!rawID || typeof rawID !== 'string') {\n logger.getLogger().error('Empty or non-string trace ID provided');\n return traceID;\n }\n const parts = rawID.trim().split(DELIMITER);\n if (parts.length !== 3) {\n logger.getLogger().error('Unrecognized trace ID format');\n return traceID;\n }\n version = parseInt(parts[0]);\n if (isNaN(version) || version < 1) {\n logger.getLogger().error('Trace ID version must be positive integer');\n return traceID;\n }\n timestamp = parseInt(parts[1], 16).toString(16);\n if (timestamp === 'NaN') {\n logger.getLogger().error('Trace ID timestamp must be a hex-encoded value');\n return traceID;\n }\n traceID.version = version;\n traceID.timestamp = timestamp;\n traceID.id = parts[2];\n return traceID;\n }\n /**\n * Returns a string representation of the trace ID.\n * @returns {string} - stringified trace ID, e.g. 1-57fbe041-2c7ad569f5d6ff149137be86\n */\n toString() {\n return `${this.version.toString()}-${this.timestamp}-${this.id}`;\n }\n}\nmodule.exports = TraceID;\n", "\"use strict\";\n/**\n * @module utils\n */\nvar crypto = require('crypto');\nvar logger = require('./logger');\nvar TraceID = require('./segments/attributes/trace_id');\nvar utils = {\n /**\n * Checks a HTTP response code, where 4xx are 'error' and 5xx are 'fault'.\n * @param {string} status - the HTTP response status code.\n * @returns [string] - 'error', 'fault' or nothing on no match\n * @alias module:utils.getCauseTypeFromHttpStatus\n */\n getCauseTypeFromHttpStatus: function getCauseTypeFromHttpStatus(status) {\n var stat = status.toString();\n if (stat.match(/^[4][0-9]{2}$/) !== null) {\n return 'error';\n }\n else if (stat.match(/^[5][0-9]{2}$/) !== null) {\n return 'fault';\n }\n },\n /**\n * Removes the query string parameters from a given http request path\n * as it may contain sensitive information\n *\n * Related issue: https://github.com/aws/aws-xray-sdk-node/issues/246\n *\n * Node documentation: https://nodejs.org/api/http.html#http_http_request_url_options_callback\n *\n * @param {string} path - options.path in a http.request callback\n * @returns [string] - removes query string element from path\n * @alias module:utils.stripQueryStringFromPath\n */\n stripQueryStringFromPath: function stripQueryStringFromPath(path) {\n return path ? path.split('?')[0] : '';\n },\n /**\n * Performs a case-insensitive wildcard match against two strings. This method works with pseduo-regex chars; specifically ? and * are supported.\n * An asterisk (*) represents any combination of characters\n * A question mark (?) represents any single character\n *\n * @param {string} pattern - the regex-like pattern to be compared against.\n * @param {string} text - the string to compare against the pattern.\n * @returns boolean\n * @alias module:utils.wildcardMatch\n */\n wildcardMatch: function wildcardMatch(pattern, text) {\n if (pattern === undefined || text === undefined) {\n return false;\n }\n if (pattern.length === 1 && pattern.charAt(0) === '*') {\n return true;\n }\n var patternLength = pattern.length;\n var textLength = text.length;\n var indexOfGlob = pattern.indexOf('*');\n pattern = pattern.toLowerCase();\n text = text.toLowerCase();\n // Infix globs are relatively rare, and the below search is expensive especially when\n // Balsa is used a lot. Check for infix globs and, in their absence, do the simple thing\n if (indexOfGlob === -1 || indexOfGlob === (patternLength - 1)) {\n var match = function simpleWildcardMatch() {\n var j = 0;\n for (var i = 0; i < patternLength; i++) {\n var patternChar = pattern.charAt(i);\n if (patternChar === '*') {\n // Presumption for this method is that globs only occur at end\n return true;\n }\n else if (patternChar === '?') {\n if (j === textLength) {\n return false;\n } // No character to match\n j++;\n }\n else {\n if (j >= textLength || patternChar != text.charAt(j)) {\n return false;\n }\n j++;\n }\n }\n // Ate up all the pattern and didn't end at a glob, so a match will have consumed all\n // the text\n return j === textLength;\n };\n return match();\n }\n /*\n * The matchArray[i] is used to record if there is a match between the first i chars in =\n * text and the first j chars in pattern.\n * So will return matchArray[textLength+1] in the end\n * Loop from the beginning of the pattern\n * case not '*': if text[i]==pattern[j] or pattern[j] is '?', and matchArray[i] is true,\n * set matchArray[i+1] to true, otherwise false\n * case '*': since '*' can match any globing, as long as there is a true in matchArray before i\n * all the matchArray[i+1], matchArray[i+2],...,matchArray[textLength] could be true\n */\n var matchArray = [];\n matchArray[0] = true;\n for (var j = 0; j < patternLength; j++) {\n var i;\n var patternChar = pattern.charAt(j);\n if (patternChar != '*') {\n for (i = textLength - 1; i >= 0; i--) {\n matchArray[i + 1] = !!matchArray[i] && (patternChar === '?' || (patternChar === text.charAt(i)));\n }\n }\n else {\n i = 0;\n while (i <= textLength && !matchArray[i]) {\n i++;\n }\n for (i; i <= textLength; i++) {\n matchArray[i] = true;\n }\n }\n matchArray[0] = (matchArray[0] && patternChar === '*');\n }\n return matchArray[textLength];\n },\n LambdaUtils: {\n validTraceData: function (xAmznTraceId) {\n var valid = false;\n if (xAmznTraceId) {\n var data = utils.processTraceData(xAmznTraceId);\n valid = !!(data && data.root && data.parent && data.sampled);\n }\n return valid;\n },\n /**\n * Populates trace ID, parent ID, and sampled decision of given segment. Will always populate valid values,\n * even if xAmznTraceId contains missing or invalid values. This ensures downstream services receive valid\n * headers.\n * @param {Segment} segment - Facade segment to be populated\n * @param {String} xAmznTraceId - Raw Trace Header to supply trace data\n * @returns {Boolean} - true if required fields are present and Trace ID is valid, false otherwise\n */\n populateTraceData: function (segment, xAmznTraceId) {\n logger.getLogger().debug('Lambda trace data found: ' + xAmznTraceId);\n let traceData = utils.processTraceData(xAmznTraceId);\n var valid = false;\n if (!traceData) {\n traceData = {};\n logger.getLogger().error('_X_AMZN_TRACE_ID is empty or has an invalid format');\n }\n else if (!traceData.root || !traceData.parent || !traceData.sampled) {\n logger.getLogger().error('_X_AMZN_TRACE_ID is missing required information');\n }\n else {\n valid = true;\n }\n segment.trace_id = TraceID.FromString(traceData.root).toString(); // Will always assign valid trace_id\n segment.id = traceData.parent || crypto.randomBytes(8).toString('hex');\n if (traceData.root && segment.trace_id !== traceData.root) {\n logger.getLogger().error('_X_AMZN_TRACE_ID contains invalid trace ID');\n valid = false;\n }\n if (!parseInt(traceData.sampled)) {\n segment.notTraced = true;\n }\n else {\n delete segment.notTraced;\n }\n if (traceData.data) {\n segment.userData = traceData.data;\n }\n logger.getLogger().debug('Segment started: ' + JSON.stringify(traceData));\n return valid;\n }\n },\n /**\n * Splits out the data from the trace id format. Used by the middleware.\n * @param {String} traceData - The additional trace data (typically in req.headers.x-amzn-trace-id).\n * @returns {object}\n * @alias module:mw_utils.processTraceData\n */\n processTraceData: function processTraceData(traceData) {\n var amznTraceData = {};\n var data = {};\n var reservedKeywords = ['root', 'parent', 'sampled', 'self'];\n var remainingBytes = 256;\n if (!(typeof traceData === 'string' && traceData)) {\n return amznTraceData;\n }\n traceData.split(';').forEach(function (header) {\n if (!header) {\n return;\n }\n var pair = header.split('=');\n if (pair[0] && pair[1]) {\n let key = pair[0].trim();\n let value = pair[1].trim();\n let lowerCaseKey = key.toLowerCase();\n let reserved = reservedKeywords.indexOf(lowerCaseKey) !== -1;\n if (reserved) {\n amznTraceData[lowerCaseKey] = value;\n }\n else if (!reserved && remainingBytes - (lowerCaseKey.length + value.length) >= 0) {\n data[key] = value;\n remainingBytes -= (key.length + value.length);\n }\n }\n });\n amznTraceData['data'] = data;\n return amznTraceData;\n },\n /**\n * Makes a shallow copy of an object without given keys - keeps prototype\n * @param {Object} obj - The object to copy\n * @param {string[]} [keys=[]] - The keys that won't be copied\n * @param {boolean} [preservePrototype=false] - If true also copy prototype properties\n * @returns {}\n */\n objectWithoutProperties: function objectWithoutProperties(obj, keys, preservePrototype) {\n keys = Array.isArray(keys) ? keys : [];\n preservePrototype = typeof preservePrototype === 'boolean' ? preservePrototype : false;\n var target = preservePrototype ? Object.create(Object.getPrototypeOf(obj)) : {};\n for (var property in obj) {\n if (keys.indexOf(property) >= 0) {\n continue;\n }\n if (!Object.prototype.hasOwnProperty.call(obj, property)) {\n continue;\n }\n target[property] = obj[property];\n }\n return target;\n },\n /**\n * Safely gets an integer from a string or number\n * @param {String | Number} - input to cast to integer\n * @returns {Number} - Integer representation of input, or 0 if input is not castable to int\n */\n safeParseInt: (val) => {\n if (!val || isNaN(val)) {\n return 0;\n }\n return parseInt(val);\n }\n};\nmodule.exports = utils;\n", "\"use strict\";\nconst { safeParseInt } = require('../utils');\nvar logger = require('../logger');\nvar DEFAULT_STREAMING_THRESHOLD = 100;\nvar utils = {\n streamingThreshold: DEFAULT_STREAMING_THRESHOLD,\n getCurrentTime: function getCurrentTime() {\n return Date.now() / 1000;\n },\n setOrigin: function setOrigin(origin) {\n this.origin = origin;\n },\n setPluginData: function setPluginData(pluginData) {\n this.pluginData = pluginData;\n },\n setSDKData: function setSDKData(sdkData) {\n this.sdkData = sdkData;\n },\n setServiceData: function setServiceData(serviceData) {\n this.serviceData = serviceData;\n },\n /**\n * Overrides the default streaming threshold (100).\n * The threshold represents the maximum number of subsegments on a single segment before\n * the SDK beings to send the completed subsegments out of band of the main segment.\n * Reduce this threshold if you see the 'Segment too large to send' error.\n * @param {number} threshold - The new threshold to use.\n * @memberof AWSXRay\n */\n setStreamingThreshold: function setStreamingThreshold(threshold) {\n if (isFinite(threshold) && threshold >= 0) {\n utils.streamingThreshold = threshold;\n logger.getLogger().debug('Subsegment streaming threshold set to: ' + threshold);\n }\n else {\n logger.getLogger().error('Invalid threshold: ' + threshold + '. Must be a whole number >= 0.');\n }\n },\n getStreamingThreshold: function getStreamingThreshold() {\n return utils.streamingThreshold;\n },\n /**\n * Parses an HTTP response object to return an X-Ray compliant HTTP response object.\n * @param {http.ServerResponse} res\n * @returns {Object} - X-Ray response object to be added to (sub)segment\n */\n getHttpResponseData: (res) => {\n const ret = {};\n if (!res) {\n return ret;\n }\n const status = safeParseInt(res.statusCode);\n if (status !== 0) {\n ret.status = status;\n }\n if (res.headers && res.headers['content-length']) {\n ret.content_length = safeParseInt(res.headers['content-length']);\n }\n return ret;\n }\n};\nmodule.exports = utils;\n", "\"use strict\";\nconst { getHttpResponseData } = require('../segment_utils');\nvar { stripQueryStringFromPath } = require('../../utils');\n/**\n * Represents an outgoing HTTP/HTTPS call.\n * @constructor\n * @param {http.ClientRequest|https.ClientRequest} req - The request object from the HTTP/HTTPS call.\n * @param {http.IncomingMessage|https.IncomingMessage} res - The response object from the HTTP/HTTPS call.\n * @param {boolean} downstreamXRayEnabled - when true, adds a \"traced\": true hint to generated subsegments such that the AWS X-Ray service expects a corresponding segment from the downstream service.\n */\nfunction RemoteRequestData(req, res, downstreamXRayEnabled) {\n this.init(req, res, downstreamXRayEnabled);\n}\nRemoteRequestData.prototype.init = function init(req, res, downstreamXRayEnabled) {\n this.request = {\n url: (req.agent && req.agent.protocol) ? (req.agent.protocol + '//' + (req.host || req.getHeader('host')) + stripQueryStringFromPath(req.path)) : '',\n method: req.method || '',\n };\n if (downstreamXRayEnabled) {\n this.request.traced = true;\n }\n if (res) {\n this.response = getHttpResponseData(res);\n }\n};\nmodule.exports = RemoteRequestData;\n", "\"use strict\";\nvar crypto = require('crypto');\nvar CapturedException = require('./captured_exception');\nvar RemoteRequestData = require('./remote_request_data');\nvar SegmentEmitter = require('../../segment_emitter');\nvar SegmentUtils = require('../segment_utils');\nvar Utils = require('../../utils');\nvar logger = require('../../logger');\n/**\n * Represents a subsegment.\n * @constructor\n * @param {string} name - The name of the subsegment.\n */\nfunction Subsegment(name) {\n this.init(name);\n}\nSubsegment.prototype.init = function init(name) {\n if (typeof name != 'string') {\n throw new Error('Subsegment name must be of type string.');\n }\n this.id = crypto.randomBytes(8).toString('hex');\n this.name = name;\n this.start_time = SegmentUtils.getCurrentTime();\n this.in_progress = true;\n this.counter = 0;\n this.notTraced = false;\n};\n/**\n * Nests a new subsegment to the array of subsegments.\n * @param {string} name - The name of the new subsegment to append.\n * @returns {Subsegment} - The newly created subsegment.\n */\nSubsegment.prototype.addNewSubsegment = function addNewSubsegment(name) {\n const subsegment = new Subsegment(name);\n this.addSubsegment(subsegment);\n return subsegment;\n};\nSubsegment.prototype.addSubsegmentWithoutSampling = function addSubsegmentWithoutSampling(subsegment) {\n this.addSubsegment(subsegment);\n subsegment.notTraced = true;\n};\nSubsegment.prototype.addNewSubsegmentWithoutSampling = function addNewSubsegmentWithoutSampling(name) {\n const subsegment = new Subsegment(name);\n this.addSubsegment(subsegment);\n subsegment.notTraced = true;\n return subsegment;\n};\n/**\n * Adds a subsegment to the array of subsegments.\n * @param {Subsegment} subsegment - The subsegment to append.\n */\nSubsegment.prototype.addSubsegment = function (subsegment) {\n if (!(subsegment instanceof Subsegment)) {\n throw new Error('Failed to add subsegment:' + subsegment + ' to subsegment \"' + this.name +\n '\". Not a subsegment.');\n }\n if (this.subsegments === undefined) {\n this.subsegments = [];\n }\n subsegment.segment = this.segment;\n subsegment.parent = this;\n subsegment.notTraced = subsegment.parent.notTraced;\n if (subsegment.end_time === undefined) {\n this.incrementCounter(subsegment.counter);\n }\n this.subsegments.push(subsegment);\n};\n/**\n * Removes the subsegment from the subsegments array, used in subsegment streaming.\n */\nSubsegment.prototype.removeSubsegment = function removeSubsegment(subsegment) {\n if (!(subsegment instanceof Subsegment)) {\n throw new Error('Failed to remove subsegment:' + subsegment + ' from subsegment \"' + this.name +\n '\". Not a subsegment.');\n }\n if (this.subsegments !== undefined) {\n var index = this.subsegments.indexOf(subsegment);\n if (index >= 0) {\n this.subsegments.splice(index, 1);\n }\n }\n};\n/**\n * Adds a property with associated data into the subsegment.\n * @param {string} name - The name of the property to add.\n * @param {Object} data - The data of the property to add.\n */\nSubsegment.prototype.addAttribute = function addAttribute(name, data) {\n this[name] = data;\n};\n/**\n * Adds a subsegement id to record ordering.\n * @param {string} id - A subsegment id.\n */\nSubsegment.prototype.addPrecursorId = function (id) {\n if (typeof id !== 'string') {\n logger.getLogger().error('Failed to add id:' + id + ' to subsegment ' + this.name +\n '. Precursor Ids must be of type string.');\n }\n if (this.precursor_ids === undefined) {\n this.precursor_ids = [];\n }\n this.precursor_ids.push(id);\n};\n/**\n * Adds a key-value pair that can be queryable through GetTraceSummaries.\n * Only acceptable types are string, float/int and boolean.\n * @param {string} key - The name of key to add.\n * @param {boolean|string|number} value - The value to add for the given key.\n */\nSubsegment.prototype.addAnnotation = function (key, value) {\n if (typeof value !== 'boolean' && typeof value !== 'string' && !isFinite(value)) {\n logger.getLogger().error('Failed to add annotation key: ' + key + ' value: ' + value + ' to subsegment ' +\n this.name + '. Value must be of type string, number or boolean.');\n return;\n }\n if (typeof key !== 'string') {\n logger.getLogger().error('Failed to add annotation key: ' + key + ' value: ' + value + ' to subsegment ' +\n this.name + '. Key must be of type string.');\n return;\n }\n if (this.annotations === undefined) {\n this.annotations = {};\n }\n this.annotations[key] = value;\n};\n/**\n * Adds a key-value pair to the metadata.default attribute when no namespace is given.\n * Metadata is not queryable, but is recorded.\n * @param {string} key - The name of the key to add.\n * @param {object|null} value - The value of the associated key.\n * @param {string} [namespace] - The property name to put the key/value pair under.\n */\nSubsegment.prototype.addMetadata = function (key, value, namespace) {\n if (typeof key !== 'string') {\n logger.getLogger().error('Failed to add metadata key: ' + key + ' value: ' + value + ' to subsegment ' +\n this.name + '. Key must be of type string.');\n return;\n }\n if (namespace && typeof namespace !== 'string') {\n logger.getLogger().error('Failed to add metadata key: ' + key + ' value: ' + value + ' to subsegment ' +\n this.name + '. Namespace must be of type string.');\n return;\n }\n var ns = namespace || 'default';\n if (!this.metadata) {\n this.metadata = {};\n }\n if (!this.metadata[ns]) {\n this.metadata[ns] = {};\n }\n if (ns !== '__proto__') {\n this.metadata[ns][key] = value !== null && value !== undefined ? value : '';\n }\n};\nSubsegment.prototype.addSqlData = function addSqlData(sqlData) {\n this.sql = sqlData;\n};\n/**\n * Adds an error with associated data into the subsegment.\n * To handle propagating errors, the subsegment also sets a copy of the error on the\n * root segment. As the error passes up the execution stack, a reference is created\n * on each subsegment to the originating subsegment.\n * @param {Error|string} err - The error to capture.\n * @param {boolean} [remote] - Flag for whether the exception caught was remote or not.\n */\nSubsegment.prototype.addError = function addError(err, remote) {\n if (err == null || typeof err !== 'object' && typeof (err) !== 'string') {\n logger.getLogger().error('Failed to add error:' + err + ' to subsegment \"' + this.name +\n '\". Not an object or string literal.');\n return;\n }\n this.addFaultFlag();\n if (this.segment && this.segment.exception) {\n if (err === this.segment.exception.ex) {\n this.fault = true;\n this.cause = { id: this.segment.exception.cause, exceptions: [] };\n return;\n }\n delete this.segment.exception;\n }\n if (this.segment) {\n this.segment.exception = {\n ex: err,\n cause: this.id\n };\n }\n else {\n //error, cannot propagate exception if not added to segment\n }\n if (this.cause === undefined) {\n this.cause = {\n working_directory: process.cwd(),\n exceptions: []\n };\n }\n this.cause.exceptions.unshift(new CapturedException(err, remote));\n};\n/**\n * Adds data for an outgoing HTTP/HTTPS call.\n * @param {http.ClientRequest/https.ClientRequest} req - The request object from the HTTP/HTTPS call.\n * @param {http.IncomingMessage/https.IncomingMessage} res - The response object from the HTTP/HTTPS call.\n * @param {boolean} downstreamXRayEnabled - when true, adds a \"traced\": true hint to generated subsegments such that the AWS X-Ray service expects a corresponding segment from the downstream service.\n */\nSubsegment.prototype.addRemoteRequestData = function addRemoteRequestData(req, res, downstreamXRayEnabled) {\n this.http = new RemoteRequestData(req, res, downstreamXRayEnabled);\n if ('traced' in this.http.request) {\n this.traced = this.http.request.traced;\n delete this.http.request.traced;\n }\n};\n/**\n * Adds fault flag to the subsegment.\n */\nSubsegment.prototype.addFaultFlag = function addFaultFlag() {\n this.fault = true;\n};\n/**\n * Adds error flag to the subsegment.\n */\nSubsegment.prototype.addErrorFlag = function addErrorFlag() {\n this.error = true;\n};\n/**\n * Adds throttle flag to the subsegment.\n */\nSubsegment.prototype.addThrottleFlag = function addThrottleFlag() {\n this.throttle = true;\n};\n/**\n * Closes the current subsegment. This automatically captures any exceptions and sets the end time.\n * @param {Error|string} [err] - The error to capture.\n * @param {boolean} [remote] - Flag for whether the exception caught was remote or not.\n */\nSubsegment.prototype.close = function close(err, remote) {\n var root = this.segment;\n this.end_time = SegmentUtils.getCurrentTime();\n delete this.in_progress;\n if (err) {\n this.addError(err, remote);\n }\n if (this.parent) {\n this.parent.decrementCounter();\n }\n if (root && root.counter > SegmentUtils.getStreamingThreshold()) {\n if (this.streamSubsegments() && this.parent) {\n this.parent.removeSubsegment(this);\n }\n }\n};\n/**\n * Each subsegment holds a counter of open subsegments. This increments\n * the counter such that it can be called from a child and propagate up.\n * @param {Number} [additional] - An additional amount to increment. Used when adding subsegment trees.\n */\nSubsegment.prototype.incrementCounter = function incrementCounter(additional) {\n this.counter = additional ? this.counter + additional + 1 : this.counter + 1;\n if (this.parent) {\n this.parent.incrementCounter(additional);\n }\n};\n/**\n * Each subsegment holds a counter of its open subsegments. This decrements\n * the counter such that it can be called from a child and propagate up.\n */\nSubsegment.prototype.decrementCounter = function decrementCounter() {\n this.counter--;\n if (this.parent) {\n this.parent.decrementCounter();\n }\n};\n/**\n * Returns a boolean indicating whether or not the subsegment has been closed.\n * @returns {boolean} - Returns true if the subsegment is closed.\n */\nSubsegment.prototype.isClosed = function isClosed() {\n return !this.in_progress;\n};\n/**\n * Sends the subsegment to the daemon.\n */\nSubsegment.prototype.flush = function flush() {\n if (!this.parent || !this.segment) {\n logger.getLogger().error('Failed to flush subsegment: ' + this.name + '. Subsegment must be added ' +\n 'to a segment chain to flush.');\n return;\n }\n if (this.segment.trace_id) {\n if (this.segment.notTraced !== true && !this.notTraced) {\n SegmentEmitter.send(this);\n }\n else {\n logger.getLogger().debug('Ignoring flush on subsegment ' + this.id + '. Associated segment is marked as not sampled.');\n }\n }\n else {\n logger.getLogger().debug('Ignoring flush on subsegment ' + this.id + '. Associated segment is missing a trace ID.');\n }\n};\n/**\n * Returns true if the subsegment was streamed in its entirety\n */\nSubsegment.prototype.streamSubsegments = function streamSubsegments() {\n if (this.isClosed() && this.counter <= 0) {\n this.flush();\n return true;\n }\n else if (this.subsegments && this.subsegments.length > 0) {\n var open = [];\n this.subsegments.forEach(function (child) {\n if (!child.streamSubsegments()) {\n open.push(child);\n }\n });\n this.subsegments = open;\n }\n};\n/**\n * Returns the formatted, trimmed subsegment JSON string to send to the daemon.\n */\nSubsegment.prototype.format = function format() {\n this.type = 'subsegment';\n if (this.parent) {\n this.parent_id = this.parent.id;\n }\n if (this.segment) {\n this.trace_id = this.segment.trace_id;\n }\n return JSON.stringify(this);\n};\n/**\n * Returns the formatted subsegment JSON string.\n */\nSubsegment.prototype.toString = function toString() {\n return JSON.stringify(this);\n};\nSubsegment.prototype.toJSON = function toJSON() {\n var ignore = ['segment', 'parent', 'counter'];\n if (this.subsegments == null || this.subsegments.length === 0) {\n ignore.push('subsegments');\n }\n var thisCopy = Utils.objectWithoutProperties(this, ignore, false);\n return thisCopy;\n};\nmodule.exports = Subsegment;\n", "\"use strict\";\nvar crypto = require('crypto');\nvar CapturedException = require('./attributes/captured_exception');\nvar SegmentEmitter = require('../segment_emitter');\nvar SegmentUtils = require('./segment_utils');\nvar Subsegment = require('./attributes/subsegment');\nvar TraceID = require('./attributes/trace_id');\nvar Utils = require('../utils');\nvar logger = require('../logger');\n/**\n * Represents a segment.\n * @constructor\n * @param {string} name - The name of the subsegment.\n * @param {string} [rootId] - The trace ID of the spawning parent, included in the 'X-Amzn-Trace-Id' header of the incoming request. If one is not supplied, it will be generated.\n * @param {string} [parentId] - The sub/segment ID of the spawning parent, included in the 'X-Amzn-Trace-Id' header of the incoming request.\n */\nfunction Segment(name, rootId, parentId) {\n this.init(name, rootId, parentId);\n}\nSegment.prototype.init = function init(name, rootId, parentId) {\n if (typeof name != 'string') {\n throw new Error('Segment name must be of type string.');\n }\n // Validate the Trace ID\n var traceId;\n if (rootId && typeof rootId == 'string') {\n traceId = TraceID.FromString(rootId);\n }\n else {\n traceId = new TraceID();\n }\n var id = crypto.randomBytes(8).toString('hex');\n var startTime = SegmentUtils.getCurrentTime();\n this.trace_id = traceId.toString();\n this.id = id;\n this.start_time = startTime;\n this.name = name || '';\n this.in_progress = true;\n this.counter = 0;\n if (parentId) {\n this.parent_id = parentId;\n }\n if (SegmentUtils.serviceData) {\n this.setServiceData(SegmentUtils.serviceData);\n }\n if (SegmentUtils.pluginData) {\n this.addPluginData(SegmentUtils.pluginData);\n }\n if (SegmentUtils.origin) {\n this.origin = SegmentUtils.origin;\n }\n if (SegmentUtils.sdkData) {\n this.setSDKData(SegmentUtils.sdkData);\n }\n};\n/**\n * Adds incoming request data to the http block of the segment.\n * @param {IncomingRequestData} data - The data of the property to add.\n */\nSegment.prototype.addIncomingRequestData = function addIncomingRequestData(data) {\n this.http = data;\n};\n/**\n * Adds a key-value pair that can be queryable through GetTraceSummaries.\n * Only acceptable types are string, float/int and boolean.\n * @param {string} key - The name of key to add.\n * @param {boolean|string|number} value - The value to add for the given key.\n */\nSegment.prototype.addAnnotation = function addAnnotation(key, value) {\n if (typeof value !== 'boolean' && typeof value !== 'string' && !isFinite(value)) {\n logger.getLogger().error('Failed to add annotation key: ' + key + ' value: ' + value + ' to subsegment ' +\n this.name + '. Value must be of type string, number or boolean.');\n return;\n }\n if (typeof key !== 'string') {\n logger.getLogger().error('Failed to add annotation key: ' + key + ' value: ' + value + ' to subsegment ' +\n this.name + '. Key must be of type string.');\n return;\n }\n if (this.annotations === undefined) {\n this.annotations = {};\n }\n this.annotations[key] = value;\n};\n/**\n * Adds a User ID that can be queried from the X-Ray console. User ID\n * must be a string.\n * @param {string} user - The ID of the user corresponding to this segment\n */\nSegment.prototype.setUser = function (user) {\n if (typeof user !== 'string') {\n logger.getLogger().error('Set user: ' + user + ' failed. User IDs must be of type string.');\n }\n this.user = user;\n};\n/**\n * Adds a key-value pair to the metadata.default attribute when no namespace is given.\n * Metadata is not queryable, but is recorded.\n * @param {string} key - The name of the key to add.\n * @param {object|null} value - The value of the associated key.\n * @param {string} [namespace] - The property name to put the key/value pair under.\n */\nSegment.prototype.addMetadata = function (key, value, namespace) {\n if (typeof key !== 'string') {\n logger.getLogger().error('Failed to add metadata key: ' + key + ' value: ' + value + ' to segment ' +\n this.name + '. Key must be of type string.');\n return;\n }\n if (namespace && typeof namespace !== 'string') {\n logger.getLogger().error('Failed to add metadata key: ' + key + ' value: ' + value + ' to segment ' +\n this.name + '. Namespace must be of type string.');\n return;\n }\n var ns = namespace || 'default';\n if (!this.metadata) {\n this.metadata = {};\n }\n if (!this.metadata[ns]) {\n this.metadata[ns] = {};\n }\n if (ns !== '__proto__') {\n this.metadata[ns][key] = value !== null && value !== undefined ? value : '';\n }\n};\n/**\n * Adds data about the AWS X-Ray SDK onto the segment.\n * @param {Object} data - Object that contains the version of the SDK, and other information.\n */\nSegment.prototype.setSDKData = function setSDKData(data) {\n if (!data) {\n logger.getLogger().error('Add SDK data: ' + data + ' failed.' +\n 'Must not be empty.');\n return;\n }\n if (!this.aws) {\n this.aws = {};\n }\n this.aws.xray = data;\n};\nSegment.prototype.setMatchedSamplingRule = function setMatchedSamplingRule(ruleName) {\n if (this.aws) {\n this.aws = JSON.parse(JSON.stringify(this.aws));\n }\n if (this.aws && this.aws['xray']) {\n this.aws.xray['rule_name'] = ruleName;\n }\n else {\n this.aws = { xray: { 'rule_name': ruleName } };\n }\n};\n/**\n * Adds data about the service into the segment.\n * @param {Object} data - Object that contains the version of the application, and other information.\n */\nSegment.prototype.setServiceData = function setServiceData(data) {\n if (!data) {\n logger.getLogger().error('Add service data: ' + data + ' failed.' +\n 'Must not be empty.');\n return;\n }\n this.service = data;\n};\n/**\n * Adds a service with associated version data into the segment.\n * @param {Object} data - The associated AWS data.\n */\nSegment.prototype.addPluginData = function addPluginData(data) {\n if (this.aws === undefined) {\n this.aws = {};\n }\n Object.assign(this.aws, data);\n};\n/**\n * Adds a new subsegment to the array of subsegments.\n * @param {string} name - The name of the new subsegment to append.\n */\nSegment.prototype.addNewSubsegment = function addNewSubsegment(name) {\n var subsegment = new Subsegment(name);\n this.addSubsegment(subsegment);\n return subsegment;\n};\nSegment.prototype.addSubsegmentWithoutSampling = function addSubsegmentWithoutSampling(subsegment) {\n this.addSubsegment(subsegment);\n subsegment.notTraced = true;\n};\nSegment.prototype.addNewSubsegmentWithoutSampling = function addNewSubsegmentWithoutSampling(name) {\n const subsegment = new Subsegment(name);\n this.addSubsegment(subsegment);\n subsegment.notTraced = true;\n return subsegment;\n};\n/**\n * Adds a subsegment to the array of subsegments.\n * @param {Subsegment} subsegment - The subsegment to append.\n */\nSegment.prototype.addSubsegment = function addSubsegment(subsegment) {\n if (!(subsegment instanceof Subsegment)) {\n throw new Error('Cannot add subsegment: ' + subsegment + '. Not a subsegment.');\n }\n if (this.subsegments === undefined) {\n this.subsegments = [];\n }\n subsegment.segment = this;\n subsegment.parent = this;\n subsegment.notTraced = subsegment.parent.notTraced;\n this.subsegments.push(subsegment);\n if (!subsegment.end_time) {\n this.incrementCounter(subsegment.counter);\n }\n};\n/**\n * Removes the subsegment from the subsegments array, used in subsegment streaming.\n */\nSegment.prototype.removeSubsegment = function removeSubsegment(subsegment) {\n if (!(subsegment instanceof Subsegment)) {\n throw new Error('Failed to remove subsegment:' + subsegment + ' from subsegment \"' + this.name +\n '\". Not a subsegment.');\n }\n if (this.subsegments !== undefined) {\n var index = this.subsegments.indexOf(subsegment);\n if (index >= 0) {\n this.subsegments.splice(index, 1);\n }\n }\n};\n/**\n * Adds error data into the segment.\n * @param {Error|string} err - The error to capture.\n * @param {boolean} [remote] - Flag for whether the exception caught was remote or not.\n */\nSegment.prototype.addError = function addError(err, remote) {\n if (err == null || typeof err !== 'object' && typeof (err) !== 'string') {\n logger.getLogger().error('Failed to add error:' + err + ' to subsegment \"' + this.name +\n '\". Not an object or string literal.');\n return;\n }\n this.addFaultFlag();\n if (this.exception) {\n if (err === this.exception.ex) {\n this.cause = { id: this.exception.cause };\n delete this.exception;\n return;\n }\n delete this.exception;\n }\n if (this.cause === undefined) {\n this.cause = {\n working_directory: process.cwd(),\n exceptions: []\n };\n }\n this.cause.exceptions.push(new CapturedException(err, remote));\n};\n/**\n * Adds fault flag to the subsegment.\n */\nSegment.prototype.addFaultFlag = function addFaultFlag() {\n this.fault = true;\n};\n/**\n * Adds error flag to the subsegment.\n */\nSegment.prototype.addErrorFlag = function addErrorFlag() {\n this.error = true;\n};\n/**\n * Adds throttle flag to the subsegment.\n */\nSegment.prototype.addThrottleFlag = function addThrottleFlag() {\n this.throttle = true;\n};\n/**\n * Returns a boolean indicating whether or not the segment has been closed.\n * @returns {boolean} - Returns true if the subsegment is closed.\n */\nSegment.prototype.isClosed = function isClosed() {\n return !this.in_progress;\n};\n/**\n * Each segment holds a counter of open subsegments. This increments the counter.\n * @param {Number} [additional] - An additional amount to increment. Used when adding subsegment trees.\n */\nSegment.prototype.incrementCounter = function incrementCounter(additional) {\n this.counter = additional ? this.counter + additional + 1 : this.counter + 1;\n if (this.counter > SegmentUtils.streamingThreshold && this.subsegments && this.subsegments.length > 0) {\n var open = [];\n this.subsegments.forEach(function (child) {\n if (!child.streamSubsegments()) {\n open.push(child);\n }\n });\n this.subsegments = open;\n }\n};\n/**\n * Each segment holds a counter of open subsegments. This decrements\n * the counter such that it can be called from a child and propagate up.\n */\nSegment.prototype.decrementCounter = function decrementCounter() {\n this.counter--;\n if (this.counter <= 0 && this.isClosed()) {\n this.flush();\n }\n};\n/**\n * Closes the current segment. This automatically sets the end time.\n * @param {Error|string} [err] - The error to capture.\n * @param {boolean} [remote] - Flag for whether the exception caught was remote or not.\n */\nSegment.prototype.close = function (err, remote) {\n if (!this.end_time) {\n this.end_time = SegmentUtils.getCurrentTime();\n }\n if (err !== undefined) {\n this.addError(err, remote);\n }\n delete this.in_progress;\n delete this.exception;\n if (this.counter <= 0) {\n this.flush();\n }\n};\n/**\n * Sends the segment to the daemon.\n */\nSegment.prototype.flush = function flush() {\n if (this.notTraced !== true) {\n delete this.exception;\n var thisCopy = Utils.objectWithoutProperties(this, ['counter', 'notTraced'], true);\n SegmentEmitter.send(thisCopy);\n }\n};\nSegment.prototype.format = function format() {\n var ignore = ['segment', 'parent', 'counter'];\n if (this.subsegments == null || this.subsegments.length === 0) {\n ignore.push('subsegments');\n }\n var thisCopy = Utils.objectWithoutProperties(this, ignore, false);\n return JSON.stringify(thisCopy);\n};\nSegment.prototype.toString = function toString() {\n return JSON.stringify(this);\n};\nmodule.exports = Segment;\n", "\"use strict\";\n/**\n * @module context_utils\n */\nvar cls = require('cls-hooked/context');\nvar logger = require('./logger');\nvar Segment = require('./segments/segment');\nvar Subsegment = require('./segments/attributes/subsegment');\nvar cls_mode = true;\nvar NAMESPACE = 'AWSXRay';\nvar SEGMENT = 'segment';\nvar contextOverride = false;\nvar contextUtils = {\n CONTEXT_MISSING_STRATEGY: {\n RUNTIME_ERROR: {\n contextMissing: function contextMissingRuntimeError(message) {\n throw new Error(message);\n }\n },\n LOG_ERROR: {\n contextMissing: function contextMissingLogError(message) {\n var err = new Error(message);\n logger.getLogger().error(err.stack);\n }\n },\n IGNORE_ERROR: {\n contextMissing: function contextMissingIgnoreError() {\n }\n }\n },\n contextMissingStrategy: {},\n /**\n * Resolves the segment or subsegment given manual mode and params on the call required.\n * @param [Segment|Subsegment] segment - The segment manually provided via params.XraySegment, if provided.\n * @returns {Segment|Subsegment}\n * @alias module:context_utils.resolveManualSegmentParams\n */\n resolveManualSegmentParams: function resolveManualSegmentParams(params) {\n if (params && !contextUtils.isAutomaticMode()) {\n var xraySegment = params.XRaySegment || params.XraySegment;\n var segment = params.Segment;\n var found = null;\n if (xraySegment && (xraySegment instanceof Segment || xraySegment instanceof Subsegment)) {\n found = xraySegment;\n delete params.XRaySegment;\n delete params.XraySegment;\n }\n else if (segment && (segment instanceof Segment || segment instanceof Subsegment)) {\n found = segment;\n delete params.Segment;\n }\n return found;\n }\n },\n /**\n * Gets current CLS namespace for X-Ray SDK or creates one if absent.\n * @returns {Namespace}\n * @alias module:context_utils.getNamespace\n */\n getNamespace: function getNamespace() {\n return cls.getNamespace(NAMESPACE) || cls.createNamespace(NAMESPACE);\n },\n /**\n * Resolves the segment or subsegment given manual or automatic mode.\n * @param [Segment|Subsegment] segment - The segment manually provided, if provided.\n * @returns {Segment|Subsegment}\n * @alias module:context_utils.resolveSegment\n */\n resolveSegment: function resolveSegment(segment) {\n if (cls_mode) {\n return this.getSegment();\n }\n else if (segment && !cls_mode) {\n return segment;\n }\n else if (!segment && !cls_mode) {\n contextUtils.contextMissingStrategy.contextMissing('No sub/segment specified. A sub/segment must be provided for manual mode.');\n }\n },\n /**\n * Returns the current segment or subsegment. For use with in automatic mode only.\n * @returns {Segment|Subsegment}\n * @alias module:context_utils.getSegment\n */\n getSegment: function getSegment() {\n if (cls_mode) {\n var segment = contextUtils.getNamespace(NAMESPACE).get(SEGMENT);\n if (!segment) {\n contextUtils.contextMissingStrategy.contextMissing('Failed to get the current sub/segment from the context.');\n }\n else if (segment instanceof Segment && process.env.LAMBDA_TASK_ROOT && segment.facade == true) {\n segment.resolveLambdaTraceData();\n }\n return segment;\n }\n else {\n contextUtils.contextMissingStrategy.contextMissing('Cannot get sub/segment from context. Not supported in manual mode.');\n }\n },\n /**\n * Sets the current segment or subsegment. For use with in automatic mode only.\n * @param [Segment|Subsegment] segment - The sub/segment to set.\n * @returns {Segment|Subsegment}\n * @alias module:context_utils.setSegment\n */\n setSegment: function setSegment(segment) {\n if (cls_mode) {\n if (!contextUtils.getNamespace(NAMESPACE).set(SEGMENT, segment)) {\n logger.getLogger().warn('Failed to set the current sub/segment on the context.');\n }\n }\n else {\n contextUtils.contextMissingStrategy.contextMissing('Cannot set sub/segment on context. Not supported in manual mode.');\n }\n },\n /**\n * Returns true if in automatic mode, otherwise false.\n * @returns {Segment|Subsegment}\n * @alias module:context_utils.isAutomaticMode\n */\n isAutomaticMode: function isAutomaticMode() {\n return cls_mode;\n },\n /**\n * Enables automatic mode. Automatic mode uses 'cls-hooked'.\n * @see https://github.com/jeff-lewis/cls-hooked\n * @alias module:context_utils.enableAutomaticMode\n */\n enableAutomaticMode: function enableAutomaticMode() {\n cls_mode = true;\n contextUtils.getNamespace(NAMESPACE);\n logger.getLogger().debug('Overriding AWS X-Ray SDK mode. Set to automatic mode.');\n },\n /**\n * Disables automatic mode. Current segment or subsegment then must be passed manually\n * via the parent optional on captureFunc, captureAsyncFunc etc.\n * @alias module:context_utils.enableManualMode\n */\n enableManualMode: function enableManualMode() {\n cls_mode = false;\n if (cls.getNamespace(NAMESPACE)) {\n cls.destroyNamespace(NAMESPACE);\n }\n logger.getLogger().debug('Overriding AWS X-Ray SDK mode. Set to manual mode.');\n },\n /**\n * Sets the context missing strategy if no context missing strategy is set using the environment variable with\n * key AWS_XRAY_CONTEXT_MISSING. The context missing strategy's contextMissing function will be called whenever\n * trace context is not found.\n * @param {string|function} strategy - The strategy to set. Valid string values are 'LOG_ERROR' and 'RUNTIME_ERROR'.\n * Alternatively, a custom function can be supplied, which takes a error message string.\n */\n setContextMissingStrategy: function setContextMissingStrategy(strategy) {\n if (!contextOverride) {\n if (typeof strategy === 'string') {\n var lookupStrategy = contextUtils.CONTEXT_MISSING_STRATEGY[strategy.toUpperCase()];\n if (lookupStrategy) {\n contextUtils.contextMissingStrategy.contextMissing = lookupStrategy.contextMissing;\n if (process.env.AWS_XRAY_CONTEXT_MISSING) {\n logger.getLogger().debug('AWS_XRAY_CONTEXT_MISSING is set. Configured context missing strategy to ' +\n process.env.AWS_XRAY_CONTEXT_MISSING + '.');\n }\n else {\n logger.getLogger().debug('Configured context missing strategy to: ' + strategy);\n }\n }\n else {\n throw new Error('Invalid context missing strategy: ' + strategy + '. Valid values are ' +\n Object.keys(contextUtils.CONTEXT_MISSING_STRATEGY) + '.');\n }\n }\n else if (typeof strategy === 'function') {\n contextUtils.contextMissingStrategy.contextMissing = strategy;\n logger.getLogger().info('Configured custom context missing strategy to function: ' + strategy.name);\n }\n else {\n throw new Error('Context missing strategy must be either a string or a custom function.');\n }\n }\n else {\n logger.getLogger().warn('Ignoring call to setContextMissingStrategy as AWS_XRAY_CONTEXT_MISSING is set. ' +\n 'The current context missing strategy will not be changed.');\n }\n }\n};\ncls.createNamespace(NAMESPACE);\nlogger.getLogger().debug('Starting the AWS X-Ray SDK in automatic mode (default).');\nif (process.env.AWS_XRAY_CONTEXT_MISSING) {\n contextUtils.setContextMissingStrategy(process.env.AWS_XRAY_CONTEXT_MISSING);\n contextOverride = true;\n}\nelse {\n contextUtils.contextMissingStrategy.contextMissing = contextUtils.CONTEXT_MISSING_STRATEGY.LOG_ERROR.contextMissing;\n logger.getLogger().debug('Using default context missing strategy: LOG_ERROR');\n}\nmodule.exports = contextUtils;\n", "\"use strict\";\nvar { getHttpResponseData } = require('../segments/segment_utils');\n/**\n * Represents an incoming HTTP/HTTPS call.\n * @constructor\n * @param {http.IncomingMessage|https.IncomingMessage} req - The request object from the HTTP/HTTPS call.\n */\nfunction IncomingRequestData(req) {\n this.init(req);\n}\nIncomingRequestData.prototype.init = function init(req) {\n var forwarded = !!req.headers['x-forwarded-for'];\n var url;\n if (req.connection) {\n url = ((req.connection.secure || req.connection.encrypted) ? 'https://' : 'http://') +\n ((req.headers['host'] || '') + (req.url || ''));\n }\n this.request = {\n method: req.method || '',\n user_agent: req.headers['user-agent'] || '',\n client_ip: getClientIp(req) || '',\n url: url || '',\n };\n if (forwarded) {\n this.request.x_forwarded_for = forwarded;\n }\n};\nvar getClientIp = function getClientIp(req) {\n var clientIp;\n if (req.headers['x-forwarded-for']) {\n clientIp = (req.headers['x-forwarded-for'] || '').split(',')[0];\n }\n else if (req.connection && req.connection.remoteAddress) {\n clientIp = req.connection.remoteAddress;\n }\n else if (req.socket && req.socket.remoteAddress) {\n clientIp = req.socket.remoteAddress;\n }\n else if (req.connection && req.connection.socket && req.connection.socket.remoteAddress) {\n clientIp = req.connection.socket.remoteAddress;\n }\n return clientIp;\n};\n/**\n * Closes the local and automatically captures the response data.\n * @param {http.ServerResponse|https.ServerResponse} res - The response object from the HTTP/HTTPS call.\n */\nIncomingRequestData.prototype.close = function close(res) {\n this.response = getHttpResponseData(res);\n};\nmodule.exports = IncomingRequestData;\n", "\"use strict\";\n/**\n * Represents a LocalReservoir object that keeps track of the number of traces per second sampled and\n * the fixed rate for a given sampling rule defined locally.\n * It also decides if a given trace should be sampled or not based on the state of current second.\n * @constructor\n * @param {number} fixedTarget - An integer value to specify the maximum number of traces per second to sample.\n * @param {number} fallbackRate - A value between 0 and 1 indicating the sampling rate after the maximum traces per second has been hit.\n */\nfunction LocalReservoir(fixedTarget, fallbackRate) {\n this.init(fixedTarget, fallbackRate);\n}\nLocalReservoir.prototype.init = function init(fixedTarget, fallbackRate) {\n this.usedThisSecond = 0;\n if (typeof fixedTarget === 'number' && fixedTarget % 1 === 0 && fixedTarget >= 0) {\n this.fixedTarget = fixedTarget;\n }\n else {\n throw new Error('Error in sampling file. Rule attribute \"fixed_target\" must be a non-negative integer.');\n }\n if (typeof fallbackRate === 'number' && fallbackRate >= 0 && fallbackRate <= 1) {\n this.fallbackRate = fallbackRate;\n }\n else {\n throw new Error('Error in sampling file. Rule attribute \"rate\" must be a number between 0 and 1 inclusive.');\n }\n};\nLocalReservoir.prototype.isSampled = function isSampled() {\n var now = Math.round(new Date().getTime() / 1000);\n if (now !== this.thisSecond) {\n this.usedThisSecond = 0;\n this.thisSecond = now;\n }\n if (this.usedThisSecond >= this.fixedTarget) {\n return Math.random() < this.fallbackRate;\n }\n this.usedThisSecond++;\n return true;\n};\nmodule.exports = LocalReservoir;\n", "{\n \"default\": {\n \"fixed_target\": 1,\n \"rate\": 0.05\n },\n \"version\": 2\n}\n", "\"use strict\";\nvar fs = require('fs');\nvar LocalReservoir = require('./local_reservoir');\nvar Utils = require('../../utils');\nvar defaultRules = require('../../resources/default_sampling_rules.json');\nvar logger = require('../../logger');\n/**\n * The local sampler used to make sampling decisions when the decisions are absent in the incoming requests\n * and the default sampler needs to fall back on local rules. It will also be the primary sampler\n * if the default sampler is disabled.\n * @module LocalSampler\n */\nvar LocalSampler = {\n /**\n * Makes a sample decision based on the sample request.\n * @param {object} sampleRequest - Contains information for rules matching.\n * @module LocalSampler\n * @function shouldSample\n */\n shouldSample: function shouldSample(sampleRequest) {\n var host = sampleRequest.host;\n var httpMethod = sampleRequest.httpMethod;\n var urlPath = sampleRequest.urlPath;\n var formatted = '{ http_method: ' + httpMethod + ', host: ' + host + ', url_path: ' + urlPath + ' }';\n var matched;\n this.rules.some(function (rule) {\n // Any null parameters provided will be considered an implicit match.\n if (rule.default || (host == null || (Utils.wildcardMatch(rule.host, host))\n && (httpMethod == null || Utils.wildcardMatch(rule.http_method, httpMethod))\n && (urlPath == null || Utils.wildcardMatch(rule.url_path, urlPath)))) {\n matched = rule.reservoir;\n logger.getLogger().debug('Local sampling rule match found for ' + formatted + '. Matched ' + (rule.default ?\n 'default' : '{ http_method: ' + rule.http_method + ', host: ' + rule.host + ', url_path: ' +\n rule.url_path + ' }') + '. Using fixed_target: ' + matched.fixedTarget + ' and rate: ' + matched.fallbackRate + '.');\n return true;\n }\n });\n if (matched) {\n return matched.isSampled();\n }\n else {\n logger.getLogger().debug('No sampling rule matched for ' + formatted);\n return false;\n }\n },\n /**\n * Set local rules for making sampling decisions.\n * @module LocalSampler\n * @function setLocalRules\n */\n setLocalRules: function setLocalRules(source) {\n if (source) {\n if (typeof source === 'string') {\n logger.getLogger().info('Using custom sampling rules file: ' + source);\n this.rules = loadRulesConfig(JSON.parse(fs.readFileSync(source, 'utf8')));\n }\n else {\n logger.getLogger().info('Using custom sampling rules source.');\n this.rules = loadRulesConfig(source);\n }\n }\n else {\n this.rules = parseRulesConfig(defaultRules);\n }\n }\n};\nvar loadRulesConfig = function loadRulesConfig(config) {\n if (!config.version) {\n throw new Error('Error in sampling file. Missing \"version\" attribute.');\n }\n if (config.version === 1 || config.version === 2) {\n return parseRulesConfig(config);\n }\n else {\n throw new Error('Error in sampling file. Unknown version \"' + config.version + '\".');\n }\n};\nvar parseRulesConfig = function parseRulesConfig(config) {\n var defaultRule;\n var rules = [];\n if (config.default) {\n var missing = [];\n for (var key in config.default) {\n if (key !== 'fixed_target' && key !== 'rate') {\n throw new Error('Error in sampling file. Invalid attribute for default: ' + key +\n '. Valid attributes for default are \"fixed_target\" and \"rate\".');\n }\n else if (typeof config.default[key] !== 'number') {\n throw new Error('Error in sampling file. Default ' + key + ' must be a number.');\n }\n }\n if (typeof config.default.fixed_target === 'undefined') {\n missing.push('fixed_target');\n }\n if (typeof config.default.rate === 'undefined') {\n missing.push('rate');\n }\n if (missing.length !== 0) {\n throw new Error('Error in sampling file. Missing required attributes for default: ' + missing + '.');\n }\n defaultRule = { default: true, reservoir: new LocalReservoir(config.default.fixed_target, config.default.rate) };\n }\n else {\n throw new Error('Error in sampling file. Expecting \"default\" object to be defined with attributes \"fixed_target\" and \"rate\".');\n }\n if (Array.isArray(config.rules)) {\n config.rules.forEach(function (rawRule) {\n var params = {};\n var required;\n if (config.version === 2) {\n required = { host: 1, http_method: 1, url_path: 1, fixed_target: 1, rate: 1 };\n }\n if (config.version === 1) {\n required = { service_name: 1, http_method: 1, url_path: 1, fixed_target: 1, rate: 1 };\n }\n for (var key in rawRule) {\n var value = rawRule[key];\n if (!required[key] && key != 'description') {\n throw new Error('Error in sampling file. Rule ' + JSON.stringify(rawRule) + ' has invalid attribute: ' + key + '.');\n }\n else if (key != 'description' && !value && value !== 0) {\n throw new Error('Error in sampling file. Rule ' + JSON.stringify(rawRule) + ' attribute \"' + key + '\" has invalid value: ' + value + '.');\n }\n else {\n if (config.version === 2) {\n params[key] = value;\n }\n if (config.version === 1 && key === 'service_name') {\n params['host'] = value;\n }\n else {\n params[key] = value;\n }\n delete required[key];\n }\n }\n if (Object.keys(required).length !== 0 && required.constructor === Object) {\n throw new Error('Error in sampling file. Rule ' + JSON.stringify(rawRule) + ' is missing required attributes: ' + Object.keys(required) + '.');\n }\n var rule = params;\n rule.reservoir = new LocalReservoir(rawRule.fixed_target, rawRule.rate);\n rules.push(rule);\n });\n }\n rules.push(defaultRule);\n return rules;\n};\nLocalSampler.setLocalRules();\nmodule.exports = LocalSampler;\n", "\"use strict\";\n/**\n * Represents a Reservoir object that keeps track of the number of traces per second sampled and\n * the fixed rate for a given sampling rule. This information is fetched from X-Ray serivce.\n * It decides if a given trace should be borrowed or sampled or not sampled based on the state of current second.\n * @constructor\n */\nfunction Reservoir() {\n this.init();\n}\nReservoir.prototype.init = function init() {\n this.quota = null;\n this.TTL = null;\n this.takenThisSec = 0;\n this.borrowedThisSec = 0;\n this.reportInterval = 1;\n this.reportElapsed = 0;\n};\nReservoir.prototype.borrowOrTake = function borrowOrTake(now, canBorrow) {\n this.adjustThisSec(now);\n // Don't borrow if the quota is available and fresh.\n if (this.quota >= 0 && this.TTL >= now) {\n if (this.takenThisSec >= this.quota) {\n return false;\n }\n this.takenThisSec++;\n return 'take';\n }\n // Otherwise try to borrow if the quota is not present or expired.\n if (canBorrow) {\n if (this.borrowedThisSec >= 1) {\n return false;\n }\n this.borrowedThisSec++;\n return 'borrow';\n }\n};\nReservoir.prototype.adjustThisSec = function adjustThisSec(now) {\n if (now !== this.thisSec) {\n this.takenThisSec = 0;\n this.borrowedThisSec = 0;\n this.thisSec = now;\n }\n};\nReservoir.prototype.loadNewQuota = function loadNewQuota(quota, TTL, interval) {\n if (quota) {\n this.quota = quota;\n }\n if (TTL) {\n this.TTL = TTL;\n }\n if (interval) {\n this.reportInterval = interval / 10;\n } // Report interval is always time of 10.\n};\nReservoir.prototype.timeToReport = function timeToReport() {\n if (this.reportElapsed + 1 >= this.reportInterval) {\n this.reportElapsed = 0;\n return true;\n }\n else {\n this.reportElapsed += 1;\n return false;\n }\n};\nmodule.exports = Reservoir;\n", "\"use strict\";\nvar Utils = require('../../utils');\nvar Reservoir = require('./reservoir');\n/**\n * The data model for a sampling rule defined using X-Ray API CreateSamplingRules.\n * It should be only instantiated directly from the X-Ray API response.\n * @constructor\n */\nfunction SamplingRule(name, priority, rate, reservoirSize, host, httpMethod, urlPath, serviceName, serviceType) {\n this.init(name, priority, rate, reservoirSize, host, httpMethod, urlPath, serviceName, serviceType);\n}\nSamplingRule.prototype.init = function init(name, priority, rate, reservoirSize, host, httpMethod, urlPath, serviceName, serviceType) {\n this.name = name;\n this.priority = priority;\n this.rate = rate;\n this.host = host;\n this.httpMethod = httpMethod;\n this.urlPath = urlPath;\n this.serviceName = serviceName;\n this.serviceType = serviceType;\n this.reservoir = new Reservoir();\n this.borrow = !!reservoirSize;\n this.resetStatistics();\n};\nSamplingRule.prototype.match = function match(sampleRequest) {\n var host = sampleRequest.host;\n var httpMethod = sampleRequest.httpMethod;\n var serviceName = sampleRequest.serviceName;\n var urlPath = sampleRequest.urlPath;\n var serviceType = sampleRequest.serviceType;\n return this.isDefault() || (!host || Utils.wildcardMatch(this.host, host))\n && (!httpMethod || Utils.wildcardMatch(this.httpMethod, httpMethod))\n && (!serviceName || Utils.wildcardMatch(this.serviceName, serviceName))\n && (!urlPath || Utils.wildcardMatch(this.urlPath, urlPath))\n && (!serviceType || Utils.wildcardMatch(this.serviceType, serviceType));\n};\nSamplingRule.prototype.snapshotStatistics = function snapshotStatistics() {\n var statistics = {\n requestCount: this.requestCount,\n borrowCount: this.borrowCount,\n sampledCount: this.sampledCount\n };\n this.resetStatistics();\n return statistics;\n};\nSamplingRule.prototype.merge = function merge(rule) {\n this.reservoir = rule.reservoir;\n this.requestCount = rule.requestCount;\n this.borrowCount = rule.borrowCount;\n this.sampledCount = rule.sampledCount;\n rule = null; // unref the old rule so it can be garbage collected.\n};\nSamplingRule.prototype.isDefault = function isDefault() {\n return this.name === 'Default'; // \"Default\" is a reserved keyword from X-Ray back-end.\n};\nSamplingRule.prototype.incrementRequestCount = function incrementRequestCount() {\n this.requestCount++;\n};\nSamplingRule.prototype.incrementBorrowCount = function incrementBorrowCount() {\n this.borrowCount++;\n};\nSamplingRule.prototype.incrementSampledCount = function incrementSampledCount() {\n this.sampledCount++;\n};\nSamplingRule.prototype.setRate = function setRate(rate) {\n this.rate = rate;\n};\nSamplingRule.prototype.getRate = function getRate() {\n return this.rate;\n};\nSamplingRule.prototype.getName = function getName() {\n return this.name;\n};\nSamplingRule.prototype.getPriority = function getPriority() {\n return this.priority;\n};\nSamplingRule.prototype.getReservoir = function getReservoir() {\n return this.reservoir;\n};\nSamplingRule.prototype.resetStatistics = function resetStatistics() {\n this.requestCount = 0;\n this.borrowCount = 0;\n this.sampledCount = 0;\n};\nSamplingRule.prototype.canBorrow = function canBorrow() {\n return this.borrow;\n};\nSamplingRule.prototype.everMatched = function everMatched() {\n return this.requestCount > 0;\n};\nSamplingRule.prototype.timeToReport = function timeToReport() {\n return this.reservoir.timeToReport();\n};\nmodule.exports = SamplingRule;\n", "\"use strict\";\nvar crypto = require('crypto');\nvar logger = require('../../logger');\nvar SamplingRule = require('./sampling_rule');\nvar DaemonConfig = require('../../daemon_config');\nconst util = require('util');\nconst http = require('http');\n/**\n * The ServiceConnector that calls X-Ray service and convert the API response bodies to data models\n * defined in the X-Ray SDK and return them to the pollers.\n * @module ServiceConnector\n */\nvar ServiceConnector = {\n // client_id is a 12 byte cryptographically secure random hex\n // identifying the SDK instance and is generated during SDK initialization/\n // This is required when reporting sampling to X-Ray back-end.\n clientId: crypto.randomBytes(12).toString('hex'),\n samplingRulesPath: '/GetSamplingRules',\n samplingTargetsPath: '/SamplingTargets',\n logger: logger,\n httpClient: http,\n fetchSamplingRules: function fetchSamplingRules(callback) {\n const body = '{}'; // Payload needed for GetSamplingRules POST request\n const options = getOptions(this.samplingRulesPath, body.length);\n const httpReq = this.httpClient.__request ? this.httpClient.__request : this.httpClient.request;\n const req = httpReq(options, res => {\n var data = '';\n res.on('data', d => {\n data += d;\n });\n res.on('error', error => {\n callback(error);\n });\n res.on('end', () => {\n var dataObj;\n try {\n dataObj = JSON.parse(data);\n }\n catch (err) {\n callback(err);\n return;\n }\n if (!dataObj) {\n callback(new Error('AWS X-Ray GetSamplingRules API returned empty response'));\n return;\n }\n var newRules = assembleRules(dataObj);\n callback(null, newRules);\n });\n });\n req.on('error', () => {\n callback(new Error(`Failed to connect to X-Ray daemon at ${options.hostname}:${options.port} to get sampling rules.`));\n });\n req.write(body);\n req.end();\n },\n fetchTargets: function fetchTargets(rules, callback) {\n const body = JSON.stringify(constructStatisticsDocs(rules));\n const options = getOptions(this.samplingTargetsPath, body.length);\n const httpReq = this.httpClient.__request ? this.httpClient.__request : this.httpClient.request;\n const req = httpReq(options, res => {\n var data = '';\n res.on('data', d => {\n data += d;\n });\n res.on('error', error => {\n callback(error);\n });\n res.on('end', () => {\n var dataObj;\n try {\n dataObj = JSON.parse(data);\n }\n catch (err) {\n callback(err);\n return;\n }\n if (!dataObj || typeof dataObj['LastRuleModification'] != 'number') {\n callback(new Error('AWS X-Ray SamplingTargets API returned invalid response'));\n return;\n }\n var targetsMapping = assembleTargets(dataObj);\n var ruleFreshness = dateToEpoch(dataObj['LastRuleModification']);\n callback(null, targetsMapping, ruleFreshness);\n });\n });\n req.on('error', () => {\n callback(new Error(`Failed to connect to X-Ray daemon at ${options.hostname}:${options.port} to get sampling targets.`));\n });\n req.write(body);\n req.end();\n }\n};\nvar constructStatisticsDocs = function constructStatisticsDocs(rules) {\n var documents = [];\n var now = Math.floor(new Date().getTime() / 1000);\n rules.forEach(function (rule) {\n var statistics = rule.snapshotStatistics();\n var doc = {\n 'RuleName': rule.getName(),\n 'ClientID': ServiceConnector.clientId,\n 'RequestCount': statistics.requestCount,\n 'BorrowCount': statistics.borrowCount,\n 'SampledCount': statistics.sampledCount,\n 'Timestamp': now\n };\n documents.push(doc);\n });\n return { SamplingStatisticsDocuments: documents };\n};\nvar assembleRules = function assembleRules(data) {\n var newRules = [];\n var ruleList = data['SamplingRuleRecords'] || [];\n ruleList.forEach(function (ruleRecord) {\n ruleRecord = ruleRecord['SamplingRule'];\n // For forward compatibility reason right now it only\n // deals with version 1 sampling rules.\n if (isRuleValid(ruleRecord)) {\n var newRule = new SamplingRule(ruleRecord['RuleName'], ruleRecord['Priority'], ruleRecord['FixedRate'], ruleRecord['ReservoirSize'], ruleRecord['Host'], ruleRecord['HTTPMethod'], ruleRecord['URLPath'], ruleRecord['ServiceName'], ruleRecord['ServiceType']);\n newRules.push(newRule);\n }\n });\n return newRules;\n};\nvar assembleTargets = function assembleTargets(data) {\n var docs = data['SamplingTargetDocuments'] || [];\n var targetsMapping = {};\n docs.forEach(function (doc) {\n var newTarget = {\n rate: doc['FixedRate'],\n quota: doc['ReservoirQuota'],\n TTL: dateToEpoch(doc['ReservoirQuotaTTL']),\n interval: doc['Interval']\n };\n targetsMapping[doc['RuleName']] = newTarget;\n });\n return targetsMapping;\n};\nvar isRuleValid = function isRuleValid(record) {\n return record['Version'] === 1\n && record['ResourceARN'] === '*'\n && record['Attributes'] && Object.keys(record['Attributes']).length === 0\n && record['ServiceType']\n && record['RuleName']\n && record['Priority']\n && typeof record['FixedRate'] == 'number';\n};\nvar dateToEpoch = function dateToEpoch(date) {\n return new Date(date).getTime() / 1000;\n};\nvar getOptions = function getOptions(path, contentLength) {\n const options = {\n hostname: DaemonConfig.tcp_ip,\n port: DaemonConfig.tcp_port,\n method: 'POST',\n path: path,\n headers: {\n 'Content-Type': 'application/json',\n 'Content-Length': contentLength,\n 'Host': util.format('%s:%d', DaemonConfig.tcp_ip, DaemonConfig.tcp_port)\n }\n };\n return options;\n};\nmodule.exports = ServiceConnector;\n", "\"use strict\";\nvar TTL = 60 * 60; // The cache expires 1 hour after the last refresh time.\n/**\n * The rule cache that stores sampling rules fetched from X-Ray service.\n * @module RuleCache\n */\nvar RuleCache = {\n rules: [],\n lastUpdated: null,\n /**\n * Tries to find a valid rule that matches the sample request.\n * @param {object} sampleRequest - Contains information for rules matching.\n * @param {number} now - Current epoch in seconds.\n * @module RuleCache\n * @function getMatchedRule\n */\n getMatchedRule: function getMatchedRule(sampleRequest, now) {\n if (isExpired(now)) {\n return null;\n }\n var matchedRule;\n this.rules.forEach(function (rule) {\n if (!matchedRule && rule.match(sampleRequest)) {\n matchedRule = rule;\n }\n if (rule.isDefault() && !matchedRule) {\n matchedRule = rule;\n }\n });\n return matchedRule;\n },\n /**\n * Load rules fetched from X-Ray service in order sorted by priorities.\n * @param {object} rules - Newly fetched rules to load.\n * @module RuleCache\n * @function loadRules\n */\n loadRules: function loadRules(rules) {\n // Record the old rules for later merging.\n var oldRules = {};\n this.rules.forEach(function (rule) {\n oldRules[rule.getName()] = rule;\n });\n // Update the rules in the cache.\n this.rules = rules;\n // Transfer state information to refreshed rules.\n this.rules.forEach(function (rule) {\n var oldRule = oldRules[rule.getName()];\n if (oldRule) {\n rule.merge(oldRule);\n }\n });\n // The cache should maintain the order of the rules based on\n // priority. If priority is the same we sort name by alphabet\n // as rule name is unique.\n this.rules.sort(function (a, b) {\n var v = a.getPriority() - b.getPriority();\n if (v !== 0) {\n return v;\n }\n if (a.getName() > b.getName()) {\n return 1;\n }\n else {\n return -1;\n }\n });\n },\n /**\n * Load targets fetched from X-Ray service.\n * @param {object} targetsMapping - Newly fetched targets map with rule name as key.\n * @module RuleCache\n * @function loadTargets\n */\n loadTargets: function loadTargets(targetsMapping) {\n this.rules.forEach(function (rule) {\n var target = targetsMapping[rule.getName()];\n if (target) {\n rule.getReservoir().loadNewQuota(target.quota, target.TTL, target.interval);\n rule.setRate(target.rate);\n }\n });\n },\n getRules: function getRules() {\n return this.rules;\n },\n timestamp: function timestamp(now) {\n this.lastUpdated = now;\n },\n getLastUpdated: function getLastUpdated() {\n return this.lastUpdated;\n }\n};\nvar isExpired = function isExpired(now) {\n // The cache is considered expired if it is never loaded.\n if (!RuleCache.getLastUpdated()) {\n return true;\n }\n return now > RuleCache.getLastUpdated() + TTL;\n};\nmodule.exports = RuleCache;\n", "\"use strict\";\nvar logger = require('../../logger');\nvar ServiceConnector = require('./service_connector');\nvar ruleCache = require('./rule_cache');\nvar DEFAULT_INTERVAL = 5 * 60 * 1000; // 5 minutes on sampling rules fetch\n/**\n * The RulePoller that periodically fetch sampling rules from X-Ray service\n * and load them into RuleCache.\n * @module RulePoller\n */\nvar RulePoller = {\n start: function start() {\n if (this.poller) {\n clearInterval(this.poller);\n }\n // Refresh sampling rules cache with no jitter upon start.\n refresh(false);\n this.poller = setInterval(refresh, DEFAULT_INTERVAL);\n this.poller.unref();\n },\n};\nvar refresh = function refresh(jitter) {\n // Add jitter by default unless explicitly told not to.\n jitter = typeof jitter === 'undefined' ? true : jitter;\n if (jitter) {\n var delay = getJitter();\n setTimeout(refreshWithFirewall, delay);\n }\n else {\n refreshWithFirewall();\n }\n};\nvar refreshWithFirewall = function refreshWithFirewall() {\n try {\n refreshCache();\n }\n catch (e) {\n logger.getLogger().warn('Encountered unexpected exception when fetching sampling rules: ' + e);\n }\n};\nvar refreshCache = function refreshCache() {\n // Timestamp should be generated *before* the actual outbound call to ensure\n // we don't mark the cache as being fresher than it actually is.\n var now = Math.floor(new Date().getTime() / 1000);\n // Pass a callback that only runs when the new rules are\n // successfully fetched.\n ServiceConnector.fetchSamplingRules(function (err, newRules) {\n if (err) {\n logger.getLogger().warn('Failed to retrieve sampling rules from X-Ray service:', err);\n }\n else if (newRules.length !== 0) {\n ruleCache.loadRules(newRules);\n ruleCache.timestamp(now);\n logger.getLogger().info('Successfully refreshed centralized sampling rule cache.');\n }\n });\n};\n// A random jitter of up to 5 seconds is injected after every run to ensure\n// the calls eventually get evenly distributed over the 5 minute window.\nvar getJitter = function getJitter() {\n return Math.random() * 5;\n};\nmodule.exports = RulePoller;\n", "\"use strict\";\nvar rulePoller = require('./rule_poller');\nvar serviceConnector = require('./service_connector');\nvar ruleCache = require('./rule_cache');\nvar logger = require('../../logger');\nvar DEFAULT_INTERVAL = 10 * 1000; // 10 seconds on sampling targets fetch\n/**\n * The TargetPoller that periodically fetch sampling targets from X-Ray service\n * and load them into RuleCache.\n * @module TargetPoller\n */\nvar TargetPoller = {\n interval: DEFAULT_INTERVAL,\n start: function start() {\n this.poller = setInterval(refreshWithFirewall, DEFAULT_INTERVAL + getJitter());\n this.poller.unref();\n },\n};\nvar refreshWithFirewall = function refreshWithFirewall() {\n try {\n refresh();\n }\n catch (e) {\n logger.getLogger().warn('Encountered unexpected exception when fetching sampling targets: ' + e);\n }\n};\nvar refresh = function refresh() {\n var candidates = getCandidates();\n if (candidates && candidates.length > 0) {\n serviceConnector.fetchTargets(candidates, function (err, targetsMapping, ruleFreshness) {\n if (err) {\n logger.getLogger().warn('Failed to retrieve sampling targets from X-Ray service:', err);\n return;\n }\n ruleCache.loadTargets(targetsMapping);\n if (ruleFreshness > ruleCache.getLastUpdated()) {\n logger.getLogger().info('Performing out-of-band sampling rule polling to fetch updated rules.');\n rulePoller.start();\n }\n logger.getLogger().info('Successfully reported rule statistics to get new sampling quota.');\n });\n }\n};\n// Don't report a rule statistics if any of the conditions is met:\n// 1. The report time hasn't come (some rules might have larger report intervals).\n// 2. The rule is never matched.\nvar getCandidates = function getCandidates() {\n var rules = ruleCache.getRules();\n var candidates = [];\n rules.forEach(function (rule) {\n if (rule.everMatched() && rule.timeToReport()) {\n candidates.push(rule);\n }\n });\n return candidates;\n};\n// A random jitter of up to 0.1 seconds is injected after every run to ensure\n// the calls eventually get evenly distributed over the 10 second window.\nvar getJitter = function getJitter() {\n return Math.random() / TargetPoller.interval;\n};\nmodule.exports = TargetPoller;\n", "\"use strict\";\nvar logger = require('../../logger');\nconst util = require('util');\nvar SegmentUtils = require('../../segments/segment_utils');\n/**\n * The default sampler used to make sampling decisions when the decisions are absent in the incoming requests.\n * The sampler use pollers to poll sampling rules from X-Ray service.\n * @module DefaultSampler\n */\nvar DefaultSampler = {\n localSampler: require('./local_sampler'),\n rulePoller: require('./rule_poller'),\n targetPoller: require('./target_poller'),\n ruleCache: require('./rule_cache'),\n started: false,\n /**\n * Makes a sample decision based on the sample request.\n * @param {object} sampleRequest - Contains information for rules matching.\n * @module DefaultSampler\n * @function shouldSample\n */\n shouldSample: function shouldSample(sampleRequest) {\n try {\n if (!this.started) {\n this.start();\n }\n if (!sampleRequest.serviceType) {\n sampleRequest.serviceType = SegmentUtils.origin;\n }\n var now = Math.floor(new Date().getTime() / 1000);\n var matchedRule = this.ruleCache.getMatchedRule(sampleRequest, now);\n if (matchedRule) {\n logger.getLogger().debug(util.format('Rule %s is matched.', matchedRule.getName()));\n return processMatchedRule(matchedRule, now);\n }\n else {\n logger.getLogger().info('No effective centralized sampling rule match. Fallback to local rules.');\n return this.localSampler.shouldSample(sampleRequest);\n }\n }\n catch (err) {\n logger.getLogger().error('Unhandled exception by the SDK during making sampling decisions: ' + err);\n }\n },\n /**\n * Set local rules in case there is a need to fallback.\n * @module DefaultSampler\n * @function setLocalRules\n */\n setLocalRules: function setLocalRules(source) {\n this.localSampler.setLocalRules(source);\n },\n /**\n * Start the pollers to poll sampling rules and targets from X-Ray service.\n * @module DefaultSampler\n * @function start\n */\n start: function start() {\n if (!this.started) {\n this.rulePoller.start();\n this.targetPoller.start();\n this.started = true;\n }\n }\n};\nvar processMatchedRule = function processMatchedRule(rule, now) {\n // As long as a rule is matched we increment request counter.\n rule.incrementRequestCount();\n var reservoir = rule.getReservoir();\n var sample = true;\n // We check if we can borrow or take from reservoir first.\n var decision = reservoir.borrowOrTake(now, rule.canBorrow());\n if (decision === 'borrow') {\n rule.incrementBorrowCount();\n }\n else if (decision === 'take') {\n rule.incrementSampledCount();\n }\n else if (Math.random() <= rule.getRate()) {\n // Otherwise we compute based on FixedRate of this sampling rule.\n rule.incrementSampledCount();\n }\n else {\n sample = false;\n }\n if (sample) {\n return rule.getName();\n }\n else {\n return false;\n }\n};\nmodule.exports = DefaultSampler;\n", "\"use strict\";\n/**\n * Middleware Utils module.\n *\n * Exposes various configuration and helper methods to be used by the middleware.\n * @module mw_utils\n */\nvar Segment = require('../segments/segment');\nvar IncomingRequestData = require('./incoming_request_data');\nvar logger = require('../logger');\nvar coreUtils = require('../utils');\nvar wildcardMatch = require('../utils').wildcardMatch;\nvar processTraceData = require('../utils').processTraceData;\n//headers are case-insensitive\nvar XRAY_HEADER = 'x-amzn-trace-id';\nvar overrideFlag = !!process.env.AWS_XRAY_TRACING_NAME;\nvar utils = {\n defaultName: process.env.AWS_XRAY_TRACING_NAME,\n dynamicNaming: false,\n hostPattern: null,\n sampler: require('./sampling/default_sampler'),\n /**\n * Enables dynamic naming for segments via the middleware. Use 'AWSXRay.middleware.enableDynamicNaming()'.\n * @param {string} [hostPattern] - The pattern to match the host header. See the README on dynamic and fixed naming modes.\n * @alias module:mw_utils.enableDynamicNaming\n */\n enableDynamicNaming: function (hostPattern) {\n this.dynamicNaming = true;\n if (hostPattern && typeof hostPattern !== 'string') {\n throw new Error('Host pattern must be a string.');\n }\n this.hostPattern = hostPattern || null;\n },\n /**\n * Splits out the 'x-amzn-trace-id' header params from the incoming request. Used by the middleware.\n * @param {http.IncomingMessage|https.IncomingMessage} req - The request object from the incoming call.\n * @returns {object}\n * @alias module:mw_utils.processHeaders\n */\n processHeaders: function processHeaders(req) {\n var amznTraceHeader = {};\n if (req && req.headers && req.headers[XRAY_HEADER]) {\n amznTraceHeader = processTraceData(req.headers[XRAY_HEADER]);\n }\n return amznTraceHeader;\n },\n /**\n * Resolves the name of the segment as determined by fixed or dynamic mode options. Used by the middleware.\n * @param {string} hostHeader - The string from the request.headers.host property.\n * @returns {string}\n * @alias module:mw_utils.resolveName\n */\n resolveName: function resolveName(hostHeader) {\n var name;\n if (this.dynamicNaming && hostHeader) {\n name = this.hostPattern ? (wildcardMatch(this.hostPattern, hostHeader) ? hostHeader : this.defaultName) : hostHeader;\n }\n else {\n name = this.defaultName;\n }\n return name;\n },\n /**\n * Resolves the sampling decision as determined by the values given and options set. Used by the middleware.\n * @param {object} amznTraceHeader - The object as returned by the processHeaders function.\n * @param {Segment} segment - The string from the request.headers.host property.\n * @param {http.ServerResponse|https.ServerResponse} res - The response object from the incoming call.\n * @returns {boolean}\n * @alias module:mw_utils.resolveSampling\n */\n resolveSampling: function resolveSampling(amznTraceHeader, segment, res) {\n var isSampled;\n if (amznTraceHeader.sampled === '1') {\n isSampled = true;\n }\n else if (amznTraceHeader.sampled === '0') {\n isSampled = false;\n }\n else {\n var sampleRequest = {\n host: res.req.headers.host,\n httpMethod: res.req.method,\n urlPath: res.req.url,\n serviceName: segment.name\n };\n isSampled = this.sampler.shouldSample(sampleRequest);\n if (isSampled instanceof String || typeof isSampled === 'string') {\n segment.setMatchedSamplingRule(isSampled);\n isSampled = true;\n }\n }\n if (amznTraceHeader.sampled === '?') {\n res.header[XRAY_HEADER] = 'Root=' + amznTraceHeader.root + ';Sampled=' + (isSampled ? '1' : '0');\n }\n if (!isSampled) {\n segment.notTraced = true;\n }\n },\n /**\n * Sets the default name of created segments. Used with the middleware.\n * Can be overridden by the AWS_XRAY_TRACING_NAME environment variable.\n * @param {string} name - The default name for segments created in the middleware.\n * @alias module:mw_utils.setDefaultName\n */\n setDefaultName: function setDefaultName(name) {\n if (!overrideFlag) {\n this.defaultName = name;\n }\n },\n disableCentralizedSampling: function disableCentralizedSampling() {\n this.sampler = require('./sampling/local_sampler');\n },\n /**\n * Overrides the default sampling rules file to specify at what rate to sample at for specific routes.\n * The base sampling rules file can be found at /lib/resources/default_sampling_rules.json\n * @param {string|Object} source - The path to the custom sampling rules file, or the source JSON object.\n * @memberof AWSXRay\n */\n setSamplingRules: function setSamplingRules(source) {\n if (!source || source instanceof String || !(typeof source === 'string' || (source instanceof Object))) {\n throw new Error('Please specify a path to the local sampling rules file, or supply an object containing the rules.');\n }\n this.sampler.setLocalRules(source);\n },\n /**\n * Logs a debug message including core request and segment information\n * @param {string} message - The message to be logged\n * @param {string} url - The request url being traced\n * @param {Segment} - The current segment\n */\n middlewareLog: function middlewareLog(message, url, segment) {\n logger.getLogger().debug(message + ': { url: ' + url + ', name: ' + segment.name + ', trace_id: ' +\n segment.trace_id + ', id: ' + segment.id + ', sampled: ' + !segment.notTraced + ' }');\n },\n /**\n * Traces the request/response cycle of an http.IncomingMessage / http.ServerResponse pair.\n * Resolves sampling rules, creates a segment, adds the core request / response data adding\n * throttling / error / fault flags based on the response status code.\n * @param {http.IncomingMessage} req - The incoming request.\n * @param {http.ServerResponse} res - The server response.\n * @returns {Segment}\n * @memberof AWSXRay\n */\n traceRequestResponseCycle: function traceRequestResponseCycle(req, res) {\n var amznTraceHeader = this.processHeaders(req);\n var name = this.resolveName(req.headers.host);\n var segment = new Segment(name, amznTraceHeader.root, amznTraceHeader.parent);\n var responseWithEmbeddedRequest = Object.assign({}, res, { req: req });\n this.resolveSampling(amznTraceHeader, segment, responseWithEmbeddedRequest);\n segment.addIncomingRequestData(new IncomingRequestData(req));\n this.middlewareLog('Starting middleware segment', req.url, segment);\n var middlewareLog = this.middlewareLog;\n var didEnd = false;\n var endSegment = function () {\n // ensure `endSegment` is only called once\n // in some versions of node.js 10.x and in all versions of node.js 11.x and higher,\n // the 'finish' and 'close' event are BOTH triggered.\n // Previously, only one or the other was triggered:\n // https://github.com/nodejs/node/pull/20611\n if (didEnd) {\n return;\n }\n didEnd = true;\n if (res.statusCode === 429) {\n segment.addThrottleFlag();\n }\n const cause = coreUtils.getCauseTypeFromHttpStatus(res.statusCode);\n if (cause) {\n segment[cause] = true;\n }\n segment.http.close(res);\n segment.close();\n middlewareLog('Closed middleware segment successfully', req.url, segment);\n };\n res.on('finish', endSegment);\n res.on('close', endSegment);\n return segment;\n }\n};\nmodule.exports = utils;\n", "\"use strict\";\nvar contextUtils = require('../context_utils');\nvar mwUtils = require('../middleware/mw_utils');\nvar LambdaUtils = require('../utils').LambdaUtils;\nvar Segment = require('../segments/segment');\nvar SegmentEmitter = require('../segment_emitter');\nvar SegmentUtils = require('../segments/segment_utils');\nvar logger = require('../logger');\nconst TraceID = require('../segments/attributes/trace_id');\n/**\n * @namespace\n * @ignore\n */\nvar xAmznTraceIdPrev = null;\n/**\n* Used to initialize segments on AWS Lambda with extra data from the context.\n*/\nmodule.exports.init = function init() {\n contextUtils.enableManualMode = function () {\n logger.getLogger().warn('AWS Lambda does not support AWS X-Ray manual mode.');\n };\n SegmentEmitter.disableReusableSocket();\n SegmentUtils.setStreamingThreshold(0);\n /**\n * Disabling all centralized sampling in Lambda environments. The sampling decisions would be\n * uselessly applied to the facade segment, and the sampling pollers were causing errors.\n *\n * See: https://github.com/aws/aws-xray-sdk-node/issues/217\n */\n logger.getLogger().info('Disabling centralized sampling in Lambda environment.');\n mwUtils.disableCentralizedSampling();\n var namespace = contextUtils.getNamespace();\n namespace.enter(namespace.createContext());\n contextUtils.setSegment(facadeSegment());\n};\nvar facadeSegment = function facadeSegment() {\n var segment = new Segment('facade');\n var whitelistFcn = ['addNewSubsegment', 'addSubsegment', 'removeSubsegment', 'toString', 'addSubsegmentWithoutSampling', 'addNewSubsegmentWithoutSampling'];\n var silentFcn = ['incrementCounter', 'decrementCounter', 'isClosed', 'close', 'format', 'flush'];\n var xAmznTraceId = process.env._X_AMZN_TRACE_ID;\n for (var key in segment) {\n if (typeof segment[key] === 'function' && whitelistFcn.indexOf(key) === -1) {\n if (silentFcn.indexOf(key) === -1) {\n segment[key] = (function () {\n var func = key;\n return function facade() {\n logger.getLogger().warn('Function \"' + func + '\" cannot be called on an AWS Lambda segment. Please use a subsegment to record data.');\n return;\n };\n })();\n }\n else {\n segment[key] = function facade() {\n return;\n };\n }\n }\n }\n segment.trace_id = TraceID.Invalid().toString();\n segment.isClosed = function () {\n return true;\n };\n segment.in_progress = false;\n segment.counter = 1;\n segment.notTraced = true;\n segment.facade = true;\n segment.reset = function reset() {\n this.trace_id = TraceID.Invalid().toString();\n this.id = '00000000';\n delete this.subsegments;\n this.notTraced = true;\n };\n segment.resolveLambdaTraceData = function resolveLambdaTraceData() {\n var xAmznLambda = process.env._X_AMZN_TRACE_ID;\n if (xAmznLambda) {\n // This check resets the trace data whenever a new trace header is read to not leak data between invocations\n if (xAmznLambda != xAmznTraceIdPrev) {\n this.reset();\n if (LambdaUtils.populateTraceData(segment, xAmznLambda)) {\n xAmznTraceIdPrev = xAmznLambda;\n }\n }\n }\n else {\n this.reset();\n contextUtils.contextMissingStrategy.contextMissing('Missing AWS Lambda trace data for X-Ray. ' +\n 'Ensure Active Tracing is enabled and no subsegments are created outside the function handler.');\n }\n };\n // Test for valid trace data during SDK startup. It's likely we're still in the cold-start portion of the\n // code at this point and a valid trace header has not been set\n if (LambdaUtils.validTraceData(xAmznTraceId)) {\n if (LambdaUtils.populateTraceData(segment, xAmznTraceId)) {\n xAmznTraceIdPrev = xAmznTraceId;\n }\n }\n return segment;\n};\n", "{\n \"name\": \"aws-xray-sdk-core\",\n \"version\": \"3.5.0\",\n \"description\": \"AWS X-Ray SDK for Javascript\",\n \"author\": \"Amazon Web Services\",\n \"contributors\": [\n \"Sandra McMullen <mcmuls@amazon.com>\",\n \"William Armiros <armiros@amazon.com>\",\n \"Moritz Onken <onken@netcubed.de>\"\n ],\n \"files\": [\n \"dist/lib/**/*\",\n \"LICENSE\",\n \"README.md\"\n ],\n \"main\": \"dist/lib/index.js\",\n \"types\": \"dist/lib/index.d.ts\",\n \"engines\": {\n \"node\": \">= 14.x\"\n },\n \"directories\": {\n \"test\": \"test\"\n },\n \"//\": \"@types/cls-hooked is exposed in API so must be in dependencies, not devDependencies\",\n \"dependencies\": {\n \"@aws-sdk/service-error-classification\": \"^3.4.1\",\n \"@aws-sdk/types\": \"^3.4.1\",\n \"@types/cls-hooked\": \"^4.3.3\",\n \"atomic-batcher\": \"^1.0.2\",\n \"cls-hooked\": \"^4.2.2\",\n \"semver\": \"^7.3.8\"\n },\n \"scripts\": {\n \"prepare\": \"npm run compile\",\n \"compile\": \"tsc && npm run copy-lib && npm run copy-test\",\n \"copy-lib\": \"find lib -type f \\\\( -name '*.d.ts' -o -name '*.json' \\\\) | xargs -I % ../../scripts/cp-with-structure.sh % dist\",\n \"copy-test\": \"find test -name '*.json' | xargs -I % ../../scripts/cp-with-structure.sh % dist\",\n \"lint\": \"eslint .\",\n \"lint:fix\": \"eslint . --fix\",\n \"test\": \"npm run compile && mocha --recursive ./dist/test/ -R spec && tsd && mocha --recursive ./dist/test_async/ -R spec\",\n \"test-d\": \"tsd\",\n \"test-async\": \"npm run compile && mocha --recursive ./dist/test_async/ -R spec\",\n \"clean\": \"rm -rf dist && rm -rf node_modules\",\n \"testcov\": \"nyc npm run test\",\n \"reportcov\": \"nyc report --reporter=text-lcov > coverage.lcov && codecov\"\n },\n \"keywords\": [\n \"amazon\",\n \"api\",\n \"aws\",\n \"core\",\n \"xray\",\n \"x-ray\",\n \"x ray\"\n ],\n \"license\": \"Apache-2.0\",\n \"repository\": \"https://github.com/aws/aws-xray-sdk-node/tree/master/packages/core\",\n \"gitHead\": \"0579d9c75e08f8747f9eb87596bea58a7d7e9e25\"\n}\n", "\"use strict\";\nvar http = require('http');\nvar Plugin = {\n METADATA_TIMEOUT: 1000,\n /**\n * Asynchronously retrieves metadata from on-instance endpoint with an HTTP request using retries for\n * requests that time out.\n * @param {object} options - The HTTP options to make the request with\n * @param {function} callback - callback to plugin\n */\n getPluginMetadata: function (options, callback) {\n const METADATA_RETRY_TIMEOUT = 250; // Millis\n const METADATA_RETRIES = 5;\n var retries = METADATA_RETRIES;\n var getMetadata = function () {\n var httpReq = http.__request ? http.__request : http.request;\n var req = httpReq(options, function (res) {\n var body = '';\n res.on('data', function (chunk) {\n body += chunk;\n });\n res.on('end', function () {\n if (this.statusCode === 200 || this.statusCode === 300) {\n try {\n body = JSON.parse(body);\n }\n catch (e) {\n callback(e);\n return;\n }\n callback(null, body);\n }\n else if (retries > 0 && Math.floor(this.statusCode / 100) === 5) {\n retries--;\n setTimeout(getMetadata, METADATA_RETRY_TIMEOUT);\n }\n else {\n callback(new Error(`Failed to retrieve metadata with options: ${options}`));\n }\n });\n });\n req.on('error', function (err) {\n callback(err);\n });\n req.on('timeout', function () {\n req.abort();\n });\n req.setTimeout(Plugin.METADATA_TIMEOUT);\n req.end();\n };\n getMetadata();\n }\n};\nmodule.exports = Plugin;\n", "\"use strict\";\nvar Plugin = require('./plugin');\nvar logger = require('../../logger');\nvar http = require('http');\nvar EC2Plugin = {\n /**\n * A function to get the instance data from the EC2 metadata service.\n * @param {function} callback - The callback for the plugin loader.\n */\n getData: function (callback) {\n const METADATA_PATH = '/latest/dynamic/instance-identity/document';\n function populateMetadata(token) {\n const options = getOptions(METADATA_PATH, 'GET', token ? { 'X-aws-ec2-metadata-token': token } : {});\n Plugin.getPluginMetadata(options, function (err, data) {\n if (err || !data) {\n logger.getLogger().error('Error loading EC2 plugin metadata: ', err ? err.toString() : 'Could not retrieve data from IMDS.');\n callback();\n return;\n }\n const metadata = {\n ec2: {\n instance_id: data.instanceId,\n availability_zone: data.availabilityZone,\n instance_size: data.instanceType,\n ami_id: data.imageId\n }\n };\n callback(metadata);\n });\n }\n /**\n * This kicks off a requet to get a token used for requests to IMDSv2. If the request for the token\n * fails, we fall back to IMDSv1. Otherwise, the token will be used for an IMDSv2 request.\n */\n getToken(function (token) {\n if (token === null) {\n logger.getLogger().debug('EC2Plugin failed to get token from IMDSv2. Falling back to IMDSv1.');\n }\n populateMetadata(token);\n });\n },\n originName: 'AWS::EC2::Instance'\n};\n/**\n * Asynchronously retrieves a token used in requests to EC2 instance metadata service.\n * @param {function} callback - callback to plugin\n */\nfunction getToken(callback) {\n const httpReq = http.__request ? http.__request : http.request;\n const TTL = 60; //seconds\n const TOKEN_PATH = '/latest/api/token';\n const options = getOptions(TOKEN_PATH, 'PUT', {\n 'X-aws-ec2-metadata-token-ttl-seconds': TTL\n });\n let req = httpReq(options, function (res) {\n let body = '';\n res.on('data', function (chunk) {\n body += chunk;\n });\n res.on('end', function () {\n if (this.statusCode === 200 || this.statusCode === 300) {\n callback(body);\n }\n else {\n callback(null);\n }\n });\n });\n req.on('error', function () {\n callback(null);\n });\n req.on('timeout', function () {\n req.abort();\n callback(null);\n });\n req.setTimeout(Plugin.METADATA_TIMEOUT);\n req.end();\n}\nfunction getOptions(path, method, headers) {\n if (!method) {\n method = 'GET';\n }\n if (!headers) {\n headers = {};\n }\n return {\n host: '169.254.169.254',\n path: path,\n method: method,\n headers: headers\n };\n}\nmodule.exports = EC2Plugin;\n", "\"use strict\";\nvar os = require('os');\nvar ECSPlugin = {\n /**\n * A function to get the instance data from the ECS instance.\n * @param {function} callback - The callback for the plugin loader.\n */\n getData: function (callback) {\n callback({ ecs: { container: os.hostname() } });\n },\n originName: 'AWS::ECS::Container'\n};\nmodule.exports = ECSPlugin;\n", "\"use strict\";\nvar fs = require('fs');\nvar logger = require('../../logger');\nvar ENV_CONFIG_LOCATION = '/var/elasticbeanstalk/xray/environment.conf';\nvar ElasticBeanstalkPlugin = {\n /**\n * A function to get data from the Elastic Beanstalk environment configuration file.\n * @param {function} callback - The callback for the plugin loader.\n */\n getData: function (callback) {\n fs.readFile(ENV_CONFIG_LOCATION, 'utf8', function (err, rawData) {\n if (err) {\n logger.getLogger().error('Error loading Elastic Beanstalk plugin:', err.stack);\n callback();\n }\n else {\n var data = JSON.parse(rawData);\n var metadata = {\n elastic_beanstalk: {\n environment: data.environment_name,\n version_label: data.version_label,\n deployment_id: data.deployment_id\n }\n };\n callback(metadata);\n }\n });\n },\n originName: 'AWS::ElasticBeanstalk::Environment'\n};\nmodule.exports = ElasticBeanstalkPlugin;\n", "{\n \"services\": {\n \"dynamodb\": {\n \"operations\": {\n \"batchGetItem\": {\n \"request_descriptors\": {\n \"RequestItems\": {\n \"get_keys\": true,\n \"rename_to\": \"table_names\"\n }\n },\n \"response_parameters\": [\n \"ConsumedCapacity\"\n ]\n },\n \"batchWriteItem\": {\n \"request_descriptors\": {\n \"RequestItems\": {\n \"get_keys\": true,\n \"rename_to\": \"table_names\"\n }\n },\n \"response_parameters\": [\n \"ConsumedCapacity\",\n \"ItemCollectionMetrics\"\n ]\n },\n \"createTable\": {\n \"request_parameters\": [\n \"GlobalSecondaryIndexes\",\n \"LocalSecondaryIndexes\",\n \"ProvisionedThroughput\",\n \"TableName\"\n ]\n },\n \"deleteItem\": {\n \"request_parameters\": [\n \"TableName\"\n ],\n \"response_parameters\": [\n \"ConsumedCapacity\",\n \"ItemCollectionMetrics\"\n ]\n },\n \"deleteTable\": {\n \"request_parameters\": [\n \"TableName\"\n ]\n },\n \"describeTable\": {\n \"request_parameters\": [\n \"TableName\"\n ]\n },\n \"getItem\": {\n \"request_parameters\": [\n \"ConsistentRead\",\n \"ProjectionExpression\",\n \"TableName\"\n ],\n \"response_parameters\": [\n \"ConsumedCapacity\"\n ]\n },\n \"listTables\": {\n \"request_parameters\": [\n \"ExclusiveStartTableName\",\n \"Limit\"\n ],\n \"response_descriptors\": {\n \"TableNames\": {\n \"list\": true,\n \"get_count\": true,\n \"rename_to\": \"table_count\"\n }\n }\n },\n \"putItem\": {\n \"request_parameters\": [\n \"TableName\"\n ],\n \"response_parameters\": [\n \"ConsumedCapacity\",\n \"ItemCollectionMetrics\"\n ]\n },\n \"query\": {\n \"request_parameters\": [\n \"AttributesToGet\",\n \"ConsistentRead\",\n \"IndexName\",\n \"Limit\",\n \"ProjectionExpression\",\n \"ScanIndexForward\",\n \"Select\",\n \"TableName\"\n ],\n \"response_parameters\": [\n \"ConsumedCapacity\"\n ]\n },\n \"scan\": {\n \"request_parameters\": [\n \"AttributesToGet\",\n \"ConsistentRead\",\n \"IndexName\",\n \"Limit\",\n \"ProjectionExpression\",\n \"Segment\",\n \"Select\",\n \"TableName\",\n \"TotalSegments\"\n ],\n \"response_parameters\": [\n \"ConsumedCapacity\",\n \"Count\",\n \"ScannedCount\"\n ]\n },\n \"updateItem\": {\n \"request_parameters\": [\n \"TableName\"\n ],\n \"response_parameters\": [\n \"ConsumedCapacity\",\n \"ItemCollectionMetrics\"\n ]\n },\n \"updateTable\": {\n \"request_parameters\": [\n \"AttributeDefinitions\",\n \"GlobalSecondaryIndexUpdates\",\n \"ProvisionedThroughput\",\n \"TableName\"\n ]\n }\n }\n },\n \"sqs\": {\n \"operations\": {\n \"addPermission\": {\n \"request_parameters\": [\n \"Label\",\n \"QueueUrl\"\n ]\n },\n \"changeMessageVisibility\": {\n \"request_parameters\": [\n \"QueueUrl\",\n \"VisibilityTimeout\"\n ]\n },\n \"changeMessageVisibilityBatch\": {\n \"request_parameters\": [\n \"QueueUrl\"\n ],\n \"response_parameters\": [\n \"Failed\"\n ]\n },\n \"createQueue\": {\n \"request_parameters\": [\n \"Attributes\",\n \"QueueName\"\n ]\n },\n \"deleteMessage\": {\n \"request_parameters\": [\n \"QueueUrl\"\n ]\n },\n \"deleteMessageBatch\": {\n \"request_parameters\": [\n \"QueueUrl\"\n ],\n \"response_parameters\": [\n \"Failed\"\n ]\n },\n \"deleteQueue\": {\n \"request_parameters\": [\n \"QueueUrl\"\n ]\n },\n \"getQueueAttributes\": {\n \"request_parameters\": [\n \"QueueUrl\"\n ],\n \"response_parameters\": [\n \"Attributes\"\n ]\n },\n \"getQueueUrl\": {\n \"request_parameters\": [\n \"QueueName\",\n \"QueueOwnerAWSAccountId\"\n ],\n \"response_parameters\": [\n \"QueueUrl\"\n ]\n },\n \"listDeadLetterSourceQueues\": {\n \"request_parameters\": [\n \"QueueUrl\"\n ],\n \"response_parameters\": [\n \"QueueUrls\"\n ]\n },\n \"listQueues\": {\n \"request_parameters\": [\n \"QueueNamePrefix\"\n ],\n \"response_descriptors\": {\n \"QueueUrls\": {\n \"list\": true,\n \"get_count\": true,\n \"rename_to\": \"queue_count\"\n }\n }\n },\n \"purgeQueue\": {\n \"request_parameters\": [\n \"QueueUrl\"\n ]\n },\n \"receiveMessage\": {\n \"request_parameters\": [\n \"AttributeNames\",\n \"MaxNumberOfMessages\",\n \"MessageAttributeNames\",\n \"QueueUrl\",\n \"VisibilityTimeout\",\n \"WaitTimeSeconds\"\n ],\n \"response_descriptors\": {\n \"Messages\": {\n \"list\": true,\n \"get_count\": true,\n \"rename_to\": \"message_count\"\n }\n }\n },\n \"removePermission\": {\n \"request_parameters\": [\n \"QueueUrl\"\n ]\n },\n \"sendMessage\": {\n \"request_parameters\": [\n \"DelaySeconds\",\n \"QueueUrl\"\n ],\n \"request_descriptors\": {\n \"MessageAttributes\": {\n \"get_keys\": true,\n \"rename_to\": \"message_attribute_names\"\n }\n },\n \"response_parameters\": [\n \"MessageId\"\n ]\n },\n \"sendMessageBatch\": {\n \"request_parameters\": [\n \"QueueUrl\"\n ],\n \"request_descriptors\": {\n \"Entries\": {\n \"list\": true,\n \"get_count\": true,\n \"rename_to\": \"message_count\"\n }\n },\n \"response_descriptors\": {\n \"Failed\": {\n \"list\": true,\n \"get_count\": true,\n \"rename_to\": \"failed_count\"\n },\n \"Successful\": {\n \"list\": true,\n \"get_count\": true,\n \"rename_to\": \"successful_count\"\n }\n }\n },\n \"setQueueAttributes\": {\n \"request_parameters\": [\n \"QueueUrl\"\n ],\n \"request_descriptors\": {\n \"Attributes\": {\n \"get_keys\": true,\n \"rename_to\": \"attribute_names\"\n }\n }\n }\n }\n },\n \"sns\": {\n \"operations\": {\n \"publish\": {\n \"request_parameters\": [\n \"TopicArn\"\n ]\n },\n \"publishBatch\": {\n \"request_parameters\": [\n \"TopicArn\"\n ]\n }\n }\n },\n \"lambda\": {\n \"operations\": {\n \"invoke\": {\n \"request_parameters\": [\n \"FunctionName\",\n \"InvocationType\",\n \"LogType\",\n \"Qualifier\"\n ],\n \"response_parameters\": [\n \"FunctionError\",\n \"StatusCode\"\n ]\n },\n \"invokeAsync\": {\n \"request_parameters\": [\n \"FunctionName\"\n ],\n \"response_parameters\": [\n \"Status\"\n ]\n }\n }\n },\n \"s3\": {\n \"operations\": {\n \"abortMultipartUpload\": {\n \"request_parameters\": [\n \"Key\"\n ],\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"completeMultipartUpload\": {\n \"request_parameters\": [\n \"Key\"\n ],\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"copyObject\": {\n \"request_parameters\": [\n \"CopySource\",\n \"Key\"\n ],\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"createBucket\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"createMultipartUpload\": {\n \"request_parameters\": [\n \"Key\"\n ],\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"deleteBucket\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"deleteBucketAnalyticsConfiguration\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"deleteBucketCors\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"deleteBucketEncryption\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"deleteBucketInventoryConfiguration\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"deleteBucketLifecycle\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"deleteBucketMetricsConfiguration\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"deleteBucketPolicy\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"deleteBucketReplication\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"deleteBucketTagging\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"deleteBucketWebsite\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"deleteObject\": {\n \"request_parameters\": [\n \"Key\",\n \"VersionId\"\n ],\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"deleteObjectTagging\": {\n \"request_parameters\": [\n \"Key\",\n \"VersionId\"\n ],\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"deleteObjects\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"getBucketAccelerateConfiguration\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"getBucketAcl\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"getBucketAnalyticsConfiguration\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"getBucketCors\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"getBucketEncryption\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"getBucketInventoryConfiguration\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"getBucketLifecycle\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"getBucketLifecycleConfiguration\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"getBucketLocation\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"getBucketLogging\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"getBucketMetricsConfiguration\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"getBucketNotification\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"getBucketNotificationConfiguration\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"getBucketPolicy\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"getBucketReplication\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"getBucketRequestPayment\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"getBucketTagging\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"getBucketVersioning\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"getBucketWebsite\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"getObject\": {\n \"request_parameters\": [\n \"Key\",\n \"VersionId\"\n ],\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"getObjectAcl\": {\n \"request_parameters\": [\n \"Key\",\n \"VersionId\"\n ],\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"getObjectTagging\": {\n \"request_parameters\": [\n \"Key\",\n \"VersionId\"\n ],\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"getObjectTorrent\": {\n \"request_parameters\": [\n \"Key\"\n ],\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"headBucket\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"headObject\": {\n \"request_parameters\": [\n \"Key\",\n \"VersionId\"\n ],\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"listBucketAnalyticsConfigurations\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"listBucketInventoryConfigurations\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"listBucketMetricsConfigurations\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"listMultipartUploads\": {\n \"request_parameters\": [\n \"Prefix\"\n ],\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"listObjectVersions\": {\n \"request_parameters\": [\n \"Prefix\"\n ],\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"listObjects\": {\n \"request_parameters\": [\n \"Prefix\"\n ],\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"listObjectsV2\": {\n \"request_parameters\": [\n \"Prefix\"\n ],\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"listParts\": {\n \"request_parameters\": [\n \"Key\"\n ],\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"putBucketAccelerateConfiguration\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"putBucketAcl\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"putBucketAnalyticsConfiguration\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"putBucketCors\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"putBucketEncryption\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"putBucketInventoryConfiguration\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"putBucketLifecycle\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"putBucketLifecycleConfiguration\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"putBucketLogging\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"putBucketMetricsConfiguration\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"putBucketNotification\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"putBucketNotificationConfiguration\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"putBucketPolicy\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"putBucketReplication\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"putBucketRequestPayment\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"putBucketTagging\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"putBucketVersioning\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"putBucketWebsite\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"putObject\": {\n \"request_parameters\": [\n \"Key\"\n ],\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"putObjectAcl\": {\n \"request_parameters\": [\n \"Key\",\n \"VersionId\"\n ],\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"putObjectTagging\": {\n \"request_parameters\": [\n \"Key\",\n \"VersionId\"\n ],\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"restoreObject\": {\n \"request_parameters\": [\n \"Key\",\n \"VersionId\"\n ],\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"uploadPart\": {\n \"request_parameters\": [\n \"Key\"\n ],\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"uploadPartCopy\": {\n \"request_parameters\": [\n \"CopySource\",\n \"Key\"\n ],\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n }\n }\n },\n \"sagemakerruntime\": {\n \"operations\": {\n \"invokeEndpoint\": {\n \"request_parameters\": [\n \"EndpointName\"\n ]\n }\n }\n }\n }\n}\n", "\"use strict\";\nvar fs = require('fs');\nvar logger = require('../logger');\nvar whitelist = require('../resources/aws_whitelist.json');\nvar paramTypes = {\n REQ_DESC: 'request_descriptors',\n REQ_PARAMS: 'request_parameters',\n RES_DESC: 'response_descriptors',\n RES_PARAMS: 'response_parameters'\n};\n/**\n * Represents a set of AWS services, operations and keys or params to capture.\n * @constructor\n * @param {string|Object} [source] - The location or source JSON object of the custom AWS whitelist file. If none is provided, the default file will be used.\n */\nfunction CallCapturer(source) {\n this.init(source);\n}\nCallCapturer.prototype.init = function init(source) {\n if (source) {\n if (typeof source === 'string') {\n logger.getLogger().info('Using custom AWS whitelist file: ' + source);\n this.services = loadWhitelist(JSON.parse(fs.readFileSync(source, 'utf8')));\n }\n else {\n logger.getLogger().info('Using custom AWS whitelist source.');\n this.services = loadWhitelist(source);\n }\n }\n else {\n this.services = whitelist.services;\n }\n};\nCallCapturer.prototype.append = function append(source) {\n var newServices = {};\n if (typeof source === 'string') {\n logger.getLogger().info('Appending AWS whitelist with custom file: ' + source);\n newServices = loadWhitelist(JSON.parse(fs.readFileSync(source, 'utf8')));\n }\n else {\n logger.getLogger().info('Appending AWS whitelist with a custom source.');\n newServices = loadWhitelist(source);\n }\n for (var attribute in newServices) {\n this.services[attribute] = newServices[attribute];\n }\n};\nCallCapturer.prototype.capture = function capture(serviceName, response) {\n var operation = response.request.operation;\n var call = this.services[serviceName] !== undefined ? this.services[serviceName].operations[operation] : null;\n if (call === null) {\n logger.getLogger().debug('Call \"' + serviceName + '.' + operation + '\" is not whitelisted for additional data capturing. Ignoring.');\n return;\n }\n var dataCaptured = {};\n for (var paramType in call) {\n var params = call[paramType];\n if (paramType === paramTypes.REQ_PARAMS) {\n captureCallParams(params, response.request.params, dataCaptured);\n }\n else if (paramType === paramTypes.REQ_DESC) {\n captureDescriptors(params, response.request.params, dataCaptured);\n }\n else if (paramType === paramTypes.RES_PARAMS) {\n if (response.data) {\n captureCallParams(params, response.data, dataCaptured);\n }\n }\n else if (paramType === paramTypes.RES_DESC) {\n if (response.data) {\n captureDescriptors(params, response.data, dataCaptured);\n }\n }\n else {\n logger.getLogger().error('Unknown parameter type \"' + paramType + '\". Must be \"request_descriptors\", \"response_descriptors\", ' +\n '\"request_parameters\" or \"response_parameters\".');\n }\n }\n return dataCaptured;\n};\nfunction captureCallParams(params, call, data) {\n params.forEach(function (param) {\n if (typeof call[param] !== 'undefined') {\n var formatted = toSnakeCase(param);\n this[formatted] = call[param];\n }\n }, data);\n}\nfunction captureDescriptors(descriptors, params, data) {\n for (var paramName in descriptors) {\n var attributes = descriptors[paramName];\n if (typeof params[paramName] !== 'undefined') {\n var paramData;\n if (attributes.list && attributes.get_count) {\n paramData = params[paramName] ? params[paramName].length : 0;\n }\n else {\n paramData = attributes.get_keys === true ? Object.keys(params[paramName]) : params[paramName];\n }\n if (typeof attributes.rename_to === 'string') {\n data[attributes.rename_to] = paramData;\n }\n else {\n var formatted = toSnakeCase(paramName);\n data[formatted] = paramData;\n }\n }\n }\n}\nfunction toSnakeCase(param) {\n if (param === 'IPAddress') {\n return 'ip_address';\n }\n else {\n return param.split(/(?=[A-Z])/).join('_').toLowerCase();\n }\n}\nfunction loadWhitelist(source) {\n var doc = source;\n if (doc.services === undefined) {\n throw new Error('Document formatting is incorrect. Expecting \"services\" param.');\n }\n return doc.services;\n}\nmodule.exports = CallCapturer;\n", "\"use strict\";\nvar CallCapturer = require('../../patchers/call_capturer.js');\nvar capturer = new CallCapturer();\n/**\n * Represents a AWS client call. Automatically captures data from the supplied response object,\n * Data captured depends on the whitelisting file supplied.\n * The base whitelisting file can be found at /lib/resources/aws_whitelist.json.\n * @constructor\n * @param {any} res - The response object from the AWS call. Typed as any to avoid AWS SDK dependency. Otherwise would be AWS.Response.\n * @param {string} serviceName - The service name of the AWS client.\n * @see https://github.com/aws/aws-sdk-js/blob/master/lib/response.js\n */\nfunction Aws(res, serviceName) {\n this.init(res, serviceName);\n}\nAws.prototype.init = function init(res, serviceName) {\n //TODO: account ID\n this.operation = formatOperation(res.request.operation) || '';\n if (res && res.request && res.request.httpRequest && res.request.httpRequest.region) {\n this.region = res.request.httpRequest.region;\n }\n if (res && res.requestId) {\n this.request_id = res.requestId;\n }\n this.retries = res.retryCount || 0;\n if (res.extendedRequestId && serviceName && serviceName.toLowerCase() === 's3') {\n this.id_2 = res.extendedRequestId;\n }\n if (serviceName) {\n this.addData(capturer.capture(serviceName.toLowerCase(), res));\n }\n};\nAws.prototype.addData = function addData(data) {\n for (var attribute in data) {\n this[attribute] = data[attribute];\n }\n};\n/**\n * Overrides the default whitelisting file to specify what params to capture on each AWS Service call.\n * @param {string|Object} source - The path to the custom whitelist file, or a whitelist source JSON object.\n * @exports setAWSWhitelist\n */\nvar setAWSWhitelist = function setAWSWhitelist(source) {\n if (!source || source instanceof String || !(typeof source === 'string' || (source instanceof Object))) {\n throw new Error('Please specify a path to the local whitelist file, or supply a whitelist source object.');\n }\n capturer = new CallCapturer(source);\n};\n/**\n * Appends to the default whitelisting file to specify what params to capture on each AWS Service call.\n * @param {string|Object} source - The path to the custom whitelist file, or a whitelist source JSON object.\n * @exports appendAWSWhitelist\n */\nvar appendAWSWhitelist = function appendAWSWhitelist(source) {\n if (!source || source instanceof String || !(typeof source === 'string' || (source instanceof Object))) {\n throw new Error('Please specify a path to the local whitelist file, or supply a whitelist source object.');\n }\n capturer.append(source);\n};\nfunction formatOperation(operation) {\n if (!operation) {\n return;\n }\n return operation.charAt(0).toUpperCase() + operation.slice(1);\n}\nmodule.exports = Aws;\nmodule.exports.appendAWSWhitelist = appendAWSWhitelist;\nmodule.exports.setAWSWhitelist = setAWSWhitelist;\n", "\"use strict\";\n/**\n * Capture module.\n * @module capture\n */\nvar contextUtils = require('./context_utils');\nvar logger = require('./logger');\n/**\n * Wrap to automatically capture information for the segment.\n * @param {string} name - The name of the new subsegment.\n * @param {function} fcn - The function context to wrap. Can take a single 'subsegment' argument.\n * @param {Segment|Subsegment} [parent] - The parent for the new subsegment, for manual mode.\n * @alias module:capture.captureFunc\n * @return {*} - Returns the result if any by executing the provided function.\n */\nvar captureFunc = function captureFunc(name, fcn, parent) {\n validate(name, fcn);\n var current, executeFcn;\n var parentSeg = contextUtils.resolveSegment(parent);\n if (!parentSeg) {\n logger.getLogger().warn('Failed to capture function.');\n return fcn();\n }\n current = parentSeg.addNewSubsegment(name);\n executeFcn = captureFcn(fcn, current);\n try {\n const response = executeFcn(current);\n current.close();\n return response;\n }\n catch (e) {\n current.close(e);\n throw (e);\n }\n};\n/**\n * Wrap to automatically capture information for the sub/segment. You must close the segment\n * manually from within the function.\n * @param {string} name - The name of the new subsegment.\n * @param {function} fcn - The function context to wrap. Must take a single 'subsegment' argument and call 'subsegment.close([optional error])' when the async function completes.\n * @param {Segment|Subsegment} [parent] - The parent for the new subsegment, for manual mode.\n * @alias module:capture.captureAsyncFunc\n * @return {*} - Returns a promise by executing the provided async function.\n */\nvar captureAsyncFunc = function captureAsyncFunc(name, fcn, parent) {\n validate(name, fcn);\n var current, executeFcn;\n var parentSeg = contextUtils.resolveSegment(parent);\n if (!parentSeg) {\n logger.getLogger().warn('Failed to capture async function.');\n return fcn();\n }\n current = parentSeg.addNewSubsegment(name);\n executeFcn = captureFcn(fcn, current);\n try {\n return executeFcn(current);\n }\n catch (e) {\n current.close(e);\n throw (e);\n }\n};\n/**\n * Wrap to automatically capture information for the sub/segment. This wraps the callback and returns a function.\n * when executed, all arguments are passed through accordingly. An additional argument is appended to gain access to the newly created subsegment.\n * For this reason, always call the captured callback with the full list of arguments.\n * @param {string} name - The name of the new subsegment.\n * @param {function} fcn - The function context to wrap. Can take a single 'subsegment' argument.\n * @param {Segment|Subsegment} [parent] - The parent for the new subsegment, for manual mode.\n * @alias module:capture.captureCallbackFunc\n */\nvar captureCallbackFunc = function captureCallbackFunc(name, fcn, parent) {\n validate(name, fcn);\n var base = contextUtils.resolveSegment(parent);\n if (!base) {\n logger.getLogger().warn('Failed to capture callback function.');\n return fcn;\n }\n base.incrementCounter();\n return function () {\n var parentSeg = contextUtils.resolveSegment(parent);\n var args = Array.prototype.slice.call(arguments);\n captureFunc(name, fcn.bind.apply(fcn, [null].concat(args)), parentSeg);\n base.decrementCounter();\n }.bind(this);\n};\nfunction captureFcn(fcn, current) {\n var executeFcn;\n if (contextUtils.isAutomaticMode()) {\n var session = contextUtils.getNamespace();\n var contextFcn = function () {\n var value;\n session.run(function () {\n contextUtils.setSegment(current);\n value = fcn(current);\n });\n return value;\n };\n executeFcn = contextFcn;\n }\n else {\n executeFcn = fcn;\n }\n return executeFcn;\n}\nfunction validate(name, fcn) {\n var error;\n if (!name || typeof name !== 'string') {\n error = 'Param \"name\" must be a non-empty string.';\n logger.getLogger().error(error);\n throw new Error(error);\n }\n else if (typeof fcn !== 'function') {\n error = 'Param \"fcn\" must be a function.';\n logger.getLogger().error(error);\n throw new Error(error);\n }\n}\nmodule.exports.captureFunc = captureFunc;\nmodule.exports.captureAsyncFunc = captureAsyncFunc;\nmodule.exports.captureCallbackFunc = captureCallbackFunc;\n", "// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nconst SEMVER_SPEC_VERSION = '2.0.0'\n\nconst MAX_LENGTH = 256\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n/* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nconst MAX_SAFE_COMPONENT_LENGTH = 16\n\n// Max safe length for a build identifier. The max length minus 6 characters for\n// the shortest version with a build 0.0.0+BUILD.\nconst MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6\n\nconst RELEASE_TYPES = [\n 'major',\n 'premajor',\n 'minor',\n 'preminor',\n 'patch',\n 'prepatch',\n 'prerelease',\n]\n\nmodule.exports = {\n MAX_LENGTH,\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_SAFE_INTEGER,\n RELEASE_TYPES,\n SEMVER_SPEC_VERSION,\n FLAG_INCLUDE_PRERELEASE: 0b001,\n FLAG_LOOSE: 0b010,\n}\n", "const debug = (\n typeof process === 'object' &&\n process.env &&\n process.env.NODE_DEBUG &&\n /\\bsemver\\b/i.test(process.env.NODE_DEBUG)\n) ? (...args) => console.error('SEMVER', ...args)\n : () => {}\n\nmodule.exports = debug\n", "const {\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_LENGTH,\n} = require('./constants')\nconst debug = require('./debug')\nexports = module.exports = {}\n\n// The actual regexps go on exports.re\nconst re = exports.re = []\nconst safeRe = exports.safeRe = []\nconst src = exports.src = []\nconst t = exports.t = {}\nlet R = 0\n\nconst LETTERDASHNUMBER = '[a-zA-Z0-9-]'\n\n// Replace some greedy regex tokens to prevent regex dos issues. These regex are\n// used internally via the safeRe object since all inputs in this library get\n// normalized first to trim and collapse all extra whitespace. The original\n// regexes are exported for userland consumption and lower level usage. A\n// future breaking change could export the safer regex only with a note that\n// all input should have extra whitespace removed.\nconst safeRegexReplacements = [\n ['\\\\s', 1],\n ['\\\\d', MAX_LENGTH],\n [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH],\n]\n\nconst makeSafeRegex = (value) => {\n for (const [token, max] of safeRegexReplacements) {\n value = value\n .split(`${token}*`).join(`${token}{0,${max}}`)\n .split(`${token}+`).join(`${token}{1,${max}}`)\n }\n return value\n}\n\nconst createToken = (name, value, isGlobal) => {\n const safe = makeSafeRegex(value)\n const index = R++\n debug(name, index, value)\n t[name] = index\n src[index] = value\n re[index] = new RegExp(value, isGlobal ? 'g' : undefined)\n safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined)\n}\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\ncreateToken('NUMERICIDENTIFIER', '0|[1-9]\\\\d*')\ncreateToken('NUMERICIDENTIFIERLOOSE', '\\\\d+')\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\ncreateToken('NONNUMERICIDENTIFIER', `\\\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`)\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\ncreateToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n\ncreateToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER]\n}|${src[t.NONNUMERICIDENTIFIER]})`)\n\ncreateToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE]\n}|${src[t.NONNUMERICIDENTIFIER]})`)\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\ncreateToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIER]})*))`)\n\ncreateToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`)\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\ncreateToken('BUILDIDENTIFIER', `${LETTERDASHNUMBER}+`)\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\ncreateToken('BUILD', `(?:\\\\+(${src[t.BUILDIDENTIFIER]\n}(?:\\\\.${src[t.BUILDIDENTIFIER]})*))`)\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups. The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\ncreateToken('FULLPLAIN', `v?${src[t.MAINVERSION]\n}${src[t.PRERELEASE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('FULL', `^${src[t.FULLPLAIN]}$`)\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\ncreateToken('LOOSEPLAIN', `[v=\\\\s]*${src[t.MAINVERSIONLOOSE]\n}${src[t.PRERELEASELOOSE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`)\n\ncreateToken('GTLT', '((?:<|>)?=?)')\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifer, meaning \"any version\"\n// Only the first item is strictly required.\ncreateToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`)\ncreateToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\\\*`)\n\ncreateToken('XRANGEPLAIN', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:${src[t.PRERELEASE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGEPLAINLOOSE', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:${src[t.PRERELEASELOOSE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAIN]}$`)\ncreateToken('XRANGELOOSE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\ncreateToken('COERCE', `${'(^|[^\\\\d])' +\n '(\\\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n `(?:$|[^\\\\d])`)\ncreateToken('COERCERTL', src[t.COERCE], true)\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\ncreateToken('LONETILDE', '(?:~>?)')\n\ncreateToken('TILDETRIM', `(\\\\s*)${src[t.LONETILDE]}\\\\s+`, true)\nexports.tildeTrimReplace = '$1~'\n\ncreateToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\ncreateToken('LONECARET', '(?:\\\\^)')\n\ncreateToken('CARETTRIM', `(\\\\s*)${src[t.LONECARET]}\\\\s+`, true)\nexports.caretTrimReplace = '$1^'\n\ncreateToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\ncreateToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\\\s*(${src[t.LOOSEPLAIN]})$|^$`)\ncreateToken('COMPARATOR', `^${src[t.GTLT]}\\\\s*(${src[t.FULLPLAIN]})$|^$`)\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\ncreateToken('COMPARATORTRIM', `(\\\\s*)${src[t.GTLT]\n}\\\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true)\nexports.comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\ncreateToken('HYPHENRANGE', `^\\\\s*(${src[t.XRANGEPLAIN]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAIN]})` +\n `\\\\s*$`)\n\ncreateToken('HYPHENRANGELOOSE', `^\\\\s*(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s*$`)\n\n// Star ranges basically just allow anything at all.\ncreateToken('STAR', '(<|>)?=?\\\\s*\\\\*')\n// >=0.0.0 is like a star\ncreateToken('GTE0', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0\\\\s*$')\ncreateToken('GTE0PRE', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0-0\\\\s*$')\n", "// parse out just the options we care about\nconst looseOption = Object.freeze({ loose: true })\nconst emptyOpts = Object.freeze({ })\nconst parseOptions = options => {\n if (!options) {\n return emptyOpts\n }\n\n if (typeof options !== 'object') {\n return looseOption\n }\n\n return options\n}\nmodule.exports = parseOptions\n", "const numeric = /^[0-9]+$/\nconst compareIdentifiers = (a, b) => {\n const anum = numeric.test(a)\n const bnum = numeric.test(b)\n\n if (anum && bnum) {\n a = +a\n b = +b\n }\n\n return a === b ? 0\n : (anum && !bnum) ? -1\n : (bnum && !anum) ? 1\n : a < b ? -1\n : 1\n}\n\nconst rcompareIdentifiers = (a, b) => compareIdentifiers(b, a)\n\nmodule.exports = {\n compareIdentifiers,\n rcompareIdentifiers,\n}\n", "const debug = require('../internal/debug')\nconst { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst parseOptions = require('../internal/parse-options')\nconst { compareIdentifiers } = require('../internal/identifiers')\nclass SemVer {\n constructor (version, options) {\n options = parseOptions(options)\n\n if (version instanceof SemVer) {\n if (version.loose === !!options.loose &&\n version.includePrerelease === !!options.includePrerelease) {\n return version\n } else {\n version = version.version\n }\n } else if (typeof version !== 'string') {\n throw new TypeError(`Invalid version. Must be a string. Got type \"${typeof version}\".`)\n }\n\n if (version.length > MAX_LENGTH) {\n throw new TypeError(\n `version is longer than ${MAX_LENGTH} characters`\n )\n }\n\n debug('SemVer', version, options)\n this.options = options\n this.loose = !!options.loose\n // this isn't actually relevant for versions, but keep it so that we\n // don't run into trouble passing this.options around.\n this.includePrerelease = !!options.includePrerelease\n\n const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])\n\n if (!m) {\n throw new TypeError(`Invalid Version: ${version}`)\n }\n\n this.raw = version\n\n // these are actually numbers\n this.major = +m[1]\n this.minor = +m[2]\n this.patch = +m[3]\n\n if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n throw new TypeError('Invalid major version')\n }\n\n if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n throw new TypeError('Invalid minor version')\n }\n\n if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n throw new TypeError('Invalid patch version')\n }\n\n // numberify any prerelease numeric ids\n if (!m[4]) {\n this.prerelease = []\n } else {\n this.prerelease = m[4].split('.').map((id) => {\n if (/^[0-9]+$/.test(id)) {\n const num = +id\n if (num >= 0 && num < MAX_SAFE_INTEGER) {\n return num\n }\n }\n return id\n })\n }\n\n this.build = m[5] ? m[5].split('.') : []\n this.format()\n }\n\n format () {\n this.version = `${this.major}.${this.minor}.${this.patch}`\n if (this.prerelease.length) {\n this.version += `-${this.prerelease.join('.')}`\n }\n return this.version\n }\n\n toString () {\n return this.version\n }\n\n compare (other) {\n debug('SemVer.compare', this.version, this.options, other)\n if (!(other instanceof SemVer)) {\n if (typeof other === 'string' && other === this.version) {\n return 0\n }\n other = new SemVer(other, this.options)\n }\n\n if (other.version === this.version) {\n return 0\n }\n\n return this.compareMain(other) || this.comparePre(other)\n }\n\n compareMain (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n return (\n compareIdentifiers(this.major, other.major) ||\n compareIdentifiers(this.minor, other.minor) ||\n compareIdentifiers(this.patch, other.patch)\n )\n }\n\n comparePre (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n // NOT having a prerelease is > having one\n if (this.prerelease.length && !other.prerelease.length) {\n return -1\n } else if (!this.prerelease.length && other.prerelease.length) {\n return 1\n } else if (!this.prerelease.length && !other.prerelease.length) {\n return 0\n }\n\n let i = 0\n do {\n const a = this.prerelease[i]\n const b = other.prerelease[i]\n debug('prerelease compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n compareBuild (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n let i = 0\n do {\n const a = this.build[i]\n const b = other.build[i]\n debug('prerelease compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n // preminor will bump the version up to the next minor release, and immediately\n // down to pre-release. premajor and prepatch work the same way.\n inc (release, identifier, identifierBase) {\n switch (release) {\n case 'premajor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor = 0\n this.major++\n this.inc('pre', identifier, identifierBase)\n break\n case 'preminor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor++\n this.inc('pre', identifier, identifierBase)\n break\n case 'prepatch':\n // If this is already a prerelease, it will bump to the next version\n // drop any prereleases that might already exist, since they are not\n // relevant at this point.\n this.prerelease.length = 0\n this.inc('patch', identifier, identifierBase)\n this.inc('pre', identifier, identifierBase)\n break\n // If the input is a non-prerelease version, this acts the same as\n // prepatch.\n case 'prerelease':\n if (this.prerelease.length === 0) {\n this.inc('patch', identifier, identifierBase)\n }\n this.inc('pre', identifier, identifierBase)\n break\n\n case 'major':\n // If this is a pre-major version, bump up to the same major version.\n // Otherwise increment major.\n // 1.0.0-5 bumps to 1.0.0\n // 1.1.0 bumps to 2.0.0\n if (\n this.minor !== 0 ||\n this.patch !== 0 ||\n this.prerelease.length === 0\n ) {\n this.major++\n }\n this.minor = 0\n this.patch = 0\n this.prerelease = []\n break\n case 'minor':\n // If this is a pre-minor version, bump up to the same minor version.\n // Otherwise increment minor.\n // 1.2.0-5 bumps to 1.2.0\n // 1.2.1 bumps to 1.3.0\n if (this.patch !== 0 || this.prerelease.length === 0) {\n this.minor++\n }\n this.patch = 0\n this.prerelease = []\n break\n case 'patch':\n // If this is not a pre-release version, it will increment the patch.\n // If it is a pre-release it will bump up to the same patch version.\n // 1.2.0-5 patches to 1.2.0\n // 1.2.0 patches to 1.2.1\n if (this.prerelease.length === 0) {\n this.patch++\n }\n this.prerelease = []\n break\n // This probably shouldn't be used publicly.\n // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.\n case 'pre': {\n const base = Number(identifierBase) ? 1 : 0\n\n if (!identifier && identifierBase === false) {\n throw new Error('invalid increment argument: identifier is empty')\n }\n\n if (this.prerelease.length === 0) {\n this.prerelease = [base]\n } else {\n let i = this.prerelease.length\n while (--i >= 0) {\n if (typeof this.prerelease[i] === 'number') {\n this.prerelease[i]++\n i = -2\n }\n }\n if (i === -1) {\n // didn't increment anything\n if (identifier === this.prerelease.join('.') && identifierBase === false) {\n throw new Error('invalid increment argument: identifier already exists')\n }\n this.prerelease.push(base)\n }\n }\n if (identifier) {\n // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n let prerelease = [identifier, base]\n if (identifierBase === false) {\n prerelease = [identifier]\n }\n if (compareIdentifiers(this.prerelease[0], identifier) === 0) {\n if (isNaN(this.prerelease[1])) {\n this.prerelease = prerelease\n }\n } else {\n this.prerelease = prerelease\n }\n }\n break\n }\n default:\n throw new Error(`invalid increment argument: ${release}`)\n }\n this.raw = this.format()\n if (this.build.length) {\n this.raw += `+${this.build.join('.')}`\n }\n return this\n }\n}\n\nmodule.exports = SemVer\n", "const SemVer = require('../classes/semver')\nconst parse = (version, options, throwErrors = false) => {\n if (version instanceof SemVer) {\n return version\n }\n try {\n return new SemVer(version, options)\n } catch (er) {\n if (!throwErrors) {\n return null\n }\n throw er\n }\n}\n\nmodule.exports = parse\n", "const parse = require('./parse')\nconst valid = (version, options) => {\n const v = parse(version, options)\n return v ? v.version : null\n}\nmodule.exports = valid\n", "const parse = require('./parse')\nconst clean = (version, options) => {\n const s = parse(version.trim().replace(/^[=v]+/, ''), options)\n return s ? s.version : null\n}\nmodule.exports = clean\n", "const SemVer = require('../classes/semver')\n\nconst inc = (version, release, options, identifier, identifierBase) => {\n if (typeof (options) === 'string') {\n identifierBase = identifier\n identifier = options\n options = undefined\n }\n\n try {\n return new SemVer(\n version instanceof SemVer ? version.version : version,\n options\n ).inc(release, identifier, identifierBase).version\n } catch (er) {\n return null\n }\n}\nmodule.exports = inc\n", "const parse = require('./parse.js')\n\nconst diff = (version1, version2) => {\n const v1 = parse(version1, null, true)\n const v2 = parse(version2, null, true)\n const comparison = v1.compare(v2)\n\n if (comparison === 0) {\n return null\n }\n\n const v1Higher = comparison > 0\n const highVersion = v1Higher ? v1 : v2\n const lowVersion = v1Higher ? v2 : v1\n const highHasPre = !!highVersion.prerelease.length\n const lowHasPre = !!lowVersion.prerelease.length\n\n if (lowHasPre && !highHasPre) {\n // Going from prerelease -> no prerelease requires some special casing\n\n // If the low version has only a major, then it will always be a major\n // Some examples:\n // 1.0.0-1 -> 1.0.0\n // 1.0.0-1 -> 1.1.1\n // 1.0.0-1 -> 2.0.0\n if (!lowVersion.patch && !lowVersion.minor) {\n return 'major'\n }\n\n // Otherwise it can be determined by checking the high version\n\n if (highVersion.patch) {\n // anything higher than a patch bump would result in the wrong version\n return 'patch'\n }\n\n if (highVersion.minor) {\n // anything higher than a minor bump would result in the wrong version\n return 'minor'\n }\n\n // bumping major/minor/patch all have same result\n return 'major'\n }\n\n // add the `pre` prefix if we are going to a prerelease version\n const prefix = highHasPre ? 'pre' : ''\n\n if (v1.major !== v2.major) {\n return prefix + 'major'\n }\n\n if (v1.minor !== v2.minor) {\n return prefix + 'minor'\n }\n\n if (v1.patch !== v2.patch) {\n return prefix + 'patch'\n }\n\n // high and low are preleases\n return 'prerelease'\n}\n\nmodule.exports = diff\n", "const SemVer = require('../classes/semver')\nconst major = (a, loose) => new SemVer(a, loose).major\nmodule.exports = major\n", "const SemVer = require('../classes/semver')\nconst minor = (a, loose) => new SemVer(a, loose).minor\nmodule.exports = minor\n", "const SemVer = require('../classes/semver')\nconst patch = (a, loose) => new SemVer(a, loose).patch\nmodule.exports = patch\n", "const parse = require('./parse')\nconst prerelease = (version, options) => {\n const parsed = parse(version, options)\n return (parsed && parsed.prerelease.length) ? parsed.prerelease : null\n}\nmodule.exports = prerelease\n", "const SemVer = require('../classes/semver')\nconst compare = (a, b, loose) =>\n new SemVer(a, loose).compare(new SemVer(b, loose))\n\nmodule.exports = compare\n", "const compare = require('./compare')\nconst rcompare = (a, b, loose) => compare(b, a, loose)\nmodule.exports = rcompare\n", "const compare = require('./compare')\nconst compareLoose = (a, b) => compare(a, b, true)\nmodule.exports = compareLoose\n", "const SemVer = require('../classes/semver')\nconst compareBuild = (a, b, loose) => {\n const versionA = new SemVer(a, loose)\n const versionB = new SemVer(b, loose)\n return versionA.compare(versionB) || versionA.compareBuild(versionB)\n}\nmodule.exports = compareBuild\n", "const compareBuild = require('./compare-build')\nconst sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose))\nmodule.exports = sort\n", "const compareBuild = require('./compare-build')\nconst rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose))\nmodule.exports = rsort\n", "const compare = require('./compare')\nconst gt = (a, b, loose) => compare(a, b, loose) > 0\nmodule.exports = gt\n", "const compare = require('./compare')\nconst lt = (a, b, loose) => compare(a, b, loose) < 0\nmodule.exports = lt\n", "const compare = require('./compare')\nconst eq = (a, b, loose) => compare(a, b, loose) === 0\nmodule.exports = eq\n", "const compare = require('./compare')\nconst neq = (a, b, loose) => compare(a, b, loose) !== 0\nmodule.exports = neq\n", "const compare = require('./compare')\nconst gte = (a, b, loose) => compare(a, b, loose) >= 0\nmodule.exports = gte\n", "const compare = require('./compare')\nconst lte = (a, b, loose) => compare(a, b, loose) <= 0\nmodule.exports = lte\n", "const eq = require('./eq')\nconst neq = require('./neq')\nconst gt = require('./gt')\nconst gte = require('./gte')\nconst lt = require('./lt')\nconst lte = require('./lte')\n\nconst cmp = (a, op, b, loose) => {\n switch (op) {\n case '===':\n if (typeof a === 'object') {\n a = a.version\n }\n if (typeof b === 'object') {\n b = b.version\n }\n return a === b\n\n case '!==':\n if (typeof a === 'object') {\n a = a.version\n }\n if (typeof b === 'object') {\n b = b.version\n }\n return a !== b\n\n case '':\n case '=':\n case '==':\n return eq(a, b, loose)\n\n case '!=':\n return neq(a, b, loose)\n\n case '>':\n return gt(a, b, loose)\n\n case '>=':\n return gte(a, b, loose)\n\n case '<':\n return lt(a, b, loose)\n\n case '<=':\n return lte(a, b, loose)\n\n default:\n throw new TypeError(`Invalid operator: ${op}`)\n }\n}\nmodule.exports = cmp\n", "const SemVer = require('../classes/semver')\nconst parse = require('./parse')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst coerce = (version, options) => {\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version === 'number') {\n version = String(version)\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n options = options || {}\n\n let match = null\n if (!options.rtl) {\n match = version.match(re[t.COERCE])\n } else {\n // Find the right-most coercible string that does not share\n // a terminus with a more left-ward coercible string.\n // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'\n //\n // Walk through the string checking with a /g regexp\n // Manually set the index so as to pick up overlapping matches.\n // Stop when we get a match that ends at the string end, since no\n // coercible string can be more right-ward without the same terminus.\n let next\n while ((next = re[t.COERCERTL].exec(version)) &&\n (!match || match.index + match[0].length !== version.length)\n ) {\n if (!match ||\n next.index + next[0].length !== match.index + match[0].length) {\n match = next\n }\n re[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length\n }\n // leave it in a clean state\n re[t.COERCERTL].lastIndex = -1\n }\n\n if (match === null) {\n return null\n }\n\n return parse(`${match[2]}.${match[3] || '0'}.${match[4] || '0'}`, options)\n}\nmodule.exports = coerce\n", "'use strict'\nmodule.exports = function (Yallist) {\n Yallist.prototype[Symbol.iterator] = function* () {\n for (let walker = this.head; walker; walker = walker.next) {\n yield walker.value\n }\n }\n}\n", "'use strict'\nmodule.exports = Yallist\n\nYallist.Node = Node\nYallist.create = Yallist\n\nfunction Yallist (list) {\n var self = this\n if (!(self instanceof Yallist)) {\n self = new Yallist()\n }\n\n self.tail = null\n self.head = null\n self.length = 0\n\n if (list && typeof list.forEach === 'function') {\n list.forEach(function (item) {\n self.push(item)\n })\n } else if (arguments.length > 0) {\n for (var i = 0, l = arguments.length; i < l; i++) {\n self.push(arguments[i])\n }\n }\n\n return self\n}\n\nYallist.prototype.removeNode = function (node) {\n if (node.list !== this) {\n throw new Error('removing node which does not belong to this list')\n }\n\n var next = node.next\n var prev = node.prev\n\n if (next) {\n next.prev = prev\n }\n\n if (prev) {\n prev.next = next\n }\n\n if (node === this.head) {\n this.head = next\n }\n if (node === this.tail) {\n this.tail = prev\n }\n\n node.list.length--\n node.next = null\n node.prev = null\n node.list = null\n\n return next\n}\n\nYallist.prototype.unshiftNode = function (node) {\n if (node === this.head) {\n return\n }\n\n if (node.list) {\n node.list.removeNode(node)\n }\n\n var head = this.head\n node.list = this\n node.next = head\n if (head) {\n head.prev = node\n }\n\n this.head = node\n if (!this.tail) {\n this.tail = node\n }\n this.length++\n}\n\nYallist.prototype.pushNode = function (node) {\n if (node === this.tail) {\n return\n }\n\n if (node.list) {\n node.list.removeNode(node)\n }\n\n var tail = this.tail\n node.list = this\n node.prev = tail\n if (tail) {\n tail.next = node\n }\n\n this.tail = node\n if (!this.head) {\n this.head = node\n }\n this.length++\n}\n\nYallist.prototype.push = function () {\n for (var i = 0, l = arguments.length; i < l; i++) {\n push(this, arguments[i])\n }\n return this.length\n}\n\nYallist.prototype.unshift = function () {\n for (var i = 0, l = arguments.length; i < l; i++) {\n unshift(this, arguments[i])\n }\n return this.length\n}\n\nYallist.prototype.pop = function () {\n if (!this.tail) {\n return undefined\n }\n\n var res = this.tail.value\n this.tail = this.tail.prev\n if (this.tail) {\n this.tail.next = null\n } else {\n this.head = null\n }\n this.length--\n return res\n}\n\nYallist.prototype.shift = function () {\n if (!this.head) {\n return undefined\n }\n\n var res = this.head.value\n this.head = this.head.next\n if (this.head) {\n this.head.prev = null\n } else {\n this.tail = null\n }\n this.length--\n return res\n}\n\nYallist.prototype.forEach = function (fn, thisp) {\n thisp = thisp || this\n for (var walker = this.head, i = 0; walker !== null; i++) {\n fn.call(thisp, walker.value, i, this)\n walker = walker.next\n }\n}\n\nYallist.prototype.forEachReverse = function (fn, thisp) {\n thisp = thisp || this\n for (var walker = this.tail, i = this.length - 1; walker !== null; i--) {\n fn.call(thisp, walker.value, i, this)\n walker = walker.prev\n }\n}\n\nYallist.prototype.get = function (n) {\n for (var i = 0, walker = this.head; walker !== null && i < n; i++) {\n // abort out of the list early if we hit a cycle\n walker = walker.next\n }\n if (i === n && walker !== null) {\n return walker.value\n }\n}\n\nYallist.prototype.getReverse = function (n) {\n for (var i = 0, walker = this.tail; walker !== null && i < n; i++) {\n // abort out of the list early if we hit a cycle\n walker = walker.prev\n }\n if (i === n && walker !== null) {\n return walker.value\n }\n}\n\nYallist.prototype.map = function (fn, thisp) {\n thisp = thisp || this\n var res = new Yallist()\n for (var walker = this.head; walker !== null;) {\n res.push(fn.call(thisp, walker.value, this))\n walker = walker.next\n }\n return res\n}\n\nYallist.prototype.mapReverse = function (fn, thisp) {\n thisp = thisp || this\n var res = new Yallist()\n for (var walker = this.tail; walker !== null;) {\n res.push(fn.call(thisp, walker.value, this))\n walker = walker.prev\n }\n return res\n}\n\nYallist.prototype.reduce = function (fn, initial) {\n var acc\n var walker = this.head\n if (arguments.length > 1) {\n acc = initial\n } else if (this.head) {\n walker = this.head.next\n acc = this.head.value\n } else {\n throw new TypeError('Reduce of empty list with no initial value')\n }\n\n for (var i = 0; walker !== null; i++) {\n acc = fn(acc, walker.value, i)\n walker = walker.next\n }\n\n return acc\n}\n\nYallist.prototype.reduceReverse = function (fn, initial) {\n var acc\n var walker = this.tail\n if (arguments.length > 1) {\n acc = initial\n } else if (this.tail) {\n walker = this.tail.prev\n acc = this.tail.value\n } else {\n throw new TypeError('Reduce of empty list with no initial value')\n }\n\n for (var i = this.length - 1; walker !== null; i--) {\n acc = fn(acc, walker.value, i)\n walker = walker.prev\n }\n\n return acc\n}\n\nYallist.prototype.toArray = function () {\n var arr = new Array(this.length)\n for (var i = 0, walker = this.head; walker !== null; i++) {\n arr[i] = walker.value\n walker = walker.next\n }\n return arr\n}\n\nYallist.prototype.toArrayReverse = function () {\n var arr = new Array(this.length)\n for (var i = 0, walker = this.tail; walker !== null; i++) {\n arr[i] = walker.value\n walker = walker.prev\n }\n return arr\n}\n\nYallist.prototype.slice = function (from, to) {\n to = to || this.length\n if (to < 0) {\n to += this.length\n }\n from = from || 0\n if (from < 0) {\n from += this.length\n }\n var ret = new Yallist()\n if (to < from || to < 0) {\n return ret\n }\n if (from < 0) {\n from = 0\n }\n if (to > this.length) {\n to = this.length\n }\n for (var i = 0, walker = this.head; walker !== null && i < from; i++) {\n walker = walker.next\n }\n for (; walker !== null && i < to; i++, walker = walker.next) {\n ret.push(walker.value)\n }\n return ret\n}\n\nYallist.prototype.sliceReverse = function (from, to) {\n to = to || this.length\n if (to < 0) {\n to += this.length\n }\n from = from || 0\n if (from < 0) {\n from += this.length\n }\n var ret = new Yallist()\n if (to < from || to < 0) {\n return ret\n }\n if (from < 0) {\n from = 0\n }\n if (to > this.length) {\n to = this.length\n }\n for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) {\n walker = walker.prev\n }\n for (; walker !== null && i > from; i--, walker = walker.prev) {\n ret.push(walker.value)\n }\n return ret\n}\n\nYallist.prototype.splice = function (start, deleteCount, ...nodes) {\n if (start > this.length) {\n start = this.length - 1\n }\n if (start < 0) {\n start = this.length + start;\n }\n\n for (var i = 0, walker = this.head; walker !== null && i < start; i++) {\n walker = walker.next\n }\n\n var ret = []\n for (var i = 0; walker && i < deleteCount; i++) {\n ret.push(walker.value)\n walker = this.removeNode(walker)\n }\n if (walker === null) {\n walker = this.tail\n }\n\n if (walker !== this.head && walker !== this.tail) {\n walker = walker.prev\n }\n\n for (var i = 0; i < nodes.length; i++) {\n walker = insert(this, walker, nodes[i])\n }\n return ret;\n}\n\nYallist.prototype.reverse = function () {\n var head = this.head\n var tail = this.tail\n for (var walker = head; walker !== null; walker = walker.prev) {\n var p = walker.prev\n walker.prev = walker.next\n walker.next = p\n }\n this.head = tail\n this.tail = head\n return this\n}\n\nfunction insert (self, node, value) {\n var inserted = node === self.head ?\n new Node(value, null, node, self) :\n new Node(value, node, node.next, self)\n\n if (inserted.next === null) {\n self.tail = inserted\n }\n if (inserted.prev === null) {\n self.head = inserted\n }\n\n self.length++\n\n return inserted\n}\n\nfunction push (self, item) {\n self.tail = new Node(item, self.tail, null, self)\n if (!self.head) {\n self.head = self.tail\n }\n self.length++\n}\n\nfunction unshift (self, item) {\n self.head = new Node(item, null, self.head, self)\n if (!self.tail) {\n self.tail = self.head\n }\n self.length++\n}\n\nfunction Node (value, prev, next, list) {\n if (!(this instanceof Node)) {\n return new Node(value, prev, next, list)\n }\n\n this.list = list\n this.value = value\n\n if (prev) {\n prev.next = this\n this.prev = prev\n } else {\n this.prev = null\n }\n\n if (next) {\n next.prev = this\n this.next = next\n } else {\n this.next = null\n }\n}\n\ntry {\n // add if support for Symbol.iterator is present\n require('./iterator.js')(Yallist)\n} catch (er) {}\n", "'use strict'\n\n// A linked list to keep track of recently-used-ness\nconst Yallist = require('yallist')\n\nconst MAX = Symbol('max')\nconst LENGTH = Symbol('length')\nconst LENGTH_CALCULATOR = Symbol('lengthCalculator')\nconst ALLOW_STALE = Symbol('allowStale')\nconst MAX_AGE = Symbol('maxAge')\nconst DISPOSE = Symbol('dispose')\nconst NO_DISPOSE_ON_SET = Symbol('noDisposeOnSet')\nconst LRU_LIST = Symbol('lruList')\nconst CACHE = Symbol('cache')\nconst UPDATE_AGE_ON_GET = Symbol('updateAgeOnGet')\n\nconst naiveLength = () => 1\n\n// lruList is a yallist where the head is the youngest\n// item, and the tail is the oldest. the list contains the Hit\n// objects as the entries.\n// Each Hit object has a reference to its Yallist.Node. This\n// never changes.\n//\n// cache is a Map (or PseudoMap) that matches the keys to\n// the Yallist.Node object.\nclass LRUCache {\n constructor (options) {\n if (typeof options === 'number')\n options = { max: options }\n\n if (!options)\n options = {}\n\n if (options.max && (typeof options.max !== 'number' || options.max < 0))\n throw new TypeError('max must be a non-negative number')\n // Kind of weird to have a default max of Infinity, but oh well.\n const max = this[MAX] = options.max || Infinity\n\n const lc = options.length || naiveLength\n this[LENGTH_CALCULATOR] = (typeof lc !== 'function') ? naiveLength : lc\n this[ALLOW_STALE] = options.stale || false\n if (options.maxAge && typeof options.maxAge !== 'number')\n throw new TypeError('maxAge must be a number')\n this[MAX_AGE] = options.maxAge || 0\n this[DISPOSE] = options.dispose\n this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false\n this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false\n this.reset()\n }\n\n // resize the cache when the max changes.\n set max (mL) {\n if (typeof mL !== 'number' || mL < 0)\n throw new TypeError('max must be a non-negative number')\n\n this[MAX] = mL || Infinity\n trim(this)\n }\n get max () {\n return this[MAX]\n }\n\n set allowStale (allowStale) {\n this[ALLOW_STALE] = !!allowStale\n }\n get allowStale () {\n return this[ALLOW_STALE]\n }\n\n set maxAge (mA) {\n if (typeof mA !== 'number')\n throw new TypeError('maxAge must be a non-negative number')\n\n this[MAX_AGE] = mA\n trim(this)\n }\n get maxAge () {\n return this[MAX_AGE]\n }\n\n // resize the cache when the lengthCalculator changes.\n set lengthCalculator (lC) {\n if (typeof lC !== 'function')\n lC = naiveLength\n\n if (lC !== this[LENGTH_CALCULATOR]) {\n this[LENGTH_CALCULATOR] = lC\n this[LENGTH] = 0\n this[LRU_LIST].forEach(hit => {\n hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key)\n this[LENGTH] += hit.length\n })\n }\n trim(this)\n }\n get lengthCalculator () { return this[LENGTH_CALCULATOR] }\n\n get length () { return this[LENGTH] }\n get itemCount () { return this[LRU_LIST].length }\n\n rforEach (fn, thisp) {\n thisp = thisp || this\n for (let walker = this[LRU_LIST].tail; walker !== null;) {\n const prev = walker.prev\n forEachStep(this, fn, walker, thisp)\n walker = prev\n }\n }\n\n forEach (fn, thisp) {\n thisp = thisp || this\n for (let walker = this[LRU_LIST].head; walker !== null;) {\n const next = walker.next\n forEachStep(this, fn, walker, thisp)\n walker = next\n }\n }\n\n keys () {\n return this[LRU_LIST].toArray().map(k => k.key)\n }\n\n values () {\n return this[LRU_LIST].toArray().map(k => k.value)\n }\n\n reset () {\n if (this[DISPOSE] &&\n this[LRU_LIST] &&\n this[LRU_LIST].length) {\n this[LRU_LIST].forEach(hit => this[DISPOSE](hit.key, hit.value))\n }\n\n this[CACHE] = new Map() // hash of items by key\n this[LRU_LIST] = new Yallist() // list of items in order of use recency\n this[LENGTH] = 0 // length of items in the list\n }\n\n dump () {\n return this[LRU_LIST].map(hit =>\n isStale(this, hit) ? false : {\n k: hit.key,\n v: hit.value,\n e: hit.now + (hit.maxAge || 0)\n }).toArray().filter(h => h)\n }\n\n dumpLru () {\n return this[LRU_LIST]\n }\n\n set (key, value, maxAge) {\n maxAge = maxAge || this[MAX_AGE]\n\n if (maxAge && typeof maxAge !== 'number')\n throw new TypeError('maxAge must be a number')\n\n const now = maxAge ? Date.now() : 0\n const len = this[LENGTH_CALCULATOR](value, key)\n\n if (this[CACHE].has(key)) {\n if (len > this[MAX]) {\n del(this, this[CACHE].get(key))\n return false\n }\n\n const node = this[CACHE].get(key)\n const item = node.value\n\n // dispose of the old one before overwriting\n // split out into 2 ifs for better coverage tracking\n if (this[DISPOSE]) {\n if (!this[NO_DISPOSE_ON_SET])\n this[DISPOSE](key, item.value)\n }\n\n item.now = now\n item.maxAge = maxAge\n item.value = value\n this[LENGTH] += len - item.length\n item.length = len\n this.get(key)\n trim(this)\n return true\n }\n\n const hit = new Entry(key, value, len, now, maxAge)\n\n // oversized objects fall out of cache automatically.\n if (hit.length > this[MAX]) {\n if (this[DISPOSE])\n this[DISPOSE](key, value)\n\n return false\n }\n\n this[LENGTH] += hit.length\n this[LRU_LIST].unshift(hit)\n this[CACHE].set(key, this[LRU_LIST].head)\n trim(this)\n return true\n }\n\n has (key) {\n if (!this[CACHE].has(key)) return false\n const hit = this[CACHE].get(key).value\n return !isStale(this, hit)\n }\n\n get (key) {\n return get(this, key, true)\n }\n\n peek (key) {\n return get(this, key, false)\n }\n\n pop () {\n const node = this[LRU_LIST].tail\n if (!node)\n return null\n\n del(this, node)\n return node.value\n }\n\n del (key) {\n del(this, this[CACHE].get(key))\n }\n\n load (arr) {\n // reset the cache\n this.reset()\n\n const now = Date.now()\n // A previous serialized cache has the most recent items first\n for (let l = arr.length - 1; l >= 0; l--) {\n const hit = arr[l]\n const expiresAt = hit.e || 0\n if (expiresAt === 0)\n // the item was created without expiration in a non aged cache\n this.set(hit.k, hit.v)\n else {\n const maxAge = expiresAt - now\n // dont add already expired items\n if (maxAge > 0) {\n this.set(hit.k, hit.v, maxAge)\n }\n }\n }\n }\n\n prune () {\n this[CACHE].forEach((value, key) => get(this, key, false))\n }\n}\n\nconst get = (self, key, doUse) => {\n const node = self[CACHE].get(key)\n if (node) {\n const hit = node.value\n if (isStale(self, hit)) {\n del(self, node)\n if (!self[ALLOW_STALE])\n return undefined\n } else {\n if (doUse) {\n if (self[UPDATE_AGE_ON_GET])\n node.value.now = Date.now()\n self[LRU_LIST].unshiftNode(node)\n }\n }\n return hit.value\n }\n}\n\nconst isStale = (self, hit) => {\n if (!hit || (!hit.maxAge && !self[MAX_AGE]))\n return false\n\n const diff = Date.now() - hit.now\n return hit.maxAge ? diff > hit.maxAge\n : self[MAX_AGE] && (diff > self[MAX_AGE])\n}\n\nconst trim = self => {\n if (self[LENGTH] > self[MAX]) {\n for (let walker = self[LRU_LIST].tail;\n self[LENGTH] > self[MAX] && walker !== null;) {\n // We know that we're about to delete this one, and also\n // what the next least recently used key will be, so just\n // go ahead and set it now.\n const prev = walker.prev\n del(self, walker)\n walker = prev\n }\n }\n}\n\nconst del = (self, node) => {\n if (node) {\n const hit = node.value\n if (self[DISPOSE])\n self[DISPOSE](hit.key, hit.value)\n\n self[LENGTH] -= hit.length\n self[CACHE].delete(hit.key)\n self[LRU_LIST].removeNode(node)\n }\n}\n\nclass Entry {\n constructor (key, value, length, now, maxAge) {\n this.key = key\n this.value = value\n this.length = length\n this.now = now\n this.maxAge = maxAge || 0\n }\n}\n\nconst forEachStep = (self, fn, node, thisp) => {\n let hit = node.value\n if (isStale(self, hit)) {\n del(self, node)\n if (!self[ALLOW_STALE])\n hit = undefined\n }\n if (hit)\n fn.call(thisp, hit.value, hit.key, self)\n}\n\nmodule.exports = LRUCache\n", "// hoisted class for cyclic dependency\nclass Range {\n constructor (range, options) {\n options = parseOptions(options)\n\n if (range instanceof Range) {\n if (\n range.loose === !!options.loose &&\n range.includePrerelease === !!options.includePrerelease\n ) {\n return range\n } else {\n return new Range(range.raw, options)\n }\n }\n\n if (range instanceof Comparator) {\n // just put it in the set and return\n this.raw = range.value\n this.set = [[range]]\n this.format()\n return this\n }\n\n this.options = options\n this.loose = !!options.loose\n this.includePrerelease = !!options.includePrerelease\n\n // First reduce all whitespace as much as possible so we do not have to rely\n // on potentially slow regexes like \\s*. This is then stored and used for\n // future error messages as well.\n this.raw = range\n .trim()\n .split(/\\s+/)\n .join(' ')\n\n // First, split on ||\n this.set = this.raw\n .split('||')\n // map the range to a 2d array of comparators\n .map(r => this.parseRange(r.trim()))\n // throw out any comparator lists that are empty\n // this generally means that it was not a valid range, which is allowed\n // in loose mode, but will still throw if the WHOLE range is invalid.\n .filter(c => c.length)\n\n if (!this.set.length) {\n throw new TypeError(`Invalid SemVer Range: ${this.raw}`)\n }\n\n // if we have any that are not the null set, throw out null sets.\n if (this.set.length > 1) {\n // keep the first one, in case they're all null sets\n const first = this.set[0]\n this.set = this.set.filter(c => !isNullSet(c[0]))\n if (this.set.length === 0) {\n this.set = [first]\n } else if (this.set.length > 1) {\n // if we have any that are *, then the range is just *\n for (const c of this.set) {\n if (c.length === 1 && isAny(c[0])) {\n this.set = [c]\n break\n }\n }\n }\n }\n\n this.format()\n }\n\n format () {\n this.range = this.set\n .map((comps) => comps.join(' ').trim())\n .join('||')\n .trim()\n return this.range\n }\n\n toString () {\n return this.range\n }\n\n parseRange (range) {\n // memoize range parsing for performance.\n // this is a very hot path, and fully deterministic.\n const memoOpts =\n (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) |\n (this.options.loose && FLAG_LOOSE)\n const memoKey = memoOpts + ':' + range\n const cached = cache.get(memoKey)\n if (cached) {\n return cached\n }\n\n const loose = this.options.loose\n // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]\n range = range.replace(hr, hyphenReplace(this.options.includePrerelease))\n debug('hyphen replace', range)\n\n // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)\n debug('comparator trim', range)\n\n // `~ 1.2.3` => `~1.2.3`\n range = range.replace(re[t.TILDETRIM], tildeTrimReplace)\n debug('tilde trim', range)\n\n // `^ 1.2.3` => `^1.2.3`\n range = range.replace(re[t.CARETTRIM], caretTrimReplace)\n debug('caret trim', range)\n\n // At this point, the range is completely trimmed and\n // ready to be split into comparators.\n\n let rangeList = range\n .split(' ')\n .map(comp => parseComparator(comp, this.options))\n .join(' ')\n .split(/\\s+/)\n // >=0.0.0 is equivalent to *\n .map(comp => replaceGTE0(comp, this.options))\n\n if (loose) {\n // in loose mode, throw out any that are not valid comparators\n rangeList = rangeList.filter(comp => {\n debug('loose invalid filter', comp, this.options)\n return !!comp.match(re[t.COMPARATORLOOSE])\n })\n }\n debug('range list', rangeList)\n\n // if any comparators are the null set, then replace with JUST null set\n // if more than one comparator, remove any * comparators\n // also, don't include the same comparator more than once\n const rangeMap = new Map()\n const comparators = rangeList.map(comp => new Comparator(comp, this.options))\n for (const comp of comparators) {\n if (isNullSet(comp)) {\n return [comp]\n }\n rangeMap.set(comp.value, comp)\n }\n if (rangeMap.size > 1 && rangeMap.has('')) {\n rangeMap.delete('')\n }\n\n const result = [...rangeMap.values()]\n cache.set(memoKey, result)\n return result\n }\n\n intersects (range, options) {\n if (!(range instanceof Range)) {\n throw new TypeError('a Range is required')\n }\n\n return this.set.some((thisComparators) => {\n return (\n isSatisfiable(thisComparators, options) &&\n range.set.some((rangeComparators) => {\n return (\n isSatisfiable(rangeComparators, options) &&\n thisComparators.every((thisComparator) => {\n return rangeComparators.every((rangeComparator) => {\n return thisComparator.intersects(rangeComparator, options)\n })\n })\n )\n })\n )\n })\n }\n\n // if ANY of the sets match ALL of its comparators, then pass\n test (version) {\n if (!version) {\n return false\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n for (let i = 0; i < this.set.length; i++) {\n if (testSet(this.set[i], version, this.options)) {\n return true\n }\n }\n return false\n }\n}\n\nmodule.exports = Range\n\nconst LRU = require('lru-cache')\nconst cache = new LRU({ max: 1000 })\n\nconst parseOptions = require('../internal/parse-options')\nconst Comparator = require('./comparator')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst {\n safeRe: re,\n t,\n comparatorTrimReplace,\n tildeTrimReplace,\n caretTrimReplace,\n} = require('../internal/re')\nconst { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = require('../internal/constants')\n\nconst isNullSet = c => c.value === '<0.0.0-0'\nconst isAny = c => c.value === ''\n\n// take a set of comparators and determine whether there\n// exists a version which can satisfy it\nconst isSatisfiable = (comparators, options) => {\n let result = true\n const remainingComparators = comparators.slice()\n let testComparator = remainingComparators.pop()\n\n while (result && remainingComparators.length) {\n result = remainingComparators.every((otherComparator) => {\n return testComparator.intersects(otherComparator, options)\n })\n\n testComparator = remainingComparators.pop()\n }\n\n return result\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nconst parseComparator = (comp, options) => {\n debug('comp', comp, options)\n comp = replaceCarets(comp, options)\n debug('caret', comp)\n comp = replaceTildes(comp, options)\n debug('tildes', comp)\n comp = replaceXRanges(comp, options)\n debug('xrange', comp)\n comp = replaceStars(comp, options)\n debug('stars', comp)\n return comp\n}\n\nconst isX = id => !id || id.toLowerCase() === 'x' || id === '*'\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0\n// ~0.0.1 --> >=0.0.1 <0.1.0-0\nconst replaceTildes = (comp, options) => {\n return comp\n .trim()\n .split(/\\s+/)\n .map((c) => replaceTilde(c, options))\n .join(' ')\n}\n\nconst replaceTilde = (comp, options) => {\n const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('tilde', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0 <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n // ~1.2 == >=1.2.0 <1.3.0-0\n ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`\n } else if (pr) {\n debug('replaceTilde pr', pr)\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n } else {\n // ~1.2.3 == >=1.2.3 <1.3.0-0\n ret = `>=${M}.${m}.${p\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('tilde return', ret)\n return ret\n })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0\n// ^1.2.3 --> >=1.2.3 <2.0.0-0\n// ^1.2.0 --> >=1.2.0 <2.0.0-0\n// ^0.0.1 --> >=0.0.1 <0.0.2-0\n// ^0.1.0 --> >=0.1.0 <0.2.0-0\nconst replaceCarets = (comp, options) => {\n return comp\n .trim()\n .split(/\\s+/)\n .map((c) => replaceCaret(c, options))\n .join(' ')\n}\n\nconst replaceCaret = (comp, options) => {\n debug('caret', comp, options)\n const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]\n const z = options.includePrerelease ? '-0' : ''\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('caret', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n if (M === '0') {\n ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`\n } else {\n ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`\n }\n } else if (pr) {\n debug('replaceCaret pr', pr)\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${+M + 1}.0.0-0`\n }\n } else {\n debug('no pr')\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p\n }${z} <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p\n }${z} <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p\n } <${+M + 1}.0.0-0`\n }\n }\n\n debug('caret return', ret)\n return ret\n })\n}\n\nconst replaceXRanges = (comp, options) => {\n debug('replaceXRanges', comp, options)\n return comp\n .split(/\\s+/)\n .map((c) => replaceXRange(c, options))\n .join(' ')\n}\n\nconst replaceXRange = (comp, options) => {\n comp = comp.trim()\n const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]\n return comp.replace(r, (ret, gtlt, M, m, p, pr) => {\n debug('xRange', comp, ret, gtlt, M, m, p, pr)\n const xM = isX(M)\n const xm = xM || isX(m)\n const xp = xm || isX(p)\n const anyX = xp\n\n if (gtlt === '=' && anyX) {\n gtlt = ''\n }\n\n // if we're including prereleases in the match, then we need\n // to fix this to -0, the lowest possible prerelease value\n pr = options.includePrerelease ? '-0' : ''\n\n if (xM) {\n if (gtlt === '>' || gtlt === '<') {\n // nothing is allowed\n ret = '<0.0.0-0'\n } else {\n // nothing is forbidden\n ret = '*'\n }\n } else if (gtlt && anyX) {\n // we know patch is an x, because we have any x at all.\n // replace X with 0\n if (xm) {\n m = 0\n }\n p = 0\n\n if (gtlt === '>') {\n // >1 => >=2.0.0\n // >1.2 => >=1.3.0\n gtlt = '>='\n if (xm) {\n M = +M + 1\n m = 0\n p = 0\n } else {\n m = +m + 1\n p = 0\n }\n } else if (gtlt === '<=') {\n // <=0.7.x is actually <0.8.0, since any 0.7.x should\n // pass. Similarly, <=7.x is actually <8.0.0, etc.\n gtlt = '<'\n if (xm) {\n M = +M + 1\n } else {\n m = +m + 1\n }\n }\n\n if (gtlt === '<') {\n pr = '-0'\n }\n\n ret = `${gtlt + M}.${m}.${p}${pr}`\n } else if (xm) {\n ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`\n } else if (xp) {\n ret = `>=${M}.${m}.0${pr\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('xRange return', ret)\n\n return ret\n })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nconst replaceStars = (comp, options) => {\n debug('replaceStars', comp, options)\n // Looseness is ignored here. star is always as loose as it gets!\n return comp\n .trim()\n .replace(re[t.STAR], '')\n}\n\nconst replaceGTE0 = (comp, options) => {\n debug('replaceGTE0', comp, options)\n return comp\n .trim()\n .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '')\n}\n\n// This function is passed to string.replace(re[t.HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0-0\nconst hyphenReplace = incPr => ($0,\n from, fM, fm, fp, fpr, fb,\n to, tM, tm, tp, tpr, tb) => {\n if (isX(fM)) {\n from = ''\n } else if (isX(fm)) {\n from = `>=${fM}.0.0${incPr ? '-0' : ''}`\n } else if (isX(fp)) {\n from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`\n } else if (fpr) {\n from = `>=${from}`\n } else {\n from = `>=${from}${incPr ? '-0' : ''}`\n }\n\n if (isX(tM)) {\n to = ''\n } else if (isX(tm)) {\n to = `<${+tM + 1}.0.0-0`\n } else if (isX(tp)) {\n to = `<${tM}.${+tm + 1}.0-0`\n } else if (tpr) {\n to = `<=${tM}.${tm}.${tp}-${tpr}`\n } else if (incPr) {\n to = `<${tM}.${tm}.${+tp + 1}-0`\n } else {\n to = `<=${to}`\n }\n\n return `${from} ${to}`.trim()\n}\n\nconst testSet = (set, version, options) => {\n for (let i = 0; i < set.length; i++) {\n if (!set[i].test(version)) {\n return false\n }\n }\n\n if (version.prerelease.length && !options.includePrerelease) {\n // Find the set of versions that are allowed to have prereleases\n // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n // That should allow `1.2.3-pr.2` to pass.\n // However, `1.2.4-alpha.notready` should NOT be allowed,\n // even though it's within the range set by the comparators.\n for (let i = 0; i < set.length; i++) {\n debug(set[i].semver)\n if (set[i].semver === Comparator.ANY) {\n continue\n }\n\n if (set[i].semver.prerelease.length > 0) {\n const allowed = set[i].semver\n if (allowed.major === version.major &&\n allowed.minor === version.minor &&\n allowed.patch === version.patch) {\n return true\n }\n }\n }\n\n // Version has a -pre, but it's not one of the ones we like.\n return false\n }\n\n return true\n}\n", "const ANY = Symbol('SemVer ANY')\n// hoisted class for cyclic dependency\nclass Comparator {\n static get ANY () {\n return ANY\n }\n\n constructor (comp, options) {\n options = parseOptions(options)\n\n if (comp instanceof Comparator) {\n if (comp.loose === !!options.loose) {\n return comp\n } else {\n comp = comp.value\n }\n }\n\n comp = comp.trim().split(/\\s+/).join(' ')\n debug('comparator', comp, options)\n this.options = options\n this.loose = !!options.loose\n this.parse(comp)\n\n if (this.semver === ANY) {\n this.value = ''\n } else {\n this.value = this.operator + this.semver.version\n }\n\n debug('comp', this)\n }\n\n parse (comp) {\n const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]\n const m = comp.match(r)\n\n if (!m) {\n throw new TypeError(`Invalid comparator: ${comp}`)\n }\n\n this.operator = m[1] !== undefined ? m[1] : ''\n if (this.operator === '=') {\n this.operator = ''\n }\n\n // if it literally is just '>' or '' then allow anything.\n if (!m[2]) {\n this.semver = ANY\n } else {\n this.semver = new SemVer(m[2], this.options.loose)\n }\n }\n\n toString () {\n return this.value\n }\n\n test (version) {\n debug('Comparator.test', version, this.options.loose)\n\n if (this.semver === ANY || version === ANY) {\n return true\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n return cmp(version, this.operator, this.semver, this.options)\n }\n\n intersects (comp, options) {\n if (!(comp instanceof Comparator)) {\n throw new TypeError('a Comparator is required')\n }\n\n if (this.operator === '') {\n if (this.value === '') {\n return true\n }\n return new Range(comp.value, options).test(this.value)\n } else if (comp.operator === '') {\n if (comp.value === '') {\n return true\n }\n return new Range(this.value, options).test(comp.semver)\n }\n\n options = parseOptions(options)\n\n // Special cases where nothing can possibly be lower\n if (options.includePrerelease &&\n (this.value === '<0.0.0-0' || comp.value === '<0.0.0-0')) {\n return false\n }\n if (!options.includePrerelease &&\n (this.value.startsWith('<0.0.0') || comp.value.startsWith('<0.0.0'))) {\n return false\n }\n\n // Same direction increasing (> or >=)\n if (this.operator.startsWith('>') && comp.operator.startsWith('>')) {\n return true\n }\n // Same direction decreasing (< or <=)\n if (this.operator.startsWith('<') && comp.operator.startsWith('<')) {\n return true\n }\n // same SemVer and both sides are inclusive (<= or >=)\n if (\n (this.semver.version === comp.semver.version) &&\n this.operator.includes('=') && comp.operator.includes('=')) {\n return true\n }\n // opposite directions less than\n if (cmp(this.semver, '<', comp.semver, options) &&\n this.operator.startsWith('>') && comp.operator.startsWith('<')) {\n return true\n }\n // opposite directions greater than\n if (cmp(this.semver, '>', comp.semver, options) &&\n this.operator.startsWith('<') && comp.operator.startsWith('>')) {\n return true\n }\n return false\n }\n}\n\nmodule.exports = Comparator\n\nconst parseOptions = require('../internal/parse-options')\nconst { safeRe: re, t } = require('../internal/re')\nconst cmp = require('../functions/cmp')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst Range = require('./range')\n", "const Range = require('../classes/range')\nconst satisfies = (version, range, options) => {\n try {\n range = new Range(range, options)\n } catch (er) {\n return false\n }\n return range.test(version)\n}\nmodule.exports = satisfies\n", "const Range = require('../classes/range')\n\n// Mostly just for testing and legacy API reasons\nconst toComparators = (range, options) =>\n new Range(range, options).set\n .map(comp => comp.map(c => c.value).join(' ').trim().split(' '))\n\nmodule.exports = toComparators\n", "const SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\n\nconst maxSatisfying = (versions, range, options) => {\n let max = null\n let maxSV = null\n let rangeObj = null\n try {\n rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach((v) => {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!max || maxSV.compare(v) === -1) {\n // compare(max, v, true)\n max = v\n maxSV = new SemVer(max, options)\n }\n }\n })\n return max\n}\nmodule.exports = maxSatisfying\n", "const SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst minSatisfying = (versions, range, options) => {\n let min = null\n let minSV = null\n let rangeObj = null\n try {\n rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach((v) => {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!min || minSV.compare(v) === 1) {\n // compare(min, v, true)\n min = v\n minSV = new SemVer(min, options)\n }\n }\n })\n return min\n}\nmodule.exports = minSatisfying\n", "const SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst gt = require('../functions/gt')\n\nconst minVersion = (range, loose) => {\n range = new Range(range, loose)\n\n let minver = new SemVer('0.0.0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = new SemVer('0.0.0-0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = null\n for (let i = 0; i < range.set.length; ++i) {\n const comparators = range.set[i]\n\n let setMin = null\n comparators.forEach((comparator) => {\n // Clone to avoid manipulating the comparator's semver object.\n const compver = new SemVer(comparator.semver.version)\n switch (comparator.operator) {\n case '>':\n if (compver.prerelease.length === 0) {\n compver.patch++\n } else {\n compver.prerelease.push(0)\n }\n compver.raw = compver.format()\n /* fallthrough */\n case '':\n case '>=':\n if (!setMin || gt(compver, setMin)) {\n setMin = compver\n }\n break\n case '<':\n case '<=':\n /* Ignore maximum versions */\n break\n /* istanbul ignore next */\n default:\n throw new Error(`Unexpected operation: ${comparator.operator}`)\n }\n })\n if (setMin && (!minver || gt(minver, setMin))) {\n minver = setMin\n }\n }\n\n if (minver && range.test(minver)) {\n return minver\n }\n\n return null\n}\nmodule.exports = minVersion\n", "const Range = require('../classes/range')\nconst validRange = (range, options) => {\n try {\n // Return '*' instead of '' so that truthiness works.\n // This will throw if it's invalid anyway\n return new Range(range, options).range || '*'\n } catch (er) {\n return null\n }\n}\nmodule.exports = validRange\n", "const SemVer = require('../classes/semver')\nconst Comparator = require('../classes/comparator')\nconst { ANY } = Comparator\nconst Range = require('../classes/range')\nconst satisfies = require('../functions/satisfies')\nconst gt = require('../functions/gt')\nconst lt = require('../functions/lt')\nconst lte = require('../functions/lte')\nconst gte = require('../functions/gte')\n\nconst outside = (version, range, hilo, options) => {\n version = new SemVer(version, options)\n range = new Range(range, options)\n\n let gtfn, ltefn, ltfn, comp, ecomp\n switch (hilo) {\n case '>':\n gtfn = gt\n ltefn = lte\n ltfn = lt\n comp = '>'\n ecomp = '>='\n break\n case '<':\n gtfn = lt\n ltefn = gte\n ltfn = gt\n comp = '<'\n ecomp = '<='\n break\n default:\n throw new TypeError('Must provide a hilo val of \"<\" or \">\"')\n }\n\n // If it satisfies the range it is not outside\n if (satisfies(version, range, options)) {\n return false\n }\n\n // From now on, variable terms are as if we're in \"gtr\" mode.\n // but note that everything is flipped for the \"ltr\" function.\n\n for (let i = 0; i < range.set.length; ++i) {\n const comparators = range.set[i]\n\n let high = null\n let low = null\n\n comparators.forEach((comparator) => {\n if (comparator.semver === ANY) {\n comparator = new Comparator('>=0.0.0')\n }\n high = high || comparator\n low = low || comparator\n if (gtfn(comparator.semver, high.semver, options)) {\n high = comparator\n } else if (ltfn(comparator.semver, low.semver, options)) {\n low = comparator\n }\n })\n\n // If the edge version comparator has a operator then our version\n // isn't outside it\n if (high.operator === comp || high.operator === ecomp) {\n return false\n }\n\n // If the lowest version comparator has an operator and our version\n // is less than it then it isn't higher than the range\n if ((!low.operator || low.operator === comp) &&\n ltefn(version, low.semver)) {\n return false\n } else if (low.operator === ecomp && ltfn(version, low.semver)) {\n return false\n }\n }\n return true\n}\n\nmodule.exports = outside\n", "// Determine if version is greater than all the versions possible in the range.\nconst outside = require('./outside')\nconst gtr = (version, range, options) => outside(version, range, '>', options)\nmodule.exports = gtr\n", "const outside = require('./outside')\n// Determine if version is less than all the versions possible in the range\nconst ltr = (version, range, options) => outside(version, range, '<', options)\nmodule.exports = ltr\n", "const Range = require('../classes/range')\nconst intersects = (r1, r2, options) => {\n r1 = new Range(r1, options)\n r2 = new Range(r2, options)\n return r1.intersects(r2, options)\n}\nmodule.exports = intersects\n", "// given a set of versions and a range, create a \"simplified\" range\n// that includes the same versions that the original range does\n// If the original range is shorter than the simplified one, return that.\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\nmodule.exports = (versions, range, options) => {\n const set = []\n let first = null\n let prev = null\n const v = versions.sort((a, b) => compare(a, b, options))\n for (const version of v) {\n const included = satisfies(version, range, options)\n if (included) {\n prev = version\n if (!first) {\n first = version\n }\n } else {\n if (prev) {\n set.push([first, prev])\n }\n prev = null\n first = null\n }\n }\n if (first) {\n set.push([first, null])\n }\n\n const ranges = []\n for (const [min, max] of set) {\n if (min === max) {\n ranges.push(min)\n } else if (!max && min === v[0]) {\n ranges.push('*')\n } else if (!max) {\n ranges.push(`>=${min}`)\n } else if (min === v[0]) {\n ranges.push(`<=${max}`)\n } else {\n ranges.push(`${min} - ${max}`)\n }\n }\n const simplified = ranges.join(' || ')\n const original = typeof range.raw === 'string' ? range.raw : String(range)\n return simplified.length < original.length ? simplified : range\n}\n", "const Range = require('../classes/range.js')\nconst Comparator = require('../classes/comparator.js')\nconst { ANY } = Comparator\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\n\n// Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff:\n// - Every simple range `r1, r2, ...` is a null set, OR\n// - Every simple range `r1, r2, ...` which is not a null set is a subset of\n// some `R1, R2, ...`\n//\n// Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff:\n// - If c is only the ANY comparator\n// - If C is only the ANY comparator, return true\n// - Else if in prerelease mode, return false\n// - else replace c with `[>=0.0.0]`\n// - If C is only the ANY comparator\n// - if in prerelease mode, return true\n// - else replace C with `[>=0.0.0]`\n// - Let EQ be the set of = comparators in c\n// - If EQ is more than one, return true (null set)\n// - Let GT be the highest > or >= comparator in c\n// - Let LT be the lowest < or <= comparator in c\n// - If GT and LT, and GT.semver > LT.semver, return true (null set)\n// - If any C is a = range, and GT or LT are set, return false\n// - If EQ\n// - If GT, and EQ does not satisfy GT, return true (null set)\n// - If LT, and EQ does not satisfy LT, return true (null set)\n// - If EQ satisfies every C, return true\n// - Else return false\n// - If GT\n// - If GT.semver is lower than any > or >= comp in C, return false\n// - If GT is >=, and GT.semver does not satisfy every C, return false\n// - If GT.semver has a prerelease, and not in prerelease mode\n// - If no C has a prerelease and the GT.semver tuple, return false\n// - If LT\n// - If LT.semver is greater than any < or <= comp in C, return false\n// - If LT is <=, and LT.semver does not satisfy every C, return false\n// - If GT.semver has a prerelease, and not in prerelease mode\n// - If no C has a prerelease and the LT.semver tuple, return false\n// - Else return true\n\nconst subset = (sub, dom, options = {}) => {\n if (sub === dom) {\n return true\n }\n\n sub = new Range(sub, options)\n dom = new Range(dom, options)\n let sawNonNull = false\n\n OUTER: for (const simpleSub of sub.set) {\n for (const simpleDom of dom.set) {\n const isSub = simpleSubset(simpleSub, simpleDom, options)\n sawNonNull = sawNonNull || isSub !== null\n if (isSub) {\n continue OUTER\n }\n }\n // the null set is a subset of everything, but null simple ranges in\n // a complex range should be ignored. so if we saw a non-null range,\n // then we know this isn't a subset, but if EVERY simple range was null,\n // then it is a subset.\n if (sawNonNull) {\n return false\n }\n }\n return true\n}\n\nconst minimumVersionWithPreRelease = [new Comparator('>=0.0.0-0')]\nconst minimumVersion = [new Comparator('>=0.0.0')]\n\nconst simpleSubset = (sub, dom, options) => {\n if (sub === dom) {\n return true\n }\n\n if (sub.length === 1 && sub[0].semver === ANY) {\n if (dom.length === 1 && dom[0].semver === ANY) {\n return true\n } else if (options.includePrerelease) {\n sub = minimumVersionWithPreRelease\n } else {\n sub = minimumVersion\n }\n }\n\n if (dom.length === 1 && dom[0].semver === ANY) {\n if (options.includePrerelease) {\n return true\n } else {\n dom = minimumVersion\n }\n }\n\n const eqSet = new Set()\n let gt, lt\n for (const c of sub) {\n if (c.operator === '>' || c.operator === '>=') {\n gt = higherGT(gt, c, options)\n } else if (c.operator === '<' || c.operator === '<=') {\n lt = lowerLT(lt, c, options)\n } else {\n eqSet.add(c.semver)\n }\n }\n\n if (eqSet.size > 1) {\n return null\n }\n\n let gtltComp\n if (gt && lt) {\n gtltComp = compare(gt.semver, lt.semver, options)\n if (gtltComp > 0) {\n return null\n } else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) {\n return null\n }\n }\n\n // will iterate one or zero times\n for (const eq of eqSet) {\n if (gt && !satisfies(eq, String(gt), options)) {\n return null\n }\n\n if (lt && !satisfies(eq, String(lt), options)) {\n return null\n }\n\n for (const c of dom) {\n if (!satisfies(eq, String(c), options)) {\n return false\n }\n }\n\n return true\n }\n\n let higher, lower\n let hasDomLT, hasDomGT\n // if the subset has a prerelease, we need a comparator in the superset\n // with the same tuple and a prerelease, or it's not a subset\n let needDomLTPre = lt &&\n !options.includePrerelease &&\n lt.semver.prerelease.length ? lt.semver : false\n let needDomGTPre = gt &&\n !options.includePrerelease &&\n gt.semver.prerelease.length ? gt.semver : false\n // exception: <1.2.3-0 is the same as <1.2.3\n if (needDomLTPre && needDomLTPre.prerelease.length === 1 &&\n lt.operator === '<' && needDomLTPre.prerelease[0] === 0) {\n needDomLTPre = false\n }\n\n for (const c of dom) {\n hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>='\n hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<='\n if (gt) {\n if (needDomGTPre) {\n if (c.semver.prerelease && c.semver.prerelease.length &&\n c.semver.major === needDomGTPre.major &&\n c.semver.minor === needDomGTPre.minor &&\n c.semver.patch === needDomGTPre.patch) {\n needDomGTPre = false\n }\n }\n if (c.operator === '>' || c.operator === '>=') {\n higher = higherGT(gt, c, options)\n if (higher === c && higher !== gt) {\n return false\n }\n } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options)) {\n return false\n }\n }\n if (lt) {\n if (needDomLTPre) {\n if (c.semver.prerelease && c.semver.prerelease.length &&\n c.semver.major === needDomLTPre.major &&\n c.semver.minor === needDomLTPre.minor &&\n c.semver.patch === needDomLTPre.patch) {\n needDomLTPre = false\n }\n }\n if (c.operator === '<' || c.operator === '<=') {\n lower = lowerLT(lt, c, options)\n if (lower === c && lower !== lt) {\n return false\n }\n } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options)) {\n return false\n }\n }\n if (!c.operator && (lt || gt) && gtltComp !== 0) {\n return false\n }\n }\n\n // if there was a < or >, and nothing in the dom, then must be false\n // UNLESS it was limited by another range in the other direction.\n // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0\n if (gt && hasDomLT && !lt && gtltComp !== 0) {\n return false\n }\n\n if (lt && hasDomGT && !gt && gtltComp !== 0) {\n return false\n }\n\n // we needed a prerelease range in a specific tuple, but didn't get one\n // then this isn't a subset. eg >=1.2.3-pre is not a subset of >=1.0.0,\n // because it includes prereleases in the 1.2.3 tuple\n if (needDomGTPre || needDomLTPre) {\n return false\n }\n\n return true\n}\n\n// >=1.2.3 is lower than >1.2.3\nconst higherGT = (a, b, options) => {\n if (!a) {\n return b\n }\n const comp = compare(a.semver, b.semver, options)\n return comp > 0 ? a\n : comp < 0 ? b\n : b.operator === '>' && a.operator === '>=' ? b\n : a\n}\n\n// <=1.2.3 is higher than <1.2.3\nconst lowerLT = (a, b, options) => {\n if (!a) {\n return b\n }\n const comp = compare(a.semver, b.semver, options)\n return comp < 0 ? a\n : comp > 0 ? b\n : b.operator === '<' && a.operator === '<=' ? b\n : a\n}\n\nmodule.exports = subset\n", "// just pre-load all the stuff that index.js lazily exports\nconst internalRe = require('./internal/re')\nconst constants = require('./internal/constants')\nconst SemVer = require('./classes/semver')\nconst identifiers = require('./internal/identifiers')\nconst parse = require('./functions/parse')\nconst valid = require('./functions/valid')\nconst clean = require('./functions/clean')\nconst inc = require('./functions/inc')\nconst diff = require('./functions/diff')\nconst major = require('./functions/major')\nconst minor = require('./functions/minor')\nconst patch = require('./functions/patch')\nconst prerelease = require('./functions/prerelease')\nconst compare = require('./functions/compare')\nconst rcompare = require('./functions/rcompare')\nconst compareLoose = require('./functions/compare-loose')\nconst compareBuild = require('./functions/compare-build')\nconst sort = require('./functions/sort')\nconst rsort = require('./functions/rsort')\nconst gt = require('./functions/gt')\nconst lt = require('./functions/lt')\nconst eq = require('./functions/eq')\nconst neq = require('./functions/neq')\nconst gte = require('./functions/gte')\nconst lte = require('./functions/lte')\nconst cmp = require('./functions/cmp')\nconst coerce = require('./functions/coerce')\nconst Comparator = require('./classes/comparator')\nconst Range = require('./classes/range')\nconst satisfies = require('./functions/satisfies')\nconst toComparators = require('./ranges/to-comparators')\nconst maxSatisfying = require('./ranges/max-satisfying')\nconst minSatisfying = require('./ranges/min-satisfying')\nconst minVersion = require('./ranges/min-version')\nconst validRange = require('./ranges/valid')\nconst outside = require('./ranges/outside')\nconst gtr = require('./ranges/gtr')\nconst ltr = require('./ranges/ltr')\nconst intersects = require('./ranges/intersects')\nconst simplifyRange = require('./ranges/simplify')\nconst subset = require('./ranges/subset')\nmodule.exports = {\n parse,\n valid,\n clean,\n inc,\n diff,\n major,\n minor,\n patch,\n prerelease,\n compare,\n rcompare,\n compareLoose,\n compareBuild,\n sort,\n rsort,\n gt,\n lt,\n eq,\n neq,\n gte,\n lte,\n cmp,\n coerce,\n Comparator,\n Range,\n satisfies,\n toComparators,\n maxSatisfying,\n minSatisfying,\n minVersion,\n validRange,\n outside,\n gtr,\n ltr,\n intersects,\n simplifyRange,\n subset,\n SemVer,\n re: internalRe.re,\n src: internalRe.src,\n tokens: internalRe.t,\n SEMVER_SPEC_VERSION: constants.SEMVER_SPEC_VERSION,\n RELEASE_TYPES: constants.RELEASE_TYPES,\n compareIdentifiers: identifiers.compareIdentifiers,\n rcompareIdentifiers: identifiers.rcompareIdentifiers,\n}\n", "\"use strict\";\n/**\n * Capture module.\n * @module aws_p\n */\nvar semver = require('semver');\nvar Aws = require('../segments/attributes/aws');\nvar contextUtils = require('../context_utils');\nvar Utils = require('../utils');\nvar logger = require('../logger');\nvar minVersion = '2.7.15';\nvar throttledErrorDefault = function throttledErrorDefault() {\n return false; // If the customer doesn't provide an aws-sdk with a throttled error function, we can't make assumptions.\n};\n/**\n * Configures the AWS SDK to automatically capture information for the segment.\n * All created clients will automatically be captured. See 'captureAWSClient'\n * for additional details.\n * @param {AWS} awssdk - The Javascript AWS SDK.\n * @alias module:aws_p.captureAWS\n * @returns {AWS}\n * @see https://github.com/aws/aws-sdk-js\n */\nvar captureAWS = function captureAWS(awssdk) {\n if (!semver.gte(awssdk.VERSION, minVersion)) {\n throw new Error('AWS SDK version ' + minVersion + ' or greater required.');\n }\n for (var prop in awssdk) {\n if (awssdk[prop].serviceIdentifier) {\n var Service = awssdk[prop];\n Service.prototype.customizeRequests(captureAWSRequest);\n }\n }\n return awssdk;\n};\n/**\n * Configures any AWS Client instance to automatically capture information for the segment.\n * For manual mode, a param with key called 'Segment' is required as a part of the AWS\n * call paramaters, and must reference a Segment or Subsegment object.\n * @param {AWS.Service} service - An instance of a AWS service to wrap.\n * @alias module:aws_p.captureAWSClient\n * @returns {AWS.Service}\n * @see https://github.com/aws/aws-sdk-js\n */\nvar captureAWSClient = function captureAWSClient(service) {\n service.customizeRequests(captureAWSRequest);\n return service;\n};\nfunction captureAWSRequest(req) {\n var parent = contextUtils.resolveSegment(contextUtils.resolveManualSegmentParams(req.params));\n if (!parent) {\n var output = this.serviceIdentifier + '.' + req.operation;\n if (!contextUtils.isAutomaticMode()) {\n logger.getLogger().info('Call ' + output + ' requires a segment object' +\n ' on the request params as \"XRaySegment\" for tracing in manual mode. Ignoring.');\n }\n else {\n logger.getLogger().info('Call ' + output +\n ' is missing the sub/segment context for automatic mode. Ignoring.');\n }\n return req;\n }\n var throttledError = this.throttledError || throttledErrorDefault;\n var stack = (new Error()).stack;\n let subsegment;\n if (parent.notTraced) {\n subsegment = parent.addNewSubsegmentWithoutSampling(this.serviceIdentifier);\n }\n else {\n subsegment = parent.addNewSubsegment(this.serviceIdentifier);\n }\n var traceId = parent.segment ? parent.segment.trace_id : parent.trace_id;\n const data = parent.segment ? parent.segment.additionalTraceData : parent.additionalTraceData;\n var buildListener = function (req) {\n let traceHeader = 'Root=' + traceId + ';Parent=' + subsegment.id +\n ';Sampled=' + (subsegment.notTraced ? '0' : '1');\n if (data != null) {\n for (const [key, value] of Object.entries(data)) {\n traceHeader += ';' + key + '=' + value;\n }\n }\n req.httpRequest.headers['X-Amzn-Trace-Id'] = traceHeader;\n };\n var completeListener = function (res) {\n subsegment.addAttribute('namespace', 'aws');\n subsegment.addAttribute('aws', new Aws(res, subsegment.name));\n var httpRes = res.httpResponse;\n if (httpRes) {\n subsegment.addAttribute('http', new HttpResponse(httpRes));\n if (httpRes.statusCode === 429 || (res.error && throttledError(res.error))) {\n subsegment.addThrottleFlag();\n }\n }\n if (res.error) {\n var err = { message: res.error.message, name: res.error.code, stack: stack };\n if (httpRes && httpRes.statusCode) {\n if (Utils.getCauseTypeFromHttpStatus(httpRes.statusCode) == 'error') {\n subsegment.addErrorFlag();\n }\n subsegment.close(err, true);\n }\n else {\n subsegment.close(err);\n }\n }\n else {\n if (httpRes && httpRes.statusCode) {\n var cause = Utils.getCauseTypeFromHttpStatus(httpRes.statusCode);\n if (cause) {\n subsegment[cause] = true;\n }\n }\n subsegment.close();\n }\n };\n req.on('beforePresign', function (req) {\n // Only the AWS Presigner triggers this event,\n // so we can rely on this event to notify us when\n // a request is for a presigned url\n parent.removeSubsegment(subsegment);\n parent.decrementCounter();\n req.removeListener('build', buildListener);\n req.removeListener('complete', completeListener);\n });\n req.on('build', buildListener).on('complete', completeListener);\n if (!req.__send) {\n req.__send = req.send;\n req.send = function (callback) {\n if (contextUtils.isAutomaticMode()) {\n var session = contextUtils.getNamespace();\n session.run(function () {\n contextUtils.setSegment(subsegment);\n req.__send(callback);\n });\n }\n else {\n req.__send(callback);\n }\n };\n }\n}\nfunction HttpResponse(res) {\n this.init(res);\n}\nHttpResponse.prototype.init = function init(res) {\n this.response = {\n status: res.statusCode || '',\n };\n if (res.headers && res.headers['content-length']) {\n this.response.content_length = res.headers['content-length'];\n }\n};\nmodule.exports.captureAWSClient = captureAWSClient;\nmodule.exports.captureAWS = captureAWS;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.NODEJS_TIMEOUT_ERROR_CODES = exports.TRANSIENT_ERROR_STATUS_CODES = exports.TRANSIENT_ERROR_CODES = exports.THROTTLING_ERROR_CODES = exports.CLOCK_SKEW_ERROR_CODES = void 0;\nexports.CLOCK_SKEW_ERROR_CODES = [\n \"AuthFailure\",\n \"InvalidSignatureException\",\n \"RequestExpired\",\n \"RequestInTheFuture\",\n \"RequestTimeTooSkewed\",\n \"SignatureDoesNotMatch\",\n];\nexports.THROTTLING_ERROR_CODES = [\n \"BandwidthLimitExceeded\",\n \"EC2ThrottledException\",\n \"LimitExceededException\",\n \"PriorRequestNotComplete\",\n \"ProvisionedThroughputExceededException\",\n \"RequestLimitExceeded\",\n \"RequestThrottled\",\n \"RequestThrottledException\",\n \"SlowDown\",\n \"ThrottledException\",\n \"Throttling\",\n \"ThrottlingException\",\n \"TooManyRequestsException\",\n \"TransactionInProgressException\",\n];\nexports.TRANSIENT_ERROR_CODES = [\"TimeoutError\", \"RequestTimeout\", \"RequestTimeoutException\"];\nexports.TRANSIENT_ERROR_STATUS_CODES = [500, 502, 503, 504];\nexports.NODEJS_TIMEOUT_ERROR_CODES = [\"ECONNRESET\", \"ECONNREFUSED\", \"EPIPE\", \"ETIMEDOUT\"];\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isServerError = exports.isTransientError = exports.isThrottlingError = exports.isClockSkewError = exports.isRetryableByTrait = void 0;\nconst constants_1 = require(\"./constants\");\nconst isRetryableByTrait = (error) => error.$retryable !== undefined;\nexports.isRetryableByTrait = isRetryableByTrait;\nconst isClockSkewError = (error) => constants_1.CLOCK_SKEW_ERROR_CODES.includes(error.name);\nexports.isClockSkewError = isClockSkewError;\nconst isThrottlingError = (error) => {\n var _a, _b;\n return ((_a = error.$metadata) === null || _a === void 0 ? void 0 : _a.httpStatusCode) === 429 ||\n constants_1.THROTTLING_ERROR_CODES.includes(error.name) ||\n ((_b = error.$retryable) === null || _b === void 0 ? void 0 : _b.throttling) == true;\n};\nexports.isThrottlingError = isThrottlingError;\nconst isTransientError = (error) => {\n var _a;\n return constants_1.TRANSIENT_ERROR_CODES.includes(error.name) ||\n constants_1.NODEJS_TIMEOUT_ERROR_CODES.includes((error === null || error === void 0 ? void 0 : error.code) || \"\") ||\n constants_1.TRANSIENT_ERROR_STATUS_CODES.includes(((_a = error.$metadata) === null || _a === void 0 ? void 0 : _a.httpStatusCode) || 0);\n};\nexports.isTransientError = isTransientError;\nconst isServerError = (error) => {\n var _a;\n if (((_a = error.$metadata) === null || _a === void 0 ? void 0 : _a.httpStatusCode) !== undefined) {\n const statusCode = error.$metadata.httpStatusCode;\n if (500 <= statusCode && statusCode <= 599 && !(0, exports.isTransientError)(error)) {\n return true;\n }\n return false;\n }\n return false;\n};\nexports.isServerError = isServerError;\n", "\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.captureAWSClient = void 0;\nconst service_error_classification_1 = require(\"@aws-sdk/service-error-classification\");\nconst aws_1 = __importDefault(require(\"../segments/attributes/aws\"));\nconst querystring_1 = require(\"querystring\");\nconst subsegment_1 = __importDefault(require(\"../segments/attributes/subsegment\"));\nconst contextUtils = require('../context_utils');\nconst logger = require('../logger');\nconst { safeParseInt } = require('../utils');\nconst utils_1 = require(\"../utils\");\nconst XRAY_PLUGIN_NAME = 'XRaySDKInstrumentation';\nconst buildAttributesFromMetadata = async (service, operation, region, res, error) => {\n var _a, _b, _c;\n const { extendedRequestId, requestId, httpStatusCode: statusCode, attempts } = ((_a = res === null || res === void 0 ? void 0 : res.output) === null || _a === void 0 ? void 0 : _a.$metadata) || (error === null || error === void 0 ? void 0 : error.$metadata);\n const aws = new aws_1.default({\n extendedRequestId,\n requestId,\n retryCount: attempts,\n request: {\n operation,\n httpRequest: {\n region,\n statusCode,\n },\n },\n }, service);\n const http = {};\n if (statusCode) {\n http.response = {};\n http.response.status = statusCode;\n }\n if (((_b = res === null || res === void 0 ? void 0 : res.response) === null || _b === void 0 ? void 0 : _b.headers) && ((_c = res === null || res === void 0 ? void 0 : res.response) === null || _c === void 0 ? void 0 : _c.headers['content-length']) !== undefined) {\n if (!http.response) {\n http.response = {};\n }\n http.response.content_length = safeParseInt(res.response.headers['content-length']);\n }\n return [aws, http];\n};\nfunction addFlags(http, subsegment, err) {\n var _a, _b, _c;\n if (err && (0, service_error_classification_1.isThrottlingError)(err)) {\n subsegment.addThrottleFlag();\n }\n else if (safeParseInt((_a = http.response) === null || _a === void 0 ? void 0 : _a.status) === 429 || safeParseInt((_b = err === null || err === void 0 ? void 0 : err.$metadata) === null || _b === void 0 ? void 0 : _b.httpStatusCode) === 429) {\n subsegment.addThrottleFlag();\n }\n const cause = (0, utils_1.getCauseTypeFromHttpStatus)(safeParseInt((_c = http.response) === null || _c === void 0 ? void 0 : _c.status));\n if (cause === 'fault') {\n subsegment.addFaultFlag();\n }\n else if (cause === 'error') {\n subsegment.addErrorFlag();\n }\n}\nconst getXRayMiddleware = (config, manualSegment) => (next, context) => async (args) => {\n const segment = contextUtils.isAutomaticMode() ? contextUtils.resolveSegment() : manualSegment;\n const { clientName, commandName } = context;\n const operation = commandName.slice(0, -7); // Strip trailing \"Command\" string\n const service = clientName.slice(0, -6); // Strip trailing \"Client\" string\n if (!segment) {\n const output = service + '.' + operation.charAt(0).toLowerCase() + operation.slice(1);\n if (!contextUtils.isAutomaticMode()) {\n logger.getLogger().info('Call ' + output + ' requires a segment object' +\n ' passed to captureAWSv3Client for tracing in manual mode. Ignoring.');\n }\n else {\n logger.getLogger().info('Call ' + output +\n ' is missing the sub/segment context for automatic mode. Ignoring.');\n }\n return next(args);\n }\n let subsegment;\n if (segment.notTraced) {\n subsegment = segment.addNewSubsegmentWithoutSampling(service);\n }\n else {\n subsegment = segment.addNewSubsegment(service);\n }\n subsegment.addAttribute('namespace', 'aws');\n const parent = (segment instanceof subsegment_1.default ? segment.segment : segment);\n args.request.headers['X-Amzn-Trace-Id'] = (0, querystring_1.stringify)({\n Root: parent.trace_id,\n Parent: subsegment.id,\n Sampled: subsegment.notTraced ? '0' : '1',\n }, ';');\n let res;\n try {\n res = await next(args);\n if (!res) {\n throw new Error('Failed to get response from instrumented AWS Client.');\n }\n const [aws, http] = await buildAttributesFromMetadata(service, operation, await config.region(), res, null);\n subsegment.addAttribute('aws', aws);\n subsegment.addAttribute('http', http);\n addFlags(http, subsegment);\n subsegment.close();\n return res;\n }\n catch (err) {\n if (err.$metadata) {\n const [aws, http] = await buildAttributesFromMetadata(service, operation, await config.region(), null, err);\n subsegment.addAttribute('aws', aws);\n subsegment.addAttribute('http', http);\n addFlags(http, subsegment, err);\n }\n const errObj = { message: err.message, name: err.name, stack: err.stack || new Error().stack };\n subsegment.close(errObj, true);\n throw err;\n }\n};\nconst xRayMiddlewareOptions = {\n name: XRAY_PLUGIN_NAME,\n step: 'build',\n};\nconst getXRayPlugin = (config, manualSegment) => ({\n applyToStack: (stack) => {\n stack.add(getXRayMiddleware(config, manualSegment), xRayMiddlewareOptions);\n },\n});\n/**\n * Instruments AWS SDK V3 clients with X-Ray via middleware.\n *\n * @param client - AWS SDK V3 client to instrument\n * @param manualSegment - Parent segment or subsegment that is passed in for manual mode users\n * @returns - the client with the X-Ray instrumentation middleware added to its middleware stack\n */\nfunction captureAWSClient(client, manualSegment) {\n // Remove existing middleware to ensure operation is idempotent\n client.middlewareStack.remove(XRAY_PLUGIN_NAME);\n client.middlewareStack.use(getXRayPlugin(client.config, manualSegment));\n return client;\n}\nexports.captureAWSClient = captureAWSClient;\n", "\"use strict\";\n/**\n * @module http_p\n */\n/**\n * This module patches the HTTP and HTTPS node built-in libraries and returns a copy of the module with tracing enabled.\n */\nvar url = require('url');\nvar contextUtils = require('../context_utils');\nvar Utils = require('../utils');\nvar logger = require('../logger');\nvar events = require('events');\n/**\n * Wraps the http/https.request() and .get() calls to automatically capture information for the segment.\n * This patches the built-in HTTP and HTTPS modules globally. If using a 3rd party HTTP library,\n * it should still use HTTP under the hood. Be sure to patch globally before requiring the 3rd party library.\n * 3rd party library compatibility is best effort. Some incompatibility issues may arise.\n * @param {http|https} module - The built in Node.js HTTP or HTTPS module.\n * @param {boolean} downstreamXRayEnabled - when true, adds a \"traced:true\" property to the subsegment\n * so the AWS X-Ray service expects a corresponding segment from the downstream service.\n * @param {function} subsegmentCallback - a callback that is called with the subsegment, the Node.js\n * http.ClientRequest, the Node.js http.IncomingMessage (if a response was received) and any error issued,\n * allowing custom annotations and metadata to be added.\n * to be added to the subsegment.\n * @alias module:http_p.captureHTTPsGlobal\n */\nvar captureHTTPsGlobal = function captureHTTPsGlobal(module, downstreamXRayEnabled, subsegmentCallback) {\n if (!module.__request) {\n enableCapture(module, downstreamXRayEnabled, subsegmentCallback);\n }\n};\n/**\n * Wraps the http/https.request() and .get() calls to automatically capture information for the segment.\n * Returns an instance of the HTTP or HTTPS module that is patched.\n * @param {http|https} module - The built in Node.js HTTP or HTTPS module.\n * @param {boolean} downstreamXRayEnabled - when true, adds a \"traced:true\" property to the subsegment\n * so the AWS X-Ray service expects a corresponding segment from the downstream service.\n * @param {function} subsegmentCallback - a callback that is called with the subsegment, the Node.js\n * http.ClientRequest, and the Node.js http.IncomingMessage to allow custom annotations and metadata\n * to be added to the subsegment.\n * @alias module:http_p.captureHTTPs\n * @returns {http|https}\n */\nvar captureHTTPs = function captureHTTPs(module, downstreamXRayEnabled, subsegmentCallback) {\n if (module.__request) {\n return module;\n }\n var tracedModule = {};\n Object.keys(module).forEach(function (val) {\n tracedModule[val] = module[val];\n });\n enableCapture(tracedModule, downstreamXRayEnabled, subsegmentCallback);\n return tracedModule;\n};\nfunction enableCapture(module, downstreamXRayEnabled, subsegmentCallback) {\n function captureOutgoingHTTPs(baseFunc, ...args) {\n let options;\n let callback;\n let hasUrl;\n let urlObj;\n let arg0 = args[0];\n if (typeof args[1] === 'object') {\n hasUrl = true;\n urlObj = typeof arg0 === 'string' ? new url.URL(arg0) : arg0;\n options = args[1],\n callback = args[2];\n }\n else {\n hasUrl = false;\n options = arg0;\n callback = args[1];\n }\n // Short circuit if the HTTP request has no options or is already being captured\n if (!options || (options.headers && (options.headers['X-Amzn-Trace-Id']))) {\n return baseFunc(...args);\n }\n // Case of calling a string URL without options, e.g.: http.request('http://amazon.com', callback)\n if (typeof options === 'string') {\n options = new url.URL(options);\n }\n if (!hasUrl) {\n urlObj = options;\n }\n const parent = contextUtils.resolveSegment(contextUtils.resolveManualSegmentParams(options));\n const hostname = options.hostname || options.host || urlObj.hostname || urlObj.host || 'Unknown host';\n if (!parent) {\n let output = '[ host: ' + hostname;\n output = options.method ? (output + ', method: ' + options.method) : output;\n output += ', path: ' + (urlObj.pathname || Utils.stripQueryStringFromPath(options.path)) + ' ]';\n if (!contextUtils.isAutomaticMode()) {\n logger.getLogger().info('Options for request ' + output +\n ' requires a segment object on the options params as \"XRaySegment\" for tracing in manual mode. Ignoring.');\n }\n else {\n logger.getLogger().info('Options for request ' + output +\n ' is missing the sub/segment context for automatic mode. Ignoring.');\n }\n // Options are not modified, only parsed for logging. We can pass in the original arguments.\n return baseFunc(...args);\n }\n let subsegment;\n if (parent.notTraced) {\n subsegment = parent.addNewSubsegmentWithoutSampling(hostname);\n }\n else {\n subsegment = parent.addNewSubsegment(hostname);\n }\n const root = parent.segment ? parent.segment : parent;\n subsegment.namespace = 'remote';\n if (!options.headers) {\n options.headers = {};\n }\n options.headers['X-Amzn-Trace-Id'] = 'Root=' + root.trace_id + ';Parent=' + subsegment.id +\n ';Sampled=' + (subsegment.notTraced ? '0' : '1');\n const errorCapturer = function errorCapturer(e) {\n if (subsegmentCallback) {\n subsegmentCallback(subsegment, this, null, e);\n }\n if (subsegment.http && subsegment.http.response) {\n if (Utils.getCauseTypeFromHttpStatus(subsegment.http.response.status) === 'error') {\n subsegment.addErrorFlag();\n }\n subsegment.close(e, true);\n }\n else {\n const madeItToDownstream = (e.code !== 'ECONNREFUSED');\n subsegment.addRemoteRequestData(this, null, madeItToDownstream && downstreamXRayEnabled);\n subsegment.close(e);\n }\n };\n const optionsCopy = Utils.objectWithoutProperties(options, ['Segment'], true);\n let req = baseFunc(...(hasUrl ? [arg0, optionsCopy] : [options]), function (res) {\n res.on('end', function () {\n if (subsegmentCallback) {\n subsegmentCallback(subsegment, this.req, res);\n }\n if (res.statusCode === 429) {\n subsegment.addThrottleFlag();\n }\n const cause = Utils.getCauseTypeFromHttpStatus(res.statusCode);\n if (cause) {\n subsegment[cause] = true;\n }\n subsegment.addRemoteRequestData(res.req, res, !!downstreamXRayEnabled);\n subsegment.close();\n });\n if (typeof callback === 'function') {\n if (contextUtils.isAutomaticMode()) {\n const session = contextUtils.getNamespace();\n session.run(function () {\n contextUtils.setSegment(subsegment);\n callback(res);\n });\n }\n else {\n callback(res);\n }\n // if no callback provided by user application, AND no explicit response listener\n // added by user application, then we consume the response so the 'end' event fires\n // See: https://nodejs.org/api/http.html#http_class_http_clientrequest\n }\n else if (res.req && res.req.listenerCount('response') === 0) {\n res.resume();\n }\n });\n // Use errorMonitor if available (in Node 12.17+), otherwise fall back to standard error listener\n // See: https://nodejs.org/dist/latest-v12.x/docs/api/events.html#events_eventemitter_errormonitor\n req.on(events.errorMonitor || 'error', errorCapturer);\n return req;\n }\n module.__request = module.request;\n function captureHTTPsRequest(...args) {\n return captureOutgoingHTTPs(module.__request, ...args);\n }\n module.__get = module.get;\n function captureHTTPsGet(...args) {\n return captureOutgoingHTTPs(module.__get, ...args);\n }\n Object.defineProperties(module, {\n request: { value: captureHTTPsRequest, configurable: true, enumerable: true, writable: true },\n get: { value: captureHTTPsGet, configurable: true, enumerable: true, writable: true },\n });\n}\nmodule.exports.captureHTTPsGlobal = captureHTTPsGlobal;\nmodule.exports.captureHTTPs = captureHTTPs;\n", "\"use strict\";\n/**\n * @module promise_p\n */\n/**\n * This module patches native Promise libraries provided by V8 engine\n * so all subsegments generated within Promise are attached to the correct parent.\n */\nconst contextUtils = require('../context_utils');\nconst originalThen = Symbol('original then');\nconst originalCatch = Symbol('original catch');\nfunction patchPromise(Promise) {\n const then = Promise.prototype.then;\n if (!then[originalThen]) {\n Promise.prototype.then = function (onFulfilled, onRejected) {\n if (contextUtils.isAutomaticMode()\n && tryGetCurrentSegment()) {\n const ns = contextUtils.getNamespace();\n onFulfilled = onFulfilled && ns.bind(onFulfilled);\n onRejected = onRejected && ns.bind(onRejected);\n }\n return then.call(this, onFulfilled, onRejected);\n };\n Promise.prototype.then[originalThen] = then;\n }\n const origCatch = Promise.prototype.catch;\n if (origCatch && !origCatch[originalCatch]) {\n Promise.prototype.catch = function (onRejected) {\n if (contextUtils.isAutomaticMode()\n && tryGetCurrentSegment()) {\n const ns = contextUtils.getNamespace();\n onRejected = onRejected && ns.bind(onRejected);\n }\n return origCatch.call(this, onRejected);\n };\n Promise.prototype.catch[originalCatch] = origCatch;\n }\n}\nfunction unpatchPromise(Promise) {\n const then = Promise.prototype.then;\n if (then[originalThen]) {\n Promise.prototype.then = then[originalThen];\n }\n const origCatch = Promise.prototype.catch;\n if (origCatch && origCatch[originalCatch]) {\n Promise.prototype.catch = origCatch[originalCatch];\n }\n}\nfunction tryGetCurrentSegment() {\n try {\n return contextUtils.getSegment();\n }\n catch (e) {\n return undefined;\n }\n}\nfunction capturePromise() {\n patchPromise(Promise);\n}\nfunction uncapturePromise() {\n unpatchPromise(Promise);\n}\ncapturePromise.patchThirdPartyPromise = patchPromise;\nmodule.exports.capturePromise = capturePromise;\nmodule.exports.uncapturePromise = uncapturePromise;\n", "\"use strict\";\n/**\n * Represents a SQL database call.\n * @constructor\n * @param {string} databaseVer - The version on the database (user supplied).\n * @param {string} driverVer - The version on the database driver (user supplied).\n * @param {string} user - The user associated to the database call.\n * @param {string} queryType - The SQL query type.\n */\nfunction SqlData(databaseVer, driverVer, user, url, queryType) {\n this.init(databaseVer, driverVer, user, url, queryType);\n}\nSqlData.prototype.init = function init(databaseVer, driverVer, user, url, queryType) {\n if (databaseVer) {\n this.database_version = databaseVer;\n }\n if (driverVer) {\n this.driver_version = driverVer;\n }\n if (queryType) {\n this.preparation = queryType;\n }\n this.url = url;\n this.user = user;\n};\nmodule.exports = SqlData;\n", "\"use strict\";\nvar contextUtils = require('./context_utils');\nvar logging = require('./logger');\nvar segmentUtils = require('./segments/segment_utils');\nvar utils = require('./utils');\nvar LambdaEnv = require('./env/aws_lambda');\n// Import Data from package.json,\n// If the importing of package.json fails leave\n// pkginfo as an empty object\nvar pkginfo = {};\ntry {\n pkginfo = require('../../package.json');\n}\ncatch (err) {\n logging.getLogger().debug('Failed to load SDK data:', err);\n}\nvar UNKNOWN = 'unknown';\n/**\n * A module representing the AWSXRay SDK.\n * @namespace AWSXRay\n */\nvar AWSXRay = {\n /**\n * @memberof AWSXRay\n * @type {object}\n * @namespace AWSXRay.plugins\n */\n plugins: {\n /**\n * Exposes the AWS EC2 plugin.\n * @memberof AWSXRay.plugins\n */\n EC2Plugin: require('./segments/plugins/ec2_plugin'),\n /**\n * Exposes the AWS ECS plugin.\n * @memberof AWSXRay.plugins\n */\n ECSPlugin: require('./segments/plugins/ecs_plugin'),\n /**\n * Exposes the AWS Elastic Beanstalk plugin.\n * @memberof AWSXRay.plugins\n */\n ElasticBeanstalkPlugin: require('./segments/plugins/elastic_beanstalk_plugin'),\n },\n /**\n * Enables use of plugins to capture additional data for segments.\n * @param {Array} plugins - A configurable subset of AWSXRay.plugins.\n * @memberof AWSXRay\n * @see AWSXRay.plugins\n */\n config: function (plugins) {\n var pluginData = {};\n plugins.forEach(function (plugin) {\n plugin.getData(function (data) {\n if (data) {\n for (var attribute in data) {\n pluginData[attribute] = data[attribute];\n }\n }\n });\n segmentUtils.setOrigin(plugin.originName);\n segmentUtils.setPluginData(pluginData);\n });\n },\n /**\n * Overrides the default whitelisting file to specify what params to capture on each AWS Service call.\n * If a service or API is not listed, no additional data is captured.\n * The base whitelisting file can be found at /lib/resources/aws_whitelist.json\n * @param {string|Object} source - The path to the custom whitelist file, or a whitelist source JSON object.\n * @memberof AWSXRay\n */\n setAWSWhitelist: require('./segments/attributes/aws').setAWSWhitelist,\n /**\n * Appends to the current whitelisting file.\n * In the case of a duplicate service API listed, the new source will override the previous values.\n * @param {string|Object} source - The path to the custom whitelist file, or a whitelist source JSON object.\n * @memberof AWSXRay\n */\n appendAWSWhitelist: require('./segments/attributes/aws').appendAWSWhitelist,\n /**\n * Overrides the default streaming threshold (100).\n * The threshold represents the maximum number of subsegments on a single segment before\n * the SDK begins to send the completed subsegments out of band of the main segment.\n * Reduce this threshold if you see the 'Segment too large to send' error.\n * @param {number} threshold - The new threshold to use.\n * @memberof AWSXRay\n */\n setStreamingThreshold: segmentUtils.setStreamingThreshold,\n /**\n * Set your own logger for the SDK.\n * @param {Object} logger - A logger which responds to debug/info/warn/error calls.\n * @memberof AWSXRay\n */\n setLogger: logging.setLogger,\n /**\n * Gets the set logger for the SDK.\n * @memberof AWSXRay\n */\n getLogger: logging.getLogger,\n /**\n * Configures the address and port the daemon is expected to be on.\n * @param {string} address - Address of the daemon the segments should be sent to. Expects 'x.x.x.x', ':yyyy' or 'x.x.x.x:yyyy' IPv4 formats.\n * @module DaemonConfig\n * @memberof AWSXRay\n * @function\n * @see module:DaemonConfig.setDaemonAddress\n */\n setDaemonAddress: require('./daemon_config').setDaemonAddress,\n /**\n * @param {string} name - The name of the new subsegment.\n * @param {function} fcn - The function conext to wrap.\n * @param {Segment|Subsegment} [parent] - The parent for the new subsegment, for manual mode.\n * @memberof AWSXRay\n * @function\n * @see module:capture.captureFunc\n */\n captureFunc: require('./capture').captureFunc,\n /**\n * @param {string} name - The name of the new subsegment.\n * @param {function} fcn - The function conext to wrap.\n * @param {Segment|Subsegment} [parent] - The parent for the new subsegment, for manual mode.\n * @memberof AWSXRay\n * @function\n * @see module:capture.captureAsyncFunc\n */\n captureAsyncFunc: require('./capture').captureAsyncFunc,\n /**\n * @param {string} name - The name of the new subsegment.\n * @param {function} fcn - The function conext to wrap.\n * @param {Segment|Subsegment} [parent] - The parent for the new subsegment, for manual mode.\n * @memberof AWSXRay\n * @function\n * @see module:capture.captureCallbackFunc\n */\n captureCallbackFunc: require('./capture').captureCallbackFunc,\n /**\n * @param {AWS} awssdk - The Javascript AWS SDK.\n * @memberof AWSXRay\n * @function\n * @see module:aws_p.captureAWS\n */\n captureAWS: require('./patchers/aws_p').captureAWS,\n /**\n * @param {AWS.Service} service - An instance of a AWS service to wrap.\n * @memberof AWSXRay\n * @function\n * @see module:aws_p.captureAWSClient\n */\n captureAWSClient: require('./patchers/aws_p').captureAWSClient,\n /**\n * @param {AWSv3.Service} service - An instance of a AWS SDK v3 service to wrap.\n * @param {Segment|Subsegment} segment - Optional segment for manual mode.\n * @memberof AWSXRay\n * @function\n * @see module:aws3_p.captureAWSClient\n */\n captureAWSv3Client: require('./patchers/aws3_p').captureAWSClient,\n /**\n * @param {http|https} module - The built in Node.js HTTP or HTTPS module.\n * @memberof AWSXRay\n * @function\n * @returns {http|https}\n * @see module:http_p.captureHTTPs\n */\n captureHTTPs: require('./patchers/http_p').captureHTTPs,\n /**\n * @param {http|https} module - The built in Node.js HTTP or HTTPS module.\n * @memberof AWSXRay\n * @function\n * @see module:http_p.captureHTTPsGlobal\n */\n captureHTTPsGlobal: require('./patchers/http_p').captureHTTPsGlobal,\n /**\n * @memberof AWSXRay\n * @function\n * @see module:promise_p.capturePromise\n */\n capturePromise: require('./patchers/promise_p').capturePromise,\n /**\n * Exposes various helper methods.\n * @memberof AWSXRay\n * @function\n * @see module:utils\n */\n utils: utils,\n /**\n * @memberof AWSXRay\n * @type {object}\n * @namespace AWSXRay.database\n */\n database: {\n /**\n * Exposes the SqlData class.\n * @memberof AWSXRay.database\n * @see SqlData\n */\n SqlData: require('./database/sql_data'),\n },\n /**\n * Exposes the Middleware Utils class.\n * @memberof AWSXRay\n * @function\n * @see module:mw_utils\n */\n middleware: require('./middleware/mw_utils'),\n /**\n * Gets the current namespace of the context.\n * Used for supporting functions that can be used in automatic mode.\n * @memberof AWSXRay\n * @function\n * @returns {Segment|Subsegment}\n * @see module:context_utils.getNamespace\n */\n getNamespace: contextUtils.getNamespace,\n /**\n * Resolves the current segment or subsegment, checks manual and automatic modes.\n * Used for supporting functions that can be used in both manual and automatic modes.\n * @memberof AWSXRay\n * @function\n * @returns {Segment|Subsegment}\n * @see module:context_utils.resolveSegment\n */\n resolveSegment: contextUtils.resolveSegment,\n /**\n * Returns the current segment or subsegment. For use with automatic mode only.\n * @memberof AWSXRay\n * @function\n * @returns {Segment|Subsegment}\n * @see module:context_utils.getSegment\n */\n getSegment: contextUtils.getSegment,\n /**\n * Sets the current segment or subsegment. For use with automatic mode only.\n * @memberof AWSXRay\n * @function\n * @see module:context_utils.setSegment\n */\n setSegment: contextUtils.setSegment,\n /**\n * Returns true if automatic mode is enabled, otherwise false.\n * @memberof AWSXRay\n * @function\n * @see module:context_utils.isAutomaticMode\n */\n isAutomaticMode: contextUtils.isAutomaticMode,\n /**\n * Enables automatic mode. Automatic mode uses 'cls-hooked'.\n * @see https://github.com/jeff-lewis/cls-hooked\n * @memberof AWSXRay\n * @function\n * @see module:context_utils.enableAutomaticMode\n */\n enableAutomaticMode: contextUtils.enableAutomaticMode,\n /**\n * Disables automatic mode. Current segment or subsegment must be passed manually\n * via the parent optional on captureFunc, captureAsyncFunc etc.\n * @memberof AWSXRay\n * @function\n * @see module:context_utils.enableManualMode\n */\n enableManualMode: contextUtils.enableManualMode,\n /**\n * Sets the context missing strategy.\n * @param {Object} strategy - The strategy to set. This object's contextMissing function will be called whenever trace context is not found.\n */\n setContextMissingStrategy: contextUtils.setContextMissingStrategy,\n /**\n * Exposes the segment class.\n * @memberof AWSXRay\n * @function\n */\n Segment: require('./segments/segment'),\n /**\n * Exposes the subsegment class.\n * @memberof AWSXRay\n * @see Subsegment\n */\n Subsegment: require('./segments/attributes/subsegment'),\n SegmentUtils: segmentUtils\n};\n/**\n * Exposes the IncomingRequestData, to capture incoming request data.\n * For use with middleware.\n * @memberof AWSXRay.middleware\n * @see IncomingRequestData\n */\nAWSXRay.middleware.IncomingRequestData = require('./middleware/incoming_request_data'),\n (function () {\n var data = {\n runtime: (process.release && process.release.name) ? process.release.name : UNKNOWN,\n runtime_version: process.version,\n version: process.env.npm_package_version || UNKNOWN,\n name: process.env.npm_package_name || UNKNOWN\n };\n var sdkData = {\n sdk: 'X-Ray for Node.js',\n sdk_version: pkginfo.version ? pkginfo.version : UNKNOWN,\n package: pkginfo.name ? pkginfo.name : UNKNOWN,\n };\n segmentUtils.setSDKData(sdkData);\n segmentUtils.setServiceData(data);\n if (process.env.LAMBDA_TASK_ROOT) {\n LambdaEnv.init();\n }\n })();\nmodule.exports = AWSXRay;\n", "\"use strict\";\n// Convenience file to require the SDK from the root of the repository\nmodule.exports = require('./aws-xray');\n", "import type { Context } from 'aws-lambda';\nimport type * as AWS from 'aws-sdk';\nimport * as aws from '../shared/aws.lambda-shared';\nimport { METADATA_KEY_SUFFIX, PACKAGE_KEY_SUFFIX } from '../shared/constants';\nimport { requireEnv } from '../shared/env.lambda-shared';\nimport { integrity } from '../shared/integrity.lambda-shared';\n\ninterface Input extends AWS.S3.Object {\n Key: string;\n}\n\nexport async function handler(event: Input, context: Context) {\n console.log('Event: ', JSON.stringify(event, null, 2));\n\n const bucket = requireEnv('BUCKET_NAME');\n const queueUrl = requireEnv('QUEUE_URL');\n\n console.log(`Download metadata object at ${bucket}/${event.Key}`);\n const { Body: jsonMetadata } = await aws\n .s3()\n .getObject({ Bucket: bucket, Key: event.Key })\n .promise();\n if (jsonMetadata == null) {\n console.error(`No body found in ${bucket}/${event.Key}, aborting.`);\n return;\n }\n const { date: time } = JSON.parse(jsonMetadata.toString('utf-8'));\n\n const tarballKey = `${event.Key.substr(\n 0,\n event.Key.length - METADATA_KEY_SUFFIX.length\n )}${PACKAGE_KEY_SUFFIX}`;\n console.log(`Download metadata object at ${bucket}/${tarballKey}`);\n const { Body: tarball, VersionId: versionId } = await aws\n .s3()\n .getObject({ Bucket: bucket, Key: tarballKey })\n .promise();\n if (tarball == null) {\n console.error(`No body found in ${bucket}/${tarballKey}, aborting.`);\n return;\n }\n\n const ingestionInput = integrity(\n {\n tarballUri: `s3://${bucket}/${tarballKey}${\n versionId ? `?versionId=${versionId}` : ''\n }`,\n time,\n reIngest: true,\n metadata: {\n reprocessRequestId: context.awsRequestId,\n reprocessLogGroup: context.logGroupName,\n reprocessLogStream: context.logStreamName,\n },\n },\n Buffer.from(tarball as any)\n );\n\n console.log(\n `Sending message to reprocess queue: ${JSON.stringify(\n ingestionInput,\n null,\n 2\n )}`\n );\n return aws\n .sqs()\n .sendMessage({\n QueueUrl: queueUrl,\n MessageBody: JSON.stringify(ingestionInput, null, 2),\n MessageAttributes: {\n 'Reprocess-RequestID': {\n DataType: 'String',\n StringValue: context.awsRequestId,\n },\n 'Reprocess-LogGroup': {\n DataType: 'String',\n StringValue: context.logGroupName,\n },\n 'Reprocess-LogStream': {\n DataType: 'String',\n StringValue: context.logStreamName,\n },\n },\n })\n .promise();\n}\n", "import * as _AWS from 'aws-sdk';\nimport * as AWSXRay from 'aws-xray-sdk-core';\n\n// Do nothing if there is no XRay trace context\nAWSXRay.setContextMissingStrategy(() => {});\n\nconst AWS = AWSXRay.captureAWS(_AWS);\n\nlet _ecs: AWS.ECS | undefined;\nlet _s3: AWS.S3 | undefined;\nlet _sqs: AWS.SQS | undefined;\nlet _sfn: AWS.StepFunctions | undefined;\nlet _lambda: AWS.Lambda | undefined;\nlet _codeArtifact: AWS.CodeArtifact | undefined;\n\nexport function ecs(): AWS.ECS {\n if (_ecs == null) {\n _ecs = new AWS.ECS();\n }\n return _ecs;\n}\n\nexport function s3(): AWS.S3 {\n if (_s3 == null) {\n _s3 = new AWS.S3();\n }\n return _s3;\n}\n\n/**\n * Checks whether an object exists in S3 at the provided bucket and key.\n */\nexport function s3ObjectExists(bucket: string, key: string): Promise<boolean> {\n return s3()\n .headObject({\n Bucket: bucket,\n Key: key,\n })\n .promise()\n .then(\n () => true,\n (cause) => {\n if (cause.code === 'NotFound') {\n return false;\n }\n return Promise.reject(cause);\n }\n );\n}\n\nexport function sqs(): AWS.SQS {\n if (_sqs == null) {\n _sqs = new AWS.SQS();\n }\n return _sqs;\n}\n\nexport function stepFunctions(): AWS.StepFunctions {\n if (_sfn == null) {\n _sfn = new AWS.StepFunctions();\n }\n return _sfn;\n}\n\nexport function lambda(): AWS.Lambda {\n if (_lambda == null) {\n _lambda = new AWS.Lambda();\n }\n return _lambda;\n}\n\nexport function codeArtifact(): AWS.CodeArtifact {\n if (_codeArtifact == null) {\n _codeArtifact = new AWS.CodeArtifact();\n }\n return _codeArtifact;\n}\n\n/**\n * Resets all clients vended by this module. This is useful in unit tests when\n * `aws-sdk-mocks` is used, so that new mocks are injected as intended.\n */\nexport function reset(): void {\n _ecs = _s3 = _sqs = _sfn = _lambda = _codeArtifact = undefined;\n}\n", "/**\n * Supported languages to generate documentation in.\n */\nexport class DocumentationLanguage {\n /**\n * TypeScript.\n */\n public static readonly TYPESCRIPT = new DocumentationLanguage('typescript');\n\n /**\n * Python.\n */\n public static readonly PYTHON = new DocumentationLanguage('python');\n\n /**\n * Java.\n */\n public static readonly JAVA = new DocumentationLanguage('java');\n\n /**\n * CSharp.\n */\n public static readonly CSHARP = new DocumentationLanguage('csharp', 'dotnet');\n\n /**\n * Go.\n */\n public static readonly GO = new DocumentationLanguage('go');\n\n /**\n * All supported languages.\n */\n public static readonly ALL = [\n DocumentationLanguage.TYPESCRIPT,\n DocumentationLanguage.PYTHON,\n DocumentationLanguage.JAVA,\n DocumentationLanguage.CSHARP,\n DocumentationLanguage.GO,\n ] as const;\n\n /**\n * Transform a literal string to the `DocumentationLanguage` object.\n *\n * Throws an `UnsupportedLanguageError` if the language is not supported.\n */\n public static fromString(lang: string) {\n switch (lang) {\n case DocumentationLanguage.TYPESCRIPT.toString():\n return DocumentationLanguage.TYPESCRIPT;\n case DocumentationLanguage.PYTHON.toString():\n return DocumentationLanguage.PYTHON;\n case DocumentationLanguage.JAVA.toString():\n return DocumentationLanguage.JAVA;\n case DocumentationLanguage.CSHARP.toString():\n case DocumentationLanguage.CSHARP.targetName:\n return DocumentationLanguage.CSHARP;\n case DocumentationLanguage.GO.toString():\n return DocumentationLanguage.GO;\n default:\n throw new UnsupportedLanguageError(lang, DocumentationLanguage.ALL);\n }\n }\n\n private constructor(\n public readonly name: string,\n public readonly targetName = name\n ) {}\n\n public toString() {\n return this.name;\n }\n}\n\nexport class UnsupportedLanguageError extends Error {\n constructor(lang: string, supported: readonly DocumentationLanguage[]) {\n super(\n `Unsupported language: ${lang}. Supported languages are: [${supported}]`\n );\n }\n}\n", "/*\n * IMPORTANT: This file is used both by bundled lambda functions and by\n * constructs. This means it should not directly or transitively import anything\n * not part of the package's `dependencies`, such as the `aws-sdk`.\n */\n\nimport { DocumentationLanguage } from './language';\n\n/**\n * Key prefix for the package data storage.\n */\nexport const STORAGE_KEY_PREFIX = 'data/';\n\n/**\n * Key suffix for storing npm package bundles.\n */\nexport const PACKAGE_KEY_SUFFIX = '/package.tgz';\n\n/**\n * Key suffix for storing npm package metadata.\n */\nexport const METADATA_KEY_SUFFIX = '/metadata.json';\n\n/**\n * The key suffix for (TypeScript) assembly files\n */\nexport const ASSEMBLY_KEY_SUFFIX = '/assembly.json';\n\n/**\n * The key suffix release notes file\n */\nexport const PACKAGE_RELEASE_NOTES_KEY_SUFFIX = '/release-notes.md';\n\n/**\n * The key suffix for a TypeScript doc artifact (root module).\n */\nexport const DOCS_KEY_SUFFIX_TYPESCRIPT = docsKeySuffix(\n DocumentationLanguage.TYPESCRIPT\n);\n\n/**\n * The key suffix for a Python doc artifact (root module).\n */\nexport const DOCS_KEY_SUFFIX_PYTHON = docsKeySuffix(\n DocumentationLanguage.PYTHON\n);\n\n/**\n * The key suffix for a Java doc artifact (root module).\n */\nexport const DOCS_KEY_SUFFIX_JAVA = docsKeySuffix(DocumentationLanguage.JAVA);\n\n/**\n * The key suffix for a Dotnet doc artifact (root module).\n */\nexport const DOCS_KEY_SUFFIX_CSHARP = docsKeySuffix(\n DocumentationLanguage.CSHARP\n);\n\n/**\n * The key suffix for a Go doc artifact (root module).\n */\nexport const DOCS_KEY_SUFFIX_GO = docsKeySuffix(DocumentationLanguage.GO);\n\n/**\n * The key suffix matching any documentation artifact.\n */\nexport const DOCS_KEY_SUFFIX_ANY = docsKeySuffix('*');\n\n/**\n * Key for RSS document\n */\nexport const FEED_RSS_KEY = 'rss';\n\n/**\n * Key for RSS document\n */\nexport const FEED_ATOM_KEY = 'atom';\n\n/**\n * Key for badge image endpoint.\n */\nexport const BADGE_KEY = 'badge';\n\n/**\n * Env variable name used to set construct hub url for RSS/ATOM feed\n */\nexport const CONSTRUCT_HUB_URL_ENV_VAR_NAME = 'CONSTRUCT_HUB_URL';\n\nexport const CONSTRUCT_HUB_FEED_TITLE = 'CONSTRUCT_HUB_FEED_TITLE';\n\nexport const CONSTRUCT_HUB_FEED_DESCRIPTION = 'CONSTRUCT_HUB_FEED_DESCRIPTION';\n\n/**\n * Return the S3 object key prefix for a specific package name and optionally a\n * version. Note that the prefix does not end with a \"/\" so you will likely want\n * to add that if you want to match a specific set of objects.\n */\nexport function getObjectKeyPrefix(\n packageName: string,\n packageVersion?: string\n) {\n let key = `${STORAGE_KEY_PREFIX}${packageName}`;\n if (packageVersion) {\n key += `/v${packageVersion}`;\n }\n\n return key;\n}\n\n/**\n * Resolves the set of S3 object keys use for a specific package/version.\n */\nexport function getObjectKeys(packageName: string, packageVersion: string) {\n const prefix = getObjectKeyPrefix(packageName, packageVersion);\n return {\n assemblyKey: `${prefix}${ASSEMBLY_KEY_SUFFIX}`,\n packageKey: `${prefix}${PACKAGE_KEY_SUFFIX}`,\n metadataKey: `${prefix}${METADATA_KEY_SUFFIX}`,\n releaseNotesKey: `${prefix}${PACKAGE_RELEASE_NOTES_KEY_SUFFIX}`,\n };\n}\n\n/**\n * The key suffix for documentation artifacts by language and submodule.\n */\nexport function docsKeySuffix(\n lang?: DocumentationLanguage | '*',\n submodule?: string,\n fileExt?: string\n) {\n return `/docs-${submodule ? `${submodule}-` : ''}${lang}.${fileExt ?? '*'}`;\n}\n\n/**\n * The key suffix for a corrupted assembly marker by language and submodule.\n */\nexport function corruptAssemblyKeySuffix(\n lang?: DocumentationLanguage | '*',\n submodule?: string,\n fileExt?: string\n) {\n return `${docsKeySuffix(lang, submodule, fileExt)}${CORRUPT_ASSEMBLY_SUFFIX}`;\n}\n\n/**\n * The key suffix for a not supported marker by language and submodule.\n */\nexport function notSupportedKeySuffix(\n lang?: DocumentationLanguage | '*',\n submodule?: string,\n fileExt?: string\n) {\n return `${docsKeySuffix(lang, submodule, fileExt)}${NOT_SUPPORTED_SUFFIX}`;\n}\n\n/**\n * Key suffix for beacon files when a particular feature is not supported for\n * the particular package (i.e: Python docs for a package that does not have a\n * Python target configured).\n */\nexport const NOT_SUPPORTED_SUFFIX = '.not-supported';\n\n/**\n * Key suffix for beacon files marking that a language specific assembly is corrupt\n * and we cannot generate docs from it.\n */\nexport const CORRUPT_ASSEMBLY_SUFFIX = '.corruptassembly';\n\n/**\n * Key suffix for a beacon file when a package cannot be installed.\n */\nexport const UNINSTALLABLE_PACKAGE_SUFFIX = '/uninstallable';\n\n/**\n * Name of the error denoting an unprocessable package that should be diverted away from the DLQ.\n */\nexport const UNPROCESSABLE_PACKAGE_ERROR_NAME = 'UnprocessablePackageError';\n\n/**\n * The key for the catalog document.\n */\nexport const CATALOG_KEY = 'catalog.json';\n\n/** Key for feed metadata document*/\nexport const FEED_METADATA_KEY = 'feed-metadata.json';\n\n/**\n * The key for the version tracking document.\n */\nexport const VERSION_TRACKER_KEY = 'all-versions.json';\n\n/**\n * The key for missing documentation report.\n *\n * @param language the language for which missing documentation is requested.\n */\nexport function missingDocumentationReport(\n language: DocumentationLanguage\n): string {\n return `missing-objects/${language.name}-documentation.json`;\n}\n\n/**\n * The key for corrupt assembly report.\n *\n * @param language the language for which the report is requested.\n */\nexport function corruptAssemblyReport(language: DocumentationLanguage): string {\n return `corruptassembly-objects/${language.name}.json`;\n}\n\n/**\n * The key for uninstallable packages report.\n */\nexport const UNINSTALLABLE_PACKAGES_REPORT = 'uninstallable-objects/data.json';\n\n/**\n * The key pattern for objects containing missing documentation lists.\n */\nexport const MISSING_DOCUMENTATION_REPORT_PATTERN =\n 'missing-objects/*-documentation.json';\n\n/**\n * The key pattern for objects containing unprocessable assembly lists.\n */\nexport const CORRUPT_ASSEMBLY_REPORT_PATTERN = 'corruptassembly-objects/*.json';\n\n/**\n * A regular expression that can be used to parse out a storage key.\n */\nexport const STORAGE_KEY_FORMAT_REGEX = new RegExp(\n `^${STORAGE_KEY_PREFIX}((?:@[^/]+/)?[^/]+)/v([^/]+)/.*$`\n);\n// Capture groups: \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u25011\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B \u2517\u2501\u25012\u2501\u2501\u251B\n", "import { env } from 'process';\n\nexport function requireEnv(name: string): string {\n const result = env[name];\n if (!result) {\n throw new Error(\n `No value specified for required environment variable: ${name}`\n );\n }\n return result;\n}\n", "import { createHash } from 'crypto';\nimport type { IngestionInput } from './ingestion-input.lambda-shared';\n\n/**\n * Computes an integrity checksum for the provided `IngestionInput`.\n *\n * @param input the `IngestionInput` for which to make a checksum.\n * @param tarball the content of the `.tgz` npm package\n * @param alg the hash algorithm to use (e.g: 'sha384')\n *\n * @returns the computed checksum.\n */\nexport function integrity(\n input: Input,\n tarball: Buffer,\n alg = input.integrity?.split('-')[0] ?? 'sha384'\n): IngestionInput {\n const hash = createHash(alg);\n const addField = (name: string, data: string | Buffer) =>\n // <SOH> $name <STX> $data <ETX>\n hash.update('\\x01').update(name).update('\\x02').update(data).update('\\x03');\n\n for (const [name, value] of Object.entries(input.metadata ?? {}).sort(\n ([l], [r]) => l.localeCompare(r)\n )) {\n addField(`metadata/${name}`, value);\n }\n addField('tarball', tarball);\n addField('time', input.time);\n\n return {\n ...input,\n integrity: `${alg}-${hash.digest('base64')}`,\n };\n}\n\ninterface Input extends Omit<IngestionInput, 'integrity'> {\n readonly integrity?: string;\n}\n"],
5
- "mappings": "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",
6
- "names": ["module", "module", "module", "triggerId", "module", "module", "module", "module", "processAddress", "module", "module", "module", "j", "i", "patternChar", "module", "module", "module", "module", "module", "setContextMissingStrategy", "module", "getClientIp", "module", "module", "module", "loadRulesConfig", "parseRulesConfig", "key", "module", "module", "module", "constructStatisticsDocs", "assembleRules", "assembleTargets", "isRuleValid", "dateToEpoch", "getOptions", "module", "isExpired", "module", "refresh", "refreshWithFirewall", "refreshCache", "getJitter", "module", "refreshWithFirewall", "refresh", "getCandidates", "getJitter", "module", "processMatchedRule", "module", "module", "facadeSegment", "module", "module", "module", "module", "module", "module", "module", "module", "setAWSWhitelist", "appendAWSWhitelist", "module", "captureFunc", "captureAsyncFunc", "captureCallbackFunc", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "require_valid", "module", "module", "module", "module", "module", "module", "module", "require_semver", "module", "module", "throttledErrorDefault", "captureAWS", "captureAWSClient", "req", "require_constants", "module", "captureHTTPsGlobal", "captureHTTPs", "errorCapturer", "module", "Promise", "module", "module", "AWSXRay", "module"]
3
+ "sources": ["../../../../node_modules/shimmer/index.js", "../../../../node_modules/emitter-listener/listener.js", "../../../../node_modules/cls-hooked/context.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/logger.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/segments/attributes/captured_exception.js", "../../../../node_modules/atomic-batcher/index.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/daemon_config.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/segment_emitter.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/segments/attributes/trace_id.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/utils.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/segments/segment_utils.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/segments/attributes/remote_request_data.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/segments/attributes/subsegment.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/segments/segment.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/context_utils.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/middleware/incoming_request_data.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/middleware/sampling/local_reservoir.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/resources/default_sampling_rules.json", "../../../../node_modules/aws-xray-sdk-core/dist/lib/middleware/sampling/local_sampler.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/middleware/sampling/reservoir.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/middleware/sampling/sampling_rule.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/middleware/sampling/service_connector.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/middleware/sampling/rule_cache.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/middleware/sampling/rule_poller.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/middleware/sampling/target_poller.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/middleware/sampling/default_sampler.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/middleware/mw_utils.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/env/aws_lambda.js", "../../../../node_modules/aws-xray-sdk-core/package.json", "../../../../node_modules/aws-xray-sdk-core/dist/lib/segments/plugins/plugin.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/segments/plugins/ec2_plugin.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/segments/plugins/ecs_plugin.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/segments/plugins/elastic_beanstalk_plugin.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/resources/aws_whitelist.json", "../../../../node_modules/aws-xray-sdk-core/dist/lib/patchers/call_capturer.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/segments/attributes/aws.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/capture.js", "../../../../node_modules/semver/internal/constants.js", "../../../../node_modules/semver/internal/debug.js", "../../../../node_modules/semver/internal/re.js", "../../../../node_modules/semver/internal/parse-options.js", "../../../../node_modules/semver/internal/identifiers.js", "../../../../node_modules/semver/classes/semver.js", "../../../../node_modules/semver/functions/parse.js", "../../../../node_modules/semver/functions/valid.js", "../../../../node_modules/semver/functions/clean.js", "../../../../node_modules/semver/functions/inc.js", "../../../../node_modules/semver/functions/diff.js", "../../../../node_modules/semver/functions/major.js", "../../../../node_modules/semver/functions/minor.js", "../../../../node_modules/semver/functions/patch.js", "../../../../node_modules/semver/functions/prerelease.js", "../../../../node_modules/semver/functions/compare.js", "../../../../node_modules/semver/functions/rcompare.js", "../../../../node_modules/semver/functions/compare-loose.js", "../../../../node_modules/semver/functions/compare-build.js", "../../../../node_modules/semver/functions/sort.js", "../../../../node_modules/semver/functions/rsort.js", "../../../../node_modules/semver/functions/gt.js", "../../../../node_modules/semver/functions/lt.js", "../../../../node_modules/semver/functions/eq.js", "../../../../node_modules/semver/functions/neq.js", "../../../../node_modules/semver/functions/gte.js", "../../../../node_modules/semver/functions/lte.js", "../../../../node_modules/semver/functions/cmp.js", "../../../../node_modules/semver/functions/coerce.js", "../../../../node_modules/yallist/iterator.js", "../../../../node_modules/yallist/yallist.js", "../../../../node_modules/semver/node_modules/lru-cache/index.js", "../../../../node_modules/semver/classes/range.js", "../../../../node_modules/semver/classes/comparator.js", "../../../../node_modules/semver/functions/satisfies.js", "../../../../node_modules/semver/ranges/to-comparators.js", "../../../../node_modules/semver/ranges/max-satisfying.js", "../../../../node_modules/semver/ranges/min-satisfying.js", "../../../../node_modules/semver/ranges/min-version.js", "../../../../node_modules/semver/ranges/valid.js", "../../../../node_modules/semver/ranges/outside.js", "../../../../node_modules/semver/ranges/gtr.js", "../../../../node_modules/semver/ranges/ltr.js", "../../../../node_modules/semver/ranges/intersects.js", "../../../../node_modules/semver/ranges/simplify.js", "../../../../node_modules/semver/ranges/subset.js", "../../../../node_modules/semver/index.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/patchers/aws_p.js", "../../../../node_modules/@aws-sdk/service-error-classification/dist-cjs/constants.js", "../../../../node_modules/@aws-sdk/service-error-classification/dist-cjs/index.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/patchers/aws3_p.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/patchers/http_p.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/patchers/promise_p.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/database/sql_data.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/aws-xray.js", "../../../../node_modules/aws-xray-sdk-core/dist/lib/index.js", "../../../../src/backend/ingestion/re-ingest.lambda.ts", "../../../../src/backend/shared/aws.lambda-shared.ts", "../../../../src/backend/shared/language.ts", "../../../../src/backend/shared/constants.ts", "../../../../src/backend/shared/env.lambda-shared.ts", "../../../../src/backend/shared/integrity.lambda-shared.ts", "../../../../src/backend/shared/time.lambda-shared.ts"],
4
+ "sourcesContent": ["'use strict'\n\nfunction isFunction (funktion) {\n return typeof funktion === 'function'\n}\n\n// Default to complaining loudly when things don't go according to plan.\nvar logger = console.error.bind(console)\n\n// Sets a property on an object, preserving its enumerability.\n// This function assumes that the property is already writable.\nfunction defineProperty (obj, name, value) {\n var enumerable = !!obj[name] && obj.propertyIsEnumerable(name)\n Object.defineProperty(obj, name, {\n configurable: true,\n enumerable: enumerable,\n writable: true,\n value: value\n })\n}\n\n// Keep initialization idempotent.\nfunction shimmer (options) {\n if (options && options.logger) {\n if (!isFunction(options.logger)) logger(\"new logger isn't a function, not replacing\")\n else logger = options.logger\n }\n}\n\nfunction wrap (nodule, name, wrapper) {\n if (!nodule || !nodule[name]) {\n logger('no original function ' + name + ' to wrap')\n return\n }\n\n if (!wrapper) {\n logger('no wrapper function')\n logger((new Error()).stack)\n return\n }\n\n if (!isFunction(nodule[name]) || !isFunction(wrapper)) {\n logger('original object and wrapper must be functions')\n return\n }\n\n var original = nodule[name]\n var wrapped = wrapper(original, name)\n\n defineProperty(wrapped, '__original', original)\n defineProperty(wrapped, '__unwrap', function () {\n if (nodule[name] === wrapped) defineProperty(nodule, name, original)\n })\n defineProperty(wrapped, '__wrapped', true)\n\n defineProperty(nodule, name, wrapped)\n return wrapped\n}\n\nfunction massWrap (nodules, names, wrapper) {\n if (!nodules) {\n logger('must provide one or more modules to patch')\n logger((new Error()).stack)\n return\n } else if (!Array.isArray(nodules)) {\n nodules = [nodules]\n }\n\n if (!(names && Array.isArray(names))) {\n logger('must provide one or more functions to wrap on modules')\n return\n }\n\n nodules.forEach(function (nodule) {\n names.forEach(function (name) {\n wrap(nodule, name, wrapper)\n })\n })\n}\n\nfunction unwrap (nodule, name) {\n if (!nodule || !nodule[name]) {\n logger('no function to unwrap.')\n logger((new Error()).stack)\n return\n }\n\n if (!nodule[name].__unwrap) {\n logger('no original to unwrap to -- has ' + name + ' already been unwrapped?')\n } else {\n return nodule[name].__unwrap()\n }\n}\n\nfunction massUnwrap (nodules, names) {\n if (!nodules) {\n logger('must provide one or more modules to patch')\n logger((new Error()).stack)\n return\n } else if (!Array.isArray(nodules)) {\n nodules = [nodules]\n }\n\n if (!(names && Array.isArray(names))) {\n logger('must provide one or more functions to unwrap on modules')\n return\n }\n\n nodules.forEach(function (nodule) {\n names.forEach(function (name) {\n unwrap(nodule, name)\n })\n })\n}\n\nshimmer.wrap = wrap\nshimmer.massWrap = massWrap\nshimmer.unwrap = unwrap\nshimmer.massUnwrap = massUnwrap\n\nmodule.exports = shimmer\n", "'use strict';\n\nvar shimmer = require('shimmer');\nvar wrap = shimmer.wrap;\nvar unwrap = shimmer.unwrap;\n\n// Default to complaining loudly when things don't go according to plan.\n// dunderscores are boring\nvar SYMBOL = 'wrap@before';\n\n// Sets a property on an object, preserving its enumerability.\n// This function assumes that the property is already writable.\nfunction defineProperty(obj, name, value) {\n var enumerable = !!obj[name] && obj.propertyIsEnumerable(name);\n Object.defineProperty(obj, name, {\n configurable: true,\n enumerable: enumerable,\n writable: true,\n value: value\n });\n}\n\nfunction _process(self, listeners) {\n var l = listeners.length;\n for (var p = 0; p < l; p++) {\n var listener = listeners[p];\n // set up the listener so that onEmit can do whatever it needs\n var before = self[SYMBOL];\n if (typeof before === 'function') {\n before(listener);\n }\n else if (Array.isArray(before)) {\n var length = before.length;\n for (var i = 0; i < length; i++) before[i](listener);\n }\n }\n}\n\nfunction _listeners(self, event) {\n var listeners;\n listeners = self._events && self._events[event];\n if (!Array.isArray(listeners)) {\n if (listeners) {\n listeners = [listeners];\n }\n else {\n listeners = [];\n }\n }\n\n return listeners;\n}\n\nfunction _findAndProcess(self, event, before) {\n var after = _listeners(self, event);\n var unprocessed = after.filter(function(fn) { return before.indexOf(fn) === -1; });\n if (unprocessed.length > 0) _process(self, unprocessed);\n}\n\nfunction _wrap(unwrapped, visit) {\n if (!unwrapped) return;\n\n var wrapped = unwrapped;\n if (typeof unwrapped === 'function') {\n wrapped = visit(unwrapped);\n }\n else if (Array.isArray(unwrapped)) {\n wrapped = [];\n for (var i = 0; i < unwrapped.length; i++) {\n wrapped[i] = visit(unwrapped[i]);\n }\n }\n return wrapped;\n}\n\nmodule.exports = function wrapEmitter(emitter, onAddListener, onEmit) {\n if (!emitter || !emitter.on || !emitter.addListener ||\n !emitter.removeListener || !emitter.emit) {\n throw new Error(\"can only wrap real EEs\");\n }\n\n if (!onAddListener) throw new Error(\"must have function to run on listener addition\");\n if (!onEmit) throw new Error(\"must have function to wrap listeners when emitting\");\n\n /* Attach a context to a listener, and make sure that this hook stays\n * attached to the emitter forevermore.\n */\n function adding(on) {\n return function added(event, listener) {\n var existing = _listeners(this, event).slice();\n\n try {\n var returned = on.call(this, event, listener);\n _findAndProcess(this, event, existing);\n return returned;\n }\n finally {\n // old-style streaming overwrites .on and .addListener, so rewrap\n if (!this.on.__wrapped) wrap(this, 'on', adding);\n if (!this.addListener.__wrapped) wrap(this, 'addListener', adding);\n }\n };\n }\n\n function emitting(emit) {\n return function emitted(event) {\n if (!this._events || !this._events[event]) return emit.apply(this, arguments);\n\n var unwrapped = this._events[event];\n\n /* Ensure that if removeListener gets called, it's working with the\n * unwrapped listeners.\n */\n function remover(removeListener) {\n return function removed() {\n this._events[event] = unwrapped;\n try {\n return removeListener.apply(this, arguments);\n }\n finally {\n unwrapped = this._events[event];\n this._events[event] = _wrap(unwrapped, onEmit);\n }\n };\n }\n wrap(this, 'removeListener', remover);\n\n try {\n /* At emit time, ensure that whatever else is going on, removeListener will\n * still work while at the same time running whatever hooks are necessary to\n * make sure the listener is run in the correct context.\n */\n this._events[event] = _wrap(unwrapped, onEmit);\n return emit.apply(this, arguments);\n }\n finally {\n /* Ensure that regardless of what happens when preparing and running the\n * listeners, the status quo ante is restored before continuing.\n */\n unwrap(this, 'removeListener');\n this._events[event] = unwrapped;\n }\n };\n }\n\n // support multiple onAddListeners\n if (!emitter[SYMBOL]) {\n defineProperty(emitter, SYMBOL, onAddListener);\n }\n else if (typeof emitter[SYMBOL] === 'function') {\n defineProperty(emitter, SYMBOL, [emitter[SYMBOL], onAddListener]);\n }\n else if (Array.isArray(emitter[SYMBOL])) {\n emitter[SYMBOL].push(onAddListener);\n }\n\n // only wrap the core functions once\n if (!emitter.__wrapped) {\n wrap(emitter, 'addListener', adding);\n wrap(emitter, 'on', adding);\n wrap(emitter, 'emit', emitting);\n\n defineProperty(emitter, '__unwrap', function () {\n unwrap(emitter, 'addListener');\n unwrap(emitter, 'on');\n unwrap(emitter, 'emit');\n delete emitter[SYMBOL];\n delete emitter.__wrapped;\n });\n defineProperty(emitter, '__wrapped', true);\n }\n};\n", "/* eslint-disable max-len */\n'use strict';\n\nconst util = require('util');\nconst assert = require('assert');\nconst wrapEmitter = require('emitter-listener');\nconst async_hooks = require('async_hooks');\n\nconst CONTEXTS_SYMBOL = 'cls@contexts';\nconst ERROR_SYMBOL = 'error@context';\n\nconst DEBUG_CLS_HOOKED = process.env.DEBUG_CLS_HOOKED;\n\nlet currentUid = -1;\n\nmodule.exports = {\n getNamespace: getNamespace,\n createNamespace: createNamespace,\n destroyNamespace: destroyNamespace,\n reset: reset,\n ERROR_SYMBOL: ERROR_SYMBOL\n};\n\nfunction Namespace(name) {\n this.name = name;\n // changed in 2.7: no default context\n this.active = null;\n this._set = [];\n this.id = null;\n this._contexts = new Map();\n this._indent = 0;\n}\n\nNamespace.prototype.set = function set(key, value) {\n if (!this.active) {\n throw new Error('No context available. ns.run() or ns.bind() must be called first.');\n }\n\n this.active[key] = value;\n\n if (DEBUG_CLS_HOOKED) {\n const indentStr = ' '.repeat(this._indent < 0 ? 0 : this._indent);\n debug2(indentStr + 'CONTEXT-SET KEY:' + key + '=' + value + ' in ns:' + this.name + ' currentUid:' + currentUid + ' active:' + util.inspect(this.active, {showHidden:true, depth:2, colors:true}));\n }\n\n return value;\n};\n\nNamespace.prototype.get = function get(key) {\n if (!this.active) {\n if (DEBUG_CLS_HOOKED) {\n const asyncHooksCurrentId = async_hooks.currentId();\n const triggerId = async_hooks.triggerAsyncId();\n const indentStr = ' '.repeat(this._indent < 0 ? 0 : this._indent);\n //debug2(indentStr + 'CONTEXT-GETTING KEY NO ACTIVE NS:' + key + '=undefined' + ' (' + this.name + ') currentUid:' + currentUid + ' active:' + util.inspect(this.active, {showHidden:true, depth:2, colors:true}));\n debug2(`${indentStr}CONTEXT-GETTING KEY NO ACTIVE NS: (${this.name}) ${key}=undefined currentUid:${currentUid} asyncHooksCurrentId:${asyncHooksCurrentId} triggerId:${triggerId} len:${this._set.length}`);\n }\n return undefined;\n }\n if (DEBUG_CLS_HOOKED) {\n const asyncHooksCurrentId = async_hooks.executionAsyncId();\n const triggerId = async_hooks.triggerAsyncId();\n const indentStr = ' '.repeat(this._indent < 0 ? 0 : this._indent);\n debug2(indentStr + 'CONTEXT-GETTING KEY:' + key + '=' + this.active[key] + ' (' + this.name + ') currentUid:' + currentUid + ' active:' + util.inspect(this.active, {showHidden:true, depth:2, colors:true}));\n debug2(`${indentStr}CONTEXT-GETTING KEY: (${this.name}) ${key}=${this.active[key]} currentUid:${currentUid} asyncHooksCurrentId:${asyncHooksCurrentId} triggerId:${triggerId} len:${this._set.length} active:${util.inspect(this.active)}`);\n }\n return this.active[key];\n};\n\nNamespace.prototype.createContext = function createContext() {\n // Prototype inherit existing context if created a new child context within existing context.\n let context = Object.create(this.active ? this.active : Object.prototype);\n context._ns_name = this.name;\n context.id = currentUid;\n\n if (DEBUG_CLS_HOOKED) {\n const asyncHooksCurrentId = async_hooks.executionAsyncId();\n const triggerId = async_hooks.triggerAsyncId();\n const indentStr = ' '.repeat(this._indent < 0 ? 0 : this._indent);\n debug2(`${indentStr}CONTEXT-CREATED Context: (${this.name}) currentUid:${currentUid} asyncHooksCurrentId:${asyncHooksCurrentId} triggerId:${triggerId} len:${this._set.length} context:${util.inspect(context, {showHidden:true, depth:2, colors:true})}`);\n }\n\n return context;\n};\n\nNamespace.prototype.run = function run(fn) {\n let context = this.createContext();\n this.enter(context);\n\n try {\n if (DEBUG_CLS_HOOKED) {\n const triggerId = async_hooks.triggerAsyncId();\n const asyncHooksCurrentId = async_hooks.executionAsyncId();\n const indentStr = ' '.repeat(this._indent < 0 ? 0 : this._indent);\n debug2(`${indentStr}CONTEXT-RUN BEGIN: (${this.name}) currentUid:${currentUid} triggerId:${triggerId} asyncHooksCurrentId:${asyncHooksCurrentId} len:${this._set.length} context:${util.inspect(context)}`);\n }\n fn(context);\n return context;\n } catch (exception) {\n if (exception) {\n exception[ERROR_SYMBOL] = context;\n }\n throw exception;\n } finally {\n if (DEBUG_CLS_HOOKED) {\n const triggerId = async_hooks.triggerAsyncId();\n const asyncHooksCurrentId = async_hooks.executionAsyncId();\n const indentStr = ' '.repeat(this._indent < 0 ? 0 : this._indent);\n debug2(`${indentStr}CONTEXT-RUN END: (${this.name}) currentUid:${currentUid} triggerId:${triggerId} asyncHooksCurrentId:${asyncHooksCurrentId} len:${this._set.length} ${util.inspect(context)}`);\n }\n this.exit(context);\n }\n};\n\nNamespace.prototype.runAndReturn = function runAndReturn(fn) {\n let value;\n this.run(function (context) {\n value = fn(context);\n });\n return value;\n};\n\n/**\n * Uses global Promise and assumes Promise is cls friendly or wrapped already.\n * @param {function} fn\n * @returns {*}\n */\nNamespace.prototype.runPromise = function runPromise(fn) {\n let context = this.createContext();\n this.enter(context);\n\n let promise = fn(context);\n if (!promise || !promise.then || !promise.catch) {\n throw new Error('fn must return a promise.');\n }\n\n if (DEBUG_CLS_HOOKED) {\n debug2('CONTEXT-runPromise BEFORE: (' + this.name + ') currentUid:' + currentUid + ' len:' + this._set.length + ' ' + util.inspect(context));\n }\n\n return promise\n .then(result => {\n if (DEBUG_CLS_HOOKED) {\n debug2('CONTEXT-runPromise AFTER then: (' + this.name + ') currentUid:' + currentUid + ' len:' + this._set.length + ' ' + util.inspect(context));\n }\n this.exit(context);\n return result;\n })\n .catch(err => {\n err[ERROR_SYMBOL] = context;\n if (DEBUG_CLS_HOOKED) {\n debug2('CONTEXT-runPromise AFTER catch: (' + this.name + ') currentUid:' + currentUid + ' len:' + this._set.length + ' ' + util.inspect(context));\n }\n this.exit(context);\n throw err;\n });\n};\n\nNamespace.prototype.bind = function bindFactory(fn, context) {\n if (!context) {\n if (!this.active) {\n context = this.createContext();\n } else {\n context = this.active;\n }\n }\n\n let self = this;\n return function clsBind() {\n self.enter(context);\n try {\n return fn.apply(this, arguments);\n } catch (exception) {\n if (exception) {\n exception[ERROR_SYMBOL] = context;\n }\n throw exception;\n } finally {\n self.exit(context);\n }\n };\n};\n\nNamespace.prototype.enter = function enter(context) {\n assert.ok(context, 'context must be provided for entering');\n if (DEBUG_CLS_HOOKED) {\n const asyncHooksCurrentId = async_hooks.executionAsyncId();\n const triggerId = async_hooks.triggerAsyncId();\n const indentStr = ' '.repeat(this._indent < 0 ? 0 : this._indent);\n debug2(`${indentStr}CONTEXT-ENTER: (${this.name}) currentUid:${currentUid} triggerId:${triggerId} asyncHooksCurrentId:${asyncHooksCurrentId} len:${this._set.length} ${util.inspect(context)}`);\n }\n\n this._set.push(this.active);\n this.active = context;\n};\n\nNamespace.prototype.exit = function exit(context) {\n assert.ok(context, 'context must be provided for exiting');\n if (DEBUG_CLS_HOOKED) {\n const asyncHooksCurrentId = async_hooks.executionAsyncId();\n const triggerId = async_hooks.triggerAsyncId();\n const indentStr = ' '.repeat(this._indent < 0 ? 0 : this._indent);\n debug2(`${indentStr}CONTEXT-EXIT: (${this.name}) currentUid:${currentUid} triggerId:${triggerId} asyncHooksCurrentId:${asyncHooksCurrentId} len:${this._set.length} ${util.inspect(context)}`);\n }\n\n // Fast path for most exits that are at the top of the stack\n if (this.active === context) {\n assert.ok(this._set.length, 'can\\'t remove top context');\n this.active = this._set.pop();\n return;\n }\n\n // Fast search in the stack using lastIndexOf\n let index = this._set.lastIndexOf(context);\n\n if (index < 0) {\n if (DEBUG_CLS_HOOKED) {\n debug2('??ERROR?? context exiting but not entered - ignoring: ' + util.inspect(context));\n }\n assert.ok(index >= 0, 'context not currently entered; can\\'t exit. \\n' + util.inspect(this) + '\\n' + util.inspect(context));\n } else {\n assert.ok(index, 'can\\'t remove top context');\n this._set.splice(index, 1);\n }\n};\n\nNamespace.prototype.bindEmitter = function bindEmitter(emitter) {\n assert.ok(emitter.on && emitter.addListener && emitter.emit, 'can only bind real EEs');\n\n let namespace = this;\n let thisSymbol = 'context@' + this.name;\n\n // Capture the context active at the time the emitter is bound.\n function attach(listener) {\n if (!listener) {\n return;\n }\n if (!listener[CONTEXTS_SYMBOL]) {\n listener[CONTEXTS_SYMBOL] = Object.create(null);\n }\n\n listener[CONTEXTS_SYMBOL][thisSymbol] = {\n namespace: namespace,\n context: namespace.active\n };\n }\n\n // At emit time, bind the listener within the correct context.\n function bind(unwrapped) {\n if (!(unwrapped && unwrapped[CONTEXTS_SYMBOL])) {\n return unwrapped;\n }\n\n let wrapped = unwrapped;\n let unwrappedContexts = unwrapped[CONTEXTS_SYMBOL];\n Object.keys(unwrappedContexts).forEach(function (name) {\n let thunk = unwrappedContexts[name];\n wrapped = thunk.namespace.bind(wrapped, thunk.context);\n });\n return wrapped;\n }\n\n wrapEmitter(emitter, attach, bind);\n};\n\n/**\n * If an error comes out of a namespace, it will have a context attached to it.\n * This function knows how to find it.\n *\n * @param {Error} exception Possibly annotated error.\n */\nNamespace.prototype.fromException = function fromException(exception) {\n return exception[ERROR_SYMBOL];\n};\n\nfunction getNamespace(name) {\n return process.namespaces[name];\n}\n\nfunction createNamespace(name) {\n assert.ok(name, 'namespace must be given a name.');\n\n if (DEBUG_CLS_HOOKED) {\n debug2(`NS-CREATING NAMESPACE (${name})`);\n }\n let namespace = new Namespace(name);\n namespace.id = currentUid;\n\n const hook = async_hooks.createHook({\n init(asyncId, type, triggerId, resource) {\n currentUid = async_hooks.executionAsyncId();\n\n //CHAIN Parent's Context onto child if none exists. This is needed to pass net-events.spec\n // let initContext = namespace.active;\n // if(!initContext && triggerId) {\n // let parentContext = namespace._contexts.get(triggerId);\n // if (parentContext) {\n // namespace.active = parentContext;\n // namespace._contexts.set(currentUid, parentContext);\n // if (DEBUG_CLS_HOOKED) {\n // const indentStr = ' '.repeat(namespace._indent < 0 ? 0 : namespace._indent);\n // debug2(`${indentStr}INIT [${type}] (${name}) WITH PARENT CONTEXT asyncId:${asyncId} currentUid:${currentUid} triggerId:${triggerId} active:${util.inspect(namespace.active, true)} resource:${resource}`);\n // }\n // } else if (DEBUG_CLS_HOOKED) {\n // const indentStr = ' '.repeat(namespace._indent < 0 ? 0 : namespace._indent);\n // debug2(`${indentStr}INIT [${type}] (${name}) MISSING CONTEXT asyncId:${asyncId} currentUid:${currentUid} triggerId:${triggerId} active:${util.inspect(namespace.active, true)} resource:${resource}`);\n // }\n // }else {\n // namespace._contexts.set(currentUid, namespace.active);\n // if (DEBUG_CLS_HOOKED) {\n // const indentStr = ' '.repeat(namespace._indent < 0 ? 0 : namespace._indent);\n // debug2(`${indentStr}INIT [${type}] (${name}) asyncId:${asyncId} currentUid:${currentUid} triggerId:${triggerId} active:${util.inspect(namespace.active, true)} resource:${resource}`);\n // }\n // }\n if(namespace.active) {\n namespace._contexts.set(asyncId, namespace.active);\n\n if (DEBUG_CLS_HOOKED) {\n const indentStr = ' '.repeat(namespace._indent < 0 ? 0 : namespace._indent);\n debug2(`${indentStr}INIT [${type}] (${name}) asyncId:${asyncId} currentUid:${currentUid} triggerId:${triggerId} active:${util.inspect(namespace.active, {showHidden:true, depth:2, colors:true})} resource:${resource}`);\n }\n }else if(currentUid === 0){\n // CurrentId will be 0 when triggered from C++. Promise events\n // https://github.com/nodejs/node/blob/master/doc/api/async_hooks.md#triggerid\n const triggerId = async_hooks.triggerAsyncId();\n const triggerIdContext = namespace._contexts.get(triggerId);\n if (triggerIdContext) {\n namespace._contexts.set(asyncId, triggerIdContext);\n if (DEBUG_CLS_HOOKED) {\n const indentStr = ' '.repeat(namespace._indent < 0 ? 0 : namespace._indent);\n debug2(`${indentStr}INIT USING CONTEXT FROM TRIGGERID [${type}] (${name}) asyncId:${asyncId} currentUid:${currentUid} triggerId:${triggerId} active:${util.inspect(namespace.active, { showHidden: true, depth: 2, colors: true })} resource:${resource}`);\n }\n } else if (DEBUG_CLS_HOOKED) {\n const indentStr = ' '.repeat(namespace._indent < 0 ? 0 : namespace._indent);\n debug2(`${indentStr}INIT MISSING CONTEXT [${type}] (${name}) asyncId:${asyncId} currentUid:${currentUid} triggerId:${triggerId} active:${util.inspect(namespace.active, { showHidden: true, depth: 2, colors: true })} resource:${resource}`);\n }\n }\n\n\n if(DEBUG_CLS_HOOKED && type === 'PROMISE'){\n debug2(util.inspect(resource, {showHidden: true}));\n const parentId = resource.parentId;\n const indentStr = ' '.repeat(namespace._indent < 0 ? 0 : namespace._indent);\n debug2(`${indentStr}INIT RESOURCE-PROMISE [${type}] (${name}) parentId:${parentId} asyncId:${asyncId} currentUid:${currentUid} triggerId:${triggerId} active:${util.inspect(namespace.active, {showHidden:true, depth:2, colors:true})} resource:${resource}`);\n }\n\n },\n before(asyncId) {\n currentUid = async_hooks.executionAsyncId();\n let context;\n\n /*\n if(currentUid === 0){\n // CurrentId will be 0 when triggered from C++. Promise events\n // https://github.com/nodejs/node/blob/master/doc/api/async_hooks.md#triggerid\n //const triggerId = async_hooks.triggerAsyncId();\n context = namespace._contexts.get(asyncId); // || namespace._contexts.get(triggerId);\n }else{\n context = namespace._contexts.get(currentUid);\n }\n */\n\n //HACK to work with promises until they are fixed in node > 8.1.1\n context = namespace._contexts.get(asyncId) || namespace._contexts.get(currentUid);\n\n if (context) {\n if (DEBUG_CLS_HOOKED) {\n const triggerId = async_hooks.triggerAsyncId();\n const indentStr = ' '.repeat(namespace._indent < 0 ? 0 : namespace._indent);\n debug2(`${indentStr}BEFORE (${name}) asyncId:${asyncId} currentUid:${currentUid} triggerId:${triggerId} active:${util.inspect(namespace.active, {showHidden:true, depth:2, colors:true})} context:${util.inspect(context)}`);\n namespace._indent += 2;\n }\n\n namespace.enter(context);\n\n } else if (DEBUG_CLS_HOOKED) {\n const triggerId = async_hooks.triggerAsyncId();\n const indentStr = ' '.repeat(namespace._indent < 0 ? 0 : namespace._indent);\n debug2(`${indentStr}BEFORE MISSING CONTEXT (${name}) asyncId:${asyncId} currentUid:${currentUid} triggerId:${triggerId} active:${util.inspect(namespace.active, {showHidden:true, depth:2, colors:true})} namespace._contexts:${util.inspect(namespace._contexts, {showHidden:true, depth:2, colors:true})}`);\n namespace._indent += 2;\n }\n },\n after(asyncId) {\n currentUid = async_hooks.executionAsyncId();\n let context; // = namespace._contexts.get(currentUid);\n /*\n if(currentUid === 0){\n // CurrentId will be 0 when triggered from C++. Promise events\n // https://github.com/nodejs/node/blob/master/doc/api/async_hooks.md#triggerid\n //const triggerId = async_hooks.triggerAsyncId();\n context = namespace._contexts.get(asyncId); // || namespace._contexts.get(triggerId);\n }else{\n context = namespace._contexts.get(currentUid);\n }\n */\n //HACK to work with promises until they are fixed in node > 8.1.1\n context = namespace._contexts.get(asyncId) || namespace._contexts.get(currentUid);\n\n if (context) {\n if (DEBUG_CLS_HOOKED) {\n const triggerId = async_hooks.triggerAsyncId();\n namespace._indent -= 2;\n const indentStr = ' '.repeat(namespace._indent < 0 ? 0 : namespace._indent);\n debug2(`${indentStr}AFTER (${name}) asyncId:${asyncId} currentUid:${currentUid} triggerId:${triggerId} active:${util.inspect(namespace.active, {showHidden:true, depth:2, colors:true})} context:${util.inspect(context)}`);\n }\n\n namespace.exit(context);\n\n } else if (DEBUG_CLS_HOOKED) {\n const triggerId = async_hooks.triggerAsyncId();\n namespace._indent -= 2;\n const indentStr = ' '.repeat(namespace._indent < 0 ? 0 : namespace._indent);\n debug2(`${indentStr}AFTER MISSING CONTEXT (${name}) asyncId:${asyncId} currentUid:${currentUid} triggerId:${triggerId} active:${util.inspect(namespace.active, {showHidden:true, depth:2, colors:true})} context:${util.inspect(context)}`);\n }\n },\n destroy(asyncId) {\n currentUid = async_hooks.executionAsyncId();\n if (DEBUG_CLS_HOOKED) {\n const triggerId = async_hooks.triggerAsyncId();\n const indentStr = ' '.repeat(namespace._indent < 0 ? 0 : namespace._indent);\n debug2(`${indentStr}DESTROY (${name}) currentUid:${currentUid} asyncId:${asyncId} triggerId:${triggerId} active:${util.inspect(namespace.active, {showHidden:true, depth:2, colors:true})} context:${util.inspect(namespace._contexts.get(currentUid))}`);\n }\n\n namespace._contexts.delete(asyncId);\n }\n });\n\n hook.enable();\n\n process.namespaces[name] = namespace;\n return namespace;\n}\n\nfunction destroyNamespace(name) {\n let namespace = getNamespace(name);\n\n assert.ok(namespace, 'can\\'t delete nonexistent namespace! \"' + name + '\"');\n assert.ok(namespace.id, 'don\\'t assign to process.namespaces directly! ' + util.inspect(namespace));\n\n process.namespaces[name] = null;\n}\n\nfunction reset() {\n // must unregister async listeners\n if (process.namespaces) {\n Object.keys(process.namespaces).forEach(function (name) {\n destroyNamespace(name);\n });\n }\n process.namespaces = Object.create(null);\n}\n\nprocess.namespaces = {};\n\n//const fs = require('fs');\nfunction debug2(...args) {\n if (DEBUG_CLS_HOOKED) {\n //fs.writeSync(1, `${util.format(...args)}\\n`);\n process._rawDebug(`${util.format(...args)}`);\n }\n}\n\n/*function getFunctionName(fn) {\n if (!fn) {\n return fn;\n }\n if (typeof fn === 'function') {\n if (fn.name) {\n return fn.name;\n }\n return (fn.toString().trim().match(/^function\\s*([^\\s(]+)/) || [])[1];\n } else if (fn.constructor && fn.constructor.name) {\n return fn.constructor.name;\n }\n}*/\n\n\n", "\"use strict\";\nvar validLogLevels = ['debug', 'info', 'warn', 'error', 'silent'];\nvar defaultLogLevel = validLogLevels.indexOf('error');\nvar logLevel = calculateLogLevel(process.env.AWS_XRAY_DEBUG_MODE ? 'debug' : process.env.AWS_XRAY_LOG_LEVEL);\nvar logger = {\n error: createLoggerForLevel('error'),\n info: createLoggerForLevel('info'),\n warn: createLoggerForLevel('warn'),\n debug: createLoggerForLevel('debug'),\n};\nfunction createLoggerForLevel(level) {\n var loggerLevel = validLogLevels.indexOf(level);\n var consoleMethod = console[level] || console.log || (() => { });\n if (loggerLevel >= logLevel) {\n return (message, meta) => {\n if (message || meta) {\n consoleMethod(formatLogMessage(level, message, meta));\n }\n };\n }\n else {\n return () => { };\n }\n}\nfunction calculateLogLevel(level) {\n if (level) {\n var normalisedLevel = level.toLowerCase();\n var index = validLogLevels.indexOf(normalisedLevel);\n return index >= 0 ? index : defaultLogLevel;\n }\n // Silently ignore invalid log levels, default to default level\n return defaultLogLevel;\n}\nfunction createTimestamp(date) {\n var tzo = -date.getTimezoneOffset(), // Negate to make this tzo = local - UTC\n dif = tzo >= 0 ? '+' : '-', pad = function (num) {\n var norm = Math.floor(Math.abs(num));\n return (norm < 10 ? '0' : '') + norm;\n };\n return new Date(date.getTime() + (tzo * 60 * 1000)).toISOString()\n .replace(/T/, ' ')\n .replace(/Z/, ' ') +\n dif + pad(tzo / 60) +\n ':' + pad(tzo % 60);\n}\nfunction isLambdaFunction() {\n return process.env.LAMBDA_TASK_ROOT !== undefined;\n}\nfunction formatLogMessage(level, message, meta) {\n var messageParts = [];\n if (!isLambdaFunction()) {\n messageParts.push(createTimestamp(new Date()));\n messageParts.push(`[${level.toUpperCase()}]`);\n }\n if (message) {\n messageParts.push(message);\n }\n var logString = messageParts.join(' ');\n var metaDataString = formatMetaData(meta);\n return [logString, metaDataString].filter(str => str.length > 0).join('\\n ');\n}\nfunction formatMetaData(meta) {\n if (!meta) {\n return '';\n }\n return ((typeof (meta) === 'string') ? meta : JSON.stringify(meta));\n}\nvar logging = {\n setLogger: function setLogger(logObj) {\n logger = logObj;\n },\n getLogger: function getLogger() {\n return logger;\n }\n};\nmodule.exports = logging;\n", "\"use strict\";\nconst crypto = require('crypto');\n/**\n * Represents a captured exception.\n * @constructor\n * @param {Exception} err - The exception to capture.\n * @param {boolean} [remote] - Flag for whether the error was remote.\n */\nfunction CapturedException(err, remote) {\n this.init(err, remote);\n}\nCapturedException.prototype.init = function init(err, remote) {\n var e = (typeof err === 'string' || err instanceof String) ? { message: err, name: '' } : err;\n this.message = e.message;\n this.type = e.name;\n this.stack = [];\n this.remote = !!remote;\n this.id = crypto.randomBytes(8).toString('hex');\n if (e.stack) {\n var stack = e.stack.split('\\n');\n stack.shift();\n stack.forEach((stackline) => {\n var line = stackline.trim().replace(/\\(|\\)/g, '');\n line = line.substring(line.indexOf(' ') + 1);\n var label = line.lastIndexOf(' ') >= 0 ? line.slice(0, line.lastIndexOf(' ')) : null;\n var path = Array.isArray(label) && !label.length ? line : line.slice(line.lastIndexOf(' ') + 1);\n path = path.split(':');\n var entry = {\n path: path[0],\n line: parseInt(path[1]),\n label: label || 'anonymous'\n };\n this.stack.push(entry);\n }, this);\n }\n};\nmodule.exports = CapturedException;\n", "module.exports = batcher\n\nfunction batcher (run) {\n var running = false\n var pendingBatch = null\n var pendingCallbacks = null\n var callbacks = null\n\n return append\n\n function done (err) {\n if (callbacks) callAll(callbacks, err)\n\n running = false\n callbacks = pendingCallbacks\n var nextBatch = pendingBatch\n\n pendingBatch = null\n pendingCallbacks = null\n\n if (!nextBatch || !nextBatch.length) {\n if (!callbacks || !callbacks.length) {\n callbacks = null\n return\n }\n if (!nextBatch) nextBatch = []\n }\n\n running = true\n run(nextBatch, done)\n }\n\n function append (val, cb) {\n if (running) {\n if (!pendingBatch) {\n pendingBatch = []\n pendingCallbacks = []\n }\n pushAll(pendingBatch, val)\n if (cb) pendingCallbacks.push(cb)\n } else {\n if (cb) callbacks = [cb]\n running = true\n run(Array.isArray(val) ? val : [val], done)\n }\n }\n}\n\nfunction pushAll (list, val) {\n if (Array.isArray(val)) pushArray(list, val)\n else list.push(val)\n}\n\nfunction pushArray (list, val) {\n for (var i = 0; i < val.length; i++) list.push(val[i])\n}\n\nfunction callAll (list, err) {\n for (var i = 0; i < list.length; i++) list[i](err)\n}\n", "\"use strict\";\nvar logger = require('./logger');\n/**\n * A module representing the X-Ray daemon configuration including the udp and tcp addresses.\n * @module DaemonConfig\n */\nvar DaemonConfig = {\n udp_ip: '127.0.0.1',\n udp_port: 2000,\n tcp_ip: '127.0.0.1',\n tcp_port: 2000,\n setDaemonAddress: function setDaemonAddress(address) {\n if (!process.env.AWS_XRAY_DAEMON_ADDRESS) {\n processAddress(address);\n logger.getLogger().info('Configured daemon address to ' + address + '.');\n }\n else {\n logger.getLogger().warn('Ignoring call to setDaemonAddress as AWS_XRAY_DAEMON_ADDRESS is set. ' +\n 'The current daemon address will not be changed.');\n }\n }\n};\nvar processAddress = function processAddress(address) {\n if (address.indexOf(':') === -1) {\n throw new Error('Invalid Daemon Address. You must specify an ip and port.');\n }\n else {\n var splitAddress = address.split(' ');\n if (splitAddress.length === 1) {\n // in format of 127.0.0.1:2000\n if (address.indexOf('udp') > -1 || address.indexOf('tcp') > -1) {\n throw new Error('Invalid Daemon Address. You must specify both tcp and udp addresses.');\n }\n var addr = address.split(':');\n if (!addr[0]) {\n throw new Error('Invalid Daemon Address. You must specify an ip.');\n }\n DaemonConfig.udp_ip = addr[0];\n DaemonConfig.tcp_ip = addr[0];\n DaemonConfig.udp_port = addr[1];\n DaemonConfig.tcp_port = addr[1];\n }\n else if (splitAddress.length === 2) {\n // in format of udp:127.0.0.1:2000 tcp:127.0.0.1:2001\n var part_1 = splitAddress[0].split(':');\n var part_2 = splitAddress[1].split(':');\n var addr_map = {};\n addr_map[part_1[0]] = part_1;\n addr_map[part_2[0]] = part_2;\n DaemonConfig.udp_ip = addr_map['udp'][1];\n DaemonConfig.udp_port = parseInt(addr_map['udp'][2]);\n DaemonConfig.tcp_ip = addr_map['tcp'][1];\n DaemonConfig.tcp_port = parseInt(addr_map['tcp'][2]);\n if (!DaemonConfig.udp_port || !DaemonConfig.tcp_port) {\n throw new Error('Invalid Daemon Address. You must specify port number.');\n }\n }\n }\n};\nif (process.env.AWS_XRAY_DAEMON_ADDRESS) {\n processAddress(process.env.AWS_XRAY_DAEMON_ADDRESS);\n}\nmodule.exports = DaemonConfig;\n", "\"use strict\";\nvar dgram = require('dgram');\nvar batcher = require('atomic-batcher');\nvar logger = require('./logger');\nvar PROTOCOL_HEADER = '{\"format\":\"json\",\"version\":1}';\nvar PROTOCOL_DELIMITER = '\\n';\n/**\n * Sends a collection of data over a UDP socket. This method\n * is designed to be used by `atomic-batcher` as a way to share\n * a single UDP socket for sending multiple data blocks.\n *\n * @param {object} ops - Details of the data to send\n * @param {Function} callback - The function to call when done\n */\nfunction batchSendData(ops, callback) {\n var client = dgram.createSocket('udp4');\n executeSendData(client, ops, 0, function () {\n try {\n client.close();\n }\n finally {\n callback();\n }\n });\n}\n/**\n * Execute sending data starting at the specified index and\n * using the provided client.\n *\n * @param {Socket} client - Socket to send data with\n * @param {object} ops - Details of data to send\n * @param {number} index - Starting index for sending\n * @param {Function} callback - Function to call when done\n */\nfunction executeSendData(client, ops, index, callback) {\n if (index >= ops.length) {\n callback();\n return;\n }\n sendMessage(client, ops[index], function () {\n executeSendData(client, ops, index + 1, callback);\n });\n}\n/**\n * Send a single message over a UDP socket.\n *\n * @param {Socket} client - Socket to send data with\n * @param {object} data - Details of the data to send\n * @param {Function} batchCallback - Function to call when done\n */\nfunction sendMessage(client, data, batchCallback) {\n var msg = data.msg;\n var offset = data.offset;\n var length = data.length;\n var port = data.port;\n var address = data.address;\n var callback = data.callback;\n client.send(msg, offset, length, port, address, function (err) {\n try {\n callback(err);\n }\n finally {\n batchCallback();\n }\n });\n}\n/**\n * Class to mimic the Socket interface for a UDP client, but to provided\n * batching of outgoing sends using temporary Sockets that are created and\n * destroyed as needed.\n */\nfunction BatchingTemporarySocket() {\n this.batchSend = batcher(batchSendData);\n}\n/**\n * Provide the same signature as the Socket.send method but the work will be\n * batched to share temporary UDP sockets whenever possible.\n */\nBatchingTemporarySocket.prototype.send = function (msg, offset, length, port, address, callback) {\n var work = {\n msg: msg,\n offset: offset,\n length: length,\n port: port,\n address: address,\n callback: callback\n };\n this.batchSend(work);\n};\n/**\n * Segment emitter module.\n * @module SegmentEmitter\n */\nvar SegmentEmitter = {\n daemonConfig: require('./daemon_config'),\n /**\n * Returns the formatted segment JSON string.\n */\n format: function format(segment) {\n return PROTOCOL_HEADER + PROTOCOL_DELIMITER + segment.toString();\n },\n /**\n * Creates a UDP socket connection and send the formatted segment.\n * @param {Segment} segment - The segment to send to the daemon.\n */\n send: function send(segment) {\n if (!this.socket) {\n if (this.useBatchingTemporarySocket) {\n this.socket = new BatchingTemporarySocket();\n }\n else {\n this.socket = dgram.createSocket('udp4').unref();\n }\n }\n var client = this.socket;\n var formatted = segment.format();\n var data = PROTOCOL_HEADER + PROTOCOL_DELIMITER + formatted;\n var message = Buffer.from(data);\n var short = '{\"trace_id:\"' + segment.trace_id + '\",\"id\":\"' + segment.id + '\"}';\n var type = segment.type === 'subsegment' ? 'Subsegment' : 'Segment';\n client.send(message, 0, message.length, this.daemonConfig.udp_port, this.daemonConfig.udp_ip, function (err) {\n if (err) {\n if (err.code === 'EMSGSIZE') {\n logger.getLogger().error(type + ' too large to send: ' + short + ' (' + message.length + ' bytes).');\n }\n else {\n logger.getLogger().error('Error occured sending segment: ', err);\n }\n }\n else {\n logger.getLogger().debug(type + ' sent: {\"trace_id:\"' + segment.trace_id + '\",\"id\":\"' + segment.id + '\"}');\n logger.getLogger().debug('UDP message sent: ' + segment);\n }\n });\n },\n /**\n * Configures the address and/or port the daemon is expected to be on.\n * @param {string} address - Address of the daemon the segments should be sent to. Should be formatted as an IPv4 address.\n * @module SegmentEmitter\n * @function setDaemonAddress\n */\n setDaemonAddress: function setDaemonAddress(address) {\n this.daemonConfig.setDaemonAddress(address);\n },\n /**\n * Get the UDP IP the emitter is configured to.\n * @module SegmentEmitter\n * @function getIp\n */\n getIp: function getIp() {\n return this.daemonConfig.udp_ip;\n },\n /**\n * Get the UDP port the emitter is configured to.\n * @module SegmentEmitter\n * @function getPort\n */\n getPort: function getPort() {\n return this.daemonConfig.udp_port;\n },\n /**\n * Forces the segment emitter to create a new socket on send, and close it on complete.\n * @module SegmentEmitter\n * @function disableReusableSocket\n */\n disableReusableSocket: function () {\n this.useBatchingTemporarySocket = true;\n }\n};\nmodule.exports = SegmentEmitter;\n", "\"use strict\";\nvar crypto = require('crypto');\nvar logger = require('../../logger');\n/**\n * Class describing an AWS X-Ray trace ID.\n * @see https://docs.aws.amazon.com/xray/latest/devguide/xray-concepts.html#xray-concepts-traces\n */\nclass TraceID {\n /**\n * Constructs a new trace ID using the current time.\n * @param {string} [tsHex] - time stamp to use for trace ID in hexadecimal format\n * @param {string} [numberhex] - string of hexadecimal characters for random portion of Trace ID\n * @constructor\n */\n constructor(tsHex, numberhex) {\n this.version = 1;\n this.timestamp = tsHex || Math.round(new Date().getTime() / 1000).toString(16);\n this.id = numberhex || crypto.randomBytes(12).toString('hex');\n }\n /**\n * @returns {TraceID} - a hardcoded trace ID using zeroed timestamp and random ID\n */\n static Invalid() {\n return new TraceID('00000000', '000000000000000000000000');\n }\n /**\n * Constructs a new trace ID from provided string. If no string is provided or the provided string is invalid,\n * log an error but a new trace ID still returned. This can be used as a trace ID string validator.\n * @param {string} [rawID] - string to create a Trace ID object from.\n */\n static FromString(rawID) {\n const DELIMITER = '-';\n var traceID = new TraceID();\n var version, timestamp;\n if (!rawID || typeof rawID !== 'string') {\n logger.getLogger().error('Empty or non-string trace ID provided');\n return traceID;\n }\n const parts = rawID.trim().split(DELIMITER);\n if (parts.length !== 3) {\n logger.getLogger().error('Unrecognized trace ID format');\n return traceID;\n }\n version = parseInt(parts[0]);\n if (isNaN(version) || version < 1) {\n logger.getLogger().error('Trace ID version must be positive integer');\n return traceID;\n }\n timestamp = parseInt(parts[1], 16).toString(16);\n if (timestamp === 'NaN') {\n logger.getLogger().error('Trace ID timestamp must be a hex-encoded value');\n return traceID;\n }\n traceID.version = version;\n traceID.timestamp = timestamp;\n traceID.id = parts[2];\n return traceID;\n }\n /**\n * Returns a string representation of the trace ID.\n * @returns {string} - stringified trace ID, e.g. 1-57fbe041-2c7ad569f5d6ff149137be86\n */\n toString() {\n return `${this.version.toString()}-${this.timestamp}-${this.id}`;\n }\n}\nmodule.exports = TraceID;\n", "\"use strict\";\n/**\n * @module utils\n */\nvar crypto = require('crypto');\nvar logger = require('./logger');\nvar TraceID = require('./segments/attributes/trace_id');\nvar utils = {\n /**\n * Checks a HTTP response code, where 4xx are 'error' and 5xx are 'fault'.\n * @param {string} status - the HTTP response status code.\n * @returns [string] - 'error', 'fault' or nothing on no match\n * @alias module:utils.getCauseTypeFromHttpStatus\n */\n getCauseTypeFromHttpStatus: function getCauseTypeFromHttpStatus(status) {\n var stat = status.toString();\n if (stat.match(/^[4][0-9]{2}$/) !== null) {\n return 'error';\n }\n else if (stat.match(/^[5][0-9]{2}$/) !== null) {\n return 'fault';\n }\n },\n /**\n * Removes the query string parameters from a given http request path\n * as it may contain sensitive information\n *\n * Related issue: https://github.com/aws/aws-xray-sdk-node/issues/246\n *\n * Node documentation: https://nodejs.org/api/http.html#http_http_request_url_options_callback\n *\n * @param {string} path - options.path in a http.request callback\n * @returns [string] - removes query string element from path\n * @alias module:utils.stripQueryStringFromPath\n */\n stripQueryStringFromPath: function stripQueryStringFromPath(path) {\n return path ? path.split('?')[0] : '';\n },\n /**\n * Performs a case-insensitive wildcard match against two strings. This method works with pseduo-regex chars; specifically ? and * are supported.\n * An asterisk (*) represents any combination of characters\n * A question mark (?) represents any single character\n *\n * @param {string} pattern - the regex-like pattern to be compared against.\n * @param {string} text - the string to compare against the pattern.\n * @returns boolean\n * @alias module:utils.wildcardMatch\n */\n wildcardMatch: function wildcardMatch(pattern, text) {\n if (pattern === undefined || text === undefined) {\n return false;\n }\n if (pattern.length === 1 && pattern.charAt(0) === '*') {\n return true;\n }\n var patternLength = pattern.length;\n var textLength = text.length;\n var indexOfGlob = pattern.indexOf('*');\n pattern = pattern.toLowerCase();\n text = text.toLowerCase();\n // Infix globs are relatively rare, and the below search is expensive especially when\n // Balsa is used a lot. Check for infix globs and, in their absence, do the simple thing\n if (indexOfGlob === -1 || indexOfGlob === (patternLength - 1)) {\n var match = function simpleWildcardMatch() {\n var j = 0;\n for (var i = 0; i < patternLength; i++) {\n var patternChar = pattern.charAt(i);\n if (patternChar === '*') {\n // Presumption for this method is that globs only occur at end\n return true;\n }\n else if (patternChar === '?') {\n if (j === textLength) {\n return false;\n } // No character to match\n j++;\n }\n else {\n if (j >= textLength || patternChar != text.charAt(j)) {\n return false;\n }\n j++;\n }\n }\n // Ate up all the pattern and didn't end at a glob, so a match will have consumed all\n // the text\n return j === textLength;\n };\n return match();\n }\n /*\n * The matchArray[i] is used to record if there is a match between the first i chars in =\n * text and the first j chars in pattern.\n * So will return matchArray[textLength+1] in the end\n * Loop from the beginning of the pattern\n * case not '*': if text[i]==pattern[j] or pattern[j] is '?', and matchArray[i] is true,\n * set matchArray[i+1] to true, otherwise false\n * case '*': since '*' can match any globing, as long as there is a true in matchArray before i\n * all the matchArray[i+1], matchArray[i+2],...,matchArray[textLength] could be true\n */\n var matchArray = [];\n matchArray[0] = true;\n for (var j = 0; j < patternLength; j++) {\n var i;\n var patternChar = pattern.charAt(j);\n if (patternChar != '*') {\n for (i = textLength - 1; i >= 0; i--) {\n matchArray[i + 1] = !!matchArray[i] && (patternChar === '?' || (patternChar === text.charAt(i)));\n }\n }\n else {\n i = 0;\n while (i <= textLength && !matchArray[i]) {\n i++;\n }\n for (i; i <= textLength; i++) {\n matchArray[i] = true;\n }\n }\n matchArray[0] = (matchArray[0] && patternChar === '*');\n }\n return matchArray[textLength];\n },\n LambdaUtils: {\n validTraceData: function (xAmznTraceId) {\n var valid = false;\n if (xAmznTraceId) {\n var data = utils.processTraceData(xAmznTraceId);\n valid = !!(data && data.root && data.parent && data.sampled);\n }\n return valid;\n },\n /**\n * Populates trace ID, parent ID, and sampled decision of given segment. Will always populate valid values,\n * even if xAmznTraceId contains missing or invalid values. This ensures downstream services receive valid\n * headers.\n * @param {Segment} segment - Facade segment to be populated\n * @param {String} xAmznTraceId - Raw Trace Header to supply trace data\n * @returns {Boolean} - true if required fields are present and Trace ID is valid, false otherwise\n */\n populateTraceData: function (segment, xAmznTraceId) {\n logger.getLogger().debug('Lambda trace data found: ' + xAmznTraceId);\n let traceData = utils.processTraceData(xAmznTraceId);\n var valid = false;\n if (!traceData) {\n traceData = {};\n logger.getLogger().error('_X_AMZN_TRACE_ID is empty or has an invalid format');\n }\n else if (!traceData.root || !traceData.parent || !traceData.sampled) {\n logger.getLogger().error('_X_AMZN_TRACE_ID is missing required information');\n }\n else {\n valid = true;\n }\n segment.trace_id = TraceID.FromString(traceData.root).toString(); // Will always assign valid trace_id\n segment.id = traceData.parent || crypto.randomBytes(8).toString('hex');\n if (traceData.root && segment.trace_id !== traceData.root) {\n logger.getLogger().error('_X_AMZN_TRACE_ID contains invalid trace ID');\n valid = false;\n }\n if (!parseInt(traceData.sampled)) {\n segment.notTraced = true;\n }\n else {\n delete segment.notTraced;\n }\n if (traceData.data) {\n segment.userData = traceData.data;\n }\n logger.getLogger().debug('Segment started: ' + JSON.stringify(traceData));\n return valid;\n }\n },\n /**\n * Splits out the data from the trace id format. Used by the middleware.\n * @param {String} traceData - The additional trace data (typically in req.headers.x-amzn-trace-id).\n * @returns {object}\n * @alias module:mw_utils.processTraceData\n */\n processTraceData: function processTraceData(traceData) {\n var amznTraceData = {};\n var data = {};\n var reservedKeywords = ['root', 'parent', 'sampled', 'self'];\n var remainingBytes = 256;\n if (!(typeof traceData === 'string' && traceData)) {\n return amznTraceData;\n }\n traceData.split(';').forEach(function (header) {\n if (!header) {\n return;\n }\n var pair = header.split('=');\n if (pair[0] && pair[1]) {\n let key = pair[0].trim();\n let value = pair[1].trim();\n let lowerCaseKey = key.toLowerCase();\n let reserved = reservedKeywords.indexOf(lowerCaseKey) !== -1;\n if (reserved) {\n amznTraceData[lowerCaseKey] = value;\n }\n else if (!reserved && remainingBytes - (lowerCaseKey.length + value.length) >= 0) {\n data[key] = value;\n remainingBytes -= (key.length + value.length);\n }\n }\n });\n amznTraceData['data'] = data;\n return amznTraceData;\n },\n /**\n * Makes a shallow copy of an object without given keys - keeps prototype\n * @param {Object} obj - The object to copy\n * @param {string[]} [keys=[]] - The keys that won't be copied\n * @param {boolean} [preservePrototype=false] - If true also copy prototype properties\n * @returns {}\n */\n objectWithoutProperties: function objectWithoutProperties(obj, keys, preservePrototype) {\n keys = Array.isArray(keys) ? keys : [];\n preservePrototype = typeof preservePrototype === 'boolean' ? preservePrototype : false;\n var target = preservePrototype ? Object.create(Object.getPrototypeOf(obj)) : {};\n for (var property in obj) {\n if (keys.indexOf(property) >= 0) {\n continue;\n }\n if (!Object.prototype.hasOwnProperty.call(obj, property)) {\n continue;\n }\n target[property] = obj[property];\n }\n return target;\n },\n /**\n * Safely gets an integer from a string or number\n * @param {String | Number} - input to cast to integer\n * @returns {Number} - Integer representation of input, or 0 if input is not castable to int\n */\n safeParseInt: (val) => {\n if (!val || isNaN(val)) {\n return 0;\n }\n return parseInt(val);\n }\n};\nmodule.exports = utils;\n", "\"use strict\";\nconst { safeParseInt } = require('../utils');\nvar logger = require('../logger');\nvar DEFAULT_STREAMING_THRESHOLD = 100;\nvar utils = {\n streamingThreshold: DEFAULT_STREAMING_THRESHOLD,\n getCurrentTime: function getCurrentTime() {\n return Date.now() / 1000;\n },\n setOrigin: function setOrigin(origin) {\n this.origin = origin;\n },\n setPluginData: function setPluginData(pluginData) {\n this.pluginData = pluginData;\n },\n setSDKData: function setSDKData(sdkData) {\n this.sdkData = sdkData;\n },\n setServiceData: function setServiceData(serviceData) {\n this.serviceData = serviceData;\n },\n /**\n * Overrides the default streaming threshold (100).\n * The threshold represents the maximum number of subsegments on a single segment before\n * the SDK beings to send the completed subsegments out of band of the main segment.\n * Reduce this threshold if you see the 'Segment too large to send' error.\n * @param {number} threshold - The new threshold to use.\n * @memberof AWSXRay\n */\n setStreamingThreshold: function setStreamingThreshold(threshold) {\n if (isFinite(threshold) && threshold >= 0) {\n utils.streamingThreshold = threshold;\n logger.getLogger().debug('Subsegment streaming threshold set to: ' + threshold);\n }\n else {\n logger.getLogger().error('Invalid threshold: ' + threshold + '. Must be a whole number >= 0.');\n }\n },\n getStreamingThreshold: function getStreamingThreshold() {\n return utils.streamingThreshold;\n },\n /**\n * Parses an HTTP response object to return an X-Ray compliant HTTP response object.\n * @param {http.ServerResponse} res\n * @returns {Object} - X-Ray response object to be added to (sub)segment\n */\n getHttpResponseData: (res) => {\n const ret = {};\n if (!res) {\n return ret;\n }\n const status = safeParseInt(res.statusCode);\n if (status !== 0) {\n ret.status = status;\n }\n if (res.headers && res.headers['content-length']) {\n ret.content_length = safeParseInt(res.headers['content-length']);\n }\n return ret;\n }\n};\nmodule.exports = utils;\n", "\"use strict\";\nconst { getHttpResponseData } = require('../segment_utils');\nvar { stripQueryStringFromPath } = require('../../utils');\n/**\n * Represents an outgoing HTTP/HTTPS call.\n * @constructor\n * @param {http.ClientRequest|https.ClientRequest} req - The request object from the HTTP/HTTPS call.\n * @param {http.IncomingMessage|https.IncomingMessage} res - The response object from the HTTP/HTTPS call.\n * @param {boolean} downstreamXRayEnabled - when true, adds a \"traced\": true hint to generated subsegments such that the AWS X-Ray service expects a corresponding segment from the downstream service.\n */\nfunction RemoteRequestData(req, res, downstreamXRayEnabled) {\n this.init(req, res, downstreamXRayEnabled);\n}\nRemoteRequestData.prototype.init = function init(req, res, downstreamXRayEnabled) {\n this.request = {\n url: (req.agent && req.agent.protocol) ? (req.agent.protocol + '//' + (req.host || req.getHeader('host')) + stripQueryStringFromPath(req.path)) : '',\n method: req.method || '',\n };\n if (downstreamXRayEnabled) {\n this.request.traced = true;\n }\n if (res) {\n this.response = getHttpResponseData(res);\n }\n};\nmodule.exports = RemoteRequestData;\n", "\"use strict\";\nvar crypto = require('crypto');\nvar CapturedException = require('./captured_exception');\nvar RemoteRequestData = require('./remote_request_data');\nvar SegmentEmitter = require('../../segment_emitter');\nvar SegmentUtils = require('../segment_utils');\nvar Utils = require('../../utils');\nvar logger = require('../../logger');\n/**\n * Represents a subsegment.\n * @constructor\n * @param {string} name - The name of the subsegment.\n */\nfunction Subsegment(name) {\n this.init(name);\n}\nSubsegment.prototype.init = function init(name) {\n if (typeof name != 'string') {\n throw new Error('Subsegment name must be of type string.');\n }\n this.id = crypto.randomBytes(8).toString('hex');\n this.name = name;\n this.start_time = SegmentUtils.getCurrentTime();\n this.in_progress = true;\n this.counter = 0;\n this.notTraced = false;\n};\n/**\n * Nests a new subsegment to the array of subsegments.\n * @param {string} name - The name of the new subsegment to append.\n * @returns {Subsegment} - The newly created subsegment.\n */\nSubsegment.prototype.addNewSubsegment = function addNewSubsegment(name) {\n const subsegment = new Subsegment(name);\n this.addSubsegment(subsegment);\n return subsegment;\n};\nSubsegment.prototype.addSubsegmentWithoutSampling = function addSubsegmentWithoutSampling(subsegment) {\n this.addSubsegment(subsegment);\n subsegment.notTraced = true;\n};\nSubsegment.prototype.addNewSubsegmentWithoutSampling = function addNewSubsegmentWithoutSampling(name) {\n const subsegment = new Subsegment(name);\n this.addSubsegment(subsegment);\n subsegment.notTraced = true;\n return subsegment;\n};\n/**\n * Adds a subsegment to the array of subsegments.\n * @param {Subsegment} subsegment - The subsegment to append.\n */\nSubsegment.prototype.addSubsegment = function (subsegment) {\n if (!(subsegment instanceof Subsegment)) {\n throw new Error('Failed to add subsegment:' + subsegment + ' to subsegment \"' + this.name +\n '\". Not a subsegment.');\n }\n if (this.subsegments === undefined) {\n this.subsegments = [];\n }\n subsegment.segment = this.segment;\n subsegment.parent = this;\n subsegment.notTraced = subsegment.parent.notTraced;\n if (subsegment.end_time === undefined) {\n this.incrementCounter(subsegment.counter);\n }\n this.subsegments.push(subsegment);\n};\n/**\n * Removes the subsegment from the subsegments array, used in subsegment streaming.\n */\nSubsegment.prototype.removeSubsegment = function removeSubsegment(subsegment) {\n if (!(subsegment instanceof Subsegment)) {\n throw new Error('Failed to remove subsegment:' + subsegment + ' from subsegment \"' + this.name +\n '\". Not a subsegment.');\n }\n if (this.subsegments !== undefined) {\n var index = this.subsegments.indexOf(subsegment);\n if (index >= 0) {\n this.subsegments.splice(index, 1);\n }\n }\n};\n/**\n * Adds a property with associated data into the subsegment.\n * @param {string} name - The name of the property to add.\n * @param {Object} data - The data of the property to add.\n */\nSubsegment.prototype.addAttribute = function addAttribute(name, data) {\n this[name] = data;\n};\n/**\n * Adds a subsegement id to record ordering.\n * @param {string} id - A subsegment id.\n */\nSubsegment.prototype.addPrecursorId = function (id) {\n if (typeof id !== 'string') {\n logger.getLogger().error('Failed to add id:' + id + ' to subsegment ' + this.name +\n '. Precursor Ids must be of type string.');\n }\n if (this.precursor_ids === undefined) {\n this.precursor_ids = [];\n }\n this.precursor_ids.push(id);\n};\n/**\n * Adds a key-value pair that can be queryable through GetTraceSummaries.\n * Only acceptable types are string, float/int and boolean.\n * @param {string} key - The name of key to add.\n * @param {boolean|string|number} value - The value to add for the given key.\n */\nSubsegment.prototype.addAnnotation = function (key, value) {\n if (typeof value !== 'boolean' && typeof value !== 'string' && !isFinite(value)) {\n logger.getLogger().error('Failed to add annotation key: ' + key + ' value: ' + value + ' to subsegment ' +\n this.name + '. Value must be of type string, number or boolean.');\n return;\n }\n if (typeof key !== 'string') {\n logger.getLogger().error('Failed to add annotation key: ' + key + ' value: ' + value + ' to subsegment ' +\n this.name + '. Key must be of type string.');\n return;\n }\n if (this.annotations === undefined) {\n this.annotations = {};\n }\n this.annotations[key] = value;\n};\n/**\n * Adds a key-value pair to the metadata.default attribute when no namespace is given.\n * Metadata is not queryable, but is recorded.\n * @param {string} key - The name of the key to add.\n * @param {object|null} value - The value of the associated key.\n * @param {string} [namespace] - The property name to put the key/value pair under.\n */\nSubsegment.prototype.addMetadata = function (key, value, namespace) {\n if (typeof key !== 'string') {\n logger.getLogger().error('Failed to add metadata key: ' + key + ' value: ' + value + ' to subsegment ' +\n this.name + '. Key must be of type string.');\n return;\n }\n if (namespace && typeof namespace !== 'string') {\n logger.getLogger().error('Failed to add metadata key: ' + key + ' value: ' + value + ' to subsegment ' +\n this.name + '. Namespace must be of type string.');\n return;\n }\n var ns = namespace || 'default';\n if (!this.metadata) {\n this.metadata = {};\n }\n if (!this.metadata[ns]) {\n this.metadata[ns] = {};\n }\n if (ns !== '__proto__') {\n this.metadata[ns][key] = value !== null && value !== undefined ? value : '';\n }\n};\nSubsegment.prototype.addSqlData = function addSqlData(sqlData) {\n this.sql = sqlData;\n};\n/**\n * Adds an error with associated data into the subsegment.\n * To handle propagating errors, the subsegment also sets a copy of the error on the\n * root segment. As the error passes up the execution stack, a reference is created\n * on each subsegment to the originating subsegment.\n * @param {Error|string} err - The error to capture.\n * @param {boolean} [remote] - Flag for whether the exception caught was remote or not.\n */\nSubsegment.prototype.addError = function addError(err, remote) {\n if (err == null || typeof err !== 'object' && typeof (err) !== 'string') {\n logger.getLogger().error('Failed to add error:' + err + ' to subsegment \"' + this.name +\n '\". Not an object or string literal.');\n return;\n }\n this.addFaultFlag();\n if (this.segment && this.segment.exception) {\n if (err === this.segment.exception.ex) {\n this.fault = true;\n this.cause = { id: this.segment.exception.cause, exceptions: [] };\n return;\n }\n delete this.segment.exception;\n }\n if (this.segment) {\n this.segment.exception = {\n ex: err,\n cause: this.id\n };\n }\n else {\n //error, cannot propagate exception if not added to segment\n }\n if (this.cause === undefined) {\n this.cause = {\n working_directory: process.cwd(),\n exceptions: []\n };\n }\n this.cause.exceptions.unshift(new CapturedException(err, remote));\n};\n/**\n * Adds data for an outgoing HTTP/HTTPS call.\n * @param {http.ClientRequest/https.ClientRequest} req - The request object from the HTTP/HTTPS call.\n * @param {http.IncomingMessage/https.IncomingMessage} res - The response object from the HTTP/HTTPS call.\n * @param {boolean} downstreamXRayEnabled - when true, adds a \"traced\": true hint to generated subsegments such that the AWS X-Ray service expects a corresponding segment from the downstream service.\n */\nSubsegment.prototype.addRemoteRequestData = function addRemoteRequestData(req, res, downstreamXRayEnabled) {\n this.http = new RemoteRequestData(req, res, downstreamXRayEnabled);\n if ('traced' in this.http.request) {\n this.traced = this.http.request.traced;\n delete this.http.request.traced;\n }\n};\n/**\n * Adds fault flag to the subsegment.\n */\nSubsegment.prototype.addFaultFlag = function addFaultFlag() {\n this.fault = true;\n};\n/**\n * Adds error flag to the subsegment.\n */\nSubsegment.prototype.addErrorFlag = function addErrorFlag() {\n this.error = true;\n};\n/**\n * Adds throttle flag to the subsegment.\n */\nSubsegment.prototype.addThrottleFlag = function addThrottleFlag() {\n this.throttle = true;\n};\n/**\n * Closes the current subsegment. This automatically captures any exceptions and sets the end time.\n * @param {Error|string} [err] - The error to capture.\n * @param {boolean} [remote] - Flag for whether the exception caught was remote or not.\n */\nSubsegment.prototype.close = function close(err, remote) {\n var root = this.segment;\n this.end_time = SegmentUtils.getCurrentTime();\n delete this.in_progress;\n if (err) {\n this.addError(err, remote);\n }\n if (this.parent) {\n this.parent.decrementCounter();\n }\n if (root && root.counter > SegmentUtils.getStreamingThreshold()) {\n if (this.streamSubsegments() && this.parent) {\n this.parent.removeSubsegment(this);\n }\n }\n};\n/**\n * Each subsegment holds a counter of open subsegments. This increments\n * the counter such that it can be called from a child and propagate up.\n * @param {Number} [additional] - An additional amount to increment. Used when adding subsegment trees.\n */\nSubsegment.prototype.incrementCounter = function incrementCounter(additional) {\n this.counter = additional ? this.counter + additional + 1 : this.counter + 1;\n if (this.parent) {\n this.parent.incrementCounter(additional);\n }\n};\n/**\n * Each subsegment holds a counter of its open subsegments. This decrements\n * the counter such that it can be called from a child and propagate up.\n */\nSubsegment.prototype.decrementCounter = function decrementCounter() {\n this.counter--;\n if (this.parent) {\n this.parent.decrementCounter();\n }\n};\n/**\n * Returns a boolean indicating whether or not the subsegment has been closed.\n * @returns {boolean} - Returns true if the subsegment is closed.\n */\nSubsegment.prototype.isClosed = function isClosed() {\n return !this.in_progress;\n};\n/**\n * Sends the subsegment to the daemon.\n */\nSubsegment.prototype.flush = function flush() {\n if (!this.parent || !this.segment) {\n logger.getLogger().error('Failed to flush subsegment: ' + this.name + '. Subsegment must be added ' +\n 'to a segment chain to flush.');\n return;\n }\n if (this.segment.trace_id) {\n if (this.segment.notTraced !== true && !this.notTraced) {\n SegmentEmitter.send(this);\n }\n else {\n logger.getLogger().debug('Ignoring flush on subsegment ' + this.id + '. Associated segment is marked as not sampled.');\n }\n }\n else {\n logger.getLogger().debug('Ignoring flush on subsegment ' + this.id + '. Associated segment is missing a trace ID.');\n }\n};\n/**\n * Returns true if the subsegment was streamed in its entirety\n */\nSubsegment.prototype.streamSubsegments = function streamSubsegments() {\n if (this.isClosed() && this.counter <= 0) {\n this.flush();\n return true;\n }\n else if (this.subsegments && this.subsegments.length > 0) {\n var open = [];\n this.subsegments.forEach(function (child) {\n if (!child.streamSubsegments()) {\n open.push(child);\n }\n });\n this.subsegments = open;\n }\n};\n/**\n * Returns the formatted, trimmed subsegment JSON string to send to the daemon.\n */\nSubsegment.prototype.format = function format() {\n this.type = 'subsegment';\n if (this.parent) {\n this.parent_id = this.parent.id;\n }\n if (this.segment) {\n this.trace_id = this.segment.trace_id;\n }\n return JSON.stringify(this);\n};\n/**\n * Returns the formatted subsegment JSON string.\n */\nSubsegment.prototype.toString = function toString() {\n return JSON.stringify(this);\n};\nSubsegment.prototype.toJSON = function toJSON() {\n var ignore = ['segment', 'parent', 'counter'];\n if (this.subsegments == null || this.subsegments.length === 0) {\n ignore.push('subsegments');\n }\n var thisCopy = Utils.objectWithoutProperties(this, ignore, false);\n return thisCopy;\n};\nmodule.exports = Subsegment;\n", "\"use strict\";\nvar crypto = require('crypto');\nvar CapturedException = require('./attributes/captured_exception');\nvar SegmentEmitter = require('../segment_emitter');\nvar SegmentUtils = require('./segment_utils');\nvar Subsegment = require('./attributes/subsegment');\nvar TraceID = require('./attributes/trace_id');\nvar Utils = require('../utils');\nvar logger = require('../logger');\n/**\n * Represents a segment.\n * @constructor\n * @param {string} name - The name of the subsegment.\n * @param {string} [rootId] - The trace ID of the spawning parent, included in the 'X-Amzn-Trace-Id' header of the incoming request. If one is not supplied, it will be generated.\n * @param {string} [parentId] - The sub/segment ID of the spawning parent, included in the 'X-Amzn-Trace-Id' header of the incoming request.\n */\nfunction Segment(name, rootId, parentId) {\n this.init(name, rootId, parentId);\n}\nSegment.prototype.init = function init(name, rootId, parentId) {\n if (typeof name != 'string') {\n throw new Error('Segment name must be of type string.');\n }\n // Validate the Trace ID\n var traceId;\n if (rootId && typeof rootId == 'string') {\n traceId = TraceID.FromString(rootId);\n }\n else {\n traceId = new TraceID();\n }\n var id = crypto.randomBytes(8).toString('hex');\n var startTime = SegmentUtils.getCurrentTime();\n this.trace_id = traceId.toString();\n this.id = id;\n this.start_time = startTime;\n this.name = name || '';\n this.in_progress = true;\n this.counter = 0;\n if (parentId) {\n this.parent_id = parentId;\n }\n if (SegmentUtils.serviceData) {\n this.setServiceData(SegmentUtils.serviceData);\n }\n if (SegmentUtils.pluginData) {\n this.addPluginData(SegmentUtils.pluginData);\n }\n if (SegmentUtils.origin) {\n this.origin = SegmentUtils.origin;\n }\n if (SegmentUtils.sdkData) {\n this.setSDKData(SegmentUtils.sdkData);\n }\n};\n/**\n * Adds incoming request data to the http block of the segment.\n * @param {IncomingRequestData} data - The data of the property to add.\n */\nSegment.prototype.addIncomingRequestData = function addIncomingRequestData(data) {\n this.http = data;\n};\n/**\n * Adds a key-value pair that can be queryable through GetTraceSummaries.\n * Only acceptable types are string, float/int and boolean.\n * @param {string} key - The name of key to add.\n * @param {boolean|string|number} value - The value to add for the given key.\n */\nSegment.prototype.addAnnotation = function addAnnotation(key, value) {\n if (typeof value !== 'boolean' && typeof value !== 'string' && !isFinite(value)) {\n logger.getLogger().error('Failed to add annotation key: ' + key + ' value: ' + value + ' to subsegment ' +\n this.name + '. Value must be of type string, number or boolean.');\n return;\n }\n if (typeof key !== 'string') {\n logger.getLogger().error('Failed to add annotation key: ' + key + ' value: ' + value + ' to subsegment ' +\n this.name + '. Key must be of type string.');\n return;\n }\n if (this.annotations === undefined) {\n this.annotations = {};\n }\n this.annotations[key] = value;\n};\n/**\n * Adds a User ID that can be queried from the X-Ray console. User ID\n * must be a string.\n * @param {string} user - The ID of the user corresponding to this segment\n */\nSegment.prototype.setUser = function (user) {\n if (typeof user !== 'string') {\n logger.getLogger().error('Set user: ' + user + ' failed. User IDs must be of type string.');\n }\n this.user = user;\n};\n/**\n * Adds a key-value pair to the metadata.default attribute when no namespace is given.\n * Metadata is not queryable, but is recorded.\n * @param {string} key - The name of the key to add.\n * @param {object|null} value - The value of the associated key.\n * @param {string} [namespace] - The property name to put the key/value pair under.\n */\nSegment.prototype.addMetadata = function (key, value, namespace) {\n if (typeof key !== 'string') {\n logger.getLogger().error('Failed to add metadata key: ' + key + ' value: ' + value + ' to segment ' +\n this.name + '. Key must be of type string.');\n return;\n }\n if (namespace && typeof namespace !== 'string') {\n logger.getLogger().error('Failed to add metadata key: ' + key + ' value: ' + value + ' to segment ' +\n this.name + '. Namespace must be of type string.');\n return;\n }\n var ns = namespace || 'default';\n if (!this.metadata) {\n this.metadata = {};\n }\n if (!this.metadata[ns]) {\n this.metadata[ns] = {};\n }\n if (ns !== '__proto__') {\n this.metadata[ns][key] = value !== null && value !== undefined ? value : '';\n }\n};\n/**\n * Adds data about the AWS X-Ray SDK onto the segment.\n * @param {Object} data - Object that contains the version of the SDK, and other information.\n */\nSegment.prototype.setSDKData = function setSDKData(data) {\n if (!data) {\n logger.getLogger().error('Add SDK data: ' + data + ' failed.' +\n 'Must not be empty.');\n return;\n }\n if (!this.aws) {\n this.aws = {};\n }\n this.aws.xray = data;\n};\nSegment.prototype.setMatchedSamplingRule = function setMatchedSamplingRule(ruleName) {\n if (this.aws) {\n this.aws = JSON.parse(JSON.stringify(this.aws));\n }\n if (this.aws && this.aws['xray']) {\n this.aws.xray['rule_name'] = ruleName;\n }\n else {\n this.aws = { xray: { 'rule_name': ruleName } };\n }\n};\n/**\n * Adds data about the service into the segment.\n * @param {Object} data - Object that contains the version of the application, and other information.\n */\nSegment.prototype.setServiceData = function setServiceData(data) {\n if (!data) {\n logger.getLogger().error('Add service data: ' + data + ' failed.' +\n 'Must not be empty.');\n return;\n }\n this.service = data;\n};\n/**\n * Adds a service with associated version data into the segment.\n * @param {Object} data - The associated AWS data.\n */\nSegment.prototype.addPluginData = function addPluginData(data) {\n if (this.aws === undefined) {\n this.aws = {};\n }\n Object.assign(this.aws, data);\n};\n/**\n * Adds a new subsegment to the array of subsegments.\n * @param {string} name - The name of the new subsegment to append.\n */\nSegment.prototype.addNewSubsegment = function addNewSubsegment(name) {\n var subsegment = new Subsegment(name);\n this.addSubsegment(subsegment);\n return subsegment;\n};\nSegment.prototype.addSubsegmentWithoutSampling = function addSubsegmentWithoutSampling(subsegment) {\n this.addSubsegment(subsegment);\n subsegment.notTraced = true;\n};\nSegment.prototype.addNewSubsegmentWithoutSampling = function addNewSubsegmentWithoutSampling(name) {\n const subsegment = new Subsegment(name);\n this.addSubsegment(subsegment);\n subsegment.notTraced = true;\n return subsegment;\n};\n/**\n * Adds a subsegment to the array of subsegments.\n * @param {Subsegment} subsegment - The subsegment to append.\n */\nSegment.prototype.addSubsegment = function addSubsegment(subsegment) {\n if (!(subsegment instanceof Subsegment)) {\n throw new Error('Cannot add subsegment: ' + subsegment + '. Not a subsegment.');\n }\n if (this.subsegments === undefined) {\n this.subsegments = [];\n }\n subsegment.segment = this;\n subsegment.parent = this;\n subsegment.notTraced = subsegment.parent.notTraced;\n this.subsegments.push(subsegment);\n if (!subsegment.end_time) {\n this.incrementCounter(subsegment.counter);\n }\n};\n/**\n * Removes the subsegment from the subsegments array, used in subsegment streaming.\n */\nSegment.prototype.removeSubsegment = function removeSubsegment(subsegment) {\n if (!(subsegment instanceof Subsegment)) {\n throw new Error('Failed to remove subsegment:' + subsegment + ' from subsegment \"' + this.name +\n '\". Not a subsegment.');\n }\n if (this.subsegments !== undefined) {\n var index = this.subsegments.indexOf(subsegment);\n if (index >= 0) {\n this.subsegments.splice(index, 1);\n }\n }\n};\n/**\n * Adds error data into the segment.\n * @param {Error|string} err - The error to capture.\n * @param {boolean} [remote] - Flag for whether the exception caught was remote or not.\n */\nSegment.prototype.addError = function addError(err, remote) {\n if (err == null || typeof err !== 'object' && typeof (err) !== 'string') {\n logger.getLogger().error('Failed to add error:' + err + ' to subsegment \"' + this.name +\n '\". Not an object or string literal.');\n return;\n }\n this.addFaultFlag();\n if (this.exception) {\n if (err === this.exception.ex) {\n this.cause = { id: this.exception.cause };\n delete this.exception;\n return;\n }\n delete this.exception;\n }\n if (this.cause === undefined) {\n this.cause = {\n working_directory: process.cwd(),\n exceptions: []\n };\n }\n this.cause.exceptions.push(new CapturedException(err, remote));\n};\n/**\n * Adds fault flag to the subsegment.\n */\nSegment.prototype.addFaultFlag = function addFaultFlag() {\n this.fault = true;\n};\n/**\n * Adds error flag to the subsegment.\n */\nSegment.prototype.addErrorFlag = function addErrorFlag() {\n this.error = true;\n};\n/**\n * Adds throttle flag to the subsegment.\n */\nSegment.prototype.addThrottleFlag = function addThrottleFlag() {\n this.throttle = true;\n};\n/**\n * Returns a boolean indicating whether or not the segment has been closed.\n * @returns {boolean} - Returns true if the subsegment is closed.\n */\nSegment.prototype.isClosed = function isClosed() {\n return !this.in_progress;\n};\n/**\n * Each segment holds a counter of open subsegments. This increments the counter.\n * @param {Number} [additional] - An additional amount to increment. Used when adding subsegment trees.\n */\nSegment.prototype.incrementCounter = function incrementCounter(additional) {\n this.counter = additional ? this.counter + additional + 1 : this.counter + 1;\n if (this.counter > SegmentUtils.streamingThreshold && this.subsegments && this.subsegments.length > 0) {\n var open = [];\n this.subsegments.forEach(function (child) {\n if (!child.streamSubsegments()) {\n open.push(child);\n }\n });\n this.subsegments = open;\n }\n};\n/**\n * Each segment holds a counter of open subsegments. This decrements\n * the counter such that it can be called from a child and propagate up.\n */\nSegment.prototype.decrementCounter = function decrementCounter() {\n this.counter--;\n if (this.counter <= 0 && this.isClosed()) {\n this.flush();\n }\n};\n/**\n * Closes the current segment. This automatically sets the end time.\n * @param {Error|string} [err] - The error to capture.\n * @param {boolean} [remote] - Flag for whether the exception caught was remote or not.\n */\nSegment.prototype.close = function (err, remote) {\n if (!this.end_time) {\n this.end_time = SegmentUtils.getCurrentTime();\n }\n if (err !== undefined) {\n this.addError(err, remote);\n }\n delete this.in_progress;\n delete this.exception;\n if (this.counter <= 0) {\n this.flush();\n }\n};\n/**\n * Sends the segment to the daemon.\n */\nSegment.prototype.flush = function flush() {\n if (this.notTraced !== true) {\n delete this.exception;\n var thisCopy = Utils.objectWithoutProperties(this, ['counter', 'notTraced'], true);\n SegmentEmitter.send(thisCopy);\n }\n};\nSegment.prototype.format = function format() {\n var ignore = ['segment', 'parent', 'counter'];\n if (this.subsegments == null || this.subsegments.length === 0) {\n ignore.push('subsegments');\n }\n var thisCopy = Utils.objectWithoutProperties(this, ignore, false);\n return JSON.stringify(thisCopy);\n};\nSegment.prototype.toString = function toString() {\n return JSON.stringify(this);\n};\nmodule.exports = Segment;\n", "\"use strict\";\n/**\n * @module context_utils\n */\nvar cls = require('cls-hooked/context');\nvar logger = require('./logger');\nvar Segment = require('./segments/segment');\nvar Subsegment = require('./segments/attributes/subsegment');\nvar cls_mode = true;\nvar NAMESPACE = 'AWSXRay';\nvar SEGMENT = 'segment';\nvar contextOverride = false;\nvar contextUtils = {\n CONTEXT_MISSING_STRATEGY: {\n RUNTIME_ERROR: {\n contextMissing: function contextMissingRuntimeError(message) {\n throw new Error(message);\n }\n },\n LOG_ERROR: {\n contextMissing: function contextMissingLogError(message) {\n var err = new Error(message);\n logger.getLogger().error(err.stack);\n }\n },\n IGNORE_ERROR: {\n contextMissing: function contextMissingIgnoreError() {\n }\n }\n },\n contextMissingStrategy: {},\n /**\n * Resolves the segment or subsegment given manual mode and params on the call required.\n * @param [Segment|Subsegment] segment - The segment manually provided via params.XraySegment, if provided.\n * @returns {Segment|Subsegment}\n * @alias module:context_utils.resolveManualSegmentParams\n */\n resolveManualSegmentParams: function resolveManualSegmentParams(params) {\n if (params && !contextUtils.isAutomaticMode()) {\n var xraySegment = params.XRaySegment || params.XraySegment;\n var segment = params.Segment;\n var found = null;\n if (xraySegment && (xraySegment instanceof Segment || xraySegment instanceof Subsegment)) {\n found = xraySegment;\n delete params.XRaySegment;\n delete params.XraySegment;\n }\n else if (segment && (segment instanceof Segment || segment instanceof Subsegment)) {\n found = segment;\n delete params.Segment;\n }\n return found;\n }\n },\n /**\n * Gets current CLS namespace for X-Ray SDK or creates one if absent.\n * @returns {Namespace}\n * @alias module:context_utils.getNamespace\n */\n getNamespace: function getNamespace() {\n return cls.getNamespace(NAMESPACE) || cls.createNamespace(NAMESPACE);\n },\n /**\n * Resolves the segment or subsegment given manual or automatic mode.\n * @param [Segment|Subsegment] segment - The segment manually provided, if provided.\n * @returns {Segment|Subsegment}\n * @alias module:context_utils.resolveSegment\n */\n resolveSegment: function resolveSegment(segment) {\n if (cls_mode) {\n return this.getSegment();\n }\n else if (segment && !cls_mode) {\n return segment;\n }\n else if (!segment && !cls_mode) {\n contextUtils.contextMissingStrategy.contextMissing('No sub/segment specified. A sub/segment must be provided for manual mode.');\n }\n },\n /**\n * Returns the current segment or subsegment. For use with in automatic mode only.\n * @returns {Segment|Subsegment}\n * @alias module:context_utils.getSegment\n */\n getSegment: function getSegment() {\n if (cls_mode) {\n var segment = contextUtils.getNamespace(NAMESPACE).get(SEGMENT);\n if (!segment) {\n contextUtils.contextMissingStrategy.contextMissing('Failed to get the current sub/segment from the context.');\n }\n else if (segment instanceof Segment && process.env.LAMBDA_TASK_ROOT && segment.facade == true) {\n segment.resolveLambdaTraceData();\n }\n return segment;\n }\n else {\n contextUtils.contextMissingStrategy.contextMissing('Cannot get sub/segment from context. Not supported in manual mode.');\n }\n },\n /**\n * Sets the current segment or subsegment. For use with in automatic mode only.\n * @param [Segment|Subsegment] segment - The sub/segment to set.\n * @returns {Segment|Subsegment}\n * @alias module:context_utils.setSegment\n */\n setSegment: function setSegment(segment) {\n if (cls_mode) {\n if (!contextUtils.getNamespace(NAMESPACE).set(SEGMENT, segment)) {\n logger.getLogger().warn('Failed to set the current sub/segment on the context.');\n }\n }\n else {\n contextUtils.contextMissingStrategy.contextMissing('Cannot set sub/segment on context. Not supported in manual mode.');\n }\n },\n /**\n * Returns true if in automatic mode, otherwise false.\n * @returns {Segment|Subsegment}\n * @alias module:context_utils.isAutomaticMode\n */\n isAutomaticMode: function isAutomaticMode() {\n return cls_mode;\n },\n /**\n * Enables automatic mode. Automatic mode uses 'cls-hooked'.\n * @see https://github.com/jeff-lewis/cls-hooked\n * @alias module:context_utils.enableAutomaticMode\n */\n enableAutomaticMode: function enableAutomaticMode() {\n cls_mode = true;\n contextUtils.getNamespace(NAMESPACE);\n logger.getLogger().debug('Overriding AWS X-Ray SDK mode. Set to automatic mode.');\n },\n /**\n * Disables automatic mode. Current segment or subsegment then must be passed manually\n * via the parent optional on captureFunc, captureAsyncFunc etc.\n * @alias module:context_utils.enableManualMode\n */\n enableManualMode: function enableManualMode() {\n cls_mode = false;\n if (cls.getNamespace(NAMESPACE)) {\n cls.destroyNamespace(NAMESPACE);\n }\n logger.getLogger().debug('Overriding AWS X-Ray SDK mode. Set to manual mode.');\n },\n /**\n * Sets the context missing strategy if no context missing strategy is set using the environment variable with\n * key AWS_XRAY_CONTEXT_MISSING. The context missing strategy's contextMissing function will be called whenever\n * trace context is not found.\n * @param {string|function} strategy - The strategy to set. Valid string values are 'LOG_ERROR' and 'RUNTIME_ERROR'.\n * Alternatively, a custom function can be supplied, which takes a error message string.\n */\n setContextMissingStrategy: function setContextMissingStrategy(strategy) {\n if (!contextOverride) {\n if (typeof strategy === 'string') {\n var lookupStrategy = contextUtils.CONTEXT_MISSING_STRATEGY[strategy.toUpperCase()];\n if (lookupStrategy) {\n contextUtils.contextMissingStrategy.contextMissing = lookupStrategy.contextMissing;\n if (process.env.AWS_XRAY_CONTEXT_MISSING) {\n logger.getLogger().debug('AWS_XRAY_CONTEXT_MISSING is set. Configured context missing strategy to ' +\n process.env.AWS_XRAY_CONTEXT_MISSING + '.');\n }\n else {\n logger.getLogger().debug('Configured context missing strategy to: ' + strategy);\n }\n }\n else {\n throw new Error('Invalid context missing strategy: ' + strategy + '. Valid values are ' +\n Object.keys(contextUtils.CONTEXT_MISSING_STRATEGY) + '.');\n }\n }\n else if (typeof strategy === 'function') {\n contextUtils.contextMissingStrategy.contextMissing = strategy;\n logger.getLogger().info('Configured custom context missing strategy to function: ' + strategy.name);\n }\n else {\n throw new Error('Context missing strategy must be either a string or a custom function.');\n }\n }\n else {\n logger.getLogger().warn('Ignoring call to setContextMissingStrategy as AWS_XRAY_CONTEXT_MISSING is set. ' +\n 'The current context missing strategy will not be changed.');\n }\n }\n};\ncls.createNamespace(NAMESPACE);\nlogger.getLogger().debug('Starting the AWS X-Ray SDK in automatic mode (default).');\nif (process.env.AWS_XRAY_CONTEXT_MISSING) {\n contextUtils.setContextMissingStrategy(process.env.AWS_XRAY_CONTEXT_MISSING);\n contextOverride = true;\n}\nelse {\n contextUtils.contextMissingStrategy.contextMissing = contextUtils.CONTEXT_MISSING_STRATEGY.LOG_ERROR.contextMissing;\n logger.getLogger().debug('Using default context missing strategy: LOG_ERROR');\n}\nmodule.exports = contextUtils;\n", "\"use strict\";\nvar { getHttpResponseData } = require('../segments/segment_utils');\n/**\n * Represents an incoming HTTP/HTTPS call.\n * @constructor\n * @param {http.IncomingMessage|https.IncomingMessage} req - The request object from the HTTP/HTTPS call.\n */\nfunction IncomingRequestData(req) {\n this.init(req);\n}\nIncomingRequestData.prototype.init = function init(req) {\n var forwarded = !!req.headers['x-forwarded-for'];\n var url;\n if (req.connection) {\n url = ((req.connection.secure || req.connection.encrypted) ? 'https://' : 'http://') +\n ((req.headers['host'] || '') + (req.url || ''));\n }\n this.request = {\n method: req.method || '',\n user_agent: req.headers['user-agent'] || '',\n client_ip: getClientIp(req) || '',\n url: url || '',\n };\n if (forwarded) {\n this.request.x_forwarded_for = forwarded;\n }\n};\nvar getClientIp = function getClientIp(req) {\n var clientIp;\n if (req.headers['x-forwarded-for']) {\n clientIp = (req.headers['x-forwarded-for'] || '').split(',')[0];\n }\n else if (req.connection && req.connection.remoteAddress) {\n clientIp = req.connection.remoteAddress;\n }\n else if (req.socket && req.socket.remoteAddress) {\n clientIp = req.socket.remoteAddress;\n }\n else if (req.connection && req.connection.socket && req.connection.socket.remoteAddress) {\n clientIp = req.connection.socket.remoteAddress;\n }\n return clientIp;\n};\n/**\n * Closes the local and automatically captures the response data.\n * @param {http.ServerResponse|https.ServerResponse} res - The response object from the HTTP/HTTPS call.\n */\nIncomingRequestData.prototype.close = function close(res) {\n this.response = getHttpResponseData(res);\n};\nmodule.exports = IncomingRequestData;\n", "\"use strict\";\n/**\n * Represents a LocalReservoir object that keeps track of the number of traces per second sampled and\n * the fixed rate for a given sampling rule defined locally.\n * It also decides if a given trace should be sampled or not based on the state of current second.\n * @constructor\n * @param {number} fixedTarget - An integer value to specify the maximum number of traces per second to sample.\n * @param {number} fallbackRate - A value between 0 and 1 indicating the sampling rate after the maximum traces per second has been hit.\n */\nfunction LocalReservoir(fixedTarget, fallbackRate) {\n this.init(fixedTarget, fallbackRate);\n}\nLocalReservoir.prototype.init = function init(fixedTarget, fallbackRate) {\n this.usedThisSecond = 0;\n if (typeof fixedTarget === 'number' && fixedTarget % 1 === 0 && fixedTarget >= 0) {\n this.fixedTarget = fixedTarget;\n }\n else {\n throw new Error('Error in sampling file. Rule attribute \"fixed_target\" must be a non-negative integer.');\n }\n if (typeof fallbackRate === 'number' && fallbackRate >= 0 && fallbackRate <= 1) {\n this.fallbackRate = fallbackRate;\n }\n else {\n throw new Error('Error in sampling file. Rule attribute \"rate\" must be a number between 0 and 1 inclusive.');\n }\n};\nLocalReservoir.prototype.isSampled = function isSampled() {\n var now = Math.round(new Date().getTime() / 1000);\n if (now !== this.thisSecond) {\n this.usedThisSecond = 0;\n this.thisSecond = now;\n }\n if (this.usedThisSecond >= this.fixedTarget) {\n return Math.random() < this.fallbackRate;\n }\n this.usedThisSecond++;\n return true;\n};\nmodule.exports = LocalReservoir;\n", "{\n \"default\": {\n \"fixed_target\": 1,\n \"rate\": 0.05\n },\n \"version\": 2\n}\n", "\"use strict\";\nvar fs = require('fs');\nvar LocalReservoir = require('./local_reservoir');\nvar Utils = require('../../utils');\nvar defaultRules = require('../../resources/default_sampling_rules.json');\nvar logger = require('../../logger');\n/**\n * The local sampler used to make sampling decisions when the decisions are absent in the incoming requests\n * and the default sampler needs to fall back on local rules. It will also be the primary sampler\n * if the default sampler is disabled.\n * @module LocalSampler\n */\nvar LocalSampler = {\n /**\n * Makes a sample decision based on the sample request.\n * @param {object} sampleRequest - Contains information for rules matching.\n * @module LocalSampler\n * @function shouldSample\n */\n shouldSample: function shouldSample(sampleRequest) {\n var host = sampleRequest.host;\n var httpMethod = sampleRequest.httpMethod;\n var urlPath = sampleRequest.urlPath;\n var formatted = '{ http_method: ' + httpMethod + ', host: ' + host + ', url_path: ' + urlPath + ' }';\n var matched;\n this.rules.some(function (rule) {\n // Any null parameters provided will be considered an implicit match.\n if (rule.default || (host == null || (Utils.wildcardMatch(rule.host, host))\n && (httpMethod == null || Utils.wildcardMatch(rule.http_method, httpMethod))\n && (urlPath == null || Utils.wildcardMatch(rule.url_path, urlPath)))) {\n matched = rule.reservoir;\n logger.getLogger().debug('Local sampling rule match found for ' + formatted + '. Matched ' + (rule.default ?\n 'default' : '{ http_method: ' + rule.http_method + ', host: ' + rule.host + ', url_path: ' +\n rule.url_path + ' }') + '. Using fixed_target: ' + matched.fixedTarget + ' and rate: ' + matched.fallbackRate + '.');\n return true;\n }\n });\n if (matched) {\n return matched.isSampled();\n }\n else {\n logger.getLogger().debug('No sampling rule matched for ' + formatted);\n return false;\n }\n },\n /**\n * Set local rules for making sampling decisions.\n * @module LocalSampler\n * @function setLocalRules\n */\n setLocalRules: function setLocalRules(source) {\n if (source) {\n if (typeof source === 'string') {\n logger.getLogger().info('Using custom sampling rules file: ' + source);\n this.rules = loadRulesConfig(JSON.parse(fs.readFileSync(source, 'utf8')));\n }\n else {\n logger.getLogger().info('Using custom sampling rules source.');\n this.rules = loadRulesConfig(source);\n }\n }\n else {\n this.rules = parseRulesConfig(defaultRules);\n }\n }\n};\nvar loadRulesConfig = function loadRulesConfig(config) {\n if (!config.version) {\n throw new Error('Error in sampling file. Missing \"version\" attribute.');\n }\n if (config.version === 1 || config.version === 2) {\n return parseRulesConfig(config);\n }\n else {\n throw new Error('Error in sampling file. Unknown version \"' + config.version + '\".');\n }\n};\nvar parseRulesConfig = function parseRulesConfig(config) {\n var defaultRule;\n var rules = [];\n if (config.default) {\n var missing = [];\n for (var key in config.default) {\n if (key !== 'fixed_target' && key !== 'rate') {\n throw new Error('Error in sampling file. Invalid attribute for default: ' + key +\n '. Valid attributes for default are \"fixed_target\" and \"rate\".');\n }\n else if (typeof config.default[key] !== 'number') {\n throw new Error('Error in sampling file. Default ' + key + ' must be a number.');\n }\n }\n if (typeof config.default.fixed_target === 'undefined') {\n missing.push('fixed_target');\n }\n if (typeof config.default.rate === 'undefined') {\n missing.push('rate');\n }\n if (missing.length !== 0) {\n throw new Error('Error in sampling file. Missing required attributes for default: ' + missing + '.');\n }\n defaultRule = { default: true, reservoir: new LocalReservoir(config.default.fixed_target, config.default.rate) };\n }\n else {\n throw new Error('Error in sampling file. Expecting \"default\" object to be defined with attributes \"fixed_target\" and \"rate\".');\n }\n if (Array.isArray(config.rules)) {\n config.rules.forEach(function (rawRule) {\n var params = {};\n var required;\n if (config.version === 2) {\n required = { host: 1, http_method: 1, url_path: 1, fixed_target: 1, rate: 1 };\n }\n if (config.version === 1) {\n required = { service_name: 1, http_method: 1, url_path: 1, fixed_target: 1, rate: 1 };\n }\n for (var key in rawRule) {\n var value = rawRule[key];\n if (!required[key] && key != 'description') {\n throw new Error('Error in sampling file. Rule ' + JSON.stringify(rawRule) + ' has invalid attribute: ' + key + '.');\n }\n else if (key != 'description' && !value && value !== 0) {\n throw new Error('Error in sampling file. Rule ' + JSON.stringify(rawRule) + ' attribute \"' + key + '\" has invalid value: ' + value + '.');\n }\n else {\n if (config.version === 2) {\n params[key] = value;\n }\n if (config.version === 1 && key === 'service_name') {\n params['host'] = value;\n }\n else {\n params[key] = value;\n }\n delete required[key];\n }\n }\n if (Object.keys(required).length !== 0 && required.constructor === Object) {\n throw new Error('Error in sampling file. Rule ' + JSON.stringify(rawRule) + ' is missing required attributes: ' + Object.keys(required) + '.');\n }\n var rule = params;\n rule.reservoir = new LocalReservoir(rawRule.fixed_target, rawRule.rate);\n rules.push(rule);\n });\n }\n rules.push(defaultRule);\n return rules;\n};\nLocalSampler.setLocalRules();\nmodule.exports = LocalSampler;\n", "\"use strict\";\n/**\n * Represents a Reservoir object that keeps track of the number of traces per second sampled and\n * the fixed rate for a given sampling rule. This information is fetched from X-Ray serivce.\n * It decides if a given trace should be borrowed or sampled or not sampled based on the state of current second.\n * @constructor\n */\nfunction Reservoir() {\n this.init();\n}\nReservoir.prototype.init = function init() {\n this.quota = null;\n this.TTL = null;\n this.takenThisSec = 0;\n this.borrowedThisSec = 0;\n this.reportInterval = 1;\n this.reportElapsed = 0;\n};\nReservoir.prototype.borrowOrTake = function borrowOrTake(now, canBorrow) {\n this.adjustThisSec(now);\n // Don't borrow if the quota is available and fresh.\n if (this.quota >= 0 && this.TTL >= now) {\n if (this.takenThisSec >= this.quota) {\n return false;\n }\n this.takenThisSec++;\n return 'take';\n }\n // Otherwise try to borrow if the quota is not present or expired.\n if (canBorrow) {\n if (this.borrowedThisSec >= 1) {\n return false;\n }\n this.borrowedThisSec++;\n return 'borrow';\n }\n};\nReservoir.prototype.adjustThisSec = function adjustThisSec(now) {\n if (now !== this.thisSec) {\n this.takenThisSec = 0;\n this.borrowedThisSec = 0;\n this.thisSec = now;\n }\n};\nReservoir.prototype.loadNewQuota = function loadNewQuota(quota, TTL, interval) {\n if (quota) {\n this.quota = quota;\n }\n if (TTL) {\n this.TTL = TTL;\n }\n if (interval) {\n this.reportInterval = interval / 10;\n } // Report interval is always time of 10.\n};\nReservoir.prototype.timeToReport = function timeToReport() {\n if (this.reportElapsed + 1 >= this.reportInterval) {\n this.reportElapsed = 0;\n return true;\n }\n else {\n this.reportElapsed += 1;\n return false;\n }\n};\nmodule.exports = Reservoir;\n", "\"use strict\";\nvar Utils = require('../../utils');\nvar Reservoir = require('./reservoir');\n/**\n * The data model for a sampling rule defined using X-Ray API CreateSamplingRules.\n * It should be only instantiated directly from the X-Ray API response.\n * @constructor\n */\nfunction SamplingRule(name, priority, rate, reservoirSize, host, httpMethod, urlPath, serviceName, serviceType) {\n this.init(name, priority, rate, reservoirSize, host, httpMethod, urlPath, serviceName, serviceType);\n}\nSamplingRule.prototype.init = function init(name, priority, rate, reservoirSize, host, httpMethod, urlPath, serviceName, serviceType) {\n this.name = name;\n this.priority = priority;\n this.rate = rate;\n this.host = host;\n this.httpMethod = httpMethod;\n this.urlPath = urlPath;\n this.serviceName = serviceName;\n this.serviceType = serviceType;\n this.reservoir = new Reservoir();\n this.borrow = !!reservoirSize;\n this.resetStatistics();\n};\nSamplingRule.prototype.match = function match(sampleRequest) {\n var host = sampleRequest.host;\n var httpMethod = sampleRequest.httpMethod;\n var serviceName = sampleRequest.serviceName;\n var urlPath = sampleRequest.urlPath;\n var serviceType = sampleRequest.serviceType;\n return this.isDefault() || (!host || Utils.wildcardMatch(this.host, host))\n && (!httpMethod || Utils.wildcardMatch(this.httpMethod, httpMethod))\n && (!serviceName || Utils.wildcardMatch(this.serviceName, serviceName))\n && (!urlPath || Utils.wildcardMatch(this.urlPath, urlPath))\n && (!serviceType || Utils.wildcardMatch(this.serviceType, serviceType));\n};\nSamplingRule.prototype.snapshotStatistics = function snapshotStatistics() {\n var statistics = {\n requestCount: this.requestCount,\n borrowCount: this.borrowCount,\n sampledCount: this.sampledCount\n };\n this.resetStatistics();\n return statistics;\n};\nSamplingRule.prototype.merge = function merge(rule) {\n this.reservoir = rule.reservoir;\n this.requestCount = rule.requestCount;\n this.borrowCount = rule.borrowCount;\n this.sampledCount = rule.sampledCount;\n rule = null; // unref the old rule so it can be garbage collected.\n};\nSamplingRule.prototype.isDefault = function isDefault() {\n return this.name === 'Default'; // \"Default\" is a reserved keyword from X-Ray back-end.\n};\nSamplingRule.prototype.incrementRequestCount = function incrementRequestCount() {\n this.requestCount++;\n};\nSamplingRule.prototype.incrementBorrowCount = function incrementBorrowCount() {\n this.borrowCount++;\n};\nSamplingRule.prototype.incrementSampledCount = function incrementSampledCount() {\n this.sampledCount++;\n};\nSamplingRule.prototype.setRate = function setRate(rate) {\n this.rate = rate;\n};\nSamplingRule.prototype.getRate = function getRate() {\n return this.rate;\n};\nSamplingRule.prototype.getName = function getName() {\n return this.name;\n};\nSamplingRule.prototype.getPriority = function getPriority() {\n return this.priority;\n};\nSamplingRule.prototype.getReservoir = function getReservoir() {\n return this.reservoir;\n};\nSamplingRule.prototype.resetStatistics = function resetStatistics() {\n this.requestCount = 0;\n this.borrowCount = 0;\n this.sampledCount = 0;\n};\nSamplingRule.prototype.canBorrow = function canBorrow() {\n return this.borrow;\n};\nSamplingRule.prototype.everMatched = function everMatched() {\n return this.requestCount > 0;\n};\nSamplingRule.prototype.timeToReport = function timeToReport() {\n return this.reservoir.timeToReport();\n};\nmodule.exports = SamplingRule;\n", "\"use strict\";\nvar crypto = require('crypto');\nvar logger = require('../../logger');\nvar SamplingRule = require('./sampling_rule');\nvar DaemonConfig = require('../../daemon_config');\nconst util = require('util');\nconst http = require('http');\n/**\n * The ServiceConnector that calls X-Ray service and convert the API response bodies to data models\n * defined in the X-Ray SDK and return them to the pollers.\n * @module ServiceConnector\n */\nvar ServiceConnector = {\n // client_id is a 12 byte cryptographically secure random hex\n // identifying the SDK instance and is generated during SDK initialization/\n // This is required when reporting sampling to X-Ray back-end.\n clientId: crypto.randomBytes(12).toString('hex'),\n samplingRulesPath: '/GetSamplingRules',\n samplingTargetsPath: '/SamplingTargets',\n logger: logger,\n httpClient: http,\n fetchSamplingRules: function fetchSamplingRules(callback) {\n const body = '{}'; // Payload needed for GetSamplingRules POST request\n const options = getOptions(this.samplingRulesPath, body.length);\n const httpReq = this.httpClient.__request ? this.httpClient.__request : this.httpClient.request;\n const req = httpReq(options, res => {\n var data = '';\n res.on('data', d => {\n data += d;\n });\n res.on('error', error => {\n callback(error);\n });\n res.on('end', () => {\n var dataObj;\n try {\n dataObj = JSON.parse(data);\n }\n catch (err) {\n callback(err);\n return;\n }\n if (!dataObj) {\n callback(new Error('AWS X-Ray GetSamplingRules API returned empty response'));\n return;\n }\n var newRules = assembleRules(dataObj);\n callback(null, newRules);\n });\n });\n req.on('error', () => {\n callback(new Error(`Failed to connect to X-Ray daemon at ${options.hostname}:${options.port} to get sampling rules.`));\n });\n req.write(body);\n req.end();\n },\n fetchTargets: function fetchTargets(rules, callback) {\n const body = JSON.stringify(constructStatisticsDocs(rules));\n const options = getOptions(this.samplingTargetsPath, body.length);\n const httpReq = this.httpClient.__request ? this.httpClient.__request : this.httpClient.request;\n const req = httpReq(options, res => {\n var data = '';\n res.on('data', d => {\n data += d;\n });\n res.on('error', error => {\n callback(error);\n });\n res.on('end', () => {\n var dataObj;\n try {\n dataObj = JSON.parse(data);\n }\n catch (err) {\n callback(err);\n return;\n }\n if (!dataObj || typeof dataObj['LastRuleModification'] != 'number') {\n callback(new Error('AWS X-Ray SamplingTargets API returned invalid response'));\n return;\n }\n var targetsMapping = assembleTargets(dataObj);\n var ruleFreshness = dateToEpoch(dataObj['LastRuleModification']);\n callback(null, targetsMapping, ruleFreshness);\n });\n });\n req.on('error', () => {\n callback(new Error(`Failed to connect to X-Ray daemon at ${options.hostname}:${options.port} to get sampling targets.`));\n });\n req.write(body);\n req.end();\n }\n};\nvar constructStatisticsDocs = function constructStatisticsDocs(rules) {\n var documents = [];\n var now = Math.floor(new Date().getTime() / 1000);\n rules.forEach(function (rule) {\n var statistics = rule.snapshotStatistics();\n var doc = {\n 'RuleName': rule.getName(),\n 'ClientID': ServiceConnector.clientId,\n 'RequestCount': statistics.requestCount,\n 'BorrowCount': statistics.borrowCount,\n 'SampledCount': statistics.sampledCount,\n 'Timestamp': now\n };\n documents.push(doc);\n });\n return { SamplingStatisticsDocuments: documents };\n};\nvar assembleRules = function assembleRules(data) {\n var newRules = [];\n var ruleList = data['SamplingRuleRecords'] || [];\n ruleList.forEach(function (ruleRecord) {\n ruleRecord = ruleRecord['SamplingRule'];\n // For forward compatibility reason right now it only\n // deals with version 1 sampling rules.\n if (isRuleValid(ruleRecord)) {\n var newRule = new SamplingRule(ruleRecord['RuleName'], ruleRecord['Priority'], ruleRecord['FixedRate'], ruleRecord['ReservoirSize'], ruleRecord['Host'], ruleRecord['HTTPMethod'], ruleRecord['URLPath'], ruleRecord['ServiceName'], ruleRecord['ServiceType']);\n newRules.push(newRule);\n }\n });\n return newRules;\n};\nvar assembleTargets = function assembleTargets(data) {\n var docs = data['SamplingTargetDocuments'] || [];\n var targetsMapping = {};\n docs.forEach(function (doc) {\n var newTarget = {\n rate: doc['FixedRate'],\n quota: doc['ReservoirQuota'],\n TTL: dateToEpoch(doc['ReservoirQuotaTTL']),\n interval: doc['Interval']\n };\n targetsMapping[doc['RuleName']] = newTarget;\n });\n return targetsMapping;\n};\nvar isRuleValid = function isRuleValid(record) {\n return record['Version'] === 1\n && record['ResourceARN'] === '*'\n && record['Attributes'] && Object.keys(record['Attributes']).length === 0\n && record['ServiceType']\n && record['RuleName']\n && record['Priority']\n && typeof record['FixedRate'] == 'number';\n};\nvar dateToEpoch = function dateToEpoch(date) {\n return new Date(date).getTime() / 1000;\n};\nvar getOptions = function getOptions(path, contentLength) {\n const options = {\n hostname: DaemonConfig.tcp_ip,\n port: DaemonConfig.tcp_port,\n method: 'POST',\n path: path,\n headers: {\n 'Content-Type': 'application/json',\n 'Content-Length': contentLength,\n 'Host': util.format('%s:%d', DaemonConfig.tcp_ip, DaemonConfig.tcp_port)\n }\n };\n return options;\n};\nmodule.exports = ServiceConnector;\n", "\"use strict\";\nvar TTL = 60 * 60; // The cache expires 1 hour after the last refresh time.\n/**\n * The rule cache that stores sampling rules fetched from X-Ray service.\n * @module RuleCache\n */\nvar RuleCache = {\n rules: [],\n lastUpdated: null,\n /**\n * Tries to find a valid rule that matches the sample request.\n * @param {object} sampleRequest - Contains information for rules matching.\n * @param {number} now - Current epoch in seconds.\n * @module RuleCache\n * @function getMatchedRule\n */\n getMatchedRule: function getMatchedRule(sampleRequest, now) {\n if (isExpired(now)) {\n return null;\n }\n var matchedRule;\n this.rules.forEach(function (rule) {\n if (!matchedRule && rule.match(sampleRequest)) {\n matchedRule = rule;\n }\n if (rule.isDefault() && !matchedRule) {\n matchedRule = rule;\n }\n });\n return matchedRule;\n },\n /**\n * Load rules fetched from X-Ray service in order sorted by priorities.\n * @param {object} rules - Newly fetched rules to load.\n * @module RuleCache\n * @function loadRules\n */\n loadRules: function loadRules(rules) {\n // Record the old rules for later merging.\n var oldRules = {};\n this.rules.forEach(function (rule) {\n oldRules[rule.getName()] = rule;\n });\n // Update the rules in the cache.\n this.rules = rules;\n // Transfer state information to refreshed rules.\n this.rules.forEach(function (rule) {\n var oldRule = oldRules[rule.getName()];\n if (oldRule) {\n rule.merge(oldRule);\n }\n });\n // The cache should maintain the order of the rules based on\n // priority. If priority is the same we sort name by alphabet\n // as rule name is unique.\n this.rules.sort(function (a, b) {\n var v = a.getPriority() - b.getPriority();\n if (v !== 0) {\n return v;\n }\n if (a.getName() > b.getName()) {\n return 1;\n }\n else {\n return -1;\n }\n });\n },\n /**\n * Load targets fetched from X-Ray service.\n * @param {object} targetsMapping - Newly fetched targets map with rule name as key.\n * @module RuleCache\n * @function loadTargets\n */\n loadTargets: function loadTargets(targetsMapping) {\n this.rules.forEach(function (rule) {\n var target = targetsMapping[rule.getName()];\n if (target) {\n rule.getReservoir().loadNewQuota(target.quota, target.TTL, target.interval);\n rule.setRate(target.rate);\n }\n });\n },\n getRules: function getRules() {\n return this.rules;\n },\n timestamp: function timestamp(now) {\n this.lastUpdated = now;\n },\n getLastUpdated: function getLastUpdated() {\n return this.lastUpdated;\n }\n};\nvar isExpired = function isExpired(now) {\n // The cache is considered expired if it is never loaded.\n if (!RuleCache.getLastUpdated()) {\n return true;\n }\n return now > RuleCache.getLastUpdated() + TTL;\n};\nmodule.exports = RuleCache;\n", "\"use strict\";\nvar logger = require('../../logger');\nvar ServiceConnector = require('./service_connector');\nvar ruleCache = require('./rule_cache');\nvar DEFAULT_INTERVAL = 5 * 60 * 1000; // 5 minutes on sampling rules fetch\n/**\n * The RulePoller that periodically fetch sampling rules from X-Ray service\n * and load them into RuleCache.\n * @module RulePoller\n */\nvar RulePoller = {\n start: function start() {\n if (this.poller) {\n clearInterval(this.poller);\n }\n // Refresh sampling rules cache with no jitter upon start.\n refresh(false);\n this.poller = setInterval(refresh, DEFAULT_INTERVAL);\n this.poller.unref();\n },\n};\nvar refresh = function refresh(jitter) {\n // Add jitter by default unless explicitly told not to.\n jitter = typeof jitter === 'undefined' ? true : jitter;\n if (jitter) {\n var delay = getJitter();\n setTimeout(refreshWithFirewall, delay);\n }\n else {\n refreshWithFirewall();\n }\n};\nvar refreshWithFirewall = function refreshWithFirewall() {\n try {\n refreshCache();\n }\n catch (e) {\n logger.getLogger().warn('Encountered unexpected exception when fetching sampling rules: ' + e);\n }\n};\nvar refreshCache = function refreshCache() {\n // Timestamp should be generated *before* the actual outbound call to ensure\n // we don't mark the cache as being fresher than it actually is.\n var now = Math.floor(new Date().getTime() / 1000);\n // Pass a callback that only runs when the new rules are\n // successfully fetched.\n ServiceConnector.fetchSamplingRules(function (err, newRules) {\n if (err) {\n logger.getLogger().warn('Failed to retrieve sampling rules from X-Ray service:', err);\n }\n else if (newRules.length !== 0) {\n ruleCache.loadRules(newRules);\n ruleCache.timestamp(now);\n logger.getLogger().info('Successfully refreshed centralized sampling rule cache.');\n }\n });\n};\n// A random jitter of up to 5 seconds is injected after every run to ensure\n// the calls eventually get evenly distributed over the 5 minute window.\nvar getJitter = function getJitter() {\n return Math.random() * 5;\n};\nmodule.exports = RulePoller;\n", "\"use strict\";\nvar rulePoller = require('./rule_poller');\nvar serviceConnector = require('./service_connector');\nvar ruleCache = require('./rule_cache');\nvar logger = require('../../logger');\nvar DEFAULT_INTERVAL = 10 * 1000; // 10 seconds on sampling targets fetch\n/**\n * The TargetPoller that periodically fetch sampling targets from X-Ray service\n * and load them into RuleCache.\n * @module TargetPoller\n */\nvar TargetPoller = {\n interval: DEFAULT_INTERVAL,\n start: function start() {\n this.poller = setInterval(refreshWithFirewall, DEFAULT_INTERVAL + getJitter());\n this.poller.unref();\n },\n};\nvar refreshWithFirewall = function refreshWithFirewall() {\n try {\n refresh();\n }\n catch (e) {\n logger.getLogger().warn('Encountered unexpected exception when fetching sampling targets: ' + e);\n }\n};\nvar refresh = function refresh() {\n var candidates = getCandidates();\n if (candidates && candidates.length > 0) {\n serviceConnector.fetchTargets(candidates, function (err, targetsMapping, ruleFreshness) {\n if (err) {\n logger.getLogger().warn('Failed to retrieve sampling targets from X-Ray service:', err);\n return;\n }\n ruleCache.loadTargets(targetsMapping);\n if (ruleFreshness > ruleCache.getLastUpdated()) {\n logger.getLogger().info('Performing out-of-band sampling rule polling to fetch updated rules.');\n rulePoller.start();\n }\n logger.getLogger().info('Successfully reported rule statistics to get new sampling quota.');\n });\n }\n};\n// Don't report a rule statistics if any of the conditions is met:\n// 1. The report time hasn't come (some rules might have larger report intervals).\n// 2. The rule is never matched.\nvar getCandidates = function getCandidates() {\n var rules = ruleCache.getRules();\n var candidates = [];\n rules.forEach(function (rule) {\n if (rule.everMatched() && rule.timeToReport()) {\n candidates.push(rule);\n }\n });\n return candidates;\n};\n// A random jitter of up to 0.1 seconds is injected after every run to ensure\n// the calls eventually get evenly distributed over the 10 second window.\nvar getJitter = function getJitter() {\n return Math.random() / TargetPoller.interval;\n};\nmodule.exports = TargetPoller;\n", "\"use strict\";\nvar logger = require('../../logger');\nconst util = require('util');\nvar SegmentUtils = require('../../segments/segment_utils');\n/**\n * The default sampler used to make sampling decisions when the decisions are absent in the incoming requests.\n * The sampler use pollers to poll sampling rules from X-Ray service.\n * @module DefaultSampler\n */\nvar DefaultSampler = {\n localSampler: require('./local_sampler'),\n rulePoller: require('./rule_poller'),\n targetPoller: require('./target_poller'),\n ruleCache: require('./rule_cache'),\n started: false,\n /**\n * Makes a sample decision based on the sample request.\n * @param {object} sampleRequest - Contains information for rules matching.\n * @module DefaultSampler\n * @function shouldSample\n */\n shouldSample: function shouldSample(sampleRequest) {\n try {\n if (!this.started) {\n this.start();\n }\n if (!sampleRequest.serviceType) {\n sampleRequest.serviceType = SegmentUtils.origin;\n }\n var now = Math.floor(new Date().getTime() / 1000);\n var matchedRule = this.ruleCache.getMatchedRule(sampleRequest, now);\n if (matchedRule) {\n logger.getLogger().debug(util.format('Rule %s is matched.', matchedRule.getName()));\n return processMatchedRule(matchedRule, now);\n }\n else {\n logger.getLogger().info('No effective centralized sampling rule match. Fallback to local rules.');\n return this.localSampler.shouldSample(sampleRequest);\n }\n }\n catch (err) {\n logger.getLogger().error('Unhandled exception by the SDK during making sampling decisions: ' + err);\n }\n },\n /**\n * Set local rules in case there is a need to fallback.\n * @module DefaultSampler\n * @function setLocalRules\n */\n setLocalRules: function setLocalRules(source) {\n this.localSampler.setLocalRules(source);\n },\n /**\n * Start the pollers to poll sampling rules and targets from X-Ray service.\n * @module DefaultSampler\n * @function start\n */\n start: function start() {\n if (!this.started) {\n this.rulePoller.start();\n this.targetPoller.start();\n this.started = true;\n }\n }\n};\nvar processMatchedRule = function processMatchedRule(rule, now) {\n // As long as a rule is matched we increment request counter.\n rule.incrementRequestCount();\n var reservoir = rule.getReservoir();\n var sample = true;\n // We check if we can borrow or take from reservoir first.\n var decision = reservoir.borrowOrTake(now, rule.canBorrow());\n if (decision === 'borrow') {\n rule.incrementBorrowCount();\n }\n else if (decision === 'take') {\n rule.incrementSampledCount();\n }\n else if (Math.random() <= rule.getRate()) {\n // Otherwise we compute based on FixedRate of this sampling rule.\n rule.incrementSampledCount();\n }\n else {\n sample = false;\n }\n if (sample) {\n return rule.getName();\n }\n else {\n return false;\n }\n};\nmodule.exports = DefaultSampler;\n", "\"use strict\";\n/**\n * Middleware Utils module.\n *\n * Exposes various configuration and helper methods to be used by the middleware.\n * @module mw_utils\n */\nvar Segment = require('../segments/segment');\nvar IncomingRequestData = require('./incoming_request_data');\nvar logger = require('../logger');\nvar coreUtils = require('../utils');\nvar wildcardMatch = require('../utils').wildcardMatch;\nvar processTraceData = require('../utils').processTraceData;\n//headers are case-insensitive\nvar XRAY_HEADER = 'x-amzn-trace-id';\nvar overrideFlag = !!process.env.AWS_XRAY_TRACING_NAME;\nvar utils = {\n defaultName: process.env.AWS_XRAY_TRACING_NAME,\n dynamicNaming: false,\n hostPattern: null,\n sampler: require('./sampling/default_sampler'),\n /**\n * Enables dynamic naming for segments via the middleware. Use 'AWSXRay.middleware.enableDynamicNaming()'.\n * @param {string} [hostPattern] - The pattern to match the host header. See the README on dynamic and fixed naming modes.\n * @alias module:mw_utils.enableDynamicNaming\n */\n enableDynamicNaming: function (hostPattern) {\n this.dynamicNaming = true;\n if (hostPattern && typeof hostPattern !== 'string') {\n throw new Error('Host pattern must be a string.');\n }\n this.hostPattern = hostPattern || null;\n },\n /**\n * Splits out the 'x-amzn-trace-id' header params from the incoming request. Used by the middleware.\n * @param {http.IncomingMessage|https.IncomingMessage} req - The request object from the incoming call.\n * @returns {object}\n * @alias module:mw_utils.processHeaders\n */\n processHeaders: function processHeaders(req) {\n var amznTraceHeader = {};\n if (req && req.headers && req.headers[XRAY_HEADER]) {\n amznTraceHeader = processTraceData(req.headers[XRAY_HEADER]);\n }\n return amznTraceHeader;\n },\n /**\n * Resolves the name of the segment as determined by fixed or dynamic mode options. Used by the middleware.\n * @param {string} hostHeader - The string from the request.headers.host property.\n * @returns {string}\n * @alias module:mw_utils.resolveName\n */\n resolveName: function resolveName(hostHeader) {\n var name;\n if (this.dynamicNaming && hostHeader) {\n name = this.hostPattern ? (wildcardMatch(this.hostPattern, hostHeader) ? hostHeader : this.defaultName) : hostHeader;\n }\n else {\n name = this.defaultName;\n }\n return name;\n },\n /**\n * Resolves the sampling decision as determined by the values given and options set. Used by the middleware.\n * @param {object} amznTraceHeader - The object as returned by the processHeaders function.\n * @param {Segment} segment - The string from the request.headers.host property.\n * @param {http.ServerResponse|https.ServerResponse} res - The response object from the incoming call.\n * @returns {boolean}\n * @alias module:mw_utils.resolveSampling\n */\n resolveSampling: function resolveSampling(amznTraceHeader, segment, res) {\n var isSampled;\n if (amznTraceHeader.sampled === '1') {\n isSampled = true;\n }\n else if (amznTraceHeader.sampled === '0') {\n isSampled = false;\n }\n else {\n var sampleRequest = {\n host: res.req.headers.host,\n httpMethod: res.req.method,\n urlPath: res.req.url,\n serviceName: segment.name\n };\n isSampled = this.sampler.shouldSample(sampleRequest);\n if (isSampled instanceof String || typeof isSampled === 'string') {\n segment.setMatchedSamplingRule(isSampled);\n isSampled = true;\n }\n }\n if (amznTraceHeader.sampled === '?') {\n res.header[XRAY_HEADER] = 'Root=' + amznTraceHeader.root + ';Sampled=' + (isSampled ? '1' : '0');\n }\n if (!isSampled) {\n segment.notTraced = true;\n }\n },\n /**\n * Sets the default name of created segments. Used with the middleware.\n * Can be overridden by the AWS_XRAY_TRACING_NAME environment variable.\n * @param {string} name - The default name for segments created in the middleware.\n * @alias module:mw_utils.setDefaultName\n */\n setDefaultName: function setDefaultName(name) {\n if (!overrideFlag) {\n this.defaultName = name;\n }\n },\n disableCentralizedSampling: function disableCentralizedSampling() {\n this.sampler = require('./sampling/local_sampler');\n },\n /**\n * Overrides the default sampling rules file to specify at what rate to sample at for specific routes.\n * The base sampling rules file can be found at /lib/resources/default_sampling_rules.json\n * @param {string|Object} source - The path to the custom sampling rules file, or the source JSON object.\n * @memberof AWSXRay\n */\n setSamplingRules: function setSamplingRules(source) {\n if (!source || source instanceof String || !(typeof source === 'string' || (source instanceof Object))) {\n throw new Error('Please specify a path to the local sampling rules file, or supply an object containing the rules.');\n }\n this.sampler.setLocalRules(source);\n },\n /**\n * Logs a debug message including core request and segment information\n * @param {string} message - The message to be logged\n * @param {string} url - The request url being traced\n * @param {Segment} - The current segment\n */\n middlewareLog: function middlewareLog(message, url, segment) {\n logger.getLogger().debug(message + ': { url: ' + url + ', name: ' + segment.name + ', trace_id: ' +\n segment.trace_id + ', id: ' + segment.id + ', sampled: ' + !segment.notTraced + ' }');\n },\n /**\n * Traces the request/response cycle of an http.IncomingMessage / http.ServerResponse pair.\n * Resolves sampling rules, creates a segment, adds the core request / response data adding\n * throttling / error / fault flags based on the response status code.\n * @param {http.IncomingMessage} req - The incoming request.\n * @param {http.ServerResponse} res - The server response.\n * @returns {Segment}\n * @memberof AWSXRay\n */\n traceRequestResponseCycle: function traceRequestResponseCycle(req, res) {\n var amznTraceHeader = this.processHeaders(req);\n var name = this.resolveName(req.headers.host);\n var segment = new Segment(name, amznTraceHeader.root, amznTraceHeader.parent);\n var responseWithEmbeddedRequest = Object.assign({}, res, { req: req });\n this.resolveSampling(amznTraceHeader, segment, responseWithEmbeddedRequest);\n segment.addIncomingRequestData(new IncomingRequestData(req));\n this.middlewareLog('Starting middleware segment', req.url, segment);\n var middlewareLog = this.middlewareLog;\n var didEnd = false;\n var endSegment = function () {\n // ensure `endSegment` is only called once\n // in some versions of node.js 10.x and in all versions of node.js 11.x and higher,\n // the 'finish' and 'close' event are BOTH triggered.\n // Previously, only one or the other was triggered:\n // https://github.com/nodejs/node/pull/20611\n if (didEnd) {\n return;\n }\n didEnd = true;\n if (res.statusCode === 429) {\n segment.addThrottleFlag();\n }\n const cause = coreUtils.getCauseTypeFromHttpStatus(res.statusCode);\n if (cause) {\n segment[cause] = true;\n }\n segment.http.close(res);\n segment.close();\n middlewareLog('Closed middleware segment successfully', req.url, segment);\n };\n res.on('finish', endSegment);\n res.on('close', endSegment);\n return segment;\n }\n};\nmodule.exports = utils;\n", "\"use strict\";\nvar contextUtils = require('../context_utils');\nvar mwUtils = require('../middleware/mw_utils');\nvar LambdaUtils = require('../utils').LambdaUtils;\nvar Segment = require('../segments/segment');\nvar SegmentEmitter = require('../segment_emitter');\nvar SegmentUtils = require('../segments/segment_utils');\nvar logger = require('../logger');\nconst TraceID = require('../segments/attributes/trace_id');\n/**\n * @namespace\n * @ignore\n */\nvar xAmznTraceIdPrev = null;\n/**\n* Used to initialize segments on AWS Lambda with extra data from the context.\n*/\nmodule.exports.init = function init() {\n contextUtils.enableManualMode = function () {\n logger.getLogger().warn('AWS Lambda does not support AWS X-Ray manual mode.');\n };\n SegmentEmitter.disableReusableSocket();\n SegmentUtils.setStreamingThreshold(0);\n /**\n * Disabling all centralized sampling in Lambda environments. The sampling decisions would be\n * uselessly applied to the facade segment, and the sampling pollers were causing errors.\n *\n * See: https://github.com/aws/aws-xray-sdk-node/issues/217\n */\n logger.getLogger().info('Disabling centralized sampling in Lambda environment.');\n mwUtils.disableCentralizedSampling();\n var namespace = contextUtils.getNamespace();\n namespace.enter(namespace.createContext());\n contextUtils.setSegment(facadeSegment());\n};\nvar facadeSegment = function facadeSegment() {\n var segment = new Segment('facade');\n var whitelistFcn = ['addNewSubsegment', 'addSubsegment', 'removeSubsegment', 'toString', 'addSubsegmentWithoutSampling', 'addNewSubsegmentWithoutSampling'];\n var silentFcn = ['incrementCounter', 'decrementCounter', 'isClosed', 'close', 'format', 'flush'];\n var xAmznTraceId = process.env._X_AMZN_TRACE_ID;\n for (var key in segment) {\n if (typeof segment[key] === 'function' && whitelistFcn.indexOf(key) === -1) {\n if (silentFcn.indexOf(key) === -1) {\n segment[key] = (function () {\n var func = key;\n return function facade() {\n logger.getLogger().warn('Function \"' + func + '\" cannot be called on an AWS Lambda segment. Please use a subsegment to record data.');\n return;\n };\n })();\n }\n else {\n segment[key] = function facade() {\n return;\n };\n }\n }\n }\n segment.trace_id = TraceID.Invalid().toString();\n segment.isClosed = function () {\n return true;\n };\n segment.in_progress = false;\n segment.counter = 1;\n segment.notTraced = true;\n segment.facade = true;\n segment.reset = function reset() {\n this.trace_id = TraceID.Invalid().toString();\n this.id = '00000000';\n delete this.subsegments;\n this.notTraced = true;\n };\n segment.resolveLambdaTraceData = function resolveLambdaTraceData() {\n var xAmznLambda = process.env._X_AMZN_TRACE_ID;\n if (xAmznLambda) {\n // This check resets the trace data whenever a new trace header is read to not leak data between invocations\n if (xAmznLambda != xAmznTraceIdPrev) {\n this.reset();\n if (LambdaUtils.populateTraceData(segment, xAmznLambda)) {\n xAmznTraceIdPrev = xAmznLambda;\n }\n }\n }\n else {\n this.reset();\n contextUtils.contextMissingStrategy.contextMissing('Missing AWS Lambda trace data for X-Ray. ' +\n 'Ensure Active Tracing is enabled and no subsegments are created outside the function handler.');\n }\n };\n // Test for valid trace data during SDK startup. It's likely we're still in the cold-start portion of the\n // code at this point and a valid trace header has not been set\n if (LambdaUtils.validTraceData(xAmznTraceId)) {\n if (LambdaUtils.populateTraceData(segment, xAmznTraceId)) {\n xAmznTraceIdPrev = xAmznTraceId;\n }\n }\n return segment;\n};\n", "{\n \"name\": \"aws-xray-sdk-core\",\n \"version\": \"3.5.0\",\n \"description\": \"AWS X-Ray SDK for Javascript\",\n \"author\": \"Amazon Web Services\",\n \"contributors\": [\n \"Sandra McMullen <mcmuls@amazon.com>\",\n \"William Armiros <armiros@amazon.com>\",\n \"Moritz Onken <onken@netcubed.de>\"\n ],\n \"files\": [\n \"dist/lib/**/*\",\n \"LICENSE\",\n \"README.md\"\n ],\n \"main\": \"dist/lib/index.js\",\n \"types\": \"dist/lib/index.d.ts\",\n \"engines\": {\n \"node\": \">= 14.x\"\n },\n \"directories\": {\n \"test\": \"test\"\n },\n \"//\": \"@types/cls-hooked is exposed in API so must be in dependencies, not devDependencies\",\n \"dependencies\": {\n \"@aws-sdk/service-error-classification\": \"^3.4.1\",\n \"@aws-sdk/types\": \"^3.4.1\",\n \"@types/cls-hooked\": \"^4.3.3\",\n \"atomic-batcher\": \"^1.0.2\",\n \"cls-hooked\": \"^4.2.2\",\n \"semver\": \"^7.3.8\"\n },\n \"scripts\": {\n \"prepare\": \"npm run compile\",\n \"compile\": \"tsc && npm run copy-lib && npm run copy-test\",\n \"copy-lib\": \"find lib -type f \\\\( -name '*.d.ts' -o -name '*.json' \\\\) | xargs -I % ../../scripts/cp-with-structure.sh % dist\",\n \"copy-test\": \"find test -name '*.json' | xargs -I % ../../scripts/cp-with-structure.sh % dist\",\n \"lint\": \"eslint .\",\n \"lint:fix\": \"eslint . --fix\",\n \"test\": \"npm run compile && mocha --recursive ./dist/test/ -R spec && tsd && mocha --recursive ./dist/test_async/ -R spec\",\n \"test-d\": \"tsd\",\n \"test-async\": \"npm run compile && mocha --recursive ./dist/test_async/ -R spec\",\n \"clean\": \"rm -rf dist && rm -rf node_modules\",\n \"testcov\": \"nyc npm run test\",\n \"reportcov\": \"nyc report --reporter=text-lcov > coverage.lcov && codecov\"\n },\n \"keywords\": [\n \"amazon\",\n \"api\",\n \"aws\",\n \"core\",\n \"xray\",\n \"x-ray\",\n \"x ray\"\n ],\n \"license\": \"Apache-2.0\",\n \"repository\": \"https://github.com/aws/aws-xray-sdk-node/tree/master/packages/core\",\n \"gitHead\": \"0579d9c75e08f8747f9eb87596bea58a7d7e9e25\"\n}\n", "\"use strict\";\nvar http = require('http');\nvar Plugin = {\n METADATA_TIMEOUT: 1000,\n /**\n * Asynchronously retrieves metadata from on-instance endpoint with an HTTP request using retries for\n * requests that time out.\n * @param {object} options - The HTTP options to make the request with\n * @param {function} callback - callback to plugin\n */\n getPluginMetadata: function (options, callback) {\n const METADATA_RETRY_TIMEOUT = 250; // Millis\n const METADATA_RETRIES = 5;\n var retries = METADATA_RETRIES;\n var getMetadata = function () {\n var httpReq = http.__request ? http.__request : http.request;\n var req = httpReq(options, function (res) {\n var body = '';\n res.on('data', function (chunk) {\n body += chunk;\n });\n res.on('end', function () {\n if (this.statusCode === 200 || this.statusCode === 300) {\n try {\n body = JSON.parse(body);\n }\n catch (e) {\n callback(e);\n return;\n }\n callback(null, body);\n }\n else if (retries > 0 && Math.floor(this.statusCode / 100) === 5) {\n retries--;\n setTimeout(getMetadata, METADATA_RETRY_TIMEOUT);\n }\n else {\n callback(new Error(`Failed to retrieve metadata with options: ${options}`));\n }\n });\n });\n req.on('error', function (err) {\n callback(err);\n });\n req.on('timeout', function () {\n req.abort();\n });\n req.setTimeout(Plugin.METADATA_TIMEOUT);\n req.end();\n };\n getMetadata();\n }\n};\nmodule.exports = Plugin;\n", "\"use strict\";\nvar Plugin = require('./plugin');\nvar logger = require('../../logger');\nvar http = require('http');\nvar EC2Plugin = {\n /**\n * A function to get the instance data from the EC2 metadata service.\n * @param {function} callback - The callback for the plugin loader.\n */\n getData: function (callback) {\n const METADATA_PATH = '/latest/dynamic/instance-identity/document';\n function populateMetadata(token) {\n const options = getOptions(METADATA_PATH, 'GET', token ? { 'X-aws-ec2-metadata-token': token } : {});\n Plugin.getPluginMetadata(options, function (err, data) {\n if (err || !data) {\n logger.getLogger().error('Error loading EC2 plugin metadata: ', err ? err.toString() : 'Could not retrieve data from IMDS.');\n callback();\n return;\n }\n const metadata = {\n ec2: {\n instance_id: data.instanceId,\n availability_zone: data.availabilityZone,\n instance_size: data.instanceType,\n ami_id: data.imageId\n }\n };\n callback(metadata);\n });\n }\n /**\n * This kicks off a requet to get a token used for requests to IMDSv2. If the request for the token\n * fails, we fall back to IMDSv1. Otherwise, the token will be used for an IMDSv2 request.\n */\n getToken(function (token) {\n if (token === null) {\n logger.getLogger().debug('EC2Plugin failed to get token from IMDSv2. Falling back to IMDSv1.');\n }\n populateMetadata(token);\n });\n },\n originName: 'AWS::EC2::Instance'\n};\n/**\n * Asynchronously retrieves a token used in requests to EC2 instance metadata service.\n * @param {function} callback - callback to plugin\n */\nfunction getToken(callback) {\n const httpReq = http.__request ? http.__request : http.request;\n const TTL = 60; //seconds\n const TOKEN_PATH = '/latest/api/token';\n const options = getOptions(TOKEN_PATH, 'PUT', {\n 'X-aws-ec2-metadata-token-ttl-seconds': TTL\n });\n let req = httpReq(options, function (res) {\n let body = '';\n res.on('data', function (chunk) {\n body += chunk;\n });\n res.on('end', function () {\n if (this.statusCode === 200 || this.statusCode === 300) {\n callback(body);\n }\n else {\n callback(null);\n }\n });\n });\n req.on('error', function () {\n callback(null);\n });\n req.on('timeout', function () {\n req.abort();\n callback(null);\n });\n req.setTimeout(Plugin.METADATA_TIMEOUT);\n req.end();\n}\nfunction getOptions(path, method, headers) {\n if (!method) {\n method = 'GET';\n }\n if (!headers) {\n headers = {};\n }\n return {\n host: '169.254.169.254',\n path: path,\n method: method,\n headers: headers\n };\n}\nmodule.exports = EC2Plugin;\n", "\"use strict\";\nvar os = require('os');\nvar ECSPlugin = {\n /**\n * A function to get the instance data from the ECS instance.\n * @param {function} callback - The callback for the plugin loader.\n */\n getData: function (callback) {\n callback({ ecs: { container: os.hostname() } });\n },\n originName: 'AWS::ECS::Container'\n};\nmodule.exports = ECSPlugin;\n", "\"use strict\";\nvar fs = require('fs');\nvar logger = require('../../logger');\nvar ENV_CONFIG_LOCATION = '/var/elasticbeanstalk/xray/environment.conf';\nvar ElasticBeanstalkPlugin = {\n /**\n * A function to get data from the Elastic Beanstalk environment configuration file.\n * @param {function} callback - The callback for the plugin loader.\n */\n getData: function (callback) {\n fs.readFile(ENV_CONFIG_LOCATION, 'utf8', function (err, rawData) {\n if (err) {\n logger.getLogger().error('Error loading Elastic Beanstalk plugin:', err.stack);\n callback();\n }\n else {\n var data = JSON.parse(rawData);\n var metadata = {\n elastic_beanstalk: {\n environment: data.environment_name,\n version_label: data.version_label,\n deployment_id: data.deployment_id\n }\n };\n callback(metadata);\n }\n });\n },\n originName: 'AWS::ElasticBeanstalk::Environment'\n};\nmodule.exports = ElasticBeanstalkPlugin;\n", "{\n \"services\": {\n \"dynamodb\": {\n \"operations\": {\n \"batchGetItem\": {\n \"request_descriptors\": {\n \"RequestItems\": {\n \"get_keys\": true,\n \"rename_to\": \"table_names\"\n }\n },\n \"response_parameters\": [\n \"ConsumedCapacity\"\n ]\n },\n \"batchWriteItem\": {\n \"request_descriptors\": {\n \"RequestItems\": {\n \"get_keys\": true,\n \"rename_to\": \"table_names\"\n }\n },\n \"response_parameters\": [\n \"ConsumedCapacity\",\n \"ItemCollectionMetrics\"\n ]\n },\n \"createTable\": {\n \"request_parameters\": [\n \"GlobalSecondaryIndexes\",\n \"LocalSecondaryIndexes\",\n \"ProvisionedThroughput\",\n \"TableName\"\n ]\n },\n \"deleteItem\": {\n \"request_parameters\": [\n \"TableName\"\n ],\n \"response_parameters\": [\n \"ConsumedCapacity\",\n \"ItemCollectionMetrics\"\n ]\n },\n \"deleteTable\": {\n \"request_parameters\": [\n \"TableName\"\n ]\n },\n \"describeTable\": {\n \"request_parameters\": [\n \"TableName\"\n ]\n },\n \"getItem\": {\n \"request_parameters\": [\n \"ConsistentRead\",\n \"ProjectionExpression\",\n \"TableName\"\n ],\n \"response_parameters\": [\n \"ConsumedCapacity\"\n ]\n },\n \"listTables\": {\n \"request_parameters\": [\n \"ExclusiveStartTableName\",\n \"Limit\"\n ],\n \"response_descriptors\": {\n \"TableNames\": {\n \"list\": true,\n \"get_count\": true,\n \"rename_to\": \"table_count\"\n }\n }\n },\n \"putItem\": {\n \"request_parameters\": [\n \"TableName\"\n ],\n \"response_parameters\": [\n \"ConsumedCapacity\",\n \"ItemCollectionMetrics\"\n ]\n },\n \"query\": {\n \"request_parameters\": [\n \"AttributesToGet\",\n \"ConsistentRead\",\n \"IndexName\",\n \"Limit\",\n \"ProjectionExpression\",\n \"ScanIndexForward\",\n \"Select\",\n \"TableName\"\n ],\n \"response_parameters\": [\n \"ConsumedCapacity\"\n ]\n },\n \"scan\": {\n \"request_parameters\": [\n \"AttributesToGet\",\n \"ConsistentRead\",\n \"IndexName\",\n \"Limit\",\n \"ProjectionExpression\",\n \"Segment\",\n \"Select\",\n \"TableName\",\n \"TotalSegments\"\n ],\n \"response_parameters\": [\n \"ConsumedCapacity\",\n \"Count\",\n \"ScannedCount\"\n ]\n },\n \"updateItem\": {\n \"request_parameters\": [\n \"TableName\"\n ],\n \"response_parameters\": [\n \"ConsumedCapacity\",\n \"ItemCollectionMetrics\"\n ]\n },\n \"updateTable\": {\n \"request_parameters\": [\n \"AttributeDefinitions\",\n \"GlobalSecondaryIndexUpdates\",\n \"ProvisionedThroughput\",\n \"TableName\"\n ]\n }\n }\n },\n \"sqs\": {\n \"operations\": {\n \"addPermission\": {\n \"request_parameters\": [\n \"Label\",\n \"QueueUrl\"\n ]\n },\n \"changeMessageVisibility\": {\n \"request_parameters\": [\n \"QueueUrl\",\n \"VisibilityTimeout\"\n ]\n },\n \"changeMessageVisibilityBatch\": {\n \"request_parameters\": [\n \"QueueUrl\"\n ],\n \"response_parameters\": [\n \"Failed\"\n ]\n },\n \"createQueue\": {\n \"request_parameters\": [\n \"Attributes\",\n \"QueueName\"\n ]\n },\n \"deleteMessage\": {\n \"request_parameters\": [\n \"QueueUrl\"\n ]\n },\n \"deleteMessageBatch\": {\n \"request_parameters\": [\n \"QueueUrl\"\n ],\n \"response_parameters\": [\n \"Failed\"\n ]\n },\n \"deleteQueue\": {\n \"request_parameters\": [\n \"QueueUrl\"\n ]\n },\n \"getQueueAttributes\": {\n \"request_parameters\": [\n \"QueueUrl\"\n ],\n \"response_parameters\": [\n \"Attributes\"\n ]\n },\n \"getQueueUrl\": {\n \"request_parameters\": [\n \"QueueName\",\n \"QueueOwnerAWSAccountId\"\n ],\n \"response_parameters\": [\n \"QueueUrl\"\n ]\n },\n \"listDeadLetterSourceQueues\": {\n \"request_parameters\": [\n \"QueueUrl\"\n ],\n \"response_parameters\": [\n \"QueueUrls\"\n ]\n },\n \"listQueues\": {\n \"request_parameters\": [\n \"QueueNamePrefix\"\n ],\n \"response_descriptors\": {\n \"QueueUrls\": {\n \"list\": true,\n \"get_count\": true,\n \"rename_to\": \"queue_count\"\n }\n }\n },\n \"purgeQueue\": {\n \"request_parameters\": [\n \"QueueUrl\"\n ]\n },\n \"receiveMessage\": {\n \"request_parameters\": [\n \"AttributeNames\",\n \"MaxNumberOfMessages\",\n \"MessageAttributeNames\",\n \"QueueUrl\",\n \"VisibilityTimeout\",\n \"WaitTimeSeconds\"\n ],\n \"response_descriptors\": {\n \"Messages\": {\n \"list\": true,\n \"get_count\": true,\n \"rename_to\": \"message_count\"\n }\n }\n },\n \"removePermission\": {\n \"request_parameters\": [\n \"QueueUrl\"\n ]\n },\n \"sendMessage\": {\n \"request_parameters\": [\n \"DelaySeconds\",\n \"QueueUrl\"\n ],\n \"request_descriptors\": {\n \"MessageAttributes\": {\n \"get_keys\": true,\n \"rename_to\": \"message_attribute_names\"\n }\n },\n \"response_parameters\": [\n \"MessageId\"\n ]\n },\n \"sendMessageBatch\": {\n \"request_parameters\": [\n \"QueueUrl\"\n ],\n \"request_descriptors\": {\n \"Entries\": {\n \"list\": true,\n \"get_count\": true,\n \"rename_to\": \"message_count\"\n }\n },\n \"response_descriptors\": {\n \"Failed\": {\n \"list\": true,\n \"get_count\": true,\n \"rename_to\": \"failed_count\"\n },\n \"Successful\": {\n \"list\": true,\n \"get_count\": true,\n \"rename_to\": \"successful_count\"\n }\n }\n },\n \"setQueueAttributes\": {\n \"request_parameters\": [\n \"QueueUrl\"\n ],\n \"request_descriptors\": {\n \"Attributes\": {\n \"get_keys\": true,\n \"rename_to\": \"attribute_names\"\n }\n }\n }\n }\n },\n \"sns\": {\n \"operations\": {\n \"publish\": {\n \"request_parameters\": [\n \"TopicArn\"\n ]\n },\n \"publishBatch\": {\n \"request_parameters\": [\n \"TopicArn\"\n ]\n }\n }\n },\n \"lambda\": {\n \"operations\": {\n \"invoke\": {\n \"request_parameters\": [\n \"FunctionName\",\n \"InvocationType\",\n \"LogType\",\n \"Qualifier\"\n ],\n \"response_parameters\": [\n \"FunctionError\",\n \"StatusCode\"\n ]\n },\n \"invokeAsync\": {\n \"request_parameters\": [\n \"FunctionName\"\n ],\n \"response_parameters\": [\n \"Status\"\n ]\n }\n }\n },\n \"s3\": {\n \"operations\": {\n \"abortMultipartUpload\": {\n \"request_parameters\": [\n \"Key\"\n ],\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"completeMultipartUpload\": {\n \"request_parameters\": [\n \"Key\"\n ],\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"copyObject\": {\n \"request_parameters\": [\n \"CopySource\",\n \"Key\"\n ],\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"createBucket\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"createMultipartUpload\": {\n \"request_parameters\": [\n \"Key\"\n ],\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"deleteBucket\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"deleteBucketAnalyticsConfiguration\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"deleteBucketCors\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"deleteBucketEncryption\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"deleteBucketInventoryConfiguration\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"deleteBucketLifecycle\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"deleteBucketMetricsConfiguration\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"deleteBucketPolicy\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"deleteBucketReplication\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"deleteBucketTagging\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"deleteBucketWebsite\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"deleteObject\": {\n \"request_parameters\": [\n \"Key\",\n \"VersionId\"\n ],\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"deleteObjectTagging\": {\n \"request_parameters\": [\n \"Key\",\n \"VersionId\"\n ],\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"deleteObjects\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"getBucketAccelerateConfiguration\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"getBucketAcl\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"getBucketAnalyticsConfiguration\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"getBucketCors\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"getBucketEncryption\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"getBucketInventoryConfiguration\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"getBucketLifecycle\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"getBucketLifecycleConfiguration\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"getBucketLocation\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"getBucketLogging\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"getBucketMetricsConfiguration\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"getBucketNotification\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"getBucketNotificationConfiguration\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"getBucketPolicy\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"getBucketReplication\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"getBucketRequestPayment\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"getBucketTagging\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"getBucketVersioning\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"getBucketWebsite\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"getObject\": {\n \"request_parameters\": [\n \"Key\",\n \"VersionId\"\n ],\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"getObjectAcl\": {\n \"request_parameters\": [\n \"Key\",\n \"VersionId\"\n ],\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"getObjectTagging\": {\n \"request_parameters\": [\n \"Key\",\n \"VersionId\"\n ],\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"getObjectTorrent\": {\n \"request_parameters\": [\n \"Key\"\n ],\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"headBucket\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"headObject\": {\n \"request_parameters\": [\n \"Key\",\n \"VersionId\"\n ],\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"listBucketAnalyticsConfigurations\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"listBucketInventoryConfigurations\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"listBucketMetricsConfigurations\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"listMultipartUploads\": {\n \"request_parameters\": [\n \"Prefix\"\n ],\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"listObjectVersions\": {\n \"request_parameters\": [\n \"Prefix\"\n ],\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"listObjects\": {\n \"request_parameters\": [\n \"Prefix\"\n ],\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"listObjectsV2\": {\n \"request_parameters\": [\n \"Prefix\"\n ],\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"listParts\": {\n \"request_parameters\": [\n \"Key\"\n ],\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"putBucketAccelerateConfiguration\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"putBucketAcl\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"putBucketAnalyticsConfiguration\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"putBucketCors\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"putBucketEncryption\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"putBucketInventoryConfiguration\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"putBucketLifecycle\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"putBucketLifecycleConfiguration\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"putBucketLogging\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"putBucketMetricsConfiguration\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"putBucketNotification\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"putBucketNotificationConfiguration\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"putBucketPolicy\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"putBucketReplication\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"putBucketRequestPayment\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"putBucketTagging\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"putBucketVersioning\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"putBucketWebsite\": {\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"putObject\": {\n \"request_parameters\": [\n \"Key\"\n ],\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"putObjectAcl\": {\n \"request_parameters\": [\n \"Key\",\n \"VersionId\"\n ],\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"putObjectTagging\": {\n \"request_parameters\": [\n \"Key\",\n \"VersionId\"\n ],\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"restoreObject\": {\n \"request_parameters\": [\n \"Key\",\n \"VersionId\"\n ],\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"uploadPart\": {\n \"request_parameters\": [\n \"Key\"\n ],\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n },\n \"uploadPartCopy\": {\n \"request_parameters\": [\n \"CopySource\",\n \"Key\"\n ],\n \"request_descriptors\": {\n \"Bucket\": {\n \"rename_to\": \"bucket_name\"\n }\n }\n }\n }\n },\n \"sagemakerruntime\": {\n \"operations\": {\n \"invokeEndpoint\": {\n \"request_parameters\": [\n \"EndpointName\"\n ]\n }\n }\n }\n }\n}\n", "\"use strict\";\nvar fs = require('fs');\nvar logger = require('../logger');\nvar whitelist = require('../resources/aws_whitelist.json');\nvar paramTypes = {\n REQ_DESC: 'request_descriptors',\n REQ_PARAMS: 'request_parameters',\n RES_DESC: 'response_descriptors',\n RES_PARAMS: 'response_parameters'\n};\n/**\n * Represents a set of AWS services, operations and keys or params to capture.\n * @constructor\n * @param {string|Object} [source] - The location or source JSON object of the custom AWS whitelist file. If none is provided, the default file will be used.\n */\nfunction CallCapturer(source) {\n this.init(source);\n}\nCallCapturer.prototype.init = function init(source) {\n if (source) {\n if (typeof source === 'string') {\n logger.getLogger().info('Using custom AWS whitelist file: ' + source);\n this.services = loadWhitelist(JSON.parse(fs.readFileSync(source, 'utf8')));\n }\n else {\n logger.getLogger().info('Using custom AWS whitelist source.');\n this.services = loadWhitelist(source);\n }\n }\n else {\n this.services = whitelist.services;\n }\n};\nCallCapturer.prototype.append = function append(source) {\n var newServices = {};\n if (typeof source === 'string') {\n logger.getLogger().info('Appending AWS whitelist with custom file: ' + source);\n newServices = loadWhitelist(JSON.parse(fs.readFileSync(source, 'utf8')));\n }\n else {\n logger.getLogger().info('Appending AWS whitelist with a custom source.');\n newServices = loadWhitelist(source);\n }\n for (var attribute in newServices) {\n this.services[attribute] = newServices[attribute];\n }\n};\nCallCapturer.prototype.capture = function capture(serviceName, response) {\n var operation = response.request.operation;\n var call = this.services[serviceName] !== undefined ? this.services[serviceName].operations[operation] : null;\n if (call === null) {\n logger.getLogger().debug('Call \"' + serviceName + '.' + operation + '\" is not whitelisted for additional data capturing. Ignoring.');\n return;\n }\n var dataCaptured = {};\n for (var paramType in call) {\n var params = call[paramType];\n if (paramType === paramTypes.REQ_PARAMS) {\n captureCallParams(params, response.request.params, dataCaptured);\n }\n else if (paramType === paramTypes.REQ_DESC) {\n captureDescriptors(params, response.request.params, dataCaptured);\n }\n else if (paramType === paramTypes.RES_PARAMS) {\n if (response.data) {\n captureCallParams(params, response.data, dataCaptured);\n }\n }\n else if (paramType === paramTypes.RES_DESC) {\n if (response.data) {\n captureDescriptors(params, response.data, dataCaptured);\n }\n }\n else {\n logger.getLogger().error('Unknown parameter type \"' + paramType + '\". Must be \"request_descriptors\", \"response_descriptors\", ' +\n '\"request_parameters\" or \"response_parameters\".');\n }\n }\n return dataCaptured;\n};\nfunction captureCallParams(params, call, data) {\n params.forEach(function (param) {\n if (typeof call[param] !== 'undefined') {\n var formatted = toSnakeCase(param);\n this[formatted] = call[param];\n }\n }, data);\n}\nfunction captureDescriptors(descriptors, params, data) {\n for (var paramName in descriptors) {\n var attributes = descriptors[paramName];\n if (typeof params[paramName] !== 'undefined') {\n var paramData;\n if (attributes.list && attributes.get_count) {\n paramData = params[paramName] ? params[paramName].length : 0;\n }\n else {\n paramData = attributes.get_keys === true ? Object.keys(params[paramName]) : params[paramName];\n }\n if (typeof attributes.rename_to === 'string') {\n data[attributes.rename_to] = paramData;\n }\n else {\n var formatted = toSnakeCase(paramName);\n data[formatted] = paramData;\n }\n }\n }\n}\nfunction toSnakeCase(param) {\n if (param === 'IPAddress') {\n return 'ip_address';\n }\n else {\n return param.split(/(?=[A-Z])/).join('_').toLowerCase();\n }\n}\nfunction loadWhitelist(source) {\n var doc = source;\n if (doc.services === undefined) {\n throw new Error('Document formatting is incorrect. Expecting \"services\" param.');\n }\n return doc.services;\n}\nmodule.exports = CallCapturer;\n", "\"use strict\";\nvar CallCapturer = require('../../patchers/call_capturer.js');\nvar capturer = new CallCapturer();\n/**\n * Represents a AWS client call. Automatically captures data from the supplied response object,\n * Data captured depends on the whitelisting file supplied.\n * The base whitelisting file can be found at /lib/resources/aws_whitelist.json.\n * @constructor\n * @param {any} res - The response object from the AWS call. Typed as any to avoid AWS SDK dependency. Otherwise would be AWS.Response.\n * @param {string} serviceName - The service name of the AWS client.\n * @see https://github.com/aws/aws-sdk-js/blob/master/lib/response.js\n */\nfunction Aws(res, serviceName) {\n this.init(res, serviceName);\n}\nAws.prototype.init = function init(res, serviceName) {\n //TODO: account ID\n this.operation = formatOperation(res.request.operation) || '';\n if (res && res.request && res.request.httpRequest && res.request.httpRequest.region) {\n this.region = res.request.httpRequest.region;\n }\n if (res && res.requestId) {\n this.request_id = res.requestId;\n }\n this.retries = res.retryCount || 0;\n if (res.extendedRequestId && serviceName && serviceName.toLowerCase() === 's3') {\n this.id_2 = res.extendedRequestId;\n }\n if (serviceName) {\n this.addData(capturer.capture(serviceName.toLowerCase(), res));\n }\n};\nAws.prototype.addData = function addData(data) {\n for (var attribute in data) {\n this[attribute] = data[attribute];\n }\n};\n/**\n * Overrides the default whitelisting file to specify what params to capture on each AWS Service call.\n * @param {string|Object} source - The path to the custom whitelist file, or a whitelist source JSON object.\n * @exports setAWSWhitelist\n */\nvar setAWSWhitelist = function setAWSWhitelist(source) {\n if (!source || source instanceof String || !(typeof source === 'string' || (source instanceof Object))) {\n throw new Error('Please specify a path to the local whitelist file, or supply a whitelist source object.');\n }\n capturer = new CallCapturer(source);\n};\n/**\n * Appends to the default whitelisting file to specify what params to capture on each AWS Service call.\n * @param {string|Object} source - The path to the custom whitelist file, or a whitelist source JSON object.\n * @exports appendAWSWhitelist\n */\nvar appendAWSWhitelist = function appendAWSWhitelist(source) {\n if (!source || source instanceof String || !(typeof source === 'string' || (source instanceof Object))) {\n throw new Error('Please specify a path to the local whitelist file, or supply a whitelist source object.');\n }\n capturer.append(source);\n};\nfunction formatOperation(operation) {\n if (!operation) {\n return;\n }\n return operation.charAt(0).toUpperCase() + operation.slice(1);\n}\nmodule.exports = Aws;\nmodule.exports.appendAWSWhitelist = appendAWSWhitelist;\nmodule.exports.setAWSWhitelist = setAWSWhitelist;\n", "\"use strict\";\n/**\n * Capture module.\n * @module capture\n */\nvar contextUtils = require('./context_utils');\nvar logger = require('./logger');\n/**\n * Wrap to automatically capture information for the segment.\n * @param {string} name - The name of the new subsegment.\n * @param {function} fcn - The function context to wrap. Can take a single 'subsegment' argument.\n * @param {Segment|Subsegment} [parent] - The parent for the new subsegment, for manual mode.\n * @alias module:capture.captureFunc\n * @return {*} - Returns the result if any by executing the provided function.\n */\nvar captureFunc = function captureFunc(name, fcn, parent) {\n validate(name, fcn);\n var current, executeFcn;\n var parentSeg = contextUtils.resolveSegment(parent);\n if (!parentSeg) {\n logger.getLogger().warn('Failed to capture function.');\n return fcn();\n }\n current = parentSeg.addNewSubsegment(name);\n executeFcn = captureFcn(fcn, current);\n try {\n const response = executeFcn(current);\n current.close();\n return response;\n }\n catch (e) {\n current.close(e);\n throw (e);\n }\n};\n/**\n * Wrap to automatically capture information for the sub/segment. You must close the segment\n * manually from within the function.\n * @param {string} name - The name of the new subsegment.\n * @param {function} fcn - The function context to wrap. Must take a single 'subsegment' argument and call 'subsegment.close([optional error])' when the async function completes.\n * @param {Segment|Subsegment} [parent] - The parent for the new subsegment, for manual mode.\n * @alias module:capture.captureAsyncFunc\n * @return {*} - Returns a promise by executing the provided async function.\n */\nvar captureAsyncFunc = function captureAsyncFunc(name, fcn, parent) {\n validate(name, fcn);\n var current, executeFcn;\n var parentSeg = contextUtils.resolveSegment(parent);\n if (!parentSeg) {\n logger.getLogger().warn('Failed to capture async function.');\n return fcn();\n }\n current = parentSeg.addNewSubsegment(name);\n executeFcn = captureFcn(fcn, current);\n try {\n return executeFcn(current);\n }\n catch (e) {\n current.close(e);\n throw (e);\n }\n};\n/**\n * Wrap to automatically capture information for the sub/segment. This wraps the callback and returns a function.\n * when executed, all arguments are passed through accordingly. An additional argument is appended to gain access to the newly created subsegment.\n * For this reason, always call the captured callback with the full list of arguments.\n * @param {string} name - The name of the new subsegment.\n * @param {function} fcn - The function context to wrap. Can take a single 'subsegment' argument.\n * @param {Segment|Subsegment} [parent] - The parent for the new subsegment, for manual mode.\n * @alias module:capture.captureCallbackFunc\n */\nvar captureCallbackFunc = function captureCallbackFunc(name, fcn, parent) {\n validate(name, fcn);\n var base = contextUtils.resolveSegment(parent);\n if (!base) {\n logger.getLogger().warn('Failed to capture callback function.');\n return fcn;\n }\n base.incrementCounter();\n return function () {\n var parentSeg = contextUtils.resolveSegment(parent);\n var args = Array.prototype.slice.call(arguments);\n captureFunc(name, fcn.bind.apply(fcn, [null].concat(args)), parentSeg);\n base.decrementCounter();\n }.bind(this);\n};\nfunction captureFcn(fcn, current) {\n var executeFcn;\n if (contextUtils.isAutomaticMode()) {\n var session = contextUtils.getNamespace();\n var contextFcn = function () {\n var value;\n session.run(function () {\n contextUtils.setSegment(current);\n value = fcn(current);\n });\n return value;\n };\n executeFcn = contextFcn;\n }\n else {\n executeFcn = fcn;\n }\n return executeFcn;\n}\nfunction validate(name, fcn) {\n var error;\n if (!name || typeof name !== 'string') {\n error = 'Param \"name\" must be a non-empty string.';\n logger.getLogger().error(error);\n throw new Error(error);\n }\n else if (typeof fcn !== 'function') {\n error = 'Param \"fcn\" must be a function.';\n logger.getLogger().error(error);\n throw new Error(error);\n }\n}\nmodule.exports.captureFunc = captureFunc;\nmodule.exports.captureAsyncFunc = captureAsyncFunc;\nmodule.exports.captureCallbackFunc = captureCallbackFunc;\n", "// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nconst SEMVER_SPEC_VERSION = '2.0.0'\n\nconst MAX_LENGTH = 256\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n/* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nconst MAX_SAFE_COMPONENT_LENGTH = 16\n\n// Max safe length for a build identifier. The max length minus 6 characters for\n// the shortest version with a build 0.0.0+BUILD.\nconst MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6\n\nconst RELEASE_TYPES = [\n 'major',\n 'premajor',\n 'minor',\n 'preminor',\n 'patch',\n 'prepatch',\n 'prerelease',\n]\n\nmodule.exports = {\n MAX_LENGTH,\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_SAFE_INTEGER,\n RELEASE_TYPES,\n SEMVER_SPEC_VERSION,\n FLAG_INCLUDE_PRERELEASE: 0b001,\n FLAG_LOOSE: 0b010,\n}\n", "const debug = (\n typeof process === 'object' &&\n process.env &&\n process.env.NODE_DEBUG &&\n /\\bsemver\\b/i.test(process.env.NODE_DEBUG)\n) ? (...args) => console.error('SEMVER', ...args)\n : () => {}\n\nmodule.exports = debug\n", "const {\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_LENGTH,\n} = require('./constants')\nconst debug = require('./debug')\nexports = module.exports = {}\n\n// The actual regexps go on exports.re\nconst re = exports.re = []\nconst safeRe = exports.safeRe = []\nconst src = exports.src = []\nconst t = exports.t = {}\nlet R = 0\n\nconst LETTERDASHNUMBER = '[a-zA-Z0-9-]'\n\n// Replace some greedy regex tokens to prevent regex dos issues. These regex are\n// used internally via the safeRe object since all inputs in this library get\n// normalized first to trim and collapse all extra whitespace. The original\n// regexes are exported for userland consumption and lower level usage. A\n// future breaking change could export the safer regex only with a note that\n// all input should have extra whitespace removed.\nconst safeRegexReplacements = [\n ['\\\\s', 1],\n ['\\\\d', MAX_LENGTH],\n [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH],\n]\n\nconst makeSafeRegex = (value) => {\n for (const [token, max] of safeRegexReplacements) {\n value = value\n .split(`${token}*`).join(`${token}{0,${max}}`)\n .split(`${token}+`).join(`${token}{1,${max}}`)\n }\n return value\n}\n\nconst createToken = (name, value, isGlobal) => {\n const safe = makeSafeRegex(value)\n const index = R++\n debug(name, index, value)\n t[name] = index\n src[index] = value\n re[index] = new RegExp(value, isGlobal ? 'g' : undefined)\n safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined)\n}\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\ncreateToken('NUMERICIDENTIFIER', '0|[1-9]\\\\d*')\ncreateToken('NUMERICIDENTIFIERLOOSE', '\\\\d+')\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\ncreateToken('NONNUMERICIDENTIFIER', `\\\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`)\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\ncreateToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n\ncreateToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER]\n}|${src[t.NONNUMERICIDENTIFIER]})`)\n\ncreateToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE]\n}|${src[t.NONNUMERICIDENTIFIER]})`)\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\ncreateToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIER]})*))`)\n\ncreateToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`)\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\ncreateToken('BUILDIDENTIFIER', `${LETTERDASHNUMBER}+`)\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\ncreateToken('BUILD', `(?:\\\\+(${src[t.BUILDIDENTIFIER]\n}(?:\\\\.${src[t.BUILDIDENTIFIER]})*))`)\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups. The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\ncreateToken('FULLPLAIN', `v?${src[t.MAINVERSION]\n}${src[t.PRERELEASE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('FULL', `^${src[t.FULLPLAIN]}$`)\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\ncreateToken('LOOSEPLAIN', `[v=\\\\s]*${src[t.MAINVERSIONLOOSE]\n}${src[t.PRERELEASELOOSE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`)\n\ncreateToken('GTLT', '((?:<|>)?=?)')\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifer, meaning \"any version\"\n// Only the first item is strictly required.\ncreateToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`)\ncreateToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\\\*`)\n\ncreateToken('XRANGEPLAIN', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:${src[t.PRERELEASE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGEPLAINLOOSE', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:${src[t.PRERELEASELOOSE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAIN]}$`)\ncreateToken('XRANGELOOSE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\ncreateToken('COERCE', `${'(^|[^\\\\d])' +\n '(\\\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n `(?:$|[^\\\\d])`)\ncreateToken('COERCERTL', src[t.COERCE], true)\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\ncreateToken('LONETILDE', '(?:~>?)')\n\ncreateToken('TILDETRIM', `(\\\\s*)${src[t.LONETILDE]}\\\\s+`, true)\nexports.tildeTrimReplace = '$1~'\n\ncreateToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\ncreateToken('LONECARET', '(?:\\\\^)')\n\ncreateToken('CARETTRIM', `(\\\\s*)${src[t.LONECARET]}\\\\s+`, true)\nexports.caretTrimReplace = '$1^'\n\ncreateToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\ncreateToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\\\s*(${src[t.LOOSEPLAIN]})$|^$`)\ncreateToken('COMPARATOR', `^${src[t.GTLT]}\\\\s*(${src[t.FULLPLAIN]})$|^$`)\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\ncreateToken('COMPARATORTRIM', `(\\\\s*)${src[t.GTLT]\n}\\\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true)\nexports.comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\ncreateToken('HYPHENRANGE', `^\\\\s*(${src[t.XRANGEPLAIN]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAIN]})` +\n `\\\\s*$`)\n\ncreateToken('HYPHENRANGELOOSE', `^\\\\s*(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s*$`)\n\n// Star ranges basically just allow anything at all.\ncreateToken('STAR', '(<|>)?=?\\\\s*\\\\*')\n// >=0.0.0 is like a star\ncreateToken('GTE0', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0\\\\s*$')\ncreateToken('GTE0PRE', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0-0\\\\s*$')\n", "// parse out just the options we care about\nconst looseOption = Object.freeze({ loose: true })\nconst emptyOpts = Object.freeze({ })\nconst parseOptions = options => {\n if (!options) {\n return emptyOpts\n }\n\n if (typeof options !== 'object') {\n return looseOption\n }\n\n return options\n}\nmodule.exports = parseOptions\n", "const numeric = /^[0-9]+$/\nconst compareIdentifiers = (a, b) => {\n const anum = numeric.test(a)\n const bnum = numeric.test(b)\n\n if (anum && bnum) {\n a = +a\n b = +b\n }\n\n return a === b ? 0\n : (anum && !bnum) ? -1\n : (bnum && !anum) ? 1\n : a < b ? -1\n : 1\n}\n\nconst rcompareIdentifiers = (a, b) => compareIdentifiers(b, a)\n\nmodule.exports = {\n compareIdentifiers,\n rcompareIdentifiers,\n}\n", "const debug = require('../internal/debug')\nconst { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst parseOptions = require('../internal/parse-options')\nconst { compareIdentifiers } = require('../internal/identifiers')\nclass SemVer {\n constructor (version, options) {\n options = parseOptions(options)\n\n if (version instanceof SemVer) {\n if (version.loose === !!options.loose &&\n version.includePrerelease === !!options.includePrerelease) {\n return version\n } else {\n version = version.version\n }\n } else if (typeof version !== 'string') {\n throw new TypeError(`Invalid version. Must be a string. Got type \"${typeof version}\".`)\n }\n\n if (version.length > MAX_LENGTH) {\n throw new TypeError(\n `version is longer than ${MAX_LENGTH} characters`\n )\n }\n\n debug('SemVer', version, options)\n this.options = options\n this.loose = !!options.loose\n // this isn't actually relevant for versions, but keep it so that we\n // don't run into trouble passing this.options around.\n this.includePrerelease = !!options.includePrerelease\n\n const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])\n\n if (!m) {\n throw new TypeError(`Invalid Version: ${version}`)\n }\n\n this.raw = version\n\n // these are actually numbers\n this.major = +m[1]\n this.minor = +m[2]\n this.patch = +m[3]\n\n if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n throw new TypeError('Invalid major version')\n }\n\n if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n throw new TypeError('Invalid minor version')\n }\n\n if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n throw new TypeError('Invalid patch version')\n }\n\n // numberify any prerelease numeric ids\n if (!m[4]) {\n this.prerelease = []\n } else {\n this.prerelease = m[4].split('.').map((id) => {\n if (/^[0-9]+$/.test(id)) {\n const num = +id\n if (num >= 0 && num < MAX_SAFE_INTEGER) {\n return num\n }\n }\n return id\n })\n }\n\n this.build = m[5] ? m[5].split('.') : []\n this.format()\n }\n\n format () {\n this.version = `${this.major}.${this.minor}.${this.patch}`\n if (this.prerelease.length) {\n this.version += `-${this.prerelease.join('.')}`\n }\n return this.version\n }\n\n toString () {\n return this.version\n }\n\n compare (other) {\n debug('SemVer.compare', this.version, this.options, other)\n if (!(other instanceof SemVer)) {\n if (typeof other === 'string' && other === this.version) {\n return 0\n }\n other = new SemVer(other, this.options)\n }\n\n if (other.version === this.version) {\n return 0\n }\n\n return this.compareMain(other) || this.comparePre(other)\n }\n\n compareMain (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n return (\n compareIdentifiers(this.major, other.major) ||\n compareIdentifiers(this.minor, other.minor) ||\n compareIdentifiers(this.patch, other.patch)\n )\n }\n\n comparePre (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n // NOT having a prerelease is > having one\n if (this.prerelease.length && !other.prerelease.length) {\n return -1\n } else if (!this.prerelease.length && other.prerelease.length) {\n return 1\n } else if (!this.prerelease.length && !other.prerelease.length) {\n return 0\n }\n\n let i = 0\n do {\n const a = this.prerelease[i]\n const b = other.prerelease[i]\n debug('prerelease compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n compareBuild (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n let i = 0\n do {\n const a = this.build[i]\n const b = other.build[i]\n debug('prerelease compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n // preminor will bump the version up to the next minor release, and immediately\n // down to pre-release. premajor and prepatch work the same way.\n inc (release, identifier, identifierBase) {\n switch (release) {\n case 'premajor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor = 0\n this.major++\n this.inc('pre', identifier, identifierBase)\n break\n case 'preminor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor++\n this.inc('pre', identifier, identifierBase)\n break\n case 'prepatch':\n // If this is already a prerelease, it will bump to the next version\n // drop any prereleases that might already exist, since they are not\n // relevant at this point.\n this.prerelease.length = 0\n this.inc('patch', identifier, identifierBase)\n this.inc('pre', identifier, identifierBase)\n break\n // If the input is a non-prerelease version, this acts the same as\n // prepatch.\n case 'prerelease':\n if (this.prerelease.length === 0) {\n this.inc('patch', identifier, identifierBase)\n }\n this.inc('pre', identifier, identifierBase)\n break\n\n case 'major':\n // If this is a pre-major version, bump up to the same major version.\n // Otherwise increment major.\n // 1.0.0-5 bumps to 1.0.0\n // 1.1.0 bumps to 2.0.0\n if (\n this.minor !== 0 ||\n this.patch !== 0 ||\n this.prerelease.length === 0\n ) {\n this.major++\n }\n this.minor = 0\n this.patch = 0\n this.prerelease = []\n break\n case 'minor':\n // If this is a pre-minor version, bump up to the same minor version.\n // Otherwise increment minor.\n // 1.2.0-5 bumps to 1.2.0\n // 1.2.1 bumps to 1.3.0\n if (this.patch !== 0 || this.prerelease.length === 0) {\n this.minor++\n }\n this.patch = 0\n this.prerelease = []\n break\n case 'patch':\n // If this is not a pre-release version, it will increment the patch.\n // If it is a pre-release it will bump up to the same patch version.\n // 1.2.0-5 patches to 1.2.0\n // 1.2.0 patches to 1.2.1\n if (this.prerelease.length === 0) {\n this.patch++\n }\n this.prerelease = []\n break\n // This probably shouldn't be used publicly.\n // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.\n case 'pre': {\n const base = Number(identifierBase) ? 1 : 0\n\n if (!identifier && identifierBase === false) {\n throw new Error('invalid increment argument: identifier is empty')\n }\n\n if (this.prerelease.length === 0) {\n this.prerelease = [base]\n } else {\n let i = this.prerelease.length\n while (--i >= 0) {\n if (typeof this.prerelease[i] === 'number') {\n this.prerelease[i]++\n i = -2\n }\n }\n if (i === -1) {\n // didn't increment anything\n if (identifier === this.prerelease.join('.') && identifierBase === false) {\n throw new Error('invalid increment argument: identifier already exists')\n }\n this.prerelease.push(base)\n }\n }\n if (identifier) {\n // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n let prerelease = [identifier, base]\n if (identifierBase === false) {\n prerelease = [identifier]\n }\n if (compareIdentifiers(this.prerelease[0], identifier) === 0) {\n if (isNaN(this.prerelease[1])) {\n this.prerelease = prerelease\n }\n } else {\n this.prerelease = prerelease\n }\n }\n break\n }\n default:\n throw new Error(`invalid increment argument: ${release}`)\n }\n this.raw = this.format()\n if (this.build.length) {\n this.raw += `+${this.build.join('.')}`\n }\n return this\n }\n}\n\nmodule.exports = SemVer\n", "const SemVer = require('../classes/semver')\nconst parse = (version, options, throwErrors = false) => {\n if (version instanceof SemVer) {\n return version\n }\n try {\n return new SemVer(version, options)\n } catch (er) {\n if (!throwErrors) {\n return null\n }\n throw er\n }\n}\n\nmodule.exports = parse\n", "const parse = require('./parse')\nconst valid = (version, options) => {\n const v = parse(version, options)\n return v ? v.version : null\n}\nmodule.exports = valid\n", "const parse = require('./parse')\nconst clean = (version, options) => {\n const s = parse(version.trim().replace(/^[=v]+/, ''), options)\n return s ? s.version : null\n}\nmodule.exports = clean\n", "const SemVer = require('../classes/semver')\n\nconst inc = (version, release, options, identifier, identifierBase) => {\n if (typeof (options) === 'string') {\n identifierBase = identifier\n identifier = options\n options = undefined\n }\n\n try {\n return new SemVer(\n version instanceof SemVer ? version.version : version,\n options\n ).inc(release, identifier, identifierBase).version\n } catch (er) {\n return null\n }\n}\nmodule.exports = inc\n", "const parse = require('./parse.js')\n\nconst diff = (version1, version2) => {\n const v1 = parse(version1, null, true)\n const v2 = parse(version2, null, true)\n const comparison = v1.compare(v2)\n\n if (comparison === 0) {\n return null\n }\n\n const v1Higher = comparison > 0\n const highVersion = v1Higher ? v1 : v2\n const lowVersion = v1Higher ? v2 : v1\n const highHasPre = !!highVersion.prerelease.length\n const lowHasPre = !!lowVersion.prerelease.length\n\n if (lowHasPre && !highHasPre) {\n // Going from prerelease -> no prerelease requires some special casing\n\n // If the low version has only a major, then it will always be a major\n // Some examples:\n // 1.0.0-1 -> 1.0.0\n // 1.0.0-1 -> 1.1.1\n // 1.0.0-1 -> 2.0.0\n if (!lowVersion.patch && !lowVersion.minor) {\n return 'major'\n }\n\n // Otherwise it can be determined by checking the high version\n\n if (highVersion.patch) {\n // anything higher than a patch bump would result in the wrong version\n return 'patch'\n }\n\n if (highVersion.minor) {\n // anything higher than a minor bump would result in the wrong version\n return 'minor'\n }\n\n // bumping major/minor/patch all have same result\n return 'major'\n }\n\n // add the `pre` prefix if we are going to a prerelease version\n const prefix = highHasPre ? 'pre' : ''\n\n if (v1.major !== v2.major) {\n return prefix + 'major'\n }\n\n if (v1.minor !== v2.minor) {\n return prefix + 'minor'\n }\n\n if (v1.patch !== v2.patch) {\n return prefix + 'patch'\n }\n\n // high and low are preleases\n return 'prerelease'\n}\n\nmodule.exports = diff\n", "const SemVer = require('../classes/semver')\nconst major = (a, loose) => new SemVer(a, loose).major\nmodule.exports = major\n", "const SemVer = require('../classes/semver')\nconst minor = (a, loose) => new SemVer(a, loose).minor\nmodule.exports = minor\n", "const SemVer = require('../classes/semver')\nconst patch = (a, loose) => new SemVer(a, loose).patch\nmodule.exports = patch\n", "const parse = require('./parse')\nconst prerelease = (version, options) => {\n const parsed = parse(version, options)\n return (parsed && parsed.prerelease.length) ? parsed.prerelease : null\n}\nmodule.exports = prerelease\n", "const SemVer = require('../classes/semver')\nconst compare = (a, b, loose) =>\n new SemVer(a, loose).compare(new SemVer(b, loose))\n\nmodule.exports = compare\n", "const compare = require('./compare')\nconst rcompare = (a, b, loose) => compare(b, a, loose)\nmodule.exports = rcompare\n", "const compare = require('./compare')\nconst compareLoose = (a, b) => compare(a, b, true)\nmodule.exports = compareLoose\n", "const SemVer = require('../classes/semver')\nconst compareBuild = (a, b, loose) => {\n const versionA = new SemVer(a, loose)\n const versionB = new SemVer(b, loose)\n return versionA.compare(versionB) || versionA.compareBuild(versionB)\n}\nmodule.exports = compareBuild\n", "const compareBuild = require('./compare-build')\nconst sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose))\nmodule.exports = sort\n", "const compareBuild = require('./compare-build')\nconst rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose))\nmodule.exports = rsort\n", "const compare = require('./compare')\nconst gt = (a, b, loose) => compare(a, b, loose) > 0\nmodule.exports = gt\n", "const compare = require('./compare')\nconst lt = (a, b, loose) => compare(a, b, loose) < 0\nmodule.exports = lt\n", "const compare = require('./compare')\nconst eq = (a, b, loose) => compare(a, b, loose) === 0\nmodule.exports = eq\n", "const compare = require('./compare')\nconst neq = (a, b, loose) => compare(a, b, loose) !== 0\nmodule.exports = neq\n", "const compare = require('./compare')\nconst gte = (a, b, loose) => compare(a, b, loose) >= 0\nmodule.exports = gte\n", "const compare = require('./compare')\nconst lte = (a, b, loose) => compare(a, b, loose) <= 0\nmodule.exports = lte\n", "const eq = require('./eq')\nconst neq = require('./neq')\nconst gt = require('./gt')\nconst gte = require('./gte')\nconst lt = require('./lt')\nconst lte = require('./lte')\n\nconst cmp = (a, op, b, loose) => {\n switch (op) {\n case '===':\n if (typeof a === 'object') {\n a = a.version\n }\n if (typeof b === 'object') {\n b = b.version\n }\n return a === b\n\n case '!==':\n if (typeof a === 'object') {\n a = a.version\n }\n if (typeof b === 'object') {\n b = b.version\n }\n return a !== b\n\n case '':\n case '=':\n case '==':\n return eq(a, b, loose)\n\n case '!=':\n return neq(a, b, loose)\n\n case '>':\n return gt(a, b, loose)\n\n case '>=':\n return gte(a, b, loose)\n\n case '<':\n return lt(a, b, loose)\n\n case '<=':\n return lte(a, b, loose)\n\n default:\n throw new TypeError(`Invalid operator: ${op}`)\n }\n}\nmodule.exports = cmp\n", "const SemVer = require('../classes/semver')\nconst parse = require('./parse')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst coerce = (version, options) => {\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version === 'number') {\n version = String(version)\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n options = options || {}\n\n let match = null\n if (!options.rtl) {\n match = version.match(re[t.COERCE])\n } else {\n // Find the right-most coercible string that does not share\n // a terminus with a more left-ward coercible string.\n // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'\n //\n // Walk through the string checking with a /g regexp\n // Manually set the index so as to pick up overlapping matches.\n // Stop when we get a match that ends at the string end, since no\n // coercible string can be more right-ward without the same terminus.\n let next\n while ((next = re[t.COERCERTL].exec(version)) &&\n (!match || match.index + match[0].length !== version.length)\n ) {\n if (!match ||\n next.index + next[0].length !== match.index + match[0].length) {\n match = next\n }\n re[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length\n }\n // leave it in a clean state\n re[t.COERCERTL].lastIndex = -1\n }\n\n if (match === null) {\n return null\n }\n\n return parse(`${match[2]}.${match[3] || '0'}.${match[4] || '0'}`, options)\n}\nmodule.exports = coerce\n", "'use strict'\nmodule.exports = function (Yallist) {\n Yallist.prototype[Symbol.iterator] = function* () {\n for (let walker = this.head; walker; walker = walker.next) {\n yield walker.value\n }\n }\n}\n", "'use strict'\nmodule.exports = Yallist\n\nYallist.Node = Node\nYallist.create = Yallist\n\nfunction Yallist (list) {\n var self = this\n if (!(self instanceof Yallist)) {\n self = new Yallist()\n }\n\n self.tail = null\n self.head = null\n self.length = 0\n\n if (list && typeof list.forEach === 'function') {\n list.forEach(function (item) {\n self.push(item)\n })\n } else if (arguments.length > 0) {\n for (var i = 0, l = arguments.length; i < l; i++) {\n self.push(arguments[i])\n }\n }\n\n return self\n}\n\nYallist.prototype.removeNode = function (node) {\n if (node.list !== this) {\n throw new Error('removing node which does not belong to this list')\n }\n\n var next = node.next\n var prev = node.prev\n\n if (next) {\n next.prev = prev\n }\n\n if (prev) {\n prev.next = next\n }\n\n if (node === this.head) {\n this.head = next\n }\n if (node === this.tail) {\n this.tail = prev\n }\n\n node.list.length--\n node.next = null\n node.prev = null\n node.list = null\n\n return next\n}\n\nYallist.prototype.unshiftNode = function (node) {\n if (node === this.head) {\n return\n }\n\n if (node.list) {\n node.list.removeNode(node)\n }\n\n var head = this.head\n node.list = this\n node.next = head\n if (head) {\n head.prev = node\n }\n\n this.head = node\n if (!this.tail) {\n this.tail = node\n }\n this.length++\n}\n\nYallist.prototype.pushNode = function (node) {\n if (node === this.tail) {\n return\n }\n\n if (node.list) {\n node.list.removeNode(node)\n }\n\n var tail = this.tail\n node.list = this\n node.prev = tail\n if (tail) {\n tail.next = node\n }\n\n this.tail = node\n if (!this.head) {\n this.head = node\n }\n this.length++\n}\n\nYallist.prototype.push = function () {\n for (var i = 0, l = arguments.length; i < l; i++) {\n push(this, arguments[i])\n }\n return this.length\n}\n\nYallist.prototype.unshift = function () {\n for (var i = 0, l = arguments.length; i < l; i++) {\n unshift(this, arguments[i])\n }\n return this.length\n}\n\nYallist.prototype.pop = function () {\n if (!this.tail) {\n return undefined\n }\n\n var res = this.tail.value\n this.tail = this.tail.prev\n if (this.tail) {\n this.tail.next = null\n } else {\n this.head = null\n }\n this.length--\n return res\n}\n\nYallist.prototype.shift = function () {\n if (!this.head) {\n return undefined\n }\n\n var res = this.head.value\n this.head = this.head.next\n if (this.head) {\n this.head.prev = null\n } else {\n this.tail = null\n }\n this.length--\n return res\n}\n\nYallist.prototype.forEach = function (fn, thisp) {\n thisp = thisp || this\n for (var walker = this.head, i = 0; walker !== null; i++) {\n fn.call(thisp, walker.value, i, this)\n walker = walker.next\n }\n}\n\nYallist.prototype.forEachReverse = function (fn, thisp) {\n thisp = thisp || this\n for (var walker = this.tail, i = this.length - 1; walker !== null; i--) {\n fn.call(thisp, walker.value, i, this)\n walker = walker.prev\n }\n}\n\nYallist.prototype.get = function (n) {\n for (var i = 0, walker = this.head; walker !== null && i < n; i++) {\n // abort out of the list early if we hit a cycle\n walker = walker.next\n }\n if (i === n && walker !== null) {\n return walker.value\n }\n}\n\nYallist.prototype.getReverse = function (n) {\n for (var i = 0, walker = this.tail; walker !== null && i < n; i++) {\n // abort out of the list early if we hit a cycle\n walker = walker.prev\n }\n if (i === n && walker !== null) {\n return walker.value\n }\n}\n\nYallist.prototype.map = function (fn, thisp) {\n thisp = thisp || this\n var res = new Yallist()\n for (var walker = this.head; walker !== null;) {\n res.push(fn.call(thisp, walker.value, this))\n walker = walker.next\n }\n return res\n}\n\nYallist.prototype.mapReverse = function (fn, thisp) {\n thisp = thisp || this\n var res = new Yallist()\n for (var walker = this.tail; walker !== null;) {\n res.push(fn.call(thisp, walker.value, this))\n walker = walker.prev\n }\n return res\n}\n\nYallist.prototype.reduce = function (fn, initial) {\n var acc\n var walker = this.head\n if (arguments.length > 1) {\n acc = initial\n } else if (this.head) {\n walker = this.head.next\n acc = this.head.value\n } else {\n throw new TypeError('Reduce of empty list with no initial value')\n }\n\n for (var i = 0; walker !== null; i++) {\n acc = fn(acc, walker.value, i)\n walker = walker.next\n }\n\n return acc\n}\n\nYallist.prototype.reduceReverse = function (fn, initial) {\n var acc\n var walker = this.tail\n if (arguments.length > 1) {\n acc = initial\n } else if (this.tail) {\n walker = this.tail.prev\n acc = this.tail.value\n } else {\n throw new TypeError('Reduce of empty list with no initial value')\n }\n\n for (var i = this.length - 1; walker !== null; i--) {\n acc = fn(acc, walker.value, i)\n walker = walker.prev\n }\n\n return acc\n}\n\nYallist.prototype.toArray = function () {\n var arr = new Array(this.length)\n for (var i = 0, walker = this.head; walker !== null; i++) {\n arr[i] = walker.value\n walker = walker.next\n }\n return arr\n}\n\nYallist.prototype.toArrayReverse = function () {\n var arr = new Array(this.length)\n for (var i = 0, walker = this.tail; walker !== null; i++) {\n arr[i] = walker.value\n walker = walker.prev\n }\n return arr\n}\n\nYallist.prototype.slice = function (from, to) {\n to = to || this.length\n if (to < 0) {\n to += this.length\n }\n from = from || 0\n if (from < 0) {\n from += this.length\n }\n var ret = new Yallist()\n if (to < from || to < 0) {\n return ret\n }\n if (from < 0) {\n from = 0\n }\n if (to > this.length) {\n to = this.length\n }\n for (var i = 0, walker = this.head; walker !== null && i < from; i++) {\n walker = walker.next\n }\n for (; walker !== null && i < to; i++, walker = walker.next) {\n ret.push(walker.value)\n }\n return ret\n}\n\nYallist.prototype.sliceReverse = function (from, to) {\n to = to || this.length\n if (to < 0) {\n to += this.length\n }\n from = from || 0\n if (from < 0) {\n from += this.length\n }\n var ret = new Yallist()\n if (to < from || to < 0) {\n return ret\n }\n if (from < 0) {\n from = 0\n }\n if (to > this.length) {\n to = this.length\n }\n for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) {\n walker = walker.prev\n }\n for (; walker !== null && i > from; i--, walker = walker.prev) {\n ret.push(walker.value)\n }\n return ret\n}\n\nYallist.prototype.splice = function (start, deleteCount, ...nodes) {\n if (start > this.length) {\n start = this.length - 1\n }\n if (start < 0) {\n start = this.length + start;\n }\n\n for (var i = 0, walker = this.head; walker !== null && i < start; i++) {\n walker = walker.next\n }\n\n var ret = []\n for (var i = 0; walker && i < deleteCount; i++) {\n ret.push(walker.value)\n walker = this.removeNode(walker)\n }\n if (walker === null) {\n walker = this.tail\n }\n\n if (walker !== this.head && walker !== this.tail) {\n walker = walker.prev\n }\n\n for (var i = 0; i < nodes.length; i++) {\n walker = insert(this, walker, nodes[i])\n }\n return ret;\n}\n\nYallist.prototype.reverse = function () {\n var head = this.head\n var tail = this.tail\n for (var walker = head; walker !== null; walker = walker.prev) {\n var p = walker.prev\n walker.prev = walker.next\n walker.next = p\n }\n this.head = tail\n this.tail = head\n return this\n}\n\nfunction insert (self, node, value) {\n var inserted = node === self.head ?\n new Node(value, null, node, self) :\n new Node(value, node, node.next, self)\n\n if (inserted.next === null) {\n self.tail = inserted\n }\n if (inserted.prev === null) {\n self.head = inserted\n }\n\n self.length++\n\n return inserted\n}\n\nfunction push (self, item) {\n self.tail = new Node(item, self.tail, null, self)\n if (!self.head) {\n self.head = self.tail\n }\n self.length++\n}\n\nfunction unshift (self, item) {\n self.head = new Node(item, null, self.head, self)\n if (!self.tail) {\n self.tail = self.head\n }\n self.length++\n}\n\nfunction Node (value, prev, next, list) {\n if (!(this instanceof Node)) {\n return new Node(value, prev, next, list)\n }\n\n this.list = list\n this.value = value\n\n if (prev) {\n prev.next = this\n this.prev = prev\n } else {\n this.prev = null\n }\n\n if (next) {\n next.prev = this\n this.next = next\n } else {\n this.next = null\n }\n}\n\ntry {\n // add if support for Symbol.iterator is present\n require('./iterator.js')(Yallist)\n} catch (er) {}\n", "'use strict'\n\n// A linked list to keep track of recently-used-ness\nconst Yallist = require('yallist')\n\nconst MAX = Symbol('max')\nconst LENGTH = Symbol('length')\nconst LENGTH_CALCULATOR = Symbol('lengthCalculator')\nconst ALLOW_STALE = Symbol('allowStale')\nconst MAX_AGE = Symbol('maxAge')\nconst DISPOSE = Symbol('dispose')\nconst NO_DISPOSE_ON_SET = Symbol('noDisposeOnSet')\nconst LRU_LIST = Symbol('lruList')\nconst CACHE = Symbol('cache')\nconst UPDATE_AGE_ON_GET = Symbol('updateAgeOnGet')\n\nconst naiveLength = () => 1\n\n// lruList is a yallist where the head is the youngest\n// item, and the tail is the oldest. the list contains the Hit\n// objects as the entries.\n// Each Hit object has a reference to its Yallist.Node. This\n// never changes.\n//\n// cache is a Map (or PseudoMap) that matches the keys to\n// the Yallist.Node object.\nclass LRUCache {\n constructor (options) {\n if (typeof options === 'number')\n options = { max: options }\n\n if (!options)\n options = {}\n\n if (options.max && (typeof options.max !== 'number' || options.max < 0))\n throw new TypeError('max must be a non-negative number')\n // Kind of weird to have a default max of Infinity, but oh well.\n const max = this[MAX] = options.max || Infinity\n\n const lc = options.length || naiveLength\n this[LENGTH_CALCULATOR] = (typeof lc !== 'function') ? naiveLength : lc\n this[ALLOW_STALE] = options.stale || false\n if (options.maxAge && typeof options.maxAge !== 'number')\n throw new TypeError('maxAge must be a number')\n this[MAX_AGE] = options.maxAge || 0\n this[DISPOSE] = options.dispose\n this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false\n this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false\n this.reset()\n }\n\n // resize the cache when the max changes.\n set max (mL) {\n if (typeof mL !== 'number' || mL < 0)\n throw new TypeError('max must be a non-negative number')\n\n this[MAX] = mL || Infinity\n trim(this)\n }\n get max () {\n return this[MAX]\n }\n\n set allowStale (allowStale) {\n this[ALLOW_STALE] = !!allowStale\n }\n get allowStale () {\n return this[ALLOW_STALE]\n }\n\n set maxAge (mA) {\n if (typeof mA !== 'number')\n throw new TypeError('maxAge must be a non-negative number')\n\n this[MAX_AGE] = mA\n trim(this)\n }\n get maxAge () {\n return this[MAX_AGE]\n }\n\n // resize the cache when the lengthCalculator changes.\n set lengthCalculator (lC) {\n if (typeof lC !== 'function')\n lC = naiveLength\n\n if (lC !== this[LENGTH_CALCULATOR]) {\n this[LENGTH_CALCULATOR] = lC\n this[LENGTH] = 0\n this[LRU_LIST].forEach(hit => {\n hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key)\n this[LENGTH] += hit.length\n })\n }\n trim(this)\n }\n get lengthCalculator () { return this[LENGTH_CALCULATOR] }\n\n get length () { return this[LENGTH] }\n get itemCount () { return this[LRU_LIST].length }\n\n rforEach (fn, thisp) {\n thisp = thisp || this\n for (let walker = this[LRU_LIST].tail; walker !== null;) {\n const prev = walker.prev\n forEachStep(this, fn, walker, thisp)\n walker = prev\n }\n }\n\n forEach (fn, thisp) {\n thisp = thisp || this\n for (let walker = this[LRU_LIST].head; walker !== null;) {\n const next = walker.next\n forEachStep(this, fn, walker, thisp)\n walker = next\n }\n }\n\n keys () {\n return this[LRU_LIST].toArray().map(k => k.key)\n }\n\n values () {\n return this[LRU_LIST].toArray().map(k => k.value)\n }\n\n reset () {\n if (this[DISPOSE] &&\n this[LRU_LIST] &&\n this[LRU_LIST].length) {\n this[LRU_LIST].forEach(hit => this[DISPOSE](hit.key, hit.value))\n }\n\n this[CACHE] = new Map() // hash of items by key\n this[LRU_LIST] = new Yallist() // list of items in order of use recency\n this[LENGTH] = 0 // length of items in the list\n }\n\n dump () {\n return this[LRU_LIST].map(hit =>\n isStale(this, hit) ? false : {\n k: hit.key,\n v: hit.value,\n e: hit.now + (hit.maxAge || 0)\n }).toArray().filter(h => h)\n }\n\n dumpLru () {\n return this[LRU_LIST]\n }\n\n set (key, value, maxAge) {\n maxAge = maxAge || this[MAX_AGE]\n\n if (maxAge && typeof maxAge !== 'number')\n throw new TypeError('maxAge must be a number')\n\n const now = maxAge ? Date.now() : 0\n const len = this[LENGTH_CALCULATOR](value, key)\n\n if (this[CACHE].has(key)) {\n if (len > this[MAX]) {\n del(this, this[CACHE].get(key))\n return false\n }\n\n const node = this[CACHE].get(key)\n const item = node.value\n\n // dispose of the old one before overwriting\n // split out into 2 ifs for better coverage tracking\n if (this[DISPOSE]) {\n if (!this[NO_DISPOSE_ON_SET])\n this[DISPOSE](key, item.value)\n }\n\n item.now = now\n item.maxAge = maxAge\n item.value = value\n this[LENGTH] += len - item.length\n item.length = len\n this.get(key)\n trim(this)\n return true\n }\n\n const hit = new Entry(key, value, len, now, maxAge)\n\n // oversized objects fall out of cache automatically.\n if (hit.length > this[MAX]) {\n if (this[DISPOSE])\n this[DISPOSE](key, value)\n\n return false\n }\n\n this[LENGTH] += hit.length\n this[LRU_LIST].unshift(hit)\n this[CACHE].set(key, this[LRU_LIST].head)\n trim(this)\n return true\n }\n\n has (key) {\n if (!this[CACHE].has(key)) return false\n const hit = this[CACHE].get(key).value\n return !isStale(this, hit)\n }\n\n get (key) {\n return get(this, key, true)\n }\n\n peek (key) {\n return get(this, key, false)\n }\n\n pop () {\n const node = this[LRU_LIST].tail\n if (!node)\n return null\n\n del(this, node)\n return node.value\n }\n\n del (key) {\n del(this, this[CACHE].get(key))\n }\n\n load (arr) {\n // reset the cache\n this.reset()\n\n const now = Date.now()\n // A previous serialized cache has the most recent items first\n for (let l = arr.length - 1; l >= 0; l--) {\n const hit = arr[l]\n const expiresAt = hit.e || 0\n if (expiresAt === 0)\n // the item was created without expiration in a non aged cache\n this.set(hit.k, hit.v)\n else {\n const maxAge = expiresAt - now\n // dont add already expired items\n if (maxAge > 0) {\n this.set(hit.k, hit.v, maxAge)\n }\n }\n }\n }\n\n prune () {\n this[CACHE].forEach((value, key) => get(this, key, false))\n }\n}\n\nconst get = (self, key, doUse) => {\n const node = self[CACHE].get(key)\n if (node) {\n const hit = node.value\n if (isStale(self, hit)) {\n del(self, node)\n if (!self[ALLOW_STALE])\n return undefined\n } else {\n if (doUse) {\n if (self[UPDATE_AGE_ON_GET])\n node.value.now = Date.now()\n self[LRU_LIST].unshiftNode(node)\n }\n }\n return hit.value\n }\n}\n\nconst isStale = (self, hit) => {\n if (!hit || (!hit.maxAge && !self[MAX_AGE]))\n return false\n\n const diff = Date.now() - hit.now\n return hit.maxAge ? diff > hit.maxAge\n : self[MAX_AGE] && (diff > self[MAX_AGE])\n}\n\nconst trim = self => {\n if (self[LENGTH] > self[MAX]) {\n for (let walker = self[LRU_LIST].tail;\n self[LENGTH] > self[MAX] && walker !== null;) {\n // We know that we're about to delete this one, and also\n // what the next least recently used key will be, so just\n // go ahead and set it now.\n const prev = walker.prev\n del(self, walker)\n walker = prev\n }\n }\n}\n\nconst del = (self, node) => {\n if (node) {\n const hit = node.value\n if (self[DISPOSE])\n self[DISPOSE](hit.key, hit.value)\n\n self[LENGTH] -= hit.length\n self[CACHE].delete(hit.key)\n self[LRU_LIST].removeNode(node)\n }\n}\n\nclass Entry {\n constructor (key, value, length, now, maxAge) {\n this.key = key\n this.value = value\n this.length = length\n this.now = now\n this.maxAge = maxAge || 0\n }\n}\n\nconst forEachStep = (self, fn, node, thisp) => {\n let hit = node.value\n if (isStale(self, hit)) {\n del(self, node)\n if (!self[ALLOW_STALE])\n hit = undefined\n }\n if (hit)\n fn.call(thisp, hit.value, hit.key, self)\n}\n\nmodule.exports = LRUCache\n", "// hoisted class for cyclic dependency\nclass Range {\n constructor (range, options) {\n options = parseOptions(options)\n\n if (range instanceof Range) {\n if (\n range.loose === !!options.loose &&\n range.includePrerelease === !!options.includePrerelease\n ) {\n return range\n } else {\n return new Range(range.raw, options)\n }\n }\n\n if (range instanceof Comparator) {\n // just put it in the set and return\n this.raw = range.value\n this.set = [[range]]\n this.format()\n return this\n }\n\n this.options = options\n this.loose = !!options.loose\n this.includePrerelease = !!options.includePrerelease\n\n // First reduce all whitespace as much as possible so we do not have to rely\n // on potentially slow regexes like \\s*. This is then stored and used for\n // future error messages as well.\n this.raw = range\n .trim()\n .split(/\\s+/)\n .join(' ')\n\n // First, split on ||\n this.set = this.raw\n .split('||')\n // map the range to a 2d array of comparators\n .map(r => this.parseRange(r.trim()))\n // throw out any comparator lists that are empty\n // this generally means that it was not a valid range, which is allowed\n // in loose mode, but will still throw if the WHOLE range is invalid.\n .filter(c => c.length)\n\n if (!this.set.length) {\n throw new TypeError(`Invalid SemVer Range: ${this.raw}`)\n }\n\n // if we have any that are not the null set, throw out null sets.\n if (this.set.length > 1) {\n // keep the first one, in case they're all null sets\n const first = this.set[0]\n this.set = this.set.filter(c => !isNullSet(c[0]))\n if (this.set.length === 0) {\n this.set = [first]\n } else if (this.set.length > 1) {\n // if we have any that are *, then the range is just *\n for (const c of this.set) {\n if (c.length === 1 && isAny(c[0])) {\n this.set = [c]\n break\n }\n }\n }\n }\n\n this.format()\n }\n\n format () {\n this.range = this.set\n .map((comps) => comps.join(' ').trim())\n .join('||')\n .trim()\n return this.range\n }\n\n toString () {\n return this.range\n }\n\n parseRange (range) {\n // memoize range parsing for performance.\n // this is a very hot path, and fully deterministic.\n const memoOpts =\n (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) |\n (this.options.loose && FLAG_LOOSE)\n const memoKey = memoOpts + ':' + range\n const cached = cache.get(memoKey)\n if (cached) {\n return cached\n }\n\n const loose = this.options.loose\n // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]\n range = range.replace(hr, hyphenReplace(this.options.includePrerelease))\n debug('hyphen replace', range)\n\n // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)\n debug('comparator trim', range)\n\n // `~ 1.2.3` => `~1.2.3`\n range = range.replace(re[t.TILDETRIM], tildeTrimReplace)\n debug('tilde trim', range)\n\n // `^ 1.2.3` => `^1.2.3`\n range = range.replace(re[t.CARETTRIM], caretTrimReplace)\n debug('caret trim', range)\n\n // At this point, the range is completely trimmed and\n // ready to be split into comparators.\n\n let rangeList = range\n .split(' ')\n .map(comp => parseComparator(comp, this.options))\n .join(' ')\n .split(/\\s+/)\n // >=0.0.0 is equivalent to *\n .map(comp => replaceGTE0(comp, this.options))\n\n if (loose) {\n // in loose mode, throw out any that are not valid comparators\n rangeList = rangeList.filter(comp => {\n debug('loose invalid filter', comp, this.options)\n return !!comp.match(re[t.COMPARATORLOOSE])\n })\n }\n debug('range list', rangeList)\n\n // if any comparators are the null set, then replace with JUST null set\n // if more than one comparator, remove any * comparators\n // also, don't include the same comparator more than once\n const rangeMap = new Map()\n const comparators = rangeList.map(comp => new Comparator(comp, this.options))\n for (const comp of comparators) {\n if (isNullSet(comp)) {\n return [comp]\n }\n rangeMap.set(comp.value, comp)\n }\n if (rangeMap.size > 1 && rangeMap.has('')) {\n rangeMap.delete('')\n }\n\n const result = [...rangeMap.values()]\n cache.set(memoKey, result)\n return result\n }\n\n intersects (range, options) {\n if (!(range instanceof Range)) {\n throw new TypeError('a Range is required')\n }\n\n return this.set.some((thisComparators) => {\n return (\n isSatisfiable(thisComparators, options) &&\n range.set.some((rangeComparators) => {\n return (\n isSatisfiable(rangeComparators, options) &&\n thisComparators.every((thisComparator) => {\n return rangeComparators.every((rangeComparator) => {\n return thisComparator.intersects(rangeComparator, options)\n })\n })\n )\n })\n )\n })\n }\n\n // if ANY of the sets match ALL of its comparators, then pass\n test (version) {\n if (!version) {\n return false\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n for (let i = 0; i < this.set.length; i++) {\n if (testSet(this.set[i], version, this.options)) {\n return true\n }\n }\n return false\n }\n}\n\nmodule.exports = Range\n\nconst LRU = require('lru-cache')\nconst cache = new LRU({ max: 1000 })\n\nconst parseOptions = require('../internal/parse-options')\nconst Comparator = require('./comparator')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst {\n safeRe: re,\n t,\n comparatorTrimReplace,\n tildeTrimReplace,\n caretTrimReplace,\n} = require('../internal/re')\nconst { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = require('../internal/constants')\n\nconst isNullSet = c => c.value === '<0.0.0-0'\nconst isAny = c => c.value === ''\n\n// take a set of comparators and determine whether there\n// exists a version which can satisfy it\nconst isSatisfiable = (comparators, options) => {\n let result = true\n const remainingComparators = comparators.slice()\n let testComparator = remainingComparators.pop()\n\n while (result && remainingComparators.length) {\n result = remainingComparators.every((otherComparator) => {\n return testComparator.intersects(otherComparator, options)\n })\n\n testComparator = remainingComparators.pop()\n }\n\n return result\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nconst parseComparator = (comp, options) => {\n debug('comp', comp, options)\n comp = replaceCarets(comp, options)\n debug('caret', comp)\n comp = replaceTildes(comp, options)\n debug('tildes', comp)\n comp = replaceXRanges(comp, options)\n debug('xrange', comp)\n comp = replaceStars(comp, options)\n debug('stars', comp)\n return comp\n}\n\nconst isX = id => !id || id.toLowerCase() === 'x' || id === '*'\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0\n// ~0.0.1 --> >=0.0.1 <0.1.0-0\nconst replaceTildes = (comp, options) => {\n return comp\n .trim()\n .split(/\\s+/)\n .map((c) => replaceTilde(c, options))\n .join(' ')\n}\n\nconst replaceTilde = (comp, options) => {\n const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('tilde', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0 <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n // ~1.2 == >=1.2.0 <1.3.0-0\n ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`\n } else if (pr) {\n debug('replaceTilde pr', pr)\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n } else {\n // ~1.2.3 == >=1.2.3 <1.3.0-0\n ret = `>=${M}.${m}.${p\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('tilde return', ret)\n return ret\n })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0\n// ^1.2.3 --> >=1.2.3 <2.0.0-0\n// ^1.2.0 --> >=1.2.0 <2.0.0-0\n// ^0.0.1 --> >=0.0.1 <0.0.2-0\n// ^0.1.0 --> >=0.1.0 <0.2.0-0\nconst replaceCarets = (comp, options) => {\n return comp\n .trim()\n .split(/\\s+/)\n .map((c) => replaceCaret(c, options))\n .join(' ')\n}\n\nconst replaceCaret = (comp, options) => {\n debug('caret', comp, options)\n const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]\n const z = options.includePrerelease ? '-0' : ''\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('caret', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n if (M === '0') {\n ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`\n } else {\n ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`\n }\n } else if (pr) {\n debug('replaceCaret pr', pr)\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${+M + 1}.0.0-0`\n }\n } else {\n debug('no pr')\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p\n }${z} <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p\n }${z} <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p\n } <${+M + 1}.0.0-0`\n }\n }\n\n debug('caret return', ret)\n return ret\n })\n}\n\nconst replaceXRanges = (comp, options) => {\n debug('replaceXRanges', comp, options)\n return comp\n .split(/\\s+/)\n .map((c) => replaceXRange(c, options))\n .join(' ')\n}\n\nconst replaceXRange = (comp, options) => {\n comp = comp.trim()\n const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]\n return comp.replace(r, (ret, gtlt, M, m, p, pr) => {\n debug('xRange', comp, ret, gtlt, M, m, p, pr)\n const xM = isX(M)\n const xm = xM || isX(m)\n const xp = xm || isX(p)\n const anyX = xp\n\n if (gtlt === '=' && anyX) {\n gtlt = ''\n }\n\n // if we're including prereleases in the match, then we need\n // to fix this to -0, the lowest possible prerelease value\n pr = options.includePrerelease ? '-0' : ''\n\n if (xM) {\n if (gtlt === '>' || gtlt === '<') {\n // nothing is allowed\n ret = '<0.0.0-0'\n } else {\n // nothing is forbidden\n ret = '*'\n }\n } else if (gtlt && anyX) {\n // we know patch is an x, because we have any x at all.\n // replace X with 0\n if (xm) {\n m = 0\n }\n p = 0\n\n if (gtlt === '>') {\n // >1 => >=2.0.0\n // >1.2 => >=1.3.0\n gtlt = '>='\n if (xm) {\n M = +M + 1\n m = 0\n p = 0\n } else {\n m = +m + 1\n p = 0\n }\n } else if (gtlt === '<=') {\n // <=0.7.x is actually <0.8.0, since any 0.7.x should\n // pass. Similarly, <=7.x is actually <8.0.0, etc.\n gtlt = '<'\n if (xm) {\n M = +M + 1\n } else {\n m = +m + 1\n }\n }\n\n if (gtlt === '<') {\n pr = '-0'\n }\n\n ret = `${gtlt + M}.${m}.${p}${pr}`\n } else if (xm) {\n ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`\n } else if (xp) {\n ret = `>=${M}.${m}.0${pr\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('xRange return', ret)\n\n return ret\n })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nconst replaceStars = (comp, options) => {\n debug('replaceStars', comp, options)\n // Looseness is ignored here. star is always as loose as it gets!\n return comp\n .trim()\n .replace(re[t.STAR], '')\n}\n\nconst replaceGTE0 = (comp, options) => {\n debug('replaceGTE0', comp, options)\n return comp\n .trim()\n .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '')\n}\n\n// This function is passed to string.replace(re[t.HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0-0\nconst hyphenReplace = incPr => ($0,\n from, fM, fm, fp, fpr, fb,\n to, tM, tm, tp, tpr, tb) => {\n if (isX(fM)) {\n from = ''\n } else if (isX(fm)) {\n from = `>=${fM}.0.0${incPr ? '-0' : ''}`\n } else if (isX(fp)) {\n from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`\n } else if (fpr) {\n from = `>=${from}`\n } else {\n from = `>=${from}${incPr ? '-0' : ''}`\n }\n\n if (isX(tM)) {\n to = ''\n } else if (isX(tm)) {\n to = `<${+tM + 1}.0.0-0`\n } else if (isX(tp)) {\n to = `<${tM}.${+tm + 1}.0-0`\n } else if (tpr) {\n to = `<=${tM}.${tm}.${tp}-${tpr}`\n } else if (incPr) {\n to = `<${tM}.${tm}.${+tp + 1}-0`\n } else {\n to = `<=${to}`\n }\n\n return `${from} ${to}`.trim()\n}\n\nconst testSet = (set, version, options) => {\n for (let i = 0; i < set.length; i++) {\n if (!set[i].test(version)) {\n return false\n }\n }\n\n if (version.prerelease.length && !options.includePrerelease) {\n // Find the set of versions that are allowed to have prereleases\n // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n // That should allow `1.2.3-pr.2` to pass.\n // However, `1.2.4-alpha.notready` should NOT be allowed,\n // even though it's within the range set by the comparators.\n for (let i = 0; i < set.length; i++) {\n debug(set[i].semver)\n if (set[i].semver === Comparator.ANY) {\n continue\n }\n\n if (set[i].semver.prerelease.length > 0) {\n const allowed = set[i].semver\n if (allowed.major === version.major &&\n allowed.minor === version.minor &&\n allowed.patch === version.patch) {\n return true\n }\n }\n }\n\n // Version has a -pre, but it's not one of the ones we like.\n return false\n }\n\n return true\n}\n", "const ANY = Symbol('SemVer ANY')\n// hoisted class for cyclic dependency\nclass Comparator {\n static get ANY () {\n return ANY\n }\n\n constructor (comp, options) {\n options = parseOptions(options)\n\n if (comp instanceof Comparator) {\n if (comp.loose === !!options.loose) {\n return comp\n } else {\n comp = comp.value\n }\n }\n\n comp = comp.trim().split(/\\s+/).join(' ')\n debug('comparator', comp, options)\n this.options = options\n this.loose = !!options.loose\n this.parse(comp)\n\n if (this.semver === ANY) {\n this.value = ''\n } else {\n this.value = this.operator + this.semver.version\n }\n\n debug('comp', this)\n }\n\n parse (comp) {\n const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]\n const m = comp.match(r)\n\n if (!m) {\n throw new TypeError(`Invalid comparator: ${comp}`)\n }\n\n this.operator = m[1] !== undefined ? m[1] : ''\n if (this.operator === '=') {\n this.operator = ''\n }\n\n // if it literally is just '>' or '' then allow anything.\n if (!m[2]) {\n this.semver = ANY\n } else {\n this.semver = new SemVer(m[2], this.options.loose)\n }\n }\n\n toString () {\n return this.value\n }\n\n test (version) {\n debug('Comparator.test', version, this.options.loose)\n\n if (this.semver === ANY || version === ANY) {\n return true\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n return cmp(version, this.operator, this.semver, this.options)\n }\n\n intersects (comp, options) {\n if (!(comp instanceof Comparator)) {\n throw new TypeError('a Comparator is required')\n }\n\n if (this.operator === '') {\n if (this.value === '') {\n return true\n }\n return new Range(comp.value, options).test(this.value)\n } else if (comp.operator === '') {\n if (comp.value === '') {\n return true\n }\n return new Range(this.value, options).test(comp.semver)\n }\n\n options = parseOptions(options)\n\n // Special cases where nothing can possibly be lower\n if (options.includePrerelease &&\n (this.value === '<0.0.0-0' || comp.value === '<0.0.0-0')) {\n return false\n }\n if (!options.includePrerelease &&\n (this.value.startsWith('<0.0.0') || comp.value.startsWith('<0.0.0'))) {\n return false\n }\n\n // Same direction increasing (> or >=)\n if (this.operator.startsWith('>') && comp.operator.startsWith('>')) {\n return true\n }\n // Same direction decreasing (< or <=)\n if (this.operator.startsWith('<') && comp.operator.startsWith('<')) {\n return true\n }\n // same SemVer and both sides are inclusive (<= or >=)\n if (\n (this.semver.version === comp.semver.version) &&\n this.operator.includes('=') && comp.operator.includes('=')) {\n return true\n }\n // opposite directions less than\n if (cmp(this.semver, '<', comp.semver, options) &&\n this.operator.startsWith('>') && comp.operator.startsWith('<')) {\n return true\n }\n // opposite directions greater than\n if (cmp(this.semver, '>', comp.semver, options) &&\n this.operator.startsWith('<') && comp.operator.startsWith('>')) {\n return true\n }\n return false\n }\n}\n\nmodule.exports = Comparator\n\nconst parseOptions = require('../internal/parse-options')\nconst { safeRe: re, t } = require('../internal/re')\nconst cmp = require('../functions/cmp')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst Range = require('./range')\n", "const Range = require('../classes/range')\nconst satisfies = (version, range, options) => {\n try {\n range = new Range(range, options)\n } catch (er) {\n return false\n }\n return range.test(version)\n}\nmodule.exports = satisfies\n", "const Range = require('../classes/range')\n\n// Mostly just for testing and legacy API reasons\nconst toComparators = (range, options) =>\n new Range(range, options).set\n .map(comp => comp.map(c => c.value).join(' ').trim().split(' '))\n\nmodule.exports = toComparators\n", "const SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\n\nconst maxSatisfying = (versions, range, options) => {\n let max = null\n let maxSV = null\n let rangeObj = null\n try {\n rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach((v) => {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!max || maxSV.compare(v) === -1) {\n // compare(max, v, true)\n max = v\n maxSV = new SemVer(max, options)\n }\n }\n })\n return max\n}\nmodule.exports = maxSatisfying\n", "const SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst minSatisfying = (versions, range, options) => {\n let min = null\n let minSV = null\n let rangeObj = null\n try {\n rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach((v) => {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!min || minSV.compare(v) === 1) {\n // compare(min, v, true)\n min = v\n minSV = new SemVer(min, options)\n }\n }\n })\n return min\n}\nmodule.exports = minSatisfying\n", "const SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst gt = require('../functions/gt')\n\nconst minVersion = (range, loose) => {\n range = new Range(range, loose)\n\n let minver = new SemVer('0.0.0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = new SemVer('0.0.0-0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = null\n for (let i = 0; i < range.set.length; ++i) {\n const comparators = range.set[i]\n\n let setMin = null\n comparators.forEach((comparator) => {\n // Clone to avoid manipulating the comparator's semver object.\n const compver = new SemVer(comparator.semver.version)\n switch (comparator.operator) {\n case '>':\n if (compver.prerelease.length === 0) {\n compver.patch++\n } else {\n compver.prerelease.push(0)\n }\n compver.raw = compver.format()\n /* fallthrough */\n case '':\n case '>=':\n if (!setMin || gt(compver, setMin)) {\n setMin = compver\n }\n break\n case '<':\n case '<=':\n /* Ignore maximum versions */\n break\n /* istanbul ignore next */\n default:\n throw new Error(`Unexpected operation: ${comparator.operator}`)\n }\n })\n if (setMin && (!minver || gt(minver, setMin))) {\n minver = setMin\n }\n }\n\n if (minver && range.test(minver)) {\n return minver\n }\n\n return null\n}\nmodule.exports = minVersion\n", "const Range = require('../classes/range')\nconst validRange = (range, options) => {\n try {\n // Return '*' instead of '' so that truthiness works.\n // This will throw if it's invalid anyway\n return new Range(range, options).range || '*'\n } catch (er) {\n return null\n }\n}\nmodule.exports = validRange\n", "const SemVer = require('../classes/semver')\nconst Comparator = require('../classes/comparator')\nconst { ANY } = Comparator\nconst Range = require('../classes/range')\nconst satisfies = require('../functions/satisfies')\nconst gt = require('../functions/gt')\nconst lt = require('../functions/lt')\nconst lte = require('../functions/lte')\nconst gte = require('../functions/gte')\n\nconst outside = (version, range, hilo, options) => {\n version = new SemVer(version, options)\n range = new Range(range, options)\n\n let gtfn, ltefn, ltfn, comp, ecomp\n switch (hilo) {\n case '>':\n gtfn = gt\n ltefn = lte\n ltfn = lt\n comp = '>'\n ecomp = '>='\n break\n case '<':\n gtfn = lt\n ltefn = gte\n ltfn = gt\n comp = '<'\n ecomp = '<='\n break\n default:\n throw new TypeError('Must provide a hilo val of \"<\" or \">\"')\n }\n\n // If it satisfies the range it is not outside\n if (satisfies(version, range, options)) {\n return false\n }\n\n // From now on, variable terms are as if we're in \"gtr\" mode.\n // but note that everything is flipped for the \"ltr\" function.\n\n for (let i = 0; i < range.set.length; ++i) {\n const comparators = range.set[i]\n\n let high = null\n let low = null\n\n comparators.forEach((comparator) => {\n if (comparator.semver === ANY) {\n comparator = new Comparator('>=0.0.0')\n }\n high = high || comparator\n low = low || comparator\n if (gtfn(comparator.semver, high.semver, options)) {\n high = comparator\n } else if (ltfn(comparator.semver, low.semver, options)) {\n low = comparator\n }\n })\n\n // If the edge version comparator has a operator then our version\n // isn't outside it\n if (high.operator === comp || high.operator === ecomp) {\n return false\n }\n\n // If the lowest version comparator has an operator and our version\n // is less than it then it isn't higher than the range\n if ((!low.operator || low.operator === comp) &&\n ltefn(version, low.semver)) {\n return false\n } else if (low.operator === ecomp && ltfn(version, low.semver)) {\n return false\n }\n }\n return true\n}\n\nmodule.exports = outside\n", "// Determine if version is greater than all the versions possible in the range.\nconst outside = require('./outside')\nconst gtr = (version, range, options) => outside(version, range, '>', options)\nmodule.exports = gtr\n", "const outside = require('./outside')\n// Determine if version is less than all the versions possible in the range\nconst ltr = (version, range, options) => outside(version, range, '<', options)\nmodule.exports = ltr\n", "const Range = require('../classes/range')\nconst intersects = (r1, r2, options) => {\n r1 = new Range(r1, options)\n r2 = new Range(r2, options)\n return r1.intersects(r2, options)\n}\nmodule.exports = intersects\n", "// given a set of versions and a range, create a \"simplified\" range\n// that includes the same versions that the original range does\n// If the original range is shorter than the simplified one, return that.\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\nmodule.exports = (versions, range, options) => {\n const set = []\n let first = null\n let prev = null\n const v = versions.sort((a, b) => compare(a, b, options))\n for (const version of v) {\n const included = satisfies(version, range, options)\n if (included) {\n prev = version\n if (!first) {\n first = version\n }\n } else {\n if (prev) {\n set.push([first, prev])\n }\n prev = null\n first = null\n }\n }\n if (first) {\n set.push([first, null])\n }\n\n const ranges = []\n for (const [min, max] of set) {\n if (min === max) {\n ranges.push(min)\n } else if (!max && min === v[0]) {\n ranges.push('*')\n } else if (!max) {\n ranges.push(`>=${min}`)\n } else if (min === v[0]) {\n ranges.push(`<=${max}`)\n } else {\n ranges.push(`${min} - ${max}`)\n }\n }\n const simplified = ranges.join(' || ')\n const original = typeof range.raw === 'string' ? range.raw : String(range)\n return simplified.length < original.length ? simplified : range\n}\n", "const Range = require('../classes/range.js')\nconst Comparator = require('../classes/comparator.js')\nconst { ANY } = Comparator\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\n\n// Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff:\n// - Every simple range `r1, r2, ...` is a null set, OR\n// - Every simple range `r1, r2, ...` which is not a null set is a subset of\n// some `R1, R2, ...`\n//\n// Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff:\n// - If c is only the ANY comparator\n// - If C is only the ANY comparator, return true\n// - Else if in prerelease mode, return false\n// - else replace c with `[>=0.0.0]`\n// - If C is only the ANY comparator\n// - if in prerelease mode, return true\n// - else replace C with `[>=0.0.0]`\n// - Let EQ be the set of = comparators in c\n// - If EQ is more than one, return true (null set)\n// - Let GT be the highest > or >= comparator in c\n// - Let LT be the lowest < or <= comparator in c\n// - If GT and LT, and GT.semver > LT.semver, return true (null set)\n// - If any C is a = range, and GT or LT are set, return false\n// - If EQ\n// - If GT, and EQ does not satisfy GT, return true (null set)\n// - If LT, and EQ does not satisfy LT, return true (null set)\n// - If EQ satisfies every C, return true\n// - Else return false\n// - If GT\n// - If GT.semver is lower than any > or >= comp in C, return false\n// - If GT is >=, and GT.semver does not satisfy every C, return false\n// - If GT.semver has a prerelease, and not in prerelease mode\n// - If no C has a prerelease and the GT.semver tuple, return false\n// - If LT\n// - If LT.semver is greater than any < or <= comp in C, return false\n// - If LT is <=, and LT.semver does not satisfy every C, return false\n// - If GT.semver has a prerelease, and not in prerelease mode\n// - If no C has a prerelease and the LT.semver tuple, return false\n// - Else return true\n\nconst subset = (sub, dom, options = {}) => {\n if (sub === dom) {\n return true\n }\n\n sub = new Range(sub, options)\n dom = new Range(dom, options)\n let sawNonNull = false\n\n OUTER: for (const simpleSub of sub.set) {\n for (const simpleDom of dom.set) {\n const isSub = simpleSubset(simpleSub, simpleDom, options)\n sawNonNull = sawNonNull || isSub !== null\n if (isSub) {\n continue OUTER\n }\n }\n // the null set is a subset of everything, but null simple ranges in\n // a complex range should be ignored. so if we saw a non-null range,\n // then we know this isn't a subset, but if EVERY simple range was null,\n // then it is a subset.\n if (sawNonNull) {\n return false\n }\n }\n return true\n}\n\nconst minimumVersionWithPreRelease = [new Comparator('>=0.0.0-0')]\nconst minimumVersion = [new Comparator('>=0.0.0')]\n\nconst simpleSubset = (sub, dom, options) => {\n if (sub === dom) {\n return true\n }\n\n if (sub.length === 1 && sub[0].semver === ANY) {\n if (dom.length === 1 && dom[0].semver === ANY) {\n return true\n } else if (options.includePrerelease) {\n sub = minimumVersionWithPreRelease\n } else {\n sub = minimumVersion\n }\n }\n\n if (dom.length === 1 && dom[0].semver === ANY) {\n if (options.includePrerelease) {\n return true\n } else {\n dom = minimumVersion\n }\n }\n\n const eqSet = new Set()\n let gt, lt\n for (const c of sub) {\n if (c.operator === '>' || c.operator === '>=') {\n gt = higherGT(gt, c, options)\n } else if (c.operator === '<' || c.operator === '<=') {\n lt = lowerLT(lt, c, options)\n } else {\n eqSet.add(c.semver)\n }\n }\n\n if (eqSet.size > 1) {\n return null\n }\n\n let gtltComp\n if (gt && lt) {\n gtltComp = compare(gt.semver, lt.semver, options)\n if (gtltComp > 0) {\n return null\n } else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) {\n return null\n }\n }\n\n // will iterate one or zero times\n for (const eq of eqSet) {\n if (gt && !satisfies(eq, String(gt), options)) {\n return null\n }\n\n if (lt && !satisfies(eq, String(lt), options)) {\n return null\n }\n\n for (const c of dom) {\n if (!satisfies(eq, String(c), options)) {\n return false\n }\n }\n\n return true\n }\n\n let higher, lower\n let hasDomLT, hasDomGT\n // if the subset has a prerelease, we need a comparator in the superset\n // with the same tuple and a prerelease, or it's not a subset\n let needDomLTPre = lt &&\n !options.includePrerelease &&\n lt.semver.prerelease.length ? lt.semver : false\n let needDomGTPre = gt &&\n !options.includePrerelease &&\n gt.semver.prerelease.length ? gt.semver : false\n // exception: <1.2.3-0 is the same as <1.2.3\n if (needDomLTPre && needDomLTPre.prerelease.length === 1 &&\n lt.operator === '<' && needDomLTPre.prerelease[0] === 0) {\n needDomLTPre = false\n }\n\n for (const c of dom) {\n hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>='\n hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<='\n if (gt) {\n if (needDomGTPre) {\n if (c.semver.prerelease && c.semver.prerelease.length &&\n c.semver.major === needDomGTPre.major &&\n c.semver.minor === needDomGTPre.minor &&\n c.semver.patch === needDomGTPre.patch) {\n needDomGTPre = false\n }\n }\n if (c.operator === '>' || c.operator === '>=') {\n higher = higherGT(gt, c, options)\n if (higher === c && higher !== gt) {\n return false\n }\n } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options)) {\n return false\n }\n }\n if (lt) {\n if (needDomLTPre) {\n if (c.semver.prerelease && c.semver.prerelease.length &&\n c.semver.major === needDomLTPre.major &&\n c.semver.minor === needDomLTPre.minor &&\n c.semver.patch === needDomLTPre.patch) {\n needDomLTPre = false\n }\n }\n if (c.operator === '<' || c.operator === '<=') {\n lower = lowerLT(lt, c, options)\n if (lower === c && lower !== lt) {\n return false\n }\n } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options)) {\n return false\n }\n }\n if (!c.operator && (lt || gt) && gtltComp !== 0) {\n return false\n }\n }\n\n // if there was a < or >, and nothing in the dom, then must be false\n // UNLESS it was limited by another range in the other direction.\n // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0\n if (gt && hasDomLT && !lt && gtltComp !== 0) {\n return false\n }\n\n if (lt && hasDomGT && !gt && gtltComp !== 0) {\n return false\n }\n\n // we needed a prerelease range in a specific tuple, but didn't get one\n // then this isn't a subset. eg >=1.2.3-pre is not a subset of >=1.0.0,\n // because it includes prereleases in the 1.2.3 tuple\n if (needDomGTPre || needDomLTPre) {\n return false\n }\n\n return true\n}\n\n// >=1.2.3 is lower than >1.2.3\nconst higherGT = (a, b, options) => {\n if (!a) {\n return b\n }\n const comp = compare(a.semver, b.semver, options)\n return comp > 0 ? a\n : comp < 0 ? b\n : b.operator === '>' && a.operator === '>=' ? b\n : a\n}\n\n// <=1.2.3 is higher than <1.2.3\nconst lowerLT = (a, b, options) => {\n if (!a) {\n return b\n }\n const comp = compare(a.semver, b.semver, options)\n return comp < 0 ? a\n : comp > 0 ? b\n : b.operator === '<' && a.operator === '<=' ? b\n : a\n}\n\nmodule.exports = subset\n", "// just pre-load all the stuff that index.js lazily exports\nconst internalRe = require('./internal/re')\nconst constants = require('./internal/constants')\nconst SemVer = require('./classes/semver')\nconst identifiers = require('./internal/identifiers')\nconst parse = require('./functions/parse')\nconst valid = require('./functions/valid')\nconst clean = require('./functions/clean')\nconst inc = require('./functions/inc')\nconst diff = require('./functions/diff')\nconst major = require('./functions/major')\nconst minor = require('./functions/minor')\nconst patch = require('./functions/patch')\nconst prerelease = require('./functions/prerelease')\nconst compare = require('./functions/compare')\nconst rcompare = require('./functions/rcompare')\nconst compareLoose = require('./functions/compare-loose')\nconst compareBuild = require('./functions/compare-build')\nconst sort = require('./functions/sort')\nconst rsort = require('./functions/rsort')\nconst gt = require('./functions/gt')\nconst lt = require('./functions/lt')\nconst eq = require('./functions/eq')\nconst neq = require('./functions/neq')\nconst gte = require('./functions/gte')\nconst lte = require('./functions/lte')\nconst cmp = require('./functions/cmp')\nconst coerce = require('./functions/coerce')\nconst Comparator = require('./classes/comparator')\nconst Range = require('./classes/range')\nconst satisfies = require('./functions/satisfies')\nconst toComparators = require('./ranges/to-comparators')\nconst maxSatisfying = require('./ranges/max-satisfying')\nconst minSatisfying = require('./ranges/min-satisfying')\nconst minVersion = require('./ranges/min-version')\nconst validRange = require('./ranges/valid')\nconst outside = require('./ranges/outside')\nconst gtr = require('./ranges/gtr')\nconst ltr = require('./ranges/ltr')\nconst intersects = require('./ranges/intersects')\nconst simplifyRange = require('./ranges/simplify')\nconst subset = require('./ranges/subset')\nmodule.exports = {\n parse,\n valid,\n clean,\n inc,\n diff,\n major,\n minor,\n patch,\n prerelease,\n compare,\n rcompare,\n compareLoose,\n compareBuild,\n sort,\n rsort,\n gt,\n lt,\n eq,\n neq,\n gte,\n lte,\n cmp,\n coerce,\n Comparator,\n Range,\n satisfies,\n toComparators,\n maxSatisfying,\n minSatisfying,\n minVersion,\n validRange,\n outside,\n gtr,\n ltr,\n intersects,\n simplifyRange,\n subset,\n SemVer,\n re: internalRe.re,\n src: internalRe.src,\n tokens: internalRe.t,\n SEMVER_SPEC_VERSION: constants.SEMVER_SPEC_VERSION,\n RELEASE_TYPES: constants.RELEASE_TYPES,\n compareIdentifiers: identifiers.compareIdentifiers,\n rcompareIdentifiers: identifiers.rcompareIdentifiers,\n}\n", "\"use strict\";\n/**\n * Capture module.\n * @module aws_p\n */\nvar semver = require('semver');\nvar Aws = require('../segments/attributes/aws');\nvar contextUtils = require('../context_utils');\nvar Utils = require('../utils');\nvar logger = require('../logger');\nvar minVersion = '2.7.15';\nvar throttledErrorDefault = function throttledErrorDefault() {\n return false; // If the customer doesn't provide an aws-sdk with a throttled error function, we can't make assumptions.\n};\n/**\n * Configures the AWS SDK to automatically capture information for the segment.\n * All created clients will automatically be captured. See 'captureAWSClient'\n * for additional details.\n * @param {AWS} awssdk - The Javascript AWS SDK.\n * @alias module:aws_p.captureAWS\n * @returns {AWS}\n * @see https://github.com/aws/aws-sdk-js\n */\nvar captureAWS = function captureAWS(awssdk) {\n if (!semver.gte(awssdk.VERSION, minVersion)) {\n throw new Error('AWS SDK version ' + minVersion + ' or greater required.');\n }\n for (var prop in awssdk) {\n if (awssdk[prop].serviceIdentifier) {\n var Service = awssdk[prop];\n Service.prototype.customizeRequests(captureAWSRequest);\n }\n }\n return awssdk;\n};\n/**\n * Configures any AWS Client instance to automatically capture information for the segment.\n * For manual mode, a param with key called 'Segment' is required as a part of the AWS\n * call paramaters, and must reference a Segment or Subsegment object.\n * @param {AWS.Service} service - An instance of a AWS service to wrap.\n * @alias module:aws_p.captureAWSClient\n * @returns {AWS.Service}\n * @see https://github.com/aws/aws-sdk-js\n */\nvar captureAWSClient = function captureAWSClient(service) {\n service.customizeRequests(captureAWSRequest);\n return service;\n};\nfunction captureAWSRequest(req) {\n var parent = contextUtils.resolveSegment(contextUtils.resolveManualSegmentParams(req.params));\n if (!parent) {\n var output = this.serviceIdentifier + '.' + req.operation;\n if (!contextUtils.isAutomaticMode()) {\n logger.getLogger().info('Call ' + output + ' requires a segment object' +\n ' on the request params as \"XRaySegment\" for tracing in manual mode. Ignoring.');\n }\n else {\n logger.getLogger().info('Call ' + output +\n ' is missing the sub/segment context for automatic mode. Ignoring.');\n }\n return req;\n }\n var throttledError = this.throttledError || throttledErrorDefault;\n var stack = (new Error()).stack;\n let subsegment;\n if (parent.notTraced) {\n subsegment = parent.addNewSubsegmentWithoutSampling(this.serviceIdentifier);\n }\n else {\n subsegment = parent.addNewSubsegment(this.serviceIdentifier);\n }\n var traceId = parent.segment ? parent.segment.trace_id : parent.trace_id;\n const data = parent.segment ? parent.segment.additionalTraceData : parent.additionalTraceData;\n var buildListener = function (req) {\n let traceHeader = 'Root=' + traceId + ';Parent=' + subsegment.id +\n ';Sampled=' + (subsegment.notTraced ? '0' : '1');\n if (data != null) {\n for (const [key, value] of Object.entries(data)) {\n traceHeader += ';' + key + '=' + value;\n }\n }\n req.httpRequest.headers['X-Amzn-Trace-Id'] = traceHeader;\n };\n var completeListener = function (res) {\n subsegment.addAttribute('namespace', 'aws');\n subsegment.addAttribute('aws', new Aws(res, subsegment.name));\n var httpRes = res.httpResponse;\n if (httpRes) {\n subsegment.addAttribute('http', new HttpResponse(httpRes));\n if (httpRes.statusCode === 429 || (res.error && throttledError(res.error))) {\n subsegment.addThrottleFlag();\n }\n }\n if (res.error) {\n var err = { message: res.error.message, name: res.error.code, stack: stack };\n if (httpRes && httpRes.statusCode) {\n if (Utils.getCauseTypeFromHttpStatus(httpRes.statusCode) == 'error') {\n subsegment.addErrorFlag();\n }\n subsegment.close(err, true);\n }\n else {\n subsegment.close(err);\n }\n }\n else {\n if (httpRes && httpRes.statusCode) {\n var cause = Utils.getCauseTypeFromHttpStatus(httpRes.statusCode);\n if (cause) {\n subsegment[cause] = true;\n }\n }\n subsegment.close();\n }\n };\n req.on('beforePresign', function (req) {\n // Only the AWS Presigner triggers this event,\n // so we can rely on this event to notify us when\n // a request is for a presigned url\n parent.removeSubsegment(subsegment);\n parent.decrementCounter();\n req.removeListener('build', buildListener);\n req.removeListener('complete', completeListener);\n });\n req.on('build', buildListener).on('complete', completeListener);\n if (!req.__send) {\n req.__send = req.send;\n req.send = function (callback) {\n if (contextUtils.isAutomaticMode()) {\n var session = contextUtils.getNamespace();\n session.run(function () {\n contextUtils.setSegment(subsegment);\n req.__send(callback);\n });\n }\n else {\n req.__send(callback);\n }\n };\n }\n}\nfunction HttpResponse(res) {\n this.init(res);\n}\nHttpResponse.prototype.init = function init(res) {\n this.response = {\n status: res.statusCode || '',\n };\n if (res.headers && res.headers['content-length']) {\n this.response.content_length = res.headers['content-length'];\n }\n};\nmodule.exports.captureAWSClient = captureAWSClient;\nmodule.exports.captureAWS = captureAWS;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.NODEJS_TIMEOUT_ERROR_CODES = exports.TRANSIENT_ERROR_STATUS_CODES = exports.TRANSIENT_ERROR_CODES = exports.THROTTLING_ERROR_CODES = exports.CLOCK_SKEW_ERROR_CODES = void 0;\nexports.CLOCK_SKEW_ERROR_CODES = [\n \"AuthFailure\",\n \"InvalidSignatureException\",\n \"RequestExpired\",\n \"RequestInTheFuture\",\n \"RequestTimeTooSkewed\",\n \"SignatureDoesNotMatch\",\n];\nexports.THROTTLING_ERROR_CODES = [\n \"BandwidthLimitExceeded\",\n \"EC2ThrottledException\",\n \"LimitExceededException\",\n \"PriorRequestNotComplete\",\n \"ProvisionedThroughputExceededException\",\n \"RequestLimitExceeded\",\n \"RequestThrottled\",\n \"RequestThrottledException\",\n \"SlowDown\",\n \"ThrottledException\",\n \"Throttling\",\n \"ThrottlingException\",\n \"TooManyRequestsException\",\n \"TransactionInProgressException\",\n];\nexports.TRANSIENT_ERROR_CODES = [\"TimeoutError\", \"RequestTimeout\", \"RequestTimeoutException\"];\nexports.TRANSIENT_ERROR_STATUS_CODES = [500, 502, 503, 504];\nexports.NODEJS_TIMEOUT_ERROR_CODES = [\"ECONNRESET\", \"ECONNREFUSED\", \"EPIPE\", \"ETIMEDOUT\"];\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isServerError = exports.isTransientError = exports.isThrottlingError = exports.isClockSkewError = exports.isRetryableByTrait = void 0;\nconst constants_1 = require(\"./constants\");\nconst isRetryableByTrait = (error) => error.$retryable !== undefined;\nexports.isRetryableByTrait = isRetryableByTrait;\nconst isClockSkewError = (error) => constants_1.CLOCK_SKEW_ERROR_CODES.includes(error.name);\nexports.isClockSkewError = isClockSkewError;\nconst isThrottlingError = (error) => {\n var _a, _b;\n return ((_a = error.$metadata) === null || _a === void 0 ? void 0 : _a.httpStatusCode) === 429 ||\n constants_1.THROTTLING_ERROR_CODES.includes(error.name) ||\n ((_b = error.$retryable) === null || _b === void 0 ? void 0 : _b.throttling) == true;\n};\nexports.isThrottlingError = isThrottlingError;\nconst isTransientError = (error) => {\n var _a;\n return constants_1.TRANSIENT_ERROR_CODES.includes(error.name) ||\n constants_1.NODEJS_TIMEOUT_ERROR_CODES.includes((error === null || error === void 0 ? void 0 : error.code) || \"\") ||\n constants_1.TRANSIENT_ERROR_STATUS_CODES.includes(((_a = error.$metadata) === null || _a === void 0 ? void 0 : _a.httpStatusCode) || 0);\n};\nexports.isTransientError = isTransientError;\nconst isServerError = (error) => {\n var _a;\n if (((_a = error.$metadata) === null || _a === void 0 ? void 0 : _a.httpStatusCode) !== undefined) {\n const statusCode = error.$metadata.httpStatusCode;\n if (500 <= statusCode && statusCode <= 599 && !(0, exports.isTransientError)(error)) {\n return true;\n }\n return false;\n }\n return false;\n};\nexports.isServerError = isServerError;\n", "\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.captureAWSClient = void 0;\nconst service_error_classification_1 = require(\"@aws-sdk/service-error-classification\");\nconst aws_1 = __importDefault(require(\"../segments/attributes/aws\"));\nconst querystring_1 = require(\"querystring\");\nconst subsegment_1 = __importDefault(require(\"../segments/attributes/subsegment\"));\nconst contextUtils = require('../context_utils');\nconst logger = require('../logger');\nconst { safeParseInt } = require('../utils');\nconst utils_1 = require(\"../utils\");\nconst XRAY_PLUGIN_NAME = 'XRaySDKInstrumentation';\nconst buildAttributesFromMetadata = async (service, operation, region, res, error) => {\n var _a, _b, _c;\n const { extendedRequestId, requestId, httpStatusCode: statusCode, attempts } = ((_a = res === null || res === void 0 ? void 0 : res.output) === null || _a === void 0 ? void 0 : _a.$metadata) || (error === null || error === void 0 ? void 0 : error.$metadata);\n const aws = new aws_1.default({\n extendedRequestId,\n requestId,\n retryCount: attempts,\n request: {\n operation,\n httpRequest: {\n region,\n statusCode,\n },\n },\n }, service);\n const http = {};\n if (statusCode) {\n http.response = {};\n http.response.status = statusCode;\n }\n if (((_b = res === null || res === void 0 ? void 0 : res.response) === null || _b === void 0 ? void 0 : _b.headers) && ((_c = res === null || res === void 0 ? void 0 : res.response) === null || _c === void 0 ? void 0 : _c.headers['content-length']) !== undefined) {\n if (!http.response) {\n http.response = {};\n }\n http.response.content_length = safeParseInt(res.response.headers['content-length']);\n }\n return [aws, http];\n};\nfunction addFlags(http, subsegment, err) {\n var _a, _b, _c;\n if (err && (0, service_error_classification_1.isThrottlingError)(err)) {\n subsegment.addThrottleFlag();\n }\n else if (safeParseInt((_a = http.response) === null || _a === void 0 ? void 0 : _a.status) === 429 || safeParseInt((_b = err === null || err === void 0 ? void 0 : err.$metadata) === null || _b === void 0 ? void 0 : _b.httpStatusCode) === 429) {\n subsegment.addThrottleFlag();\n }\n const cause = (0, utils_1.getCauseTypeFromHttpStatus)(safeParseInt((_c = http.response) === null || _c === void 0 ? void 0 : _c.status));\n if (cause === 'fault') {\n subsegment.addFaultFlag();\n }\n else if (cause === 'error') {\n subsegment.addErrorFlag();\n }\n}\nconst getXRayMiddleware = (config, manualSegment) => (next, context) => async (args) => {\n const segment = contextUtils.isAutomaticMode() ? contextUtils.resolveSegment() : manualSegment;\n const { clientName, commandName } = context;\n const operation = commandName.slice(0, -7); // Strip trailing \"Command\" string\n const service = clientName.slice(0, -6); // Strip trailing \"Client\" string\n if (!segment) {\n const output = service + '.' + operation.charAt(0).toLowerCase() + operation.slice(1);\n if (!contextUtils.isAutomaticMode()) {\n logger.getLogger().info('Call ' + output + ' requires a segment object' +\n ' passed to captureAWSv3Client for tracing in manual mode. Ignoring.');\n }\n else {\n logger.getLogger().info('Call ' + output +\n ' is missing the sub/segment context for automatic mode. Ignoring.');\n }\n return next(args);\n }\n let subsegment;\n if (segment.notTraced) {\n subsegment = segment.addNewSubsegmentWithoutSampling(service);\n }\n else {\n subsegment = segment.addNewSubsegment(service);\n }\n subsegment.addAttribute('namespace', 'aws');\n const parent = (segment instanceof subsegment_1.default ? segment.segment : segment);\n args.request.headers['X-Amzn-Trace-Id'] = (0, querystring_1.stringify)({\n Root: parent.trace_id,\n Parent: subsegment.id,\n Sampled: subsegment.notTraced ? '0' : '1',\n }, ';');\n let res;\n try {\n res = await next(args);\n if (!res) {\n throw new Error('Failed to get response from instrumented AWS Client.');\n }\n const [aws, http] = await buildAttributesFromMetadata(service, operation, await config.region(), res, null);\n subsegment.addAttribute('aws', aws);\n subsegment.addAttribute('http', http);\n addFlags(http, subsegment);\n subsegment.close();\n return res;\n }\n catch (err) {\n if (err.$metadata) {\n const [aws, http] = await buildAttributesFromMetadata(service, operation, await config.region(), null, err);\n subsegment.addAttribute('aws', aws);\n subsegment.addAttribute('http', http);\n addFlags(http, subsegment, err);\n }\n const errObj = { message: err.message, name: err.name, stack: err.stack || new Error().stack };\n subsegment.close(errObj, true);\n throw err;\n }\n};\nconst xRayMiddlewareOptions = {\n name: XRAY_PLUGIN_NAME,\n step: 'build',\n};\nconst getXRayPlugin = (config, manualSegment) => ({\n applyToStack: (stack) => {\n stack.add(getXRayMiddleware(config, manualSegment), xRayMiddlewareOptions);\n },\n});\n/**\n * Instruments AWS SDK V3 clients with X-Ray via middleware.\n *\n * @param client - AWS SDK V3 client to instrument\n * @param manualSegment - Parent segment or subsegment that is passed in for manual mode users\n * @returns - the client with the X-Ray instrumentation middleware added to its middleware stack\n */\nfunction captureAWSClient(client, manualSegment) {\n // Remove existing middleware to ensure operation is idempotent\n client.middlewareStack.remove(XRAY_PLUGIN_NAME);\n client.middlewareStack.use(getXRayPlugin(client.config, manualSegment));\n return client;\n}\nexports.captureAWSClient = captureAWSClient;\n", "\"use strict\";\n/**\n * @module http_p\n */\n/**\n * This module patches the HTTP and HTTPS node built-in libraries and returns a copy of the module with tracing enabled.\n */\nvar url = require('url');\nvar contextUtils = require('../context_utils');\nvar Utils = require('../utils');\nvar logger = require('../logger');\nvar events = require('events');\n/**\n * Wraps the http/https.request() and .get() calls to automatically capture information for the segment.\n * This patches the built-in HTTP and HTTPS modules globally. If using a 3rd party HTTP library,\n * it should still use HTTP under the hood. Be sure to patch globally before requiring the 3rd party library.\n * 3rd party library compatibility is best effort. Some incompatibility issues may arise.\n * @param {http|https} module - The built in Node.js HTTP or HTTPS module.\n * @param {boolean} downstreamXRayEnabled - when true, adds a \"traced:true\" property to the subsegment\n * so the AWS X-Ray service expects a corresponding segment from the downstream service.\n * @param {function} subsegmentCallback - a callback that is called with the subsegment, the Node.js\n * http.ClientRequest, the Node.js http.IncomingMessage (if a response was received) and any error issued,\n * allowing custom annotations and metadata to be added.\n * to be added to the subsegment.\n * @alias module:http_p.captureHTTPsGlobal\n */\nvar captureHTTPsGlobal = function captureHTTPsGlobal(module, downstreamXRayEnabled, subsegmentCallback) {\n if (!module.__request) {\n enableCapture(module, downstreamXRayEnabled, subsegmentCallback);\n }\n};\n/**\n * Wraps the http/https.request() and .get() calls to automatically capture information for the segment.\n * Returns an instance of the HTTP or HTTPS module that is patched.\n * @param {http|https} module - The built in Node.js HTTP or HTTPS module.\n * @param {boolean} downstreamXRayEnabled - when true, adds a \"traced:true\" property to the subsegment\n * so the AWS X-Ray service expects a corresponding segment from the downstream service.\n * @param {function} subsegmentCallback - a callback that is called with the subsegment, the Node.js\n * http.ClientRequest, and the Node.js http.IncomingMessage to allow custom annotations and metadata\n * to be added to the subsegment.\n * @alias module:http_p.captureHTTPs\n * @returns {http|https}\n */\nvar captureHTTPs = function captureHTTPs(module, downstreamXRayEnabled, subsegmentCallback) {\n if (module.__request) {\n return module;\n }\n var tracedModule = {};\n Object.keys(module).forEach(function (val) {\n tracedModule[val] = module[val];\n });\n enableCapture(tracedModule, downstreamXRayEnabled, subsegmentCallback);\n return tracedModule;\n};\nfunction enableCapture(module, downstreamXRayEnabled, subsegmentCallback) {\n function captureOutgoingHTTPs(baseFunc, ...args) {\n let options;\n let callback;\n let hasUrl;\n let urlObj;\n let arg0 = args[0];\n if (typeof args[1] === 'object') {\n hasUrl = true;\n urlObj = typeof arg0 === 'string' ? new url.URL(arg0) : arg0;\n options = args[1],\n callback = args[2];\n }\n else {\n hasUrl = false;\n options = arg0;\n callback = args[1];\n }\n // Short circuit if the HTTP request has no options or is already being captured\n if (!options || (options.headers && (options.headers['X-Amzn-Trace-Id']))) {\n return baseFunc(...args);\n }\n // Case of calling a string URL without options, e.g.: http.request('http://amazon.com', callback)\n if (typeof options === 'string') {\n options = new url.URL(options);\n }\n if (!hasUrl) {\n urlObj = options;\n }\n const parent = contextUtils.resolveSegment(contextUtils.resolveManualSegmentParams(options));\n const hostname = options.hostname || options.host || urlObj.hostname || urlObj.host || 'Unknown host';\n if (!parent) {\n let output = '[ host: ' + hostname;\n output = options.method ? (output + ', method: ' + options.method) : output;\n output += ', path: ' + (urlObj.pathname || Utils.stripQueryStringFromPath(options.path)) + ' ]';\n if (!contextUtils.isAutomaticMode()) {\n logger.getLogger().info('Options for request ' + output +\n ' requires a segment object on the options params as \"XRaySegment\" for tracing in manual mode. Ignoring.');\n }\n else {\n logger.getLogger().info('Options for request ' + output +\n ' is missing the sub/segment context for automatic mode. Ignoring.');\n }\n // Options are not modified, only parsed for logging. We can pass in the original arguments.\n return baseFunc(...args);\n }\n let subsegment;\n if (parent.notTraced) {\n subsegment = parent.addNewSubsegmentWithoutSampling(hostname);\n }\n else {\n subsegment = parent.addNewSubsegment(hostname);\n }\n const root = parent.segment ? parent.segment : parent;\n subsegment.namespace = 'remote';\n if (!options.headers) {\n options.headers = {};\n }\n options.headers['X-Amzn-Trace-Id'] = 'Root=' + root.trace_id + ';Parent=' + subsegment.id +\n ';Sampled=' + (subsegment.notTraced ? '0' : '1');\n const errorCapturer = function errorCapturer(e) {\n if (subsegmentCallback) {\n subsegmentCallback(subsegment, this, null, e);\n }\n if (subsegment.http && subsegment.http.response) {\n if (Utils.getCauseTypeFromHttpStatus(subsegment.http.response.status) === 'error') {\n subsegment.addErrorFlag();\n }\n subsegment.close(e, true);\n }\n else {\n const madeItToDownstream = (e.code !== 'ECONNREFUSED');\n subsegment.addRemoteRequestData(this, null, madeItToDownstream && downstreamXRayEnabled);\n subsegment.close(e);\n }\n };\n const optionsCopy = Utils.objectWithoutProperties(options, ['Segment'], true);\n let req = baseFunc(...(hasUrl ? [arg0, optionsCopy] : [options]), function (res) {\n res.on('end', function () {\n if (subsegmentCallback) {\n subsegmentCallback(subsegment, this.req, res);\n }\n if (res.statusCode === 429) {\n subsegment.addThrottleFlag();\n }\n const cause = Utils.getCauseTypeFromHttpStatus(res.statusCode);\n if (cause) {\n subsegment[cause] = true;\n }\n subsegment.addRemoteRequestData(res.req, res, !!downstreamXRayEnabled);\n subsegment.close();\n });\n if (typeof callback === 'function') {\n if (contextUtils.isAutomaticMode()) {\n const session = contextUtils.getNamespace();\n session.run(function () {\n contextUtils.setSegment(subsegment);\n callback(res);\n });\n }\n else {\n callback(res);\n }\n // if no callback provided by user application, AND no explicit response listener\n // added by user application, then we consume the response so the 'end' event fires\n // See: https://nodejs.org/api/http.html#http_class_http_clientrequest\n }\n else if (res.req && res.req.listenerCount('response') === 0) {\n res.resume();\n }\n });\n // Use errorMonitor if available (in Node 12.17+), otherwise fall back to standard error listener\n // See: https://nodejs.org/dist/latest-v12.x/docs/api/events.html#events_eventemitter_errormonitor\n req.on(events.errorMonitor || 'error', errorCapturer);\n return req;\n }\n module.__request = module.request;\n function captureHTTPsRequest(...args) {\n return captureOutgoingHTTPs(module.__request, ...args);\n }\n module.__get = module.get;\n function captureHTTPsGet(...args) {\n return captureOutgoingHTTPs(module.__get, ...args);\n }\n Object.defineProperties(module, {\n request: { value: captureHTTPsRequest, configurable: true, enumerable: true, writable: true },\n get: { value: captureHTTPsGet, configurable: true, enumerable: true, writable: true },\n });\n}\nmodule.exports.captureHTTPsGlobal = captureHTTPsGlobal;\nmodule.exports.captureHTTPs = captureHTTPs;\n", "\"use strict\";\n/**\n * @module promise_p\n */\n/**\n * This module patches native Promise libraries provided by V8 engine\n * so all subsegments generated within Promise are attached to the correct parent.\n */\nconst contextUtils = require('../context_utils');\nconst originalThen = Symbol('original then');\nconst originalCatch = Symbol('original catch');\nfunction patchPromise(Promise) {\n const then = Promise.prototype.then;\n if (!then[originalThen]) {\n Promise.prototype.then = function (onFulfilled, onRejected) {\n if (contextUtils.isAutomaticMode()\n && tryGetCurrentSegment()) {\n const ns = contextUtils.getNamespace();\n onFulfilled = onFulfilled && ns.bind(onFulfilled);\n onRejected = onRejected && ns.bind(onRejected);\n }\n return then.call(this, onFulfilled, onRejected);\n };\n Promise.prototype.then[originalThen] = then;\n }\n const origCatch = Promise.prototype.catch;\n if (origCatch && !origCatch[originalCatch]) {\n Promise.prototype.catch = function (onRejected) {\n if (contextUtils.isAutomaticMode()\n && tryGetCurrentSegment()) {\n const ns = contextUtils.getNamespace();\n onRejected = onRejected && ns.bind(onRejected);\n }\n return origCatch.call(this, onRejected);\n };\n Promise.prototype.catch[originalCatch] = origCatch;\n }\n}\nfunction unpatchPromise(Promise) {\n const then = Promise.prototype.then;\n if (then[originalThen]) {\n Promise.prototype.then = then[originalThen];\n }\n const origCatch = Promise.prototype.catch;\n if (origCatch && origCatch[originalCatch]) {\n Promise.prototype.catch = origCatch[originalCatch];\n }\n}\nfunction tryGetCurrentSegment() {\n try {\n return contextUtils.getSegment();\n }\n catch (e) {\n return undefined;\n }\n}\nfunction capturePromise() {\n patchPromise(Promise);\n}\nfunction uncapturePromise() {\n unpatchPromise(Promise);\n}\ncapturePromise.patchThirdPartyPromise = patchPromise;\nmodule.exports.capturePromise = capturePromise;\nmodule.exports.uncapturePromise = uncapturePromise;\n", "\"use strict\";\n/**\n * Represents a SQL database call.\n * @constructor\n * @param {string} databaseVer - The version on the database (user supplied).\n * @param {string} driverVer - The version on the database driver (user supplied).\n * @param {string} user - The user associated to the database call.\n * @param {string} queryType - The SQL query type.\n */\nfunction SqlData(databaseVer, driverVer, user, url, queryType) {\n this.init(databaseVer, driverVer, user, url, queryType);\n}\nSqlData.prototype.init = function init(databaseVer, driverVer, user, url, queryType) {\n if (databaseVer) {\n this.database_version = databaseVer;\n }\n if (driverVer) {\n this.driver_version = driverVer;\n }\n if (queryType) {\n this.preparation = queryType;\n }\n this.url = url;\n this.user = user;\n};\nmodule.exports = SqlData;\n", "\"use strict\";\nvar contextUtils = require('./context_utils');\nvar logging = require('./logger');\nvar segmentUtils = require('./segments/segment_utils');\nvar utils = require('./utils');\nvar LambdaEnv = require('./env/aws_lambda');\n// Import Data from package.json,\n// If the importing of package.json fails leave\n// pkginfo as an empty object\nvar pkginfo = {};\ntry {\n pkginfo = require('../../package.json');\n}\ncatch (err) {\n logging.getLogger().debug('Failed to load SDK data:', err);\n}\nvar UNKNOWN = 'unknown';\n/**\n * A module representing the AWSXRay SDK.\n * @namespace AWSXRay\n */\nvar AWSXRay = {\n /**\n * @memberof AWSXRay\n * @type {object}\n * @namespace AWSXRay.plugins\n */\n plugins: {\n /**\n * Exposes the AWS EC2 plugin.\n * @memberof AWSXRay.plugins\n */\n EC2Plugin: require('./segments/plugins/ec2_plugin'),\n /**\n * Exposes the AWS ECS plugin.\n * @memberof AWSXRay.plugins\n */\n ECSPlugin: require('./segments/plugins/ecs_plugin'),\n /**\n * Exposes the AWS Elastic Beanstalk plugin.\n * @memberof AWSXRay.plugins\n */\n ElasticBeanstalkPlugin: require('./segments/plugins/elastic_beanstalk_plugin'),\n },\n /**\n * Enables use of plugins to capture additional data for segments.\n * @param {Array} plugins - A configurable subset of AWSXRay.plugins.\n * @memberof AWSXRay\n * @see AWSXRay.plugins\n */\n config: function (plugins) {\n var pluginData = {};\n plugins.forEach(function (plugin) {\n plugin.getData(function (data) {\n if (data) {\n for (var attribute in data) {\n pluginData[attribute] = data[attribute];\n }\n }\n });\n segmentUtils.setOrigin(plugin.originName);\n segmentUtils.setPluginData(pluginData);\n });\n },\n /**\n * Overrides the default whitelisting file to specify what params to capture on each AWS Service call.\n * If a service or API is not listed, no additional data is captured.\n * The base whitelisting file can be found at /lib/resources/aws_whitelist.json\n * @param {string|Object} source - The path to the custom whitelist file, or a whitelist source JSON object.\n * @memberof AWSXRay\n */\n setAWSWhitelist: require('./segments/attributes/aws').setAWSWhitelist,\n /**\n * Appends to the current whitelisting file.\n * In the case of a duplicate service API listed, the new source will override the previous values.\n * @param {string|Object} source - The path to the custom whitelist file, or a whitelist source JSON object.\n * @memberof AWSXRay\n */\n appendAWSWhitelist: require('./segments/attributes/aws').appendAWSWhitelist,\n /**\n * Overrides the default streaming threshold (100).\n * The threshold represents the maximum number of subsegments on a single segment before\n * the SDK begins to send the completed subsegments out of band of the main segment.\n * Reduce this threshold if you see the 'Segment too large to send' error.\n * @param {number} threshold - The new threshold to use.\n * @memberof AWSXRay\n */\n setStreamingThreshold: segmentUtils.setStreamingThreshold,\n /**\n * Set your own logger for the SDK.\n * @param {Object} logger - A logger which responds to debug/info/warn/error calls.\n * @memberof AWSXRay\n */\n setLogger: logging.setLogger,\n /**\n * Gets the set logger for the SDK.\n * @memberof AWSXRay\n */\n getLogger: logging.getLogger,\n /**\n * Configures the address and port the daemon is expected to be on.\n * @param {string} address - Address of the daemon the segments should be sent to. Expects 'x.x.x.x', ':yyyy' or 'x.x.x.x:yyyy' IPv4 formats.\n * @module DaemonConfig\n * @memberof AWSXRay\n * @function\n * @see module:DaemonConfig.setDaemonAddress\n */\n setDaemonAddress: require('./daemon_config').setDaemonAddress,\n /**\n * @param {string} name - The name of the new subsegment.\n * @param {function} fcn - The function conext to wrap.\n * @param {Segment|Subsegment} [parent] - The parent for the new subsegment, for manual mode.\n * @memberof AWSXRay\n * @function\n * @see module:capture.captureFunc\n */\n captureFunc: require('./capture').captureFunc,\n /**\n * @param {string} name - The name of the new subsegment.\n * @param {function} fcn - The function conext to wrap.\n * @param {Segment|Subsegment} [parent] - The parent for the new subsegment, for manual mode.\n * @memberof AWSXRay\n * @function\n * @see module:capture.captureAsyncFunc\n */\n captureAsyncFunc: require('./capture').captureAsyncFunc,\n /**\n * @param {string} name - The name of the new subsegment.\n * @param {function} fcn - The function conext to wrap.\n * @param {Segment|Subsegment} [parent] - The parent for the new subsegment, for manual mode.\n * @memberof AWSXRay\n * @function\n * @see module:capture.captureCallbackFunc\n */\n captureCallbackFunc: require('./capture').captureCallbackFunc,\n /**\n * @param {AWS} awssdk - The Javascript AWS SDK.\n * @memberof AWSXRay\n * @function\n * @see module:aws_p.captureAWS\n */\n captureAWS: require('./patchers/aws_p').captureAWS,\n /**\n * @param {AWS.Service} service - An instance of a AWS service to wrap.\n * @memberof AWSXRay\n * @function\n * @see module:aws_p.captureAWSClient\n */\n captureAWSClient: require('./patchers/aws_p').captureAWSClient,\n /**\n * @param {AWSv3.Service} service - An instance of a AWS SDK v3 service to wrap.\n * @param {Segment|Subsegment} segment - Optional segment for manual mode.\n * @memberof AWSXRay\n * @function\n * @see module:aws3_p.captureAWSClient\n */\n captureAWSv3Client: require('./patchers/aws3_p').captureAWSClient,\n /**\n * @param {http|https} module - The built in Node.js HTTP or HTTPS module.\n * @memberof AWSXRay\n * @function\n * @returns {http|https}\n * @see module:http_p.captureHTTPs\n */\n captureHTTPs: require('./patchers/http_p').captureHTTPs,\n /**\n * @param {http|https} module - The built in Node.js HTTP or HTTPS module.\n * @memberof AWSXRay\n * @function\n * @see module:http_p.captureHTTPsGlobal\n */\n captureHTTPsGlobal: require('./patchers/http_p').captureHTTPsGlobal,\n /**\n * @memberof AWSXRay\n * @function\n * @see module:promise_p.capturePromise\n */\n capturePromise: require('./patchers/promise_p').capturePromise,\n /**\n * Exposes various helper methods.\n * @memberof AWSXRay\n * @function\n * @see module:utils\n */\n utils: utils,\n /**\n * @memberof AWSXRay\n * @type {object}\n * @namespace AWSXRay.database\n */\n database: {\n /**\n * Exposes the SqlData class.\n * @memberof AWSXRay.database\n * @see SqlData\n */\n SqlData: require('./database/sql_data'),\n },\n /**\n * Exposes the Middleware Utils class.\n * @memberof AWSXRay\n * @function\n * @see module:mw_utils\n */\n middleware: require('./middleware/mw_utils'),\n /**\n * Gets the current namespace of the context.\n * Used for supporting functions that can be used in automatic mode.\n * @memberof AWSXRay\n * @function\n * @returns {Segment|Subsegment}\n * @see module:context_utils.getNamespace\n */\n getNamespace: contextUtils.getNamespace,\n /**\n * Resolves the current segment or subsegment, checks manual and automatic modes.\n * Used for supporting functions that can be used in both manual and automatic modes.\n * @memberof AWSXRay\n * @function\n * @returns {Segment|Subsegment}\n * @see module:context_utils.resolveSegment\n */\n resolveSegment: contextUtils.resolveSegment,\n /**\n * Returns the current segment or subsegment. For use with automatic mode only.\n * @memberof AWSXRay\n * @function\n * @returns {Segment|Subsegment}\n * @see module:context_utils.getSegment\n */\n getSegment: contextUtils.getSegment,\n /**\n * Sets the current segment or subsegment. For use with automatic mode only.\n * @memberof AWSXRay\n * @function\n * @see module:context_utils.setSegment\n */\n setSegment: contextUtils.setSegment,\n /**\n * Returns true if automatic mode is enabled, otherwise false.\n * @memberof AWSXRay\n * @function\n * @see module:context_utils.isAutomaticMode\n */\n isAutomaticMode: contextUtils.isAutomaticMode,\n /**\n * Enables automatic mode. Automatic mode uses 'cls-hooked'.\n * @see https://github.com/jeff-lewis/cls-hooked\n * @memberof AWSXRay\n * @function\n * @see module:context_utils.enableAutomaticMode\n */\n enableAutomaticMode: contextUtils.enableAutomaticMode,\n /**\n * Disables automatic mode. Current segment or subsegment must be passed manually\n * via the parent optional on captureFunc, captureAsyncFunc etc.\n * @memberof AWSXRay\n * @function\n * @see module:context_utils.enableManualMode\n */\n enableManualMode: contextUtils.enableManualMode,\n /**\n * Sets the context missing strategy.\n * @param {Object} strategy - The strategy to set. This object's contextMissing function will be called whenever trace context is not found.\n */\n setContextMissingStrategy: contextUtils.setContextMissingStrategy,\n /**\n * Exposes the segment class.\n * @memberof AWSXRay\n * @function\n */\n Segment: require('./segments/segment'),\n /**\n * Exposes the subsegment class.\n * @memberof AWSXRay\n * @see Subsegment\n */\n Subsegment: require('./segments/attributes/subsegment'),\n SegmentUtils: segmentUtils\n};\n/**\n * Exposes the IncomingRequestData, to capture incoming request data.\n * For use with middleware.\n * @memberof AWSXRay.middleware\n * @see IncomingRequestData\n */\nAWSXRay.middleware.IncomingRequestData = require('./middleware/incoming_request_data'),\n (function () {\n var data = {\n runtime: (process.release && process.release.name) ? process.release.name : UNKNOWN,\n runtime_version: process.version,\n version: process.env.npm_package_version || UNKNOWN,\n name: process.env.npm_package_name || UNKNOWN\n };\n var sdkData = {\n sdk: 'X-Ray for Node.js',\n sdk_version: pkginfo.version ? pkginfo.version : UNKNOWN,\n package: pkginfo.name ? pkginfo.name : UNKNOWN,\n };\n segmentUtils.setSDKData(sdkData);\n segmentUtils.setServiceData(data);\n if (process.env.LAMBDA_TASK_ROOT) {\n LambdaEnv.init();\n }\n })();\nmodule.exports = AWSXRay;\n", "\"use strict\";\n// Convenience file to require the SDK from the root of the repository\nmodule.exports = require('./aws-xray');\n", "import type { Context } from 'aws-lambda';\nimport type * as AWS from 'aws-sdk';\nimport * as aws from '../shared/aws.lambda-shared';\nimport { METADATA_KEY_SUFFIX, PACKAGE_KEY_SUFFIX } from '../shared/constants';\nimport { requireEnv } from '../shared/env.lambda-shared';\nimport { integrity } from '../shared/integrity.lambda-shared';\nimport { now } from '../shared/time.lambda-shared';\n\ninterface Input extends AWS.S3.Object {\n Key: string;\n}\n\nexport async function handler(event: Input, context: Context) {\n console.log('Event: ', JSON.stringify(event, null, 2));\n\n const bucket = requireEnv('BUCKET_NAME');\n const queueUrl = requireEnv('QUEUE_URL');\n const age = requireEnv('REPROCESS_AGE_MILLIS');\n\n console.log(`Download metadata object at ${bucket}/${event.Key}`);\n const { Body: jsonMetadata } = await aws\n .s3()\n .getObject({ Bucket: bucket, Key: event.Key })\n .promise();\n if (jsonMetadata == null) {\n console.error(`No body found in ${bucket}/${event.Key}, aborting.`);\n return;\n }\n const { date: time } = JSON.parse(jsonMetadata.toString('utf-8'));\n\n const tarballKey = `${event.Key.substr(\n 0,\n event.Key.length - METADATA_KEY_SUFFIX.length\n )}${PACKAGE_KEY_SUFFIX}`;\n\n if (!isYoungEnough(time, Number(age))) {\n console.log(\n `Tarball ${tarballKey} has been published too far in the past (${age}). Not reprocessing`\n );\n return;\n }\n console.log(`Download tarball object at ${bucket}/${tarballKey}`);\n const { Body: tarball, VersionId: versionId } = await aws\n .s3()\n .getObject({ Bucket: bucket, Key: tarballKey })\n .promise();\n if (tarball == null) {\n console.error(`No body found in ${bucket}/${tarballKey}, aborting.`);\n return;\n }\n\n const ingestionInput = integrity(\n {\n tarballUri: `s3://${bucket}/${tarballKey}${\n versionId ? `?versionId=${versionId}` : ''\n }`,\n time,\n reIngest: true,\n metadata: {\n reprocessRequestId: context.awsRequestId,\n reprocessLogGroup: context.logGroupName,\n reprocessLogStream: context.logStreamName,\n },\n },\n Buffer.from(tarball as any)\n );\n\n console.log(\n `Sending message to reprocess queue: ${JSON.stringify(\n ingestionInput,\n null,\n 2\n )}`\n );\n return aws\n .sqs()\n .sendMessage({\n QueueUrl: queueUrl,\n MessageBody: JSON.stringify(ingestionInput, null, 2),\n MessageAttributes: {\n 'Reprocess-RequestID': {\n DataType: 'String',\n StringValue: context.awsRequestId,\n },\n 'Reprocess-LogGroup': {\n DataType: 'String',\n StringValue: context.logGroupName,\n },\n 'Reprocess-LogStream': {\n DataType: 'String',\n StringValue: context.logStreamName,\n },\n },\n })\n .promise();\n}\n\nfunction isYoungEnough(publishDate: string, historyTimeWindow: number) {\n const publish = new Date(publishDate).getTime();\n return publish + historyTimeWindow >= now();\n}\n", "import * as _AWS from 'aws-sdk';\nimport * as AWSXRay from 'aws-xray-sdk-core';\n\n// Do nothing if there is no XRay trace context\nAWSXRay.setContextMissingStrategy(() => {});\n\nconst AWS = AWSXRay.captureAWS(_AWS);\n\nlet _ecs: AWS.ECS | undefined;\nlet _s3: AWS.S3 | undefined;\nlet _sqs: AWS.SQS | undefined;\nlet _sfn: AWS.StepFunctions | undefined;\nlet _lambda: AWS.Lambda | undefined;\nlet _codeArtifact: AWS.CodeArtifact | undefined;\n\nexport function ecs(): AWS.ECS {\n if (_ecs == null) {\n _ecs = new AWS.ECS();\n }\n return _ecs;\n}\n\nexport function s3(): AWS.S3 {\n if (_s3 == null) {\n _s3 = new AWS.S3();\n }\n return _s3;\n}\n\n/**\n * Checks whether an object exists in S3 at the provided bucket and key.\n */\nexport function s3ObjectExists(bucket: string, key: string): Promise<boolean> {\n return s3()\n .headObject({\n Bucket: bucket,\n Key: key,\n })\n .promise()\n .then(\n () => true,\n (cause) => {\n if (cause.code === 'NotFound') {\n return false;\n }\n return Promise.reject(cause);\n }\n );\n}\n\nexport function sqs(): AWS.SQS {\n if (_sqs == null) {\n _sqs = new AWS.SQS();\n }\n return _sqs;\n}\n\nexport function stepFunctions(): AWS.StepFunctions {\n if (_sfn == null) {\n _sfn = new AWS.StepFunctions();\n }\n return _sfn;\n}\n\nexport function lambda(): AWS.Lambda {\n if (_lambda == null) {\n _lambda = new AWS.Lambda();\n }\n return _lambda;\n}\n\nexport function codeArtifact(): AWS.CodeArtifact {\n if (_codeArtifact == null) {\n _codeArtifact = new AWS.CodeArtifact();\n }\n return _codeArtifact;\n}\n\n/**\n * Resets all clients vended by this module. This is useful in unit tests when\n * `aws-sdk-mocks` is used, so that new mocks are injected as intended.\n */\nexport function reset(): void {\n _ecs = _s3 = _sqs = _sfn = _lambda = _codeArtifact = undefined;\n}\n", "/**\n * Supported languages to generate documentation in.\n */\nexport class DocumentationLanguage {\n /**\n * TypeScript.\n */\n public static readonly TYPESCRIPT = new DocumentationLanguage('typescript');\n\n /**\n * Python.\n */\n public static readonly PYTHON = new DocumentationLanguage('python');\n\n /**\n * Java.\n */\n public static readonly JAVA = new DocumentationLanguage('java');\n\n /**\n * CSharp.\n */\n public static readonly CSHARP = new DocumentationLanguage('csharp', 'dotnet');\n\n /**\n * Go.\n */\n public static readonly GO = new DocumentationLanguage('go');\n\n /**\n * All supported languages.\n */\n public static readonly ALL = [\n DocumentationLanguage.TYPESCRIPT,\n DocumentationLanguage.PYTHON,\n DocumentationLanguage.JAVA,\n DocumentationLanguage.CSHARP,\n DocumentationLanguage.GO,\n ] as const;\n\n /**\n * Transform a literal string to the `DocumentationLanguage` object.\n *\n * Throws an `UnsupportedLanguageError` if the language is not supported.\n */\n public static fromString(lang: string) {\n switch (lang) {\n case DocumentationLanguage.TYPESCRIPT.toString():\n return DocumentationLanguage.TYPESCRIPT;\n case DocumentationLanguage.PYTHON.toString():\n return DocumentationLanguage.PYTHON;\n case DocumentationLanguage.JAVA.toString():\n return DocumentationLanguage.JAVA;\n case DocumentationLanguage.CSHARP.toString():\n case DocumentationLanguage.CSHARP.targetName:\n return DocumentationLanguage.CSHARP;\n case DocumentationLanguage.GO.toString():\n return DocumentationLanguage.GO;\n default:\n throw new UnsupportedLanguageError(lang, DocumentationLanguage.ALL);\n }\n }\n\n private constructor(\n public readonly name: string,\n public readonly targetName = name\n ) {}\n\n public toString() {\n return this.name;\n }\n}\n\nexport class UnsupportedLanguageError extends Error {\n constructor(lang: string, supported: readonly DocumentationLanguage[]) {\n super(\n `Unsupported language: ${lang}. Supported languages are: [${supported}]`\n );\n }\n}\n", "/*\n * IMPORTANT: This file is used both by bundled lambda functions and by\n * constructs. This means it should not directly or transitively import anything\n * not part of the package's `dependencies`, such as the `aws-sdk`.\n */\n\nimport { DocumentationLanguage } from './language';\n\n/**\n * Key prefix for the package data storage.\n */\nexport const STORAGE_KEY_PREFIX = 'data/';\n\n/**\n * Key suffix for storing npm package bundles.\n */\nexport const PACKAGE_KEY_SUFFIX = '/package.tgz';\n\n/**\n * Key suffix for storing npm package metadata.\n */\nexport const METADATA_KEY_SUFFIX = '/metadata.json';\n\n/**\n * The key suffix for (TypeScript) assembly files\n */\nexport const ASSEMBLY_KEY_SUFFIX = '/assembly.json';\n\n/**\n * The key suffix release notes file\n */\nexport const PACKAGE_RELEASE_NOTES_KEY_SUFFIX = '/release-notes.md';\n\n/**\n * The key suffix for a TypeScript doc artifact (root module).\n */\nexport const DOCS_KEY_SUFFIX_TYPESCRIPT = docsKeySuffix(\n DocumentationLanguage.TYPESCRIPT\n);\n\n/**\n * The key suffix for a Python doc artifact (root module).\n */\nexport const DOCS_KEY_SUFFIX_PYTHON = docsKeySuffix(\n DocumentationLanguage.PYTHON\n);\n\n/**\n * The key suffix for a Java doc artifact (root module).\n */\nexport const DOCS_KEY_SUFFIX_JAVA = docsKeySuffix(DocumentationLanguage.JAVA);\n\n/**\n * The key suffix for a Dotnet doc artifact (root module).\n */\nexport const DOCS_KEY_SUFFIX_CSHARP = docsKeySuffix(\n DocumentationLanguage.CSHARP\n);\n\n/**\n * The key suffix for a Go doc artifact (root module).\n */\nexport const DOCS_KEY_SUFFIX_GO = docsKeySuffix(DocumentationLanguage.GO);\n\n/**\n * The key suffix matching any documentation artifact.\n */\nexport const DOCS_KEY_SUFFIX_ANY = docsKeySuffix('*');\n\n/**\n * Key for RSS document\n */\nexport const FEED_RSS_KEY = 'rss';\n\n/**\n * Key for RSS document\n */\nexport const FEED_ATOM_KEY = 'atom';\n\n/**\n * Key for badge image endpoint.\n */\nexport const BADGE_KEY = 'badge';\n\n/**\n * Env variable name used to set construct hub url for RSS/ATOM feed\n */\nexport const CONSTRUCT_HUB_URL_ENV_VAR_NAME = 'CONSTRUCT_HUB_URL';\n\nexport const CONSTRUCT_HUB_FEED_TITLE = 'CONSTRUCT_HUB_FEED_TITLE';\n\nexport const CONSTRUCT_HUB_FEED_DESCRIPTION = 'CONSTRUCT_HUB_FEED_DESCRIPTION';\n\n/**\n * Return the S3 object key prefix for a specific package name and optionally a\n * version. Note that the prefix does not end with a \"/\" so you will likely want\n * to add that if you want to match a specific set of objects.\n */\nexport function getObjectKeyPrefix(\n packageName: string,\n packageVersion?: string\n) {\n let key = `${STORAGE_KEY_PREFIX}${packageName}`;\n if (packageVersion) {\n key += `/v${packageVersion}`;\n }\n\n return key;\n}\n\n/**\n * Resolves the set of S3 object keys use for a specific package/version.\n */\nexport function getObjectKeys(packageName: string, packageVersion: string) {\n const prefix = getObjectKeyPrefix(packageName, packageVersion);\n return {\n assemblyKey: `${prefix}${ASSEMBLY_KEY_SUFFIX}`,\n packageKey: `${prefix}${PACKAGE_KEY_SUFFIX}`,\n metadataKey: `${prefix}${METADATA_KEY_SUFFIX}`,\n releaseNotesKey: `${prefix}${PACKAGE_RELEASE_NOTES_KEY_SUFFIX}`,\n };\n}\n\n/**\n * The key suffix for documentation artifacts by language and submodule.\n */\nexport function docsKeySuffix(\n lang?: DocumentationLanguage | '*',\n submodule?: string,\n fileExt?: string\n) {\n return `/docs-${submodule ? `${submodule}-` : ''}${lang}.${fileExt ?? '*'}`;\n}\n\n/**\n * The key suffix for a corrupted assembly marker by language and submodule.\n */\nexport function corruptAssemblyKeySuffix(\n lang?: DocumentationLanguage | '*',\n submodule?: string,\n fileExt?: string\n) {\n return `${docsKeySuffix(lang, submodule, fileExt)}${CORRUPT_ASSEMBLY_SUFFIX}`;\n}\n\n/**\n * The key suffix for a not supported marker by language and submodule.\n */\nexport function notSupportedKeySuffix(\n lang?: DocumentationLanguage | '*',\n submodule?: string,\n fileExt?: string\n) {\n return `${docsKeySuffix(lang, submodule, fileExt)}${NOT_SUPPORTED_SUFFIX}`;\n}\n\n/**\n * Key suffix for beacon files when a particular feature is not supported for\n * the particular package (i.e: Python docs for a package that does not have a\n * Python target configured).\n */\nexport const NOT_SUPPORTED_SUFFIX = '.not-supported';\n\n/**\n * Key suffix for beacon files marking that a language specific assembly is corrupt\n * and we cannot generate docs from it.\n */\nexport const CORRUPT_ASSEMBLY_SUFFIX = '.corruptassembly';\n\n/**\n * Key suffix for a beacon file when a package cannot be installed.\n */\nexport const UNINSTALLABLE_PACKAGE_SUFFIX = '/uninstallable';\n\n/**\n * Name of the error denoting an unprocessable package that should be diverted away from the DLQ.\n */\nexport const UNPROCESSABLE_PACKAGE_ERROR_NAME = 'UnprocessablePackageError';\n\n/**\n * The key for the catalog document.\n */\nexport const CATALOG_KEY = 'catalog.json';\n\n/** Key for feed metadata document*/\nexport const FEED_METADATA_KEY = 'feed-metadata.json';\n\n/**\n * The key for the version tracking document.\n */\nexport const VERSION_TRACKER_KEY = 'all-versions.json';\n\n/**\n * The key for missing documentation report.\n *\n * @param language the language for which missing documentation is requested.\n */\nexport function missingDocumentationReport(\n language: DocumentationLanguage\n): string {\n return `missing-objects/${language.name}-documentation.json`;\n}\n\n/**\n * The key for corrupt assembly report.\n *\n * @param language the language for which the report is requested.\n */\nexport function corruptAssemblyReport(language: DocumentationLanguage): string {\n return `corruptassembly-objects/${language.name}.json`;\n}\n\n/**\n * The key for uninstallable packages report.\n */\nexport const UNINSTALLABLE_PACKAGES_REPORT = 'uninstallable-objects/data.json';\n\n/**\n * The key pattern for objects containing missing documentation lists.\n */\nexport const MISSING_DOCUMENTATION_REPORT_PATTERN =\n 'missing-objects/*-documentation.json';\n\n/**\n * The key pattern for objects containing unprocessable assembly lists.\n */\nexport const CORRUPT_ASSEMBLY_REPORT_PATTERN = 'corruptassembly-objects/*.json';\n\n/**\n * A regular expression that can be used to parse out a storage key.\n */\nexport const STORAGE_KEY_FORMAT_REGEX = new RegExp(\n `^${STORAGE_KEY_PREFIX}((?:@[^/]+/)?[^/]+)/v([^/]+)/.*$`\n);\n// Capture groups: \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u25011\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B \u2517\u2501\u25012\u2501\u2501\u251B\n", "import { env } from 'process';\n\nexport function requireEnv(name: string): string {\n const result = env[name];\n if (!result) {\n throw new Error(\n `No value specified for required environment variable: ${name}`\n );\n }\n return result;\n}\n", "import { createHash } from 'crypto';\nimport type { IngestionInput } from './ingestion-input.lambda-shared';\n\n/**\n * Computes an integrity checksum for the provided `IngestionInput`.\n *\n * @param input the `IngestionInput` for which to make a checksum.\n * @param tarball the content of the `.tgz` npm package\n * @param alg the hash algorithm to use (e.g: 'sha384')\n *\n * @returns the computed checksum.\n */\nexport function integrity(\n input: Input,\n tarball: Buffer,\n alg = input.integrity?.split('-')[0] ?? 'sha384'\n): IngestionInput {\n const hash = createHash(alg);\n const addField = (name: string, data: string | Buffer) =>\n // <SOH> $name <STX> $data <ETX>\n hash.update('\\x01').update(name).update('\\x02').update(data).update('\\x03');\n\n for (const [name, value] of Object.entries(input.metadata ?? {}).sort(\n ([l], [r]) => l.localeCompare(r)\n )) {\n addField(`metadata/${name}`, value);\n }\n addField('tarball', tarball);\n addField('time', input.time);\n\n return {\n ...input,\n integrity: `${alg}-${hash.digest('base64')}`,\n };\n}\n\ninterface Input extends Omit<IngestionInput, 'integrity'> {\n readonly integrity?: string;\n}\n", "export const now = Date.now;\n"],
5
+ "mappings": "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",
6
+ "names": ["module", "module", "module", "triggerId", "module", "module", "module", "module", "processAddress", "module", "module", "module", "j", "i", "patternChar", "module", "module", "module", "module", "module", "setContextMissingStrategy", "module", "getClientIp", "module", "now", "module", "module", "loadRulesConfig", "parseRulesConfig", "key", "module", "now", "module", "module", "constructStatisticsDocs", "now", "assembleRules", "assembleTargets", "isRuleValid", "dateToEpoch", "getOptions", "module", "now", "isExpired", "module", "refresh", "refreshWithFirewall", "refreshCache", "now", "getJitter", "module", "refreshWithFirewall", "refresh", "getCandidates", "getJitter", "module", "now", "processMatchedRule", "module", "module", "facadeSegment", "module", "module", "module", "module", "module", "module", "module", "module", "setAWSWhitelist", "appendAWSWhitelist", "module", "captureFunc", "captureAsyncFunc", "captureCallbackFunc", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "module", "now", "module", "module", "module", "module", "module", "module", "module", "require_valid", "module", "module", "module", "module", "module", "module", "module", "require_semver", "module", "module", "throttledErrorDefault", "captureAWS", "captureAWSClient", "req", "require_constants", "module", "captureHTTPsGlobal", "captureHTTPs", "errorCapturer", "module", "Promise", "module", "module", "AWSXRay", "module"]
7
7
  }