construct-hub 0.4.8 → 0.4.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (29) hide show
  1. package/.jsii +2 -2
  2. package/changelog.md +1 -1
  3. package/lib/construct-hub.js +1 -1
  4. package/lib/package-sources/code-artifact.js +1 -1
  5. package/lib/package-sources/codeartifact/code-artifact-forwarder.lambda.bundle/index.js +0 -1
  6. package/lib/package-sources/codeartifact/code-artifact-forwarder.lambda.bundle/index.js.map +2 -2
  7. package/lib/package-sources/codeartifact/code-artifact-forwarder.lambda.d.ts.map +1 -1
  8. package/lib/package-sources/codeartifact/code-artifact-forwarder.lambda.js +1 -2
  9. package/lib/package-sources/npmjs/canary/constants.d.ts +7 -1
  10. package/lib/package-sources/npmjs/canary/constants.d.ts.map +1 -1
  11. package/lib/package-sources/npmjs/canary/constants.js +1 -1
  12. package/lib/package-sources/npmjs/canary/index.d.ts +6 -0
  13. package/lib/package-sources/npmjs/canary/index.d.ts.map +1 -1
  14. package/lib/package-sources/npmjs/canary/index.js +15 -1
  15. package/lib/package-sources/npmjs/canary/npmjs-package-canary.lambda.bundle/index.js +106 -54
  16. package/lib/package-sources/npmjs/canary/npmjs-package-canary.lambda.bundle/index.js.map +2 -2
  17. package/lib/package-sources/npmjs/canary/npmjs-package-canary.lambda.d.ts +7 -0
  18. package/lib/package-sources/npmjs/canary/npmjs-package-canary.lambda.d.ts.map +1 -1
  19. package/lib/package-sources/npmjs/canary/npmjs-package-canary.lambda.js +142 -77
  20. package/lib/package-sources/npmjs.d.ts.map +1 -1
  21. package/lib/package-sources/npmjs.js +21 -2
  22. package/lib/package-tag/index.js +3 -3
  23. package/lib/package-tag-group/index.js +2 -2
  24. package/lib/preload-file/index.js +1 -1
  25. package/lib/s3/storage.js +1 -1
  26. package/lib/spdx-license.js +1 -1
  27. package/package.json +1 -1
  28. package/releasetag.txt +1 -1
  29. package/version.txt +1 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../node_modules/aws-embedded-metrics/lib/Constants.js", "../../../../node_modules/aws-embedded-metrics/lib/environment/Environments.js", "../../../../node_modules/aws-embedded-metrics/lib/config/EnvironmentConfigurationProvider.js", "../../../../node_modules/aws-embedded-metrics/lib/config/Configuration.js", "../../../../node_modules/aws-embedded-metrics/lib/utils/Logger.js", "../../../../node_modules/aws-embedded-metrics/lib/logger/MetricValues.js", "../../../../node_modules/aws-embedded-metrics/lib/logger/MetricsContext.js", "../../../../node_modules/aws-embedded-metrics/lib/logger/MetricsLogger.js", "../../../../node_modules/aws-embedded-metrics/lib/serializers/LogSerializer.js", "../../../../node_modules/aws-embedded-metrics/lib/sinks/ConsoleSink.js", "../../../../node_modules/aws-embedded-metrics/lib/sinks/connections/TcpClient.js", "../../../../node_modules/aws-embedded-metrics/lib/sinks/connections/UdpClient.js", "../../../../node_modules/aws-embedded-metrics/lib/sinks/AgentSink.js", "../../../../node_modules/aws-embedded-metrics/lib/environment/DefaultEnvironment.js", "../../../../node_modules/aws-embedded-metrics/lib/utils/Fetch.js", "../../../../node_modules/aws-embedded-metrics/lib/environment/ECSEnvironment.js", "../../../../node_modules/aws-embedded-metrics/lib/environment/EC2Environment.js", "../../../../node_modules/aws-embedded-metrics/lib/environment/LambdaEnvironment.js", "../../../../node_modules/aws-embedded-metrics/lib/environment/LocalEnvironment.js", "../../../../node_modules/aws-embedded-metrics/lib/environment/EnvironmentDetector.js", "../../../../node_modules/aws-embedded-metrics/lib/logger/MetricsLoggerFactory.js", "../../../../node_modules/aws-embedded-metrics/lib/logger/MetricScope.js", "../../../../node_modules/aws-embedded-metrics/lib/logger/Unit.js", "../../../../node_modules/aws-embedded-metrics/lib/index.js", "../../../../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/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/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/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/aws-xray-sdk-core/node_modules/semver/semver.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", "../../../../node_modules/readable-stream/lib/internal/streams/stream.js", "../../../../node_modules/readable-stream/lib/internal/streams/buffer_list.js", "../../../../node_modules/readable-stream/lib/internal/streams/destroy.js", "../../../../node_modules/readable-stream/errors.js", "../../../../node_modules/readable-stream/lib/internal/streams/state.js", "../../../../node_modules/inherits/inherits_browser.js", "../../../../node_modules/inherits/inherits.js", "../../../../node_modules/util-deprecate/node.js", "../../../../node_modules/readable-stream/lib/_stream_writable.js", "../../../../node_modules/readable-stream/lib/_stream_duplex.js", "../../../../node_modules/safe-buffer/index.js", "../../../../node_modules/string_decoder/lib/string_decoder.js", "../../../../node_modules/readable-stream/lib/internal/streams/end-of-stream.js", "../../../../node_modules/readable-stream/lib/internal/streams/async_iterator.js", "../../../../node_modules/readable-stream/lib/internal/streams/from.js", "../../../../node_modules/readable-stream/lib/_stream_readable.js", "../../../../node_modules/readable-stream/lib/_stream_transform.js", "../../../../node_modules/readable-stream/lib/_stream_passthrough.js", "../../../../node_modules/readable-stream/lib/internal/streams/pipeline.js", "../../../../node_modules/readable-stream/readable.js", "../../../../node_modules/bl/BufferList.js", "../../../../node_modules/bl/bl.js", "../../../../node_modules/tar-stream/headers.js", "../../../../node_modules/tar-stream/extract.js", "../../../../node_modules/fs-constants/index.js", "../../../../node_modules/wrappy/wrappy.js", "../../../../node_modules/once/once.js", "../../../../node_modules/end-of-stream/index.js", "../../../../node_modules/tar-stream/pack.js", "../../../../node_modules/tar-stream/index.js", "../../../../src/package-sources/codeartifact/code-artifact-forwarder.lambda.ts", "../../../../src/backend/shared/aws.lambda-shared.ts", "../../../../src/backend/shared/env.lambda-shared.ts", "../../../../src/backend/deny-list/constants.ts", "../../../../src/backend/deny-list/client.lambda-shared.ts", "../../../../src/backend/license-list/client.lambda-shared.ts", "../../../../src/backend/shared/integrity.lambda-shared.ts", "../../../../src/backend/shared/tarball.lambda-shared.ts", "../../../../src/package-sources/codeartifact/constants.lambda-shared.ts"],
4
- "sourcesContent": ["\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Constants;\n(function (Constants) {\n Constants[Constants[\"MAX_DIMENSIONS\"] = 9] = \"MAX_DIMENSIONS\";\n Constants[\"DEFAULT_NAMESPACE\"] = \"aws-embedded-metrics\";\n Constants[Constants[\"MAX_METRICS_PER_EVENT\"] = 100] = \"MAX_METRICS_PER_EVENT\";\n Constants[\"DEFAULT_AGENT_HOST\"] = \"0.0.0.0\";\n Constants[Constants[\"DEFAULT_AGENT_PORT\"] = 25888] = \"DEFAULT_AGENT_PORT\";\n})(Constants = exports.Constants || (exports.Constants = {}));\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Environments;\n(function (Environments) {\n Environments[\"Local\"] = \"Local\";\n Environments[\"Lambda\"] = \"Lambda\";\n Environments[\"Agent\"] = \"Agent\";\n Environments[\"EC2\"] = \"EC2\";\n Environments[\"ECS\"] = \"ECS\";\n Environments[\"Unknown\"] = \"\";\n})(Environments || (Environments = {}));\nexports.default = Environments;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Constants_1 = require(\"../Constants\");\nconst Environments_1 = require(\"../environment/Environments\");\nconst ENV_VAR_PREFIX = 'AWS_EMF';\nvar ConfigKeys;\n(function (ConfigKeys) {\n ConfigKeys[\"LOG_GROUP_NAME\"] = \"LOG_GROUP_NAME\";\n ConfigKeys[\"LOG_STREAM_NAME\"] = \"LOG_STREAM_NAME\";\n ConfigKeys[\"ENABLE_DEBUG_LOGGING\"] = \"ENABLE_DEBUG_LOGGING\";\n ConfigKeys[\"SERVICE_NAME\"] = \"SERVICE_NAME\";\n ConfigKeys[\"SERVICE_TYPE\"] = \"SERVICE_TYPE\";\n ConfigKeys[\"AGENT_ENDPOINT\"] = \"AGENT_ENDPOINT\";\n ConfigKeys[\"ENVIRONMENT_OVERRIDE\"] = \"ENVIRONMENT\";\n ConfigKeys[\"NAMESPACE\"] = \"NAMESPACE\";\n})(ConfigKeys || (ConfigKeys = {}));\nclass EnvironmentConfigurationProvider {\n getConfiguration() {\n return {\n agentEndpoint: this.getEnvVariable(ConfigKeys.AGENT_ENDPOINT),\n debuggingLoggingEnabled: this.tryGetEnvVariableAsBoolean(ConfigKeys.ENABLE_DEBUG_LOGGING, false),\n logGroupName: this.getEnvVariable(ConfigKeys.LOG_GROUP_NAME),\n logStreamName: this.getEnvVariable(ConfigKeys.LOG_STREAM_NAME),\n serviceName: this.getEnvVariable(ConfigKeys.SERVICE_NAME) || this.getEnvVariableWithoutPrefix(ConfigKeys.SERVICE_NAME),\n serviceType: this.getEnvVariable(ConfigKeys.SERVICE_TYPE) || this.getEnvVariableWithoutPrefix(ConfigKeys.SERVICE_TYPE),\n environmentOverride: this.getEnvironmentOverride(),\n namespace: this.getEnvVariable(ConfigKeys.NAMESPACE) || Constants_1.Constants.DEFAULT_NAMESPACE,\n };\n }\n getEnvVariableWithoutPrefix(configKey) {\n return process.env[configKey];\n }\n getEnvVariable(configKey) {\n return process.env[`${ENV_VAR_PREFIX}_${configKey}`];\n }\n tryGetEnvVariableAsBoolean(configKey, fallback) {\n const configValue = this.getEnvVariable(configKey);\n return !configValue ? fallback : configValue.toLowerCase() === 'true';\n }\n getEnvironmentOverride() {\n const overrideValue = this.getEnvVariable(ConfigKeys.ENVIRONMENT_OVERRIDE);\n const environment = Environments_1.default[overrideValue];\n if (environment === undefined) {\n return Environments_1.default.Unknown;\n }\n return environment;\n }\n}\nexports.EnvironmentConfigurationProvider = EnvironmentConfigurationProvider;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst EnvironmentConfigurationProvider_1 = require(\"./EnvironmentConfigurationProvider\");\nconst Configuration = new EnvironmentConfigurationProvider_1.EnvironmentConfigurationProvider().getConfiguration();\nexports.default = Configuration;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Configuration_1 = require(\"../config/Configuration\");\nconst LOG = (...args) => {\n if (Configuration_1.default.debuggingLoggingEnabled) {\n console.log(...args);\n }\n};\nexports.LOG = LOG;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass MetricValues {\n constructor(value, unit) {\n this.values = [value];\n this.unit = unit || 'None';\n }\n /**\n * Appends the provided value to the current metric\n * @param value\n */\n addValue(value) {\n this.values.push(value);\n }\n}\nexports.MetricValues = MetricValues;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Configuration_1 = require(\"../config/Configuration\");\nconst Logger_1 = require(\"../utils/Logger\");\nconst MetricValues_1 = require(\"./MetricValues\");\nclass MetricsContext {\n /**\n * Constructor used to create child instances.\n * You should not use this constructor directly.\n * Instead, use createCopyWithContext() or empty().\n *\n * The reason for this is to avoid unexpected behavior when creating\n * MetricsContexts with defaultDimensions and existing dimensions.\n *\n * @param properties\n * @param dimensions\n */\n constructor(namespace, properties, dimensions, defaultDimensions, shouldUseDefaultDimensions, timestamp) {\n this.metrics = new Map();\n this.meta = {};\n this.shouldUseDefaultDimensions = true;\n this.namespace = namespace || Configuration_1.default.namespace;\n this.properties = properties || {};\n this.dimensions = dimensions || [];\n this.timestamp = timestamp;\n this.meta.Timestamp = MetricsContext.resolveMetaTimestamp(timestamp);\n this.defaultDimensions = defaultDimensions || {};\n if (shouldUseDefaultDimensions != undefined) {\n this.shouldUseDefaultDimensions = shouldUseDefaultDimensions;\n }\n }\n /**\n * Use this to create a new, empty context.\n */\n static empty() {\n return new MetricsContext();\n }\n static resolveMetaTimestamp(timestamp) {\n if (timestamp instanceof Date) {\n return timestamp.getTime();\n }\n else if (timestamp) {\n return timestamp;\n }\n else {\n return Date.now();\n }\n }\n setNamespace(value) {\n this.namespace = value;\n }\n setProperty(key, value) {\n this.properties[key] = value;\n }\n setTimestamp(timestamp) {\n this.timestamp = timestamp;\n this.meta.Timestamp = MetricsContext.resolveMetaTimestamp(timestamp);\n }\n /**\n * Sets default dimensions for the Context.\n * A dimension set will be created with just the default dimensions\n * and all calls to putDimensions will be prepended with the defaults.\n */\n setDefaultDimensions(dimensions) {\n Logger_1.LOG(`Received default dimensions`, dimensions);\n this.defaultDimensions = dimensions;\n }\n /**\n * Adds a new set of dimensions. Any time a new dimensions set\n * is added, the set is first prepended by the default dimensions.\n *\n * @param dimensions\n */\n putDimensions(incomingDimensionSet) {\n if (this.dimensions.length === 0) {\n this.dimensions.push(incomingDimensionSet);\n return;\n }\n for (let i = 0; i < this.dimensions.length; i++) {\n const existingDimensionSet = this.dimensions[i];\n // check for duplicate dimensions when putting\n // this is an O(n^2) operation, but since we never expect to have more than\n // 10 dimensions, this is acceptable for almost all cases.\n // This makes re-using loggers much easier.\n const existingDimensionSetKeys = Object.keys(existingDimensionSet);\n const incomingDimensionSetKeys = Object.keys(incomingDimensionSet);\n if (existingDimensionSetKeys.length !== incomingDimensionSetKeys.length) {\n this.dimensions.push(incomingDimensionSet);\n return;\n }\n for (let j = 0; j < existingDimensionSetKeys.length; j++) {\n if (!incomingDimensionSetKeys.includes(existingDimensionSetKeys[j])) {\n // we're done now because we know that the dimensions keys are not identical\n this.dimensions.push(incomingDimensionSet);\n return;\n }\n }\n }\n }\n /**\n * Overwrite all dimensions.\n *\n * @param dimensionSets\n */\n setDimensions(dimensionSets) {\n this.shouldUseDefaultDimensions = false;\n this.dimensions = dimensionSets;\n }\n /**\n * Get the current dimensions.\n */\n getDimensions() {\n // caller has explicitly called setDimensions\n if (this.shouldUseDefaultDimensions === false) {\n return this.dimensions;\n }\n // if there are no default dimensions, return the custom dimensions\n if (Object.keys(this.defaultDimensions).length === 0) {\n return this.dimensions;\n }\n // if default dimensions have been provided, but no custom dimensions, use the defaults\n if (this.dimensions.length === 0) {\n return [this.defaultDimensions];\n }\n // otherwise, merge the dimensions\n // we do this on the read path because default dimensions\n // may get updated asynchronously by environment detection\n return this.dimensions.map(custom => {\n return Object.assign(Object.assign({}, this.defaultDimensions), custom);\n });\n }\n putMetric(key, value, unit) {\n const currentMetric = this.metrics.get(key);\n if (currentMetric) {\n currentMetric.addValue(value);\n }\n else {\n this.metrics.set(key, new MetricValues_1.MetricValues(value, unit));\n }\n }\n /**\n * Creates an independently flushable context.\n */\n createCopyWithContext() {\n return new MetricsContext(this.namespace, Object.assign({}, this.properties), Object.assign([], this.dimensions), this.defaultDimensions, this.shouldUseDefaultDimensions, this.timestamp);\n }\n}\nexports.MetricsContext = MetricsContext;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Configuration_1 = require(\"../config/Configuration\");\nconst MetricsContext_1 = require(\"./MetricsContext\");\n/**\n * An async metrics logger.\n * Use this interface to publish logs to CloudWatch Logs\n * and extract metrics to CloudWatch Metrics asynchronously.\n */\nclass MetricsLogger {\n constructor(resolveEnvironment, context) {\n this.configureContextForEnvironment = (context, environment) => {\n const defaultDimensions = {\n // LogGroup name will entirely depend on the environment since there\n // are some cases where the LogGroup cannot be configured (e.g. Lambda)\n LogGroup: environment.getLogGroupName(),\n ServiceName: Configuration_1.default.serviceName || environment.getName(),\n ServiceType: Configuration_1.default.serviceType || environment.getType(),\n };\n context.setDefaultDimensions(defaultDimensions);\n environment.configureContext(context);\n };\n this.resolveEnvironment = resolveEnvironment;\n this.context = context || MetricsContext_1.MetricsContext.empty();\n }\n /**\n * Flushes the current context state to the configured sink.\n */\n flush() {\n return __awaiter(this, void 0, void 0, function* () {\n // resolve the environment and get the sink\n // MOST of the time this will run synchonrously\n // This only runs asynchronously if executing for the\n // first time in a non-lambda environment\n const environment = yield this.resolveEnvironment();\n this.configureContextForEnvironment(this.context, environment);\n const sink = environment.getSink();\n // accept and reset the context\n yield sink.accept(this.context);\n this.context = this.context.createCopyWithContext();\n });\n }\n /**\n * Set a property on the published metrics.\n * This is stored in the emitted log data and you are not\n * charged for this data by CloudWatch Metrics.\n * These values can be values that are useful for searching on,\n * but have too high cardinality to emit as dimensions to\n * CloudWatch Metrics.\n *\n * @param key Property name\n * @param value Property value\n */\n setProperty(key, value) {\n this.context.setProperty(key, value);\n return this;\n }\n /**\n * Adds a dimension.\n * This is generally a low cardinality key-value pair that is part of the metric identity.\n * CloudWatch treats each unique combination of dimensions as a separate metric, even if the metrics have the same metric name.\n *\n * @param dimension\n * @param value\n * @see [CloudWatch Dimensions](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#Dimension)\n */\n putDimensions(dimensions) {\n this.context.putDimensions(dimensions);\n return this;\n }\n /**\n * Overwrite all dimensions on this MetricsLogger instance.\n *\n * @param dimensionSets\n * @see [CloudWatch Dimensions](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#Dimension)\n */\n setDimensions(...dimensionSets) {\n this.context.setDimensions(dimensionSets);\n return this;\n }\n /**\n * Put a metric value.\n * This value will be emitted to CloudWatch Metrics asyncronously and does not contribute to your\n * account TPS limits. The value will also be available in your CloudWatch Logs\n * @param key\n * @param value\n * @param unit\n */\n putMetric(key, value, unit) {\n this.context.putMetric(key, value, unit);\n return this;\n }\n /**\n * Set the CloudWatch namespace that metrics should be published to.\n * @param value\n */\n setNamespace(value) {\n this.context.setNamespace(value);\n return this;\n }\n /**\n * Set the timestamp of metrics emitted in this context.\n *\n * If not set, the timestamp will default to new Date() at the point\n * the context is constructed.\n *\n * If set, timestamp will preserved across calls to flush().\n *\n * @param timestamp\n */\n setTimestamp(timestamp) {\n this.context.setTimestamp(timestamp);\n return this;\n }\n /**\n * Creates a new logger using the same contextual data as\n * the previous logger. This allows you to flush the instances\n * independently.\n */\n new() {\n return new MetricsLogger(this.resolveEnvironment, this.context.createCopyWithContext());\n }\n}\nexports.MetricsLogger = MetricsLogger;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Constants_1 = require(\"../Constants\");\n/**\n * Serializes the provided context to the CWL Structured\n * Logs format with Embedded Metric Filters.\n */\nclass LogSerializer {\n /**\n * Retrieve the current context as a JSON string\n */\n serialize(context) {\n const dimensionKeys = [];\n let dimensionProperties = {};\n context.getDimensions().forEach(d => {\n // we can only take the first 9 defined dimensions\n // the reason we do this in the serializer is because\n // it is possible that other sinks or formats can\n // support more dimensions\n // in the future it may make sense to introduce a higher-order\n // representation for sink-specific validations\n const keys = Object.keys(d).slice(0, Constants_1.Constants.MAX_DIMENSIONS);\n dimensionKeys.push(keys);\n dimensionProperties = Object.assign(Object.assign({}, dimensionProperties), d);\n });\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const createBody = () => {\n return Object.assign(Object.assign(Object.assign({}, dimensionProperties), context.properties), { _aws: Object.assign(Object.assign({}, context.meta), { CloudWatchMetrics: [\n {\n Dimensions: dimensionKeys,\n Metrics: [],\n Namespace: context.namespace,\n },\n ] }) });\n };\n const eventBatches = [];\n let currentBody = createBody();\n const currentMetricsInBody = () => currentBody._aws.CloudWatchMetrics[0].Metrics.length;\n const shouldSerialize = () => currentMetricsInBody() === Constants_1.Constants.MAX_METRICS_PER_EVENT;\n // converts the body to JSON and pushes it into the batches\n const serializeCurrentBody = () => {\n eventBatches.push(JSON.stringify(currentBody));\n currentBody = createBody();\n };\n for (const [key, metric] of context.metrics) {\n // if there is only one metric value, unwrap it to make querying easier\n const metricValue = metric.values.length === 1 ? metric.values[0] : metric.values;\n currentBody[key] = metricValue;\n currentBody._aws.CloudWatchMetrics[0].Metrics.push({ Name: key, Unit: metric.unit });\n if (shouldSerialize()) {\n serializeCurrentBody();\n }\n }\n if (eventBatches.length === 0 || currentMetricsInBody() > 0) {\n serializeCurrentBody();\n }\n return eventBatches;\n }\n}\nexports.LogSerializer = LogSerializer;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst LogSerializer_1 = require(\"../serializers/LogSerializer\");\n/**\n * A sink that flushes log data to stdout.\n * This is the preferred sink for Lambda functions.\n */\nclass ConsoleSink {\n constructor(serializer) {\n this.name = 'ConsoleSink';\n this.serializer = serializer || new LogSerializer_1.LogSerializer();\n }\n accept(context) {\n // tslint:disable-next-line\n const events = this.serializer.serialize(context);\n events.forEach(event => console.log(event));\n return Promise.resolve();\n }\n}\nexports.ConsoleSink = ConsoleSink;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst net = require(\"net\");\nconst Logger_1 = require(\"../../utils/Logger\");\nclass TcpClient {\n constructor(endpoint) {\n this.endpoint = endpoint;\n this.socket = new net.Socket({ allowHalfOpen: true, writable: false })\n .setEncoding('utf8')\n .setKeepAlive(true)\n .setTimeout(5000) // idle timeout\n .on('timeout', () => this.disconnect('idle timeout'))\n .on('end', () => this.disconnect('end'))\n .on('data', data => Logger_1.LOG('TcpClient received data.', data));\n }\n warmup() {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n yield this.establishConnection();\n }\n catch (err) {\n Logger_1.LOG('Failed to connect', err);\n }\n });\n }\n sendMessage(message) {\n return __awaiter(this, void 0, void 0, function* () {\n // ensure the socket is open and writable\n yield this.waitForOpenConnection();\n yield new Promise((resolve, reject) => {\n const onSendError = (err) => {\n Logger_1.LOG('Failed to write', err);\n reject(err);\n };\n const wasFlushedToKernel = this.socket.write(message, (err) => {\n if (!err) {\n Logger_1.LOG('Write succeeded');\n resolve();\n }\n else {\n onSendError(err);\n }\n });\n if (!wasFlushedToKernel) {\n Logger_1.LOG('TcpClient data was not flushed to kernel buffer and was queued in memory.');\n }\n });\n });\n }\n disconnect(eventName) {\n Logger_1.LOG('TcpClient disconnected due to:', eventName);\n this.socket.removeAllListeners();\n this.socket.destroy();\n this.socket.unref();\n }\n waitForOpenConnection() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.socket.writeable || this.socket.readyState !== 'open') {\n yield this.establishConnection();\n }\n });\n }\n establishConnection() {\n return __awaiter(this, void 0, void 0, function* () {\n yield new Promise((resolve, reject) => {\n const onError = (e) => {\n // socket is already open, no need to connect\n if (e.message.includes('EISCONN')) {\n resolve();\n return;\n }\n Logger_1.LOG('TCP Client received error', e);\n this.disconnect(e.message);\n reject(e);\n };\n const onConnect = () => {\n this.socket.removeListener('error', onError);\n Logger_1.LOG('TcpClient connected.', this.endpoint);\n resolve();\n };\n // TODO: convert this to a proper state machine\n switch (this.socket.readyState) {\n case 'open':\n resolve();\n break;\n case 'opening':\n // the socket is currently opening, we will resolve\n // or fail the current promise on the connect or\n // error events\n this.socket.once('connect', onConnect);\n this.socket.once('error', onError);\n break;\n default:\n Logger_1.LOG('opening connection with socket in state: ', this.socket.readyState);\n this.socket.connect(this.endpoint.port, this.endpoint.host, onConnect).once('error', onError);\n break;\n }\n });\n });\n }\n}\nexports.TcpClient = TcpClient;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst dgram = require(\"dgram\");\nconst Logger_1 = require(\"../../utils/Logger\");\nclass UdpClient {\n constructor(endpoint) {\n this.endpoint = endpoint;\n }\n // No warm up for UDP\n warmup() {\n return Promise.resolve();\n }\n sendMessage(message) {\n return __awaiter(this, void 0, void 0, function* () {\n const client = dgram.createSocket('udp4');\n client.send(message, this.endpoint.port, this.endpoint.host, (error) => {\n if (error) {\n Logger_1.LOG(error);\n }\n client.close();\n });\n return Promise.resolve();\n });\n }\n}\nexports.UdpClient = UdpClient;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst url = require(\"url\");\nconst Configuration_1 = require(\"../config/Configuration\");\nconst LogSerializer_1 = require(\"../serializers/LogSerializer\");\nconst Logger_1 = require(\"../utils/Logger\");\nconst TcpClient_1 = require(\"./connections/TcpClient\");\nconst UdpClient_1 = require(\"./connections/UdpClient\");\nconst TCP = 'tcp:';\nconst UDP = 'udp:';\nconst defaultTcpEndpoint = {\n host: '0.0.0.0',\n port: 25888,\n protocol: TCP,\n};\nconst parseEndpoint = (endpoint) => {\n try {\n if (!endpoint) {\n return defaultTcpEndpoint;\n }\n const parsedUrl = url.parse(endpoint);\n if (!parsedUrl.hostname || !parsedUrl.port || !parsedUrl.protocol) {\n Logger_1.LOG(`Failed to parse the provided agent endpoint. Falling back to the default TCP endpoint.`, parsedUrl);\n return defaultTcpEndpoint;\n }\n if (parsedUrl.protocol !== TCP && parsedUrl.protocol !== UDP) {\n Logger_1.LOG(`The provided agent endpoint protocol '${parsedUrl.protocol}' is not supported. Please use TCP or UDP. Falling back to the default TCP endpoint.`, parsedUrl);\n return defaultTcpEndpoint;\n }\n return {\n host: parsedUrl.hostname,\n port: Number(parsedUrl.port),\n protocol: parsedUrl.protocol,\n };\n }\n catch (e) {\n Logger_1.LOG('Failed to parse the provided agent endpoint', e);\n return defaultTcpEndpoint;\n }\n};\n/**\n * A sink that flushes to the CW Agent.\n * This sink instance should be re-used to avoid\n * leaking connections.\n */\nclass AgentSink {\n constructor(logGroupName, logStreamName, serializer) {\n this.name = 'AgentSink';\n this.logGroupName = logGroupName;\n this.logStreamName = logStreamName;\n this.serializer = serializer || new LogSerializer_1.LogSerializer();\n this.endpoint = parseEndpoint(Configuration_1.default.agentEndpoint);\n this.socketClient = this.getSocketClient(this.endpoint);\n Logger_1.LOG('Using socket client', this.socketClient.constructor.name);\n }\n accept(context) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.logGroupName) {\n context.meta.LogGroupName = this.logGroupName;\n }\n if (this.logStreamName) {\n context.meta.LogStreamName = this.logStreamName;\n }\n const events = this.serializer.serialize(context);\n Logger_1.LOG(`Sending {} events to socket.`, events.length);\n for (let index = 0; index < events.length; index++) {\n const event = events[index];\n const message = event + '\\n';\n const bytes = Buffer.from(message);\n yield this.socketClient.sendMessage(bytes);\n }\n });\n }\n getSocketClient(endpoint) {\n Logger_1.LOG('Getting socket client for connection.', endpoint);\n const client = endpoint.protocol === TCP ? new TcpClient_1.TcpClient(endpoint) : new UdpClient_1.UdpClient(endpoint);\n client.warmup();\n return client;\n }\n}\nexports.AgentSink = AgentSink;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Configuration_1 = require(\"../config/Configuration\");\nconst AgentSink_1 = require(\"../sinks/AgentSink\");\nconst Logger_1 = require(\"../utils/Logger\");\nclass DefaultEnvironment {\n probe() {\n return Promise.resolve(true);\n }\n getName() {\n if (!Configuration_1.default.serviceName) {\n Logger_1.LOG('Unknown ServiceName.');\n return 'Unknown';\n }\n return Configuration_1.default.serviceName;\n }\n getType() {\n if (!Configuration_1.default.serviceType) {\n Logger_1.LOG('Unknown ServiceType.');\n return 'Unknown';\n }\n return Configuration_1.default.serviceType;\n }\n getLogGroupName() {\n // if the caller explicitly overrides logGroupName to\n // be empty, we should honor that rather than providing\n // the default behavior.\n if (Configuration_1.default.logGroupName === '') {\n return '';\n }\n return Configuration_1.default.logGroupName ? Configuration_1.default.logGroupName : `${this.getName()}-metrics`;\n }\n configureContext() {\n // no-op\n }\n getSink() {\n if (!this.sink) {\n this.sink = new AgentSink_1.AgentSink(this.getLogGroupName(), Configuration_1.default.logStreamName);\n }\n return this.sink;\n }\n}\nexports.DefaultEnvironment = DefaultEnvironment;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst http = require(\"http\");\nconst SOCKET_TIMEOUT = 1000;\n/**\n * Fetch JSON data from an remote HTTP endpoint and de-serialize to the provided type.\n * There are no guarantees the response will conform to the contract defined by T.\n * It is up to the consumer to ensure the provided T captures all possible response types\n * from the provided endpoint.\n *\n * @param url - currently only supports HTTP\n */\nconst fetch = (url) => {\n return new Promise((resolve, reject) => {\n const request = http\n .get(url, { timeout: 2000 }, (response) => {\n if (!response.statusCode) {\n reject(`Received undefined response status code from '${url}'`);\n return;\n }\n if (response.statusCode < 200 || response.statusCode > 299) {\n reject(new Error('Failed to load page, status code: ' + response.statusCode));\n return;\n }\n // using similar approach to node-fetch\n // https://github.com/bitinn/node-fetch/blob/6a5d192034a0f438551dffb6d2d8df2c00921d16/src/body.js#L217\n const body = [];\n let bodyBytes = 0;\n response.on('data', (chunk) => {\n bodyBytes += chunk.length;\n body.push(chunk);\n });\n response.on('end', () => {\n let responseString;\n try {\n const buffer = Buffer.concat(body, bodyBytes);\n responseString = buffer.toString();\n const parsedJson = JSON.parse(responseString);\n resolve(parsedJson);\n }\n catch (e) {\n reject(`Failed to parse response from '${url}' as JSON. Received: ${responseString}`);\n }\n });\n })\n .on('error', (err) => {\n reject(err);\n });\n request.on('socket', socket => {\n socket.on('timeout', () => {\n request.abort();\n reject(`Socket timeout while connecting to '${url}'`);\n });\n socket.setTimeout(SOCKET_TIMEOUT);\n });\n });\n};\nexports.fetch = fetch;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Configuration_1 = require(\"../config/Configuration\");\nconst AgentSink_1 = require(\"../sinks/AgentSink\");\nconst Fetch_1 = require(\"../utils/Fetch\");\nconst Logger_1 = require(\"../utils/Logger\");\nconst os = require(\"os\");\nconst Constants_1 = require(\"../Constants\");\n// formats image names into something more readable for a metric name\n// e.g. <account-id>.dkr.ecr.<region>.amazonaws.com/<image-name>:latest -> <image-name>:latest\nconst formatImageName = (imageName) => {\n if (imageName) {\n const splitImageName = imageName.split('/');\n return splitImageName[splitImageName.length - 1];\n }\n return imageName;\n};\nclass ECSEnvironment {\n probe() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!process.env.ECS_CONTAINER_METADATA_URI) {\n return Promise.resolve(false);\n }\n if (process.env.FLUENT_HOST && !Configuration_1.default.agentEndpoint) {\n this.fluentBitEndpoint = `tcp://${process.env.FLUENT_HOST}:${Constants_1.Constants.DEFAULT_AGENT_PORT}`;\n Configuration_1.default.agentEndpoint = this.fluentBitEndpoint;\n Logger_1.LOG(`Using FluentBit configuration. Endpoint: ${this.fluentBitEndpoint}`);\n }\n try {\n this.metadata = yield Fetch_1.fetch(process.env.ECS_CONTAINER_METADATA_URI);\n if (this.metadata) {\n this.metadata.FormattedImageName = formatImageName(this.metadata.Image);\n Logger_1.LOG(`Successfully collected ECS Container metadata.`);\n }\n }\n catch (e) {\n Logger_1.LOG('Failed to collect ECS Container Metadata.');\n Logger_1.LOG(e);\n }\n // return true regardless of whether or not metadata collection\n // succeeded. we know that this is supposed to be an ECS environment\n // just from the environment variable\n return true;\n });\n }\n getName() {\n var _a;\n if (Configuration_1.default.serviceName) {\n return Configuration_1.default.serviceName;\n }\n return ((_a = this.metadata) === null || _a === void 0 ? void 0 : _a.FormattedImageName) ? this.metadata.FormattedImageName : 'Unknown';\n }\n getType() {\n return 'AWS::ECS::Container';\n }\n getLogGroupName() {\n // FireLens / fluent-bit does not need the log group to be included\n // since configuration of the LogGroup is handled by the\n // fluent bit config file\n if (this.fluentBitEndpoint) {\n return '';\n }\n return Configuration_1.default.logGroupName || this.getName();\n }\n configureContext(context) {\n var _a, _b, _c, _d, _e;\n this.addProperty(context, 'containerId', os.hostname());\n this.addProperty(context, 'createdAt', (_a = this.metadata) === null || _a === void 0 ? void 0 : _a.CreatedAt);\n this.addProperty(context, 'startedAt', (_b = this.metadata) === null || _b === void 0 ? void 0 : _b.StartedAt);\n this.addProperty(context, 'image', (_c = this.metadata) === null || _c === void 0 ? void 0 : _c.Image);\n this.addProperty(context, 'cluster', (_d = this.metadata) === null || _d === void 0 ? void 0 : _d.Labels['com.amazonaws.ecs.cluster']);\n this.addProperty(context, 'taskArn', (_e = this.metadata) === null || _e === void 0 ? void 0 : _e.Labels['com.amazonaws.ecs.task-arn']);\n // we override the standard default dimensions here because in the\n // FireLens / fluent-bit case, we don't need the LogGroup\n if (this.fluentBitEndpoint) {\n context.setDefaultDimensions({\n ServiceName: Configuration_1.default.serviceName || this.getName(),\n ServiceType: Configuration_1.default.serviceType || this.getType(),\n });\n }\n }\n getSink() {\n if (!this.sink) {\n const logGroupName = this.fluentBitEndpoint ? '' : this.getLogGroupName();\n this.sink = new AgentSink_1.AgentSink(logGroupName);\n }\n return this.sink;\n }\n addProperty(context, key, value) {\n if (value) {\n context.setProperty(key, value);\n }\n }\n}\nexports.ECSEnvironment = ECSEnvironment;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Configuration_1 = require(\"../config/Configuration\");\nconst AgentSink_1 = require(\"../sinks/AgentSink\");\nconst Fetch_1 = require(\"../utils/Fetch\");\nconst Logger_1 = require(\"../utils/Logger\");\nconst endpoint = 'http://169.254.169.254/latest/dynamic/instance-identity/document';\nclass EC2Environment {\n probe() {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n this.metadata = yield Fetch_1.fetch(endpoint);\n if (this.metadata) {\n return true;\n }\n return false;\n }\n catch (e) {\n Logger_1.LOG(e);\n return false;\n }\n });\n }\n getName() {\n if (!Configuration_1.default.serviceName) {\n Logger_1.LOG('Unknown ServiceName.');\n return 'Unknown';\n }\n return Configuration_1.default.serviceName;\n }\n getType() {\n if (this.metadata) {\n return 'AWS::EC2::Instance';\n }\n // this will only happen if probe() is not called first\n return 'Unknown';\n }\n getLogGroupName() {\n return Configuration_1.default.logGroupName ? Configuration_1.default.logGroupName : `${this.getName()}-metrics`;\n }\n configureContext(context) {\n if (this.metadata) {\n context.setProperty('imageId', this.metadata.imageId);\n context.setProperty('instanceId', this.metadata.instanceId);\n context.setProperty('instanceType', this.metadata.instanceType);\n context.setProperty('privateIP', this.metadata.privateIp);\n context.setProperty('availabilityZone', this.metadata.availabilityZone);\n }\n }\n getSink() {\n if (!this.sink) {\n this.sink = new AgentSink_1.AgentSink(this.getLogGroupName(), Configuration_1.default.logStreamName);\n }\n return this.sink;\n }\n}\nexports.EC2Environment = EC2Environment;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst ConsoleSink_1 = require(\"../sinks/ConsoleSink\");\nclass LambdaEnvironment {\n probe() {\n return Promise.resolve(process.env.AWS_LAMBDA_FUNCTION_NAME ? true : false);\n }\n getName() {\n return process.env.AWS_LAMBDA_FUNCTION_NAME || 'Unknown';\n }\n getType() {\n return 'AWS::Lambda::Function';\n }\n getLogGroupName() {\n return this.getName();\n }\n configureContext(context) {\n this.addProperty(context, 'executionEnvironment', process.env.AWS_EXECUTION_ENV);\n this.addProperty(context, 'memorySize', process.env.AWS_LAMBDA_FUNCTION_MEMORY_SIZE);\n this.addProperty(context, 'functionVersion', process.env.AWS_LAMBDA_FUNCTION_VERSION);\n this.addProperty(context, 'logStreamId', process.env.AWS_LAMBDA_LOG_STREAM_NAME);\n const trace = this.getSampledTrace();\n if (trace) {\n this.addProperty(context, 'traceId', trace);\n }\n }\n getSink() {\n if (!this.sink) {\n this.sink = new ConsoleSink_1.ConsoleSink();\n }\n return this.sink;\n }\n addProperty(context, key, value) {\n if (value) {\n context.setProperty(key, value);\n }\n }\n getSampledTrace() {\n // only collect traces which have been sampled\n if (process.env._X_AMZN_TRACE_ID && process.env._X_AMZN_TRACE_ID.includes('Sampled=1')) {\n return process.env._X_AMZN_TRACE_ID;\n }\n }\n}\nexports.LambdaEnvironment = LambdaEnvironment;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Configuration_1 = require(\"../config/Configuration\");\nconst Logger_1 = require(\"../utils/Logger\");\nconst ConsoleSink_1 = require(\"../sinks/ConsoleSink\");\nclass LocalEnvironment {\n probe() {\n // probe is not intended to be used in the LocalEnvironment\n // To use the local environment you should set the environment\n // override\n return Promise.resolve(false);\n }\n getName() {\n if (!Configuration_1.default.serviceName) {\n Logger_1.LOG('Unknown ServiceName.');\n return 'Unknown';\n }\n return Configuration_1.default.serviceName;\n }\n getType() {\n if (!Configuration_1.default.serviceType) {\n Logger_1.LOG('Unknown ServiceType.');\n return 'Unknown';\n }\n return Configuration_1.default.serviceType;\n }\n getLogGroupName() {\n return Configuration_1.default.logGroupName ? Configuration_1.default.logGroupName : `${this.getName()}-metrics`;\n }\n configureContext() {\n // no-op\n }\n getSink() {\n if (!this.sink) {\n this.sink = new ConsoleSink_1.ConsoleSink();\n }\n return this.sink;\n }\n}\nexports.LocalEnvironment = LocalEnvironment;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Logger_1 = require(\"../utils/Logger\");\nconst DefaultEnvironment_1 = require(\"./DefaultEnvironment\");\nconst ECSEnvironment_1 = require(\"./ECSEnvironment\");\nconst EC2Environment_1 = require(\"./EC2Environment\");\nconst LambdaEnvironment_1 = require(\"./LambdaEnvironment\");\nconst Configuration_1 = require(\"../config/Configuration\");\nconst Environments_1 = require(\"./Environments\");\nconst LocalEnvironment_1 = require(\"./LocalEnvironment\");\nconst lambdaEnvironment = new LambdaEnvironment_1.LambdaEnvironment();\nconst ecsEnvironment = new ECSEnvironment_1.ECSEnvironment();\nconst ec2Environment = new EC2Environment_1.EC2Environment();\nconst defaultEnvironment = new DefaultEnvironment_1.DefaultEnvironment();\n// ordering of this array matters\n// both Lambda and ECS can be determined from environment variables\n// making the entire detection process fast an cheap\n// EC2 can only be determined by making a remote HTTP request\nconst environments = [lambdaEnvironment, ecsEnvironment, ec2Environment];\nlet environment = undefined;\nconst getEnvironmentFromOverride = () => {\n // short-circuit environment detection and use override\n switch (Configuration_1.default.environmentOverride) {\n case Environments_1.default.Agent:\n return defaultEnvironment;\n case Environments_1.default.EC2:\n return ec2Environment;\n case Environments_1.default.Lambda:\n return lambdaEnvironment;\n case Environments_1.default.ECS:\n return ecsEnvironment;\n case Environments_1.default.Local:\n return new LocalEnvironment_1.LocalEnvironment();\n case Environments_1.default.Unknown:\n default:\n return undefined;\n }\n};\nconst discoverEnvironment = () => __awaiter(void 0, void 0, void 0, function* () {\n Logger_1.LOG(`Discovering environment`);\n for (const envUnderTest of environments) {\n Logger_1.LOG(`Testing: ${envUnderTest.constructor.name}`);\n try {\n if (yield envUnderTest.probe()) {\n return envUnderTest;\n }\n }\n catch (e) {\n Logger_1.LOG(`Failed probe: ${envUnderTest.constructor.name}`);\n }\n }\n return defaultEnvironment;\n});\nconst _resolveEnvironment = () => __awaiter(void 0, void 0, void 0, function* () {\n Logger_1.LOG('Resolving environment');\n if (environment) {\n return environment;\n }\n if (Configuration_1.default.environmentOverride) {\n Logger_1.LOG('Environment override supplied', Configuration_1.default.environmentOverride);\n // this will be falsy if an invalid configuration value is provided\n environment = getEnvironmentFromOverride();\n if (environment) {\n return environment;\n }\n else {\n Logger_1.LOG('Invalid environment provided. Falling back to auto-discovery.', Configuration_1.default.environmentOverride);\n }\n }\n environment = yield discoverEnvironment(); // eslint-disable-line require-atomic-updates\n return environment;\n});\n// pro-actively begin resolving the environment\n// this will allow us to kick off any async tasks\n// at module load time to reduce any blocking that\n// may occur on the initial flush()\nconst environmentPromise = _resolveEnvironment();\nconst resolveEnvironment = () => __awaiter(void 0, void 0, void 0, function* () {\n return environmentPromise;\n});\nexports.resolveEnvironment = resolveEnvironment;\n// this method is used for testing to bypass the cached environmentPromise result\nconst cleanResolveEnvironment = () => __awaiter(void 0, void 0, void 0, function* () {\n yield environmentPromise;\n environment = undefined;\n return yield _resolveEnvironment();\n});\nexports.cleanResolveEnvironment = cleanResolveEnvironment;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst __1 = require(\"..\");\nconst EnvironmentDetector_1 = require(\"../environment/EnvironmentDetector\");\nconst MetricsContext_1 = require(\"./MetricsContext\");\nconst createMetricsLogger = () => {\n const context = MetricsContext_1.MetricsContext.empty();\n const logger = new __1.MetricsLogger(EnvironmentDetector_1.resolveEnvironment, context);\n return logger;\n};\nexports.createMetricsLogger = createMetricsLogger;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Logger_1 = require(\"../utils/Logger\");\nconst MetricsLoggerFactory_1 = require(\"./MetricsLoggerFactory\");\n/**\n * An asynchronous wrapper that provides a metrics instance.\n */\nconst metricScope = (handler) => {\n const wrappedHandler = (...args) => __awaiter(void 0, void 0, void 0, function* () {\n const metrics = MetricsLoggerFactory_1.createMetricsLogger();\n try {\n return yield handler(metrics)(...args);\n }\n finally {\n try {\n yield metrics.flush();\n }\n catch (e) {\n Logger_1.LOG('Failed to flush metrics', e);\n }\n }\n });\n return wrappedHandler;\n};\nexports.metricScope = metricScope;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Unit;\n(function (Unit) {\n Unit[\"Seconds\"] = \"Seconds\";\n Unit[\"Microseconds\"] = \"Microseconds\";\n Unit[\"Milliseconds\"] = \"Milliseconds\";\n Unit[\"Bytes\"] = \"Bytes\";\n Unit[\"Kilobytes\"] = \"Kilobytes\";\n Unit[\"Megabytes\"] = \"Megabytes\";\n Unit[\"Gigabytes\"] = \"Gigabytes\";\n Unit[\"Terabytes\"] = \"Terabytes\";\n Unit[\"Bits\"] = \"Bits\";\n Unit[\"Kilobits\"] = \"Kilobits\";\n Unit[\"Megabits\"] = \"Megabits\";\n Unit[\"Gigabits\"] = \"Gigabits\";\n Unit[\"Terabits\"] = \"Terabits\";\n Unit[\"Percent\"] = \"Percent\";\n Unit[\"Count\"] = \"Count\";\n Unit[\"BytesPerSecond\"] = \"Bytes/Second\";\n Unit[\"KilobytesPerSecond\"] = \"Kilobytes/Second\";\n Unit[\"MegabytesPerSecond\"] = \"Megabytes/Second\";\n Unit[\"GigabytesPerSecond\"] = \"Gigabytes/Second\";\n Unit[\"TerabytesPerSecond\"] = \"Terabytes/Second\";\n Unit[\"BitsPerSecond\"] = \"Bits/Second\";\n Unit[\"KilobitsPerSecond\"] = \"Kilobits/Second\";\n Unit[\"MegabitsPerSecond\"] = \"Megabits/Second\";\n Unit[\"GigabitsPerSecond\"] = \"Gigabits/Second\";\n Unit[\"TerabitsPerSecond\"] = \"Terabits/Second\";\n Unit[\"CountPerSecond\"] = \"Count/Second\";\n Unit[\"None\"] = \"None\";\n})(Unit = exports.Unit || (exports.Unit = {}));\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar MetricsLogger_1 = require(\"./logger/MetricsLogger\");\nexports.MetricsLogger = MetricsLogger_1.MetricsLogger;\nvar ConsoleSink_1 = require(\"./sinks/ConsoleSink\");\nexports.LocalSink = ConsoleSink_1.ConsoleSink;\nvar AgentSink_1 = require(\"./sinks/AgentSink\");\nexports.AgentSink = AgentSink_1.AgentSink;\nvar MetricScope_1 = require(\"./logger/MetricScope\");\nexports.metricScope = MetricScope_1.metricScope;\nvar MetricsLoggerFactory_1 = require(\"./logger/MetricsLoggerFactory\");\nexports.createMetricsLogger = MetricsLoggerFactory_1.createMetricsLogger;\nvar Unit_1 = require(\"./logger/Unit\");\nexports.Unit = Unit_1.Unit;\nconst Configuration_1 = require(\"./config/Configuration\");\nexports.Configuration = Configuration_1.default;\n", "'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 var data = utils.processTraceData(xAmznTraceId);\n var valid = false;\n if (!data) {\n data = {};\n logger.getLogger().error('_X_AMZN_TRACE_ID is empty or has an invalid format');\n }\n else if (!data.root || !data.parent || !data.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(data.root).toString(); // Will always assign valid trace_id\n segment.id = data.parent || crypto.randomBytes(8).toString('hex');\n if (data.root && segment.trace_id !== data.root) {\n logger.getLogger().error('_X_AMZN_TRACE_ID contains invalid trace ID');\n valid = false;\n }\n if (!parseInt(data.sampled)) {\n segment.notTraced = true;\n }\n else {\n delete segment.notTraced;\n }\n logger.getLogger().debug('Segment started: ' + JSON.stringify(data));\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 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 var key = pair[0].trim().toLowerCase();\n var value = pair[1].trim().toLowerCase();\n var reserved = reservedKeywords.indexOf(key) !== -1;\n if (reserved) {\n amznTraceData[key] = value;\n }\n else if (!reserved && remainingBytes - (key.length + value.length) >= 0) {\n amznTraceData[key] = value;\n remainingBytes -= (key.length + value.length);\n }\n }\n });\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};\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 var subsegment = new Subsegment(name);\n this.addSubsegment(subsegment);\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 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' || (typeof value === 'number' && isFinite(value)))) {\n throw new Error('Failed to add annotation key: ' + key + ' value: ' + value + ' to subsegment ' +\n this.name + '. Value must be of type string, number or boolean.');\n }\n else if (typeof key !== 'string') {\n throw new Error('Failed to add annotation key: ' + key + ' value: ' + value + ' to subsegment ' +\n this.name + '. Key must be of type string.');\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 throw new Error('Failed to add annotation key: ' + key + ' value: ' + value + ' to subsegment ' +\n this.name + '. Key must be of type string.');\n }\n else if (namespace && typeof namespace !== 'string') {\n throw new Error('Failed to add annotation key: ' + key + ' value: ' + value + 'namespace: ' + namespace + ' to subsegment ' +\n this.name + '. Namespace must be of type string.');\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 this.metadata[ns][key] = value;\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 throw new Error('Failed to add error:' + err + ' to subsegment \"' + this.name +\n '\". Not an object or string literal.');\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 };\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 throw new Error('Failed to flush subsegment: ' + this.name + '. Subsegment must be added ' +\n 'to a segment chain to flush.');\n }\n if (this.segment.trace_id) {\n if (this.segment.notTraced !== true) {\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('Add annotation key: ' + key + ' value: ' + value + ' failed.' +\n ' Annotations must be of type string, number or boolean.');\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 throw new Error('Failed to add annotation key: ' + key + ' value: ' + value + ' to subsegment ' +\n this.name + '. Key must be of type string.');\n }\n else if (namespace && typeof namespace !== 'string') {\n throw new Error('Failed to add annotation key: ' + key + ' value: ' + value + 'namespace: ' + namespace + ' to subsegment ' +\n this.name + '. Namespace must be of type string.');\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 this.metadata[ns][key] = value;\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};\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 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 throw new Error('Failed to add error:' + err + ' to subsegment \"' + this.name +\n '\". Not an object or string literal.');\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.RUNTIME_ERROR.contextMissing;\n logger.getLogger().debug('Using default context missing strategy: RUNTIME_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", "\"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'];\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", "\"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", "\"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 this.addData(capturer.capture(serviceName.toLowerCase(), res));\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", "exports = module.exports = SemVer\n\nvar debug\n/* istanbul ignore next */\nif (typeof process === 'object' &&\n process.env &&\n process.env.NODE_DEBUG &&\n /\\bsemver\\b/i.test(process.env.NODE_DEBUG)) {\n debug = function () {\n var args = Array.prototype.slice.call(arguments, 0)\n args.unshift('SEMVER')\n console.log.apply(console, args)\n }\n} else {\n debug = function () {}\n}\n\n// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nexports.SEMVER_SPEC_VERSION = '2.0.0'\n\nvar MAX_LENGTH = 256\nvar MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n /* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nvar MAX_SAFE_COMPONENT_LENGTH = 16\n\n// The actual regexps go on exports.re\nvar re = exports.re = []\nvar src = exports.src = []\nvar R = 0\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\nvar NUMERICIDENTIFIER = R++\nsrc[NUMERICIDENTIFIER] = '0|[1-9]\\\\d*'\nvar NUMERICIDENTIFIERLOOSE = R++\nsrc[NUMERICIDENTIFIERLOOSE] = '[0-9]+'\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\nvar NONNUMERICIDENTIFIER = R++\nsrc[NONNUMERICIDENTIFIER] = '\\\\d*[a-zA-Z-][a-zA-Z0-9-]*'\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\nvar MAINVERSION = R++\nsrc[MAINVERSION] = '(' + src[NUMERICIDENTIFIER] + ')\\\\.' +\n '(' + src[NUMERICIDENTIFIER] + ')\\\\.' +\n '(' + src[NUMERICIDENTIFIER] + ')'\n\nvar MAINVERSIONLOOSE = R++\nsrc[MAINVERSIONLOOSE] = '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\\\.' +\n '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\\\.' +\n '(' + src[NUMERICIDENTIFIERLOOSE] + ')'\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n\nvar PRERELEASEIDENTIFIER = R++\nsrc[PRERELEASEIDENTIFIER] = '(?:' + src[NUMERICIDENTIFIER] +\n '|' + src[NONNUMERICIDENTIFIER] + ')'\n\nvar PRERELEASEIDENTIFIERLOOSE = R++\nsrc[PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[NUMERICIDENTIFIERLOOSE] +\n '|' + src[NONNUMERICIDENTIFIER] + ')'\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\nvar PRERELEASE = R++\nsrc[PRERELEASE] = '(?:-(' + src[PRERELEASEIDENTIFIER] +\n '(?:\\\\.' + src[PRERELEASEIDENTIFIER] + ')*))'\n\nvar PRERELEASELOOSE = R++\nsrc[PRERELEASELOOSE] = '(?:-?(' + src[PRERELEASEIDENTIFIERLOOSE] +\n '(?:\\\\.' + src[PRERELEASEIDENTIFIERLOOSE] + ')*))'\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\nvar BUILDIDENTIFIER = R++\nsrc[BUILDIDENTIFIER] = '[0-9A-Za-z-]+'\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\nvar BUILD = R++\nsrc[BUILD] = '(?:\\\\+(' + src[BUILDIDENTIFIER] +\n '(?:\\\\.' + src[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\nvar FULL = R++\nvar FULLPLAIN = 'v?' + src[MAINVERSION] +\n src[PRERELEASE] + '?' +\n src[BUILD] + '?'\n\nsrc[FULL] = '^' + 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.\nvar LOOSEPLAIN = '[v=\\\\s]*' + src[MAINVERSIONLOOSE] +\n src[PRERELEASELOOSE] + '?' +\n src[BUILD] + '?'\n\nvar LOOSE = R++\nsrc[LOOSE] = '^' + LOOSEPLAIN + '$'\n\nvar GTLT = R++\nsrc[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.\nvar XRANGEIDENTIFIERLOOSE = R++\nsrc[XRANGEIDENTIFIERLOOSE] = src[NUMERICIDENTIFIERLOOSE] + '|x|X|\\\\*'\nvar XRANGEIDENTIFIER = R++\nsrc[XRANGEIDENTIFIER] = src[NUMERICIDENTIFIER] + '|x|X|\\\\*'\n\nvar XRANGEPLAIN = R++\nsrc[XRANGEPLAIN] = '[v=\\\\s]*(' + src[XRANGEIDENTIFIER] + ')' +\n '(?:\\\\.(' + src[XRANGEIDENTIFIER] + ')' +\n '(?:\\\\.(' + src[XRANGEIDENTIFIER] + ')' +\n '(?:' + src[PRERELEASE] + ')?' +\n src[BUILD] + '?' +\n ')?)?'\n\nvar XRANGEPLAINLOOSE = R++\nsrc[XRANGEPLAINLOOSE] = '[v=\\\\s]*(' + src[XRANGEIDENTIFIERLOOSE] + ')' +\n '(?:\\\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +\n '(?:\\\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +\n '(?:' + src[PRERELEASELOOSE] + ')?' +\n src[BUILD] + '?' +\n ')?)?'\n\nvar XRANGE = R++\nsrc[XRANGE] = '^' + src[GTLT] + '\\\\s*' + src[XRANGEPLAIN] + '$'\nvar XRANGELOOSE = R++\nsrc[XRANGELOOSE] = '^' + src[GTLT] + '\\\\s*' + src[XRANGEPLAINLOOSE] + '$'\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\nvar COERCE = R++\nsrc[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])'\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\nvar LONETILDE = R++\nsrc[LONETILDE] = '(?:~>?)'\n\nvar TILDETRIM = R++\nsrc[TILDETRIM] = '(\\\\s*)' + src[LONETILDE] + '\\\\s+'\nre[TILDETRIM] = new RegExp(src[TILDETRIM], 'g')\nvar tildeTrimReplace = '$1~'\n\nvar TILDE = R++\nsrc[TILDE] = '^' + src[LONETILDE] + src[XRANGEPLAIN] + '$'\nvar TILDELOOSE = R++\nsrc[TILDELOOSE] = '^' + src[LONETILDE] + src[XRANGEPLAINLOOSE] + '$'\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\nvar LONECARET = R++\nsrc[LONECARET] = '(?:\\\\^)'\n\nvar CARETTRIM = R++\nsrc[CARETTRIM] = '(\\\\s*)' + src[LONECARET] + '\\\\s+'\nre[CARETTRIM] = new RegExp(src[CARETTRIM], 'g')\nvar caretTrimReplace = '$1^'\n\nvar CARET = R++\nsrc[CARET] = '^' + src[LONECARET] + src[XRANGEPLAIN] + '$'\nvar CARETLOOSE = R++\nsrc[CARETLOOSE] = '^' + src[LONECARET] + src[XRANGEPLAINLOOSE] + '$'\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\nvar COMPARATORLOOSE = R++\nsrc[COMPARATORLOOSE] = '^' + src[GTLT] + '\\\\s*(' + LOOSEPLAIN + ')$|^$'\nvar COMPARATOR = R++\nsrc[COMPARATOR] = '^' + src[GTLT] + '\\\\s*(' + 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`\nvar COMPARATORTRIM = R++\nsrc[COMPARATORTRIM] = '(\\\\s*)' + src[GTLT] +\n '\\\\s*(' + LOOSEPLAIN + '|' + src[XRANGEPLAIN] + ')'\n\n// this one has to use the /g flag\nre[COMPARATORTRIM] = new RegExp(src[COMPARATORTRIM], 'g')\nvar 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.\nvar HYPHENRANGE = R++\nsrc[HYPHENRANGE] = '^\\\\s*(' + src[XRANGEPLAIN] + ')' +\n '\\\\s+-\\\\s+' +\n '(' + src[XRANGEPLAIN] + ')' +\n '\\\\s*$'\n\nvar HYPHENRANGELOOSE = R++\nsrc[HYPHENRANGELOOSE] = '^\\\\s*(' + src[XRANGEPLAINLOOSE] + ')' +\n '\\\\s+-\\\\s+' +\n '(' + src[XRANGEPLAINLOOSE] + ')' +\n '\\\\s*$'\n\n// Star ranges basically just allow anything at all.\nvar STAR = R++\nsrc[STAR] = '(<|>)?=?\\\\s*\\\\*'\n\n// Compile to actual regexp objects.\n// All are flag-free, unless they were created above with a flag.\nfor (var i = 0; i < R; i++) {\n debug(i, src[i])\n if (!re[i]) {\n re[i] = new RegExp(src[i])\n }\n}\n\nexports.parse = parse\nfunction parse (version, options) {\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\n\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n if (version.length > MAX_LENGTH) {\n return null\n }\n\n var r = options.loose ? re[LOOSE] : re[FULL]\n if (!r.test(version)) {\n return null\n }\n\n try {\n return new SemVer(version, options)\n } catch (er) {\n return null\n }\n}\n\nexports.valid = valid\nfunction valid (version, options) {\n var v = parse(version, options)\n return v ? v.version : null\n}\n\nexports.clean = clean\nfunction clean (version, options) {\n var s = parse(version.trim().replace(/^[=v]+/, ''), options)\n return s ? s.version : null\n}\n\nexports.SemVer = SemVer\n\nfunction SemVer (version, options) {\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\n if (version instanceof SemVer) {\n if (version.loose === options.loose) {\n return version\n } else {\n version = version.version\n }\n } else if (typeof version !== 'string') {\n throw new TypeError('Invalid Version: ' + version)\n }\n\n if (version.length > MAX_LENGTH) {\n throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters')\n }\n\n if (!(this instanceof SemVer)) {\n return new SemVer(version, options)\n }\n\n debug('SemVer', version, options)\n this.options = options\n this.loose = !!options.loose\n\n var m = version.trim().match(options.loose ? re[LOOSE] : re[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(function (id) {\n if (/^[0-9]+$/.test(id)) {\n var 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\nSemVer.prototype.format = function () {\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\nSemVer.prototype.toString = function () {\n return this.version\n}\n\nSemVer.prototype.compare = function (other) {\n debug('SemVer.compare', this.version, this.options, other)\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n return this.compareMain(other) || this.comparePre(other)\n}\n\nSemVer.prototype.compareMain = function (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n return compareIdentifiers(this.major, other.major) ||\n compareIdentifiers(this.minor, other.minor) ||\n compareIdentifiers(this.patch, other.patch)\n}\n\nSemVer.prototype.comparePre = function (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 var i = 0\n do {\n var a = this.prerelease[i]\n var 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// 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.\nSemVer.prototype.inc = function (release, identifier) {\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)\n break\n case 'preminor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor++\n this.inc('pre', identifier)\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)\n this.inc('pre', identifier)\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)\n }\n this.inc('pre', identifier)\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 (this.minor !== 0 ||\n this.patch !== 0 ||\n this.prerelease.length === 0) {\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 if (this.prerelease.length === 0) {\n this.prerelease = [0]\n } else {\n var 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 this.prerelease.push(0)\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 if (this.prerelease[0] === identifier) {\n if (isNaN(this.prerelease[1])) {\n this.prerelease = [identifier, 0]\n }\n } else {\n this.prerelease = [identifier, 0]\n }\n }\n break\n\n default:\n throw new Error('invalid increment argument: ' + release)\n }\n this.format()\n this.raw = this.version\n return this\n}\n\nexports.inc = inc\nfunction inc (version, release, loose, identifier) {\n if (typeof (loose) === 'string') {\n identifier = loose\n loose = undefined\n }\n\n try {\n return new SemVer(version, loose).inc(release, identifier).version\n } catch (er) {\n return null\n }\n}\n\nexports.diff = diff\nfunction diff (version1, version2) {\n if (eq(version1, version2)) {\n return null\n } else {\n var v1 = parse(version1)\n var v2 = parse(version2)\n var prefix = ''\n if (v1.prerelease.length || v2.prerelease.length) {\n prefix = 'pre'\n var defaultResult = 'prerelease'\n }\n for (var key in v1) {\n if (key === 'major' || key === 'minor' || key === 'patch') {\n if (v1[key] !== v2[key]) {\n return prefix + key\n }\n }\n }\n return defaultResult // may be undefined\n }\n}\n\nexports.compareIdentifiers = compareIdentifiers\n\nvar numeric = /^[0-9]+$/\nfunction compareIdentifiers (a, b) {\n var anum = numeric.test(a)\n var 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\nexports.rcompareIdentifiers = rcompareIdentifiers\nfunction rcompareIdentifiers (a, b) {\n return compareIdentifiers(b, a)\n}\n\nexports.major = major\nfunction major (a, loose) {\n return new SemVer(a, loose).major\n}\n\nexports.minor = minor\nfunction minor (a, loose) {\n return new SemVer(a, loose).minor\n}\n\nexports.patch = patch\nfunction patch (a, loose) {\n return new SemVer(a, loose).patch\n}\n\nexports.compare = compare\nfunction compare (a, b, loose) {\n return new SemVer(a, loose).compare(new SemVer(b, loose))\n}\n\nexports.compareLoose = compareLoose\nfunction compareLoose (a, b) {\n return compare(a, b, true)\n}\n\nexports.rcompare = rcompare\nfunction rcompare (a, b, loose) {\n return compare(b, a, loose)\n}\n\nexports.sort = sort\nfunction sort (list, loose) {\n return list.sort(function (a, b) {\n return exports.compare(a, b, loose)\n })\n}\n\nexports.rsort = rsort\nfunction rsort (list, loose) {\n return list.sort(function (a, b) {\n return exports.rcompare(a, b, loose)\n })\n}\n\nexports.gt = gt\nfunction gt (a, b, loose) {\n return compare(a, b, loose) > 0\n}\n\nexports.lt = lt\nfunction lt (a, b, loose) {\n return compare(a, b, loose) < 0\n}\n\nexports.eq = eq\nfunction eq (a, b, loose) {\n return compare(a, b, loose) === 0\n}\n\nexports.neq = neq\nfunction neq (a, b, loose) {\n return compare(a, b, loose) !== 0\n}\n\nexports.gte = gte\nfunction gte (a, b, loose) {\n return compare(a, b, loose) >= 0\n}\n\nexports.lte = lte\nfunction lte (a, b, loose) {\n return compare(a, b, loose) <= 0\n}\n\nexports.cmp = cmp\nfunction cmp (a, op, b, loose) {\n switch (op) {\n case '===':\n if (typeof a === 'object')\n a = a.version\n if (typeof b === 'object')\n b = b.version\n return a === b\n\n case '!==':\n if (typeof a === 'object')\n a = a.version\n if (typeof b === 'object')\n b = b.version\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}\n\nexports.Comparator = Comparator\nfunction Comparator (comp, options) {\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\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 if (!(this instanceof Comparator)) {\n return new Comparator(comp, options)\n }\n\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\nvar ANY = {}\nComparator.prototype.parse = function (comp) {\n var r = this.options.loose ? re[COMPARATORLOOSE] : re[COMPARATOR]\n var m = comp.match(r)\n\n if (!m) {\n throw new TypeError('Invalid comparator: ' + comp)\n }\n\n this.operator = 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\nComparator.prototype.toString = function () {\n return this.value\n}\n\nComparator.prototype.test = function (version) {\n debug('Comparator.test', version, this.options.loose)\n\n if (this.semver === ANY) {\n return true\n }\n\n if (typeof version === 'string') {\n version = new SemVer(version, this.options)\n }\n\n return cmp(version, this.operator, this.semver, this.options)\n}\n\nComparator.prototype.intersects = function (comp, options) {\n if (!(comp instanceof Comparator)) {\n throw new TypeError('a Comparator is required')\n }\n\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\n\n var rangeTmp\n\n if (this.operator === '') {\n rangeTmp = new Range(comp.value, options)\n return satisfies(this.value, rangeTmp, options)\n } else if (comp.operator === '') {\n rangeTmp = new Range(this.value, options)\n return satisfies(comp.semver, rangeTmp, options)\n }\n\n var sameDirectionIncreasing =\n (this.operator === '>=' || this.operator === '>') &&\n (comp.operator === '>=' || comp.operator === '>')\n var sameDirectionDecreasing =\n (this.operator === '<=' || this.operator === '<') &&\n (comp.operator === '<=' || comp.operator === '<')\n var sameSemVer = this.semver.version === comp.semver.version\n var differentDirectionsInclusive =\n (this.operator === '>=' || this.operator === '<=') &&\n (comp.operator === '>=' || comp.operator === '<=')\n var oppositeDirectionsLessThan =\n cmp(this.semver, '<', comp.semver, options) &&\n ((this.operator === '>=' || this.operator === '>') &&\n (comp.operator === '<=' || comp.operator === '<'))\n var oppositeDirectionsGreaterThan =\n cmp(this.semver, '>', comp.semver, options) &&\n ((this.operator === '<=' || this.operator === '<') &&\n (comp.operator === '>=' || comp.operator === '>'))\n\n return sameDirectionIncreasing || sameDirectionDecreasing ||\n (sameSemVer && differentDirectionsInclusive) ||\n oppositeDirectionsLessThan || oppositeDirectionsGreaterThan\n}\n\nexports.Range = Range\nfunction Range (range, options) {\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\n\n if (range instanceof Range) {\n if (range.loose === !!options.loose &&\n range.includePrerelease === !!options.includePrerelease) {\n return range\n } else {\n return new Range(range.raw, options)\n }\n }\n\n if (range instanceof Comparator) {\n return new Range(range.value, options)\n }\n\n if (!(this instanceof Range)) {\n return new Range(range, options)\n }\n\n this.options = options\n this.loose = !!options.loose\n this.includePrerelease = !!options.includePrerelease\n\n // First, split based on boolean or ||\n this.raw = range\n this.set = range.split(/\\s*\\|\\|\\s*/).map(function (range) {\n return this.parseRange(range.trim())\n }, this).filter(function (c) {\n // throw out any that are not relevant for whatever reason\n return c.length\n })\n\n if (!this.set.length) {\n throw new TypeError('Invalid SemVer Range: ' + range)\n }\n\n this.format()\n}\n\nRange.prototype.format = function () {\n this.range = this.set.map(function (comps) {\n return comps.join(' ').trim()\n }).join('||').trim()\n return this.range\n}\n\nRange.prototype.toString = function () {\n return this.range\n}\n\nRange.prototype.parseRange = function (range) {\n var loose = this.options.loose\n range = range.trim()\n // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n var hr = loose ? re[HYPHENRANGELOOSE] : re[HYPHENRANGE]\n range = range.replace(hr, hyphenReplace)\n debug('hyphen replace', range)\n // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n range = range.replace(re[COMPARATORTRIM], comparatorTrimReplace)\n debug('comparator trim', range, re[COMPARATORTRIM])\n\n // `~ 1.2.3` => `~1.2.3`\n range = range.replace(re[TILDETRIM], tildeTrimReplace)\n\n // `^ 1.2.3` => `^1.2.3`\n range = range.replace(re[CARETTRIM], caretTrimReplace)\n\n // normalize spaces\n range = range.split(/\\s+/).join(' ')\n\n // At this point, the range is completely trimmed and\n // ready to be split into comparators.\n\n var compRe = loose ? re[COMPARATORLOOSE] : re[COMPARATOR]\n var set = range.split(' ').map(function (comp) {\n return parseComparator(comp, this.options)\n }, this).join(' ').split(/\\s+/)\n if (this.options.loose) {\n // in loose mode, throw out any that are not valid comparators\n set = set.filter(function (comp) {\n return !!comp.match(compRe)\n })\n }\n set = set.map(function (comp) {\n return new Comparator(comp, this.options)\n }, this)\n\n return set\n}\n\nRange.prototype.intersects = function (range, options) {\n if (!(range instanceof Range)) {\n throw new TypeError('a Range is required')\n }\n\n return this.set.some(function (thisComparators) {\n return thisComparators.every(function (thisComparator) {\n return range.set.some(function (rangeComparators) {\n return rangeComparators.every(function (rangeComparator) {\n return thisComparator.intersects(rangeComparator, options)\n })\n })\n })\n })\n}\n\n// Mostly just for testing and legacy API reasons\nexports.toComparators = toComparators\nfunction toComparators (range, options) {\n return new Range(range, options).set.map(function (comp) {\n return comp.map(function (c) {\n return c.value\n }).join(' ').trim().split(' ')\n })\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.\nfunction 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\nfunction isX (id) {\n return !id || id.toLowerCase() === 'x' || id === '*'\n}\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0\nfunction replaceTildes (comp, options) {\n return comp.trim().split(/\\s+/).map(function (comp) {\n return replaceTilde(comp, options)\n }).join(' ')\n}\n\nfunction replaceTilde (comp, options) {\n var r = options.loose ? re[TILDELOOSE] : re[TILDE]\n return comp.replace(r, function (_, M, m, p, pr) {\n debug('tilde', comp, _, M, m, p, pr)\n var ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'\n } else if (isX(p)) {\n // ~1.2 == >=1.2.0 <1.3.0\n ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'\n } else if (pr) {\n debug('replaceTilde pr', pr)\n ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n ' <' + M + '.' + (+m + 1) + '.0'\n } else {\n // ~1.2.3 == >=1.2.3 <1.3.0\n ret = '>=' + M + '.' + m + '.' + p +\n ' <' + M + '.' + (+m + 1) + '.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\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0\n// ^1.2.3 --> >=1.2.3 <2.0.0\n// ^1.2.0 --> >=1.2.0 <2.0.0\nfunction replaceCarets (comp, options) {\n return comp.trim().split(/\\s+/).map(function (comp) {\n return replaceCaret(comp, options)\n }).join(' ')\n}\n\nfunction replaceCaret (comp, options) {\n debug('caret', comp, options)\n var r = options.loose ? re[CARETLOOSE] : re[CARET]\n return comp.replace(r, function (_, M, m, p, pr) {\n debug('caret', comp, _, M, m, p, pr)\n var ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'\n } else if (isX(p)) {\n if (M === '0') {\n ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'\n } else {\n ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.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)\n } else {\n ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n ' <' + M + '.' + (+m + 1) + '.0'\n }\n } else {\n ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n ' <' + (+M + 1) + '.0.0'\n }\n } else {\n debug('no pr')\n if (M === '0') {\n if (m === '0') {\n ret = '>=' + M + '.' + m + '.' + p +\n ' <' + M + '.' + m + '.' + (+p + 1)\n } else {\n ret = '>=' + M + '.' + m + '.' + p +\n ' <' + M + '.' + (+m + 1) + '.0'\n }\n } else {\n ret = '>=' + M + '.' + m + '.' + p +\n ' <' + (+M + 1) + '.0.0'\n }\n }\n\n debug('caret return', ret)\n return ret\n })\n}\n\nfunction replaceXRanges (comp, options) {\n debug('replaceXRanges', comp, options)\n return comp.split(/\\s+/).map(function (comp) {\n return replaceXRange(comp, options)\n }).join(' ')\n}\n\nfunction replaceXRange (comp, options) {\n comp = comp.trim()\n var r = options.loose ? re[XRANGELOOSE] : re[XRANGE]\n return comp.replace(r, function (ret, gtlt, M, m, p, pr) {\n debug('xRange', comp, ret, gtlt, M, m, p, pr)\n var xM = isX(M)\n var xm = xM || isX(m)\n var xp = xm || isX(p)\n var anyX = xp\n\n if (gtlt === '=' && anyX) {\n gtlt = ''\n }\n\n if (xM) {\n if (gtlt === '>' || gtlt === '<') {\n // nothing is allowed\n ret = '<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 // >1.2.3 => >= 1.2.4\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 ret = gtlt + M + '.' + m + '.' + p\n } else if (xm) {\n ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'\n } else if (xp) {\n ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.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.\nfunction replaceStars (comp, options) {\n debug('replaceStars', comp, options)\n // Looseness is ignored here. star is always as loose as it gets!\n return comp.trim().replace(re[STAR], '')\n}\n\n// This function is passed to string.replace(re[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 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0\nfunction hyphenReplace ($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'\n } else if (isX(fp)) {\n from = '>=' + fM + '.' + fm + '.0'\n } else {\n from = '>=' + from\n }\n\n if (isX(tM)) {\n to = ''\n } else if (isX(tm)) {\n to = '<' + (+tM + 1) + '.0.0'\n } else if (isX(tp)) {\n to = '<' + tM + '.' + (+tm + 1) + '.0'\n } else if (tpr) {\n to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr\n } else {\n to = '<=' + to\n }\n\n return (from + ' ' + to).trim()\n}\n\n// if ANY of the sets match ALL of its comparators, then pass\nRange.prototype.test = function (version) {\n if (!version) {\n return false\n }\n\n if (typeof version === 'string') {\n version = new SemVer(version, this.options)\n }\n\n for (var 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\nfunction testSet (set, version, options) {\n for (var 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 (i = 0; i < set.length; i++) {\n debug(set[i].semver)\n if (set[i].semver === ANY) {\n continue\n }\n\n if (set[i].semver.prerelease.length > 0) {\n var 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\nexports.satisfies = satisfies\nfunction 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}\n\nexports.maxSatisfying = maxSatisfying\nfunction maxSatisfying (versions, range, options) {\n var max = null\n var maxSV = null\n try {\n var rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach(function (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}\n\nexports.minSatisfying = minSatisfying\nfunction minSatisfying (versions, range, options) {\n var min = null\n var minSV = null\n try {\n var rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach(function (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}\n\nexports.minVersion = minVersion\nfunction minVersion (range, loose) {\n range = new Range(range, loose)\n\n var 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 (var i = 0; i < range.set.length; ++i) {\n var comparators = range.set[i]\n\n comparators.forEach(function (comparator) {\n // Clone to avoid manipulating the comparator's semver object.\n var 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 (!minver || gt(minver, compver)) {\n minver = 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 }\n\n if (minver && range.test(minver)) {\n return minver\n }\n\n return null\n}\n\nexports.validRange = validRange\nfunction 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}\n\n// Determine if version is less than all the versions possible in the range\nexports.ltr = ltr\nfunction ltr (version, range, options) {\n return outside(version, range, '<', options)\n}\n\n// Determine if version is greater than all the versions possible in the range.\nexports.gtr = gtr\nfunction gtr (version, range, options) {\n return outside(version, range, '>', options)\n}\n\nexports.outside = outside\nfunction outside (version, range, hilo, options) {\n version = new SemVer(version, options)\n range = new Range(range, options)\n\n var 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 satisifes 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 (var i = 0; i < range.set.length; ++i) {\n var comparators = range.set[i]\n\n var high = null\n var low = null\n\n comparators.forEach(function (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\nexports.prerelease = prerelease\nfunction prerelease (version, options) {\n var parsed = parse(version, options)\n return (parsed && parsed.prerelease.length) ? parsed.prerelease : null\n}\n\nexports.intersects = intersects\nfunction intersects (r1, r2, options) {\n r1 = new Range(r1, options)\n r2 = new Range(r2, options)\n return r1.intersects(r2)\n}\n\nexports.coerce = coerce\nfunction coerce (version) {\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n var match = version.match(re[COERCE])\n\n if (match == null) {\n return null\n }\n\n return parse(match[1] +\n '.' + (match[2] || '0') +\n '.' + (match[3] || '0'))\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 var subsegment = parent.addNewSubsegment(this.serviceIdentifier);\n var traceId = parent.segment ? parent.segment.trace_id : parent.trace_id;\n var buildListener = function (req) {\n req.httpRequest.headers['X-Amzn-Trace-Id'] = 'Root=' + traceId + ';Parent=' + subsegment.id +\n ';Sampled=' + (subsegment.segment.notTraced ? '0' : '1');\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.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 = [\"AbortError\", \"TimeoutError\", \"RequestTimeout\", \"RequestTimeoutException\"];\nexports.TRANSIENT_ERROR_STATUS_CODES = [500, 502, 503, 504];\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.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.TRANSIENT_ERROR_STATUS_CODES.includes(((_a = error.$metadata) === null || _a === void 0 ? void 0 : _a.httpStatusCode) || 0);\n};\nexports.isTransientError = isTransientError;\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 const subsegment = segment.addNewSubsegment(service);\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: parent.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 const subsegment = parent.addNewSubsegment(hostname);\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=' + (!root.notTraced ? '1' : '0');\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 // Only need to remove our listener & re-emit if we're not listening using the errorMonitor,\n // e.g. the app is running on Node 10. Otherwise the errorMonitor will re-emit automatically.\n // See: https://github.com/aws/aws-xray-sdk-node/issues/318\n // TODO: Remove this logic once node 12 support is deprecated\n if (!events.errorMonitor && this.listenerCount('error') <= 1) {\n this.removeListener('error', errorCapturer);\n this.emit('error', 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", "module.exports = require('stream');\n", "'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar _require = require('buffer'),\n Buffer = _require.Buffer;\n\nvar _require2 = require('util'),\n inspect = _require2.inspect;\n\nvar custom = inspect && inspect.custom || 'inspect';\n\nfunction copyBuffer(src, target, offset) {\n Buffer.prototype.copy.call(src, target, offset);\n}\n\nmodule.exports =\n/*#__PURE__*/\nfunction () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n\n _createClass(BufferList, [{\n key: \"push\",\n value: function push(v) {\n var entry = {\n data: v,\n next: null\n };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n }\n }, {\n key: \"unshift\",\n value: function unshift(v) {\n var entry = {\n data: v,\n next: this.head\n };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n }\n }, {\n key: \"shift\",\n value: function shift() {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n }\n }, {\n key: \"clear\",\n value: function clear() {\n this.head = this.tail = null;\n this.length = 0;\n }\n }, {\n key: \"join\",\n value: function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n\n while (p = p.next) {\n ret += s + p.data;\n }\n\n return ret;\n }\n }, {\n key: \"concat\",\n value: function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n\n return ret;\n } // Consumes a specified amount of bytes or characters from the buffered data.\n\n }, {\n key: \"consume\",\n value: function consume(n, hasStrings) {\n var ret;\n\n if (n < this.head.data.length) {\n // `slice` is the same for buffers and strings.\n ret = this.head.data.slice(0, n);\n this.head.data = this.head.data.slice(n);\n } else if (n === this.head.data.length) {\n // First chunk is a perfect match.\n ret = this.shift();\n } else {\n // Result spans more than one buffer.\n ret = hasStrings ? this._getString(n) : this._getBuffer(n);\n }\n\n return ret;\n }\n }, {\n key: \"first\",\n value: function first() {\n return this.head.data;\n } // Consumes a specified amount of characters from the buffered data.\n\n }, {\n key: \"_getString\",\n value: function _getString(n) {\n var p = this.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = str.slice(nb);\n }\n\n break;\n }\n\n ++c;\n }\n\n this.length -= c;\n return ret;\n } // Consumes a specified amount of bytes from the buffered data.\n\n }, {\n key: \"_getBuffer\",\n value: function _getBuffer(n) {\n var ret = Buffer.allocUnsafe(n);\n var p = this.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = buf.slice(nb);\n }\n\n break;\n }\n\n ++c;\n }\n\n this.length -= c;\n return ret;\n } // Make sure the linked list only shows the minimal necessary information.\n\n }, {\n key: custom,\n value: function value(_, options) {\n return inspect(this, _objectSpread({}, options, {\n // Only inspect one level.\n depth: 0,\n // It should not recurse.\n customInspect: false\n }));\n }\n }]);\n\n return BufferList;\n}();", "'use strict'; // undocumented cb() API, needed for core, not for public API\n\nfunction destroy(err, cb) {\n var _this = this;\n\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err) {\n if (!this._writableState) {\n process.nextTick(emitErrorNT, this, err);\n } else if (!this._writableState.errorEmitted) {\n this._writableState.errorEmitted = true;\n process.nextTick(emitErrorNT, this, err);\n }\n }\n\n return this;\n } // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n } // if this is a duplex stream mark the writable part as destroyed as well\n\n\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n if (!_this._writableState) {\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else if (!_this._writableState.errorEmitted) {\n _this._writableState.errorEmitted = true;\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n } else if (cb) {\n process.nextTick(emitCloseNT, _this);\n cb(err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n });\n\n return this;\n}\n\nfunction emitErrorAndCloseNT(self, err) {\n emitErrorNT(self, err);\n emitCloseNT(self);\n}\n\nfunction emitCloseNT(self) {\n if (self._writableState && !self._writableState.emitClose) return;\n if (self._readableState && !self._readableState.emitClose) return;\n self.emit('close');\n}\n\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finalCalled = false;\n this._writableState.prefinished = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\n\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\n\nfunction errorOrDestroy(stream, err) {\n // We have tests that rely on errors being emitted\n // in the same tick, so changing this is semver major.\n // For now when you opt-in to autoDestroy we allow\n // the error to be emitted nextTick. In a future\n // semver major update we should change the default to this.\n var rState = stream._readableState;\n var wState = stream._writableState;\n if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\n\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy,\n errorOrDestroy: errorOrDestroy\n};", "'use strict';\n\nconst codes = {};\n\nfunction createErrorType(code, message, Base) {\n if (!Base) {\n Base = Error\n }\n\n function getMessage (arg1, arg2, arg3) {\n if (typeof message === 'string') {\n return message\n } else {\n return message(arg1, arg2, arg3)\n }\n }\n\n class NodeError extends Base {\n constructor (arg1, arg2, arg3) {\n super(getMessage(arg1, arg2, arg3));\n }\n }\n\n NodeError.prototype.name = Base.name;\n NodeError.prototype.code = code;\n\n codes[code] = NodeError;\n}\n\n// https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\nfunction oneOf(expected, thing) {\n if (Array.isArray(expected)) {\n const len = expected.length;\n expected = expected.map((i) => String(i));\n if (len > 2) {\n return `one of ${thing} ${expected.slice(0, len - 1).join(', ')}, or ` +\n expected[len - 1];\n } else if (len === 2) {\n return `one of ${thing} ${expected[0]} or ${expected[1]}`;\n } else {\n return `of ${thing} ${expected[0]}`;\n }\n } else {\n return `of ${thing} ${String(expected)}`;\n }\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\nfunction startsWith(str, search, pos) {\n\treturn str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\nfunction endsWith(str, search, this_len) {\n\tif (this_len === undefined || this_len > str.length) {\n\t\tthis_len = str.length;\n\t}\n\treturn str.substring(this_len - search.length, this_len) === search;\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\nfunction includes(str, search, start) {\n if (typeof start !== 'number') {\n start = 0;\n }\n\n if (start + search.length > str.length) {\n return false;\n } else {\n return str.indexOf(search, start) !== -1;\n }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n return 'The value \"' + value + '\" is invalid for option \"' + name + '\"'\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n // determiner: 'must be' or 'must not be'\n let determiner;\n if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n determiner = 'must not be';\n expected = expected.replace(/^not /, '');\n } else {\n determiner = 'must be';\n }\n\n let msg;\n if (endsWith(name, ' argument')) {\n // For cases like 'first argument'\n msg = `The ${name} ${determiner} ${oneOf(expected, 'type')}`;\n } else {\n const type = includes(name, '.') ? 'property' : 'argument';\n msg = `The \"${name}\" ${type} ${determiner} ${oneOf(expected, 'type')}`;\n }\n\n msg += `. Received type ${typeof actual}`;\n return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n return 'The ' + name + ' method is not implemented'\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n return 'Unknown encoding: ' + arg\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\n\nmodule.exports.codes = codes;\n", "'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\n\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\n\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n\n if (hwm != null) {\n if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n var name = isDuplex ? duplexKey : 'highWaterMark';\n throw new ERR_INVALID_OPT_VALUE(name, hwm);\n }\n\n return Math.floor(hwm);\n } // Default value\n\n\n return state.objectMode ? 16 : 16 * 1024;\n}\n\nmodule.exports = {\n getHighWaterMark: getHighWaterMark\n};", "if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n", "try {\n var util = require('util');\n /* istanbul ignore next */\n if (typeof util.inherits !== 'function') throw '';\n module.exports = util.inherits;\n} catch (e) {\n /* istanbul ignore next */\n module.exports = require('./inherits_browser.js');\n}\n", "\n/**\n * For Node.js, simply re-export the core `util.deprecate` function.\n */\n\nmodule.exports = require('util').deprecate;\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n'use strict';\n\nmodule.exports = Writable;\n/* <replacement> */\n\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n} // It seems a linked list but it is not\n// there will be only 2 of these for each stream\n\n\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* </replacement> */\n\n/*<replacement>*/\n\n\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n/*<replacement>*/\n\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\n\nrequire('inherits')(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream,\n // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n\n this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex); // if _final has been called\n\n this.finalCalled = false; // drain event flag.\n\n this.needDrain = false; // at the start of calling end()\n\n this.ending = false; // when end() has been called, and returned\n\n this.ended = false; // when 'finish' is emitted\n\n this.finished = false; // has it been destroyed\n\n this.destroyed = false; // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode; // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n\n this.length = 0; // a flag to see when we're in the middle of a write.\n\n this.writing = false; // when true all writes will be buffered until .uncork() call\n\n this.corked = 0; // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n\n this.sync = true; // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n\n this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb)\n\n this.onwrite = function (er) {\n onwrite(stream, er);\n }; // the callback that the user supplies to write(chunk,encoding,cb)\n\n\n this.writecb = null; // the amount that is being written when _write is called.\n\n this.writelen = 0;\n this.bufferedRequest = null;\n this.lastBufferedRequest = null; // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n\n this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n\n this.prefinished = false; // True if the error was already emitted and should not be thrown again\n\n this.errorEmitted = false; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'finish' (and potentially 'end')\n\n this.autoDestroy = !!options.autoDestroy; // count buffered requests\n\n this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n\n while (current) {\n out.push(current);\n current = current.next;\n }\n\n return out;\n};\n\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function writableStateBufferGetter() {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})(); // Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\n\n\nvar realHasInstance;\n\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function value(object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function realHasInstance(object) {\n return object instanceof this;\n };\n}\n\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex'); // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the WritableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n this._writableState = new WritableState(options, this, isDuplex); // legacy.\n\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n if (typeof options.writev === 'function') this._writev = options.writev;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n if (typeof options.final === 'function') this._final = options.final;\n }\n\n Stream.call(this);\n} // Otherwise people can pipe Writable streams, which is just wrong.\n\n\nWritable.prototype.pipe = function () {\n errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new ERR_STREAM_WRITE_AFTER_END(); // TODO: defer error events consistently everywhere, not just the cb\n\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n} // Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\n\n\nfunction validChunk(stream, state, chunk, cb) {\n var er;\n\n if (chunk === null) {\n er = new ERR_STREAM_NULL_VALUES();\n } else if (typeof chunk !== 'string' && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n }\n\n if (er) {\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n return false;\n }\n\n return true;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n if (typeof cb !== 'function') cb = nop;\n if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n return ret;\n};\n\nWritable.prototype.cork = function () {\n this._writableState.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n\n return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n}); // if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\n\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n\n var len = state.objectMode ? 1 : chunk.length;\n state.length += len;\n var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false.\n\n if (!ret) state.needDrain = true;\n\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n process.nextTick(cb, er); // this can emit finish, and it will always happen\n // after error\n\n process.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er); // this can emit finish, but finish must\n // always follow error\n\n finishMaybe(stream, state);\n }\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n onwriteStateUpdate(state);\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state) || stream.destroyed;\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n process.nextTick(afterWrite, stream, state, finished, cb);\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n} // Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\n\n\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n} // if there's something in the buffer waiting, then process it\n\n\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n var count = 0;\n var allBuffers = true;\n\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n\n buffer.allBuffers = allBuffers;\n doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n\n state.pendingcb++;\n state.lastBufferedRequest = null;\n\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--; // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); // .end() fully uncorks\n\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n } // ignore unnecessary end() calls.\n\n\n if (!state.ending) endWritable(this, state, cb);\n return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n});\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\n\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n\n if (err) {\n errorOrDestroy(stream, err);\n }\n\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\n\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function' && !state.destroyed) {\n state.pendingcb++;\n state.finalCalled = true;\n process.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n\n if (need) {\n prefinish(stream, state);\n\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the readable side is ready for autoDestroy as well\n var rState = stream._readableState;\n\n if (!rState || rState.autoDestroy && rState.endEmitted) {\n stream.destroy();\n }\n }\n }\n }\n\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n\n if (cb) {\n if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n }\n\n state.ended = true;\n stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n } // reuse the free corkReq.\n\n\n state.corkedRequestsFree.next = corkReq;\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._writableState === undefined) {\n return false;\n }\n\n return this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._writableState.destroyed = value;\n }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\n\nWritable.prototype._destroy = function (err, cb) {\n cb(err);\n};", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n'use strict';\n/*<replacement>*/\n\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n\n for (var key in obj) {\n keys.push(key);\n }\n\n return keys;\n};\n/*</replacement>*/\n\n\nmodule.exports = Duplex;\n\nvar Readable = require('./_stream_readable');\n\nvar Writable = require('./_stream_writable');\n\nrequire('inherits')(Duplex, Readable);\n\n{\n // Allow the keys array to be GC'ed.\n var keys = objectKeys(Writable.prototype);\n\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\n\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n Readable.call(this, options);\n Writable.call(this, options);\n this.allowHalfOpen = true;\n\n if (options) {\n if (options.readable === false) this.readable = false;\n if (options.writable === false) this.writable = false;\n\n if (options.allowHalfOpen === false) {\n this.allowHalfOpen = false;\n this.once('end', onend);\n }\n }\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n}); // the no-half-open enforcer\n\nfunction onend() {\n // If the writable side ended, then we're ok.\n if (this._writableState.ended) return; // no more data can be written.\n // But allow more writes to happen in this tick.\n\n process.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});", "/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\n/*</replacement>*/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\n}", "// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\n\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n callback.apply(this, args);\n };\n}\n\nfunction noop() {}\n\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\n\nfunction eos(stream, opts, callback) {\n if (typeof opts === 'function') return eos(stream, null, opts);\n if (!opts) opts = {};\n callback = once(callback || noop);\n var readable = opts.readable || opts.readable !== false && stream.readable;\n var writable = opts.writable || opts.writable !== false && stream.writable;\n\n var onlegacyfinish = function onlegacyfinish() {\n if (!stream.writable) onfinish();\n };\n\n var writableEnded = stream._writableState && stream._writableState.finished;\n\n var onfinish = function onfinish() {\n writable = false;\n writableEnded = true;\n if (!readable) callback.call(stream);\n };\n\n var readableEnded = stream._readableState && stream._readableState.endEmitted;\n\n var onend = function onend() {\n readable = false;\n readableEnded = true;\n if (!writable) callback.call(stream);\n };\n\n var onerror = function onerror(err) {\n callback.call(stream, err);\n };\n\n var onclose = function onclose() {\n var err;\n\n if (readable && !readableEnded) {\n if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n\n if (writable && !writableEnded) {\n if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n };\n\n var onrequest = function onrequest() {\n stream.req.on('finish', onfinish);\n };\n\n if (isRequest(stream)) {\n stream.on('complete', onfinish);\n stream.on('abort', onclose);\n if (stream.req) onrequest();else stream.on('request', onrequest);\n } else if (writable && !stream._writableState) {\n // legacy streams\n stream.on('end', onlegacyfinish);\n stream.on('close', onlegacyfinish);\n }\n\n stream.on('end', onend);\n stream.on('finish', onfinish);\n if (opts.error !== false) stream.on('error', onerror);\n stream.on('close', onclose);\n return function () {\n stream.removeListener('complete', onfinish);\n stream.removeListener('abort', onclose);\n stream.removeListener('request', onrequest);\n if (stream.req) stream.req.removeListener('finish', onfinish);\n stream.removeListener('end', onlegacyfinish);\n stream.removeListener('close', onlegacyfinish);\n stream.removeListener('finish', onfinish);\n stream.removeListener('end', onend);\n stream.removeListener('error', onerror);\n stream.removeListener('close', onclose);\n };\n}\n\nmodule.exports = eos;", "'use strict';\n\nvar _Object$setPrototypeO;\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar finished = require('./end-of-stream');\n\nvar kLastResolve = Symbol('lastResolve');\nvar kLastReject = Symbol('lastReject');\nvar kError = Symbol('error');\nvar kEnded = Symbol('ended');\nvar kLastPromise = Symbol('lastPromise');\nvar kHandlePromise = Symbol('handlePromise');\nvar kStream = Symbol('stream');\n\nfunction createIterResult(value, done) {\n return {\n value: value,\n done: done\n };\n}\n\nfunction readAndResolve(iter) {\n var resolve = iter[kLastResolve];\n\n if (resolve !== null) {\n var data = iter[kStream].read(); // we defer if data is null\n // we can be expecting either 'end' or\n // 'error'\n\n if (data !== null) {\n iter[kLastPromise] = null;\n iter[kLastResolve] = null;\n iter[kLastReject] = null;\n resolve(createIterResult(data, false));\n }\n }\n}\n\nfunction onReadable(iter) {\n // we wait for the next tick, because it might\n // emit an error with process.nextTick\n process.nextTick(readAndResolve, iter);\n}\n\nfunction wrapForNext(lastPromise, iter) {\n return function (resolve, reject) {\n lastPromise.then(function () {\n if (iter[kEnded]) {\n resolve(createIterResult(undefined, true));\n return;\n }\n\n iter[kHandlePromise](resolve, reject);\n }, reject);\n };\n}\n\nvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\nvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n get stream() {\n return this[kStream];\n },\n\n next: function next() {\n var _this = this;\n\n // if we have detected an error in the meanwhile\n // reject straight away\n var error = this[kError];\n\n if (error !== null) {\n return Promise.reject(error);\n }\n\n if (this[kEnded]) {\n return Promise.resolve(createIterResult(undefined, true));\n }\n\n if (this[kStream].destroyed) {\n // We need to defer via nextTick because if .destroy(err) is\n // called, the error will be emitted via nextTick, and\n // we cannot guarantee that there is no error lingering around\n // waiting to be emitted.\n return new Promise(function (resolve, reject) {\n process.nextTick(function () {\n if (_this[kError]) {\n reject(_this[kError]);\n } else {\n resolve(createIterResult(undefined, true));\n }\n });\n });\n } // if we have multiple next() calls\n // we will wait for the previous Promise to finish\n // this logic is optimized to support for await loops,\n // where next() is only called once at a time\n\n\n var lastPromise = this[kLastPromise];\n var promise;\n\n if (lastPromise) {\n promise = new Promise(wrapForNext(lastPromise, this));\n } else {\n // fast path needed to support multiple this.push()\n // without triggering the next() queue\n var data = this[kStream].read();\n\n if (data !== null) {\n return Promise.resolve(createIterResult(data, false));\n }\n\n promise = new Promise(this[kHandlePromise]);\n }\n\n this[kLastPromise] = promise;\n return promise;\n }\n}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {\n return this;\n}), _defineProperty(_Object$setPrototypeO, \"return\", function _return() {\n var _this2 = this;\n\n // destroy(err, cb) is a private API\n // we can guarantee we have that here, because we control the\n // Readable class this is attached to\n return new Promise(function (resolve, reject) {\n _this2[kStream].destroy(null, function (err) {\n if (err) {\n reject(err);\n return;\n }\n\n resolve(createIterResult(undefined, true));\n });\n });\n}), _Object$setPrototypeO), AsyncIteratorPrototype);\n\nvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n var _Object$create;\n\n var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {\n value: stream,\n writable: true\n }), _defineProperty(_Object$create, kLastResolve, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kLastReject, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kError, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kEnded, {\n value: stream._readableState.endEmitted,\n writable: true\n }), _defineProperty(_Object$create, kHandlePromise, {\n value: function value(resolve, reject) {\n var data = iterator[kStream].read();\n\n if (data) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(data, false));\n } else {\n iterator[kLastResolve] = resolve;\n iterator[kLastReject] = reject;\n }\n },\n writable: true\n }), _Object$create));\n iterator[kLastPromise] = null;\n finished(stream, function (err) {\n if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n var reject = iterator[kLastReject]; // reject if we are waiting for data in the Promise\n // returned by next() and store the error\n\n if (reject !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n reject(err);\n }\n\n iterator[kError] = err;\n return;\n }\n\n var resolve = iterator[kLastResolve];\n\n if (resolve !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(undefined, true));\n }\n\n iterator[kEnded] = true;\n });\n stream.on('readable', onReadable.bind(null, iterator));\n return iterator;\n};\n\nmodule.exports = createReadableStreamAsyncIterator;", "'use strict';\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar ERR_INVALID_ARG_TYPE = require('../../../errors').codes.ERR_INVALID_ARG_TYPE;\n\nfunction from(Readable, iterable, opts) {\n var iterator;\n\n if (iterable && typeof iterable.next === 'function') {\n iterator = iterable;\n } else if (iterable && iterable[Symbol.asyncIterator]) iterator = iterable[Symbol.asyncIterator]();else if (iterable && iterable[Symbol.iterator]) iterator = iterable[Symbol.iterator]();else throw new ERR_INVALID_ARG_TYPE('iterable', ['Iterable'], iterable);\n\n var readable = new Readable(_objectSpread({\n objectMode: true\n }, opts)); // Reading boolean to protect against _read\n // being called before last iteration completion.\n\n var reading = false;\n\n readable._read = function () {\n if (!reading) {\n reading = true;\n next();\n }\n };\n\n function next() {\n return _next2.apply(this, arguments);\n }\n\n function _next2() {\n _next2 = _asyncToGenerator(function* () {\n try {\n var _ref = yield iterator.next(),\n value = _ref.value,\n done = _ref.done;\n\n if (done) {\n readable.push(null);\n } else if (readable.push((yield value))) {\n next();\n } else {\n reading = false;\n }\n } catch (err) {\n readable.destroy(err);\n }\n });\n return _next2.apply(this, arguments);\n }\n\n return readable;\n}\n\nmodule.exports = from;", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n'use strict';\n\nmodule.exports = Readable;\n/*<replacement>*/\n\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n/*<replacement>*/\n\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\n\n\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n/*<replacement>*/\n\n\nvar debugUtil = require('util');\n\nvar debug;\n\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function debug() {};\n}\n/*</replacement>*/\n\n\nvar BufferList = require('./internal/streams/buffer_list');\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT; // Lazy loaded to improve the startup performance.\n\n\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\n\nrequire('inherits')(Readable, Stream);\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n\n this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex); // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false; // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n\n this.sync = true; // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n this.paused = true; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'end' (and potentially 'finish')\n\n this.autoDestroy = !!options.autoDestroy; // has it been destroyed\n\n this.destroyed = false; // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s\n\n this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled\n\n this.readingMore = false;\n this.decoder = null;\n this.encoding = null;\n\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\n\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n if (!(this instanceof Readable)) return new Readable(options); // Checking for a Stream.Duplex instance is faster here instead of inside\n // the ReadableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n this._readableState = new ReadableState(options, this, isDuplex); // legacy\n\n this.readable = true;\n\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n\n Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\n\nReadable.prototype._destroy = function (err, cb) {\n cb(err);\n}; // Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\n\n\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n}; // Unshift should *always* be something directly out of read()\n\n\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n debug('readableAddChunk', chunk);\n var state = stream._readableState;\n\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n\n if (er) {\n errorOrDestroy(stream, er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (addToFront) {\n if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());\n } else if (state.destroyed) {\n return false;\n } else {\n state.reading = false;\n\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n maybeReadMore(stream, state);\n }\n } // We can push more data if we are below the highWaterMark.\n // Also, if we have no data yet, we can stand some more bytes.\n // This is to work around cases where hwm=0, such as the repl.\n\n\n return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n state.awaitDrain = 0;\n stream.emit('data', chunk);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n if (state.needReadable) emitReadable(stream);\n }\n\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n }\n\n return er;\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n}; // backwards compatibility.\n\n\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n var decoder = new StringDecoder(enc);\n this._readableState.decoder = decoder; // If setEncoding(null), decoder.encoding equals utf8\n\n this._readableState.encoding = this._readableState.decoder.encoding; // Iterate over current buffer to convert already stored Buffers:\n\n var p = this._readableState.buffer.head;\n var content = '';\n\n while (p !== null) {\n content += decoder.write(p.data);\n p = p.next;\n }\n\n this._readableState.buffer.clear();\n\n if (content !== '') this._readableState.buffer.push(content);\n this._readableState.length = content.length;\n return this;\n}; // Don't raise the hwm > 1GB\n\n\nvar MAX_HWM = 0x40000000;\n\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n\n return n;\n} // This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\n\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n } // If we're asking for more than the current hwm, then raise the hwm.\n\n\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n; // Don't have enough\n\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n\n return state.length;\n} // you can override either this method, or the async _read(n) below.\n\n\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n if (n !== 0) state.emittedReadable = false; // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n\n if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state); // if we've ended, and we're now clear, then finish it up.\n\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n } // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n // if we need a readable event, then we need to do some reading.\n\n\n var doRead = state.needReadable;\n debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some\n\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n } // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n\n\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true; // if the length is currently zero, then we *need* a readable event.\n\n if (state.length === 0) state.needReadable = true; // call internal read method\n\n this._read(state.highWaterMark);\n\n state.sync = false; // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\n if (ret === null) {\n state.needReadable = state.length <= state.highWaterMark;\n n = 0;\n } else {\n state.length -= n;\n state.awaitDrain = 0;\n }\n\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true; // If we tried to read() past the EOF, then emit end on the next tick.\n\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n debug('onEofChunk');\n if (state.ended) return;\n\n if (state.decoder) {\n var chunk = state.decoder.end();\n\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n\n state.ended = true;\n\n if (state.sync) {\n // if we are sync, wait until next tick to emit the data.\n // Otherwise we risk emitting data in the flow()\n // the readable code triggers during a read() call\n emitReadable(stream);\n } else {\n // emit 'readable' now to make sure it gets picked up.\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n state.emittedReadable = true;\n emitReadable_(stream);\n }\n }\n} // Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\n\n\nfunction emitReadable(stream) {\n var state = stream._readableState;\n debug('emitReadable', state.needReadable, state.emittedReadable);\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n process.nextTick(emitReadable_, stream);\n }\n}\n\nfunction emitReadable_(stream) {\n var state = stream._readableState;\n debug('emitReadable_', state.destroyed, state.length, state.ended);\n\n if (!state.destroyed && (state.length || state.ended)) {\n stream.emit('readable');\n state.emittedReadable = false;\n } // The stream needs another readable event if\n // 1. It is not flowing, as the flow mechanism will take\n // care of it.\n // 2. It is not ended.\n // 3. It is below the highWaterMark, so we can schedule\n // another readable later.\n\n\n state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n flow(stream);\n} // at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\n\n\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n process.nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n // Attempt to read more data if we should.\n //\n // The conditions for reading more data are (one of):\n // - Not enough data buffered (state.length < state.highWaterMark). The loop\n // is responsible for filling the buffer with enough data if such data\n // is available. If highWaterMark is 0 and we are not in the flowing mode\n // we should _not_ attempt to buffer any extra data. We'll get more data\n // when the stream consumer calls read() instead.\n // - No data in the buffer, and the stream is in flowing mode. In this mode\n // the loop below is responsible for ensuring read() is called. Failing to\n // call read here would abort the flow and there's no other mechanism for\n // continuing the flow if the stream consumer has just subscribed to the\n // 'data' event.\n //\n // In addition to the above conditions to keep reading data, the following\n // conditions prevent the data from being read:\n // - The stream has ended (state.ended).\n // - There is already a pending 'read' operation (state.reading). This is a\n // case where the the stream has called the implementation defined _read()\n // method, but they are processing the call asynchronously and have _not_\n // called push() with new data. In this case we skip performing more\n // read()s. The execution ends in this method again after the _read() ends\n // up calling push() with more data.\n while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n var len = state.length;\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length) // didn't get any data, stop spinning.\n break;\n }\n\n state.readingMore = false;\n} // abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\n\n\nReadable.prototype._read = function (n) {\n errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n\n default:\n state.pipes.push(dest);\n break;\n }\n\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);\n dest.on('unpipe', onunpipe);\n\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n } // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n\n\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n var cleanedUp = false;\n\n function cleanup() {\n debug('cleanup'); // cleanup event handlers once the pipe is broken\n\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n cleanedUp = true; // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n src.on('data', ondata);\n\n function ondata(chunk) {\n debug('ondata');\n var ret = dest.write(chunk);\n debug('dest.write', ret);\n\n if (ret === false) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', state.awaitDrain);\n state.awaitDrain++;\n }\n\n src.pause();\n }\n } // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n\n\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\n } // Make sure our error handler is attached before userland ones.\n\n\n prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once.\n\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n\n dest.once('close', onclose);\n\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n } // tell the dest that it's being piped to\n\n\n dest.emit('pipe', src); // start the flow if it hasn't been started already.\n\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function pipeOnDrainFunctionResult() {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = {\n hasUnpiped: false\n }; // if we're not piping anywhere, then do nothing.\n\n if (state.pipesCount === 0) return this; // just one destination. most common case.\n\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n if (!dest) dest = state.pipes; // got a match.\n\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n } // slow case. multiple pipe destinations.\n\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var i = 0; i < len; i++) {\n dests[i].emit('unpipe', this, {\n hasUnpiped: false\n });\n }\n\n return this;\n } // try to find the right one.\n\n\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n dest.emit('unpipe', this, unpipeInfo);\n return this;\n}; // set up data events if they are asked for\n// Ensure readable listeners eventually get something\n\n\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n var state = this._readableState;\n\n if (ev === 'data') {\n // update readableListening so that resume() may be a no-op\n // a few lines down. This is needed to support once('readable').\n state.readableListening = this.listenerCount('readable') > 0; // Try start flowing on next tick if stream isn't explicitly paused\n\n if (state.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.flowing = false;\n state.emittedReadable = false;\n debug('on readable', state.length, state.reading);\n\n if (state.length) {\n emitReadable(this);\n } else if (!state.reading) {\n process.nextTick(nReadingNextTick, this);\n }\n }\n }\n\n return res;\n};\n\nReadable.prototype.addListener = Readable.prototype.on;\n\nReadable.prototype.removeListener = function (ev, fn) {\n var res = Stream.prototype.removeListener.call(this, ev, fn);\n\n if (ev === 'readable') {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n\n return res;\n};\n\nReadable.prototype.removeAllListeners = function (ev) {\n var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n\n if (ev === 'readable' || ev === undefined) {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n\n return res;\n};\n\nfunction updateReadableListening(self) {\n var state = self._readableState;\n state.readableListening = self.listenerCount('readable') > 0;\n\n if (state.resumeScheduled && !state.paused) {\n // flowing needs to be set to true now, otherwise\n // the upcoming resume will not flow.\n state.flowing = true; // crude way to check if we should resume\n } else if (self.listenerCount('data') > 0) {\n self.resume();\n }\n}\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n} // pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\n\n\nReadable.prototype.resume = function () {\n var state = this._readableState;\n\n if (!state.flowing) {\n debug('resume'); // we flow only if there is no one listening\n // for readable, but we still have to call\n // resume()\n\n state.flowing = !state.readableListening;\n resume(this, state);\n }\n\n state.paused = false;\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n process.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n debug('resume', state.reading);\n\n if (!state.reading) {\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n\n if (this._readableState.flowing !== false) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n\n this._readableState.paused = true;\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n\n while (state.flowing && stream.read() !== null) {\n ;\n }\n} // wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\n\n\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n stream.on('end', function () {\n debug('wrapped end');\n\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n\n _this.push(null);\n });\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode\n\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = _this.push(chunk);\n\n if (!ret) {\n paused = true;\n stream.pause();\n }\n }); // proxy all the other methods.\n // important when wrapping filters and duplexes.\n\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function methodWrap(method) {\n return function methodWrapReturnFunction() {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n } // proxy certain important events.\n\n\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n } // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n\n\n this._read = function (n) {\n debug('wrapped _read', n);\n\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\n};\n\nif (typeof Symbol === 'function') {\n Readable.prototype[Symbol.asyncIterator] = function () {\n if (createReadableStreamAsyncIterator === undefined) {\n createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n }\n\n return createReadableStreamAsyncIterator(this);\n };\n}\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.highWaterMark;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState && this._readableState.buffer;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.flowing;\n },\n set: function set(state) {\n if (this._readableState) {\n this._readableState.flowing = state;\n }\n }\n}); // exposed for testing purposes only.\n\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.length;\n }\n}); // Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = state.buffer.consume(n, state.decoder);\n }\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n debug('endReadable', state.endEmitted);\n\n if (!state.endEmitted) {\n state.ended = true;\n process.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n debug('endReadableNT', state.endEmitted, state.length); // Check that we didn't get one last unshift.\n\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the writable side is ready for autoDestroy as well\n var wState = stream._writableState;\n\n if (!wState || wState.autoDestroy && wState.finished) {\n stream.destroy();\n }\n }\n }\n}\n\nif (typeof Symbol === 'function') {\n Readable.from = function (iterable, opts) {\n if (from === undefined) {\n from = require('./internal/streams/from');\n }\n\n return from(Readable, iterable, opts);\n };\n}\n\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n\n return -1;\n}", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n'use strict';\n\nmodule.exports = Transform;\n\nvar _require$codes = require('../errors').codes,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\n\nvar Duplex = require('./_stream_duplex');\n\nrequire('inherits')(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n var cb = ts.writecb;\n\n if (cb === null) {\n return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n if (data != null) // single equals check for both `null` and `undefined`\n this.push(data);\n cb(er);\n var rs = this._readableState;\n rs.reading = false;\n\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\n\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n Duplex.call(this, options);\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n }; // start out asking for a readable event once data is transformed.\n\n this._readableState.needReadable = true; // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n if (typeof options.flush === 'function') this._flush = options.flush;\n } // When the writable side finishes, then flush out anything remaining.\n\n\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\n if (typeof this._flush === 'function' && !this._readableState.destroyed) {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n}; // This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\n\n\nTransform.prototype._transform = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n}; // Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\n\n\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && !ts.transforming) {\n ts.transforming = true;\n\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data); // TODO(BridgeAR): Write a test for these two error cases\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n\n if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n return stream.push(null);\n}", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\nrequire('inherits')(PassThrough, Transform);\n\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\n};", "// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n'use strict';\n\nvar eos;\n\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n callback.apply(void 0, arguments);\n };\n}\n\nvar _require$codes = require('../../../errors').codes,\n ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;\n\nfunction noop(err) {\n // Rethrow the error if it exists to avoid swallowing it\n if (err) throw err;\n}\n\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\n\nfunction destroyer(stream, reading, writing, callback) {\n callback = once(callback);\n var closed = false;\n stream.on('close', function () {\n closed = true;\n });\n if (eos === undefined) eos = require('./end-of-stream');\n eos(stream, {\n readable: reading,\n writable: writing\n }, function (err) {\n if (err) return callback(err);\n closed = true;\n callback();\n });\n var destroyed = false;\n return function (err) {\n if (closed) return;\n if (destroyed) return;\n destroyed = true; // request.destroy just do .end - .abort is what we want\n\n if (isRequest(stream)) return stream.abort();\n if (typeof stream.destroy === 'function') return stream.destroy();\n callback(err || new ERR_STREAM_DESTROYED('pipe'));\n };\n}\n\nfunction call(fn) {\n fn();\n}\n\nfunction pipe(from, to) {\n return from.pipe(to);\n}\n\nfunction popCallback(streams) {\n if (!streams.length) return noop;\n if (typeof streams[streams.length - 1] !== 'function') return noop;\n return streams.pop();\n}\n\nfunction pipeline() {\n for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {\n streams[_key] = arguments[_key];\n }\n\n var callback = popCallback(streams);\n if (Array.isArray(streams[0])) streams = streams[0];\n\n if (streams.length < 2) {\n throw new ERR_MISSING_ARGS('streams');\n }\n\n var error;\n var destroys = streams.map(function (stream, i) {\n var reading = i < streams.length - 1;\n var writing = i > 0;\n return destroyer(stream, reading, writing, function (err) {\n if (!error) error = err;\n if (err) destroys.forEach(call);\n if (reading) return;\n destroys.forEach(call);\n callback(error);\n });\n });\n return streams.reduce(pipe);\n}\n\nmodule.exports = pipeline;", "var Stream = require('stream');\nif (process.env.READABLE_STREAM === 'disable' && Stream) {\n module.exports = Stream.Readable;\n Object.assign(module.exports, Stream);\n module.exports.Stream = Stream;\n} else {\n exports = module.exports = require('./lib/_stream_readable.js');\n exports.Stream = Stream || exports;\n exports.Readable = exports;\n exports.Writable = require('./lib/_stream_writable.js');\n exports.Duplex = require('./lib/_stream_duplex.js');\n exports.Transform = require('./lib/_stream_transform.js');\n exports.PassThrough = require('./lib/_stream_passthrough.js');\n exports.finished = require('./lib/internal/streams/end-of-stream.js');\n exports.pipeline = require('./lib/internal/streams/pipeline.js');\n}\n", "'use strict'\n\nconst { Buffer } = require('buffer')\nconst symbol = Symbol.for('BufferList')\n\nfunction BufferList (buf) {\n if (!(this instanceof BufferList)) {\n return new BufferList(buf)\n }\n\n BufferList._init.call(this, buf)\n}\n\nBufferList._init = function _init (buf) {\n Object.defineProperty(this, symbol, { value: true })\n\n this._bufs = []\n this.length = 0\n\n if (buf) {\n this.append(buf)\n }\n}\n\nBufferList.prototype._new = function _new (buf) {\n return new BufferList(buf)\n}\n\nBufferList.prototype._offset = function _offset (offset) {\n if (offset === 0) {\n return [0, 0]\n }\n\n let tot = 0\n\n for (let i = 0; i < this._bufs.length; i++) {\n const _t = tot + this._bufs[i].length\n if (offset < _t || i === this._bufs.length - 1) {\n return [i, offset - tot]\n }\n tot = _t\n }\n}\n\nBufferList.prototype._reverseOffset = function (blOffset) {\n const bufferId = blOffset[0]\n let offset = blOffset[1]\n\n for (let i = 0; i < bufferId; i++) {\n offset += this._bufs[i].length\n }\n\n return offset\n}\n\nBufferList.prototype.get = function get (index) {\n if (index > this.length || index < 0) {\n return undefined\n }\n\n const offset = this._offset(index)\n\n return this._bufs[offset[0]][offset[1]]\n}\n\nBufferList.prototype.slice = function slice (start, end) {\n if (typeof start === 'number' && start < 0) {\n start += this.length\n }\n\n if (typeof end === 'number' && end < 0) {\n end += this.length\n }\n\n return this.copy(null, 0, start, end)\n}\n\nBufferList.prototype.copy = function copy (dst, dstStart, srcStart, srcEnd) {\n if (typeof srcStart !== 'number' || srcStart < 0) {\n srcStart = 0\n }\n\n if (typeof srcEnd !== 'number' || srcEnd > this.length) {\n srcEnd = this.length\n }\n\n if (srcStart >= this.length) {\n return dst || Buffer.alloc(0)\n }\n\n if (srcEnd <= 0) {\n return dst || Buffer.alloc(0)\n }\n\n const copy = !!dst\n const off = this._offset(srcStart)\n const len = srcEnd - srcStart\n let bytes = len\n let bufoff = (copy && dstStart) || 0\n let start = off[1]\n\n // copy/slice everything\n if (srcStart === 0 && srcEnd === this.length) {\n if (!copy) {\n // slice, but full concat if multiple buffers\n return this._bufs.length === 1\n ? this._bufs[0]\n : Buffer.concat(this._bufs, this.length)\n }\n\n // copy, need to copy individual buffers\n for (let i = 0; i < this._bufs.length; i++) {\n this._bufs[i].copy(dst, bufoff)\n bufoff += this._bufs[i].length\n }\n\n return dst\n }\n\n // easy, cheap case where it's a subset of one of the buffers\n if (bytes <= this._bufs[off[0]].length - start) {\n return copy\n ? this._bufs[off[0]].copy(dst, dstStart, start, start + bytes)\n : this._bufs[off[0]].slice(start, start + bytes)\n }\n\n if (!copy) {\n // a slice, we need something to copy in to\n dst = Buffer.allocUnsafe(len)\n }\n\n for (let i = off[0]; i < this._bufs.length; i++) {\n const l = this._bufs[i].length - start\n\n if (bytes > l) {\n this._bufs[i].copy(dst, bufoff, start)\n bufoff += l\n } else {\n this._bufs[i].copy(dst, bufoff, start, start + bytes)\n bufoff += l\n break\n }\n\n bytes -= l\n\n if (start) {\n start = 0\n }\n }\n\n // safeguard so that we don't return uninitialized memory\n if (dst.length > bufoff) return dst.slice(0, bufoff)\n\n return dst\n}\n\nBufferList.prototype.shallowSlice = function shallowSlice (start, end) {\n start = start || 0\n end = typeof end !== 'number' ? this.length : end\n\n if (start < 0) {\n start += this.length\n }\n\n if (end < 0) {\n end += this.length\n }\n\n if (start === end) {\n return this._new()\n }\n\n const startOffset = this._offset(start)\n const endOffset = this._offset(end)\n const buffers = this._bufs.slice(startOffset[0], endOffset[0] + 1)\n\n if (endOffset[1] === 0) {\n buffers.pop()\n } else {\n buffers[buffers.length - 1] = buffers[buffers.length - 1].slice(0, endOffset[1])\n }\n\n if (startOffset[1] !== 0) {\n buffers[0] = buffers[0].slice(startOffset[1])\n }\n\n return this._new(buffers)\n}\n\nBufferList.prototype.toString = function toString (encoding, start, end) {\n return this.slice(start, end).toString(encoding)\n}\n\nBufferList.prototype.consume = function consume (bytes) {\n // first, normalize the argument, in accordance with how Buffer does it\n bytes = Math.trunc(bytes)\n // do nothing if not a positive number\n if (Number.isNaN(bytes) || bytes <= 0) return this\n\n while (this._bufs.length) {\n if (bytes >= this._bufs[0].length) {\n bytes -= this._bufs[0].length\n this.length -= this._bufs[0].length\n this._bufs.shift()\n } else {\n this._bufs[0] = this._bufs[0].slice(bytes)\n this.length -= bytes\n break\n }\n }\n\n return this\n}\n\nBufferList.prototype.duplicate = function duplicate () {\n const copy = this._new()\n\n for (let i = 0; i < this._bufs.length; i++) {\n copy.append(this._bufs[i])\n }\n\n return copy\n}\n\nBufferList.prototype.append = function append (buf) {\n if (buf == null) {\n return this\n }\n\n if (buf.buffer) {\n // append a view of the underlying ArrayBuffer\n this._appendBuffer(Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength))\n } else if (Array.isArray(buf)) {\n for (let i = 0; i < buf.length; i++) {\n this.append(buf[i])\n }\n } else if (this._isBufferList(buf)) {\n // unwrap argument into individual BufferLists\n for (let i = 0; i < buf._bufs.length; i++) {\n this.append(buf._bufs[i])\n }\n } else {\n // coerce number arguments to strings, since Buffer(number) does\n // uninitialized memory allocation\n if (typeof buf === 'number') {\n buf = buf.toString()\n }\n\n this._appendBuffer(Buffer.from(buf))\n }\n\n return this\n}\n\nBufferList.prototype._appendBuffer = function appendBuffer (buf) {\n this._bufs.push(buf)\n this.length += buf.length\n}\n\nBufferList.prototype.indexOf = function (search, offset, encoding) {\n if (encoding === undefined && typeof offset === 'string') {\n encoding = offset\n offset = undefined\n }\n\n if (typeof search === 'function' || Array.isArray(search)) {\n throw new TypeError('The \"value\" argument must be one of type string, Buffer, BufferList, or Uint8Array.')\n } else if (typeof search === 'number') {\n search = Buffer.from([search])\n } else if (typeof search === 'string') {\n search = Buffer.from(search, encoding)\n } else if (this._isBufferList(search)) {\n search = search.slice()\n } else if (Array.isArray(search.buffer)) {\n search = Buffer.from(search.buffer, search.byteOffset, search.byteLength)\n } else if (!Buffer.isBuffer(search)) {\n search = Buffer.from(search)\n }\n\n offset = Number(offset || 0)\n\n if (isNaN(offset)) {\n offset = 0\n }\n\n if (offset < 0) {\n offset = this.length + offset\n }\n\n if (offset < 0) {\n offset = 0\n }\n\n if (search.length === 0) {\n return offset > this.length ? this.length : offset\n }\n\n const blOffset = this._offset(offset)\n let blIndex = blOffset[0] // index of which internal buffer we're working on\n let buffOffset = blOffset[1] // offset of the internal buffer we're working on\n\n // scan over each buffer\n for (; blIndex < this._bufs.length; blIndex++) {\n const buff = this._bufs[blIndex]\n\n while (buffOffset < buff.length) {\n const availableWindow = buff.length - buffOffset\n\n if (availableWindow >= search.length) {\n const nativeSearchResult = buff.indexOf(search, buffOffset)\n\n if (nativeSearchResult !== -1) {\n return this._reverseOffset([blIndex, nativeSearchResult])\n }\n\n buffOffset = buff.length - search.length + 1 // end of native search window\n } else {\n const revOffset = this._reverseOffset([blIndex, buffOffset])\n\n if (this._match(revOffset, search)) {\n return revOffset\n }\n\n buffOffset++\n }\n }\n\n buffOffset = 0\n }\n\n return -1\n}\n\nBufferList.prototype._match = function (offset, search) {\n if (this.length - offset < search.length) {\n return false\n }\n\n for (let searchOffset = 0; searchOffset < search.length; searchOffset++) {\n if (this.get(offset + searchOffset) !== search[searchOffset]) {\n return false\n }\n }\n return true\n}\n\n;(function () {\n const methods = {\n readDoubleBE: 8,\n readDoubleLE: 8,\n readFloatBE: 4,\n readFloatLE: 4,\n readInt32BE: 4,\n readInt32LE: 4,\n readUInt32BE: 4,\n readUInt32LE: 4,\n readInt16BE: 2,\n readInt16LE: 2,\n readUInt16BE: 2,\n readUInt16LE: 2,\n readInt8: 1,\n readUInt8: 1,\n readIntBE: null,\n readIntLE: null,\n readUIntBE: null,\n readUIntLE: null\n }\n\n for (const m in methods) {\n (function (m) {\n if (methods[m] === null) {\n BufferList.prototype[m] = function (offset, byteLength) {\n return this.slice(offset, offset + byteLength)[m](0, byteLength)\n }\n } else {\n BufferList.prototype[m] = function (offset = 0) {\n return this.slice(offset, offset + methods[m])[m](0)\n }\n }\n }(m))\n }\n}())\n\n// Used internally by the class and also as an indicator of this object being\n// a `BufferList`. It's not possible to use `instanceof BufferList` in a browser\n// environment because there could be multiple different copies of the\n// BufferList class and some `BufferList`s might be `BufferList`s.\nBufferList.prototype._isBufferList = function _isBufferList (b) {\n return b instanceof BufferList || BufferList.isBufferList(b)\n}\n\nBufferList.isBufferList = function isBufferList (b) {\n return b != null && b[symbol]\n}\n\nmodule.exports = BufferList\n", "'use strict'\n\nconst DuplexStream = require('readable-stream').Duplex\nconst inherits = require('inherits')\nconst BufferList = require('./BufferList')\n\nfunction BufferListStream (callback) {\n if (!(this instanceof BufferListStream)) {\n return new BufferListStream(callback)\n }\n\n if (typeof callback === 'function') {\n this._callback = callback\n\n const piper = function piper (err) {\n if (this._callback) {\n this._callback(err)\n this._callback = null\n }\n }.bind(this)\n\n this.on('pipe', function onPipe (src) {\n src.on('error', piper)\n })\n this.on('unpipe', function onUnpipe (src) {\n src.removeListener('error', piper)\n })\n\n callback = null\n }\n\n BufferList._init.call(this, callback)\n DuplexStream.call(this)\n}\n\ninherits(BufferListStream, DuplexStream)\nObject.assign(BufferListStream.prototype, BufferList.prototype)\n\nBufferListStream.prototype._new = function _new (callback) {\n return new BufferListStream(callback)\n}\n\nBufferListStream.prototype._write = function _write (buf, encoding, callback) {\n this._appendBuffer(buf)\n\n if (typeof callback === 'function') {\n callback()\n }\n}\n\nBufferListStream.prototype._read = function _read (size) {\n if (!this.length) {\n return this.push(null)\n }\n\n size = Math.min(size, this.length)\n this.push(this.slice(0, size))\n this.consume(size)\n}\n\nBufferListStream.prototype.end = function end (chunk) {\n DuplexStream.prototype.end.call(this, chunk)\n\n if (this._callback) {\n this._callback(null, this.slice())\n this._callback = null\n }\n}\n\nBufferListStream.prototype._destroy = function _destroy (err, cb) {\n this._bufs.length = 0\n this.length = 0\n cb(err)\n}\n\nBufferListStream.prototype._isBufferList = function _isBufferList (b) {\n return b instanceof BufferListStream || b instanceof BufferList || BufferListStream.isBufferList(b)\n}\n\nBufferListStream.isBufferList = BufferList.isBufferList\n\nmodule.exports = BufferListStream\nmodule.exports.BufferListStream = BufferListStream\nmodule.exports.BufferList = BufferList\n", "var alloc = Buffer.alloc\n\nvar ZEROS = '0000000000000000000'\nvar SEVENS = '7777777777777777777'\nvar ZERO_OFFSET = '0'.charCodeAt(0)\nvar USTAR_MAGIC = Buffer.from('ustar\\x00', 'binary')\nvar USTAR_VER = Buffer.from('00', 'binary')\nvar GNU_MAGIC = Buffer.from('ustar\\x20', 'binary')\nvar GNU_VER = Buffer.from('\\x20\\x00', 'binary')\nvar MASK = parseInt('7777', 8)\nvar MAGIC_OFFSET = 257\nvar VERSION_OFFSET = 263\n\nvar clamp = function (index, len, defaultValue) {\n if (typeof index !== 'number') return defaultValue\n index = ~~index // Coerce to integer.\n if (index >= len) return len\n if (index >= 0) return index\n index += len\n if (index >= 0) return index\n return 0\n}\n\nvar toType = function (flag) {\n switch (flag) {\n case 0:\n return 'file'\n case 1:\n return 'link'\n case 2:\n return 'symlink'\n case 3:\n return 'character-device'\n case 4:\n return 'block-device'\n case 5:\n return 'directory'\n case 6:\n return 'fifo'\n case 7:\n return 'contiguous-file'\n case 72:\n return 'pax-header'\n case 55:\n return 'pax-global-header'\n case 27:\n return 'gnu-long-link-path'\n case 28:\n case 30:\n return 'gnu-long-path'\n }\n\n return null\n}\n\nvar toTypeflag = function (flag) {\n switch (flag) {\n case 'file':\n return 0\n case 'link':\n return 1\n case 'symlink':\n return 2\n case 'character-device':\n return 3\n case 'block-device':\n return 4\n case 'directory':\n return 5\n case 'fifo':\n return 6\n case 'contiguous-file':\n return 7\n case 'pax-header':\n return 72\n }\n\n return 0\n}\n\nvar indexOf = function (block, num, offset, end) {\n for (; offset < end; offset++) {\n if (block[offset] === num) return offset\n }\n return end\n}\n\nvar cksum = function (block) {\n var sum = 8 * 32\n for (var i = 0; i < 148; i++) sum += block[i]\n for (var j = 156; j < 512; j++) sum += block[j]\n return sum\n}\n\nvar encodeOct = function (val, n) {\n val = val.toString(8)\n if (val.length > n) return SEVENS.slice(0, n) + ' '\n else return ZEROS.slice(0, n - val.length) + val + ' '\n}\n\n/* Copied from the node-tar repo and modified to meet\n * tar-stream coding standard.\n *\n * Source: https://github.com/npm/node-tar/blob/51b6627a1f357d2eb433e7378e5f05e83b7aa6cd/lib/header.js#L349\n */\nfunction parse256 (buf) {\n // first byte MUST be either 80 or FF\n // 80 for positive, FF for 2's comp\n var positive\n if (buf[0] === 0x80) positive = true\n else if (buf[0] === 0xFF) positive = false\n else return null\n\n // build up a base-256 tuple from the least sig to the highest\n var tuple = []\n for (var i = buf.length - 1; i > 0; i--) {\n var byte = buf[i]\n if (positive) tuple.push(byte)\n else tuple.push(0xFF - byte)\n }\n\n var sum = 0\n var l = tuple.length\n for (i = 0; i < l; i++) {\n sum += tuple[i] * Math.pow(256, i)\n }\n\n return positive ? sum : -1 * sum\n}\n\nvar decodeOct = function (val, offset, length) {\n val = val.slice(offset, offset + length)\n offset = 0\n\n // If prefixed with 0x80 then parse as a base-256 integer\n if (val[offset] & 0x80) {\n return parse256(val)\n } else {\n // Older versions of tar can prefix with spaces\n while (offset < val.length && val[offset] === 32) offset++\n var end = clamp(indexOf(val, 32, offset, val.length), val.length, val.length)\n while (offset < end && val[offset] === 0) offset++\n if (end === offset) return 0\n return parseInt(val.slice(offset, end).toString(), 8)\n }\n}\n\nvar decodeStr = function (val, offset, length, encoding) {\n return val.slice(offset, indexOf(val, 0, offset, offset + length)).toString(encoding)\n}\n\nvar addLength = function (str) {\n var len = Buffer.byteLength(str)\n var digits = Math.floor(Math.log(len) / Math.log(10)) + 1\n if (len + digits >= Math.pow(10, digits)) digits++\n\n return (len + digits) + str\n}\n\nexports.decodeLongPath = function (buf, encoding) {\n return decodeStr(buf, 0, buf.length, encoding)\n}\n\nexports.encodePax = function (opts) { // TODO: encode more stuff in pax\n var result = ''\n if (opts.name) result += addLength(' path=' + opts.name + '\\n')\n if (opts.linkname) result += addLength(' linkpath=' + opts.linkname + '\\n')\n var pax = opts.pax\n if (pax) {\n for (var key in pax) {\n result += addLength(' ' + key + '=' + pax[key] + '\\n')\n }\n }\n return Buffer.from(result)\n}\n\nexports.decodePax = function (buf) {\n var result = {}\n\n while (buf.length) {\n var i = 0\n while (i < buf.length && buf[i] !== 32) i++\n var len = parseInt(buf.slice(0, i).toString(), 10)\n if (!len) return result\n\n var b = buf.slice(i + 1, len - 1).toString()\n var keyIndex = b.indexOf('=')\n if (keyIndex === -1) return result\n result[b.slice(0, keyIndex)] = b.slice(keyIndex + 1)\n\n buf = buf.slice(len)\n }\n\n return result\n}\n\nexports.encode = function (opts) {\n var buf = alloc(512)\n var name = opts.name\n var prefix = ''\n\n if (opts.typeflag === 5 && name[name.length - 1] !== '/') name += '/'\n if (Buffer.byteLength(name) !== name.length) return null // utf-8\n\n while (Buffer.byteLength(name) > 100) {\n var i = name.indexOf('/')\n if (i === -1) return null\n prefix += prefix ? '/' + name.slice(0, i) : name.slice(0, i)\n name = name.slice(i + 1)\n }\n\n if (Buffer.byteLength(name) > 100 || Buffer.byteLength(prefix) > 155) return null\n if (opts.linkname && Buffer.byteLength(opts.linkname) > 100) return null\n\n buf.write(name)\n buf.write(encodeOct(opts.mode & MASK, 6), 100)\n buf.write(encodeOct(opts.uid, 6), 108)\n buf.write(encodeOct(opts.gid, 6), 116)\n buf.write(encodeOct(opts.size, 11), 124)\n buf.write(encodeOct((opts.mtime.getTime() / 1000) | 0, 11), 136)\n\n buf[156] = ZERO_OFFSET + toTypeflag(opts.type)\n\n if (opts.linkname) buf.write(opts.linkname, 157)\n\n USTAR_MAGIC.copy(buf, MAGIC_OFFSET)\n USTAR_VER.copy(buf, VERSION_OFFSET)\n if (opts.uname) buf.write(opts.uname, 265)\n if (opts.gname) buf.write(opts.gname, 297)\n buf.write(encodeOct(opts.devmajor || 0, 6), 329)\n buf.write(encodeOct(opts.devminor || 0, 6), 337)\n\n if (prefix) buf.write(prefix, 345)\n\n buf.write(encodeOct(cksum(buf), 6), 148)\n\n return buf\n}\n\nexports.decode = function (buf, filenameEncoding, allowUnknownFormat) {\n var typeflag = buf[156] === 0 ? 0 : buf[156] - ZERO_OFFSET\n\n var name = decodeStr(buf, 0, 100, filenameEncoding)\n var mode = decodeOct(buf, 100, 8)\n var uid = decodeOct(buf, 108, 8)\n var gid = decodeOct(buf, 116, 8)\n var size = decodeOct(buf, 124, 12)\n var mtime = decodeOct(buf, 136, 12)\n var type = toType(typeflag)\n var linkname = buf[157] === 0 ? null : decodeStr(buf, 157, 100, filenameEncoding)\n var uname = decodeStr(buf, 265, 32)\n var gname = decodeStr(buf, 297, 32)\n var devmajor = decodeOct(buf, 329, 8)\n var devminor = decodeOct(buf, 337, 8)\n\n var c = cksum(buf)\n\n // checksum is still initial value if header was null.\n if (c === 8 * 32) return null\n\n // valid checksum\n if (c !== decodeOct(buf, 148, 8)) throw new Error('Invalid tar header. Maybe the tar is corrupted or it needs to be gunzipped?')\n\n if (USTAR_MAGIC.compare(buf, MAGIC_OFFSET, MAGIC_OFFSET + 6) === 0) {\n // ustar (posix) format.\n // prepend prefix, if present.\n if (buf[345]) name = decodeStr(buf, 345, 155, filenameEncoding) + '/' + name\n } else if (GNU_MAGIC.compare(buf, MAGIC_OFFSET, MAGIC_OFFSET + 6) === 0 &&\n GNU_VER.compare(buf, VERSION_OFFSET, VERSION_OFFSET + 2) === 0) {\n // 'gnu'/'oldgnu' format. Similar to ustar, but has support for incremental and\n // multi-volume tarballs.\n } else {\n if (!allowUnknownFormat) {\n throw new Error('Invalid tar header: unknown format.')\n }\n }\n\n // to support old tar versions that use trailing / to indicate dirs\n if (typeflag === 0 && name && name[name.length - 1] === '/') typeflag = 5\n\n return {\n name,\n mode,\n uid,\n gid,\n size,\n mtime: new Date(1000 * mtime),\n type,\n linkname,\n uname,\n gname,\n devmajor,\n devminor\n }\n}\n", "var util = require('util')\nvar bl = require('bl')\nvar headers = require('./headers')\n\nvar Writable = require('readable-stream').Writable\nvar PassThrough = require('readable-stream').PassThrough\n\nvar noop = function () {}\n\nvar overflow = function (size) {\n size &= 511\n return size && 512 - size\n}\n\nvar emptyStream = function (self, offset) {\n var s = new Source(self, offset)\n s.end()\n return s\n}\n\nvar mixinPax = function (header, pax) {\n if (pax.path) header.name = pax.path\n if (pax.linkpath) header.linkname = pax.linkpath\n if (pax.size) header.size = parseInt(pax.size, 10)\n header.pax = pax\n return header\n}\n\nvar Source = function (self, offset) {\n this._parent = self\n this.offset = offset\n PassThrough.call(this, { autoDestroy: false })\n}\n\nutil.inherits(Source, PassThrough)\n\nSource.prototype.destroy = function (err) {\n this._parent.destroy(err)\n}\n\nvar Extract = function (opts) {\n if (!(this instanceof Extract)) return new Extract(opts)\n Writable.call(this, opts)\n\n opts = opts || {}\n\n this._offset = 0\n this._buffer = bl()\n this._missing = 0\n this._partial = false\n this._onparse = noop\n this._header = null\n this._stream = null\n this._overflow = null\n this._cb = null\n this._locked = false\n this._destroyed = false\n this._pax = null\n this._paxGlobal = null\n this._gnuLongPath = null\n this._gnuLongLinkPath = null\n\n var self = this\n var b = self._buffer\n\n var oncontinue = function () {\n self._continue()\n }\n\n var onunlock = function (err) {\n self._locked = false\n if (err) return self.destroy(err)\n if (!self._stream) oncontinue()\n }\n\n var onstreamend = function () {\n self._stream = null\n var drain = overflow(self._header.size)\n if (drain) self._parse(drain, ondrain)\n else self._parse(512, onheader)\n if (!self._locked) oncontinue()\n }\n\n var ondrain = function () {\n self._buffer.consume(overflow(self._header.size))\n self._parse(512, onheader)\n oncontinue()\n }\n\n var onpaxglobalheader = function () {\n var size = self._header.size\n self._paxGlobal = headers.decodePax(b.slice(0, size))\n b.consume(size)\n onstreamend()\n }\n\n var onpaxheader = function () {\n var size = self._header.size\n self._pax = headers.decodePax(b.slice(0, size))\n if (self._paxGlobal) self._pax = Object.assign({}, self._paxGlobal, self._pax)\n b.consume(size)\n onstreamend()\n }\n\n var ongnulongpath = function () {\n var size = self._header.size\n this._gnuLongPath = headers.decodeLongPath(b.slice(0, size), opts.filenameEncoding)\n b.consume(size)\n onstreamend()\n }\n\n var ongnulonglinkpath = function () {\n var size = self._header.size\n this._gnuLongLinkPath = headers.decodeLongPath(b.slice(0, size), opts.filenameEncoding)\n b.consume(size)\n onstreamend()\n }\n\n var onheader = function () {\n var offset = self._offset\n var header\n try {\n header = self._header = headers.decode(b.slice(0, 512), opts.filenameEncoding, opts.allowUnknownFormat)\n } catch (err) {\n self.emit('error', err)\n }\n b.consume(512)\n\n if (!header) {\n self._parse(512, onheader)\n oncontinue()\n return\n }\n if (header.type === 'gnu-long-path') {\n self._parse(header.size, ongnulongpath)\n oncontinue()\n return\n }\n if (header.type === 'gnu-long-link-path') {\n self._parse(header.size, ongnulonglinkpath)\n oncontinue()\n return\n }\n if (header.type === 'pax-global-header') {\n self._parse(header.size, onpaxglobalheader)\n oncontinue()\n return\n }\n if (header.type === 'pax-header') {\n self._parse(header.size, onpaxheader)\n oncontinue()\n return\n }\n\n if (self._gnuLongPath) {\n header.name = self._gnuLongPath\n self._gnuLongPath = null\n }\n\n if (self._gnuLongLinkPath) {\n header.linkname = self._gnuLongLinkPath\n self._gnuLongLinkPath = null\n }\n\n if (self._pax) {\n self._header = header = mixinPax(header, self._pax)\n self._pax = null\n }\n\n self._locked = true\n\n if (!header.size || header.type === 'directory') {\n self._parse(512, onheader)\n self.emit('entry', header, emptyStream(self, offset), onunlock)\n return\n }\n\n self._stream = new Source(self, offset)\n\n self.emit('entry', header, self._stream, onunlock)\n self._parse(header.size, onstreamend)\n oncontinue()\n }\n\n this._onheader = onheader\n this._parse(512, onheader)\n}\n\nutil.inherits(Extract, Writable)\n\nExtract.prototype.destroy = function (err) {\n if (this._destroyed) return\n this._destroyed = true\n\n if (err) this.emit('error', err)\n this.emit('close')\n if (this._stream) this._stream.emit('close')\n}\n\nExtract.prototype._parse = function (size, onparse) {\n if (this._destroyed) return\n this._offset += size\n this._missing = size\n if (onparse === this._onheader) this._partial = false\n this._onparse = onparse\n}\n\nExtract.prototype._continue = function () {\n if (this._destroyed) return\n var cb = this._cb\n this._cb = noop\n if (this._overflow) this._write(this._overflow, undefined, cb)\n else cb()\n}\n\nExtract.prototype._write = function (data, enc, cb) {\n if (this._destroyed) return\n\n var s = this._stream\n var b = this._buffer\n var missing = this._missing\n if (data.length) this._partial = true\n\n // we do not reach end-of-chunk now. just forward it\n\n if (data.length < missing) {\n this._missing -= data.length\n this._overflow = null\n if (s) return s.write(data, cb)\n b.append(data)\n return cb()\n }\n\n // end-of-chunk. the parser should call cb.\n\n this._cb = cb\n this._missing = 0\n\n var overflow = null\n if (data.length > missing) {\n overflow = data.slice(missing)\n data = data.slice(0, missing)\n }\n\n if (s) s.end(data)\n else b.append(data)\n\n this._overflow = overflow\n this._onparse()\n}\n\nExtract.prototype._final = function (cb) {\n if (this._partial) return this.destroy(new Error('Unexpected end of data'))\n cb()\n}\n\nmodule.exports = Extract\n", "module.exports = require('fs').constants || require('constants')\n", "// Returns a wrapper function that returns a wrapped callback\n// The wrapper function should do some stuff, and return a\n// presumably different callback function.\n// This makes sure that own properties are retained, so that\n// decorations and such are not lost along the way.\nmodule.exports = wrappy\nfunction wrappy (fn, cb) {\n if (fn && cb) return wrappy(fn)(cb)\n\n if (typeof fn !== 'function')\n throw new TypeError('need wrapper function')\n\n Object.keys(fn).forEach(function (k) {\n wrapper[k] = fn[k]\n })\n\n return wrapper\n\n function wrapper() {\n var args = new Array(arguments.length)\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i]\n }\n var ret = fn.apply(this, args)\n var cb = args[args.length-1]\n if (typeof ret === 'function' && ret !== cb) {\n Object.keys(cb).forEach(function (k) {\n ret[k] = cb[k]\n })\n }\n return ret\n }\n}\n", "var wrappy = require('wrappy')\nmodule.exports = wrappy(once)\nmodule.exports.strict = wrappy(onceStrict)\n\nonce.proto = once(function () {\n Object.defineProperty(Function.prototype, 'once', {\n value: function () {\n return once(this)\n },\n configurable: true\n })\n\n Object.defineProperty(Function.prototype, 'onceStrict', {\n value: function () {\n return onceStrict(this)\n },\n configurable: true\n })\n})\n\nfunction once (fn) {\n var f = function () {\n if (f.called) return f.value\n f.called = true\n return f.value = fn.apply(this, arguments)\n }\n f.called = false\n return f\n}\n\nfunction onceStrict (fn) {\n var f = function () {\n if (f.called)\n throw new Error(f.onceError)\n f.called = true\n return f.value = fn.apply(this, arguments)\n }\n var name = fn.name || 'Function wrapped with `once`'\n f.onceError = name + \" shouldn't be called more than once\"\n f.called = false\n return f\n}\n", "var once = require('once');\n\nvar noop = function() {};\n\nvar isRequest = function(stream) {\n\treturn stream.setHeader && typeof stream.abort === 'function';\n};\n\nvar isChildProcess = function(stream) {\n\treturn stream.stdio && Array.isArray(stream.stdio) && stream.stdio.length === 3\n};\n\nvar eos = function(stream, opts, callback) {\n\tif (typeof opts === 'function') return eos(stream, null, opts);\n\tif (!opts) opts = {};\n\n\tcallback = once(callback || noop);\n\n\tvar ws = stream._writableState;\n\tvar rs = stream._readableState;\n\tvar readable = opts.readable || (opts.readable !== false && stream.readable);\n\tvar writable = opts.writable || (opts.writable !== false && stream.writable);\n\tvar cancelled = false;\n\n\tvar onlegacyfinish = function() {\n\t\tif (!stream.writable) onfinish();\n\t};\n\n\tvar onfinish = function() {\n\t\twritable = false;\n\t\tif (!readable) callback.call(stream);\n\t};\n\n\tvar onend = function() {\n\t\treadable = false;\n\t\tif (!writable) callback.call(stream);\n\t};\n\n\tvar onexit = function(exitCode) {\n\t\tcallback.call(stream, exitCode ? new Error('exited with error code: ' + exitCode) : null);\n\t};\n\n\tvar onerror = function(err) {\n\t\tcallback.call(stream, err);\n\t};\n\n\tvar onclose = function() {\n\t\tprocess.nextTick(onclosenexttick);\n\t};\n\n\tvar onclosenexttick = function() {\n\t\tif (cancelled) return;\n\t\tif (readable && !(rs && (rs.ended && !rs.destroyed))) return callback.call(stream, new Error('premature close'));\n\t\tif (writable && !(ws && (ws.ended && !ws.destroyed))) return callback.call(stream, new Error('premature close'));\n\t};\n\n\tvar onrequest = function() {\n\t\tstream.req.on('finish', onfinish);\n\t};\n\n\tif (isRequest(stream)) {\n\t\tstream.on('complete', onfinish);\n\t\tstream.on('abort', onclose);\n\t\tif (stream.req) onrequest();\n\t\telse stream.on('request', onrequest);\n\t} else if (writable && !ws) { // legacy streams\n\t\tstream.on('end', onlegacyfinish);\n\t\tstream.on('close', onlegacyfinish);\n\t}\n\n\tif (isChildProcess(stream)) stream.on('exit', onexit);\n\n\tstream.on('end', onend);\n\tstream.on('finish', onfinish);\n\tif (opts.error !== false) stream.on('error', onerror);\n\tstream.on('close', onclose);\n\n\treturn function() {\n\t\tcancelled = true;\n\t\tstream.removeListener('complete', onfinish);\n\t\tstream.removeListener('abort', onclose);\n\t\tstream.removeListener('request', onrequest);\n\t\tif (stream.req) stream.req.removeListener('finish', onfinish);\n\t\tstream.removeListener('end', onlegacyfinish);\n\t\tstream.removeListener('close', onlegacyfinish);\n\t\tstream.removeListener('finish', onfinish);\n\t\tstream.removeListener('exit', onexit);\n\t\tstream.removeListener('end', onend);\n\t\tstream.removeListener('error', onerror);\n\t\tstream.removeListener('close', onclose);\n\t};\n};\n\nmodule.exports = eos;\n", "var constants = require('fs-constants')\nvar eos = require('end-of-stream')\nvar inherits = require('inherits')\nvar alloc = Buffer.alloc\n\nvar Readable = require('readable-stream').Readable\nvar Writable = require('readable-stream').Writable\nvar StringDecoder = require('string_decoder').StringDecoder\n\nvar headers = require('./headers')\n\nvar DMODE = parseInt('755', 8)\nvar FMODE = parseInt('644', 8)\n\nvar END_OF_TAR = alloc(1024)\n\nvar noop = function () {}\n\nvar overflow = function (self, size) {\n size &= 511\n if (size) self.push(END_OF_TAR.slice(0, 512 - size))\n}\n\nfunction modeToType (mode) {\n switch (mode & constants.S_IFMT) {\n case constants.S_IFBLK: return 'block-device'\n case constants.S_IFCHR: return 'character-device'\n case constants.S_IFDIR: return 'directory'\n case constants.S_IFIFO: return 'fifo'\n case constants.S_IFLNK: return 'symlink'\n }\n\n return 'file'\n}\n\nvar Sink = function (to) {\n Writable.call(this)\n this.written = 0\n this._to = to\n this._destroyed = false\n}\n\ninherits(Sink, Writable)\n\nSink.prototype._write = function (data, enc, cb) {\n this.written += data.length\n if (this._to.push(data)) return cb()\n this._to._drain = cb\n}\n\nSink.prototype.destroy = function () {\n if (this._destroyed) return\n this._destroyed = true\n this.emit('close')\n}\n\nvar LinkSink = function () {\n Writable.call(this)\n this.linkname = ''\n this._decoder = new StringDecoder('utf-8')\n this._destroyed = false\n}\n\ninherits(LinkSink, Writable)\n\nLinkSink.prototype._write = function (data, enc, cb) {\n this.linkname += this._decoder.write(data)\n cb()\n}\n\nLinkSink.prototype.destroy = function () {\n if (this._destroyed) return\n this._destroyed = true\n this.emit('close')\n}\n\nvar Void = function () {\n Writable.call(this)\n this._destroyed = false\n}\n\ninherits(Void, Writable)\n\nVoid.prototype._write = function (data, enc, cb) {\n cb(new Error('No body allowed for this entry'))\n}\n\nVoid.prototype.destroy = function () {\n if (this._destroyed) return\n this._destroyed = true\n this.emit('close')\n}\n\nvar Pack = function (opts) {\n if (!(this instanceof Pack)) return new Pack(opts)\n Readable.call(this, opts)\n\n this._drain = noop\n this._finalized = false\n this._finalizing = false\n this._destroyed = false\n this._stream = null\n}\n\ninherits(Pack, Readable)\n\nPack.prototype.entry = function (header, buffer, callback) {\n if (this._stream) throw new Error('already piping an entry')\n if (this._finalized || this._destroyed) return\n\n if (typeof buffer === 'function') {\n callback = buffer\n buffer = null\n }\n\n if (!callback) callback = noop\n\n var self = this\n\n if (!header.size || header.type === 'symlink') header.size = 0\n if (!header.type) header.type = modeToType(header.mode)\n if (!header.mode) header.mode = header.type === 'directory' ? DMODE : FMODE\n if (!header.uid) header.uid = 0\n if (!header.gid) header.gid = 0\n if (!header.mtime) header.mtime = new Date()\n\n if (typeof buffer === 'string') buffer = Buffer.from(buffer)\n if (Buffer.isBuffer(buffer)) {\n header.size = buffer.length\n this._encode(header)\n var ok = this.push(buffer)\n overflow(self, header.size)\n if (ok) process.nextTick(callback)\n else this._drain = callback\n return new Void()\n }\n\n if (header.type === 'symlink' && !header.linkname) {\n var linkSink = new LinkSink()\n eos(linkSink, function (err) {\n if (err) { // stream was closed\n self.destroy()\n return callback(err)\n }\n\n header.linkname = linkSink.linkname\n self._encode(header)\n callback()\n })\n\n return linkSink\n }\n\n this._encode(header)\n\n if (header.type !== 'file' && header.type !== 'contiguous-file') {\n process.nextTick(callback)\n return new Void()\n }\n\n var sink = new Sink(this)\n\n this._stream = sink\n\n eos(sink, function (err) {\n self._stream = null\n\n if (err) { // stream was closed\n self.destroy()\n return callback(err)\n }\n\n if (sink.written !== header.size) { // corrupting tar\n self.destroy()\n return callback(new Error('size mismatch'))\n }\n\n overflow(self, header.size)\n if (self._finalizing) self.finalize()\n callback()\n })\n\n return sink\n}\n\nPack.prototype.finalize = function () {\n if (this._stream) {\n this._finalizing = true\n return\n }\n\n if (this._finalized) return\n this._finalized = true\n this.push(END_OF_TAR)\n this.push(null)\n}\n\nPack.prototype.destroy = function (err) {\n if (this._destroyed) return\n this._destroyed = true\n\n if (err) this.emit('error', err)\n this.emit('close')\n if (this._stream && this._stream.destroy) this._stream.destroy()\n}\n\nPack.prototype._encode = function (header) {\n if (!header.pax) {\n var buf = headers.encode(header)\n if (buf) {\n this.push(buf)\n return\n }\n }\n this._encodePax(header)\n}\n\nPack.prototype._encodePax = function (header) {\n var paxHeader = headers.encodePax({\n name: header.name,\n linkname: header.linkname,\n pax: header.pax\n })\n\n var newHeader = {\n name: 'PaxHeader',\n mode: header.mode,\n uid: header.uid,\n gid: header.gid,\n size: paxHeader.length,\n mtime: header.mtime,\n type: 'pax-header',\n linkname: header.linkname && 'PaxHeader',\n uname: header.uname,\n gname: header.gname,\n devmajor: header.devmajor,\n devminor: header.devminor\n }\n\n this.push(headers.encode(newHeader))\n this.push(paxHeader)\n overflow(this, paxHeader.length)\n\n newHeader.size = header.size\n newHeader.type = header.type\n this.push(headers.encode(newHeader))\n}\n\nPack.prototype._read = function (n) {\n var drain = this._drain\n this._drain = noop\n drain()\n}\n\nmodule.exports = Pack\n", "exports.extract = require('./extract')\nexports.pack = require('./pack')\n", "import { metricScope, Unit } from 'aws-embedded-metrics';\nimport type { Context, EventBridgeEvent } from 'aws-lambda';\n\nimport { DenyListClient } from '../../backend/deny-list/client.lambda-shared';\nimport { LicenseListClient } from '../../backend/license-list/client.lambda-shared';\nimport * as aws from '../../backend/shared/aws.lambda-shared';\nimport { requireEnv } from '../../backend/shared/env.lambda-shared';\nimport { integrity } from '../../backend/shared/integrity.lambda-shared';\nimport { extractObjects } from '../../backend/shared/tarball.lambda-shared';\nimport {\n METRICS_NAMESPACE,\n MetricName,\n DOMAIN_OWNER_DIMENSION,\n DOMAIN_NAME_DIMENSION,\n REPOSITORY_NAME_DIMENSION,\n} from './constants.lambda-shared';\n\nconst DETAIL_TYPE = 'CodeArtifact Package Version State Change' as const;\n\nexport const handler = metricScope(\n (metrics) =>\n async (\n event: EventBridgeEvent<typeof DETAIL_TYPE, CodeArtifactDetail>,\n context: Context\n ) => {\n console.log(`Event: ${JSON.stringify(event, null, 2)}`);\n\n const stagingBucket = requireEnv('BUCKET_NAME');\n const queueUrl = requireEnv('QUEUE_URL');\n\n metrics.setNamespace(METRICS_NAMESPACE);\n metrics.setDimensions({\n [DOMAIN_OWNER_DIMENSION]: event.detail.domainOwner,\n [DOMAIN_NAME_DIMENSION]: event.detail.domainName,\n [REPOSITORY_NAME_DIMENSION]: event.detail.repositoryName,\n });\n\n const packageName = event.detail.packageNamespace\n ? `@${event.detail.packageNamespace}/${event.detail.packageName}`\n : event.detail.packageName;\n\n if (event.detail.operationType === 'Deleted') {\n console.log(\n `Operation type is \"Deleted\" for ${packageName}@${event.detail.packageVersion}`\n );\n metrics.putMetric(MetricName.DELETED_COUNT, 1, Unit.Count);\n return;\n }\n\n const denyList = await DenyListClient.newClient();\n const denied = denyList.lookup(packageName, event.detail.packageVersion);\n if (denied) {\n console.log(\n `Package ${packageName}@${\n event.detail.packageVersion\n } denied: ${JSON.stringify(denied, null, 2)}`\n );\n metrics.putMetric(MetricName.DENY_LISTED_COUNT, 1, Unit.Count);\n return;\n }\n\n const { asset, packageVersionRevision } = await aws\n .codeArtifact()\n .getPackageVersionAsset({\n asset: 'package.tgz', // Always named this way for npm packages!\n domainOwner: event.detail.domainOwner,\n domain: event.detail.domainName,\n repository: event.detail.repositoryName,\n format: event.detail.packageFormat,\n namespace: event.detail.packageNamespace,\n package: event.detail.packageName,\n packageVersion: event.detail.packageVersion,\n })\n .promise();\n const tarball = Buffer.from(asset! as any);\n\n const { assemblyJson, packageJson } = await extractObjects(tarball, {\n assemblyJson: { path: 'package/.jsii' },\n packageJson: { path: 'package/package.json', required: true },\n });\n metrics.putMetric(\n MetricName.NOT_JSII_ENABLED_COUNT,\n assemblyJson ? 0 : 1,\n Unit.Count\n );\n if (assemblyJson == null) {\n console.log(\n `Package \"${packageName}@${event.detail.packageVersion}\" does not contain a .jsii assembly`\n );\n return;\n }\n\n const metadata = JSON.parse(packageJson.toString('utf-8'));\n const licenseList = await LicenseListClient.newClient();\n const eligibleLicense = licenseList.lookup(\n metadata.license ?? 'UNLICENSED'\n );\n metrics.putMetric(\n MetricName.INELIGIBLE_LICENSE,\n eligibleLicense ? 0 : 1,\n Unit.Count\n );\n if (!eligibleLicense) {\n console.log(\n `Package \"${packageName}@${\n event.detail.packageVersion\n }\" does not use allow-listed license: ${\n metadata.license ?? 'UNLICENSED'\n }`\n );\n return;\n }\n\n const stagingKey = `${packageName}/${event.detail.packageVersion}/${packageVersionRevision}/package.tgz`;\n await aws\n .s3()\n .putObject({\n Bucket: stagingBucket,\n Key: stagingKey,\n Body: asset,\n ContentType: 'application/octet-stream',\n Metadata: {\n 'Lambda-Log-Group': context.logGroupName,\n 'Lambda-Log-Stream': context.logStreamName,\n 'Lambda-Run-Id': context.awsRequestId,\n },\n })\n .promise();\n\n const message = integrity(\n {\n tarballUri: `s3://${stagingBucket}/${stagingKey}`,\n metadata: { resources: event.resources.join(', ') },\n time: event.time,\n },\n tarball\n );\n return aws\n .sqs()\n .sendMessage({\n MessageAttributes: {\n AWS_REQUEST_ID: {\n DataType: 'String',\n StringValue: context.awsRequestId,\n },\n LOG_GROUP_NAME: {\n DataType: 'String',\n StringValue: context.logGroupName,\n },\n LOG_STREAM_NAME: {\n DataType: 'String',\n StringValue: context.logStreamName,\n },\n },\n MessageBody: JSON.stringify(message),\n MessageDeduplicationId: event.detail.eventDeduplicationId,\n QueueUrl: queueUrl,\n })\n .promise();\n }\n);\n\n/**\n * @see https://docs.aws.amazon.com/codeartifact/latest/ug/service-event-format-example.html\n */\ninterface CodeArtifactDetail {\n /**\n * The domain that contains the repository that contains the package.\n */\n readonly domainName: string;\n\n /**\n * The AWS account ID of the owner of the domain.\n */\n readonly domainOwner: string;\n\n /**\n * The repository that contains the package.\n */\n readonly repositoryName: string;\n\n /**\n * The format of the package that triggered the event.\n */\n readonly packageFormat: string;\n\n /**\n * The namespace of the package that triggered the event.\n */\n readonly packageNamespace?: string;\n\n /**\n * The name of the package that triggered the event.\n */\n readonly packageName: string;\n\n /**\n * The version of the package that triggered the event.\n */\n readonly packageVersion: string;\n\n /**\n * The state of the package version when the event was triggered.\n */\n readonly packageVersionState:\n | 'Unfinished'\n | 'Published'\n | 'Unlisted'\n | 'Archived'\n | 'Disposed';\n\n /**\n * A value that uniquely identifies the state of the assets and metadata of the package version when the event was\n * triggered. If the package version is modified (for example, by adding another JAR file to a Maven package), the\n * packageVersionRevision changes.\n */\n readonly packageVersionRevision: string;\n\n readonly changes: {\n /**\n * The number of assets added to a package that triggered an event. Examples of an asset are a Maven JAR file or a\n * Python wheel.\n */\n readonly assetsAdded: number;\n\n /**\n * The number of assets removed from a package that triggered an event.\n */\n readonly assetsRemoved: number;\n\n /**\n * The number of assets modified in the package that triggered the event.\n */\n readonly metadataUpdated: boolean;\n\n /**\n * A boolean value that is set to true if the event includes modified package-level metadata. For example, an event\n * might modify a Maven pom.xml file.\n */\n readonly assetsUpdated: number;\n\n /**\n * A boolean value that is set to true if the event's packageVersionStatus is modified(for example, if\n * packageVersionStatus changes from Unfinished to Published).\n */\n readonly statusChanged: boolean;\n };\n\n /**\n * Describes the high-level type of the package version change.\n */\n readonly operationType: 'Created' | 'Updated' | 'Deleted';\n\n /**\n * An integer that specifies an event number for a package. Each event on a package increments the sequenceNumber so\n * events can be arranged sequentially. An event can increment the sequenceNumber by any integer number.\n */\n readonly sequenceNumber: number;\n\n /**\n * An ID used to differentiate duplicate EventBridge events. In rare cases, EventBridge might trigger the same rule\n * more than once for a single event or scheduled time. Or, it might invoke the same target more than once for a given\n * triggered rule.\n */\n readonly eventDeduplicationId: string;\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 _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 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 _s3 = _sqs = _sfn = _lambda = _codeArtifact = undefined;\n}\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", "/**\n * The name of an environment variable that contains the bucket name that includes the deny list.\n */\nexport const ENV_DENY_LIST_BUCKET_NAME = 'DENY_LIST_BUCKET_NAME';\n\n/**\n * The object key of the deny list in the bucket.\n */\nexport const ENV_DENY_LIST_OBJECT_KEY = 'DENY_LIST_OBJECT_KEY';\n\nexport const ENV_PRUNE_PACKAGE_DATA_BUCKET_NAME = 'PACKAGE_DATA_BUCKET_NAME';\nexport const ENV_PRUNE_PACKAGE_DATA_KEY_PREFIX = 'PACKAGE_DATA_KEY_PREFIX';\nexport const ENV_PRUNE_QUEUE_URL = 'PRUNE_QUEUE_URL';\nexport const ENV_PRUNE_ON_CHANGE_FUNCTION_NAME = 'ON_CHANGE_FUNCTION_NAME';\n\nexport const ENV_DELETE_OBJECT_DATA_BUCKET_NAME = 'PACKAGE_DATA_BUCKET_NAME';\n\nexport const METRICS_NAMESPACE = 'ConstructHub/DenyList';\n\nexport const enum MetricName {\n DENY_LIST_RULE_COUNT = 'DenyListRuleCount',\n}\n", "import * as AWS from 'aws-sdk';\nimport { s3 } from '../shared/aws.lambda-shared';\nimport { requireEnv } from '../shared/env.lambda-shared';\nimport { DenyListMap, DenyListRule } from './api';\nimport {\n ENV_DENY_LIST_BUCKET_NAME,\n ENV_DENY_LIST_OBJECT_KEY,\n} from './constants';\n\n/**\n * A client for working with the deny list.\n */\nexport class DenyListClient {\n /**\n * Creates a new client for accessing the deny list.\n */\n public static async newClient() {\n const client = new DenyListClient();\n await client.init();\n return client;\n }\n\n private readonly s3: AWS.S3;\n private readonly bucketName: string;\n private readonly objectKey: string;\n\n private _map: DenyListMap | undefined;\n\n private constructor() {\n this.bucketName = requireEnv(ENV_DENY_LIST_BUCKET_NAME);\n this.objectKey = requireEnv(ENV_DENY_LIST_OBJECT_KEY);\n this.s3 = s3();\n }\n\n /**\n * Downloads the deny list and stores it in memory.\n *\n * This must be called before `lookup()`.\n */\n private async init() {\n if (this._map) {\n throw new Error('init() cannot be called twice');\n }\n\n this._map = {};\n\n try {\n const params = {\n Bucket: this.bucketName,\n Key: this.objectKey,\n };\n\n const { Body: body } = await this.s3.getObject(params).promise();\n if (!body) {\n console.log(\n `WARNING: deny list body is empty at ${this.bucketName}/${this.objectKey}`\n );\n return;\n }\n\n const contents = body.toString('utf-8');\n\n // an empty string is a valid (empty) deny list\n if (contents.length === 0) {\n return;\n }\n\n const data = JSON.parse(contents) as DenyListMap;\n if (typeof data != 'object') {\n throw new Error(\n `Invalid format in deny list file at ${this.bucketName}/${this.objectKey}. Expecting a map`\n );\n }\n\n this._map = data;\n } catch (e) {\n if (e.code === 'NoSuchKey' || e.code === 'NoSuchBucket') {\n return;\n }\n\n throw new Error(\n `Unable to parse deny list file ${this.bucketName}/${this.objectKey}: ${e}`\n );\n }\n }\n\n /**\n * Checks if a package (name + version) is in the deny list.\n * @param name The name of the package\n * @param version The package version\n * @returns `undefined` if the package is not in the deny list or a\n * `DenyListRule` otherwise.\n */\n public lookup(name: string, version: string): DenyListRule | undefined {\n if (!this._map) {\n throw new Error('DenyListClient must be initialized');\n }\n\n return this._map[name] ?? this._map[`${name}/v${version}`];\n }\n\n /**\n * Returns a copy of the deny list map.\n */\n public get map() {\n if (!this._map) {\n throw new Error('DenyListClient must be initialized');\n }\n\n return this._map;\n }\n}\n", "import { s3 } from '../shared/aws.lambda-shared';\nimport { requireEnv } from '../shared/env.lambda-shared';\nimport { EnvironmentVariables } from './constants';\n\n/**\n * A client for working with the license list.\n */\nexport class LicenseListClient {\n public static async newClient() {\n const client = new LicenseListClient();\n await client.init();\n return client;\n }\n\n readonly #bucketName: string;\n readonly #objectKey: string;\n\n #map?: Map<string, string>;\n\n private constructor() {\n this.#bucketName = requireEnv(EnvironmentVariables.BUCKET_NAME);\n this.#objectKey = requireEnv(EnvironmentVariables.OBJECT_KEY);\n }\n\n /**\n * Looks up a license ID in this list.\n *\n * @param licenseId the license ID to look up (possibly with unorthodox case).\n *\n * @returns the normalized SPDX license identifier for this license, if it is\n * in the list, or `undefined` otherwise.\n */\n public lookup(licenseId: string): string | undefined {\n /* istanbul ignore if (should never happen) */\n if (this.#map == null) {\n throw new Error('LicenseListClient must be initialized');\n }\n return this.#map.get(licenseId.toUpperCase());\n }\n\n private async init() {\n /* istanbul ignore if (should never happen) */\n if (this.#map != null) {\n throw new Error('init() cannot be called twice');\n }\n const { Body: body } = await s3()\n .getObject({ Bucket: this.#bucketName, Key: this.#objectKey })\n .promise();\n if (!body) {\n console.log(\n `WARNING: license list is empty at ${this.#bucketName}/${\n this.#objectKey\n }`\n );\n this.#map = new Map();\n return;\n }\n\n const licenseIds = JSON.parse(body.toString('utf-8'));\n if (!Array.isArray(licenseIds)) {\n throw new Error(\n `Invalid format in license list file at ${this.#bucketName}/${\n this.#objectKey\n }. Expected an array.`\n );\n }\n this.#map = new Map(licenseIds.map((id) => [id.toUpperCase(), id]));\n }\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", "import { createGunzip } from 'zlib';\nimport { extract } from 'tar-stream';\n\n/**\n * Extracts objects from a compressed tarball (.tgz file). Selectors are\n * provided as a map from result key to a selector configuration object, which\n * can specify whether the object is required (`required: true`) or not (a\n * missing required object will cause the extraction to throw an error), and\n * either a path name (exact match with the contents of the tarball), or a\n * filter function. Selector properties are applied in the order in which they\n * are defined: the first matching selector gets used to select the object. If\n * a selector matches multiple objects in the tarball, the last matched object\n * is returned.\n *\n * @param tgz the compressed tarbal data in a `Buffer`.\n * @param selector the objects to be extracted from the tarball.\n *\n * @returns the extracted objects.\n */\nexport async function extractObjects<S extends Selector>(\n tgz: Buffer,\n selector: S\n): Promise<Selection<S>> {\n const tarball = await gunzip(tgz);\n return new Promise((ok, ko) => {\n const result: { [name: string]: Buffer } = {};\n const extractor = extract({ filenameEncoding: 'utf-8' })\n .once('error', ko)\n .once('finish', () => {\n for (const [name, { path, required }] of Object.entries(selector)) {\n if (!required) {\n continue;\n }\n if (!(name in result)) {\n const err = new Error(\n `Missing required entry in tarball: ${name} (${\n path ?? '<dynamic>'\n })`\n );\n Error.captureStackTrace(err);\n ko(err);\n return;\n }\n }\n ok(result as Selection<S>);\n })\n .on('entry', (headers, stream, next) => {\n for (const [name, config] of Object.entries(selector)) {\n if (selectorMatches(headers.name, config)) {\n const chunks = new Array<Buffer>();\n stream\n .once('error', ko)\n .on('data', (chunk) => chunks.push(Buffer.from(chunk)))\n .once('end', () => {\n result[name] = Buffer.concat(chunks);\n // Running `next` on the next runLoop iteration to avoid stack overflow\n setImmediate(next);\n })\n .resume();\n return;\n }\n }\n // Running `next` on the next runLoop iteration to avoid stack overflow\n setImmediate(next);\n });\n extractor.write(tarball, (err) => {\n if (err != null) {\n ko(err);\n }\n extractor.end();\n });\n });\n}\n\nfunction gunzip(gz: Buffer): Promise<Buffer> {\n return new Promise((ok, ko) => {\n const chunks = new Array<Buffer>();\n createGunzip()\n .once('error', ko)\n .on('data', (chunk) => chunks.push(Buffer.from(chunk)))\n .once('end', () => ok(Buffer.concat(chunks)))\n .end(gz);\n });\n}\n\nfunction selectorMatches(path: string, config: SelectorProperty): boolean {\n if ('path' in config) {\n return path === config.path;\n }\n return config.filter(path);\n}\n\ninterface Selector {\n readonly [name: string]: SelectorProperty;\n}\ntype SelectorProperty = { readonly required?: boolean } & (\n | { readonly path: string }\n | { readonly path?: undefined; readonly filter: (path: string) => boolean }\n);\n\ntype Selection<S extends Selector> = {\n readonly [P in keyof S]: S[P] extends { readonly required: true }\n ? Buffer\n : Buffer | undefined;\n};\n", "export const METRICS_NAMESPACE = 'ConstructHub/PackageSource/CodeArtifact';\n\nexport const DOMAIN_OWNER_DIMENSION = 'DomainOwner';\nexport const DOMAIN_NAME_DIMENSION = 'DomainName';\nexport const REPOSITORY_NAME_DIMENSION = 'RepositoryName';\n\nexport const enum MetricName {\n DELETED_COUNT = 'DeletedCount',\n DENY_LISTED_COUNT = 'DenyListedCount',\n INELIGIBLE_LICENSE = 'IneligibleLicenseCount',\n NOT_JSII_ENABLED_COUNT = 'NotJsiiEnabledCount',\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Constants;\n(function (Constants) {\n Constants[Constants[\"MAX_DIMENSIONS\"] = 9] = \"MAX_DIMENSIONS\";\n Constants[\"DEFAULT_NAMESPACE\"] = \"aws-embedded-metrics\";\n Constants[Constants[\"MAX_METRICS_PER_EVENT\"] = 100] = \"MAX_METRICS_PER_EVENT\";\n Constants[\"DEFAULT_AGENT_HOST\"] = \"0.0.0.0\";\n Constants[Constants[\"DEFAULT_AGENT_PORT\"] = 25888] = \"DEFAULT_AGENT_PORT\";\n})(Constants = exports.Constants || (exports.Constants = {}));\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Environments;\n(function (Environments) {\n Environments[\"Local\"] = \"Local\";\n Environments[\"Lambda\"] = \"Lambda\";\n Environments[\"Agent\"] = \"Agent\";\n Environments[\"EC2\"] = \"EC2\";\n Environments[\"ECS\"] = \"ECS\";\n Environments[\"Unknown\"] = \"\";\n})(Environments || (Environments = {}));\nexports.default = Environments;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Constants_1 = require(\"../Constants\");\nconst Environments_1 = require(\"../environment/Environments\");\nconst ENV_VAR_PREFIX = 'AWS_EMF';\nvar ConfigKeys;\n(function (ConfigKeys) {\n ConfigKeys[\"LOG_GROUP_NAME\"] = \"LOG_GROUP_NAME\";\n ConfigKeys[\"LOG_STREAM_NAME\"] = \"LOG_STREAM_NAME\";\n ConfigKeys[\"ENABLE_DEBUG_LOGGING\"] = \"ENABLE_DEBUG_LOGGING\";\n ConfigKeys[\"SERVICE_NAME\"] = \"SERVICE_NAME\";\n ConfigKeys[\"SERVICE_TYPE\"] = \"SERVICE_TYPE\";\n ConfigKeys[\"AGENT_ENDPOINT\"] = \"AGENT_ENDPOINT\";\n ConfigKeys[\"ENVIRONMENT_OVERRIDE\"] = \"ENVIRONMENT\";\n ConfigKeys[\"NAMESPACE\"] = \"NAMESPACE\";\n})(ConfigKeys || (ConfigKeys = {}));\nclass EnvironmentConfigurationProvider {\n getConfiguration() {\n return {\n agentEndpoint: this.getEnvVariable(ConfigKeys.AGENT_ENDPOINT),\n debuggingLoggingEnabled: this.tryGetEnvVariableAsBoolean(ConfigKeys.ENABLE_DEBUG_LOGGING, false),\n logGroupName: this.getEnvVariable(ConfigKeys.LOG_GROUP_NAME),\n logStreamName: this.getEnvVariable(ConfigKeys.LOG_STREAM_NAME),\n serviceName: this.getEnvVariable(ConfigKeys.SERVICE_NAME) || this.getEnvVariableWithoutPrefix(ConfigKeys.SERVICE_NAME),\n serviceType: this.getEnvVariable(ConfigKeys.SERVICE_TYPE) || this.getEnvVariableWithoutPrefix(ConfigKeys.SERVICE_TYPE),\n environmentOverride: this.getEnvironmentOverride(),\n namespace: this.getEnvVariable(ConfigKeys.NAMESPACE) || Constants_1.Constants.DEFAULT_NAMESPACE,\n };\n }\n getEnvVariableWithoutPrefix(configKey) {\n return process.env[configKey];\n }\n getEnvVariable(configKey) {\n return process.env[`${ENV_VAR_PREFIX}_${configKey}`];\n }\n tryGetEnvVariableAsBoolean(configKey, fallback) {\n const configValue = this.getEnvVariable(configKey);\n return !configValue ? fallback : configValue.toLowerCase() === 'true';\n }\n getEnvironmentOverride() {\n const overrideValue = this.getEnvVariable(ConfigKeys.ENVIRONMENT_OVERRIDE);\n const environment = Environments_1.default[overrideValue];\n if (environment === undefined) {\n return Environments_1.default.Unknown;\n }\n return environment;\n }\n}\nexports.EnvironmentConfigurationProvider = EnvironmentConfigurationProvider;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst EnvironmentConfigurationProvider_1 = require(\"./EnvironmentConfigurationProvider\");\nconst Configuration = new EnvironmentConfigurationProvider_1.EnvironmentConfigurationProvider().getConfiguration();\nexports.default = Configuration;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Configuration_1 = require(\"../config/Configuration\");\nconst LOG = (...args) => {\n if (Configuration_1.default.debuggingLoggingEnabled) {\n console.log(...args);\n }\n};\nexports.LOG = LOG;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass MetricValues {\n constructor(value, unit) {\n this.values = [value];\n this.unit = unit || 'None';\n }\n /**\n * Appends the provided value to the current metric\n * @param value\n */\n addValue(value) {\n this.values.push(value);\n }\n}\nexports.MetricValues = MetricValues;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Configuration_1 = require(\"../config/Configuration\");\nconst Logger_1 = require(\"../utils/Logger\");\nconst MetricValues_1 = require(\"./MetricValues\");\nclass MetricsContext {\n /**\n * Constructor used to create child instances.\n * You should not use this constructor directly.\n * Instead, use createCopyWithContext() or empty().\n *\n * The reason for this is to avoid unexpected behavior when creating\n * MetricsContexts with defaultDimensions and existing dimensions.\n *\n * @param properties\n * @param dimensions\n */\n constructor(namespace, properties, dimensions, defaultDimensions, shouldUseDefaultDimensions, timestamp) {\n this.metrics = new Map();\n this.meta = {};\n this.shouldUseDefaultDimensions = true;\n this.namespace = namespace || Configuration_1.default.namespace;\n this.properties = properties || {};\n this.dimensions = dimensions || [];\n this.timestamp = timestamp;\n this.meta.Timestamp = MetricsContext.resolveMetaTimestamp(timestamp);\n this.defaultDimensions = defaultDimensions || {};\n if (shouldUseDefaultDimensions != undefined) {\n this.shouldUseDefaultDimensions = shouldUseDefaultDimensions;\n }\n }\n /**\n * Use this to create a new, empty context.\n */\n static empty() {\n return new MetricsContext();\n }\n static resolveMetaTimestamp(timestamp) {\n if (timestamp instanceof Date) {\n return timestamp.getTime();\n }\n else if (timestamp) {\n return timestamp;\n }\n else {\n return Date.now();\n }\n }\n setNamespace(value) {\n this.namespace = value;\n }\n setProperty(key, value) {\n this.properties[key] = value;\n }\n setTimestamp(timestamp) {\n this.timestamp = timestamp;\n this.meta.Timestamp = MetricsContext.resolveMetaTimestamp(timestamp);\n }\n /**\n * Sets default dimensions for the Context.\n * A dimension set will be created with just the default dimensions\n * and all calls to putDimensions will be prepended with the defaults.\n */\n setDefaultDimensions(dimensions) {\n Logger_1.LOG(`Received default dimensions`, dimensions);\n this.defaultDimensions = dimensions;\n }\n /**\n * Adds a new set of dimensions. Any time a new dimensions set\n * is added, the set is first prepended by the default dimensions.\n *\n * @param dimensions\n */\n putDimensions(incomingDimensionSet) {\n if (this.dimensions.length === 0) {\n this.dimensions.push(incomingDimensionSet);\n return;\n }\n for (let i = 0; i < this.dimensions.length; i++) {\n const existingDimensionSet = this.dimensions[i];\n // check for duplicate dimensions when putting\n // this is an O(n^2) operation, but since we never expect to have more than\n // 10 dimensions, this is acceptable for almost all cases.\n // This makes re-using loggers much easier.\n const existingDimensionSetKeys = Object.keys(existingDimensionSet);\n const incomingDimensionSetKeys = Object.keys(incomingDimensionSet);\n if (existingDimensionSetKeys.length !== incomingDimensionSetKeys.length) {\n this.dimensions.push(incomingDimensionSet);\n return;\n }\n for (let j = 0; j < existingDimensionSetKeys.length; j++) {\n if (!incomingDimensionSetKeys.includes(existingDimensionSetKeys[j])) {\n // we're done now because we know that the dimensions keys are not identical\n this.dimensions.push(incomingDimensionSet);\n return;\n }\n }\n }\n }\n /**\n * Overwrite all dimensions.\n *\n * @param dimensionSets\n */\n setDimensions(dimensionSets) {\n this.shouldUseDefaultDimensions = false;\n this.dimensions = dimensionSets;\n }\n /**\n * Get the current dimensions.\n */\n getDimensions() {\n // caller has explicitly called setDimensions\n if (this.shouldUseDefaultDimensions === false) {\n return this.dimensions;\n }\n // if there are no default dimensions, return the custom dimensions\n if (Object.keys(this.defaultDimensions).length === 0) {\n return this.dimensions;\n }\n // if default dimensions have been provided, but no custom dimensions, use the defaults\n if (this.dimensions.length === 0) {\n return [this.defaultDimensions];\n }\n // otherwise, merge the dimensions\n // we do this on the read path because default dimensions\n // may get updated asynchronously by environment detection\n return this.dimensions.map(custom => {\n return Object.assign(Object.assign({}, this.defaultDimensions), custom);\n });\n }\n putMetric(key, value, unit) {\n const currentMetric = this.metrics.get(key);\n if (currentMetric) {\n currentMetric.addValue(value);\n }\n else {\n this.metrics.set(key, new MetricValues_1.MetricValues(value, unit));\n }\n }\n /**\n * Creates an independently flushable context.\n */\n createCopyWithContext() {\n return new MetricsContext(this.namespace, Object.assign({}, this.properties), Object.assign([], this.dimensions), this.defaultDimensions, this.shouldUseDefaultDimensions, this.timestamp);\n }\n}\nexports.MetricsContext = MetricsContext;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Configuration_1 = require(\"../config/Configuration\");\nconst MetricsContext_1 = require(\"./MetricsContext\");\n/**\n * An async metrics logger.\n * Use this interface to publish logs to CloudWatch Logs\n * and extract metrics to CloudWatch Metrics asynchronously.\n */\nclass MetricsLogger {\n constructor(resolveEnvironment, context) {\n this.configureContextForEnvironment = (context, environment) => {\n const defaultDimensions = {\n // LogGroup name will entirely depend on the environment since there\n // are some cases where the LogGroup cannot be configured (e.g. Lambda)\n LogGroup: environment.getLogGroupName(),\n ServiceName: Configuration_1.default.serviceName || environment.getName(),\n ServiceType: Configuration_1.default.serviceType || environment.getType(),\n };\n context.setDefaultDimensions(defaultDimensions);\n environment.configureContext(context);\n };\n this.resolveEnvironment = resolveEnvironment;\n this.context = context || MetricsContext_1.MetricsContext.empty();\n }\n /**\n * Flushes the current context state to the configured sink.\n */\n flush() {\n return __awaiter(this, void 0, void 0, function* () {\n // resolve the environment and get the sink\n // MOST of the time this will run synchonrously\n // This only runs asynchronously if executing for the\n // first time in a non-lambda environment\n const environment = yield this.resolveEnvironment();\n this.configureContextForEnvironment(this.context, environment);\n const sink = environment.getSink();\n // accept and reset the context\n yield sink.accept(this.context);\n this.context = this.context.createCopyWithContext();\n });\n }\n /**\n * Set a property on the published metrics.\n * This is stored in the emitted log data and you are not\n * charged for this data by CloudWatch Metrics.\n * These values can be values that are useful for searching on,\n * but have too high cardinality to emit as dimensions to\n * CloudWatch Metrics.\n *\n * @param key Property name\n * @param value Property value\n */\n setProperty(key, value) {\n this.context.setProperty(key, value);\n return this;\n }\n /**\n * Adds a dimension.\n * This is generally a low cardinality key-value pair that is part of the metric identity.\n * CloudWatch treats each unique combination of dimensions as a separate metric, even if the metrics have the same metric name.\n *\n * @param dimension\n * @param value\n * @see [CloudWatch Dimensions](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#Dimension)\n */\n putDimensions(dimensions) {\n this.context.putDimensions(dimensions);\n return this;\n }\n /**\n * Overwrite all dimensions on this MetricsLogger instance.\n *\n * @param dimensionSets\n * @see [CloudWatch Dimensions](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#Dimension)\n */\n setDimensions(...dimensionSets) {\n this.context.setDimensions(dimensionSets);\n return this;\n }\n /**\n * Put a metric value.\n * This value will be emitted to CloudWatch Metrics asyncronously and does not contribute to your\n * account TPS limits. The value will also be available in your CloudWatch Logs\n * @param key\n * @param value\n * @param unit\n */\n putMetric(key, value, unit) {\n this.context.putMetric(key, value, unit);\n return this;\n }\n /**\n * Set the CloudWatch namespace that metrics should be published to.\n * @param value\n */\n setNamespace(value) {\n this.context.setNamespace(value);\n return this;\n }\n /**\n * Set the timestamp of metrics emitted in this context.\n *\n * If not set, the timestamp will default to new Date() at the point\n * the context is constructed.\n *\n * If set, timestamp will preserved across calls to flush().\n *\n * @param timestamp\n */\n setTimestamp(timestamp) {\n this.context.setTimestamp(timestamp);\n return this;\n }\n /**\n * Creates a new logger using the same contextual data as\n * the previous logger. This allows you to flush the instances\n * independently.\n */\n new() {\n return new MetricsLogger(this.resolveEnvironment, this.context.createCopyWithContext());\n }\n}\nexports.MetricsLogger = MetricsLogger;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Constants_1 = require(\"../Constants\");\n/**\n * Serializes the provided context to the CWL Structured\n * Logs format with Embedded Metric Filters.\n */\nclass LogSerializer {\n /**\n * Retrieve the current context as a JSON string\n */\n serialize(context) {\n const dimensionKeys = [];\n let dimensionProperties = {};\n context.getDimensions().forEach(d => {\n // we can only take the first 9 defined dimensions\n // the reason we do this in the serializer is because\n // it is possible that other sinks or formats can\n // support more dimensions\n // in the future it may make sense to introduce a higher-order\n // representation for sink-specific validations\n const keys = Object.keys(d).slice(0, Constants_1.Constants.MAX_DIMENSIONS);\n dimensionKeys.push(keys);\n dimensionProperties = Object.assign(Object.assign({}, dimensionProperties), d);\n });\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const createBody = () => {\n return Object.assign(Object.assign(Object.assign({}, dimensionProperties), context.properties), { _aws: Object.assign(Object.assign({}, context.meta), { CloudWatchMetrics: [\n {\n Dimensions: dimensionKeys,\n Metrics: [],\n Namespace: context.namespace,\n },\n ] }) });\n };\n const eventBatches = [];\n let currentBody = createBody();\n const currentMetricsInBody = () => currentBody._aws.CloudWatchMetrics[0].Metrics.length;\n const shouldSerialize = () => currentMetricsInBody() === Constants_1.Constants.MAX_METRICS_PER_EVENT;\n // converts the body to JSON and pushes it into the batches\n const serializeCurrentBody = () => {\n eventBatches.push(JSON.stringify(currentBody));\n currentBody = createBody();\n };\n for (const [key, metric] of context.metrics) {\n // if there is only one metric value, unwrap it to make querying easier\n const metricValue = metric.values.length === 1 ? metric.values[0] : metric.values;\n currentBody[key] = metricValue;\n currentBody._aws.CloudWatchMetrics[0].Metrics.push({ Name: key, Unit: metric.unit });\n if (shouldSerialize()) {\n serializeCurrentBody();\n }\n }\n if (eventBatches.length === 0 || currentMetricsInBody() > 0) {\n serializeCurrentBody();\n }\n return eventBatches;\n }\n}\nexports.LogSerializer = LogSerializer;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst LogSerializer_1 = require(\"../serializers/LogSerializer\");\n/**\n * A sink that flushes log data to stdout.\n * This is the preferred sink for Lambda functions.\n */\nclass ConsoleSink {\n constructor(serializer) {\n this.name = 'ConsoleSink';\n this.serializer = serializer || new LogSerializer_1.LogSerializer();\n }\n accept(context) {\n // tslint:disable-next-line\n const events = this.serializer.serialize(context);\n events.forEach(event => console.log(event));\n return Promise.resolve();\n }\n}\nexports.ConsoleSink = ConsoleSink;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst net = require(\"net\");\nconst Logger_1 = require(\"../../utils/Logger\");\nclass TcpClient {\n constructor(endpoint) {\n this.endpoint = endpoint;\n this.socket = new net.Socket({ allowHalfOpen: true, writable: false })\n .setEncoding('utf8')\n .setKeepAlive(true)\n .setTimeout(5000) // idle timeout\n .on('timeout', () => this.disconnect('idle timeout'))\n .on('end', () => this.disconnect('end'))\n .on('data', data => Logger_1.LOG('TcpClient received data.', data));\n }\n warmup() {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n yield this.establishConnection();\n }\n catch (err) {\n Logger_1.LOG('Failed to connect', err);\n }\n });\n }\n sendMessage(message) {\n return __awaiter(this, void 0, void 0, function* () {\n // ensure the socket is open and writable\n yield this.waitForOpenConnection();\n yield new Promise((resolve, reject) => {\n const onSendError = (err) => {\n Logger_1.LOG('Failed to write', err);\n reject(err);\n };\n const wasFlushedToKernel = this.socket.write(message, (err) => {\n if (!err) {\n Logger_1.LOG('Write succeeded');\n resolve();\n }\n else {\n onSendError(err);\n }\n });\n if (!wasFlushedToKernel) {\n Logger_1.LOG('TcpClient data was not flushed to kernel buffer and was queued in memory.');\n }\n });\n });\n }\n disconnect(eventName) {\n Logger_1.LOG('TcpClient disconnected due to:', eventName);\n this.socket.removeAllListeners();\n this.socket.destroy();\n this.socket.unref();\n }\n waitForOpenConnection() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.socket.writeable || this.socket.readyState !== 'open') {\n yield this.establishConnection();\n }\n });\n }\n establishConnection() {\n return __awaiter(this, void 0, void 0, function* () {\n yield new Promise((resolve, reject) => {\n const onError = (e) => {\n // socket is already open, no need to connect\n if (e.message.includes('EISCONN')) {\n resolve();\n return;\n }\n Logger_1.LOG('TCP Client received error', e);\n this.disconnect(e.message);\n reject(e);\n };\n const onConnect = () => {\n this.socket.removeListener('error', onError);\n Logger_1.LOG('TcpClient connected.', this.endpoint);\n resolve();\n };\n // TODO: convert this to a proper state machine\n switch (this.socket.readyState) {\n case 'open':\n resolve();\n break;\n case 'opening':\n // the socket is currently opening, we will resolve\n // or fail the current promise on the connect or\n // error events\n this.socket.once('connect', onConnect);\n this.socket.once('error', onError);\n break;\n default:\n Logger_1.LOG('opening connection with socket in state: ', this.socket.readyState);\n this.socket.connect(this.endpoint.port, this.endpoint.host, onConnect).once('error', onError);\n break;\n }\n });\n });\n }\n}\nexports.TcpClient = TcpClient;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst dgram = require(\"dgram\");\nconst Logger_1 = require(\"../../utils/Logger\");\nclass UdpClient {\n constructor(endpoint) {\n this.endpoint = endpoint;\n }\n // No warm up for UDP\n warmup() {\n return Promise.resolve();\n }\n sendMessage(message) {\n return __awaiter(this, void 0, void 0, function* () {\n const client = dgram.createSocket('udp4');\n client.send(message, this.endpoint.port, this.endpoint.host, (error) => {\n if (error) {\n Logger_1.LOG(error);\n }\n client.close();\n });\n return Promise.resolve();\n });\n }\n}\nexports.UdpClient = UdpClient;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst url = require(\"url\");\nconst Configuration_1 = require(\"../config/Configuration\");\nconst LogSerializer_1 = require(\"../serializers/LogSerializer\");\nconst Logger_1 = require(\"../utils/Logger\");\nconst TcpClient_1 = require(\"./connections/TcpClient\");\nconst UdpClient_1 = require(\"./connections/UdpClient\");\nconst TCP = 'tcp:';\nconst UDP = 'udp:';\nconst defaultTcpEndpoint = {\n host: '0.0.0.0',\n port: 25888,\n protocol: TCP,\n};\nconst parseEndpoint = (endpoint) => {\n try {\n if (!endpoint) {\n return defaultTcpEndpoint;\n }\n const parsedUrl = url.parse(endpoint);\n if (!parsedUrl.hostname || !parsedUrl.port || !parsedUrl.protocol) {\n Logger_1.LOG(`Failed to parse the provided agent endpoint. Falling back to the default TCP endpoint.`, parsedUrl);\n return defaultTcpEndpoint;\n }\n if (parsedUrl.protocol !== TCP && parsedUrl.protocol !== UDP) {\n Logger_1.LOG(`The provided agent endpoint protocol '${parsedUrl.protocol}' is not supported. Please use TCP or UDP. Falling back to the default TCP endpoint.`, parsedUrl);\n return defaultTcpEndpoint;\n }\n return {\n host: parsedUrl.hostname,\n port: Number(parsedUrl.port),\n protocol: parsedUrl.protocol,\n };\n }\n catch (e) {\n Logger_1.LOG('Failed to parse the provided agent endpoint', e);\n return defaultTcpEndpoint;\n }\n};\n/**\n * A sink that flushes to the CW Agent.\n * This sink instance should be re-used to avoid\n * leaking connections.\n */\nclass AgentSink {\n constructor(logGroupName, logStreamName, serializer) {\n this.name = 'AgentSink';\n this.logGroupName = logGroupName;\n this.logStreamName = logStreamName;\n this.serializer = serializer || new LogSerializer_1.LogSerializer();\n this.endpoint = parseEndpoint(Configuration_1.default.agentEndpoint);\n this.socketClient = this.getSocketClient(this.endpoint);\n Logger_1.LOG('Using socket client', this.socketClient.constructor.name);\n }\n accept(context) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.logGroupName) {\n context.meta.LogGroupName = this.logGroupName;\n }\n if (this.logStreamName) {\n context.meta.LogStreamName = this.logStreamName;\n }\n const events = this.serializer.serialize(context);\n Logger_1.LOG(`Sending {} events to socket.`, events.length);\n for (let index = 0; index < events.length; index++) {\n const event = events[index];\n const message = event + '\\n';\n const bytes = Buffer.from(message);\n yield this.socketClient.sendMessage(bytes);\n }\n });\n }\n getSocketClient(endpoint) {\n Logger_1.LOG('Getting socket client for connection.', endpoint);\n const client = endpoint.protocol === TCP ? new TcpClient_1.TcpClient(endpoint) : new UdpClient_1.UdpClient(endpoint);\n client.warmup();\n return client;\n }\n}\nexports.AgentSink = AgentSink;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Configuration_1 = require(\"../config/Configuration\");\nconst AgentSink_1 = require(\"../sinks/AgentSink\");\nconst Logger_1 = require(\"../utils/Logger\");\nclass DefaultEnvironment {\n probe() {\n return Promise.resolve(true);\n }\n getName() {\n if (!Configuration_1.default.serviceName) {\n Logger_1.LOG('Unknown ServiceName.');\n return 'Unknown';\n }\n return Configuration_1.default.serviceName;\n }\n getType() {\n if (!Configuration_1.default.serviceType) {\n Logger_1.LOG('Unknown ServiceType.');\n return 'Unknown';\n }\n return Configuration_1.default.serviceType;\n }\n getLogGroupName() {\n // if the caller explicitly overrides logGroupName to\n // be empty, we should honor that rather than providing\n // the default behavior.\n if (Configuration_1.default.logGroupName === '') {\n return '';\n }\n return Configuration_1.default.logGroupName ? Configuration_1.default.logGroupName : `${this.getName()}-metrics`;\n }\n configureContext() {\n // no-op\n }\n getSink() {\n if (!this.sink) {\n this.sink = new AgentSink_1.AgentSink(this.getLogGroupName(), Configuration_1.default.logStreamName);\n }\n return this.sink;\n }\n}\nexports.DefaultEnvironment = DefaultEnvironment;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst http = require(\"http\");\nconst SOCKET_TIMEOUT = 1000;\n/**\n * Fetch JSON data from an remote HTTP endpoint and de-serialize to the provided type.\n * There are no guarantees the response will conform to the contract defined by T.\n * It is up to the consumer to ensure the provided T captures all possible response types\n * from the provided endpoint.\n *\n * @param url - currently only supports HTTP\n */\nconst fetch = (url) => {\n return new Promise((resolve, reject) => {\n const request = http\n .get(url, { timeout: 2000 }, (response) => {\n if (!response.statusCode) {\n reject(`Received undefined response status code from '${url}'`);\n return;\n }\n if (response.statusCode < 200 || response.statusCode > 299) {\n reject(new Error('Failed to load page, status code: ' + response.statusCode));\n return;\n }\n // using similar approach to node-fetch\n // https://github.com/bitinn/node-fetch/blob/6a5d192034a0f438551dffb6d2d8df2c00921d16/src/body.js#L217\n const body = [];\n let bodyBytes = 0;\n response.on('data', (chunk) => {\n bodyBytes += chunk.length;\n body.push(chunk);\n });\n response.on('end', () => {\n let responseString;\n try {\n const buffer = Buffer.concat(body, bodyBytes);\n responseString = buffer.toString();\n const parsedJson = JSON.parse(responseString);\n resolve(parsedJson);\n }\n catch (e) {\n reject(`Failed to parse response from '${url}' as JSON. Received: ${responseString}`);\n }\n });\n })\n .on('error', (err) => {\n reject(err);\n });\n request.on('socket', socket => {\n socket.on('timeout', () => {\n request.abort();\n reject(`Socket timeout while connecting to '${url}'`);\n });\n socket.setTimeout(SOCKET_TIMEOUT);\n });\n });\n};\nexports.fetch = fetch;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Configuration_1 = require(\"../config/Configuration\");\nconst AgentSink_1 = require(\"../sinks/AgentSink\");\nconst Fetch_1 = require(\"../utils/Fetch\");\nconst Logger_1 = require(\"../utils/Logger\");\nconst os = require(\"os\");\nconst Constants_1 = require(\"../Constants\");\n// formats image names into something more readable for a metric name\n// e.g. <account-id>.dkr.ecr.<region>.amazonaws.com/<image-name>:latest -> <image-name>:latest\nconst formatImageName = (imageName) => {\n if (imageName) {\n const splitImageName = imageName.split('/');\n return splitImageName[splitImageName.length - 1];\n }\n return imageName;\n};\nclass ECSEnvironment {\n probe() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!process.env.ECS_CONTAINER_METADATA_URI) {\n return Promise.resolve(false);\n }\n if (process.env.FLUENT_HOST && !Configuration_1.default.agentEndpoint) {\n this.fluentBitEndpoint = `tcp://${process.env.FLUENT_HOST}:${Constants_1.Constants.DEFAULT_AGENT_PORT}`;\n Configuration_1.default.agentEndpoint = this.fluentBitEndpoint;\n Logger_1.LOG(`Using FluentBit configuration. Endpoint: ${this.fluentBitEndpoint}`);\n }\n try {\n this.metadata = yield Fetch_1.fetch(process.env.ECS_CONTAINER_METADATA_URI);\n if (this.metadata) {\n this.metadata.FormattedImageName = formatImageName(this.metadata.Image);\n Logger_1.LOG(`Successfully collected ECS Container metadata.`);\n }\n }\n catch (e) {\n Logger_1.LOG('Failed to collect ECS Container Metadata.');\n Logger_1.LOG(e);\n }\n // return true regardless of whether or not metadata collection\n // succeeded. we know that this is supposed to be an ECS environment\n // just from the environment variable\n return true;\n });\n }\n getName() {\n var _a;\n if (Configuration_1.default.serviceName) {\n return Configuration_1.default.serviceName;\n }\n return ((_a = this.metadata) === null || _a === void 0 ? void 0 : _a.FormattedImageName) ? this.metadata.FormattedImageName : 'Unknown';\n }\n getType() {\n return 'AWS::ECS::Container';\n }\n getLogGroupName() {\n // FireLens / fluent-bit does not need the log group to be included\n // since configuration of the LogGroup is handled by the\n // fluent bit config file\n if (this.fluentBitEndpoint) {\n return '';\n }\n return Configuration_1.default.logGroupName || this.getName();\n }\n configureContext(context) {\n var _a, _b, _c, _d, _e;\n this.addProperty(context, 'containerId', os.hostname());\n this.addProperty(context, 'createdAt', (_a = this.metadata) === null || _a === void 0 ? void 0 : _a.CreatedAt);\n this.addProperty(context, 'startedAt', (_b = this.metadata) === null || _b === void 0 ? void 0 : _b.StartedAt);\n this.addProperty(context, 'image', (_c = this.metadata) === null || _c === void 0 ? void 0 : _c.Image);\n this.addProperty(context, 'cluster', (_d = this.metadata) === null || _d === void 0 ? void 0 : _d.Labels['com.amazonaws.ecs.cluster']);\n this.addProperty(context, 'taskArn', (_e = this.metadata) === null || _e === void 0 ? void 0 : _e.Labels['com.amazonaws.ecs.task-arn']);\n // we override the standard default dimensions here because in the\n // FireLens / fluent-bit case, we don't need the LogGroup\n if (this.fluentBitEndpoint) {\n context.setDefaultDimensions({\n ServiceName: Configuration_1.default.serviceName || this.getName(),\n ServiceType: Configuration_1.default.serviceType || this.getType(),\n });\n }\n }\n getSink() {\n if (!this.sink) {\n const logGroupName = this.fluentBitEndpoint ? '' : this.getLogGroupName();\n this.sink = new AgentSink_1.AgentSink(logGroupName);\n }\n return this.sink;\n }\n addProperty(context, key, value) {\n if (value) {\n context.setProperty(key, value);\n }\n }\n}\nexports.ECSEnvironment = ECSEnvironment;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Configuration_1 = require(\"../config/Configuration\");\nconst AgentSink_1 = require(\"../sinks/AgentSink\");\nconst Fetch_1 = require(\"../utils/Fetch\");\nconst Logger_1 = require(\"../utils/Logger\");\nconst endpoint = 'http://169.254.169.254/latest/dynamic/instance-identity/document';\nclass EC2Environment {\n probe() {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n this.metadata = yield Fetch_1.fetch(endpoint);\n if (this.metadata) {\n return true;\n }\n return false;\n }\n catch (e) {\n Logger_1.LOG(e);\n return false;\n }\n });\n }\n getName() {\n if (!Configuration_1.default.serviceName) {\n Logger_1.LOG('Unknown ServiceName.');\n return 'Unknown';\n }\n return Configuration_1.default.serviceName;\n }\n getType() {\n if (this.metadata) {\n return 'AWS::EC2::Instance';\n }\n // this will only happen if probe() is not called first\n return 'Unknown';\n }\n getLogGroupName() {\n return Configuration_1.default.logGroupName ? Configuration_1.default.logGroupName : `${this.getName()}-metrics`;\n }\n configureContext(context) {\n if (this.metadata) {\n context.setProperty('imageId', this.metadata.imageId);\n context.setProperty('instanceId', this.metadata.instanceId);\n context.setProperty('instanceType', this.metadata.instanceType);\n context.setProperty('privateIP', this.metadata.privateIp);\n context.setProperty('availabilityZone', this.metadata.availabilityZone);\n }\n }\n getSink() {\n if (!this.sink) {\n this.sink = new AgentSink_1.AgentSink(this.getLogGroupName(), Configuration_1.default.logStreamName);\n }\n return this.sink;\n }\n}\nexports.EC2Environment = EC2Environment;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst ConsoleSink_1 = require(\"../sinks/ConsoleSink\");\nclass LambdaEnvironment {\n probe() {\n return Promise.resolve(process.env.AWS_LAMBDA_FUNCTION_NAME ? true : false);\n }\n getName() {\n return process.env.AWS_LAMBDA_FUNCTION_NAME || 'Unknown';\n }\n getType() {\n return 'AWS::Lambda::Function';\n }\n getLogGroupName() {\n return this.getName();\n }\n configureContext(context) {\n this.addProperty(context, 'executionEnvironment', process.env.AWS_EXECUTION_ENV);\n this.addProperty(context, 'memorySize', process.env.AWS_LAMBDA_FUNCTION_MEMORY_SIZE);\n this.addProperty(context, 'functionVersion', process.env.AWS_LAMBDA_FUNCTION_VERSION);\n this.addProperty(context, 'logStreamId', process.env.AWS_LAMBDA_LOG_STREAM_NAME);\n const trace = this.getSampledTrace();\n if (trace) {\n this.addProperty(context, 'traceId', trace);\n }\n }\n getSink() {\n if (!this.sink) {\n this.sink = new ConsoleSink_1.ConsoleSink();\n }\n return this.sink;\n }\n addProperty(context, key, value) {\n if (value) {\n context.setProperty(key, value);\n }\n }\n getSampledTrace() {\n // only collect traces which have been sampled\n if (process.env._X_AMZN_TRACE_ID && process.env._X_AMZN_TRACE_ID.includes('Sampled=1')) {\n return process.env._X_AMZN_TRACE_ID;\n }\n }\n}\nexports.LambdaEnvironment = LambdaEnvironment;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Configuration_1 = require(\"../config/Configuration\");\nconst Logger_1 = require(\"../utils/Logger\");\nconst ConsoleSink_1 = require(\"../sinks/ConsoleSink\");\nclass LocalEnvironment {\n probe() {\n // probe is not intended to be used in the LocalEnvironment\n // To use the local environment you should set the environment\n // override\n return Promise.resolve(false);\n }\n getName() {\n if (!Configuration_1.default.serviceName) {\n Logger_1.LOG('Unknown ServiceName.');\n return 'Unknown';\n }\n return Configuration_1.default.serviceName;\n }\n getType() {\n if (!Configuration_1.default.serviceType) {\n Logger_1.LOG('Unknown ServiceType.');\n return 'Unknown';\n }\n return Configuration_1.default.serviceType;\n }\n getLogGroupName() {\n return Configuration_1.default.logGroupName ? Configuration_1.default.logGroupName : `${this.getName()}-metrics`;\n }\n configureContext() {\n // no-op\n }\n getSink() {\n if (!this.sink) {\n this.sink = new ConsoleSink_1.ConsoleSink();\n }\n return this.sink;\n }\n}\nexports.LocalEnvironment = LocalEnvironment;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Logger_1 = require(\"../utils/Logger\");\nconst DefaultEnvironment_1 = require(\"./DefaultEnvironment\");\nconst ECSEnvironment_1 = require(\"./ECSEnvironment\");\nconst EC2Environment_1 = require(\"./EC2Environment\");\nconst LambdaEnvironment_1 = require(\"./LambdaEnvironment\");\nconst Configuration_1 = require(\"../config/Configuration\");\nconst Environments_1 = require(\"./Environments\");\nconst LocalEnvironment_1 = require(\"./LocalEnvironment\");\nconst lambdaEnvironment = new LambdaEnvironment_1.LambdaEnvironment();\nconst ecsEnvironment = new ECSEnvironment_1.ECSEnvironment();\nconst ec2Environment = new EC2Environment_1.EC2Environment();\nconst defaultEnvironment = new DefaultEnvironment_1.DefaultEnvironment();\n// ordering of this array matters\n// both Lambda and ECS can be determined from environment variables\n// making the entire detection process fast an cheap\n// EC2 can only be determined by making a remote HTTP request\nconst environments = [lambdaEnvironment, ecsEnvironment, ec2Environment];\nlet environment = undefined;\nconst getEnvironmentFromOverride = () => {\n // short-circuit environment detection and use override\n switch (Configuration_1.default.environmentOverride) {\n case Environments_1.default.Agent:\n return defaultEnvironment;\n case Environments_1.default.EC2:\n return ec2Environment;\n case Environments_1.default.Lambda:\n return lambdaEnvironment;\n case Environments_1.default.ECS:\n return ecsEnvironment;\n case Environments_1.default.Local:\n return new LocalEnvironment_1.LocalEnvironment();\n case Environments_1.default.Unknown:\n default:\n return undefined;\n }\n};\nconst discoverEnvironment = () => __awaiter(void 0, void 0, void 0, function* () {\n Logger_1.LOG(`Discovering environment`);\n for (const envUnderTest of environments) {\n Logger_1.LOG(`Testing: ${envUnderTest.constructor.name}`);\n try {\n if (yield envUnderTest.probe()) {\n return envUnderTest;\n }\n }\n catch (e) {\n Logger_1.LOG(`Failed probe: ${envUnderTest.constructor.name}`);\n }\n }\n return defaultEnvironment;\n});\nconst _resolveEnvironment = () => __awaiter(void 0, void 0, void 0, function* () {\n Logger_1.LOG('Resolving environment');\n if (environment) {\n return environment;\n }\n if (Configuration_1.default.environmentOverride) {\n Logger_1.LOG('Environment override supplied', Configuration_1.default.environmentOverride);\n // this will be falsy if an invalid configuration value is provided\n environment = getEnvironmentFromOverride();\n if (environment) {\n return environment;\n }\n else {\n Logger_1.LOG('Invalid environment provided. Falling back to auto-discovery.', Configuration_1.default.environmentOverride);\n }\n }\n environment = yield discoverEnvironment(); // eslint-disable-line require-atomic-updates\n return environment;\n});\n// pro-actively begin resolving the environment\n// this will allow us to kick off any async tasks\n// at module load time to reduce any blocking that\n// may occur on the initial flush()\nconst environmentPromise = _resolveEnvironment();\nconst resolveEnvironment = () => __awaiter(void 0, void 0, void 0, function* () {\n return environmentPromise;\n});\nexports.resolveEnvironment = resolveEnvironment;\n// this method is used for testing to bypass the cached environmentPromise result\nconst cleanResolveEnvironment = () => __awaiter(void 0, void 0, void 0, function* () {\n yield environmentPromise;\n environment = undefined;\n return yield _resolveEnvironment();\n});\nexports.cleanResolveEnvironment = cleanResolveEnvironment;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst __1 = require(\"..\");\nconst EnvironmentDetector_1 = require(\"../environment/EnvironmentDetector\");\nconst MetricsContext_1 = require(\"./MetricsContext\");\nconst createMetricsLogger = () => {\n const context = MetricsContext_1.MetricsContext.empty();\n const logger = new __1.MetricsLogger(EnvironmentDetector_1.resolveEnvironment, context);\n return logger;\n};\nexports.createMetricsLogger = createMetricsLogger;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Logger_1 = require(\"../utils/Logger\");\nconst MetricsLoggerFactory_1 = require(\"./MetricsLoggerFactory\");\n/**\n * An asynchronous wrapper that provides a metrics instance.\n */\nconst metricScope = (handler) => {\n const wrappedHandler = (...args) => __awaiter(void 0, void 0, void 0, function* () {\n const metrics = MetricsLoggerFactory_1.createMetricsLogger();\n try {\n return yield handler(metrics)(...args);\n }\n finally {\n try {\n yield metrics.flush();\n }\n catch (e) {\n Logger_1.LOG('Failed to flush metrics', e);\n }\n }\n });\n return wrappedHandler;\n};\nexports.metricScope = metricScope;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Unit;\n(function (Unit) {\n Unit[\"Seconds\"] = \"Seconds\";\n Unit[\"Microseconds\"] = \"Microseconds\";\n Unit[\"Milliseconds\"] = \"Milliseconds\";\n Unit[\"Bytes\"] = \"Bytes\";\n Unit[\"Kilobytes\"] = \"Kilobytes\";\n Unit[\"Megabytes\"] = \"Megabytes\";\n Unit[\"Gigabytes\"] = \"Gigabytes\";\n Unit[\"Terabytes\"] = \"Terabytes\";\n Unit[\"Bits\"] = \"Bits\";\n Unit[\"Kilobits\"] = \"Kilobits\";\n Unit[\"Megabits\"] = \"Megabits\";\n Unit[\"Gigabits\"] = \"Gigabits\";\n Unit[\"Terabits\"] = \"Terabits\";\n Unit[\"Percent\"] = \"Percent\";\n Unit[\"Count\"] = \"Count\";\n Unit[\"BytesPerSecond\"] = \"Bytes/Second\";\n Unit[\"KilobytesPerSecond\"] = \"Kilobytes/Second\";\n Unit[\"MegabytesPerSecond\"] = \"Megabytes/Second\";\n Unit[\"GigabytesPerSecond\"] = \"Gigabytes/Second\";\n Unit[\"TerabytesPerSecond\"] = \"Terabytes/Second\";\n Unit[\"BitsPerSecond\"] = \"Bits/Second\";\n Unit[\"KilobitsPerSecond\"] = \"Kilobits/Second\";\n Unit[\"MegabitsPerSecond\"] = \"Megabits/Second\";\n Unit[\"GigabitsPerSecond\"] = \"Gigabits/Second\";\n Unit[\"TerabitsPerSecond\"] = \"Terabits/Second\";\n Unit[\"CountPerSecond\"] = \"Count/Second\";\n Unit[\"None\"] = \"None\";\n})(Unit = exports.Unit || (exports.Unit = {}));\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar MetricsLogger_1 = require(\"./logger/MetricsLogger\");\nexports.MetricsLogger = MetricsLogger_1.MetricsLogger;\nvar ConsoleSink_1 = require(\"./sinks/ConsoleSink\");\nexports.LocalSink = ConsoleSink_1.ConsoleSink;\nvar AgentSink_1 = require(\"./sinks/AgentSink\");\nexports.AgentSink = AgentSink_1.AgentSink;\nvar MetricScope_1 = require(\"./logger/MetricScope\");\nexports.metricScope = MetricScope_1.metricScope;\nvar MetricsLoggerFactory_1 = require(\"./logger/MetricsLoggerFactory\");\nexports.createMetricsLogger = MetricsLoggerFactory_1.createMetricsLogger;\nvar Unit_1 = require(\"./logger/Unit\");\nexports.Unit = Unit_1.Unit;\nconst Configuration_1 = require(\"./config/Configuration\");\nexports.Configuration = Configuration_1.default;\n", "'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 var data = utils.processTraceData(xAmznTraceId);\n var valid = false;\n if (!data) {\n data = {};\n logger.getLogger().error('_X_AMZN_TRACE_ID is empty or has an invalid format');\n }\n else if (!data.root || !data.parent || !data.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(data.root).toString(); // Will always assign valid trace_id\n segment.id = data.parent || crypto.randomBytes(8).toString('hex');\n if (data.root && segment.trace_id !== data.root) {\n logger.getLogger().error('_X_AMZN_TRACE_ID contains invalid trace ID');\n valid = false;\n }\n if (!parseInt(data.sampled)) {\n segment.notTraced = true;\n }\n else {\n delete segment.notTraced;\n }\n logger.getLogger().debug('Segment started: ' + JSON.stringify(data));\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 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 var key = pair[0].trim().toLowerCase();\n var value = pair[1].trim().toLowerCase();\n var reserved = reservedKeywords.indexOf(key) !== -1;\n if (reserved) {\n amznTraceData[key] = value;\n }\n else if (!reserved && remainingBytes - (key.length + value.length) >= 0) {\n amznTraceData[key] = value;\n remainingBytes -= (key.length + value.length);\n }\n }\n });\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};\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 var subsegment = new Subsegment(name);\n this.addSubsegment(subsegment);\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 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' || (typeof value === 'number' && isFinite(value)))) {\n throw new Error('Failed to add annotation key: ' + key + ' value: ' + value + ' to subsegment ' +\n this.name + '. Value must be of type string, number or boolean.');\n }\n else if (typeof key !== 'string') {\n throw new Error('Failed to add annotation key: ' + key + ' value: ' + value + ' to subsegment ' +\n this.name + '. Key must be of type string.');\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 throw new Error('Failed to add annotation key: ' + key + ' value: ' + value + ' to subsegment ' +\n this.name + '. Key must be of type string.');\n }\n else if (namespace && typeof namespace !== 'string') {\n throw new Error('Failed to add annotation key: ' + key + ' value: ' + value + 'namespace: ' + namespace + ' to subsegment ' +\n this.name + '. Namespace must be of type string.');\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 this.metadata[ns][key] = value;\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 throw new Error('Failed to add error:' + err + ' to subsegment \"' + this.name +\n '\". Not an object or string literal.');\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 };\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 throw new Error('Failed to flush subsegment: ' + this.name + '. Subsegment must be added ' +\n 'to a segment chain to flush.');\n }\n if (this.segment.trace_id) {\n if (this.segment.notTraced !== true) {\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('Add annotation key: ' + key + ' value: ' + value + ' failed.' +\n ' Annotations must be of type string, number or boolean.');\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 throw new Error('Failed to add annotation key: ' + key + ' value: ' + value + ' to subsegment ' +\n this.name + '. Key must be of type string.');\n }\n else if (namespace && typeof namespace !== 'string') {\n throw new Error('Failed to add annotation key: ' + key + ' value: ' + value + 'namespace: ' + namespace + ' to subsegment ' +\n this.name + '. Namespace must be of type string.');\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 this.metadata[ns][key] = value;\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};\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 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 throw new Error('Failed to add error:' + err + ' to subsegment \"' + this.name +\n '\". Not an object or string literal.');\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.RUNTIME_ERROR.contextMissing;\n logger.getLogger().debug('Using default context missing strategy: RUNTIME_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", "\"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'];\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", "\"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", "\"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 this.addData(capturer.capture(serviceName.toLowerCase(), res));\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", "exports = module.exports = SemVer\n\nvar debug\n/* istanbul ignore next */\nif (typeof process === 'object' &&\n process.env &&\n process.env.NODE_DEBUG &&\n /\\bsemver\\b/i.test(process.env.NODE_DEBUG)) {\n debug = function () {\n var args = Array.prototype.slice.call(arguments, 0)\n args.unshift('SEMVER')\n console.log.apply(console, args)\n }\n} else {\n debug = function () {}\n}\n\n// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nexports.SEMVER_SPEC_VERSION = '2.0.0'\n\nvar MAX_LENGTH = 256\nvar MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n /* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nvar MAX_SAFE_COMPONENT_LENGTH = 16\n\n// The actual regexps go on exports.re\nvar re = exports.re = []\nvar src = exports.src = []\nvar R = 0\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\nvar NUMERICIDENTIFIER = R++\nsrc[NUMERICIDENTIFIER] = '0|[1-9]\\\\d*'\nvar NUMERICIDENTIFIERLOOSE = R++\nsrc[NUMERICIDENTIFIERLOOSE] = '[0-9]+'\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\nvar NONNUMERICIDENTIFIER = R++\nsrc[NONNUMERICIDENTIFIER] = '\\\\d*[a-zA-Z-][a-zA-Z0-9-]*'\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\nvar MAINVERSION = R++\nsrc[MAINVERSION] = '(' + src[NUMERICIDENTIFIER] + ')\\\\.' +\n '(' + src[NUMERICIDENTIFIER] + ')\\\\.' +\n '(' + src[NUMERICIDENTIFIER] + ')'\n\nvar MAINVERSIONLOOSE = R++\nsrc[MAINVERSIONLOOSE] = '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\\\.' +\n '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\\\.' +\n '(' + src[NUMERICIDENTIFIERLOOSE] + ')'\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n\nvar PRERELEASEIDENTIFIER = R++\nsrc[PRERELEASEIDENTIFIER] = '(?:' + src[NUMERICIDENTIFIER] +\n '|' + src[NONNUMERICIDENTIFIER] + ')'\n\nvar PRERELEASEIDENTIFIERLOOSE = R++\nsrc[PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[NUMERICIDENTIFIERLOOSE] +\n '|' + src[NONNUMERICIDENTIFIER] + ')'\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\nvar PRERELEASE = R++\nsrc[PRERELEASE] = '(?:-(' + src[PRERELEASEIDENTIFIER] +\n '(?:\\\\.' + src[PRERELEASEIDENTIFIER] + ')*))'\n\nvar PRERELEASELOOSE = R++\nsrc[PRERELEASELOOSE] = '(?:-?(' + src[PRERELEASEIDENTIFIERLOOSE] +\n '(?:\\\\.' + src[PRERELEASEIDENTIFIERLOOSE] + ')*))'\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\nvar BUILDIDENTIFIER = R++\nsrc[BUILDIDENTIFIER] = '[0-9A-Za-z-]+'\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\nvar BUILD = R++\nsrc[BUILD] = '(?:\\\\+(' + src[BUILDIDENTIFIER] +\n '(?:\\\\.' + src[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\nvar FULL = R++\nvar FULLPLAIN = 'v?' + src[MAINVERSION] +\n src[PRERELEASE] + '?' +\n src[BUILD] + '?'\n\nsrc[FULL] = '^' + 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.\nvar LOOSEPLAIN = '[v=\\\\s]*' + src[MAINVERSIONLOOSE] +\n src[PRERELEASELOOSE] + '?' +\n src[BUILD] + '?'\n\nvar LOOSE = R++\nsrc[LOOSE] = '^' + LOOSEPLAIN + '$'\n\nvar GTLT = R++\nsrc[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.\nvar XRANGEIDENTIFIERLOOSE = R++\nsrc[XRANGEIDENTIFIERLOOSE] = src[NUMERICIDENTIFIERLOOSE] + '|x|X|\\\\*'\nvar XRANGEIDENTIFIER = R++\nsrc[XRANGEIDENTIFIER] = src[NUMERICIDENTIFIER] + '|x|X|\\\\*'\n\nvar XRANGEPLAIN = R++\nsrc[XRANGEPLAIN] = '[v=\\\\s]*(' + src[XRANGEIDENTIFIER] + ')' +\n '(?:\\\\.(' + src[XRANGEIDENTIFIER] + ')' +\n '(?:\\\\.(' + src[XRANGEIDENTIFIER] + ')' +\n '(?:' + src[PRERELEASE] + ')?' +\n src[BUILD] + '?' +\n ')?)?'\n\nvar XRANGEPLAINLOOSE = R++\nsrc[XRANGEPLAINLOOSE] = '[v=\\\\s]*(' + src[XRANGEIDENTIFIERLOOSE] + ')' +\n '(?:\\\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +\n '(?:\\\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +\n '(?:' + src[PRERELEASELOOSE] + ')?' +\n src[BUILD] + '?' +\n ')?)?'\n\nvar XRANGE = R++\nsrc[XRANGE] = '^' + src[GTLT] + '\\\\s*' + src[XRANGEPLAIN] + '$'\nvar XRANGELOOSE = R++\nsrc[XRANGELOOSE] = '^' + src[GTLT] + '\\\\s*' + src[XRANGEPLAINLOOSE] + '$'\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\nvar COERCE = R++\nsrc[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])'\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\nvar LONETILDE = R++\nsrc[LONETILDE] = '(?:~>?)'\n\nvar TILDETRIM = R++\nsrc[TILDETRIM] = '(\\\\s*)' + src[LONETILDE] + '\\\\s+'\nre[TILDETRIM] = new RegExp(src[TILDETRIM], 'g')\nvar tildeTrimReplace = '$1~'\n\nvar TILDE = R++\nsrc[TILDE] = '^' + src[LONETILDE] + src[XRANGEPLAIN] + '$'\nvar TILDELOOSE = R++\nsrc[TILDELOOSE] = '^' + src[LONETILDE] + src[XRANGEPLAINLOOSE] + '$'\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\nvar LONECARET = R++\nsrc[LONECARET] = '(?:\\\\^)'\n\nvar CARETTRIM = R++\nsrc[CARETTRIM] = '(\\\\s*)' + src[LONECARET] + '\\\\s+'\nre[CARETTRIM] = new RegExp(src[CARETTRIM], 'g')\nvar caretTrimReplace = '$1^'\n\nvar CARET = R++\nsrc[CARET] = '^' + src[LONECARET] + src[XRANGEPLAIN] + '$'\nvar CARETLOOSE = R++\nsrc[CARETLOOSE] = '^' + src[LONECARET] + src[XRANGEPLAINLOOSE] + '$'\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\nvar COMPARATORLOOSE = R++\nsrc[COMPARATORLOOSE] = '^' + src[GTLT] + '\\\\s*(' + LOOSEPLAIN + ')$|^$'\nvar COMPARATOR = R++\nsrc[COMPARATOR] = '^' + src[GTLT] + '\\\\s*(' + 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`\nvar COMPARATORTRIM = R++\nsrc[COMPARATORTRIM] = '(\\\\s*)' + src[GTLT] +\n '\\\\s*(' + LOOSEPLAIN + '|' + src[XRANGEPLAIN] + ')'\n\n// this one has to use the /g flag\nre[COMPARATORTRIM] = new RegExp(src[COMPARATORTRIM], 'g')\nvar 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.\nvar HYPHENRANGE = R++\nsrc[HYPHENRANGE] = '^\\\\s*(' + src[XRANGEPLAIN] + ')' +\n '\\\\s+-\\\\s+' +\n '(' + src[XRANGEPLAIN] + ')' +\n '\\\\s*$'\n\nvar HYPHENRANGELOOSE = R++\nsrc[HYPHENRANGELOOSE] = '^\\\\s*(' + src[XRANGEPLAINLOOSE] + ')' +\n '\\\\s+-\\\\s+' +\n '(' + src[XRANGEPLAINLOOSE] + ')' +\n '\\\\s*$'\n\n// Star ranges basically just allow anything at all.\nvar STAR = R++\nsrc[STAR] = '(<|>)?=?\\\\s*\\\\*'\n\n// Compile to actual regexp objects.\n// All are flag-free, unless they were created above with a flag.\nfor (var i = 0; i < R; i++) {\n debug(i, src[i])\n if (!re[i]) {\n re[i] = new RegExp(src[i])\n }\n}\n\nexports.parse = parse\nfunction parse (version, options) {\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\n\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n if (version.length > MAX_LENGTH) {\n return null\n }\n\n var r = options.loose ? re[LOOSE] : re[FULL]\n if (!r.test(version)) {\n return null\n }\n\n try {\n return new SemVer(version, options)\n } catch (er) {\n return null\n }\n}\n\nexports.valid = valid\nfunction valid (version, options) {\n var v = parse(version, options)\n return v ? v.version : null\n}\n\nexports.clean = clean\nfunction clean (version, options) {\n var s = parse(version.trim().replace(/^[=v]+/, ''), options)\n return s ? s.version : null\n}\n\nexports.SemVer = SemVer\n\nfunction SemVer (version, options) {\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\n if (version instanceof SemVer) {\n if (version.loose === options.loose) {\n return version\n } else {\n version = version.version\n }\n } else if (typeof version !== 'string') {\n throw new TypeError('Invalid Version: ' + version)\n }\n\n if (version.length > MAX_LENGTH) {\n throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters')\n }\n\n if (!(this instanceof SemVer)) {\n return new SemVer(version, options)\n }\n\n debug('SemVer', version, options)\n this.options = options\n this.loose = !!options.loose\n\n var m = version.trim().match(options.loose ? re[LOOSE] : re[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(function (id) {\n if (/^[0-9]+$/.test(id)) {\n var 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\nSemVer.prototype.format = function () {\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\nSemVer.prototype.toString = function () {\n return this.version\n}\n\nSemVer.prototype.compare = function (other) {\n debug('SemVer.compare', this.version, this.options, other)\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n return this.compareMain(other) || this.comparePre(other)\n}\n\nSemVer.prototype.compareMain = function (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n return compareIdentifiers(this.major, other.major) ||\n compareIdentifiers(this.minor, other.minor) ||\n compareIdentifiers(this.patch, other.patch)\n}\n\nSemVer.prototype.comparePre = function (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 var i = 0\n do {\n var a = this.prerelease[i]\n var 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// 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.\nSemVer.prototype.inc = function (release, identifier) {\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)\n break\n case 'preminor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor++\n this.inc('pre', identifier)\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)\n this.inc('pre', identifier)\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)\n }\n this.inc('pre', identifier)\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 (this.minor !== 0 ||\n this.patch !== 0 ||\n this.prerelease.length === 0) {\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 if (this.prerelease.length === 0) {\n this.prerelease = [0]\n } else {\n var 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 this.prerelease.push(0)\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 if (this.prerelease[0] === identifier) {\n if (isNaN(this.prerelease[1])) {\n this.prerelease = [identifier, 0]\n }\n } else {\n this.prerelease = [identifier, 0]\n }\n }\n break\n\n default:\n throw new Error('invalid increment argument: ' + release)\n }\n this.format()\n this.raw = this.version\n return this\n}\n\nexports.inc = inc\nfunction inc (version, release, loose, identifier) {\n if (typeof (loose) === 'string') {\n identifier = loose\n loose = undefined\n }\n\n try {\n return new SemVer(version, loose).inc(release, identifier).version\n } catch (er) {\n return null\n }\n}\n\nexports.diff = diff\nfunction diff (version1, version2) {\n if (eq(version1, version2)) {\n return null\n } else {\n var v1 = parse(version1)\n var v2 = parse(version2)\n var prefix = ''\n if (v1.prerelease.length || v2.prerelease.length) {\n prefix = 'pre'\n var defaultResult = 'prerelease'\n }\n for (var key in v1) {\n if (key === 'major' || key === 'minor' || key === 'patch') {\n if (v1[key] !== v2[key]) {\n return prefix + key\n }\n }\n }\n return defaultResult // may be undefined\n }\n}\n\nexports.compareIdentifiers = compareIdentifiers\n\nvar numeric = /^[0-9]+$/\nfunction compareIdentifiers (a, b) {\n var anum = numeric.test(a)\n var 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\nexports.rcompareIdentifiers = rcompareIdentifiers\nfunction rcompareIdentifiers (a, b) {\n return compareIdentifiers(b, a)\n}\n\nexports.major = major\nfunction major (a, loose) {\n return new SemVer(a, loose).major\n}\n\nexports.minor = minor\nfunction minor (a, loose) {\n return new SemVer(a, loose).minor\n}\n\nexports.patch = patch\nfunction patch (a, loose) {\n return new SemVer(a, loose).patch\n}\n\nexports.compare = compare\nfunction compare (a, b, loose) {\n return new SemVer(a, loose).compare(new SemVer(b, loose))\n}\n\nexports.compareLoose = compareLoose\nfunction compareLoose (a, b) {\n return compare(a, b, true)\n}\n\nexports.rcompare = rcompare\nfunction rcompare (a, b, loose) {\n return compare(b, a, loose)\n}\n\nexports.sort = sort\nfunction sort (list, loose) {\n return list.sort(function (a, b) {\n return exports.compare(a, b, loose)\n })\n}\n\nexports.rsort = rsort\nfunction rsort (list, loose) {\n return list.sort(function (a, b) {\n return exports.rcompare(a, b, loose)\n })\n}\n\nexports.gt = gt\nfunction gt (a, b, loose) {\n return compare(a, b, loose) > 0\n}\n\nexports.lt = lt\nfunction lt (a, b, loose) {\n return compare(a, b, loose) < 0\n}\n\nexports.eq = eq\nfunction eq (a, b, loose) {\n return compare(a, b, loose) === 0\n}\n\nexports.neq = neq\nfunction neq (a, b, loose) {\n return compare(a, b, loose) !== 0\n}\n\nexports.gte = gte\nfunction gte (a, b, loose) {\n return compare(a, b, loose) >= 0\n}\n\nexports.lte = lte\nfunction lte (a, b, loose) {\n return compare(a, b, loose) <= 0\n}\n\nexports.cmp = cmp\nfunction cmp (a, op, b, loose) {\n switch (op) {\n case '===':\n if (typeof a === 'object')\n a = a.version\n if (typeof b === 'object')\n b = b.version\n return a === b\n\n case '!==':\n if (typeof a === 'object')\n a = a.version\n if (typeof b === 'object')\n b = b.version\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}\n\nexports.Comparator = Comparator\nfunction Comparator (comp, options) {\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\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 if (!(this instanceof Comparator)) {\n return new Comparator(comp, options)\n }\n\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\nvar ANY = {}\nComparator.prototype.parse = function (comp) {\n var r = this.options.loose ? re[COMPARATORLOOSE] : re[COMPARATOR]\n var m = comp.match(r)\n\n if (!m) {\n throw new TypeError('Invalid comparator: ' + comp)\n }\n\n this.operator = 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\nComparator.prototype.toString = function () {\n return this.value\n}\n\nComparator.prototype.test = function (version) {\n debug('Comparator.test', version, this.options.loose)\n\n if (this.semver === ANY) {\n return true\n }\n\n if (typeof version === 'string') {\n version = new SemVer(version, this.options)\n }\n\n return cmp(version, this.operator, this.semver, this.options)\n}\n\nComparator.prototype.intersects = function (comp, options) {\n if (!(comp instanceof Comparator)) {\n throw new TypeError('a Comparator is required')\n }\n\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\n\n var rangeTmp\n\n if (this.operator === '') {\n rangeTmp = new Range(comp.value, options)\n return satisfies(this.value, rangeTmp, options)\n } else if (comp.operator === '') {\n rangeTmp = new Range(this.value, options)\n return satisfies(comp.semver, rangeTmp, options)\n }\n\n var sameDirectionIncreasing =\n (this.operator === '>=' || this.operator === '>') &&\n (comp.operator === '>=' || comp.operator === '>')\n var sameDirectionDecreasing =\n (this.operator === '<=' || this.operator === '<') &&\n (comp.operator === '<=' || comp.operator === '<')\n var sameSemVer = this.semver.version === comp.semver.version\n var differentDirectionsInclusive =\n (this.operator === '>=' || this.operator === '<=') &&\n (comp.operator === '>=' || comp.operator === '<=')\n var oppositeDirectionsLessThan =\n cmp(this.semver, '<', comp.semver, options) &&\n ((this.operator === '>=' || this.operator === '>') &&\n (comp.operator === '<=' || comp.operator === '<'))\n var oppositeDirectionsGreaterThan =\n cmp(this.semver, '>', comp.semver, options) &&\n ((this.operator === '<=' || this.operator === '<') &&\n (comp.operator === '>=' || comp.operator === '>'))\n\n return sameDirectionIncreasing || sameDirectionDecreasing ||\n (sameSemVer && differentDirectionsInclusive) ||\n oppositeDirectionsLessThan || oppositeDirectionsGreaterThan\n}\n\nexports.Range = Range\nfunction Range (range, options) {\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\n\n if (range instanceof Range) {\n if (range.loose === !!options.loose &&\n range.includePrerelease === !!options.includePrerelease) {\n return range\n } else {\n return new Range(range.raw, options)\n }\n }\n\n if (range instanceof Comparator) {\n return new Range(range.value, options)\n }\n\n if (!(this instanceof Range)) {\n return new Range(range, options)\n }\n\n this.options = options\n this.loose = !!options.loose\n this.includePrerelease = !!options.includePrerelease\n\n // First, split based on boolean or ||\n this.raw = range\n this.set = range.split(/\\s*\\|\\|\\s*/).map(function (range) {\n return this.parseRange(range.trim())\n }, this).filter(function (c) {\n // throw out any that are not relevant for whatever reason\n return c.length\n })\n\n if (!this.set.length) {\n throw new TypeError('Invalid SemVer Range: ' + range)\n }\n\n this.format()\n}\n\nRange.prototype.format = function () {\n this.range = this.set.map(function (comps) {\n return comps.join(' ').trim()\n }).join('||').trim()\n return this.range\n}\n\nRange.prototype.toString = function () {\n return this.range\n}\n\nRange.prototype.parseRange = function (range) {\n var loose = this.options.loose\n range = range.trim()\n // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n var hr = loose ? re[HYPHENRANGELOOSE] : re[HYPHENRANGE]\n range = range.replace(hr, hyphenReplace)\n debug('hyphen replace', range)\n // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n range = range.replace(re[COMPARATORTRIM], comparatorTrimReplace)\n debug('comparator trim', range, re[COMPARATORTRIM])\n\n // `~ 1.2.3` => `~1.2.3`\n range = range.replace(re[TILDETRIM], tildeTrimReplace)\n\n // `^ 1.2.3` => `^1.2.3`\n range = range.replace(re[CARETTRIM], caretTrimReplace)\n\n // normalize spaces\n range = range.split(/\\s+/).join(' ')\n\n // At this point, the range is completely trimmed and\n // ready to be split into comparators.\n\n var compRe = loose ? re[COMPARATORLOOSE] : re[COMPARATOR]\n var set = range.split(' ').map(function (comp) {\n return parseComparator(comp, this.options)\n }, this).join(' ').split(/\\s+/)\n if (this.options.loose) {\n // in loose mode, throw out any that are not valid comparators\n set = set.filter(function (comp) {\n return !!comp.match(compRe)\n })\n }\n set = set.map(function (comp) {\n return new Comparator(comp, this.options)\n }, this)\n\n return set\n}\n\nRange.prototype.intersects = function (range, options) {\n if (!(range instanceof Range)) {\n throw new TypeError('a Range is required')\n }\n\n return this.set.some(function (thisComparators) {\n return thisComparators.every(function (thisComparator) {\n return range.set.some(function (rangeComparators) {\n return rangeComparators.every(function (rangeComparator) {\n return thisComparator.intersects(rangeComparator, options)\n })\n })\n })\n })\n}\n\n// Mostly just for testing and legacy API reasons\nexports.toComparators = toComparators\nfunction toComparators (range, options) {\n return new Range(range, options).set.map(function (comp) {\n return comp.map(function (c) {\n return c.value\n }).join(' ').trim().split(' ')\n })\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.\nfunction 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\nfunction isX (id) {\n return !id || id.toLowerCase() === 'x' || id === '*'\n}\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0\nfunction replaceTildes (comp, options) {\n return comp.trim().split(/\\s+/).map(function (comp) {\n return replaceTilde(comp, options)\n }).join(' ')\n}\n\nfunction replaceTilde (comp, options) {\n var r = options.loose ? re[TILDELOOSE] : re[TILDE]\n return comp.replace(r, function (_, M, m, p, pr) {\n debug('tilde', comp, _, M, m, p, pr)\n var ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'\n } else if (isX(p)) {\n // ~1.2 == >=1.2.0 <1.3.0\n ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'\n } else if (pr) {\n debug('replaceTilde pr', pr)\n ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n ' <' + M + '.' + (+m + 1) + '.0'\n } else {\n // ~1.2.3 == >=1.2.3 <1.3.0\n ret = '>=' + M + '.' + m + '.' + p +\n ' <' + M + '.' + (+m + 1) + '.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\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0\n// ^1.2.3 --> >=1.2.3 <2.0.0\n// ^1.2.0 --> >=1.2.0 <2.0.0\nfunction replaceCarets (comp, options) {\n return comp.trim().split(/\\s+/).map(function (comp) {\n return replaceCaret(comp, options)\n }).join(' ')\n}\n\nfunction replaceCaret (comp, options) {\n debug('caret', comp, options)\n var r = options.loose ? re[CARETLOOSE] : re[CARET]\n return comp.replace(r, function (_, M, m, p, pr) {\n debug('caret', comp, _, M, m, p, pr)\n var ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'\n } else if (isX(p)) {\n if (M === '0') {\n ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'\n } else {\n ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.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)\n } else {\n ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n ' <' + M + '.' + (+m + 1) + '.0'\n }\n } else {\n ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n ' <' + (+M + 1) + '.0.0'\n }\n } else {\n debug('no pr')\n if (M === '0') {\n if (m === '0') {\n ret = '>=' + M + '.' + m + '.' + p +\n ' <' + M + '.' + m + '.' + (+p + 1)\n } else {\n ret = '>=' + M + '.' + m + '.' + p +\n ' <' + M + '.' + (+m + 1) + '.0'\n }\n } else {\n ret = '>=' + M + '.' + m + '.' + p +\n ' <' + (+M + 1) + '.0.0'\n }\n }\n\n debug('caret return', ret)\n return ret\n })\n}\n\nfunction replaceXRanges (comp, options) {\n debug('replaceXRanges', comp, options)\n return comp.split(/\\s+/).map(function (comp) {\n return replaceXRange(comp, options)\n }).join(' ')\n}\n\nfunction replaceXRange (comp, options) {\n comp = comp.trim()\n var r = options.loose ? re[XRANGELOOSE] : re[XRANGE]\n return comp.replace(r, function (ret, gtlt, M, m, p, pr) {\n debug('xRange', comp, ret, gtlt, M, m, p, pr)\n var xM = isX(M)\n var xm = xM || isX(m)\n var xp = xm || isX(p)\n var anyX = xp\n\n if (gtlt === '=' && anyX) {\n gtlt = ''\n }\n\n if (xM) {\n if (gtlt === '>' || gtlt === '<') {\n // nothing is allowed\n ret = '<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 // >1.2.3 => >= 1.2.4\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 ret = gtlt + M + '.' + m + '.' + p\n } else if (xm) {\n ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'\n } else if (xp) {\n ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.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.\nfunction replaceStars (comp, options) {\n debug('replaceStars', comp, options)\n // Looseness is ignored here. star is always as loose as it gets!\n return comp.trim().replace(re[STAR], '')\n}\n\n// This function is passed to string.replace(re[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 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0\nfunction hyphenReplace ($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'\n } else if (isX(fp)) {\n from = '>=' + fM + '.' + fm + '.0'\n } else {\n from = '>=' + from\n }\n\n if (isX(tM)) {\n to = ''\n } else if (isX(tm)) {\n to = '<' + (+tM + 1) + '.0.0'\n } else if (isX(tp)) {\n to = '<' + tM + '.' + (+tm + 1) + '.0'\n } else if (tpr) {\n to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr\n } else {\n to = '<=' + to\n }\n\n return (from + ' ' + to).trim()\n}\n\n// if ANY of the sets match ALL of its comparators, then pass\nRange.prototype.test = function (version) {\n if (!version) {\n return false\n }\n\n if (typeof version === 'string') {\n version = new SemVer(version, this.options)\n }\n\n for (var 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\nfunction testSet (set, version, options) {\n for (var 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 (i = 0; i < set.length; i++) {\n debug(set[i].semver)\n if (set[i].semver === ANY) {\n continue\n }\n\n if (set[i].semver.prerelease.length > 0) {\n var 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\nexports.satisfies = satisfies\nfunction 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}\n\nexports.maxSatisfying = maxSatisfying\nfunction maxSatisfying (versions, range, options) {\n var max = null\n var maxSV = null\n try {\n var rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach(function (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}\n\nexports.minSatisfying = minSatisfying\nfunction minSatisfying (versions, range, options) {\n var min = null\n var minSV = null\n try {\n var rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach(function (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}\n\nexports.minVersion = minVersion\nfunction minVersion (range, loose) {\n range = new Range(range, loose)\n\n var 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 (var i = 0; i < range.set.length; ++i) {\n var comparators = range.set[i]\n\n comparators.forEach(function (comparator) {\n // Clone to avoid manipulating the comparator's semver object.\n var 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 (!minver || gt(minver, compver)) {\n minver = 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 }\n\n if (minver && range.test(minver)) {\n return minver\n }\n\n return null\n}\n\nexports.validRange = validRange\nfunction 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}\n\n// Determine if version is less than all the versions possible in the range\nexports.ltr = ltr\nfunction ltr (version, range, options) {\n return outside(version, range, '<', options)\n}\n\n// Determine if version is greater than all the versions possible in the range.\nexports.gtr = gtr\nfunction gtr (version, range, options) {\n return outside(version, range, '>', options)\n}\n\nexports.outside = outside\nfunction outside (version, range, hilo, options) {\n version = new SemVer(version, options)\n range = new Range(range, options)\n\n var 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 satisifes 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 (var i = 0; i < range.set.length; ++i) {\n var comparators = range.set[i]\n\n var high = null\n var low = null\n\n comparators.forEach(function (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\nexports.prerelease = prerelease\nfunction prerelease (version, options) {\n var parsed = parse(version, options)\n return (parsed && parsed.prerelease.length) ? parsed.prerelease : null\n}\n\nexports.intersects = intersects\nfunction intersects (r1, r2, options) {\n r1 = new Range(r1, options)\n r2 = new Range(r2, options)\n return r1.intersects(r2)\n}\n\nexports.coerce = coerce\nfunction coerce (version) {\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n var match = version.match(re[COERCE])\n\n if (match == null) {\n return null\n }\n\n return parse(match[1] +\n '.' + (match[2] || '0') +\n '.' + (match[3] || '0'))\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 var subsegment = parent.addNewSubsegment(this.serviceIdentifier);\n var traceId = parent.segment ? parent.segment.trace_id : parent.trace_id;\n var buildListener = function (req) {\n req.httpRequest.headers['X-Amzn-Trace-Id'] = 'Root=' + traceId + ';Parent=' + subsegment.id +\n ';Sampled=' + (subsegment.segment.notTraced ? '0' : '1');\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.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 = [\"AbortError\", \"TimeoutError\", \"RequestTimeout\", \"RequestTimeoutException\"];\nexports.TRANSIENT_ERROR_STATUS_CODES = [500, 502, 503, 504];\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.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.TRANSIENT_ERROR_STATUS_CODES.includes(((_a = error.$metadata) === null || _a === void 0 ? void 0 : _a.httpStatusCode) || 0);\n};\nexports.isTransientError = isTransientError;\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 const subsegment = segment.addNewSubsegment(service);\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: parent.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 const subsegment = parent.addNewSubsegment(hostname);\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=' + (!root.notTraced ? '1' : '0');\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 // Only need to remove our listener & re-emit if we're not listening using the errorMonitor,\n // e.g. the app is running on Node 10. Otherwise the errorMonitor will re-emit automatically.\n // See: https://github.com/aws/aws-xray-sdk-node/issues/318\n // TODO: Remove this logic once node 12 support is deprecated\n if (!events.errorMonitor && this.listenerCount('error') <= 1) {\n this.removeListener('error', errorCapturer);\n this.emit('error', 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", "module.exports = require('stream');\n", "'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar _require = require('buffer'),\n Buffer = _require.Buffer;\n\nvar _require2 = require('util'),\n inspect = _require2.inspect;\n\nvar custom = inspect && inspect.custom || 'inspect';\n\nfunction copyBuffer(src, target, offset) {\n Buffer.prototype.copy.call(src, target, offset);\n}\n\nmodule.exports =\n/*#__PURE__*/\nfunction () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n\n _createClass(BufferList, [{\n key: \"push\",\n value: function push(v) {\n var entry = {\n data: v,\n next: null\n };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n }\n }, {\n key: \"unshift\",\n value: function unshift(v) {\n var entry = {\n data: v,\n next: this.head\n };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n }\n }, {\n key: \"shift\",\n value: function shift() {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n }\n }, {\n key: \"clear\",\n value: function clear() {\n this.head = this.tail = null;\n this.length = 0;\n }\n }, {\n key: \"join\",\n value: function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n\n while (p = p.next) {\n ret += s + p.data;\n }\n\n return ret;\n }\n }, {\n key: \"concat\",\n value: function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n\n return ret;\n } // Consumes a specified amount of bytes or characters from the buffered data.\n\n }, {\n key: \"consume\",\n value: function consume(n, hasStrings) {\n var ret;\n\n if (n < this.head.data.length) {\n // `slice` is the same for buffers and strings.\n ret = this.head.data.slice(0, n);\n this.head.data = this.head.data.slice(n);\n } else if (n === this.head.data.length) {\n // First chunk is a perfect match.\n ret = this.shift();\n } else {\n // Result spans more than one buffer.\n ret = hasStrings ? this._getString(n) : this._getBuffer(n);\n }\n\n return ret;\n }\n }, {\n key: \"first\",\n value: function first() {\n return this.head.data;\n } // Consumes a specified amount of characters from the buffered data.\n\n }, {\n key: \"_getString\",\n value: function _getString(n) {\n var p = this.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = str.slice(nb);\n }\n\n break;\n }\n\n ++c;\n }\n\n this.length -= c;\n return ret;\n } // Consumes a specified amount of bytes from the buffered data.\n\n }, {\n key: \"_getBuffer\",\n value: function _getBuffer(n) {\n var ret = Buffer.allocUnsafe(n);\n var p = this.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = buf.slice(nb);\n }\n\n break;\n }\n\n ++c;\n }\n\n this.length -= c;\n return ret;\n } // Make sure the linked list only shows the minimal necessary information.\n\n }, {\n key: custom,\n value: function value(_, options) {\n return inspect(this, _objectSpread({}, options, {\n // Only inspect one level.\n depth: 0,\n // It should not recurse.\n customInspect: false\n }));\n }\n }]);\n\n return BufferList;\n}();", "'use strict'; // undocumented cb() API, needed for core, not for public API\n\nfunction destroy(err, cb) {\n var _this = this;\n\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err) {\n if (!this._writableState) {\n process.nextTick(emitErrorNT, this, err);\n } else if (!this._writableState.errorEmitted) {\n this._writableState.errorEmitted = true;\n process.nextTick(emitErrorNT, this, err);\n }\n }\n\n return this;\n } // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n } // if this is a duplex stream mark the writable part as destroyed as well\n\n\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n if (!_this._writableState) {\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else if (!_this._writableState.errorEmitted) {\n _this._writableState.errorEmitted = true;\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n } else if (cb) {\n process.nextTick(emitCloseNT, _this);\n cb(err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n });\n\n return this;\n}\n\nfunction emitErrorAndCloseNT(self, err) {\n emitErrorNT(self, err);\n emitCloseNT(self);\n}\n\nfunction emitCloseNT(self) {\n if (self._writableState && !self._writableState.emitClose) return;\n if (self._readableState && !self._readableState.emitClose) return;\n self.emit('close');\n}\n\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finalCalled = false;\n this._writableState.prefinished = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\n\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\n\nfunction errorOrDestroy(stream, err) {\n // We have tests that rely on errors being emitted\n // in the same tick, so changing this is semver major.\n // For now when you opt-in to autoDestroy we allow\n // the error to be emitted nextTick. In a future\n // semver major update we should change the default to this.\n var rState = stream._readableState;\n var wState = stream._writableState;\n if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\n\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy,\n errorOrDestroy: errorOrDestroy\n};", "'use strict';\n\nconst codes = {};\n\nfunction createErrorType(code, message, Base) {\n if (!Base) {\n Base = Error\n }\n\n function getMessage (arg1, arg2, arg3) {\n if (typeof message === 'string') {\n return message\n } else {\n return message(arg1, arg2, arg3)\n }\n }\n\n class NodeError extends Base {\n constructor (arg1, arg2, arg3) {\n super(getMessage(arg1, arg2, arg3));\n }\n }\n\n NodeError.prototype.name = Base.name;\n NodeError.prototype.code = code;\n\n codes[code] = NodeError;\n}\n\n// https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\nfunction oneOf(expected, thing) {\n if (Array.isArray(expected)) {\n const len = expected.length;\n expected = expected.map((i) => String(i));\n if (len > 2) {\n return `one of ${thing} ${expected.slice(0, len - 1).join(', ')}, or ` +\n expected[len - 1];\n } else if (len === 2) {\n return `one of ${thing} ${expected[0]} or ${expected[1]}`;\n } else {\n return `of ${thing} ${expected[0]}`;\n }\n } else {\n return `of ${thing} ${String(expected)}`;\n }\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\nfunction startsWith(str, search, pos) {\n\treturn str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\nfunction endsWith(str, search, this_len) {\n\tif (this_len === undefined || this_len > str.length) {\n\t\tthis_len = str.length;\n\t}\n\treturn str.substring(this_len - search.length, this_len) === search;\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\nfunction includes(str, search, start) {\n if (typeof start !== 'number') {\n start = 0;\n }\n\n if (start + search.length > str.length) {\n return false;\n } else {\n return str.indexOf(search, start) !== -1;\n }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n return 'The value \"' + value + '\" is invalid for option \"' + name + '\"'\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n // determiner: 'must be' or 'must not be'\n let determiner;\n if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n determiner = 'must not be';\n expected = expected.replace(/^not /, '');\n } else {\n determiner = 'must be';\n }\n\n let msg;\n if (endsWith(name, ' argument')) {\n // For cases like 'first argument'\n msg = `The ${name} ${determiner} ${oneOf(expected, 'type')}`;\n } else {\n const type = includes(name, '.') ? 'property' : 'argument';\n msg = `The \"${name}\" ${type} ${determiner} ${oneOf(expected, 'type')}`;\n }\n\n msg += `. Received type ${typeof actual}`;\n return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n return 'The ' + name + ' method is not implemented'\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n return 'Unknown encoding: ' + arg\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\n\nmodule.exports.codes = codes;\n", "'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\n\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\n\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n\n if (hwm != null) {\n if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n var name = isDuplex ? duplexKey : 'highWaterMark';\n throw new ERR_INVALID_OPT_VALUE(name, hwm);\n }\n\n return Math.floor(hwm);\n } // Default value\n\n\n return state.objectMode ? 16 : 16 * 1024;\n}\n\nmodule.exports = {\n getHighWaterMark: getHighWaterMark\n};", "if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n", "try {\n var util = require('util');\n /* istanbul ignore next */\n if (typeof util.inherits !== 'function') throw '';\n module.exports = util.inherits;\n} catch (e) {\n /* istanbul ignore next */\n module.exports = require('./inherits_browser.js');\n}\n", "\n/**\n * For Node.js, simply re-export the core `util.deprecate` function.\n */\n\nmodule.exports = require('util').deprecate;\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n'use strict';\n\nmodule.exports = Writable;\n/* <replacement> */\n\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n} // It seems a linked list but it is not\n// there will be only 2 of these for each stream\n\n\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* </replacement> */\n\n/*<replacement>*/\n\n\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n/*<replacement>*/\n\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\n\nrequire('inherits')(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream,\n // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n\n this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex); // if _final has been called\n\n this.finalCalled = false; // drain event flag.\n\n this.needDrain = false; // at the start of calling end()\n\n this.ending = false; // when end() has been called, and returned\n\n this.ended = false; // when 'finish' is emitted\n\n this.finished = false; // has it been destroyed\n\n this.destroyed = false; // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode; // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n\n this.length = 0; // a flag to see when we're in the middle of a write.\n\n this.writing = false; // when true all writes will be buffered until .uncork() call\n\n this.corked = 0; // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n\n this.sync = true; // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n\n this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb)\n\n this.onwrite = function (er) {\n onwrite(stream, er);\n }; // the callback that the user supplies to write(chunk,encoding,cb)\n\n\n this.writecb = null; // the amount that is being written when _write is called.\n\n this.writelen = 0;\n this.bufferedRequest = null;\n this.lastBufferedRequest = null; // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n\n this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n\n this.prefinished = false; // True if the error was already emitted and should not be thrown again\n\n this.errorEmitted = false; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'finish' (and potentially 'end')\n\n this.autoDestroy = !!options.autoDestroy; // count buffered requests\n\n this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n\n while (current) {\n out.push(current);\n current = current.next;\n }\n\n return out;\n};\n\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function writableStateBufferGetter() {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})(); // Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\n\n\nvar realHasInstance;\n\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function value(object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function realHasInstance(object) {\n return object instanceof this;\n };\n}\n\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex'); // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the WritableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n this._writableState = new WritableState(options, this, isDuplex); // legacy.\n\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n if (typeof options.writev === 'function') this._writev = options.writev;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n if (typeof options.final === 'function') this._final = options.final;\n }\n\n Stream.call(this);\n} // Otherwise people can pipe Writable streams, which is just wrong.\n\n\nWritable.prototype.pipe = function () {\n errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new ERR_STREAM_WRITE_AFTER_END(); // TODO: defer error events consistently everywhere, not just the cb\n\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n} // Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\n\n\nfunction validChunk(stream, state, chunk, cb) {\n var er;\n\n if (chunk === null) {\n er = new ERR_STREAM_NULL_VALUES();\n } else if (typeof chunk !== 'string' && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n }\n\n if (er) {\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n return false;\n }\n\n return true;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n if (typeof cb !== 'function') cb = nop;\n if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n return ret;\n};\n\nWritable.prototype.cork = function () {\n this._writableState.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n\n return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n}); // if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\n\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n\n var len = state.objectMode ? 1 : chunk.length;\n state.length += len;\n var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false.\n\n if (!ret) state.needDrain = true;\n\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n process.nextTick(cb, er); // this can emit finish, and it will always happen\n // after error\n\n process.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er); // this can emit finish, but finish must\n // always follow error\n\n finishMaybe(stream, state);\n }\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n onwriteStateUpdate(state);\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state) || stream.destroyed;\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n process.nextTick(afterWrite, stream, state, finished, cb);\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n} // Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\n\n\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n} // if there's something in the buffer waiting, then process it\n\n\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n var count = 0;\n var allBuffers = true;\n\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n\n buffer.allBuffers = allBuffers;\n doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n\n state.pendingcb++;\n state.lastBufferedRequest = null;\n\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--; // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); // .end() fully uncorks\n\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n } // ignore unnecessary end() calls.\n\n\n if (!state.ending) endWritable(this, state, cb);\n return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n});\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\n\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n\n if (err) {\n errorOrDestroy(stream, err);\n }\n\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\n\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function' && !state.destroyed) {\n state.pendingcb++;\n state.finalCalled = true;\n process.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n\n if (need) {\n prefinish(stream, state);\n\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the readable side is ready for autoDestroy as well\n var rState = stream._readableState;\n\n if (!rState || rState.autoDestroy && rState.endEmitted) {\n stream.destroy();\n }\n }\n }\n }\n\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n\n if (cb) {\n if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n }\n\n state.ended = true;\n stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n } // reuse the free corkReq.\n\n\n state.corkedRequestsFree.next = corkReq;\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._writableState === undefined) {\n return false;\n }\n\n return this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._writableState.destroyed = value;\n }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\n\nWritable.prototype._destroy = function (err, cb) {\n cb(err);\n};", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n'use strict';\n/*<replacement>*/\n\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n\n for (var key in obj) {\n keys.push(key);\n }\n\n return keys;\n};\n/*</replacement>*/\n\n\nmodule.exports = Duplex;\n\nvar Readable = require('./_stream_readable');\n\nvar Writable = require('./_stream_writable');\n\nrequire('inherits')(Duplex, Readable);\n\n{\n // Allow the keys array to be GC'ed.\n var keys = objectKeys(Writable.prototype);\n\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\n\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n Readable.call(this, options);\n Writable.call(this, options);\n this.allowHalfOpen = true;\n\n if (options) {\n if (options.readable === false) this.readable = false;\n if (options.writable === false) this.writable = false;\n\n if (options.allowHalfOpen === false) {\n this.allowHalfOpen = false;\n this.once('end', onend);\n }\n }\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n}); // the no-half-open enforcer\n\nfunction onend() {\n // If the writable side ended, then we're ok.\n if (this._writableState.ended) return; // no more data can be written.\n // But allow more writes to happen in this tick.\n\n process.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});", "/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\n/*</replacement>*/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\n}", "// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\n\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n callback.apply(this, args);\n };\n}\n\nfunction noop() {}\n\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\n\nfunction eos(stream, opts, callback) {\n if (typeof opts === 'function') return eos(stream, null, opts);\n if (!opts) opts = {};\n callback = once(callback || noop);\n var readable = opts.readable || opts.readable !== false && stream.readable;\n var writable = opts.writable || opts.writable !== false && stream.writable;\n\n var onlegacyfinish = function onlegacyfinish() {\n if (!stream.writable) onfinish();\n };\n\n var writableEnded = stream._writableState && stream._writableState.finished;\n\n var onfinish = function onfinish() {\n writable = false;\n writableEnded = true;\n if (!readable) callback.call(stream);\n };\n\n var readableEnded = stream._readableState && stream._readableState.endEmitted;\n\n var onend = function onend() {\n readable = false;\n readableEnded = true;\n if (!writable) callback.call(stream);\n };\n\n var onerror = function onerror(err) {\n callback.call(stream, err);\n };\n\n var onclose = function onclose() {\n var err;\n\n if (readable && !readableEnded) {\n if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n\n if (writable && !writableEnded) {\n if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n };\n\n var onrequest = function onrequest() {\n stream.req.on('finish', onfinish);\n };\n\n if (isRequest(stream)) {\n stream.on('complete', onfinish);\n stream.on('abort', onclose);\n if (stream.req) onrequest();else stream.on('request', onrequest);\n } else if (writable && !stream._writableState) {\n // legacy streams\n stream.on('end', onlegacyfinish);\n stream.on('close', onlegacyfinish);\n }\n\n stream.on('end', onend);\n stream.on('finish', onfinish);\n if (opts.error !== false) stream.on('error', onerror);\n stream.on('close', onclose);\n return function () {\n stream.removeListener('complete', onfinish);\n stream.removeListener('abort', onclose);\n stream.removeListener('request', onrequest);\n if (stream.req) stream.req.removeListener('finish', onfinish);\n stream.removeListener('end', onlegacyfinish);\n stream.removeListener('close', onlegacyfinish);\n stream.removeListener('finish', onfinish);\n stream.removeListener('end', onend);\n stream.removeListener('error', onerror);\n stream.removeListener('close', onclose);\n };\n}\n\nmodule.exports = eos;", "'use strict';\n\nvar _Object$setPrototypeO;\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar finished = require('./end-of-stream');\n\nvar kLastResolve = Symbol('lastResolve');\nvar kLastReject = Symbol('lastReject');\nvar kError = Symbol('error');\nvar kEnded = Symbol('ended');\nvar kLastPromise = Symbol('lastPromise');\nvar kHandlePromise = Symbol('handlePromise');\nvar kStream = Symbol('stream');\n\nfunction createIterResult(value, done) {\n return {\n value: value,\n done: done\n };\n}\n\nfunction readAndResolve(iter) {\n var resolve = iter[kLastResolve];\n\n if (resolve !== null) {\n var data = iter[kStream].read(); // we defer if data is null\n // we can be expecting either 'end' or\n // 'error'\n\n if (data !== null) {\n iter[kLastPromise] = null;\n iter[kLastResolve] = null;\n iter[kLastReject] = null;\n resolve(createIterResult(data, false));\n }\n }\n}\n\nfunction onReadable(iter) {\n // we wait for the next tick, because it might\n // emit an error with process.nextTick\n process.nextTick(readAndResolve, iter);\n}\n\nfunction wrapForNext(lastPromise, iter) {\n return function (resolve, reject) {\n lastPromise.then(function () {\n if (iter[kEnded]) {\n resolve(createIterResult(undefined, true));\n return;\n }\n\n iter[kHandlePromise](resolve, reject);\n }, reject);\n };\n}\n\nvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\nvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n get stream() {\n return this[kStream];\n },\n\n next: function next() {\n var _this = this;\n\n // if we have detected an error in the meanwhile\n // reject straight away\n var error = this[kError];\n\n if (error !== null) {\n return Promise.reject(error);\n }\n\n if (this[kEnded]) {\n return Promise.resolve(createIterResult(undefined, true));\n }\n\n if (this[kStream].destroyed) {\n // We need to defer via nextTick because if .destroy(err) is\n // called, the error will be emitted via nextTick, and\n // we cannot guarantee that there is no error lingering around\n // waiting to be emitted.\n return new Promise(function (resolve, reject) {\n process.nextTick(function () {\n if (_this[kError]) {\n reject(_this[kError]);\n } else {\n resolve(createIterResult(undefined, true));\n }\n });\n });\n } // if we have multiple next() calls\n // we will wait for the previous Promise to finish\n // this logic is optimized to support for await loops,\n // where next() is only called once at a time\n\n\n var lastPromise = this[kLastPromise];\n var promise;\n\n if (lastPromise) {\n promise = new Promise(wrapForNext(lastPromise, this));\n } else {\n // fast path needed to support multiple this.push()\n // without triggering the next() queue\n var data = this[kStream].read();\n\n if (data !== null) {\n return Promise.resolve(createIterResult(data, false));\n }\n\n promise = new Promise(this[kHandlePromise]);\n }\n\n this[kLastPromise] = promise;\n return promise;\n }\n}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {\n return this;\n}), _defineProperty(_Object$setPrototypeO, \"return\", function _return() {\n var _this2 = this;\n\n // destroy(err, cb) is a private API\n // we can guarantee we have that here, because we control the\n // Readable class this is attached to\n return new Promise(function (resolve, reject) {\n _this2[kStream].destroy(null, function (err) {\n if (err) {\n reject(err);\n return;\n }\n\n resolve(createIterResult(undefined, true));\n });\n });\n}), _Object$setPrototypeO), AsyncIteratorPrototype);\n\nvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n var _Object$create;\n\n var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {\n value: stream,\n writable: true\n }), _defineProperty(_Object$create, kLastResolve, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kLastReject, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kError, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kEnded, {\n value: stream._readableState.endEmitted,\n writable: true\n }), _defineProperty(_Object$create, kHandlePromise, {\n value: function value(resolve, reject) {\n var data = iterator[kStream].read();\n\n if (data) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(data, false));\n } else {\n iterator[kLastResolve] = resolve;\n iterator[kLastReject] = reject;\n }\n },\n writable: true\n }), _Object$create));\n iterator[kLastPromise] = null;\n finished(stream, function (err) {\n if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n var reject = iterator[kLastReject]; // reject if we are waiting for data in the Promise\n // returned by next() and store the error\n\n if (reject !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n reject(err);\n }\n\n iterator[kError] = err;\n return;\n }\n\n var resolve = iterator[kLastResolve];\n\n if (resolve !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(undefined, true));\n }\n\n iterator[kEnded] = true;\n });\n stream.on('readable', onReadable.bind(null, iterator));\n return iterator;\n};\n\nmodule.exports = createReadableStreamAsyncIterator;", "'use strict';\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar ERR_INVALID_ARG_TYPE = require('../../../errors').codes.ERR_INVALID_ARG_TYPE;\n\nfunction from(Readable, iterable, opts) {\n var iterator;\n\n if (iterable && typeof iterable.next === 'function') {\n iterator = iterable;\n } else if (iterable && iterable[Symbol.asyncIterator]) iterator = iterable[Symbol.asyncIterator]();else if (iterable && iterable[Symbol.iterator]) iterator = iterable[Symbol.iterator]();else throw new ERR_INVALID_ARG_TYPE('iterable', ['Iterable'], iterable);\n\n var readable = new Readable(_objectSpread({\n objectMode: true\n }, opts)); // Reading boolean to protect against _read\n // being called before last iteration completion.\n\n var reading = false;\n\n readable._read = function () {\n if (!reading) {\n reading = true;\n next();\n }\n };\n\n function next() {\n return _next2.apply(this, arguments);\n }\n\n function _next2() {\n _next2 = _asyncToGenerator(function* () {\n try {\n var _ref = yield iterator.next(),\n value = _ref.value,\n done = _ref.done;\n\n if (done) {\n readable.push(null);\n } else if (readable.push((yield value))) {\n next();\n } else {\n reading = false;\n }\n } catch (err) {\n readable.destroy(err);\n }\n });\n return _next2.apply(this, arguments);\n }\n\n return readable;\n}\n\nmodule.exports = from;", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n'use strict';\n\nmodule.exports = Readable;\n/*<replacement>*/\n\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n/*<replacement>*/\n\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\n\n\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n/*<replacement>*/\n\n\nvar debugUtil = require('util');\n\nvar debug;\n\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function debug() {};\n}\n/*</replacement>*/\n\n\nvar BufferList = require('./internal/streams/buffer_list');\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT; // Lazy loaded to improve the startup performance.\n\n\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\n\nrequire('inherits')(Readable, Stream);\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n\n this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex); // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false; // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n\n this.sync = true; // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n this.paused = true; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'end' (and potentially 'finish')\n\n this.autoDestroy = !!options.autoDestroy; // has it been destroyed\n\n this.destroyed = false; // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s\n\n this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled\n\n this.readingMore = false;\n this.decoder = null;\n this.encoding = null;\n\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\n\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n if (!(this instanceof Readable)) return new Readable(options); // Checking for a Stream.Duplex instance is faster here instead of inside\n // the ReadableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n this._readableState = new ReadableState(options, this, isDuplex); // legacy\n\n this.readable = true;\n\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n\n Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\n\nReadable.prototype._destroy = function (err, cb) {\n cb(err);\n}; // Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\n\n\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n}; // Unshift should *always* be something directly out of read()\n\n\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n debug('readableAddChunk', chunk);\n var state = stream._readableState;\n\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n\n if (er) {\n errorOrDestroy(stream, er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (addToFront) {\n if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());\n } else if (state.destroyed) {\n return false;\n } else {\n state.reading = false;\n\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n maybeReadMore(stream, state);\n }\n } // We can push more data if we are below the highWaterMark.\n // Also, if we have no data yet, we can stand some more bytes.\n // This is to work around cases where hwm=0, such as the repl.\n\n\n return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n state.awaitDrain = 0;\n stream.emit('data', chunk);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n if (state.needReadable) emitReadable(stream);\n }\n\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n }\n\n return er;\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n}; // backwards compatibility.\n\n\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n var decoder = new StringDecoder(enc);\n this._readableState.decoder = decoder; // If setEncoding(null), decoder.encoding equals utf8\n\n this._readableState.encoding = this._readableState.decoder.encoding; // Iterate over current buffer to convert already stored Buffers:\n\n var p = this._readableState.buffer.head;\n var content = '';\n\n while (p !== null) {\n content += decoder.write(p.data);\n p = p.next;\n }\n\n this._readableState.buffer.clear();\n\n if (content !== '') this._readableState.buffer.push(content);\n this._readableState.length = content.length;\n return this;\n}; // Don't raise the hwm > 1GB\n\n\nvar MAX_HWM = 0x40000000;\n\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n\n return n;\n} // This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\n\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n } // If we're asking for more than the current hwm, then raise the hwm.\n\n\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n; // Don't have enough\n\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n\n return state.length;\n} // you can override either this method, or the async _read(n) below.\n\n\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n if (n !== 0) state.emittedReadable = false; // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n\n if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state); // if we've ended, and we're now clear, then finish it up.\n\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n } // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n // if we need a readable event, then we need to do some reading.\n\n\n var doRead = state.needReadable;\n debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some\n\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n } // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n\n\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true; // if the length is currently zero, then we *need* a readable event.\n\n if (state.length === 0) state.needReadable = true; // call internal read method\n\n this._read(state.highWaterMark);\n\n state.sync = false; // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\n if (ret === null) {\n state.needReadable = state.length <= state.highWaterMark;\n n = 0;\n } else {\n state.length -= n;\n state.awaitDrain = 0;\n }\n\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true; // If we tried to read() past the EOF, then emit end on the next tick.\n\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n debug('onEofChunk');\n if (state.ended) return;\n\n if (state.decoder) {\n var chunk = state.decoder.end();\n\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n\n state.ended = true;\n\n if (state.sync) {\n // if we are sync, wait until next tick to emit the data.\n // Otherwise we risk emitting data in the flow()\n // the readable code triggers during a read() call\n emitReadable(stream);\n } else {\n // emit 'readable' now to make sure it gets picked up.\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n state.emittedReadable = true;\n emitReadable_(stream);\n }\n }\n} // Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\n\n\nfunction emitReadable(stream) {\n var state = stream._readableState;\n debug('emitReadable', state.needReadable, state.emittedReadable);\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n process.nextTick(emitReadable_, stream);\n }\n}\n\nfunction emitReadable_(stream) {\n var state = stream._readableState;\n debug('emitReadable_', state.destroyed, state.length, state.ended);\n\n if (!state.destroyed && (state.length || state.ended)) {\n stream.emit('readable');\n state.emittedReadable = false;\n } // The stream needs another readable event if\n // 1. It is not flowing, as the flow mechanism will take\n // care of it.\n // 2. It is not ended.\n // 3. It is below the highWaterMark, so we can schedule\n // another readable later.\n\n\n state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n flow(stream);\n} // at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\n\n\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n process.nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n // Attempt to read more data if we should.\n //\n // The conditions for reading more data are (one of):\n // - Not enough data buffered (state.length < state.highWaterMark). The loop\n // is responsible for filling the buffer with enough data if such data\n // is available. If highWaterMark is 0 and we are not in the flowing mode\n // we should _not_ attempt to buffer any extra data. We'll get more data\n // when the stream consumer calls read() instead.\n // - No data in the buffer, and the stream is in flowing mode. In this mode\n // the loop below is responsible for ensuring read() is called. Failing to\n // call read here would abort the flow and there's no other mechanism for\n // continuing the flow if the stream consumer has just subscribed to the\n // 'data' event.\n //\n // In addition to the above conditions to keep reading data, the following\n // conditions prevent the data from being read:\n // - The stream has ended (state.ended).\n // - There is already a pending 'read' operation (state.reading). This is a\n // case where the the stream has called the implementation defined _read()\n // method, but they are processing the call asynchronously and have _not_\n // called push() with new data. In this case we skip performing more\n // read()s. The execution ends in this method again after the _read() ends\n // up calling push() with more data.\n while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n var len = state.length;\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length) // didn't get any data, stop spinning.\n break;\n }\n\n state.readingMore = false;\n} // abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\n\n\nReadable.prototype._read = function (n) {\n errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n\n default:\n state.pipes.push(dest);\n break;\n }\n\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);\n dest.on('unpipe', onunpipe);\n\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n } // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n\n\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n var cleanedUp = false;\n\n function cleanup() {\n debug('cleanup'); // cleanup event handlers once the pipe is broken\n\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n cleanedUp = true; // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n src.on('data', ondata);\n\n function ondata(chunk) {\n debug('ondata');\n var ret = dest.write(chunk);\n debug('dest.write', ret);\n\n if (ret === false) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', state.awaitDrain);\n state.awaitDrain++;\n }\n\n src.pause();\n }\n } // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n\n\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\n } // Make sure our error handler is attached before userland ones.\n\n\n prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once.\n\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n\n dest.once('close', onclose);\n\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n } // tell the dest that it's being piped to\n\n\n dest.emit('pipe', src); // start the flow if it hasn't been started already.\n\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function pipeOnDrainFunctionResult() {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = {\n hasUnpiped: false\n }; // if we're not piping anywhere, then do nothing.\n\n if (state.pipesCount === 0) return this; // just one destination. most common case.\n\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n if (!dest) dest = state.pipes; // got a match.\n\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n } // slow case. multiple pipe destinations.\n\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var i = 0; i < len; i++) {\n dests[i].emit('unpipe', this, {\n hasUnpiped: false\n });\n }\n\n return this;\n } // try to find the right one.\n\n\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n dest.emit('unpipe', this, unpipeInfo);\n return this;\n}; // set up data events if they are asked for\n// Ensure readable listeners eventually get something\n\n\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n var state = this._readableState;\n\n if (ev === 'data') {\n // update readableListening so that resume() may be a no-op\n // a few lines down. This is needed to support once('readable').\n state.readableListening = this.listenerCount('readable') > 0; // Try start flowing on next tick if stream isn't explicitly paused\n\n if (state.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.flowing = false;\n state.emittedReadable = false;\n debug('on readable', state.length, state.reading);\n\n if (state.length) {\n emitReadable(this);\n } else if (!state.reading) {\n process.nextTick(nReadingNextTick, this);\n }\n }\n }\n\n return res;\n};\n\nReadable.prototype.addListener = Readable.prototype.on;\n\nReadable.prototype.removeListener = function (ev, fn) {\n var res = Stream.prototype.removeListener.call(this, ev, fn);\n\n if (ev === 'readable') {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n\n return res;\n};\n\nReadable.prototype.removeAllListeners = function (ev) {\n var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n\n if (ev === 'readable' || ev === undefined) {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n\n return res;\n};\n\nfunction updateReadableListening(self) {\n var state = self._readableState;\n state.readableListening = self.listenerCount('readable') > 0;\n\n if (state.resumeScheduled && !state.paused) {\n // flowing needs to be set to true now, otherwise\n // the upcoming resume will not flow.\n state.flowing = true; // crude way to check if we should resume\n } else if (self.listenerCount('data') > 0) {\n self.resume();\n }\n}\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n} // pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\n\n\nReadable.prototype.resume = function () {\n var state = this._readableState;\n\n if (!state.flowing) {\n debug('resume'); // we flow only if there is no one listening\n // for readable, but we still have to call\n // resume()\n\n state.flowing = !state.readableListening;\n resume(this, state);\n }\n\n state.paused = false;\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n process.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n debug('resume', state.reading);\n\n if (!state.reading) {\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n\n if (this._readableState.flowing !== false) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n\n this._readableState.paused = true;\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n\n while (state.flowing && stream.read() !== null) {\n ;\n }\n} // wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\n\n\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n stream.on('end', function () {\n debug('wrapped end');\n\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n\n _this.push(null);\n });\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode\n\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = _this.push(chunk);\n\n if (!ret) {\n paused = true;\n stream.pause();\n }\n }); // proxy all the other methods.\n // important when wrapping filters and duplexes.\n\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function methodWrap(method) {\n return function methodWrapReturnFunction() {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n } // proxy certain important events.\n\n\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n } // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n\n\n this._read = function (n) {\n debug('wrapped _read', n);\n\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\n};\n\nif (typeof Symbol === 'function') {\n Readable.prototype[Symbol.asyncIterator] = function () {\n if (createReadableStreamAsyncIterator === undefined) {\n createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n }\n\n return createReadableStreamAsyncIterator(this);\n };\n}\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.highWaterMark;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState && this._readableState.buffer;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.flowing;\n },\n set: function set(state) {\n if (this._readableState) {\n this._readableState.flowing = state;\n }\n }\n}); // exposed for testing purposes only.\n\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.length;\n }\n}); // Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = state.buffer.consume(n, state.decoder);\n }\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n debug('endReadable', state.endEmitted);\n\n if (!state.endEmitted) {\n state.ended = true;\n process.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n debug('endReadableNT', state.endEmitted, state.length); // Check that we didn't get one last unshift.\n\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the writable side is ready for autoDestroy as well\n var wState = stream._writableState;\n\n if (!wState || wState.autoDestroy && wState.finished) {\n stream.destroy();\n }\n }\n }\n}\n\nif (typeof Symbol === 'function') {\n Readable.from = function (iterable, opts) {\n if (from === undefined) {\n from = require('./internal/streams/from');\n }\n\n return from(Readable, iterable, opts);\n };\n}\n\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n\n return -1;\n}", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n'use strict';\n\nmodule.exports = Transform;\n\nvar _require$codes = require('../errors').codes,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\n\nvar Duplex = require('./_stream_duplex');\n\nrequire('inherits')(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n var cb = ts.writecb;\n\n if (cb === null) {\n return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n if (data != null) // single equals check for both `null` and `undefined`\n this.push(data);\n cb(er);\n var rs = this._readableState;\n rs.reading = false;\n\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\n\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n Duplex.call(this, options);\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n }; // start out asking for a readable event once data is transformed.\n\n this._readableState.needReadable = true; // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n if (typeof options.flush === 'function') this._flush = options.flush;\n } // When the writable side finishes, then flush out anything remaining.\n\n\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\n if (typeof this._flush === 'function' && !this._readableState.destroyed) {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n}; // This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\n\n\nTransform.prototype._transform = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n}; // Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\n\n\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && !ts.transforming) {\n ts.transforming = true;\n\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data); // TODO(BridgeAR): Write a test for these two error cases\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n\n if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n return stream.push(null);\n}", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\nrequire('inherits')(PassThrough, Transform);\n\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\n};", "// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n'use strict';\n\nvar eos;\n\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n callback.apply(void 0, arguments);\n };\n}\n\nvar _require$codes = require('../../../errors').codes,\n ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;\n\nfunction noop(err) {\n // Rethrow the error if it exists to avoid swallowing it\n if (err) throw err;\n}\n\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\n\nfunction destroyer(stream, reading, writing, callback) {\n callback = once(callback);\n var closed = false;\n stream.on('close', function () {\n closed = true;\n });\n if (eos === undefined) eos = require('./end-of-stream');\n eos(stream, {\n readable: reading,\n writable: writing\n }, function (err) {\n if (err) return callback(err);\n closed = true;\n callback();\n });\n var destroyed = false;\n return function (err) {\n if (closed) return;\n if (destroyed) return;\n destroyed = true; // request.destroy just do .end - .abort is what we want\n\n if (isRequest(stream)) return stream.abort();\n if (typeof stream.destroy === 'function') return stream.destroy();\n callback(err || new ERR_STREAM_DESTROYED('pipe'));\n };\n}\n\nfunction call(fn) {\n fn();\n}\n\nfunction pipe(from, to) {\n return from.pipe(to);\n}\n\nfunction popCallback(streams) {\n if (!streams.length) return noop;\n if (typeof streams[streams.length - 1] !== 'function') return noop;\n return streams.pop();\n}\n\nfunction pipeline() {\n for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {\n streams[_key] = arguments[_key];\n }\n\n var callback = popCallback(streams);\n if (Array.isArray(streams[0])) streams = streams[0];\n\n if (streams.length < 2) {\n throw new ERR_MISSING_ARGS('streams');\n }\n\n var error;\n var destroys = streams.map(function (stream, i) {\n var reading = i < streams.length - 1;\n var writing = i > 0;\n return destroyer(stream, reading, writing, function (err) {\n if (!error) error = err;\n if (err) destroys.forEach(call);\n if (reading) return;\n destroys.forEach(call);\n callback(error);\n });\n });\n return streams.reduce(pipe);\n}\n\nmodule.exports = pipeline;", "var Stream = require('stream');\nif (process.env.READABLE_STREAM === 'disable' && Stream) {\n module.exports = Stream.Readable;\n Object.assign(module.exports, Stream);\n module.exports.Stream = Stream;\n} else {\n exports = module.exports = require('./lib/_stream_readable.js');\n exports.Stream = Stream || exports;\n exports.Readable = exports;\n exports.Writable = require('./lib/_stream_writable.js');\n exports.Duplex = require('./lib/_stream_duplex.js');\n exports.Transform = require('./lib/_stream_transform.js');\n exports.PassThrough = require('./lib/_stream_passthrough.js');\n exports.finished = require('./lib/internal/streams/end-of-stream.js');\n exports.pipeline = require('./lib/internal/streams/pipeline.js');\n}\n", "'use strict'\n\nconst { Buffer } = require('buffer')\nconst symbol = Symbol.for('BufferList')\n\nfunction BufferList (buf) {\n if (!(this instanceof BufferList)) {\n return new BufferList(buf)\n }\n\n BufferList._init.call(this, buf)\n}\n\nBufferList._init = function _init (buf) {\n Object.defineProperty(this, symbol, { value: true })\n\n this._bufs = []\n this.length = 0\n\n if (buf) {\n this.append(buf)\n }\n}\n\nBufferList.prototype._new = function _new (buf) {\n return new BufferList(buf)\n}\n\nBufferList.prototype._offset = function _offset (offset) {\n if (offset === 0) {\n return [0, 0]\n }\n\n let tot = 0\n\n for (let i = 0; i < this._bufs.length; i++) {\n const _t = tot + this._bufs[i].length\n if (offset < _t || i === this._bufs.length - 1) {\n return [i, offset - tot]\n }\n tot = _t\n }\n}\n\nBufferList.prototype._reverseOffset = function (blOffset) {\n const bufferId = blOffset[0]\n let offset = blOffset[1]\n\n for (let i = 0; i < bufferId; i++) {\n offset += this._bufs[i].length\n }\n\n return offset\n}\n\nBufferList.prototype.get = function get (index) {\n if (index > this.length || index < 0) {\n return undefined\n }\n\n const offset = this._offset(index)\n\n return this._bufs[offset[0]][offset[1]]\n}\n\nBufferList.prototype.slice = function slice (start, end) {\n if (typeof start === 'number' && start < 0) {\n start += this.length\n }\n\n if (typeof end === 'number' && end < 0) {\n end += this.length\n }\n\n return this.copy(null, 0, start, end)\n}\n\nBufferList.prototype.copy = function copy (dst, dstStart, srcStart, srcEnd) {\n if (typeof srcStart !== 'number' || srcStart < 0) {\n srcStart = 0\n }\n\n if (typeof srcEnd !== 'number' || srcEnd > this.length) {\n srcEnd = this.length\n }\n\n if (srcStart >= this.length) {\n return dst || Buffer.alloc(0)\n }\n\n if (srcEnd <= 0) {\n return dst || Buffer.alloc(0)\n }\n\n const copy = !!dst\n const off = this._offset(srcStart)\n const len = srcEnd - srcStart\n let bytes = len\n let bufoff = (copy && dstStart) || 0\n let start = off[1]\n\n // copy/slice everything\n if (srcStart === 0 && srcEnd === this.length) {\n if (!copy) {\n // slice, but full concat if multiple buffers\n return this._bufs.length === 1\n ? this._bufs[0]\n : Buffer.concat(this._bufs, this.length)\n }\n\n // copy, need to copy individual buffers\n for (let i = 0; i < this._bufs.length; i++) {\n this._bufs[i].copy(dst, bufoff)\n bufoff += this._bufs[i].length\n }\n\n return dst\n }\n\n // easy, cheap case where it's a subset of one of the buffers\n if (bytes <= this._bufs[off[0]].length - start) {\n return copy\n ? this._bufs[off[0]].copy(dst, dstStart, start, start + bytes)\n : this._bufs[off[0]].slice(start, start + bytes)\n }\n\n if (!copy) {\n // a slice, we need something to copy in to\n dst = Buffer.allocUnsafe(len)\n }\n\n for (let i = off[0]; i < this._bufs.length; i++) {\n const l = this._bufs[i].length - start\n\n if (bytes > l) {\n this._bufs[i].copy(dst, bufoff, start)\n bufoff += l\n } else {\n this._bufs[i].copy(dst, bufoff, start, start + bytes)\n bufoff += l\n break\n }\n\n bytes -= l\n\n if (start) {\n start = 0\n }\n }\n\n // safeguard so that we don't return uninitialized memory\n if (dst.length > bufoff) return dst.slice(0, bufoff)\n\n return dst\n}\n\nBufferList.prototype.shallowSlice = function shallowSlice (start, end) {\n start = start || 0\n end = typeof end !== 'number' ? this.length : end\n\n if (start < 0) {\n start += this.length\n }\n\n if (end < 0) {\n end += this.length\n }\n\n if (start === end) {\n return this._new()\n }\n\n const startOffset = this._offset(start)\n const endOffset = this._offset(end)\n const buffers = this._bufs.slice(startOffset[0], endOffset[0] + 1)\n\n if (endOffset[1] === 0) {\n buffers.pop()\n } else {\n buffers[buffers.length - 1] = buffers[buffers.length - 1].slice(0, endOffset[1])\n }\n\n if (startOffset[1] !== 0) {\n buffers[0] = buffers[0].slice(startOffset[1])\n }\n\n return this._new(buffers)\n}\n\nBufferList.prototype.toString = function toString (encoding, start, end) {\n return this.slice(start, end).toString(encoding)\n}\n\nBufferList.prototype.consume = function consume (bytes) {\n // first, normalize the argument, in accordance with how Buffer does it\n bytes = Math.trunc(bytes)\n // do nothing if not a positive number\n if (Number.isNaN(bytes) || bytes <= 0) return this\n\n while (this._bufs.length) {\n if (bytes >= this._bufs[0].length) {\n bytes -= this._bufs[0].length\n this.length -= this._bufs[0].length\n this._bufs.shift()\n } else {\n this._bufs[0] = this._bufs[0].slice(bytes)\n this.length -= bytes\n break\n }\n }\n\n return this\n}\n\nBufferList.prototype.duplicate = function duplicate () {\n const copy = this._new()\n\n for (let i = 0; i < this._bufs.length; i++) {\n copy.append(this._bufs[i])\n }\n\n return copy\n}\n\nBufferList.prototype.append = function append (buf) {\n if (buf == null) {\n return this\n }\n\n if (buf.buffer) {\n // append a view of the underlying ArrayBuffer\n this._appendBuffer(Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength))\n } else if (Array.isArray(buf)) {\n for (let i = 0; i < buf.length; i++) {\n this.append(buf[i])\n }\n } else if (this._isBufferList(buf)) {\n // unwrap argument into individual BufferLists\n for (let i = 0; i < buf._bufs.length; i++) {\n this.append(buf._bufs[i])\n }\n } else {\n // coerce number arguments to strings, since Buffer(number) does\n // uninitialized memory allocation\n if (typeof buf === 'number') {\n buf = buf.toString()\n }\n\n this._appendBuffer(Buffer.from(buf))\n }\n\n return this\n}\n\nBufferList.prototype._appendBuffer = function appendBuffer (buf) {\n this._bufs.push(buf)\n this.length += buf.length\n}\n\nBufferList.prototype.indexOf = function (search, offset, encoding) {\n if (encoding === undefined && typeof offset === 'string') {\n encoding = offset\n offset = undefined\n }\n\n if (typeof search === 'function' || Array.isArray(search)) {\n throw new TypeError('The \"value\" argument must be one of type string, Buffer, BufferList, or Uint8Array.')\n } else if (typeof search === 'number') {\n search = Buffer.from([search])\n } else if (typeof search === 'string') {\n search = Buffer.from(search, encoding)\n } else if (this._isBufferList(search)) {\n search = search.slice()\n } else if (Array.isArray(search.buffer)) {\n search = Buffer.from(search.buffer, search.byteOffset, search.byteLength)\n } else if (!Buffer.isBuffer(search)) {\n search = Buffer.from(search)\n }\n\n offset = Number(offset || 0)\n\n if (isNaN(offset)) {\n offset = 0\n }\n\n if (offset < 0) {\n offset = this.length + offset\n }\n\n if (offset < 0) {\n offset = 0\n }\n\n if (search.length === 0) {\n return offset > this.length ? this.length : offset\n }\n\n const blOffset = this._offset(offset)\n let blIndex = blOffset[0] // index of which internal buffer we're working on\n let buffOffset = blOffset[1] // offset of the internal buffer we're working on\n\n // scan over each buffer\n for (; blIndex < this._bufs.length; blIndex++) {\n const buff = this._bufs[blIndex]\n\n while (buffOffset < buff.length) {\n const availableWindow = buff.length - buffOffset\n\n if (availableWindow >= search.length) {\n const nativeSearchResult = buff.indexOf(search, buffOffset)\n\n if (nativeSearchResult !== -1) {\n return this._reverseOffset([blIndex, nativeSearchResult])\n }\n\n buffOffset = buff.length - search.length + 1 // end of native search window\n } else {\n const revOffset = this._reverseOffset([blIndex, buffOffset])\n\n if (this._match(revOffset, search)) {\n return revOffset\n }\n\n buffOffset++\n }\n }\n\n buffOffset = 0\n }\n\n return -1\n}\n\nBufferList.prototype._match = function (offset, search) {\n if (this.length - offset < search.length) {\n return false\n }\n\n for (let searchOffset = 0; searchOffset < search.length; searchOffset++) {\n if (this.get(offset + searchOffset) !== search[searchOffset]) {\n return false\n }\n }\n return true\n}\n\n;(function () {\n const methods = {\n readDoubleBE: 8,\n readDoubleLE: 8,\n readFloatBE: 4,\n readFloatLE: 4,\n readInt32BE: 4,\n readInt32LE: 4,\n readUInt32BE: 4,\n readUInt32LE: 4,\n readInt16BE: 2,\n readInt16LE: 2,\n readUInt16BE: 2,\n readUInt16LE: 2,\n readInt8: 1,\n readUInt8: 1,\n readIntBE: null,\n readIntLE: null,\n readUIntBE: null,\n readUIntLE: null\n }\n\n for (const m in methods) {\n (function (m) {\n if (methods[m] === null) {\n BufferList.prototype[m] = function (offset, byteLength) {\n return this.slice(offset, offset + byteLength)[m](0, byteLength)\n }\n } else {\n BufferList.prototype[m] = function (offset = 0) {\n return this.slice(offset, offset + methods[m])[m](0)\n }\n }\n }(m))\n }\n}())\n\n// Used internally by the class and also as an indicator of this object being\n// a `BufferList`. It's not possible to use `instanceof BufferList` in a browser\n// environment because there could be multiple different copies of the\n// BufferList class and some `BufferList`s might be `BufferList`s.\nBufferList.prototype._isBufferList = function _isBufferList (b) {\n return b instanceof BufferList || BufferList.isBufferList(b)\n}\n\nBufferList.isBufferList = function isBufferList (b) {\n return b != null && b[symbol]\n}\n\nmodule.exports = BufferList\n", "'use strict'\n\nconst DuplexStream = require('readable-stream').Duplex\nconst inherits = require('inherits')\nconst BufferList = require('./BufferList')\n\nfunction BufferListStream (callback) {\n if (!(this instanceof BufferListStream)) {\n return new BufferListStream(callback)\n }\n\n if (typeof callback === 'function') {\n this._callback = callback\n\n const piper = function piper (err) {\n if (this._callback) {\n this._callback(err)\n this._callback = null\n }\n }.bind(this)\n\n this.on('pipe', function onPipe (src) {\n src.on('error', piper)\n })\n this.on('unpipe', function onUnpipe (src) {\n src.removeListener('error', piper)\n })\n\n callback = null\n }\n\n BufferList._init.call(this, callback)\n DuplexStream.call(this)\n}\n\ninherits(BufferListStream, DuplexStream)\nObject.assign(BufferListStream.prototype, BufferList.prototype)\n\nBufferListStream.prototype._new = function _new (callback) {\n return new BufferListStream(callback)\n}\n\nBufferListStream.prototype._write = function _write (buf, encoding, callback) {\n this._appendBuffer(buf)\n\n if (typeof callback === 'function') {\n callback()\n }\n}\n\nBufferListStream.prototype._read = function _read (size) {\n if (!this.length) {\n return this.push(null)\n }\n\n size = Math.min(size, this.length)\n this.push(this.slice(0, size))\n this.consume(size)\n}\n\nBufferListStream.prototype.end = function end (chunk) {\n DuplexStream.prototype.end.call(this, chunk)\n\n if (this._callback) {\n this._callback(null, this.slice())\n this._callback = null\n }\n}\n\nBufferListStream.prototype._destroy = function _destroy (err, cb) {\n this._bufs.length = 0\n this.length = 0\n cb(err)\n}\n\nBufferListStream.prototype._isBufferList = function _isBufferList (b) {\n return b instanceof BufferListStream || b instanceof BufferList || BufferListStream.isBufferList(b)\n}\n\nBufferListStream.isBufferList = BufferList.isBufferList\n\nmodule.exports = BufferListStream\nmodule.exports.BufferListStream = BufferListStream\nmodule.exports.BufferList = BufferList\n", "var alloc = Buffer.alloc\n\nvar ZEROS = '0000000000000000000'\nvar SEVENS = '7777777777777777777'\nvar ZERO_OFFSET = '0'.charCodeAt(0)\nvar USTAR_MAGIC = Buffer.from('ustar\\x00', 'binary')\nvar USTAR_VER = Buffer.from('00', 'binary')\nvar GNU_MAGIC = Buffer.from('ustar\\x20', 'binary')\nvar GNU_VER = Buffer.from('\\x20\\x00', 'binary')\nvar MASK = parseInt('7777', 8)\nvar MAGIC_OFFSET = 257\nvar VERSION_OFFSET = 263\n\nvar clamp = function (index, len, defaultValue) {\n if (typeof index !== 'number') return defaultValue\n index = ~~index // Coerce to integer.\n if (index >= len) return len\n if (index >= 0) return index\n index += len\n if (index >= 0) return index\n return 0\n}\n\nvar toType = function (flag) {\n switch (flag) {\n case 0:\n return 'file'\n case 1:\n return 'link'\n case 2:\n return 'symlink'\n case 3:\n return 'character-device'\n case 4:\n return 'block-device'\n case 5:\n return 'directory'\n case 6:\n return 'fifo'\n case 7:\n return 'contiguous-file'\n case 72:\n return 'pax-header'\n case 55:\n return 'pax-global-header'\n case 27:\n return 'gnu-long-link-path'\n case 28:\n case 30:\n return 'gnu-long-path'\n }\n\n return null\n}\n\nvar toTypeflag = function (flag) {\n switch (flag) {\n case 'file':\n return 0\n case 'link':\n return 1\n case 'symlink':\n return 2\n case 'character-device':\n return 3\n case 'block-device':\n return 4\n case 'directory':\n return 5\n case 'fifo':\n return 6\n case 'contiguous-file':\n return 7\n case 'pax-header':\n return 72\n }\n\n return 0\n}\n\nvar indexOf = function (block, num, offset, end) {\n for (; offset < end; offset++) {\n if (block[offset] === num) return offset\n }\n return end\n}\n\nvar cksum = function (block) {\n var sum = 8 * 32\n for (var i = 0; i < 148; i++) sum += block[i]\n for (var j = 156; j < 512; j++) sum += block[j]\n return sum\n}\n\nvar encodeOct = function (val, n) {\n val = val.toString(8)\n if (val.length > n) return SEVENS.slice(0, n) + ' '\n else return ZEROS.slice(0, n - val.length) + val + ' '\n}\n\n/* Copied from the node-tar repo and modified to meet\n * tar-stream coding standard.\n *\n * Source: https://github.com/npm/node-tar/blob/51b6627a1f357d2eb433e7378e5f05e83b7aa6cd/lib/header.js#L349\n */\nfunction parse256 (buf) {\n // first byte MUST be either 80 or FF\n // 80 for positive, FF for 2's comp\n var positive\n if (buf[0] === 0x80) positive = true\n else if (buf[0] === 0xFF) positive = false\n else return null\n\n // build up a base-256 tuple from the least sig to the highest\n var tuple = []\n for (var i = buf.length - 1; i > 0; i--) {\n var byte = buf[i]\n if (positive) tuple.push(byte)\n else tuple.push(0xFF - byte)\n }\n\n var sum = 0\n var l = tuple.length\n for (i = 0; i < l; i++) {\n sum += tuple[i] * Math.pow(256, i)\n }\n\n return positive ? sum : -1 * sum\n}\n\nvar decodeOct = function (val, offset, length) {\n val = val.slice(offset, offset + length)\n offset = 0\n\n // If prefixed with 0x80 then parse as a base-256 integer\n if (val[offset] & 0x80) {\n return parse256(val)\n } else {\n // Older versions of tar can prefix with spaces\n while (offset < val.length && val[offset] === 32) offset++\n var end = clamp(indexOf(val, 32, offset, val.length), val.length, val.length)\n while (offset < end && val[offset] === 0) offset++\n if (end === offset) return 0\n return parseInt(val.slice(offset, end).toString(), 8)\n }\n}\n\nvar decodeStr = function (val, offset, length, encoding) {\n return val.slice(offset, indexOf(val, 0, offset, offset + length)).toString(encoding)\n}\n\nvar addLength = function (str) {\n var len = Buffer.byteLength(str)\n var digits = Math.floor(Math.log(len) / Math.log(10)) + 1\n if (len + digits >= Math.pow(10, digits)) digits++\n\n return (len + digits) + str\n}\n\nexports.decodeLongPath = function (buf, encoding) {\n return decodeStr(buf, 0, buf.length, encoding)\n}\n\nexports.encodePax = function (opts) { // TODO: encode more stuff in pax\n var result = ''\n if (opts.name) result += addLength(' path=' + opts.name + '\\n')\n if (opts.linkname) result += addLength(' linkpath=' + opts.linkname + '\\n')\n var pax = opts.pax\n if (pax) {\n for (var key in pax) {\n result += addLength(' ' + key + '=' + pax[key] + '\\n')\n }\n }\n return Buffer.from(result)\n}\n\nexports.decodePax = function (buf) {\n var result = {}\n\n while (buf.length) {\n var i = 0\n while (i < buf.length && buf[i] !== 32) i++\n var len = parseInt(buf.slice(0, i).toString(), 10)\n if (!len) return result\n\n var b = buf.slice(i + 1, len - 1).toString()\n var keyIndex = b.indexOf('=')\n if (keyIndex === -1) return result\n result[b.slice(0, keyIndex)] = b.slice(keyIndex + 1)\n\n buf = buf.slice(len)\n }\n\n return result\n}\n\nexports.encode = function (opts) {\n var buf = alloc(512)\n var name = opts.name\n var prefix = ''\n\n if (opts.typeflag === 5 && name[name.length - 1] !== '/') name += '/'\n if (Buffer.byteLength(name) !== name.length) return null // utf-8\n\n while (Buffer.byteLength(name) > 100) {\n var i = name.indexOf('/')\n if (i === -1) return null\n prefix += prefix ? '/' + name.slice(0, i) : name.slice(0, i)\n name = name.slice(i + 1)\n }\n\n if (Buffer.byteLength(name) > 100 || Buffer.byteLength(prefix) > 155) return null\n if (opts.linkname && Buffer.byteLength(opts.linkname) > 100) return null\n\n buf.write(name)\n buf.write(encodeOct(opts.mode & MASK, 6), 100)\n buf.write(encodeOct(opts.uid, 6), 108)\n buf.write(encodeOct(opts.gid, 6), 116)\n buf.write(encodeOct(opts.size, 11), 124)\n buf.write(encodeOct((opts.mtime.getTime() / 1000) | 0, 11), 136)\n\n buf[156] = ZERO_OFFSET + toTypeflag(opts.type)\n\n if (opts.linkname) buf.write(opts.linkname, 157)\n\n USTAR_MAGIC.copy(buf, MAGIC_OFFSET)\n USTAR_VER.copy(buf, VERSION_OFFSET)\n if (opts.uname) buf.write(opts.uname, 265)\n if (opts.gname) buf.write(opts.gname, 297)\n buf.write(encodeOct(opts.devmajor || 0, 6), 329)\n buf.write(encodeOct(opts.devminor || 0, 6), 337)\n\n if (prefix) buf.write(prefix, 345)\n\n buf.write(encodeOct(cksum(buf), 6), 148)\n\n return buf\n}\n\nexports.decode = function (buf, filenameEncoding, allowUnknownFormat) {\n var typeflag = buf[156] === 0 ? 0 : buf[156] - ZERO_OFFSET\n\n var name = decodeStr(buf, 0, 100, filenameEncoding)\n var mode = decodeOct(buf, 100, 8)\n var uid = decodeOct(buf, 108, 8)\n var gid = decodeOct(buf, 116, 8)\n var size = decodeOct(buf, 124, 12)\n var mtime = decodeOct(buf, 136, 12)\n var type = toType(typeflag)\n var linkname = buf[157] === 0 ? null : decodeStr(buf, 157, 100, filenameEncoding)\n var uname = decodeStr(buf, 265, 32)\n var gname = decodeStr(buf, 297, 32)\n var devmajor = decodeOct(buf, 329, 8)\n var devminor = decodeOct(buf, 337, 8)\n\n var c = cksum(buf)\n\n // checksum is still initial value if header was null.\n if (c === 8 * 32) return null\n\n // valid checksum\n if (c !== decodeOct(buf, 148, 8)) throw new Error('Invalid tar header. Maybe the tar is corrupted or it needs to be gunzipped?')\n\n if (USTAR_MAGIC.compare(buf, MAGIC_OFFSET, MAGIC_OFFSET + 6) === 0) {\n // ustar (posix) format.\n // prepend prefix, if present.\n if (buf[345]) name = decodeStr(buf, 345, 155, filenameEncoding) + '/' + name\n } else if (GNU_MAGIC.compare(buf, MAGIC_OFFSET, MAGIC_OFFSET + 6) === 0 &&\n GNU_VER.compare(buf, VERSION_OFFSET, VERSION_OFFSET + 2) === 0) {\n // 'gnu'/'oldgnu' format. Similar to ustar, but has support for incremental and\n // multi-volume tarballs.\n } else {\n if (!allowUnknownFormat) {\n throw new Error('Invalid tar header: unknown format.')\n }\n }\n\n // to support old tar versions that use trailing / to indicate dirs\n if (typeflag === 0 && name && name[name.length - 1] === '/') typeflag = 5\n\n return {\n name,\n mode,\n uid,\n gid,\n size,\n mtime: new Date(1000 * mtime),\n type,\n linkname,\n uname,\n gname,\n devmajor,\n devminor\n }\n}\n", "var util = require('util')\nvar bl = require('bl')\nvar headers = require('./headers')\n\nvar Writable = require('readable-stream').Writable\nvar PassThrough = require('readable-stream').PassThrough\n\nvar noop = function () {}\n\nvar overflow = function (size) {\n size &= 511\n return size && 512 - size\n}\n\nvar emptyStream = function (self, offset) {\n var s = new Source(self, offset)\n s.end()\n return s\n}\n\nvar mixinPax = function (header, pax) {\n if (pax.path) header.name = pax.path\n if (pax.linkpath) header.linkname = pax.linkpath\n if (pax.size) header.size = parseInt(pax.size, 10)\n header.pax = pax\n return header\n}\n\nvar Source = function (self, offset) {\n this._parent = self\n this.offset = offset\n PassThrough.call(this, { autoDestroy: false })\n}\n\nutil.inherits(Source, PassThrough)\n\nSource.prototype.destroy = function (err) {\n this._parent.destroy(err)\n}\n\nvar Extract = function (opts) {\n if (!(this instanceof Extract)) return new Extract(opts)\n Writable.call(this, opts)\n\n opts = opts || {}\n\n this._offset = 0\n this._buffer = bl()\n this._missing = 0\n this._partial = false\n this._onparse = noop\n this._header = null\n this._stream = null\n this._overflow = null\n this._cb = null\n this._locked = false\n this._destroyed = false\n this._pax = null\n this._paxGlobal = null\n this._gnuLongPath = null\n this._gnuLongLinkPath = null\n\n var self = this\n var b = self._buffer\n\n var oncontinue = function () {\n self._continue()\n }\n\n var onunlock = function (err) {\n self._locked = false\n if (err) return self.destroy(err)\n if (!self._stream) oncontinue()\n }\n\n var onstreamend = function () {\n self._stream = null\n var drain = overflow(self._header.size)\n if (drain) self._parse(drain, ondrain)\n else self._parse(512, onheader)\n if (!self._locked) oncontinue()\n }\n\n var ondrain = function () {\n self._buffer.consume(overflow(self._header.size))\n self._parse(512, onheader)\n oncontinue()\n }\n\n var onpaxglobalheader = function () {\n var size = self._header.size\n self._paxGlobal = headers.decodePax(b.slice(0, size))\n b.consume(size)\n onstreamend()\n }\n\n var onpaxheader = function () {\n var size = self._header.size\n self._pax = headers.decodePax(b.slice(0, size))\n if (self._paxGlobal) self._pax = Object.assign({}, self._paxGlobal, self._pax)\n b.consume(size)\n onstreamend()\n }\n\n var ongnulongpath = function () {\n var size = self._header.size\n this._gnuLongPath = headers.decodeLongPath(b.slice(0, size), opts.filenameEncoding)\n b.consume(size)\n onstreamend()\n }\n\n var ongnulonglinkpath = function () {\n var size = self._header.size\n this._gnuLongLinkPath = headers.decodeLongPath(b.slice(0, size), opts.filenameEncoding)\n b.consume(size)\n onstreamend()\n }\n\n var onheader = function () {\n var offset = self._offset\n var header\n try {\n header = self._header = headers.decode(b.slice(0, 512), opts.filenameEncoding, opts.allowUnknownFormat)\n } catch (err) {\n self.emit('error', err)\n }\n b.consume(512)\n\n if (!header) {\n self._parse(512, onheader)\n oncontinue()\n return\n }\n if (header.type === 'gnu-long-path') {\n self._parse(header.size, ongnulongpath)\n oncontinue()\n return\n }\n if (header.type === 'gnu-long-link-path') {\n self._parse(header.size, ongnulonglinkpath)\n oncontinue()\n return\n }\n if (header.type === 'pax-global-header') {\n self._parse(header.size, onpaxglobalheader)\n oncontinue()\n return\n }\n if (header.type === 'pax-header') {\n self._parse(header.size, onpaxheader)\n oncontinue()\n return\n }\n\n if (self._gnuLongPath) {\n header.name = self._gnuLongPath\n self._gnuLongPath = null\n }\n\n if (self._gnuLongLinkPath) {\n header.linkname = self._gnuLongLinkPath\n self._gnuLongLinkPath = null\n }\n\n if (self._pax) {\n self._header = header = mixinPax(header, self._pax)\n self._pax = null\n }\n\n self._locked = true\n\n if (!header.size || header.type === 'directory') {\n self._parse(512, onheader)\n self.emit('entry', header, emptyStream(self, offset), onunlock)\n return\n }\n\n self._stream = new Source(self, offset)\n\n self.emit('entry', header, self._stream, onunlock)\n self._parse(header.size, onstreamend)\n oncontinue()\n }\n\n this._onheader = onheader\n this._parse(512, onheader)\n}\n\nutil.inherits(Extract, Writable)\n\nExtract.prototype.destroy = function (err) {\n if (this._destroyed) return\n this._destroyed = true\n\n if (err) this.emit('error', err)\n this.emit('close')\n if (this._stream) this._stream.emit('close')\n}\n\nExtract.prototype._parse = function (size, onparse) {\n if (this._destroyed) return\n this._offset += size\n this._missing = size\n if (onparse === this._onheader) this._partial = false\n this._onparse = onparse\n}\n\nExtract.prototype._continue = function () {\n if (this._destroyed) return\n var cb = this._cb\n this._cb = noop\n if (this._overflow) this._write(this._overflow, undefined, cb)\n else cb()\n}\n\nExtract.prototype._write = function (data, enc, cb) {\n if (this._destroyed) return\n\n var s = this._stream\n var b = this._buffer\n var missing = this._missing\n if (data.length) this._partial = true\n\n // we do not reach end-of-chunk now. just forward it\n\n if (data.length < missing) {\n this._missing -= data.length\n this._overflow = null\n if (s) return s.write(data, cb)\n b.append(data)\n return cb()\n }\n\n // end-of-chunk. the parser should call cb.\n\n this._cb = cb\n this._missing = 0\n\n var overflow = null\n if (data.length > missing) {\n overflow = data.slice(missing)\n data = data.slice(0, missing)\n }\n\n if (s) s.end(data)\n else b.append(data)\n\n this._overflow = overflow\n this._onparse()\n}\n\nExtract.prototype._final = function (cb) {\n if (this._partial) return this.destroy(new Error('Unexpected end of data'))\n cb()\n}\n\nmodule.exports = Extract\n", "module.exports = require('fs').constants || require('constants')\n", "// Returns a wrapper function that returns a wrapped callback\n// The wrapper function should do some stuff, and return a\n// presumably different callback function.\n// This makes sure that own properties are retained, so that\n// decorations and such are not lost along the way.\nmodule.exports = wrappy\nfunction wrappy (fn, cb) {\n if (fn && cb) return wrappy(fn)(cb)\n\n if (typeof fn !== 'function')\n throw new TypeError('need wrapper function')\n\n Object.keys(fn).forEach(function (k) {\n wrapper[k] = fn[k]\n })\n\n return wrapper\n\n function wrapper() {\n var args = new Array(arguments.length)\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i]\n }\n var ret = fn.apply(this, args)\n var cb = args[args.length-1]\n if (typeof ret === 'function' && ret !== cb) {\n Object.keys(cb).forEach(function (k) {\n ret[k] = cb[k]\n })\n }\n return ret\n }\n}\n", "var wrappy = require('wrappy')\nmodule.exports = wrappy(once)\nmodule.exports.strict = wrappy(onceStrict)\n\nonce.proto = once(function () {\n Object.defineProperty(Function.prototype, 'once', {\n value: function () {\n return once(this)\n },\n configurable: true\n })\n\n Object.defineProperty(Function.prototype, 'onceStrict', {\n value: function () {\n return onceStrict(this)\n },\n configurable: true\n })\n})\n\nfunction once (fn) {\n var f = function () {\n if (f.called) return f.value\n f.called = true\n return f.value = fn.apply(this, arguments)\n }\n f.called = false\n return f\n}\n\nfunction onceStrict (fn) {\n var f = function () {\n if (f.called)\n throw new Error(f.onceError)\n f.called = true\n return f.value = fn.apply(this, arguments)\n }\n var name = fn.name || 'Function wrapped with `once`'\n f.onceError = name + \" shouldn't be called more than once\"\n f.called = false\n return f\n}\n", "var once = require('once');\n\nvar noop = function() {};\n\nvar isRequest = function(stream) {\n\treturn stream.setHeader && typeof stream.abort === 'function';\n};\n\nvar isChildProcess = function(stream) {\n\treturn stream.stdio && Array.isArray(stream.stdio) && stream.stdio.length === 3\n};\n\nvar eos = function(stream, opts, callback) {\n\tif (typeof opts === 'function') return eos(stream, null, opts);\n\tif (!opts) opts = {};\n\n\tcallback = once(callback || noop);\n\n\tvar ws = stream._writableState;\n\tvar rs = stream._readableState;\n\tvar readable = opts.readable || (opts.readable !== false && stream.readable);\n\tvar writable = opts.writable || (opts.writable !== false && stream.writable);\n\tvar cancelled = false;\n\n\tvar onlegacyfinish = function() {\n\t\tif (!stream.writable) onfinish();\n\t};\n\n\tvar onfinish = function() {\n\t\twritable = false;\n\t\tif (!readable) callback.call(stream);\n\t};\n\n\tvar onend = function() {\n\t\treadable = false;\n\t\tif (!writable) callback.call(stream);\n\t};\n\n\tvar onexit = function(exitCode) {\n\t\tcallback.call(stream, exitCode ? new Error('exited with error code: ' + exitCode) : null);\n\t};\n\n\tvar onerror = function(err) {\n\t\tcallback.call(stream, err);\n\t};\n\n\tvar onclose = function() {\n\t\tprocess.nextTick(onclosenexttick);\n\t};\n\n\tvar onclosenexttick = function() {\n\t\tif (cancelled) return;\n\t\tif (readable && !(rs && (rs.ended && !rs.destroyed))) return callback.call(stream, new Error('premature close'));\n\t\tif (writable && !(ws && (ws.ended && !ws.destroyed))) return callback.call(stream, new Error('premature close'));\n\t};\n\n\tvar onrequest = function() {\n\t\tstream.req.on('finish', onfinish);\n\t};\n\n\tif (isRequest(stream)) {\n\t\tstream.on('complete', onfinish);\n\t\tstream.on('abort', onclose);\n\t\tif (stream.req) onrequest();\n\t\telse stream.on('request', onrequest);\n\t} else if (writable && !ws) { // legacy streams\n\t\tstream.on('end', onlegacyfinish);\n\t\tstream.on('close', onlegacyfinish);\n\t}\n\n\tif (isChildProcess(stream)) stream.on('exit', onexit);\n\n\tstream.on('end', onend);\n\tstream.on('finish', onfinish);\n\tif (opts.error !== false) stream.on('error', onerror);\n\tstream.on('close', onclose);\n\n\treturn function() {\n\t\tcancelled = true;\n\t\tstream.removeListener('complete', onfinish);\n\t\tstream.removeListener('abort', onclose);\n\t\tstream.removeListener('request', onrequest);\n\t\tif (stream.req) stream.req.removeListener('finish', onfinish);\n\t\tstream.removeListener('end', onlegacyfinish);\n\t\tstream.removeListener('close', onlegacyfinish);\n\t\tstream.removeListener('finish', onfinish);\n\t\tstream.removeListener('exit', onexit);\n\t\tstream.removeListener('end', onend);\n\t\tstream.removeListener('error', onerror);\n\t\tstream.removeListener('close', onclose);\n\t};\n};\n\nmodule.exports = eos;\n", "var constants = require('fs-constants')\nvar eos = require('end-of-stream')\nvar inherits = require('inherits')\nvar alloc = Buffer.alloc\n\nvar Readable = require('readable-stream').Readable\nvar Writable = require('readable-stream').Writable\nvar StringDecoder = require('string_decoder').StringDecoder\n\nvar headers = require('./headers')\n\nvar DMODE = parseInt('755', 8)\nvar FMODE = parseInt('644', 8)\n\nvar END_OF_TAR = alloc(1024)\n\nvar noop = function () {}\n\nvar overflow = function (self, size) {\n size &= 511\n if (size) self.push(END_OF_TAR.slice(0, 512 - size))\n}\n\nfunction modeToType (mode) {\n switch (mode & constants.S_IFMT) {\n case constants.S_IFBLK: return 'block-device'\n case constants.S_IFCHR: return 'character-device'\n case constants.S_IFDIR: return 'directory'\n case constants.S_IFIFO: return 'fifo'\n case constants.S_IFLNK: return 'symlink'\n }\n\n return 'file'\n}\n\nvar Sink = function (to) {\n Writable.call(this)\n this.written = 0\n this._to = to\n this._destroyed = false\n}\n\ninherits(Sink, Writable)\n\nSink.prototype._write = function (data, enc, cb) {\n this.written += data.length\n if (this._to.push(data)) return cb()\n this._to._drain = cb\n}\n\nSink.prototype.destroy = function () {\n if (this._destroyed) return\n this._destroyed = true\n this.emit('close')\n}\n\nvar LinkSink = function () {\n Writable.call(this)\n this.linkname = ''\n this._decoder = new StringDecoder('utf-8')\n this._destroyed = false\n}\n\ninherits(LinkSink, Writable)\n\nLinkSink.prototype._write = function (data, enc, cb) {\n this.linkname += this._decoder.write(data)\n cb()\n}\n\nLinkSink.prototype.destroy = function () {\n if (this._destroyed) return\n this._destroyed = true\n this.emit('close')\n}\n\nvar Void = function () {\n Writable.call(this)\n this._destroyed = false\n}\n\ninherits(Void, Writable)\n\nVoid.prototype._write = function (data, enc, cb) {\n cb(new Error('No body allowed for this entry'))\n}\n\nVoid.prototype.destroy = function () {\n if (this._destroyed) return\n this._destroyed = true\n this.emit('close')\n}\n\nvar Pack = function (opts) {\n if (!(this instanceof Pack)) return new Pack(opts)\n Readable.call(this, opts)\n\n this._drain = noop\n this._finalized = false\n this._finalizing = false\n this._destroyed = false\n this._stream = null\n}\n\ninherits(Pack, Readable)\n\nPack.prototype.entry = function (header, buffer, callback) {\n if (this._stream) throw new Error('already piping an entry')\n if (this._finalized || this._destroyed) return\n\n if (typeof buffer === 'function') {\n callback = buffer\n buffer = null\n }\n\n if (!callback) callback = noop\n\n var self = this\n\n if (!header.size || header.type === 'symlink') header.size = 0\n if (!header.type) header.type = modeToType(header.mode)\n if (!header.mode) header.mode = header.type === 'directory' ? DMODE : FMODE\n if (!header.uid) header.uid = 0\n if (!header.gid) header.gid = 0\n if (!header.mtime) header.mtime = new Date()\n\n if (typeof buffer === 'string') buffer = Buffer.from(buffer)\n if (Buffer.isBuffer(buffer)) {\n header.size = buffer.length\n this._encode(header)\n var ok = this.push(buffer)\n overflow(self, header.size)\n if (ok) process.nextTick(callback)\n else this._drain = callback\n return new Void()\n }\n\n if (header.type === 'symlink' && !header.linkname) {\n var linkSink = new LinkSink()\n eos(linkSink, function (err) {\n if (err) { // stream was closed\n self.destroy()\n return callback(err)\n }\n\n header.linkname = linkSink.linkname\n self._encode(header)\n callback()\n })\n\n return linkSink\n }\n\n this._encode(header)\n\n if (header.type !== 'file' && header.type !== 'contiguous-file') {\n process.nextTick(callback)\n return new Void()\n }\n\n var sink = new Sink(this)\n\n this._stream = sink\n\n eos(sink, function (err) {\n self._stream = null\n\n if (err) { // stream was closed\n self.destroy()\n return callback(err)\n }\n\n if (sink.written !== header.size) { // corrupting tar\n self.destroy()\n return callback(new Error('size mismatch'))\n }\n\n overflow(self, header.size)\n if (self._finalizing) self.finalize()\n callback()\n })\n\n return sink\n}\n\nPack.prototype.finalize = function () {\n if (this._stream) {\n this._finalizing = true\n return\n }\n\n if (this._finalized) return\n this._finalized = true\n this.push(END_OF_TAR)\n this.push(null)\n}\n\nPack.prototype.destroy = function (err) {\n if (this._destroyed) return\n this._destroyed = true\n\n if (err) this.emit('error', err)\n this.emit('close')\n if (this._stream && this._stream.destroy) this._stream.destroy()\n}\n\nPack.prototype._encode = function (header) {\n if (!header.pax) {\n var buf = headers.encode(header)\n if (buf) {\n this.push(buf)\n return\n }\n }\n this._encodePax(header)\n}\n\nPack.prototype._encodePax = function (header) {\n var paxHeader = headers.encodePax({\n name: header.name,\n linkname: header.linkname,\n pax: header.pax\n })\n\n var newHeader = {\n name: 'PaxHeader',\n mode: header.mode,\n uid: header.uid,\n gid: header.gid,\n size: paxHeader.length,\n mtime: header.mtime,\n type: 'pax-header',\n linkname: header.linkname && 'PaxHeader',\n uname: header.uname,\n gname: header.gname,\n devmajor: header.devmajor,\n devminor: header.devminor\n }\n\n this.push(headers.encode(newHeader))\n this.push(paxHeader)\n overflow(this, paxHeader.length)\n\n newHeader.size = header.size\n newHeader.type = header.type\n this.push(headers.encode(newHeader))\n}\n\nPack.prototype._read = function (n) {\n var drain = this._drain\n this._drain = noop\n drain()\n}\n\nmodule.exports = Pack\n", "exports.extract = require('./extract')\nexports.pack = require('./pack')\n", "import { metricScope, Unit } from 'aws-embedded-metrics';\nimport type { Context, EventBridgeEvent } from 'aws-lambda';\n\nimport { DenyListClient } from '../../backend/deny-list/client.lambda-shared';\nimport { LicenseListClient } from '../../backend/license-list/client.lambda-shared';\nimport * as aws from '../../backend/shared/aws.lambda-shared';\nimport { requireEnv } from '../../backend/shared/env.lambda-shared';\nimport { integrity } from '../../backend/shared/integrity.lambda-shared';\nimport { extractObjects } from '../../backend/shared/tarball.lambda-shared';\nimport {\n METRICS_NAMESPACE,\n MetricName,\n DOMAIN_OWNER_DIMENSION,\n DOMAIN_NAME_DIMENSION,\n REPOSITORY_NAME_DIMENSION,\n} from './constants.lambda-shared';\n\nconst DETAIL_TYPE = 'CodeArtifact Package Version State Change' as const;\n\nexport const handler = metricScope(\n (metrics) =>\n async (\n event: EventBridgeEvent<typeof DETAIL_TYPE, CodeArtifactDetail>,\n context: Context\n ) => {\n console.log(`Event: ${JSON.stringify(event, null, 2)}`);\n\n const stagingBucket = requireEnv('BUCKET_NAME');\n const queueUrl = requireEnv('QUEUE_URL');\n\n metrics.setNamespace(METRICS_NAMESPACE);\n metrics.setDimensions({\n [DOMAIN_OWNER_DIMENSION]: event.detail.domainOwner,\n [DOMAIN_NAME_DIMENSION]: event.detail.domainName,\n [REPOSITORY_NAME_DIMENSION]: event.detail.repositoryName,\n });\n\n const packageName = event.detail.packageNamespace\n ? `@${event.detail.packageNamespace}/${event.detail.packageName}`\n : event.detail.packageName;\n\n if (event.detail.operationType === 'Deleted') {\n console.log(\n `Operation type is \"Deleted\" for ${packageName}@${event.detail.packageVersion}`\n );\n metrics.putMetric(MetricName.DELETED_COUNT, 1, Unit.Count);\n return;\n }\n\n const denyList = await DenyListClient.newClient();\n const denied = denyList.lookup(packageName, event.detail.packageVersion);\n if (denied) {\n console.log(\n `Package ${packageName}@${\n event.detail.packageVersion\n } denied: ${JSON.stringify(denied, null, 2)}`\n );\n metrics.putMetric(MetricName.DENY_LISTED_COUNT, 1, Unit.Count);\n return;\n }\n\n const { asset, packageVersionRevision } = await aws\n .codeArtifact()\n .getPackageVersionAsset({\n asset: 'package.tgz', // Always named this way for npm packages!\n domainOwner: event.detail.domainOwner,\n domain: event.detail.domainName,\n repository: event.detail.repositoryName,\n format: event.detail.packageFormat,\n namespace: event.detail.packageNamespace,\n package: event.detail.packageName,\n packageVersion: event.detail.packageVersion,\n })\n .promise();\n const tarball = Buffer.from(asset! as any);\n\n const { assemblyJson, packageJson } = await extractObjects(tarball, {\n assemblyJson: { path: 'package/.jsii' },\n packageJson: { path: 'package/package.json', required: true },\n });\n metrics.putMetric(\n MetricName.NOT_JSII_ENABLED_COUNT,\n assemblyJson ? 0 : 1,\n Unit.Count\n );\n if (assemblyJson == null) {\n console.log(\n `Package \"${packageName}@${event.detail.packageVersion}\" does not contain a .jsii assembly`\n );\n return;\n }\n\n const metadata = JSON.parse(packageJson.toString('utf-8'));\n const licenseList = await LicenseListClient.newClient();\n const eligibleLicense = licenseList.lookup(\n metadata.license ?? 'UNLICENSED'\n );\n metrics.putMetric(\n MetricName.INELIGIBLE_LICENSE,\n eligibleLicense ? 0 : 1,\n Unit.Count\n );\n if (!eligibleLicense) {\n console.log(\n `Package \"${packageName}@${\n event.detail.packageVersion\n }\" does not use allow-listed license: ${\n metadata.license ?? 'UNLICENSED'\n }`\n );\n return;\n }\n\n const stagingKey = `${packageName}/${event.detail.packageVersion}/${packageVersionRevision}/package.tgz`;\n await aws\n .s3()\n .putObject({\n Bucket: stagingBucket,\n Key: stagingKey,\n Body: asset,\n ContentType: 'application/octet-stream',\n Metadata: {\n 'Lambda-Log-Group': context.logGroupName,\n 'Lambda-Log-Stream': context.logStreamName,\n 'Lambda-Run-Id': context.awsRequestId,\n },\n })\n .promise();\n\n const message = integrity(\n {\n tarballUri: `s3://${stagingBucket}/${stagingKey}`,\n metadata: { resources: event.resources.join(', ') },\n time: event.time,\n },\n tarball\n );\n return aws\n .sqs()\n .sendMessage({\n MessageAttributes: {\n AWS_REQUEST_ID: {\n DataType: 'String',\n StringValue: context.awsRequestId,\n },\n LOG_GROUP_NAME: {\n DataType: 'String',\n StringValue: context.logGroupName,\n },\n LOG_STREAM_NAME: {\n DataType: 'String',\n StringValue: context.logStreamName,\n },\n },\n MessageBody: JSON.stringify(message),\n QueueUrl: queueUrl,\n })\n .promise();\n }\n);\n\n/**\n * @see https://docs.aws.amazon.com/codeartifact/latest/ug/service-event-format-example.html\n */\ninterface CodeArtifactDetail {\n /**\n * The domain that contains the repository that contains the package.\n */\n readonly domainName: string;\n\n /**\n * The AWS account ID of the owner of the domain.\n */\n readonly domainOwner: string;\n\n /**\n * The repository that contains the package.\n */\n readonly repositoryName: string;\n\n /**\n * The format of the package that triggered the event.\n */\n readonly packageFormat: string;\n\n /**\n * The namespace of the package that triggered the event.\n */\n readonly packageNamespace?: string;\n\n /**\n * The name of the package that triggered the event.\n */\n readonly packageName: string;\n\n /**\n * The version of the package that triggered the event.\n */\n readonly packageVersion: string;\n\n /**\n * The state of the package version when the event was triggered.\n */\n readonly packageVersionState:\n | 'Unfinished'\n | 'Published'\n | 'Unlisted'\n | 'Archived'\n | 'Disposed';\n\n /**\n * A value that uniquely identifies the state of the assets and metadata of the package version when the event was\n * triggered. If the package version is modified (for example, by adding another JAR file to a Maven package), the\n * packageVersionRevision changes.\n */\n readonly packageVersionRevision: string;\n\n readonly changes: {\n /**\n * The number of assets added to a package that triggered an event. Examples of an asset are a Maven JAR file or a\n * Python wheel.\n */\n readonly assetsAdded: number;\n\n /**\n * The number of assets removed from a package that triggered an event.\n */\n readonly assetsRemoved: number;\n\n /**\n * The number of assets modified in the package that triggered the event.\n */\n readonly metadataUpdated: boolean;\n\n /**\n * A boolean value that is set to true if the event includes modified package-level metadata. For example, an event\n * might modify a Maven pom.xml file.\n */\n readonly assetsUpdated: number;\n\n /**\n * A boolean value that is set to true if the event's packageVersionStatus is modified(for example, if\n * packageVersionStatus changes from Unfinished to Published).\n */\n readonly statusChanged: boolean;\n };\n\n /**\n * Describes the high-level type of the package version change.\n */\n readonly operationType: 'Created' | 'Updated' | 'Deleted';\n\n /**\n * An integer that specifies an event number for a package. Each event on a package increments the sequenceNumber so\n * events can be arranged sequentially. An event can increment the sequenceNumber by any integer number.\n */\n readonly sequenceNumber: number;\n\n /**\n * An ID used to differentiate duplicate EventBridge events. In rare cases, EventBridge might trigger the same rule\n * more than once for a single event or scheduled time. Or, it might invoke the same target more than once for a given\n * triggered rule.\n */\n readonly eventDeduplicationId: string;\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 _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 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 _s3 = _sqs = _sfn = _lambda = _codeArtifact = undefined;\n}\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", "/**\n * The name of an environment variable that contains the bucket name that includes the deny list.\n */\nexport const ENV_DENY_LIST_BUCKET_NAME = 'DENY_LIST_BUCKET_NAME';\n\n/**\n * The object key of the deny list in the bucket.\n */\nexport const ENV_DENY_LIST_OBJECT_KEY = 'DENY_LIST_OBJECT_KEY';\n\nexport const ENV_PRUNE_PACKAGE_DATA_BUCKET_NAME = 'PACKAGE_DATA_BUCKET_NAME';\nexport const ENV_PRUNE_PACKAGE_DATA_KEY_PREFIX = 'PACKAGE_DATA_KEY_PREFIX';\nexport const ENV_PRUNE_QUEUE_URL = 'PRUNE_QUEUE_URL';\nexport const ENV_PRUNE_ON_CHANGE_FUNCTION_NAME = 'ON_CHANGE_FUNCTION_NAME';\n\nexport const ENV_DELETE_OBJECT_DATA_BUCKET_NAME = 'PACKAGE_DATA_BUCKET_NAME';\n\nexport const METRICS_NAMESPACE = 'ConstructHub/DenyList';\n\nexport const enum MetricName {\n DENY_LIST_RULE_COUNT = 'DenyListRuleCount',\n}\n", "import * as AWS from 'aws-sdk';\nimport { s3 } from '../shared/aws.lambda-shared';\nimport { requireEnv } from '../shared/env.lambda-shared';\nimport { DenyListMap, DenyListRule } from './api';\nimport {\n ENV_DENY_LIST_BUCKET_NAME,\n ENV_DENY_LIST_OBJECT_KEY,\n} from './constants';\n\n/**\n * A client for working with the deny list.\n */\nexport class DenyListClient {\n /**\n * Creates a new client for accessing the deny list.\n */\n public static async newClient() {\n const client = new DenyListClient();\n await client.init();\n return client;\n }\n\n private readonly s3: AWS.S3;\n private readonly bucketName: string;\n private readonly objectKey: string;\n\n private _map: DenyListMap | undefined;\n\n private constructor() {\n this.bucketName = requireEnv(ENV_DENY_LIST_BUCKET_NAME);\n this.objectKey = requireEnv(ENV_DENY_LIST_OBJECT_KEY);\n this.s3 = s3();\n }\n\n /**\n * Downloads the deny list and stores it in memory.\n *\n * This must be called before `lookup()`.\n */\n private async init() {\n if (this._map) {\n throw new Error('init() cannot be called twice');\n }\n\n this._map = {};\n\n try {\n const params = {\n Bucket: this.bucketName,\n Key: this.objectKey,\n };\n\n const { Body: body } = await this.s3.getObject(params).promise();\n if (!body) {\n console.log(\n `WARNING: deny list body is empty at ${this.bucketName}/${this.objectKey}`\n );\n return;\n }\n\n const contents = body.toString('utf-8');\n\n // an empty string is a valid (empty) deny list\n if (contents.length === 0) {\n return;\n }\n\n const data = JSON.parse(contents) as DenyListMap;\n if (typeof data != 'object') {\n throw new Error(\n `Invalid format in deny list file at ${this.bucketName}/${this.objectKey}. Expecting a map`\n );\n }\n\n this._map = data;\n } catch (e) {\n if (e.code === 'NoSuchKey' || e.code === 'NoSuchBucket') {\n return;\n }\n\n throw new Error(\n `Unable to parse deny list file ${this.bucketName}/${this.objectKey}: ${e}`\n );\n }\n }\n\n /**\n * Checks if a package (name + version) is in the deny list.\n * @param name The name of the package\n * @param version The package version\n * @returns `undefined` if the package is not in the deny list or a\n * `DenyListRule` otherwise.\n */\n public lookup(name: string, version: string): DenyListRule | undefined {\n if (!this._map) {\n throw new Error('DenyListClient must be initialized');\n }\n\n return this._map[name] ?? this._map[`${name}/v${version}`];\n }\n\n /**\n * Returns a copy of the deny list map.\n */\n public get map() {\n if (!this._map) {\n throw new Error('DenyListClient must be initialized');\n }\n\n return this._map;\n }\n}\n", "import { s3 } from '../shared/aws.lambda-shared';\nimport { requireEnv } from '../shared/env.lambda-shared';\nimport { EnvironmentVariables } from './constants';\n\n/**\n * A client for working with the license list.\n */\nexport class LicenseListClient {\n public static async newClient() {\n const client = new LicenseListClient();\n await client.init();\n return client;\n }\n\n readonly #bucketName: string;\n readonly #objectKey: string;\n\n #map?: Map<string, string>;\n\n private constructor() {\n this.#bucketName = requireEnv(EnvironmentVariables.BUCKET_NAME);\n this.#objectKey = requireEnv(EnvironmentVariables.OBJECT_KEY);\n }\n\n /**\n * Looks up a license ID in this list.\n *\n * @param licenseId the license ID to look up (possibly with unorthodox case).\n *\n * @returns the normalized SPDX license identifier for this license, if it is\n * in the list, or `undefined` otherwise.\n */\n public lookup(licenseId: string): string | undefined {\n /* istanbul ignore if (should never happen) */\n if (this.#map == null) {\n throw new Error('LicenseListClient must be initialized');\n }\n return this.#map.get(licenseId.toUpperCase());\n }\n\n private async init() {\n /* istanbul ignore if (should never happen) */\n if (this.#map != null) {\n throw new Error('init() cannot be called twice');\n }\n const { Body: body } = await s3()\n .getObject({ Bucket: this.#bucketName, Key: this.#objectKey })\n .promise();\n if (!body) {\n console.log(\n `WARNING: license list is empty at ${this.#bucketName}/${\n this.#objectKey\n }`\n );\n this.#map = new Map();\n return;\n }\n\n const licenseIds = JSON.parse(body.toString('utf-8'));\n if (!Array.isArray(licenseIds)) {\n throw new Error(\n `Invalid format in license list file at ${this.#bucketName}/${\n this.#objectKey\n }. Expected an array.`\n );\n }\n this.#map = new Map(licenseIds.map((id) => [id.toUpperCase(), id]));\n }\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", "import { createGunzip } from 'zlib';\nimport { extract } from 'tar-stream';\n\n/**\n * Extracts objects from a compressed tarball (.tgz file). Selectors are\n * provided as a map from result key to a selector configuration object, which\n * can specify whether the object is required (`required: true`) or not (a\n * missing required object will cause the extraction to throw an error), and\n * either a path name (exact match with the contents of the tarball), or a\n * filter function. Selector properties are applied in the order in which they\n * are defined: the first matching selector gets used to select the object. If\n * a selector matches multiple objects in the tarball, the last matched object\n * is returned.\n *\n * @param tgz the compressed tarbal data in a `Buffer`.\n * @param selector the objects to be extracted from the tarball.\n *\n * @returns the extracted objects.\n */\nexport async function extractObjects<S extends Selector>(\n tgz: Buffer,\n selector: S\n): Promise<Selection<S>> {\n const tarball = await gunzip(tgz);\n return new Promise((ok, ko) => {\n const result: { [name: string]: Buffer } = {};\n const extractor = extract({ filenameEncoding: 'utf-8' })\n .once('error', ko)\n .once('finish', () => {\n for (const [name, { path, required }] of Object.entries(selector)) {\n if (!required) {\n continue;\n }\n if (!(name in result)) {\n const err = new Error(\n `Missing required entry in tarball: ${name} (${\n path ?? '<dynamic>'\n })`\n );\n Error.captureStackTrace(err);\n ko(err);\n return;\n }\n }\n ok(result as Selection<S>);\n })\n .on('entry', (headers, stream, next) => {\n for (const [name, config] of Object.entries(selector)) {\n if (selectorMatches(headers.name, config)) {\n const chunks = new Array<Buffer>();\n stream\n .once('error', ko)\n .on('data', (chunk) => chunks.push(Buffer.from(chunk)))\n .once('end', () => {\n result[name] = Buffer.concat(chunks);\n // Running `next` on the next runLoop iteration to avoid stack overflow\n setImmediate(next);\n })\n .resume();\n return;\n }\n }\n // Running `next` on the next runLoop iteration to avoid stack overflow\n setImmediate(next);\n });\n extractor.write(tarball, (err) => {\n if (err != null) {\n ko(err);\n }\n extractor.end();\n });\n });\n}\n\nfunction gunzip(gz: Buffer): Promise<Buffer> {\n return new Promise((ok, ko) => {\n const chunks = new Array<Buffer>();\n createGunzip()\n .once('error', ko)\n .on('data', (chunk) => chunks.push(Buffer.from(chunk)))\n .once('end', () => ok(Buffer.concat(chunks)))\n .end(gz);\n });\n}\n\nfunction selectorMatches(path: string, config: SelectorProperty): boolean {\n if ('path' in config) {\n return path === config.path;\n }\n return config.filter(path);\n}\n\ninterface Selector {\n readonly [name: string]: SelectorProperty;\n}\ntype SelectorProperty = { readonly required?: boolean } & (\n | { readonly path: string }\n | { readonly path?: undefined; readonly filter: (path: string) => boolean }\n);\n\ntype Selection<S extends Selector> = {\n readonly [P in keyof S]: S[P] extends { readonly required: true }\n ? Buffer\n : Buffer | undefined;\n};\n", "export const METRICS_NAMESPACE = 'ConstructHub/PackageSource/CodeArtifact';\n\nexport const DOMAIN_OWNER_DIMENSION = 'DomainOwner';\nexport const DOMAIN_NAME_DIMENSION = 'DomainName';\nexport const REPOSITORY_NAME_DIMENSION = 'RepositoryName';\n\nexport const enum MetricName {\n DELETED_COUNT = 'DeletedCount',\n DENY_LISTED_COUNT = 'DenyListedCount',\n INELIGIBLE_LICENSE = 'IneligibleLicenseCount',\n NOT_JSII_ENABLED_COUNT = 'NotJsiiEnabledCount',\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }