construct-hub 0.2.55 → 0.2.59

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. package/.gitattributes +0 -1
  2. package/.jsii +78 -11
  3. package/API.md +44 -0
  4. package/README.md +7 -0
  5. package/lib/backend/catalog-builder/catalog-builder.bundle/index.js +1 -1
  6. package/lib/backend/catalog-builder/catalog-builder.bundle/index.js.map +1 -1
  7. package/lib/backend/catalog-builder/catalog-builder.lambda.js +2 -2
  8. package/lib/backend/ingestion/ingestion.bundle/index.js +3 -3
  9. package/lib/backend/ingestion/ingestion.bundle/index.js.map +1 -1
  10. package/lib/backend/ingestion/ingestion.lambda.js +4 -4
  11. package/lib/backend/orchestration/index.js +3 -2
  12. package/lib/backend/package-stats/package-stats.bundle/index.js +1 -1
  13. package/lib/backend/package-stats/package-stats.bundle/index.js.map +1 -1
  14. package/lib/backend/package-stats/package-stats.lambda.js +2 -2
  15. package/lib/backend/transliterator/transliterator.bundle/index.js +6 -6
  16. package/lib/backend/transliterator/transliterator.bundle/index.js.map +1 -1
  17. package/lib/backend/transliterator/transliterator.ecstask.js +2 -2
  18. package/lib/construct-hub.d.ts +7 -1
  19. package/lib/construct-hub.js +3 -2
  20. package/lib/index.d.ts +1 -1
  21. package/lib/index.js +1 -1
  22. package/lib/package-sources/code-artifact.js +1 -1
  23. package/lib/package-sources/npmjs.js +1 -1
  24. package/lib/package-tag/index.js +2 -2
  25. package/lib/spdx-license.js +1 -1
  26. package/lib/webapp/config.d.ts +5 -1
  27. package/lib/webapp/config.js +2 -1
  28. package/lib/webapp/index.d.ts +16 -0
  29. package/lib/webapp/index.js +11 -4
  30. package/package.json +3 -4
  31. package/lib/webapp/cache-invalidator/constants.d.ts +0 -4
  32. package/lib/webapp/cache-invalidator/constants.js +0 -5
  33. package/lib/webapp/cache-invalidator/handler.bundle/index.js +0 -1404
  34. package/lib/webapp/cache-invalidator/handler.bundle/index.js.map +0 -7
  35. package/lib/webapp/cache-invalidator/handler.d.ts +0 -7
  36. package/lib/webapp/cache-invalidator/handler.js +0 -19
  37. package/lib/webapp/cache-invalidator/handler.lambda.d.ts +0 -3
  38. package/lib/webapp/cache-invalidator/handler.lambda.js +0 -42
  39. package/lib/webapp/cache-invalidator/index.d.ts +0 -34
  40. package/lib/webapp/cache-invalidator/index.js +0 -57
@@ -1,7 +0,0 @@
1
- {
2
- "version": 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", "../../../../src/webapp/cache-invalidator/handler.lambda.ts", "../../../../src/backend/shared/env.lambda-shared.ts", "../../../../src/webapp/cache-invalidator/constants.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", "import { metricScope, Unit } from 'aws-embedded-metrics';\nimport { Context, S3Event } from 'aws-lambda';\nimport * as AWS from 'aws-sdk';\nimport { requireEnv } from '../../backend/shared/env.lambda-shared';\nimport { METRICS_NAMESPACE, MetricName } from './constants';\n\nconst DISTRIBUTION_ID = requireEnv('DISTRIBUTION_ID');\nconst PATH_PREFIX = requireEnv('PATH_PREFIX');\n\nexport async function handler(event: S3Event, context: Context) {\n console.log(`Event: ${JSON.stringify(event, null, 2)}`);\n\n if (event.Records.length === 0) {\n return;\n }\n\n await metricScope((metrics) => () => {\n // Clear default dimensions, we don't need those.\n metrics.setDimensions();\n\n metrics.setNamespace(METRICS_NAMESPACE);\n\n const now = Date.now();\n for (const record of event.Records) {\n const age = now - new Date(record.eventTime).getTime();\n metrics.putMetric(MetricName.S3_EVENT_AGE, age, Unit.Milliseconds);\n }\n })();\n\n const cf = new AWS.CloudFront();\n const invalidationRequest: AWS.CloudFront.CreateInvalidationRequest = {\n DistributionId: DISTRIBUTION_ID,\n InvalidationBatch: {\n Paths: {\n Quantity: event.Records.length,\n Items: event.Records.map((record) => `${PATH_PREFIX}${record.s3.object.key}`),\n },\n CallerReference: context.awsRequestId,\n },\n };\n console.log(JSON.stringify({ invalidationRequet: invalidationRequest }));\n const invalidationResponse = cf.createInvalidation(invalidationRequest).promise();\n console.log(JSON.stringify({ invalidationResponse }));\n return invalidationResponse;\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(`No value specified for required environment variable: ${name}`);\n }\n return result;\n}\n", "export const METRICS_NAMESPACE = 'ConstructHub/CacheInvalidator';\n\nexport const enum MetricName {\n S3_EVENT_AGE = 'S3EventAge',\n}\n"],
5
- "mappings": "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",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- import * as lambda from '@aws-cdk/aws-lambda';
2
- import { Construct } from '@aws-cdk/core';
3
- export interface HandlerProps extends lambda.FunctionOptions {
4
- }
5
- export declare class Handler extends lambda.Function {
6
- constructor(scope: Construct, id: string, props?: HandlerProps);
7
- }
@@ -1,19 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Handler = void 0;
4
- // ~~ Generated by projen. To modify, edit .projenrc.js and run "npx projen".
5
- const path = require("path");
6
- const lambda = require("@aws-cdk/aws-lambda");
7
- class Handler extends lambda.Function {
8
- constructor(scope, id, props) {
9
- super(scope, id, {
10
- description: 'webapp/cache-invalidator/handler.lambda.ts',
11
- ...props,
12
- runtime: lambda.Runtime.NODEJS_14_X,
13
- handler: 'index.handler',
14
- code: lambda.Code.fromAsset(path.join(__dirname, '/handler.bundle')),
15
- });
16
- }
17
- }
18
- exports.Handler = Handler;
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy93ZWJhcHAvY2FjaGUtaW52YWxpZGF0b3IvaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2RUFBNkU7QUFDN0UsNkJBQTZCO0FBQzdCLDhDQUE4QztBQU05QyxNQUFhLE9BQVEsU0FBUSxNQUFNLENBQUMsUUFBUTtJQUMxQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQW9CO1FBQzVELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsV0FBVyxFQUFFLDRDQUE0QztZQUN6RCxHQUFHLEtBQUs7WUFDUixPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXO1lBQ25DLE9BQU8sRUFBRSxlQUFlO1lBQ3hCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1NBQ3JFLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQVZELDBCQVVDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gfn4gR2VuZXJhdGVkIGJ5IHByb2plbi4gVG8gbW9kaWZ5LCBlZGl0IC5wcm9qZW5yYy5qcyBhbmQgcnVuIFwibnB4IHByb2plblwiLlxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tICdAYXdzLWNkay9hd3MtbGFtYmRhJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ0Bhd3MtY2RrL2NvcmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEhhbmRsZXJQcm9wcyBleHRlbmRzIGxhbWJkYS5GdW5jdGlvbk9wdGlvbnMge1xufVxuXG5leHBvcnQgY2xhc3MgSGFuZGxlciBleHRlbmRzIGxhbWJkYS5GdW5jdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzPzogSGFuZGxlclByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ3dlYmFwcC9jYWNoZS1pbnZhbGlkYXRvci9oYW5kbGVyLmxhbWJkYS50cycsXG4gICAgICAuLi5wcm9wcyxcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18xNF9YLFxuICAgICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICAgICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KHBhdGguam9pbihfX2Rpcm5hbWUsICcvaGFuZGxlci5idW5kbGUnKSksXG4gICAgfSk7XG4gIH1cbn0iXX0=
@@ -1,3 +0,0 @@
1
- import { Context, S3Event } from 'aws-lambda';
2
- import * as AWS from 'aws-sdk';
3
- export declare function handler(event: S3Event, context: Context): Promise<import("aws-sdk/lib/request").PromiseResult<AWS.CloudFront.CreateInvalidationResult, AWS.AWSError> | undefined>;
@@ -1,42 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.handler = void 0;
4
- const aws_embedded_metrics_1 = require("aws-embedded-metrics");
5
- const AWS = require("aws-sdk");
6
- const env_lambda_shared_1 = require("../../backend/shared/env.lambda-shared");
7
- const constants_1 = require("./constants");
8
- const DISTRIBUTION_ID = env_lambda_shared_1.requireEnv('DISTRIBUTION_ID');
9
- const PATH_PREFIX = env_lambda_shared_1.requireEnv('PATH_PREFIX');
10
- async function handler(event, context) {
11
- console.log(`Event: ${JSON.stringify(event, null, 2)}`);
12
- if (event.Records.length === 0) {
13
- return;
14
- }
15
- await aws_embedded_metrics_1.metricScope((metrics) => () => {
16
- // Clear default dimensions, we don't need those.
17
- metrics.setDimensions();
18
- metrics.setNamespace(constants_1.METRICS_NAMESPACE);
19
- const now = Date.now();
20
- for (const record of event.Records) {
21
- const age = now - new Date(record.eventTime).getTime();
22
- metrics.putMetric("S3EventAge" /* S3_EVENT_AGE */, age, aws_embedded_metrics_1.Unit.Milliseconds);
23
- }
24
- })();
25
- const cf = new AWS.CloudFront();
26
- const invalidationRequest = {
27
- DistributionId: DISTRIBUTION_ID,
28
- InvalidationBatch: {
29
- Paths: {
30
- Quantity: event.Records.length,
31
- Items: event.Records.map((record) => `${PATH_PREFIX}${record.s3.object.key}`),
32
- },
33
- CallerReference: context.awsRequestId,
34
- },
35
- };
36
- console.log(JSON.stringify({ invalidationRequet: invalidationRequest }));
37
- const invalidationResponse = cf.createInvalidation(invalidationRequest).promise();
38
- console.log(JSON.stringify({ invalidationResponse }));
39
- return invalidationResponse;
40
- }
41
- exports.handler = handler;
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlci5sYW1iZGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvd2ViYXBwL2NhY2hlLWludmFsaWRhdG9yL2hhbmRsZXIubGFtYmRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtEQUF5RDtBQUV6RCwrQkFBK0I7QUFDL0IsOEVBQW9FO0FBQ3BFLDJDQUE0RDtBQUU1RCxNQUFNLGVBQWUsR0FBRyw4QkFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDdEQsTUFBTSxXQUFXLEdBQUcsOEJBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUV2QyxLQUFLLFVBQVUsT0FBTyxDQUFDLEtBQWMsRUFBRSxPQUFnQjtJQUM1RCxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUV4RCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUM5QixPQUFPO0tBQ1I7SUFFRCxNQUFNLGtDQUFXLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRTtRQUNsQyxpREFBaUQ7UUFDakQsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRXhCLE9BQU8sQ0FBQyxZQUFZLENBQUMsNkJBQWlCLENBQUMsQ0FBQztRQUV4QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdkIsS0FBSyxNQUFNLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFO1lBQ2xDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDdkQsT0FBTyxDQUFDLFNBQVMsa0NBQTBCLEdBQUcsRUFBRSwyQkFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ3BFO0lBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUVMLE1BQU0sRUFBRSxHQUFHLElBQUksR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ2hDLE1BQU0sbUJBQW1CLEdBQTZDO1FBQ3BFLGNBQWMsRUFBRSxlQUFlO1FBQy9CLGlCQUFpQixFQUFFO1lBQ2pCLEtBQUssRUFBRTtnQkFDTCxRQUFRLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNO2dCQUM5QixLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEdBQUcsV0FBVyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO2FBQzlFO1lBQ0QsZUFBZSxFQUFFLE9BQU8sQ0FBQyxZQUFZO1NBQ3RDO0tBQ0YsQ0FBQztJQUNGLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLGtCQUFrQixFQUFFLG1CQUFtQixFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLE1BQU0sb0JBQW9CLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixDQUFDLG1CQUFtQixDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbEYsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEQsT0FBTyxvQkFBb0IsQ0FBQztBQUM5QixDQUFDO0FBbkNELDBCQW1DQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1ldHJpY1Njb3BlLCBVbml0IH0gZnJvbSAnYXdzLWVtYmVkZGVkLW1ldHJpY3MnO1xuaW1wb3J0IHsgQ29udGV4dCwgUzNFdmVudCB9IGZyb20gJ2F3cy1sYW1iZGEnO1xuaW1wb3J0ICogYXMgQVdTIGZyb20gJ2F3cy1zZGsnO1xuaW1wb3J0IHsgcmVxdWlyZUVudiB9IGZyb20gJy4uLy4uL2JhY2tlbmQvc2hhcmVkL2Vudi5sYW1iZGEtc2hhcmVkJztcbmltcG9ydCB7IE1FVFJJQ1NfTkFNRVNQQUNFLCBNZXRyaWNOYW1lIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5jb25zdCBESVNUUklCVVRJT05fSUQgPSByZXF1aXJlRW52KCdESVNUUklCVVRJT05fSUQnKTtcbmNvbnN0IFBBVEhfUFJFRklYID0gcmVxdWlyZUVudignUEFUSF9QUkVGSVgnKTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQ6IFMzRXZlbnQsIGNvbnRleHQ6IENvbnRleHQpIHtcbiAgY29uc29sZS5sb2coYEV2ZW50OiAke0pTT04uc3RyaW5naWZ5KGV2ZW50LCBudWxsLCAyKX1gKTtcblxuICBpZiAoZXZlbnQuUmVjb3Jkcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBhd2FpdCBtZXRyaWNTY29wZSgobWV0cmljcykgPT4gKCkgPT4ge1xuICAgIC8vIENsZWFyIGRlZmF1bHQgZGltZW5zaW9ucywgd2UgZG9uJ3QgbmVlZCB0aG9zZS5cbiAgICBtZXRyaWNzLnNldERpbWVuc2lvbnMoKTtcblxuICAgIG1ldHJpY3Muc2V0TmFtZXNwYWNlKE1FVFJJQ1NfTkFNRVNQQUNFKTtcblxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgZm9yIChjb25zdCByZWNvcmQgb2YgZXZlbnQuUmVjb3Jkcykge1xuICAgICAgY29uc3QgYWdlID0gbm93IC0gbmV3IERhdGUocmVjb3JkLmV2ZW50VGltZSkuZ2V0VGltZSgpO1xuICAgICAgbWV0cmljcy5wdXRNZXRyaWMoTWV0cmljTmFtZS5TM19FVkVOVF9BR0UsIGFnZSwgVW5pdC5NaWxsaXNlY29uZHMpO1xuICAgIH1cbiAgfSkoKTtcblxuICBjb25zdCBjZiA9IG5ldyBBV1MuQ2xvdWRGcm9udCgpO1xuICBjb25zdCBpbnZhbGlkYXRpb25SZXF1ZXN0OiBBV1MuQ2xvdWRGcm9udC5DcmVhdGVJbnZhbGlkYXRpb25SZXF1ZXN0ID0ge1xuICAgIERpc3RyaWJ1dGlvbklkOiBESVNUUklCVVRJT05fSUQsXG4gICAgSW52YWxpZGF0aW9uQmF0Y2g6IHtcbiAgICAgIFBhdGhzOiB7XG4gICAgICAgIFF1YW50aXR5OiBldmVudC5SZWNvcmRzLmxlbmd0aCxcbiAgICAgICAgSXRlbXM6IGV2ZW50LlJlY29yZHMubWFwKChyZWNvcmQpID0+IGAke1BBVEhfUFJFRklYfSR7cmVjb3JkLnMzLm9iamVjdC5rZXl9YCksXG4gICAgICB9LFxuICAgICAgQ2FsbGVyUmVmZXJlbmNlOiBjb250ZXh0LmF3c1JlcXVlc3RJZCxcbiAgICB9LFxuICB9O1xuICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7IGludmFsaWRhdGlvblJlcXVldDogaW52YWxpZGF0aW9uUmVxdWVzdCB9KSk7XG4gIGNvbnN0IGludmFsaWRhdGlvblJlc3BvbnNlID0gY2YuY3JlYXRlSW52YWxpZGF0aW9uKGludmFsaWRhdGlvblJlcXVlc3QpLnByb21pc2UoKTtcbiAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoeyBpbnZhbGlkYXRpb25SZXNwb25zZSB9KSk7XG4gIHJldHVybiBpbnZhbGlkYXRpb25SZXNwb25zZTtcbn1cbiJdfQ==
@@ -1,34 +0,0 @@
1
- import { IDistribution } from '@aws-cdk/aws-cloudfront';
2
- import { Metric, MetricOptions } from '@aws-cdk/aws-cloudwatch';
3
- import { Bucket } from '@aws-cdk/aws-s3';
4
- import { Construct } from '@aws-cdk/core';
5
- export interface CacheInvalidatorProps {
6
- /**
7
- * The S3 Bucket served by the CloudFront distribution.
8
- */
9
- readonly bucket: Bucket;
10
- /**
11
- * The CloudFront Distribution on which to perform automated invalidation.
12
- */
13
- readonly distribution: IDistribution;
14
- /**
15
- * A path prefix to prepend to S3 object keys when computing the cache
16
- * invalidation paths. The value is REQUIRED to begin with a leading `/`.
17
- *
18
- * @default '/'
19
- */
20
- readonly pathPrefix?: string;
21
- }
22
- /**
23
- * Automatically invalidates paths from a CloudFront distribution based on S3
24
- * object updates. The invalidated paths are constructed from the S3 object keys
25
- * being updated, combined with an optional path prefix.
26
- */
27
- export declare class CacheInvalidator extends Construct {
28
- constructor(scope: Construct, id: string, props: CacheInvalidatorProps);
29
- /**
30
- * The age of S3 events processed by the cache invalidator. By default this
31
- * is the MAXIMUM value over a 5 minutes period.
32
- */
33
- metricS3EventAge(opts: MetricOptions): Metric;
34
- }
@@ -1,57 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CacheInvalidator = void 0;
4
- const aws_cloudwatch_1 = require("@aws-cdk/aws-cloudwatch");
5
- const aws_iam_1 = require("@aws-cdk/aws-iam");
6
- const aws_lambda_event_sources_1 = require("@aws-cdk/aws-lambda-event-sources");
7
- const aws_s3_1 = require("@aws-cdk/aws-s3");
8
- const core_1 = require("@aws-cdk/core");
9
- const constants_1 = require("./constants");
10
- const handler_1 = require("./handler");
11
- /**
12
- * Automatically invalidates paths from a CloudFront distribution based on S3
13
- * object updates. The invalidated paths are constructed from the S3 object keys
14
- * being updated, combined with an optional path prefix.
15
- */
16
- class CacheInvalidator extends core_1.Construct {
17
- constructor(scope, id, props) {
18
- var _a;
19
- super(scope, id);
20
- if (props.pathPrefix != null && !core_1.Token.isUnresolved(props.pathPrefix) && !props.pathPrefix.startsWith('/')) {
21
- throw new Error('The pathPrefix must start with a leading /');
22
- }
23
- const handler = new handler_1.Handler(this, 'Resource', {
24
- description: `Automated cache invalidation on CloudFront distribution ${props.distribution.distributionId}`,
25
- environment: {
26
- DISTRIBUTION_ID: props.distribution.distributionId,
27
- PATH_PREFIX: (_a = props.pathPrefix) !== null && _a !== void 0 ? _a : '/',
28
- },
29
- memorySize: 1024,
30
- timeout: core_1.Duration.minutes(1),
31
- });
32
- handler.addToRolePolicy(new aws_iam_1.PolicyStatement({
33
- effect: aws_iam_1.Effect.ALLOW,
34
- actions: ['cloudfront:CreateInvalidation'],
35
- resources: ['*'],
36
- }));
37
- // invalidate cache when a file was created/removed from the bucket
38
- handler.addEventSource(new aws_lambda_event_sources_1.S3EventSource(props.bucket, {
39
- events: [aws_s3_1.EventType.OBJECT_CREATED, aws_s3_1.EventType.OBJECT_REMOVED],
40
- }));
41
- }
42
- /**
43
- * The age of S3 events processed by the cache invalidator. By default this
44
- * is the MAXIMUM value over a 5 minutes period.
45
- */
46
- metricS3EventAge(opts) {
47
- return new aws_cloudwatch_1.Metric({
48
- period: core_1.Duration.minutes(5),
49
- statistic: aws_cloudwatch_1.Statistic.MAXIMUM,
50
- ...opts,
51
- metricName: "S3EventAge" /* S3_EVENT_AGE */,
52
- namespace: constants_1.METRICS_NAMESPACE,
53
- });
54
- }
55
- }
56
- exports.CacheInvalidator = CacheInvalidator;
57
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvd2ViYXBwL2NhY2hlLWludmFsaWRhdG9yL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLDREQUEyRTtBQUMzRSw4Q0FBMkQ7QUFDM0QsZ0ZBQWtFO0FBQ2xFLDRDQUFvRDtBQUNwRCx3Q0FBMkQ7QUFDM0QsMkNBQTREO0FBQzVELHVDQUFvQztBQXNCcEM7Ozs7R0FJRztBQUNILE1BQWEsZ0JBQWlCLFNBQVEsZ0JBQVM7SUFDN0MsWUFBbUIsS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBNEI7O1FBQzNFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxLQUFLLENBQUMsVUFBVSxJQUFJLElBQUksSUFBSSxDQUFDLFlBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDMUcsTUFBTSxJQUFJLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1NBQy9EO1FBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxpQkFBTyxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7WUFDNUMsV0FBVyxFQUFFLDJEQUEyRCxLQUFLLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRTtZQUMzRyxXQUFXLEVBQUU7Z0JBQ1gsZUFBZSxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsY0FBYztnQkFDbEQsV0FBVyxRQUFFLEtBQUssQ0FBQyxVQUFVLG1DQUFJLEdBQUc7YUFDckM7WUFDRCxVQUFVLEVBQUUsSUFBSztZQUNqQixPQUFPLEVBQUUsZUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDN0IsQ0FBQyxDQUFDO1FBRUgsT0FBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLHlCQUFlLENBQUM7WUFDMUMsTUFBTSxFQUFFLGdCQUFNLENBQUMsS0FBSztZQUNwQixPQUFPLEVBQUUsQ0FBQywrQkFBK0IsQ0FBQztZQUMxQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUM7U0FDakIsQ0FBQyxDQUFDLENBQUM7UUFFSixtRUFBbUU7UUFDbkUsT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLHdDQUFhLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRTtZQUNyRCxNQUFNLEVBQUUsQ0FBQyxrQkFBUyxDQUFDLGNBQWMsRUFBRSxrQkFBUyxDQUFDLGNBQWMsQ0FBQztTQUM3RCxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFRDs7O09BR0c7SUFDSSxnQkFBZ0IsQ0FBQyxJQUFtQjtRQUN6QyxPQUFPLElBQUksdUJBQU0sQ0FBQztZQUNoQixNQUFNLEVBQUUsZUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDM0IsU0FBUyxFQUFFLDBCQUFTLENBQUMsT0FBTztZQUM1QixHQUFHLElBQUk7WUFDUCxVQUFVLGlDQUF5QjtZQUNuQyxTQUFTLEVBQUUsNkJBQWlCO1NBQzdCLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQTNDRCw0Q0EyQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJRGlzdHJpYnV0aW9uIH0gZnJvbSAnQGF3cy1jZGsvYXdzLWNsb3VkZnJvbnQnO1xuaW1wb3J0IHsgTWV0cmljLCBNZXRyaWNPcHRpb25zLCBTdGF0aXN0aWMgfSBmcm9tICdAYXdzLWNkay9hd3MtY2xvdWR3YXRjaCc7XG5pbXBvcnQgeyBFZmZlY3QsIFBvbGljeVN0YXRlbWVudCB9IGZyb20gJ0Bhd3MtY2RrL2F3cy1pYW0nO1xuaW1wb3J0IHsgUzNFdmVudFNvdXJjZSB9IGZyb20gJ0Bhd3MtY2RrL2F3cy1sYW1iZGEtZXZlbnQtc291cmNlcyc7XG5pbXBvcnQgeyBCdWNrZXQsIEV2ZW50VHlwZSB9IGZyb20gJ0Bhd3MtY2RrL2F3cy1zMyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QsIER1cmF0aW9uLCBUb2tlbiB9IGZyb20gJ0Bhd3MtY2RrL2NvcmUnO1xuaW1wb3J0IHsgTWV0cmljTmFtZSwgTUVUUklDU19OQU1FU1BBQ0UgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBIYW5kbGVyIH0gZnJvbSAnLi9oYW5kbGVyJztcblxuZXhwb3J0IGludGVyZmFjZSBDYWNoZUludmFsaWRhdG9yUHJvcHMge1xuICAvKipcbiAgICogVGhlIFMzIEJ1Y2tldCBzZXJ2ZWQgYnkgdGhlIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgYnVja2V0OiBCdWNrZXQ7XG5cbiAgLyoqXG4gICAqIFRoZSBDbG91ZEZyb250IERpc3RyaWJ1dGlvbiBvbiB3aGljaCB0byBwZXJmb3JtIGF1dG9tYXRlZCBpbnZhbGlkYXRpb24uXG4gICAqL1xuICByZWFkb25seSBkaXN0cmlidXRpb246IElEaXN0cmlidXRpb247XG5cbiAgLyoqXG4gICAqIEEgcGF0aCBwcmVmaXggdG8gcHJlcGVuZCB0byBTMyBvYmplY3Qga2V5cyB3aGVuIGNvbXB1dGluZyB0aGUgY2FjaGVcbiAgICogaW52YWxpZGF0aW9uIHBhdGhzLiBUaGUgdmFsdWUgaXMgUkVRVUlSRUQgdG8gYmVnaW4gd2l0aCBhIGxlYWRpbmcgYC9gLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnLydcbiAgICovXG4gIHJlYWRvbmx5IHBhdGhQcmVmaXg/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQXV0b21hdGljYWxseSBpbnZhbGlkYXRlcyBwYXRocyBmcm9tIGEgQ2xvdWRGcm9udCBkaXN0cmlidXRpb24gYmFzZWQgb24gUzNcbiAqIG9iamVjdCB1cGRhdGVzLiBUaGUgaW52YWxpZGF0ZWQgcGF0aHMgYXJlIGNvbnN0cnVjdGVkIGZyb20gdGhlIFMzIG9iamVjdCBrZXlzXG4gKiBiZWluZyB1cGRhdGVkLCBjb21iaW5lZCB3aXRoIGFuIG9wdGlvbmFsIHBhdGggcHJlZml4LlxuICovXG5leHBvcnQgY2xhc3MgQ2FjaGVJbnZhbGlkYXRvciBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQ2FjaGVJbnZhbGlkYXRvclByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGlmIChwcm9wcy5wYXRoUHJlZml4ICE9IG51bGwgJiYgIVRva2VuLmlzVW5yZXNvbHZlZChwcm9wcy5wYXRoUHJlZml4KSAmJiAhcHJvcHMucGF0aFByZWZpeC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHBhdGhQcmVmaXggbXVzdCBzdGFydCB3aXRoIGEgbGVhZGluZyAvJyk7XG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlciA9IG5ldyBIYW5kbGVyKHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBgQXV0b21hdGVkIGNhY2hlIGludmFsaWRhdGlvbiBvbiBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbiAke3Byb3BzLmRpc3RyaWJ1dGlvbi5kaXN0cmlidXRpb25JZH1gLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgRElTVFJJQlVUSU9OX0lEOiBwcm9wcy5kaXN0cmlidXRpb24uZGlzdHJpYnV0aW9uSWQsXG4gICAgICAgIFBBVEhfUFJFRklYOiBwcm9wcy5wYXRoUHJlZml4ID8/ICcvJyxcbiAgICAgIH0sXG4gICAgICBtZW1vcnlTaXplOiAxXzAyNCxcbiAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoMSksXG4gICAgfSk7XG5cbiAgICBoYW5kbGVyLmFkZFRvUm9sZVBvbGljeShuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogWydjbG91ZGZyb250OkNyZWF0ZUludmFsaWRhdGlvbiddLFxuICAgICAgcmVzb3VyY2VzOiBbJyonXSwgLy8gQ3JlYXRlSW52YWxpZGF0aW9uIGRvZXMgbm90IHN1cHBvcnQgcmVzb3VyY2Ugc2NvcGluZ1xuICAgIH0pKTtcblxuICAgIC8vIGludmFsaWRhdGUgY2FjaGUgd2hlbiBhIGZpbGUgd2FzIGNyZWF0ZWQvcmVtb3ZlZCBmcm9tIHRoZSBidWNrZXRcbiAgICBoYW5kbGVyLmFkZEV2ZW50U291cmNlKG5ldyBTM0V2ZW50U291cmNlKHByb3BzLmJ1Y2tldCwge1xuICAgICAgZXZlbnRzOiBbRXZlbnRUeXBlLk9CSkVDVF9DUkVBVEVELCBFdmVudFR5cGUuT0JKRUNUX1JFTU9WRURdLFxuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYWdlIG9mIFMzIGV2ZW50cyBwcm9jZXNzZWQgYnkgdGhlIGNhY2hlIGludmFsaWRhdG9yLiBCeSBkZWZhdWx0IHRoaXNcbiAgICogaXMgdGhlIE1BWElNVU0gdmFsdWUgb3ZlciBhIDUgbWludXRlcyBwZXJpb2QuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljUzNFdmVudEFnZShvcHRzOiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gbmV3IE1ldHJpYyh7XG4gICAgICBwZXJpb2Q6IER1cmF0aW9uLm1pbnV0ZXMoNSksXG4gICAgICBzdGF0aXN0aWM6IFN0YXRpc3RpYy5NQVhJTVVNLFxuICAgICAgLi4ub3B0cyxcbiAgICAgIG1ldHJpY05hbWU6IE1ldHJpY05hbWUuUzNfRVZFTlRfQUdFLFxuICAgICAgbmFtZXNwYWNlOiBNRVRSSUNTX05BTUVTUEFDRSxcbiAgICB9KTtcbiAgfVxufVxuIl19