@liflig/cdk 1.48.1 → 1.51.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/cloudtrail-slack-integration-lambda/main.py +249 -0
- package/lib/cdk-deploy/start-deploy-handler.js +1 -1
- package/lib/cloudtrail-slack-integration/cloudtrail-slack-integration.d.ts +43 -0
- package/lib/cloudtrail-slack-integration/cloudtrail-slack-integration.js +210 -0
- package/lib/cloudtrail-slack-integration/index.d.ts +1 -0
- package/lib/cloudtrail-slack-integration/index.js +6 -0
- package/lib/ecs-update-image/start-deploy-handler.js +1 -2
- package/lib/index.d.ts +2 -1
- package/lib/index.js +4 -2
- package/lib/kinesis/index.d.ts +1 -0
- package/lib/kinesis/index.js +6 -0
- package/lib/kinesis/kinesis-to-datadog-stream.d.ts +27 -0
- package/lib/kinesis/kinesis-to-datadog-stream.js +124 -0
- package/lib/snapshots.js +1 -1
- package/lib/webapp/security-headers.d.ts +40 -0
- package/lib/webapp/security-headers.js +126 -0
- package/lib/webapp/webapp.d.ts +23 -0
- package/lib/webapp/webapp.js +15 -1
- package/package.json +47 -46
package/lib/index.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ import * as webapp from "./webapp";
|
|
|
7
7
|
import * as configureParameters from "./configure-parameters";
|
|
8
8
|
import * as ecs from "./ecs";
|
|
9
9
|
import * as loadBalancer from "./load-balancer";
|
|
10
|
+
import * as cloudTrailSlackIntegration from "./cloudtrail-slack-integration";
|
|
10
11
|
import * as rds from "./rds";
|
|
11
12
|
import * as platform from "./platform";
|
|
12
13
|
export { BastionHost } from "./bastion-host";
|
|
@@ -20,7 +21,7 @@ export { SsmParameterBackedResource } from "./ssm-parameter-backed-resource";
|
|
|
20
21
|
export { SsmParameterReader } from "./ssm-parameter-reader";
|
|
21
22
|
export { tagResources } from "./tags";
|
|
22
23
|
export { WebappDeployViaRole } from "./webapp-deploy-via-role";
|
|
23
|
-
export { alarms, cdkPipelines, griid, pipelines, ses, webapp, configureParameters, ecs, loadBalancer, rds, platform, };
|
|
24
|
+
export { alarms, cdkPipelines, griid, pipelines, ses, webapp, configureParameters, ecs, loadBalancer, rds, platform, cloudTrailSlackIntegration, };
|
|
24
25
|
/**
|
|
25
26
|
* Check if we are synthesizing a snapshot by setting IS_SNAPSHOT
|
|
26
27
|
* environment variable to true.
|
package/lib/index.js
CHANGED
|
@@ -10,7 +10,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
10
10
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
11
11
|
};
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
-
exports.isSnapshot = exports.platform = exports.rds = exports.loadBalancer = exports.ecs = exports.configureParameters = exports.webapp = exports.ses = exports.pipelines = exports.griid = exports.cdkPipelines = exports.alarms = exports.WebappDeployViaRole = exports.tagResources = exports.SsmParameterReader = exports.SsmParameterBackedResource = exports.createCloudAssemblySnapshot = exports.HostedZoneWithParam = exports.CrossRegionSsmParameter = exports.BastionHost = void 0;
|
|
13
|
+
exports.isSnapshot = exports.cloudTrailSlackIntegration = exports.platform = exports.rds = exports.loadBalancer = exports.ecs = exports.configureParameters = exports.webapp = exports.ses = exports.pipelines = exports.griid = exports.cdkPipelines = exports.alarms = exports.WebappDeployViaRole = exports.tagResources = exports.SsmParameterReader = exports.SsmParameterBackedResource = exports.createCloudAssemblySnapshot = exports.HostedZoneWithParam = exports.CrossRegionSsmParameter = exports.BastionHost = void 0;
|
|
14
14
|
const alarms = require("./alarms");
|
|
15
15
|
exports.alarms = alarms;
|
|
16
16
|
const cdkPipelines = require("./cdk-pipelines");
|
|
@@ -29,6 +29,8 @@ const ecs = require("./ecs");
|
|
|
29
29
|
exports.ecs = ecs;
|
|
30
30
|
const loadBalancer = require("./load-balancer");
|
|
31
31
|
exports.loadBalancer = loadBalancer;
|
|
32
|
+
const cloudTrailSlackIntegration = require("./cloudtrail-slack-integration");
|
|
33
|
+
exports.cloudTrailSlackIntegration = cloudTrailSlackIntegration;
|
|
32
34
|
const rds = require("./rds");
|
|
33
35
|
exports.rds = rds;
|
|
34
36
|
const platform = require("./platform");
|
|
@@ -62,4 +64,4 @@ Object.defineProperty(exports, "WebappDeployViaRole", { enumerable: true, get: f
|
|
|
62
64
|
* happen during snapshot creation.
|
|
63
65
|
*/
|
|
64
66
|
exports.isSnapshot = process.env.IS_SNAPSHOT === "true";
|
|
65
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBLG1DQUFrQztBQTZCaEMsd0JBQU07QUE1QlIsZ0RBQStDO0FBNkI3QyxvQ0FBWTtBQTVCZCxpQ0FBZ0M7QUE2QjlCLHNCQUFLO0FBNUJQLHlDQUF3QztBQTZCdEMsOEJBQVM7QUE1QlgsNkJBQTRCO0FBNkIxQixrQkFBRztBQTVCTCxtQ0FBa0M7QUE2QmhDLHdCQUFNO0FBNUJSLDhEQUE2RDtBQTZCM0Qsa0RBQW1CO0FBNUJyQiw2QkFBNEI7QUE2QjFCLGtCQUFHO0FBNUJMLGdEQUErQztBQTZCN0Msb0NBQVk7QUE1QmQsNkVBQTRFO0FBK0IxRSxnRUFBMEI7QUE5QjVCLDZCQUE0QjtBQTRCMUIsa0JBQUc7QUEzQkwsdUNBQXNDO0FBNEJwQyw0QkFBUTtBQTFCVixnRUFBZ0U7QUFDaEUsdUNBQXVDO0FBRXZDLCtDQUE0QztBQUFuQywyR0FBQSxXQUFXLE9BQUE7QUFDcEIsb0RBQWlDO0FBQ2pDLCtDQUE0QjtBQUM1QiwyRUFBc0U7QUFBN0QscUlBQUEsdUJBQXVCLE9BQUE7QUFDaEMscURBQWtDO0FBQ2xDLG1FQUE4RDtBQUFyRCw2SEFBQSxtQkFBbUIsT0FBQTtBQUM1Qix5Q0FBeUQ7QUFBaEQsd0hBQUEsMkJBQTJCLE9BQUE7QUFDcEMsaUZBQTRFO0FBQW5FLDJJQUFBLDBCQUEwQixPQUFBO0FBQ25DLCtEQUEyRDtBQUFsRCwwSEFBQSxrQkFBa0IsT0FBQTtBQUMzQiwrQkFBcUM7QUFBNUIsb0dBQUEsWUFBWSxPQUFBO0FBQ3JCLG1FQUE4RDtBQUFyRCw2SEFBQSxtQkFBbUIsT0FBQTtBQWlCNUI7Ozs7OztHQU1HO0FBQ1UsUUFBQSxVQUFVLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEtBQUssTUFBTSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYWxhcm1zIGZyb20gXCIuL2FsYXJtc1wiXG5pbXBvcnQgKiBhcyBjZGtQaXBlbGluZXMgZnJvbSBcIi4vY2RrLXBpcGVsaW5lc1wiXG5pbXBvcnQgKiBhcyBncmlpZCBmcm9tIFwiLi9ncmlpZFwiXG5pbXBvcnQgKiBhcyBwaXBlbGluZXMgZnJvbSBcIi4vcGlwZWxpbmVzXCJcbmltcG9ydCAqIGFzIHNlcyBmcm9tIFwiLi9zZXNcIlxuaW1wb3J0ICogYXMgd2ViYXBwIGZyb20gXCIuL3dlYmFwcFwiXG5pbXBvcnQgKiBhcyBjb25maWd1cmVQYXJhbWV0ZXJzIGZyb20gXCIuL2NvbmZpZ3VyZS1wYXJhbWV0ZXJzXCJcbmltcG9ydCAqIGFzIGVjcyBmcm9tIFwiLi9lY3NcIlxuaW1wb3J0ICogYXMgbG9hZEJhbGFuY2VyIGZyb20gXCIuL2xvYWQtYmFsYW5jZXJcIlxuaW1wb3J0ICogYXMgY2xvdWRUcmFpbFNsYWNrSW50ZWdyYXRpb24gZnJvbSBcIi4vY2xvdWR0cmFpbC1zbGFjay1pbnRlZ3JhdGlvblwiXG5pbXBvcnQgKiBhcyByZHMgZnJvbSBcIi4vcmRzXCJcbmltcG9ydCAqIGFzIHBsYXRmb3JtIGZyb20gXCIuL3BsYXRmb3JtXCJcblxuLy8gVE9ETzogV2Ugd2FudCB0byBzd2l0Y2ggZXhwb3J0cyBzbyB0aGV5IGV2ZXJ5IGNvbnN0cnVjdCB1bmRlclxuLy8gIGEgbmFtZXNwYWNlIHN1Y2ggYXMgdGhlIHNucyBleHBvcnQuXG5cbmV4cG9ydCB7IEJhc3Rpb25Ib3N0IH0gZnJvbSBcIi4vYmFzdGlvbi1ob3N0XCJcbmV4cG9ydCAqIGZyb20gXCIuL2J1aWxkLWFydGlmYWN0c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9jZGstZGVwbG95XCJcbmV4cG9ydCB7IENyb3NzUmVnaW9uU3NtUGFyYW1ldGVyIH0gZnJvbSBcIi4vY3Jvc3MtcmVnaW9uLXNzbS1wYXJhbWV0ZXJcIlxuZXhwb3J0ICogZnJvbSBcIi4vZWNzLXVwZGF0ZS1pbWFnZVwiXG5leHBvcnQgeyBIb3N0ZWRab25lV2l0aFBhcmFtIH0gZnJvbSBcIi4vaG9zdGVkLXpvbmUtd2l0aC1wYXJhbVwiXG5leHBvcnQgeyBjcmVhdGVDbG91ZEFzc2VtYmx5U25hcHNob3QgfSBmcm9tIFwiLi9zbmFwc2hvdHNcIlxuZXhwb3J0IHsgU3NtUGFyYW1ldGVyQmFja2VkUmVzb3VyY2UgfSBmcm9tIFwiLi9zc20tcGFyYW1ldGVyLWJhY2tlZC1yZXNvdXJjZVwiXG5leHBvcnQgeyBTc21QYXJhbWV0ZXJSZWFkZXIgfSBmcm9tIFwiLi9zc20tcGFyYW1ldGVyLXJlYWRlclwiXG5leHBvcnQgeyB0YWdSZXNvdXJjZXMgfSBmcm9tIFwiLi90YWdzXCJcbmV4cG9ydCB7IFdlYmFwcERlcGxveVZpYVJvbGUgfSBmcm9tIFwiLi93ZWJhcHAtZGVwbG95LXZpYS1yb2xlXCJcblxuZXhwb3J0IHtcbiAgYWxhcm1zLFxuICBjZGtQaXBlbGluZXMsXG4gIGdyaWlkLFxuICBwaXBlbGluZXMsXG4gIHNlcyxcbiAgd2ViYXBwLFxuICBjb25maWd1cmVQYXJhbWV0ZXJzLFxuICBlY3MsXG4gIGxvYWRCYWxhbmNlcixcbiAgcmRzLFxuICBwbGF0Zm9ybSxcbiAgY2xvdWRUcmFpbFNsYWNrSW50ZWdyYXRpb24sXG59XG5cbi8qKlxuICogQ2hlY2sgaWYgd2UgYXJlIHN5bnRoZXNpemluZyBhIHNuYXBzaG90IGJ5IHNldHRpbmcgSVNfU05BUFNIT1RcbiAqIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHRydWUuXG4gKlxuICogVGhpcyBhbGxvd3MgZm9yIHNwZWNpYWwgY29uZGl0aW9uYWwgbG9naWMgdGhhdCBzaG91bGQgb25seVxuICogaGFwcGVuIGR1cmluZyBzbmFwc2hvdCBjcmVhdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IGlzU25hcHNob3QgPSBwcm9jZXNzLmVudi5JU19TTkFQU0hPVCA9PT0gXCJ0cnVlXCJcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { KinesisToDatadogStream, KinesisToDatadogStreamProps, } from "./kinesis-to-datadog-stream";
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.KinesisToDatadogStream = void 0;
|
|
4
|
+
var kinesis_to_datadog_stream_1 = require("./kinesis-to-datadog-stream");
|
|
5
|
+
Object.defineProperty(exports, "KinesisToDatadogStream", { enumerable: true, get: function () { return kinesis_to_datadog_stream_1.KinesisToDatadogStream; } });
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMva2luZXNpcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5RUFHb0M7QUFGbEMsbUlBQUEsc0JBQXNCLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQge1xuICBLaW5lc2lzVG9EYXRhZG9nU3RyZWFtLFxuICBLaW5lc2lzVG9EYXRhZG9nU3RyZWFtUHJvcHMsXG59IGZyb20gXCIuL2tpbmVzaXMtdG8tZGF0YWRvZy1zdHJlYW1cIlxuIl19
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import * as logs from "@aws-cdk/aws-logs";
|
|
2
|
+
import * as cdk from "@aws-cdk/core";
|
|
3
|
+
export interface KinesisToDatadogStreamProps {
|
|
4
|
+
/**
|
|
5
|
+
*
|
|
6
|
+
* The name of the SecretsManager secret where your Datadog API key is saved.
|
|
7
|
+
*
|
|
8
|
+
* The secret must be a JSON object on the format { "value": "SECRET" }
|
|
9
|
+
*
|
|
10
|
+
*/
|
|
11
|
+
datadogApiKeySecretName: string;
|
|
12
|
+
/**
|
|
13
|
+
*
|
|
14
|
+
* The CloudWatch log groups from you are streaming to Datadog
|
|
15
|
+
*
|
|
16
|
+
*/
|
|
17
|
+
logGroups: logs.LogGroup[];
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
*
|
|
21
|
+
* Forwards logs from log-groups in CloudWatch to a Datadog account.
|
|
22
|
+
* The logs are delivered through a Firehose delivery stream, which is being subscribed to the log-groups in CloudWatch.
|
|
23
|
+
*
|
|
24
|
+
*/
|
|
25
|
+
export declare class KinesisToDatadogStream extends cdk.Construct {
|
|
26
|
+
constructor(scope: cdk.Construct, id: string, props: KinesisToDatadogStreamProps);
|
|
27
|
+
}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.KinesisToDatadogStream = void 0;
|
|
4
|
+
const iam = require("@aws-cdk/aws-iam");
|
|
5
|
+
const firehose = require("@aws-cdk/aws-kinesisfirehose");
|
|
6
|
+
const logs = require("@aws-cdk/aws-logs");
|
|
7
|
+
const s3 = require("@aws-cdk/aws-s3");
|
|
8
|
+
const aws_s3_1 = require("@aws-cdk/aws-s3");
|
|
9
|
+
const secretsmanager = require("@aws-cdk/aws-secretsmanager");
|
|
10
|
+
const cdk = require("@aws-cdk/core");
|
|
11
|
+
/**
|
|
12
|
+
*
|
|
13
|
+
* Forwards logs from log-groups in CloudWatch to a Datadog account.
|
|
14
|
+
* The logs are delivered through a Firehose delivery stream, which is being subscribed to the log-groups in CloudWatch.
|
|
15
|
+
*
|
|
16
|
+
*/
|
|
17
|
+
class KinesisToDatadogStream extends cdk.Construct {
|
|
18
|
+
constructor(scope, id, props) {
|
|
19
|
+
super(scope, id);
|
|
20
|
+
const deliveryStreamLogGroup = new logs.LogGroup(this, "DeliveryStreamLogGroup");
|
|
21
|
+
const deliveryStreamLogStream = new logs.LogStream(this, "DeliveryStreamLogStream", {
|
|
22
|
+
logGroup: deliveryStreamLogGroup,
|
|
23
|
+
});
|
|
24
|
+
const failedDataBucket = new s3.Bucket(this, "FailedDataBucket", {
|
|
25
|
+
blockPublicAccess: aws_s3_1.BlockPublicAccess.BLOCK_ALL,
|
|
26
|
+
});
|
|
27
|
+
const cloudWatchLogsRole = new iam.Role(this, "CloudWatchLogsRole", {
|
|
28
|
+
assumedBy: new iam.ServicePrincipal(`logs.${cdk.Stack.of(this).region}.amazonaws.com`),
|
|
29
|
+
});
|
|
30
|
+
const firehoseLogsRole = new iam.Role(this, "FirehoseLogsRole", {
|
|
31
|
+
assumedBy: new iam.ServicePrincipal("firehose.amazonaws.com"),
|
|
32
|
+
});
|
|
33
|
+
const datadogDeliveryStream = new firehose.CfnDeliveryStream(this, "DeliveryStream", {
|
|
34
|
+
deliveryStreamType: "DirectPut",
|
|
35
|
+
httpEndpointDestinationConfiguration: {
|
|
36
|
+
roleArn: firehoseLogsRole.roleArn,
|
|
37
|
+
endpointConfiguration: {
|
|
38
|
+
url: "https://aws-kinesis-http-intake.logs.datadoghq.eu/v1/input",
|
|
39
|
+
accessKey: secretsmanager.Secret.fromSecretNameV2(scope, "DatadogApiKey", props.datadogApiKeySecretName)
|
|
40
|
+
.secretValueFromJson("value")
|
|
41
|
+
.toString(),
|
|
42
|
+
name: "datadog-logs-endpoint",
|
|
43
|
+
},
|
|
44
|
+
requestConfiguration: {
|
|
45
|
+
contentEncoding: "GZIP",
|
|
46
|
+
},
|
|
47
|
+
cloudWatchLoggingOptions: {
|
|
48
|
+
enabled: true,
|
|
49
|
+
logGroupName: deliveryStreamLogGroup.logGroupName,
|
|
50
|
+
logStreamName: deliveryStreamLogStream.logStreamName,
|
|
51
|
+
},
|
|
52
|
+
bufferingHints: {
|
|
53
|
+
intervalInSeconds: 60,
|
|
54
|
+
sizeInMBs: 4,
|
|
55
|
+
},
|
|
56
|
+
retryOptions: {
|
|
57
|
+
durationInSeconds: 60,
|
|
58
|
+
},
|
|
59
|
+
s3BackupMode: "FailedDataOnly",
|
|
60
|
+
s3Configuration: {
|
|
61
|
+
bucketArn: failedDataBucket.bucketArn,
|
|
62
|
+
compressionFormat: "UNCOMPRESSED",
|
|
63
|
+
roleArn: firehoseLogsRole.roleArn,
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
});
|
|
67
|
+
new iam.Policy(this, "CloudWatchLogsPolicy", {
|
|
68
|
+
document: new iam.PolicyDocument({
|
|
69
|
+
statements: [
|
|
70
|
+
new iam.PolicyStatement({
|
|
71
|
+
actions: ["firehose:PutRecord", "firehose:PutRecordBatch"],
|
|
72
|
+
resources: [datadogDeliveryStream.attrArn],
|
|
73
|
+
}),
|
|
74
|
+
],
|
|
75
|
+
}),
|
|
76
|
+
roles: [cloudWatchLogsRole],
|
|
77
|
+
});
|
|
78
|
+
new iam.Policy(this, "FirehoseLogsPolicy", {
|
|
79
|
+
document: new iam.PolicyDocument({
|
|
80
|
+
statements: [
|
|
81
|
+
new iam.PolicyStatement({
|
|
82
|
+
actions: [
|
|
83
|
+
"s3:AbortMultipartUpload",
|
|
84
|
+
"s3:GetBucketLocation",
|
|
85
|
+
"s3:GetObject",
|
|
86
|
+
"s3:ListBucket",
|
|
87
|
+
"s3:ListBucketMultipartUploads",
|
|
88
|
+
"s3:PutObject",
|
|
89
|
+
],
|
|
90
|
+
resources: [
|
|
91
|
+
failedDataBucket.bucketArn,
|
|
92
|
+
`${failedDataBucket.bucketArn}/*`,
|
|
93
|
+
],
|
|
94
|
+
}),
|
|
95
|
+
new iam.PolicyStatement({
|
|
96
|
+
actions: ["logs:PutLogEvents"],
|
|
97
|
+
resources: [
|
|
98
|
+
`arn:aws:logs:${cdk.Stack.of(this).region}:${cdk.Stack.of(this).account}:log-group:${deliveryStreamLogGroup.logGroupName}:log-stream:${deliveryStreamLogStream.logStreamName}`,
|
|
99
|
+
],
|
|
100
|
+
}),
|
|
101
|
+
new iam.PolicyStatement({
|
|
102
|
+
actions: [
|
|
103
|
+
"kinesis:DescribeStream",
|
|
104
|
+
"kinesis:GetShardIterator",
|
|
105
|
+
"kinesis:GetRecords",
|
|
106
|
+
],
|
|
107
|
+
resources: [datadogDeliveryStream.attrArn],
|
|
108
|
+
}),
|
|
109
|
+
],
|
|
110
|
+
}),
|
|
111
|
+
roles: [firehoseLogsRole],
|
|
112
|
+
});
|
|
113
|
+
props.logGroups.forEach((logGroup, index) => {
|
|
114
|
+
new logs.CfnSubscriptionFilter(this, `SubscriptionFilter${index}`, {
|
|
115
|
+
logGroupName: logGroup.logGroupName,
|
|
116
|
+
destinationArn: datadogDeliveryStream.attrArn,
|
|
117
|
+
filterPattern: logs.FilterPattern.allEvents().logPatternString,
|
|
118
|
+
roleArn: cloudWatchLogsRole.roleArn,
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
exports.KinesisToDatadogStream = KinesisToDatadogStream;
|
|
124
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2luZXNpcy10by1kYXRhZG9nLXN0cmVhbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9raW5lc2lzL2tpbmVzaXMtdG8tZGF0YWRvZy1zdHJlYW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsd0NBQXVDO0FBQ3ZDLHlEQUF3RDtBQUN4RCwwQ0FBeUM7QUFDekMsc0NBQXFDO0FBQ3JDLDRDQUFtRDtBQUNuRCw4REFBNkQ7QUFDN0QscUNBQW9DO0FBbUJwQzs7Ozs7R0FLRztBQUNILE1BQWEsc0JBQXVCLFNBQVEsR0FBRyxDQUFDLFNBQVM7SUFDdkQsWUFDRSxLQUFvQixFQUNwQixFQUFVLEVBQ1YsS0FBa0M7UUFFbEMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUVoQixNQUFNLHNCQUFzQixHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FDOUMsSUFBSSxFQUNKLHdCQUF3QixDQUN6QixDQUFBO1FBRUQsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQ2hELElBQUksRUFDSix5QkFBeUIsRUFDekI7WUFDRSxRQUFRLEVBQUUsc0JBQXNCO1NBQ2pDLENBQ0YsQ0FBQTtRQUVELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxrQkFBa0IsRUFBRTtZQUMvRCxpQkFBaUIsRUFBRSwwQkFBaUIsQ0FBQyxTQUFTO1NBQy9DLENBQUMsQ0FBQTtRQUVGLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxvQkFBb0IsRUFBRTtZQUNsRSxTQUFTLEVBQUUsSUFBSSxHQUFHLENBQUMsZ0JBQWdCLENBQ2pDLFFBQVEsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxnQkFBZ0IsQ0FDbEQ7U0FDRixDQUFDLENBQUE7UUFFRixNQUFNLGdCQUFnQixHQUFH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QkFDSDtxQkFDRixDQUFDO29CQUNGLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQzt3QkFDdEIsT0FBTyxFQUFFOzRCQUNQLHdCQUF3Qjs0QkFDeEIsMEJBQTBCOzRCQUMxQixvQkFBb0I7eUJBQ3JCO3dCQUNELFNBQVMsRUFBRSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQztxQkFDM0MsQ0FBQztpQkFDSDthQUNGLENBQUM7WUFDRixLQUFLLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztTQUMxQixDQUFDLENBQUE7UUFFRixLQUFLLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUMxQyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUscUJBQXFCLEtBQUssRUFBRSxFQUFFO2dCQUNqRSxZQUFZLEVBQUUsUUFBUSxDQUFDLFlBQVk7Z0JBQ25DLGNBQWMsRUFBRSxxQkFBcUIsQ0FBQyxPQUFPO2dCQUM3QyxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxnQkFBZ0I7Z0JBQzlELE9BQU8sRUFBRSxrQkFBa0IsQ0FBQyxPQUFPO2FBQ3BDLENBQUMsQ0FBQTtRQUNKLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztDQUNGO0FBM0lELHdEQTJJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGlhbSBmcm9tIFwiQGF3cy1jZGsvYXdzLWlhbVwiXG5pbXBvcnQgKiBhcyBmaXJlaG9zZSBmcm9tIFwiQGF3cy1jZGsvYXdzLWtpbmVzaXNmaXJlaG9zZVwiXG5pbXBvcnQgKiBhcyBsb2dzIGZyb20gXCJAYXdzLWNkay9hd3MtbG9nc1wiXG5pbXBvcnQgKiBhcyBzMyBmcm9tIFwiQGF3cy1jZGsvYXdzLXMzXCJcbmltcG9ydCB7IEJsb2NrUHVibGljQWNjZXNzIH0gZnJvbSBcIkBhd3MtY2RrL2F3cy1zM1wiXG5pbXBvcnQgKiBhcyBzZWNyZXRzbWFuYWdlciBmcm9tIFwiQGF3cy1jZGsvYXdzLXNlY3JldHNtYW5hZ2VyXCJcbmltcG9ydCAqIGFzIGNkayBmcm9tIFwiQGF3cy1jZGsvY29yZVwiXG5cbmV4cG9ydCBpbnRlcmZhY2UgS2luZXNpc1RvRGF0YWRvZ1N0cmVhbVByb3BzIHtcbiAgLyoqXG4gICAqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBTZWNyZXRzTWFuYWdlciBzZWNyZXQgd2hlcmUgeW91ciBEYXRhZG9nIEFQSSBrZXkgaXMgc2F2ZWQuXG4gICAqXG4gICAqIFRoZSBzZWNyZXQgbXVzdCBiZSBhIEpTT04gb2JqZWN0IG9uIHRoZSBmb3JtYXQgeyBcInZhbHVlXCI6IFwiU0VDUkVUXCIgfVxuICAgKlxuICAgKi9cbiAgZGF0YWRvZ0FwaUtleVNlY3JldE5hbWU6IHN0cmluZ1xuICAvKipcbiAgICpcbiAgICogVGhlIENsb3VkV2F0Y2ggbG9nIGdyb3VwcyBmcm9tIHlvdSBhcmUgc3RyZWFtaW5nIHRvIERhdGFkb2dcbiAgICpcbiAgICovXG4gIGxvZ0dyb3VwczogbG9ncy5Mb2dHcm91cFtdXG59XG5cbi8qKlxuICpcbiAqIEZvcndhcmRzIGxvZ3MgZnJvbSBsb2ctZ3JvdXBzIGluIENsb3VkV2F0Y2ggdG8gYSBEYXRhZG9nIGFjY291bnQuXG4gKiBUaGUgbG9ncyBhcmUgZGVsaXZlcmVkIHRocm91Z2ggYSBGaXJlaG9zZSBkZWxpdmVyeSBzdHJlYW0sIHdoaWNoIGlzIGJlaW5nIHN1YnNjcmliZWQgdG8gdGhlIGxvZy1ncm91cHMgaW4gQ2xvdWRXYXRjaC5cbiAqXG4gKi9cbmV4cG9ydCBjbGFzcyBLaW5lc2lzVG9EYXRhZG9nU3RyZWFtIGV4dGVuZHMgY2RrLkNvbnN0cnVjdCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBjZGsuQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IEtpbmVzaXNUb0RhdGFkb2dTdHJlYW1Qcm9wcyxcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKVxuXG4gICAgY29uc3QgZGVsaXZlcnlTdHJlYW1Mb2dHcm91cCA9IG5ldyBsb2dzLkxvZ0dyb3VwKFxuICAgICAgdGhpcyxcbiAgICAgIFwiRGVsaXZlcnlTdHJlYW1Mb2dHcm91cFwiLFxuICAgIClcblxuICAgIGNvbnN0IGRlbGl2ZXJ5U3RyZWFtTG9nU3RyZWFtID0gbmV3IGxvZ3MuTG9nU3RyZWFtKFxuICAgICAgdGhpcyxcbiAgICAgIFwiRGVsaXZlcnlTdHJlYW1Mb2dTdHJlYW1cIixcbiAgICAgIHtcbiAgICAgICAgbG9nR3JvdXA6IGRlbGl2ZXJ5U3RyZWFtTG9nR3JvdXAsXG4gICAgICB9LFxuICAgIClcblxuICAgIGNvbnN0IGZhaWxlZERhdGFCdWNrZXQgPSBuZXcgczMuQnVja2V0KHRoaXMsIFwiRmFpbGVkRGF0YUJ1Y2tldFwiLCB7XG4gICAgICBibG9ja1B1YmxpY0FjY2VzczogQmxvY2tQdWJsaWNBY2Nlc3MuQkxPQ0tfQUxMLFxuICAgIH0pXG5cbiAgICBjb25zdCBjbG91ZFdhdGNoTG9nc1JvbGUgPSBuZXcgaWFtLlJvbGUodGhpcywgXCJDbG91ZFdhdGNoTG9nc1JvbGVcIiwge1xuICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoXG4gICAgICAgIGBsb2dzLiR7Y2RrLlN0YWNrLm9mKHRoaXMpLnJlZ2lvbn0uYW1hem9uYXdzLmNvbWAsXG4gICAgICApLFxuICAgIH0pXG5cbiAgICBjb25zdCBmaXJlaG9zZUxvZ3NSb2xlID0gbmV3IGlhbS5Sb2xlKHRoaXMsIFwiRmlyZWhvc2VMb2dzUm9sZVwiLCB7XG4gICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbChcImZpcmVob3NlLmFtYXpvbmF3cy5jb21cIiksXG4gICAgfSlcblxuICAgIGNvbnN0IGRhdGFkb2dEZWxpdmVyeVN0cmVhbSA9IG5ldyBmaXJlaG9zZS5DZm5EZWxpdmVyeVN0cmVhbShcbiAgICAgIHRoaXMsXG4gICAgICBcIkRlbGl2ZXJ5U3RyZWFtXCIsXG4gICAgICB7XG4gICAgICAgIGRlbGl2ZXJ5U3RyZWFtVHlwZTogXCJEaXJlY3RQdXRcIixcbiAgICAgICAgaHR0cEVuZHBvaW50RGVzdGluYXRpb25Db25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgcm9sZUFybjogZmlyZWhvc2VMb2dzUm9sZS5yb2xlQXJuLFxuICAgICAgICAgIGVuZHBvaW50Q29uZmlndXJhdGlvbjoge1xuICAgICAgICAgICAgdXJsOiBcImh0dHBzOi8vYXdzLWtpbmVzaXMtaHR0cC1pbnRha2UubG9ncy5kYXRhZG9naHEuZXUvdjEvaW5wdXRcIixcbiAgICAgICAgICAgIGFjY2Vzc0tleTogc2VjcmV0c21hbmFnZXIuU2VjcmV0LmZyb21TZWNyZXROYW1lVjIoXG4gICAgICAgICAgICAgIHNjb3BlLFxuICAgICAgICAgICAgICBcIkRhdGFkb2dBcGlLZXlcIixcbiAgICAgICAgICAgICAgcHJvcHMuZGF0YWRvZ0FwaUtleVNlY3JldE5hbWUsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5zZWNyZXRWYWx1ZUZyb21Kc29uKFwidmFsdWVcIilcbiAgICAgICAgICAgICAgLnRvU3RyaW5nKCksXG4gICAgICAgICAgICBuYW1lOiBcImRhdGFkb2ctbG9ncy1lbmRwb2ludFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVxdWVzdENvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgIGNvbnRlbnRFbmNvZGluZzogXCJHWklQXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjbG91ZFdhdGNoTG9nZ2luZ09wdGlvbnM6IHtcbiAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICBsb2dHcm91cE5hbWU6IGRlbGl2ZXJ5U3RyZWFtTG9nR3JvdXAubG9nR3JvdXBOYW1lLFxuICAgICAgICAgICAgbG9nU3RyZWFtTmFtZTogZGVsaXZlcnlTdHJlYW1Mb2dTdHJlYW0ubG9nU3RyZWFtTmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGJ1ZmZlcmluZ0hpbnRzOiB7XG4gICAgICAgICAgICBpbnRlcnZhbEluU2Vjb25kczogNjAsXG4gICAgICAgICAgICBzaXplSW5NQnM6IDQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXRyeU9wdGlvbnM6IHtcbiAgICAgICAgICAgIGR1cmF0aW9uSW5TZWNvbmRzOiA2MCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHMzQmFja3VwTW9kZTogXCJGYWlsZWREYXRhT25seVwiLFxuICAgICAgICAgIHMzQ29uZmlndXJhdGlvbjoge1xuICAgICAgICAgICAgYnVja2V0QXJuOiBmYWlsZWREYXRhQnVja2V0LmJ1Y2tldEFybixcbiAgICAgICAgICAgIGNvbXByZXNzaW9uRm9ybWF0OiBcIlVOQ09NUFJFU1NFRFwiLFxuICAgICAgICAgICAgcm9sZUFybjogZmlyZWhvc2VMb2dzUm9sZS5yb2xlQXJuLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIClcblxuICAgIG5ldyBpYW0uUG9saWN5KHRoaXMsIFwiQ2xvdWRXYXRjaExvZ3NQb2xpY3lcIiwge1xuICAgICAgZG9jdW1lbnQ6IG5ldyBpYW0uUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgYWN0aW9uczogW1wiZmlyZWhvc2U6UHV0UmVjb3JkXCIsIFwiZmlyZWhvc2U6UHV0UmVjb3JkQmF0Y2hcIl0sXG4gICAgICAgICAgICByZXNvdXJjZXM6IFtkYXRhZG9nRGVsaXZlcnlTdHJlYW0uYXR0ckFybl0sXG4gICAgICAgICAgfSksXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICAgIHJvbGVzOiBbY2xvdWRXYXRjaExvZ3NSb2xlXSxcbiAgICB9KVxuXG4gICAgbmV3IGlhbS5Qb2xpY3kodGhpcywgXCJGaXJlaG9zZUxvZ3NQb2xpY3lcIiwge1xuICAgICAgZG9jdW1lbnQ6IG5ldyBpYW0uUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICBcInMzOkFib3J0TXVsdGlwYXJ0VXBsb2FkXCIsXG4gICAgICAgICAgICAgIFwiczM6R2V0QnVja2V0TG9jYXRpb25cIixcbiAgICAgICAgICAgICAgXCJzMzpHZXRPYmplY3RcIixcbiAgICAgICAgICAgICAgXCJzMzpMaXN0QnVja2V0XCIsXG4gICAgICAgICAgICAgIFwiczM6TGlzdEJ1Y2tldE11bHRpcGFydFVwbG9hZHNcIixcbiAgICAgICAgICAgICAgXCJzMzpQdXRPYmplY3RcIixcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICAgICAgZmFpbGVkRGF0YUJ1Y2tldC5idWNrZXRBcm4sXG4gICAgICAgICAgICAgIGAke2ZhaWxlZERhdGFCdWNrZXQuYnVja2V0QXJufS8qYCxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgYWN0aW9uczogW1wibG9nczpQdXRMb2dFdmVudHNcIl0sXG4gICAgICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICAgICAgYGFybjphd3M6bG9nczoke2Nkay5TdGFjay5vZih0aGlzKS5yZWdpb259OiR7XG4gICAgICAgICAgICAgICAgY2RrLlN0YWNrLm9mKHRoaXMpLmFjY291bnRcbiAgICAgICAgICAgICAgfTpsb2ctZ3JvdXA6JHtkZWxpdmVyeVN0cmVhbUxvZ0dyb3VwLmxvZ0dyb3VwTmFtZX06bG9nLXN0cmVhbToke1xuICAgICAgICAgICAgICAgIGRlbGl2ZXJ5U3RyZWFtTG9nU3RyZWFtLmxvZ1N0cmVhbU5hbWVcbiAgICAgICAgICAgICAgfWAsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICAgXCJraW5lc2lzOkRlc2NyaWJlU3RyZWFtXCIsXG4gICAgICAgICAgICAgIFwia2luZXNpczpHZXRTaGFyZEl0ZXJhdG9yXCIsXG4gICAgICAgICAgICAgIFwia2luZXNpczpHZXRSZWNvcmRzXCIsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgcmVzb3VyY2VzOiBbZGF0YWRvZ0RlbGl2ZXJ5U3RyZWFtLmF0dHJBcm5dLFxuICAgICAgICAgIH0pLFxuICAgICAgICBdLFxuICAgICAgfSksXG4gICAgICByb2xlczogW2ZpcmVob3NlTG9nc1JvbGVdLFxuICAgIH0pXG5cbiAgICBwcm9wcy5sb2dHcm91cHMuZm9yRWFjaCgobG9nR3JvdXAsIGluZGV4KSA9PiB7XG4gICAgICBuZXcgbG9ncy5DZm5TdWJzY3JpcHRpb25GaWx0ZXIodGhpcywgYFN1YnNjcmlwdGlvbkZpbHRlciR7aW5kZXh9YCwge1xuICAgICAgICBsb2dHcm91cE5hbWU6IGxvZ0dyb3VwLmxvZ0dyb3VwTmFtZSxcbiAgICAgICAgZGVzdGluYXRpb25Bcm46IGRhdGFkb2dEZWxpdmVyeVN0cmVhbS5hdHRyQXJuLFxuICAgICAgICBmaWx0ZXJQYXR0ZXJuOiBsb2dzLkZpbHRlclBhdHRlcm4uYWxsRXZlbnRzKCkubG9nUGF0dGVyblN0cmluZyxcbiAgICAgICAgcm9sZUFybjogY2xvdWRXYXRjaExvZ3NSb2xlLnJvbGVBcm4sXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbiJdfQ==
|
package/lib/snapshots.js
CHANGED
|
@@ -209,4 +209,4 @@ async function createCloudAssemblySnapshot(src, dst) {
|
|
|
209
209
|
}
|
|
210
210
|
}
|
|
211
211
|
exports.createCloudAssemblySnapshot = createCloudAssemblySnapshot;
|
|
212
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hcHNob3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3NuYXBzaG90cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw0REFBNEQ7QUFDNUQsK0RBQStEO0FBQy9ELHdEQUF3RDtBQUN4RCwyQkFBMEI7QUFDMUIsMkJBQTBCO0FBQzFCLHlCQUF3QjtBQUN4Qiw2QkFBNEI7QUFDNUIsNkJBQTRCO0FBRTVCLDhEQUE4RDtBQUM5RCxTQUFTLGFBQWEsQ0FBQyxJQUFTO0lBQzlCLE1BQU0sRUFBRSxHQUFHO1FBQ1QsR0FBRyxJQUFJO0tBQ1IsQ0FBQTtJQUVELE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQTtJQUNqQixPQUFPLEVBQUUsQ0FBQTtBQUNYLENBQUM7QUFFRCw4REFBOEQ7QUFDOUQsU0FBUyxXQUFXLENBQUMsSUFBUztJQUM1QixJQUFJLElBQUksWUFBWSxLQUFLLEVBQUU7UUFDekIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFBO0tBQzdCO0lBRUQsSUFBSSxJQUFJLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3pCLE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FDdkIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7YUFDakIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLE9BQU8sQ0FBQzthQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FDcEQsQ0FBQTtLQUNGO0lBRUQsT0FBTyxJQUFJLENBQUE7QUFDYixDQUFDO0FBRUQsOERBQThEO0FBQzlELFNBQVMsc0JBQXNCLENBQUMsSUFBUztJQUN2QyxNQUFNLEVBQUUsR0FBRztRQUNULEdBQUcsSUFBSTtLQUNSLENBQUE7SUFF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QUN2RCxLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRTtRQUMvRCxNQUFNLDhCQUE4QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUE7S0FDNUQ7SUFFRCwyQkFBMkI7SUFDM0IsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUU7UUFDakUsTUFBTSw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFBO0tBQzVEO0FBQ0gsQ0FBQztBQWpDRCxrRUFpQ0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFzc2lnbm1lbnQgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2VzcyAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm4gKi9cbmltcG9ydCAqIGFzIGNweSBmcm9tIFwiY3B5XCJcbmltcG9ydCAqIGFzIGRlbCBmcm9tIFwiZGVsXCJcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiXG5pbXBvcnQgKiBhcyBnbG9iIGZyb20gXCJnbG9iXCJcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIlxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZnVuY3Rpb24gcmVtb3ZlVmVyc2lvbihkYXRhOiBhbnkpOiBhbnkge1xuICBjb25zdCBjcCA9IHtcbiAgICAuLi5kYXRhLFxuICB9XG5cbiAgZGVsZXRlIGNwLnZlcnNpb25cbiAgcmV0dXJuIGNwXG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5mdW5jdGlvbiByZW1vdmVUcmFjZShkYXRhOiBhbnkpOiBhbnkge1xuICBpZiAoZGF0YSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgcmV0dXJuIGRhdGEubWFwKHJlbW92ZVRyYWNlKVxuICB9XG5cbiAgaWYgKGRhdGEgPT09IE9iamVjdChkYXRhKSkge1xuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBPYmplY3QuZW50cmllcyhkYXRhKVxuICAgICAgICAuZmlsdGVyKChba2V5XSkgPT4ga2V5ICE9PSBcInRyYWNlXCIpXG4gICAgICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4gW2tleSwgcmVtb3ZlVHJhY2UodmFsdWUpXSksXG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIGRhdGFcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmZ1bmN0aW9uIHJlbW92ZVJ1bnRpbWVMaWJyYXJpZXMoZGF0YTogYW55KTogYW55IHtcbiAgY29uc3QgY3AgPSB7XG4gICAgLi4uZGF0YSxcbiAgfVxuXG4gIGlmIChkYXRhLnJ1bnRpbWUpIHtcbiAgICBjcC5ydW50aW1lID0ge1xuICAgICAgLi4uZGF0YS5ydW50aW1lLFxuICAgIH1cblxuICAgIGRlbGV0ZSBjcC5ydW50aW1lLmxpYnJhcmllc1xuICB9XG5cbiAgcmV0dXJuIGNwXG59XG5cbmNvbnN0IGN1cnJlbnRWZXJzaW9uUmVnZXggPSAvXiguK0N1cnJlbnRWZXJzaW9uWzAtOUEtRl17OH0pWzAtOWEtZl17MzJ9JC9cblxuLyoqXG4gKiBNYXRjaCBhIHJlc291cmNlIGNyZWF0ZWQgYnkgYGxhbWJkYS5GdW5jdGlvbi5jdXJyZW50VmVyc2lvbmAsIHdoaWNoXG4gKiB3aWxsIGluY2x1ZGUgdGhlIGFzc2V0IGhhc2ggYXMgcGFydCBvZiB0aGUgcmVvdXNyY2UgbmFtZSBhbmQgcmV0dXJuXG4gKiBhIHNuYXBzaG90LWZyaWVuZGx5IHZlcnNpb24gb2YgaXQgaWYgZm91bmQuXG4gKi9cbmZ1bmN0aW9uIHJld3JpdGVDdXJyZW50VmVyc2lvbklmRm91bmQodmFsdWU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBtYXRjaCA9IGN1cnJlbnRWZXJzaW9uUmVnZXguZXhlYyh2YWx1ZSlcbiAgcmV0dXJuIG1hdGNoID8gYCR7bWF0Y2hbMV19eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHhgIDogbnVsbFxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZnVuY3Rpb24gcmVtb3ZlQXNzZXREZXRhaWxzRnJvbVRlbXBsYXRlKGRhdGE6IGFueSk6IGFueSB7XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICByZXR1cm4gZGF0YS5tYXAocmVtb3ZlQXNzZXREZXRhaWxzRnJvbVRlbXBsYXRlKVxuICB9XG5cbiAgaWYgKGRhdGEgPT09IE9iamVjdChkYXRhKSkge1xuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBPYmplY3QuZW50cmllcyhkYXRhKVxuICAgICAgICAubWFwKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdDdXJyZW50VmVyc2lvbiA9IHJld3JpdGVDdXJyZW50VmVyc2lvbklmRm91bmQoa2V5KVxuICAgICAgICAgIGlmIChuZXdDdXJyZW50VmVyc2lvbikge1xuICAgICAgICAgICAgcmV0dXJuIFtuZXdDdXJyZW50VmVyc2lvbiwgcmVtb3ZlQXNzZXREZXRhaWxzRnJvbVRlbXBsYXRlKHZhbHVlKV1cbiAgICAgICAgICB9IGVsc2UgaWYgKGtleS5pbmNsdWRlcyhcIkFzc2V0UGFyYW1ldGVyXCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICBrZXkgPT09IFwiUmVmXCIgJiZcbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgdmFsdWUuaW5jbHVkZXMoXCJBc3NldFBhcmFtZXRlcnNcIilcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBba2V5LCBcInNuYXBzaG90LXZhbHVlXCJdXG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIGtleSA9PT0gXCJhd3M6YXNzZXQ6cGF0aFwiICYmXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgIC9hc3NldFxcLlswLTlhLWZdezY0fS8udGVzdCh2YWx1ZSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBba2V5LCBcImFzc2V0LnNuYXBzaG90LXZhbHVlXCJdXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBba2V5LCByZW1vdmVBc3NldERldGFpbHNGcm9tVGVtcGxhdGUodmFsdWUpXVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmZpbHRlcigoaXQpOiBpdCBpcyBbXSA9PiBpdCAhPSBudWxsKSxcbiAgICApXG4gIH1cblxuICBpZiAodHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIpIHtcbiAgICBjb25zdCBuZXdDdXJyZW50VmVyc2lvbiA9IHJld3JpdGVDdXJyZW50VmVyc2lvbklmRm91bmQoZGF0YSlcbiAgICBpZiAobmV3Q3VycmVudFZlcnNpb24pIHtcbiAgICAgIHJldHVybiBuZXdDdXJyZW50VmVyc2lvblxuICAgIH1cblxuICAgIC8vIEhhbmRsZSB0eXBpY2FsIGNvbnRlbnQgaGFzaGVzLlxuICAgIHJldHVybiBkYXRhLnJlcGxhY2UoL1swLTlhLWZdezY0fS9nLCBcInNuYXBzaG90LXZhbHVlXCIpXG4gIH1cblxuICByZXR1cm4gZGF0YVxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZnVuY3Rpb24gcmVtb3ZlQXNzZXREZXRhaWxzRnJvbU1hbmlmZXN0KGRhdGE6IGFueSk6IGFueSB7XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICByZXR1cm4gZGF0YS5tYXAocmVtb3ZlQXNzZXREZXRhaWxzRnJvbU1hbmlmZXN0KVxuICB9XG5cbiAgaWYgKGRhdGEgPT09IE9iamVjdChkYXRhKSkge1xuICAgIC8vIGF3czpjZGs6YXNzZXQgaW4gbWV0YWRhdGFcbiAgICBpZiAoZGF0YVtcInR5cGVcIl0gPT09IFwiYXdzOmNkazphc3NldFwiICYmIFwiZGF0YVwiIGluIGRhdGEpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmRhdGEsXG4gICAgICAgIGRhdGE6IFwic25hcHNob3QtdmFsdWVcIixcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgT2JqZWN0LmVudHJpZXMoZGF0YSlcbiAgICAgICAgLm1hcCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgaWYgKGtleS5pbmNsdWRlcyhcIkFzc2V0UGFyYW1ldGVyc1wiKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFtrZXksIHJlbW92ZUFzc2V0RGV0YWlsc0Zyb21NYW5pZmVzdCh2YWx1ZSldXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuZmlsdGVyKChpdCk6IGl0IGlzIFtdID0+IGl0ICE9IG51bGwpLFxuICAgIClcbiAgfVxuXG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIikge1xuICAgIGNvbnN0IG5ld0N1cnJlbnRWZXJzaW9uID0gcmV3cml0ZUN1cnJlbnRWZXJzaW9uSWZGb3VuZChkYXRhKVxuICAgIGlmIChuZXdDdXJyZW50VmVyc2lvbikge1xuICAgICAgcmV0dXJuIG5ld0N1cnJlbnRWZXJzaW9uXG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHR5cGljYWwgY29udGVudCBoYXNoZXMuXG4gICAgcmV0dXJuIGRhdGEucmVwbGFjZSgvWzAtOWEtZl17NjR9L2csIFwic25hcHNob3QtdmFsdWVcIilcbiAgfVxuXG4gIHJldHVybiBkYXRhXG59XG4vKipcbiAqIFJlbW92ZSB0aGUgQ0RLTWV0YWRhdGEgcmVzb3VyY2VzIHRoYXQgaXMgcGFydCBvZiB0aGUgc3ludGhlc2l6ZWRcbiAqIHRlbXBsYXRlIHNpbmNlIENESyAxLjYzLjAuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5mdW5jdGlvbiByZW1vdmVDZGtNZXRhZGF0YVJlc291cmNlRnJvbVRlbXBsYXRlKGRhdGE6IGFueSk6IGFueSB7XG4gIGNvbnN0IGNwID0ge1xuICAgIC4uLmRhdGEsXG4gICAgUmVzb3VyY2VzOiB7XG4gICAgICAuLi5kYXRhLlJlc291cmNlcyxcbiAgICB9LFxuICB9XG5cbiAgZGVsZXRlIGNwLlJlc291cmNlcy5DREtNZXRhZGF0YVxuICByZXR1cm4gY3Bcbn1cblxuZnVuY3Rpb24gcHJlcGFyZU1hbmlmZXN0Rm9yU25hcHNob3QoY29udGVudDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgaW5wdXQgPSBKU09OLnBhcnNlKGNvbnRlbnQpXG4gIGNvbnN0IG91dHB1dCA9IFtcbiAgICByZW1vdmVWZXJzaW9uLFxuICAgIC8vIFJlbW92ZSB0aGUgcnVudGltZSB2ZXJzaW9uIGluZm9ybWF0aW9uIHNvIGl0IGRvbid0IGNvbmZsaWN0IHdpdGggQ0lcbiAgICAvLyBvciBvdGhlciB1c2VycyBnZW5lcmF0aW5nIHRoZSBzbmFwc2hvdHMuXG4gICAgcmVtb3ZlUnVudGltZUxpYnJhcmllcyxcbiAgICAvLyBSZW1vdmUgdGhlIHRyYWNlIGZyb20gbWFuaWZlc3QgZm9yIG5vdy5cbiAgICByZW1vdmVUcmFjZSxcbiAgICAvLyBBdm9pZCBkZXRhaWxzIChoYXNoZXMpIGZyb20gYXNzZXRzLlxuICAgIHJlbW92ZUFzc2V0RGV0YWlsc0Zyb21NYW5pZmVzdCxcbiAgXS5yZWR1Y2UoKGFjYywgZm4pID0+IGZuKGFjYyksIGlucHV0KVxuXG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShvdXRwdXQsIHVuZGVmaW5lZCwgXCIgIFwiKVxufVxuXG4vKipcbiAqIFRyYW5zZm9ybSB0aGUgQ2xvdWQgQXNzZW1ibHkgbWFuaWZlc3QgZmlsZSBzbyB0aGF0IGl0IGNhbiBiZSBwZXJzaXN0ZWRcbiAqIGFzIGEgc25hcHNob3Qgd2l0aG91dCBjYXVzaW5nIGludmFsaWRhdGlvbnMgZm9yIGV2ZXJ5IHN5bnRoZXNpemUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHByZXBhcmVNYW5pZmVzdEZpbGVGb3JTbmFwc2hvdChmaWxlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcmVzdWx0ID0gcHJlcGFyZU1hbmlmZXN0Rm9yU25hcHNob3QoXG4gICAgYXdhaXQgZnMucHJvbWlzZXMucmVhZEZpbGUoZmlsZSwgXCJ1dGY4XCIpLFxuICApXG5cbiAgYXdhaXQgZnMucHJvbWlzZXMud3JpdGVGaWxlKGZpbGUsIHJlc3VsdClcbn1cblxuZnVuY3Rpb24gcHJlcGFyZVRlbXBsYXRlRm9yU25hcHNob3QoY29udGVudDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgaW5wdXQgPSBKU09OLnBhcnNlKGNvbnRlbnQpXG4gIGNvbnN0IG91dHB1dCA9IFtcbiAgICByZW1vdmVDZGtNZXRhZGF0YVJlc291cmNlRnJvbVRlbXBsYXRlLFxuICAgIC8vIEF2b2lkIGRldGFpbHMgKGhhc2hlcykgZnJvbSBhc3NldHMuXG4gICAgcmVtb3ZlQXNzZXREZXRhaWxzRnJvbVRlbXBsYXRlLFxuICBdLnJlZHVjZSgoYWNjLCBmbikgPT4gZm4oYWNjKSwgaW5wdXQpXG5cbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG91dHB1dCwgdW5kZWZpbmVkLCBcIiAgXCIpXG59XG5cbi8qKlxuICogVHJhbnNmb3JtIGEgQ2xvdWQgQXNzZW1ibHkgdGVtcGxhdGUgZmlsZSBzbyB0aGF0IGl0IGNhbiBiZSBwZXJzaXN0ZWRcbiAqIGFzIGEgc25hcHNob3Qgd2l0aG91dCBjYXVzaW5nIGludmFsaWRhdGlvbnMgZm9yIG1pbm9yIGNoYW5nZXMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHByZXBhcmVUZW1wbGF0ZUZpbGVGb3JTbmFwc2hvdChmaWxlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcmVzdWx0ID0gcHJlcGFyZVRlbXBsYXRlRm9yU25hcHNob3QoXG4gICAgYXdhaXQgZnMucHJvbWlzZXMucmVhZEZpbGUoZmlsZSwgXCJ1dGY4XCIpLFxuICApXG5cbiAgYXdhaXQgZnMucHJvbWlzZXMud3JpdGVGaWxlKGZpbGUsIHJlc3VsdClcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgQ2xvdWQgQXNzZW1ibHkgdG8gYSBzbmFwc2hvdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUNsb3VkQXNzZW1ibHlTbmFwc2hvdChcbiAgc3JjOiBzdHJpbmcsXG4gIGRzdDogc3RyaW5nLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGJhc2UgPSBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgZHN0KVxuXG4gIGF3YWl0IGNweShcIi5cIiwgYmFzZSwge1xuICAgIHBhcmVudHM6IHRydWUsXG4gICAgY3dkOiBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgc3JjKSxcbiAgfSlcblxuICAvLyBEb24ndCBrZWVwIHRyYWNrIG9mIG1hbmlmZXN0IHZlcnNpb24uXG4gIGF3YWl0IGRlbChwYXRoLmpvaW4oZHN0LCBcIioqL2Nkay5vdXRcIikpXG5cbiAgLy8gVGhlIHRyZWUgZmlsZSBkb2Vzbid0IGdpdmUgdXMgbXVjaCB2YWx1ZSBhcyBwYXJ0IG9mIHRoZSBzbmFwc2hvdC5cbiAgYXdhaXQgZGVsKHBhdGguam9pbihkc3QsIFwidHJlZS5qc29uXCIpKVxuXG4gIC8vIFJlbW92ZSBhc3NldCBjb250ZW50cyBmb3Igbm93LlxuICBhd2FpdCBkZWwocGF0aC5qb2luKGRzdCwgXCIqKi9hc3NldC4qXCIpKVxuXG4gIC8vIFJlbW92ZSBhc3NldCBjb25maWdzIHNvIHdlIGRvbid0IGhhdmUgdG8gdXBkYXRlXG4gIC8vIHNuYXBzaG90cyBmb3IgYXNzZXQgY2hhbmdlcy5cbiAgYXdhaXQgZGVsKHBhdGguam9pbihkc3QsIFwiKiovKi5hc3NldHMuanNvblwiKSlcblxuICAvLyBUcmFuc2Zvcm0gdGhlIG1hbmlmZXN0IHRvIGJlIG1vcmUgc25hcHNob3QgZnJpZW5kbHkuXG4gIGZvciAoY29uc3QgZmlsZSBvZiBnbG9iLnN5bmMoXCIqKi9tYW5pZmVzdC5qc29uXCIsIHsgY3dkOiBiYXNlIH0pKSB7XG4gICAgYXdhaXQgcHJlcGFyZU1hbmlmZXN0RmlsZUZvclNuYXBzaG90KHBhdGguam9pbihiYXNlLCBmaWxlKSlcbiAgfVxuXG4gIC8vIFRyYW5zZm9ybSBhbGwgdGVtcGxhdGVzLlxuICBmb3IgKGNvbnN0IGZpbGUgb2YgZ2xvYi5zeW5jKFwiKiovKi50ZW1wbGF0ZS5qc29uXCIsIHsgY3dkOiBiYXNlIH0pKSB7XG4gICAgYXdhaXQgcHJlcGFyZVRlbXBsYXRlRmlsZUZvclNuYXBzaG90KHBhdGguam9pbihiYXNlLCBmaWxlKSlcbiAgfVxufVxuIl19
|
|
212
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hcHNob3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3NuYXBzaG90cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw0REFBNEQ7QUFDNUQsK0RBQStEO0FBQy9ELHdEQUF3RDtBQUN4RCwyQkFBMEI7QUFDMUIsMkJBQTBCO0FBQzFCLHlCQUF3QjtBQUN4Qiw2QkFBNEI7QUFDNUIsNkJBQTRCO0FBRTVCLDhEQUE4RDtBQUM5RCxTQUFTLGFBQWEsQ0FBQyxJQUFTO0lBQzlCLE1BQU0sRUFBRSxHQUFHO1FBQ1QsR0FBRyxJQUFJO0tBQ1IsQ0FBQTtJQUVELE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQTtJQUNqQixPQUFPLEVBQUUsQ0FBQTtBQUNYLENBQUM7QUFFRCw4REFBOEQ7QUFDOUQsU0FBUyxXQUFXLENBQUMsSUFBUztJQUM1QixJQUFJLElBQUksWUFBWSxLQUFLLEVBQUU7UUFDekIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFBO0tBQzdCO0lBRUQsSUFBSSxJQUFJLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3pCLE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FDdkIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUErQixDQUFDO2FBQzVDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyxPQUFPLENBQUM7YUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQ3BELENBQUE7S0FDRjtJQUVELE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQztBQUVELDhEQUE4RDtBQUM5RCxTQUFTLHNCQUFzQixDQUFDLElBQVM7SUFDdkMsTUFBTSxFQUFFLEdBQUc7UUFDVCxHQUFHLElBQUk7S0FDUixDQUFBO0lBRUQsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1FBQ2hCLEVBQUUsQ0FBQyxPQUFPLEdBQUc7WUFDWCxHQUFHLElBQUksQ0FBQyxPQUFPO1NBQ2hCLENBQUE7UUFFRCxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFBO0tBQzVCO0lBRUQsT0FBTyxFQUFFLENBQUE7QUFDWCxDQUFDO0FBRUQsTUFBTSxtQkFBbUIsR0FBRyw2Q0FBNkMsQ0FBQTtBQUV6RTs7OztHQUlHO0FBQ0gsU0FBUyw0QkFBNEIsQ0FBQyxLQUFhO0lBQ2pELE1BQU0sS0FBSyxHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUM3QyxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLGtDQUFrQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7QUFDckUsQ0FBQztBQUVELDhEQUE4RDtBQUM5RCxTQUFTLDhCQUE4QixDQUFDLElBQVM7SUFDL0MsSUFBSSxJQUFJLFlBQVksS0FBSyxFQUFFO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFBO0tBQ2hEO0lBRUQsSUFBSSxJQUFJLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3pCLE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FDdkIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUErQixDQUFDO2FBQzVDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7WUFDcEIsTUFBTSxpQkFBaUIsR0FBRyw0QkFBNEIsQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUMzRCxJQUFJLGlCQUFpQixFQUFFO2dCQUNyQixPQUFPLENBQUMsaUJBQWlCLEVBQUUsOEJBQThCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTthQUNsRTtpQkFBTSxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtnQkFDekMsT0FBTyxJQUFJLENBQUE7YUFDWjtpQkFBTSxJQUNMLEdBQUcsS0FBSyxLQUFLO2dCQUNiLE9BQU8sS0FBSyxLQUFLLFFBQVE7Z0JBQ3pCLEtBQUssQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsRUFDakM7Z0JBQ0EsT0FBTyxDQUFDLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFBO2FBQy9CO2lCQUFNLElBQ0wsR0FBRyxLQUFLLGdCQUFnQjtnQkFDeEIsT0FBTyxLQUFLLEtBQUssUUFBUTtnQkFDekIscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUNqQztnQkFDQSxPQUFPLENBQUMsR0FBRyxFQUFFLHNCQUFzQixDQUFDLENBQUE7YUFDckM7aUJBQU07Z0JBQ0wsT0FBTyxDQUFDLEdBQUcsRUFBRSw4QkFBOEIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO2FBQ3BEO1FBQ0gsQ0FBQyxDQUFDO2FBQ0QsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFZLEVBQUUsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLENBQ3hDLENBQUE7S0FDRjtJQUVELElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFO1FBQzVCLE1BQU0saUJBQWlCLEdBQUcsNEJBQTRCLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDNUQsSUFBSSxpQkFBaUIsRUFBRTtZQUNyQixPQUFPLGlCQUFpQixDQUFBO1NBQ3pCO1FBRUQsaUNBQWlDO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQTtLQUN2RDtJQUVELE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQztBQUVELDhEQUE4RDtBQUM5RCxTQUFTLDhCQUE4QixDQUFDLElBQVM7SUFDL0MsSUFBSSxJQUFJLFlBQVksS0FBSyxFQUFFO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFBO0tBQ2hEO0lBRUQsSUFBSSxJQUFJLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3pCLDRCQUE0QjtRQUM1QixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxlQUFlLElBQUksTUFBTSxJQUFJLElBQUksRUFBRTtZQUN0RCxPQUFPO2dCQUNMLEdBQUcsSUFBSTtnQkFDUCxJQUFJLEVBQUUsZ0JBQWdCO2FBQ3ZCLENBQUE7U0FDRjtRQUVELE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FDdkIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUErQixDQUFDO2FBQzVDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7WUFDcEIsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEVBQUU7Z0JBQ25DLE9BQU8sSUFBSSxDQUFBO2FBQ1o7aUJBQU07Z0JBQ0wsT0FBTyxDQUFDLEdBQUcsRUFBRSw4QkFBOEIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO2FBQ3BEO1FBQ0gsQ0FBQyxDQUFDO2FBQ0QsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFZLEVBQUUsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLENBQ3hDLENBQUE7S0FDRjtJQUVELElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFO1FBQzVCLE1BQU0saUJBQWlCLEdBQUcsNEJBQTRCLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDNUQsSUFBSSxpQkFBaUIsRUFBRTtZQUNyQixPQUFPLGlCQUFpQixDQUFBO1NBQ3pCO1FBRUQsaUNBQWlDO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQTtLQUN2RDtJQUVELE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQztBQUVEOzs7R0FHRztBQUNILDhEQUE4RDtBQUM5RCxTQUFTLHFDQUFxQyxDQUFDLElBQVM7SUFDdEQsTUFBTSxFQUFFLEdBQUc7UUFDVCxHQUFHLElBQUk7UUFDUCxTQUFTLEVBQUU7WUFDVCxHQUFHLElBQUksQ0FBQyxTQUFTO1NBQ2xCO0tBQ0YsQ0FBQTtJQUVELE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUE7SUFDL0IsT0FBTyxFQUFFLENBQUE7QUFDWCxDQUFDO0FBRUQsU0FBUywwQkFBMEIsQ0FBQyxPQUFlO0lBQ2pELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDakMsTUFBTSxNQUFNLEdBQUc7UUFDYixhQUFhO1FBQ2Isc0VBQXNFO1FBQ3RFLDJDQUEyQztRQUMzQyxzQkFBc0I7UUFDdEIsMENBQTBDO1FBQzFDLFdBQVc7UUFDWCxzQ0FBc0M7UUFDdEMsOEJBQThCO0tBQy9CLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFBO0lBRXJDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFBO0FBQ2hELENBQUM7QUFFRDs7O0dBR0c7QUFDSCxLQUFLLFVBQVUsOEJBQThCLENBQUMsSUFBWTtJQUN4RCxNQUFNLE1BQU0sR0FBRywwQkFBMEIsQ0FDdkMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQ3pDLENBQUE7SUFFRCxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQTtBQUMzQyxDQUFDO0FBRUQsU0FBUywwQkFBMEIsQ0FBQyxPQUFlO0lBQ2pELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDakMsTUFBTSxNQUFNLEdBQUc7UUFDYixxQ0FBcUM7UUFDckMsc0NBQXNDO1FBQ3RDLDhCQUE4QjtLQUMvQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQTtJQUVyQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQTtBQUNoRCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsS0FBSyxVQUFVLDhCQUE4QixDQUFDLElBQVk7SUFDeEQsTUFBTSxNQUFNLEdBQUcsMEJBQTBCLENBQ3ZDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUN6QyxDQUFBO0lBRUQsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUE7QUFDM0MsQ0FBQztBQUVEOztHQUVHO0FBQ0ksS0FBSyxVQUFVLDJCQUEyQixDQUMvQyxHQUFXLEVBQ1gsR0FBVztJQUVYLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFBO0lBRTFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUU7UUFDbkIsT0FBTyxFQUFFLElBQUk7UUFDYixHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxDQUFDO0tBQ25DLENBQUMsQ0FBQTtJQUVGLHdDQUF3QztJQUN4QyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFBO0lBRXZDLG9FQUFvRTtJQUNwRSxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFBO0lBRXRDLGlDQUFpQztJQUNqQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFBO0lBRXZDLGtEQUFrRDtJQUNsRCwrQkFBK0I7SUFDL0IsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFBO0lBRTdDLHVEQUF1RDtJQUN2RCxLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRTtRQUMvRCxNQUFNLDhCQUE4QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUE7S0FDNUQ7SUFFRCwyQkFBMkI7SUFDM0IsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUU7UUFDakUsTUFBTSw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFBO0tBQzVEO0FBQ0gsQ0FBQztBQWpDRCxrRUFpQ0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFzc2lnbm1lbnQgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2VzcyAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm4gKi9cbmltcG9ydCAqIGFzIGNweSBmcm9tIFwiY3B5XCJcbmltcG9ydCAqIGFzIGRlbCBmcm9tIFwiZGVsXCJcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiXG5pbXBvcnQgKiBhcyBnbG9iIGZyb20gXCJnbG9iXCJcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIlxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZnVuY3Rpb24gcmVtb3ZlVmVyc2lvbihkYXRhOiBhbnkpOiBhbnkge1xuICBjb25zdCBjcCA9IHtcbiAgICAuLi5kYXRhLFxuICB9XG5cbiAgZGVsZXRlIGNwLnZlcnNpb25cbiAgcmV0dXJuIGNwXG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5mdW5jdGlvbiByZW1vdmVUcmFjZShkYXRhOiBhbnkpOiBhbnkge1xuICBpZiAoZGF0YSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgcmV0dXJuIGRhdGEubWFwKHJlbW92ZVRyYWNlKVxuICB9XG5cbiAgaWYgKGRhdGEgPT09IE9iamVjdChkYXRhKSkge1xuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBPYmplY3QuZW50cmllcyhkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVxuICAgICAgICAuZmlsdGVyKChba2V5XSkgPT4ga2V5ICE9PSBcInRyYWNlXCIpXG4gICAgICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4gW2tleSwgcmVtb3ZlVHJhY2UodmFsdWUpXSksXG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIGRhdGFcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmZ1bmN0aW9uIHJlbW92ZVJ1bnRpbWVMaWJyYXJpZXMoZGF0YTogYW55KTogYW55IHtcbiAgY29uc3QgY3AgPSB7XG4gICAgLi4uZGF0YSxcbiAgfVxuXG4gIGlmIChkYXRhLnJ1bnRpbWUpIHtcbiAgICBjcC5ydW50aW1lID0ge1xuICAgICAgLi4uZGF0YS5ydW50aW1lLFxuICAgIH1cblxuICAgIGRlbGV0ZSBjcC5ydW50aW1lLmxpYnJhcmllc1xuICB9XG5cbiAgcmV0dXJuIGNwXG59XG5cbmNvbnN0IGN1cnJlbnRWZXJzaW9uUmVnZXggPSAvXiguK0N1cnJlbnRWZXJzaW9uWzAtOUEtRl17OH0pWzAtOWEtZl17MzJ9JC9cblxuLyoqXG4gKiBNYXRjaCBhIHJlc291cmNlIGNyZWF0ZWQgYnkgYGxhbWJkYS5GdW5jdGlvbi5jdXJyZW50VmVyc2lvbmAsIHdoaWNoXG4gKiB3aWxsIGluY2x1ZGUgdGhlIGFzc2V0IGhhc2ggYXMgcGFydCBvZiB0aGUgcmVvdXNyY2UgbmFtZSBhbmQgcmV0dXJuXG4gKiBhIHNuYXBzaG90LWZyaWVuZGx5IHZlcnNpb24gb2YgaXQgaWYgZm91bmQuXG4gKi9cbmZ1bmN0aW9uIHJld3JpdGVDdXJyZW50VmVyc2lvbklmRm91bmQodmFsdWU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBtYXRjaCA9IGN1cnJlbnRWZXJzaW9uUmVnZXguZXhlYyh2YWx1ZSlcbiAgcmV0dXJuIG1hdGNoID8gYCR7bWF0Y2hbMV19eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHhgIDogbnVsbFxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZnVuY3Rpb24gcmVtb3ZlQXNzZXREZXRhaWxzRnJvbVRlbXBsYXRlKGRhdGE6IGFueSk6IGFueSB7XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICByZXR1cm4gZGF0YS5tYXAocmVtb3ZlQXNzZXREZXRhaWxzRnJvbVRlbXBsYXRlKVxuICB9XG5cbiAgaWYgKGRhdGEgPT09IE9iamVjdChkYXRhKSkge1xuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBPYmplY3QuZW50cmllcyhkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVxuICAgICAgICAubWFwKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdDdXJyZW50VmVyc2lvbiA9IHJld3JpdGVDdXJyZW50VmVyc2lvbklmRm91bmQoa2V5KVxuICAgICAgICAgIGlmIChuZXdDdXJyZW50VmVyc2lvbikge1xuICAgICAgICAgICAgcmV0dXJuIFtuZXdDdXJyZW50VmVyc2lvbiwgcmVtb3ZlQXNzZXREZXRhaWxzRnJvbVRlbXBsYXRlKHZhbHVlKV1cbiAgICAgICAgICB9IGVsc2UgaWYgKGtleS5pbmNsdWRlcyhcIkFzc2V0UGFyYW1ldGVyXCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICBrZXkgPT09IFwiUmVmXCIgJiZcbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgdmFsdWUuaW5jbHVkZXMoXCJBc3NldFBhcmFtZXRlcnNcIilcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBba2V5LCBcInNuYXBzaG90LXZhbHVlXCJdXG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIGtleSA9PT0gXCJhd3M6YXNzZXQ6cGF0aFwiICYmXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgIC9hc3NldFxcLlswLTlhLWZdezY0fS8udGVzdCh2YWx1ZSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBba2V5LCBcImFzc2V0LnNuYXBzaG90LXZhbHVlXCJdXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBba2V5LCByZW1vdmVBc3NldERldGFpbHNGcm9tVGVtcGxhdGUodmFsdWUpXVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmZpbHRlcigoaXQpOiBpdCBpcyBbXSA9PiBpdCAhPSBudWxsKSxcbiAgICApXG4gIH1cblxuICBpZiAodHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIpIHtcbiAgICBjb25zdCBuZXdDdXJyZW50VmVyc2lvbiA9IHJld3JpdGVDdXJyZW50VmVyc2lvbklmRm91bmQoZGF0YSlcbiAgICBpZiAobmV3Q3VycmVudFZlcnNpb24pIHtcbiAgICAgIHJldHVybiBuZXdDdXJyZW50VmVyc2lvblxuICAgIH1cblxuICAgIC8vIEhhbmRsZSB0eXBpY2FsIGNvbnRlbnQgaGFzaGVzLlxuICAgIHJldHVybiBkYXRhLnJlcGxhY2UoL1swLTlhLWZdezY0fS9nLCBcInNuYXBzaG90LXZhbHVlXCIpXG4gIH1cblxuICByZXR1cm4gZGF0YVxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZnVuY3Rpb24gcmVtb3ZlQXNzZXREZXRhaWxzRnJvbU1hbmlmZXN0KGRhdGE6IGFueSk6IGFueSB7XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICByZXR1cm4gZGF0YS5tYXAocmVtb3ZlQXNzZXREZXRhaWxzRnJvbU1hbmlmZXN0KVxuICB9XG5cbiAgaWYgKGRhdGEgPT09IE9iamVjdChkYXRhKSkge1xuICAgIC8vIGF3czpjZGs6YXNzZXQgaW4gbWV0YWRhdGFcbiAgICBpZiAoZGF0YVtcInR5cGVcIl0gPT09IFwiYXdzOmNkazphc3NldFwiICYmIFwiZGF0YVwiIGluIGRhdGEpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmRhdGEsXG4gICAgICAgIGRhdGE6IFwic25hcHNob3QtdmFsdWVcIixcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgT2JqZWN0LmVudHJpZXMoZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilcbiAgICAgICAgLm1hcCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgaWYgKGtleS5pbmNsdWRlcyhcIkFzc2V0UGFyYW1ldGVyc1wiKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFtrZXksIHJlbW92ZUFzc2V0RGV0YWlsc0Zyb21NYW5pZmVzdCh2YWx1ZSldXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuZmlsdGVyKChpdCk6IGl0IGlzIFtdID0+IGl0ICE9IG51bGwpLFxuICAgIClcbiAgfVxuXG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIikge1xuICAgIGNvbnN0IG5ld0N1cnJlbnRWZXJzaW9uID0gcmV3cml0ZUN1cnJlbnRWZXJzaW9uSWZGb3VuZChkYXRhKVxuICAgIGlmIChuZXdDdXJyZW50VmVyc2lvbikge1xuICAgICAgcmV0dXJuIG5ld0N1cnJlbnRWZXJzaW9uXG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHR5cGljYWwgY29udGVudCBoYXNoZXMuXG4gICAgcmV0dXJuIGRhdGEucmVwbGFjZSgvWzAtOWEtZl17NjR9L2csIFwic25hcHNob3QtdmFsdWVcIilcbiAgfVxuXG4gIHJldHVybiBkYXRhXG59XG5cbi8qKlxuICogUmVtb3ZlIHRoZSBDREtNZXRhZGF0YSByZXNvdXJjZXMgdGhhdCBpcyBwYXJ0IG9mIHRoZSBzeW50aGVzaXplZFxuICogdGVtcGxhdGUgc2luY2UgQ0RLIDEuNjMuMC5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmZ1bmN0aW9uIHJlbW92ZUNka01ldGFkYXRhUmVzb3VyY2VGcm9tVGVtcGxhdGUoZGF0YTogYW55KTogYW55IHtcbiAgY29uc3QgY3AgPSB7XG4gICAgLi4uZGF0YSxcbiAgICBSZXNvdXJjZXM6IHtcbiAgICAgIC4uLmRhdGEuUmVzb3VyY2VzLFxuICAgIH0sXG4gIH1cblxuICBkZWxldGUgY3AuUmVzb3VyY2VzLkNES01ldGFkYXRhXG4gIHJldHVybiBjcFxufVxuXG5mdW5jdGlvbiBwcmVwYXJlTWFuaWZlc3RGb3JTbmFwc2hvdChjb250ZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBpbnB1dCA9IEpTT04ucGFyc2UoY29udGVudClcbiAgY29uc3Qgb3V0cHV0ID0gW1xuICAgIHJlbW92ZVZlcnNpb24sXG4gICAgLy8gUmVtb3ZlIHRoZSBydW50aW1lIHZlcnNpb24gaW5mb3JtYXRpb24gc28gaXQgZG9uJ3QgY29uZmxpY3Qgd2l0aCBDSVxuICAgIC8vIG9yIG90aGVyIHVzZXJzIGdlbmVyYXRpbmcgdGhlIHNuYXBzaG90cy5cbiAgICByZW1vdmVSdW50aW1lTGlicmFyaWVzLFxuICAgIC8vIFJlbW92ZSB0aGUgdHJhY2UgZnJvbSBtYW5pZmVzdCBmb3Igbm93LlxuICAgIHJlbW92ZVRyYWNlLFxuICAgIC8vIEF2b2lkIGRldGFpbHMgKGhhc2hlcykgZnJvbSBhc3NldHMuXG4gICAgcmVtb3ZlQXNzZXREZXRhaWxzRnJvbU1hbmlmZXN0LFxuICBdLnJlZHVjZSgoYWNjLCBmbikgPT4gZm4oYWNjKSwgaW5wdXQpXG5cbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG91dHB1dCwgdW5kZWZpbmVkLCBcIiAgXCIpXG59XG5cbi8qKlxuICogVHJhbnNmb3JtIHRoZSBDbG91ZCBBc3NlbWJseSBtYW5pZmVzdCBmaWxlIHNvIHRoYXQgaXQgY2FuIGJlIHBlcnNpc3RlZFxuICogYXMgYSBzbmFwc2hvdCB3aXRob3V0IGNhdXNpbmcgaW52YWxpZGF0aW9ucyBmb3IgZXZlcnkgc3ludGhlc2l6ZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcHJlcGFyZU1hbmlmZXN0RmlsZUZvclNuYXBzaG90KGZpbGU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCByZXN1bHQgPSBwcmVwYXJlTWFuaWZlc3RGb3JTbmFwc2hvdChcbiAgICBhd2FpdCBmcy5wcm9taXNlcy5yZWFkRmlsZShmaWxlLCBcInV0ZjhcIiksXG4gIClcblxuICBhd2FpdCBmcy5wcm9taXNlcy53cml0ZUZpbGUoZmlsZSwgcmVzdWx0KVxufVxuXG5mdW5jdGlvbiBwcmVwYXJlVGVtcGxhdGVGb3JTbmFwc2hvdChjb250ZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBpbnB1dCA9IEpTT04ucGFyc2UoY29udGVudClcbiAgY29uc3Qgb3V0cHV0ID0gW1xuICAgIHJlbW92ZUNka01ldGFkYXRhUmVzb3VyY2VGcm9tVGVtcGxhdGUsXG4gICAgLy8gQXZvaWQgZGV0YWlscyAoaGFzaGVzKSBmcm9tIGFzc2V0cy5cbiAgICByZW1vdmVBc3NldERldGFpbHNGcm9tVGVtcGxhdGUsXG4gIF0ucmVkdWNlKChhY2MsIGZuKSA9PiBmbihhY2MpLCBpbnB1dClcblxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob3V0cHV0LCB1bmRlZmluZWQsIFwiICBcIilcbn1cblxuLyoqXG4gKiBUcmFuc2Zvcm0gYSBDbG91ZCBBc3NlbWJseSB0ZW1wbGF0ZSBmaWxlIHNvIHRoYXQgaXQgY2FuIGJlIHBlcnNpc3RlZFxuICogYXMgYSBzbmFwc2hvdCB3aXRob3V0IGNhdXNpbmcgaW52YWxpZGF0aW9ucyBmb3IgbWlub3IgY2hhbmdlcy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcHJlcGFyZVRlbXBsYXRlRmlsZUZvclNuYXBzaG90KGZpbGU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCByZXN1bHQgPSBwcmVwYXJlVGVtcGxhdGVGb3JTbmFwc2hvdChcbiAgICBhd2FpdCBmcy5wcm9taXNlcy5yZWFkRmlsZShmaWxlLCBcInV0ZjhcIiksXG4gIClcblxuICBhd2FpdCBmcy5wcm9taXNlcy53cml0ZUZpbGUoZmlsZSwgcmVzdWx0KVxufVxuXG4vKipcbiAqIENvbnZlcnQgYSBDbG91ZCBBc3NlbWJseSB0byBhIHNuYXBzaG90LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlQ2xvdWRBc3NlbWJseVNuYXBzaG90KFxuICBzcmM6IHN0cmluZyxcbiAgZHN0OiBzdHJpbmcsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgYmFzZSA9IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBkc3QpXG5cbiAgYXdhaXQgY3B5KFwiLlwiLCBiYXNlLCB7XG4gICAgcGFyZW50czogdHJ1ZSxcbiAgICBjd2Q6IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBzcmMpLFxuICB9KVxuXG4gIC8vIERvbid0IGtlZXAgdHJhY2sgb2YgbWFuaWZlc3QgdmVyc2lvbi5cbiAgYXdhaXQgZGVsKHBhdGguam9pbihkc3QsIFwiKiovY2RrLm91dFwiKSlcblxuICAvLyBUaGUgdHJlZSBmaWxlIGRvZXNuJ3QgZ2l2ZSB1cyBtdWNoIHZhbHVlIGFzIHBhcnQgb2YgdGhlIHNuYXBzaG90LlxuICBhd2FpdCBkZWwocGF0aC5qb2luKGRzdCwgXCJ0cmVlLmpzb25cIikpXG5cbiAgLy8gUmVtb3ZlIGFzc2V0IGNvbnRlbnRzIGZvciBub3cuXG4gIGF3YWl0IGRlbChwYXRoLmpvaW4oZHN0LCBcIioqL2Fzc2V0LipcIikpXG5cbiAgLy8gUmVtb3ZlIGFzc2V0IGNvbmZpZ3Mgc28gd2UgZG9uJ3QgaGF2ZSB0byB1cGRhdGVcbiAgLy8gc25hcHNob3RzIGZvciBhc3NldCBjaGFuZ2VzLlxuICBhd2FpdCBkZWwocGF0aC5qb2luKGRzdCwgXCIqKi8qLmFzc2V0cy5qc29uXCIpKVxuXG4gIC8vIFRyYW5zZm9ybSB0aGUgbWFuaWZlc3QgdG8gYmUgbW9yZSBzbmFwc2hvdCBmcmllbmRseS5cbiAgZm9yIChjb25zdCBmaWxlIG9mIGdsb2Iuc3luYyhcIioqL21hbmlmZXN0Lmpzb25cIiwgeyBjd2Q6IGJhc2UgfSkpIHtcbiAgICBhd2FpdCBwcmVwYXJlTWFuaWZlc3RGaWxlRm9yU25hcHNob3QocGF0aC5qb2luKGJhc2UsIGZpbGUpKVxuICB9XG5cbiAgLy8gVHJhbnNmb3JtIGFsbCB0ZW1wbGF0ZXMuXG4gIGZvciAoY29uc3QgZmlsZSBvZiBnbG9iLnN5bmMoXCIqKi8qLnRlbXBsYXRlLmpzb25cIiwgeyBjd2Q6IGJhc2UgfSkpIHtcbiAgICBhd2FpdCBwcmVwYXJlVGVtcGxhdGVGaWxlRm9yU25hcHNob3QocGF0aC5qb2luKGJhc2UsIGZpbGUpKVxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import * as cloudfront from "@aws-cdk/aws-cloudfront";
|
|
2
|
+
import * as cdk from "@aws-cdk/core";
|
|
3
|
+
export interface FrameOptionsHeader {
|
|
4
|
+
value?: "DENY" | "SAMEORIGIN";
|
|
5
|
+
}
|
|
6
|
+
export interface ReferrerPolicyHeader {
|
|
7
|
+
value?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface StrictTransportSecurityHeader {
|
|
10
|
+
maxAge?: number;
|
|
11
|
+
includeSubDomains?: boolean;
|
|
12
|
+
preload?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export interface ContentSecurityPolicyHeader {
|
|
15
|
+
reportOnly?: boolean;
|
|
16
|
+
baseUri?: string;
|
|
17
|
+
childSrc?: string;
|
|
18
|
+
defaultSrc?: string;
|
|
19
|
+
fontSrc?: string;
|
|
20
|
+
frameSrc?: string;
|
|
21
|
+
formAction?: string;
|
|
22
|
+
frameAncestors?: string;
|
|
23
|
+
imgSrc?: string;
|
|
24
|
+
manifestSrc?: string;
|
|
25
|
+
mediaSrc?: string;
|
|
26
|
+
objectSrc?: string;
|
|
27
|
+
scriptSrc?: string;
|
|
28
|
+
styleSrc?: string;
|
|
29
|
+
connectSrc?: string;
|
|
30
|
+
}
|
|
31
|
+
export interface SecurityHeaders {
|
|
32
|
+
contentSecurityPolicy?: ContentSecurityPolicyHeader;
|
|
33
|
+
strictTransportSecurity?: StrictTransportSecurityHeader;
|
|
34
|
+
referrerPolicy?: ReferrerPolicyHeader;
|
|
35
|
+
frameOptions?: FrameOptionsHeader;
|
|
36
|
+
}
|
|
37
|
+
export declare class WebappSecurityHeaders extends cdk.Construct {
|
|
38
|
+
readonly securityHeadersFunction: cloudfront.Function;
|
|
39
|
+
constructor(scope: cdk.Construct, id: string, props: SecurityHeaders);
|
|
40
|
+
}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WebappSecurityHeaders = void 0;
|
|
4
|
+
const cloudfront = require("@aws-cdk/aws-cloudfront");
|
|
5
|
+
const cdk = require("@aws-cdk/core");
|
|
6
|
+
function validateCspParam(param) {
|
|
7
|
+
if (param.indexOf('"') !== -1) {
|
|
8
|
+
throw Error('CSP override contains invalid character "');
|
|
9
|
+
}
|
|
10
|
+
if (param.indexOf(";") !== -1) {
|
|
11
|
+
throw Error("CSP override contains invalid character ;");
|
|
12
|
+
}
|
|
13
|
+
if (param.indexOf("\\") !== -1) {
|
|
14
|
+
throw Error("CSP override contains invalid character \\");
|
|
15
|
+
}
|
|
16
|
+
return param;
|
|
17
|
+
}
|
|
18
|
+
/* Replace all whitespace in a string with a single space */
|
|
19
|
+
function trim(value) {
|
|
20
|
+
return value.replace(/\s+/g, " ").trim();
|
|
21
|
+
}
|
|
22
|
+
function generateContentSecurityPolicyHeader(headerOptions) {
|
|
23
|
+
const defaultValues = {
|
|
24
|
+
baseUri: "'self'",
|
|
25
|
+
childSrc: "'none'",
|
|
26
|
+
connectSrc: "'self'",
|
|
27
|
+
defaultSrc: "'self'",
|
|
28
|
+
fontSrc: "'self'",
|
|
29
|
+
formAction: "'self'",
|
|
30
|
+
frameAncestors: "'none'",
|
|
31
|
+
frameSrc: "'self'",
|
|
32
|
+
imgSrc: "'self'",
|
|
33
|
+
manifestSrc: "'self'",
|
|
34
|
+
mediaSrc: "'self'",
|
|
35
|
+
objectSrc: "'none'",
|
|
36
|
+
scriptSrc: "'self'",
|
|
37
|
+
styleSrc: "'self'",
|
|
38
|
+
};
|
|
39
|
+
const options = {
|
|
40
|
+
...defaultValues,
|
|
41
|
+
...headerOptions,
|
|
42
|
+
};
|
|
43
|
+
Object.values(options).forEach((v) => typeof v === "string" && validateCspParam(v));
|
|
44
|
+
let headerValue = "";
|
|
45
|
+
headerValue += `base-uri ${trim(options.baseUri)};`;
|
|
46
|
+
headerValue += `child-src ${trim(options.childSrc)};`;
|
|
47
|
+
headerValue += `connect-src ${trim(options.connectSrc)};`;
|
|
48
|
+
headerValue += `default-src ${trim(options.defaultSrc)};`;
|
|
49
|
+
headerValue += `font-src ${trim(options.fontSrc)};`;
|
|
50
|
+
headerValue += `frame-src ${trim(options.frameSrc)};`;
|
|
51
|
+
headerValue += `img-src ${trim(options.imgSrc)};`;
|
|
52
|
+
headerValue += `manifest-src ${trim(options.manifestSrc)};`;
|
|
53
|
+
headerValue += `media-src ${trim(options.mediaSrc)};`;
|
|
54
|
+
headerValue += `object-src ${trim(options.objectSrc)};`;
|
|
55
|
+
headerValue += `script-src ${trim(options.scriptSrc)};`;
|
|
56
|
+
headerValue += `style-src ${trim(options.styleSrc)};`;
|
|
57
|
+
return trim(headerValue);
|
|
58
|
+
}
|
|
59
|
+
function generateStrictTransportSecurityHeader(headerOptions) {
|
|
60
|
+
const defaultValues = {
|
|
61
|
+
maxAge: 63072000,
|
|
62
|
+
includeSubDomains: false,
|
|
63
|
+
preload: false,
|
|
64
|
+
};
|
|
65
|
+
const options = {
|
|
66
|
+
...defaultValues,
|
|
67
|
+
...headerOptions,
|
|
68
|
+
};
|
|
69
|
+
let headerValue = "";
|
|
70
|
+
headerValue += `max-age=${options.maxAge};`;
|
|
71
|
+
headerValue += options.preload ? "preload;" : "";
|
|
72
|
+
headerValue += options.includeSubDomains ? "includeSubDomains;" : "";
|
|
73
|
+
return trim(headerValue);
|
|
74
|
+
}
|
|
75
|
+
function generateReferrerPolicyHeader(headerOptions) {
|
|
76
|
+
const defaultValues = {
|
|
77
|
+
value: "strict-origin-when-cross-origin",
|
|
78
|
+
};
|
|
79
|
+
const options = {
|
|
80
|
+
...defaultValues,
|
|
81
|
+
...headerOptions,
|
|
82
|
+
};
|
|
83
|
+
return options.value;
|
|
84
|
+
}
|
|
85
|
+
function generateFrameOptionsHeader(headerOptions) {
|
|
86
|
+
const defaultValues = {
|
|
87
|
+
value: "DENY",
|
|
88
|
+
};
|
|
89
|
+
const options = {
|
|
90
|
+
...defaultValues,
|
|
91
|
+
...headerOptions,
|
|
92
|
+
};
|
|
93
|
+
return trim(options.value);
|
|
94
|
+
}
|
|
95
|
+
class WebappSecurityHeaders extends cdk.Construct {
|
|
96
|
+
constructor(scope, id, props) {
|
|
97
|
+
var _a;
|
|
98
|
+
super(scope, id);
|
|
99
|
+
const cspHeaderName = ((_a = props.contentSecurityPolicy) === null || _a === void 0 ? void 0 : _a.reportOnly)
|
|
100
|
+
? "content-security-policy-report-only"
|
|
101
|
+
: "content-security-policy";
|
|
102
|
+
const contentSecurityPolicy = generateContentSecurityPolicyHeader(props.contentSecurityPolicy);
|
|
103
|
+
const strictTransportSecurity = generateStrictTransportSecurityHeader(props.strictTransportSecurity);
|
|
104
|
+
const referrerPolicy = generateReferrerPolicyHeader(props.referrerPolicy);
|
|
105
|
+
const frameOptions = generateFrameOptionsHeader(props.frameOptions);
|
|
106
|
+
const lambdaCode = `function handler(event) {
|
|
107
|
+
var response = event.response;
|
|
108
|
+
var headers = response.headers;
|
|
109
|
+
headers['referrer-policy'] = {value: '${referrerPolicy}'};
|
|
110
|
+
headers['strict-transport-security'] = {value: '${strictTransportSecurity}'};
|
|
111
|
+
headers['x-content-type-options'] = {value: 'nosniff'};
|
|
112
|
+
headers['x-frame-options'] = {value: '${frameOptions}'};
|
|
113
|
+
headers['x-xss-protection'] = {value: '1; mode=block'};
|
|
114
|
+
headers['${cspHeaderName}'] = {value: "${contentSecurityPolicy}"};
|
|
115
|
+
return response;
|
|
116
|
+
}`;
|
|
117
|
+
// Hardcoded logical ID due to bug: https://github.com/aws/aws-cdk/issues/15523
|
|
118
|
+
const functionId = `Function${this.node.addr}`;
|
|
119
|
+
this.securityHeadersFunction = new cloudfront.Function(this, functionId, {
|
|
120
|
+
functionName: functionId,
|
|
121
|
+
code: cloudfront.FunctionCode.fromInline(lambdaCode),
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
exports.WebappSecurityHeaders = WebappSecurityHeaders;
|
|
126
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJpdHktaGVhZGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93ZWJhcHAvc2VjdXJpdHktaGVhZGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxzREFBcUQ7QUFDckQscUNBQW9DO0FBeUNwQyxTQUFTLGdCQUFnQixDQUFDLEtBQWE7SUFDckMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO1FBQzdCLE1BQU0sS0FBSyxDQUFDLDJDQUEyQyxDQUFDLENBQUE7S0FDekQ7SUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7UUFDN0IsTUFBTSxLQUFLLENBQUMsMkNBQTJDLENBQUMsQ0FBQTtLQUN6RDtJQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtRQUM5QixNQUFNLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFBO0tBQzFEO0lBRUQsT0FBTyxLQUFLLENBQUE7QUFDZCxDQUFDO0FBRUQsNERBQTREO0FBQzVELFNBQVMsSUFBSSxDQUFDLEtBQWE7SUFDekIsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtBQUMxQyxDQUFDO0FBRUQsU0FBUyxtQ0FBbUMsQ0FDMUMsYUFBMkM7SUFFM0MsTUFBTSxhQUFhLEdBQUc7UUFDcEIsT0FBTyxFQUFFLFFBQVE7UUFDakIsUUFBUSxFQUFFLFFBQVE7UUFDbEIsVUFBVSxFQUFFLFFBQVE7UUFDcEIsVUFBVSxFQUFFLFFBQVE7UUFDcEIsT0FBTyxFQUFFLFFBQVE7UUFDakIsVUFBVSxFQUFFLFFBQVE7UUFDcEIsY0FBYyxFQUFFLFFBQVE7UUFDeEIsUUFBUSxFQUFFLFFBQVE7UUFDbEIsTUFBTSxFQUFFLFFBQVE7UUFDaEIsV0FB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WUFDeEIsSUFBSSxFQUFFLFVBQVUsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQztTQUNyRCxDQUFDLENBQUE7SUFDSixDQUFDO0NBQ0Y7QUF2Q0Qsc0RBdUNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2xvdWRmcm9udCBmcm9tIFwiQGF3cy1jZGsvYXdzLWNsb3VkZnJvbnRcIlxuaW1wb3J0ICogYXMgY2RrIGZyb20gXCJAYXdzLWNkay9jb3JlXCJcblxuZXhwb3J0IGludGVyZmFjZSBGcmFtZU9wdGlvbnNIZWFkZXIge1xuICB2YWx1ZT86IFwiREVOWVwiIHwgXCJTQU1FT1JJR0lOXCJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWZlcnJlclBvbGljeUhlYWRlciB7XG4gIHZhbHVlPzogc3RyaW5nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RyaWN0VHJhbnNwb3J0U2VjdXJpdHlIZWFkZXIge1xuICBtYXhBZ2U/OiBudW1iZXJcbiAgaW5jbHVkZVN1YkRvbWFpbnM/OiBib29sZWFuXG4gIHByZWxvYWQ/OiBib29sZWFuXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGVudFNlY3VyaXR5UG9saWN5SGVhZGVyIHtcbiAgcmVwb3J0T25seT86IGJvb2xlYW5cbiAgYmFzZVVyaT86IHN0cmluZ1xuICBjaGlsZFNyYz86IHN0cmluZ1xuICBkZWZhdWx0U3JjPzogc3RyaW5nXG4gIGZvbnRTcmM/OiBzdHJpbmdcbiAgZnJhbWVTcmM/OiBzdHJpbmdcbiAgZm9ybUFjdGlvbj86IHN0cmluZ1xuICBmcmFtZUFuY2VzdG9ycz86IHN0cmluZ1xuICBpbWdTcmM/OiBzdHJpbmdcbiAgbWFuaWZlc3RTcmM/OiBzdHJpbmdcbiAgbWVkaWFTcmM/OiBzdHJpbmdcbiAgb2JqZWN0U3JjPzogc3RyaW5nXG4gIHNjcmlwdFNyYz86IHN0cmluZ1xuICBzdHlsZVNyYz86IHN0cmluZ1xuICBjb25uZWN0U3JjPzogc3RyaW5nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VjdXJpdHlIZWFkZXJzIHtcbiAgY29udGVudFNlY3VyaXR5UG9saWN5PzogQ29udGVudFNlY3VyaXR5UG9saWN5SGVhZGVyXG4gIHN0cmljdFRyYW5zcG9ydFNlY3VyaXR5PzogU3RyaWN0VHJhbnNwb3J0U2VjdXJpdHlIZWFkZXJcbiAgcmVmZXJyZXJQb2xpY3k/OiBSZWZlcnJlclBvbGljeUhlYWRlclxuICBmcmFtZU9wdGlvbnM/OiBGcmFtZU9wdGlvbnNIZWFkZXJcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVDc3BQYXJhbShwYXJhbTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHBhcmFtLmluZGV4T2YoJ1wiJykgIT09IC0xKSB7XG4gICAgdGhyb3cgRXJyb3IoJ0NTUCBvdmVycmlkZSBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlciBcIicpXG4gIH1cblxuICBpZiAocGFyYW0uaW5kZXhPZihcIjtcIikgIT09IC0xKSB7XG4gICAgdGhyb3cgRXJyb3IoXCJDU1Agb3ZlcnJpZGUgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXIgO1wiKVxuICB9XG5cbiAgaWYgKHBhcmFtLmluZGV4T2YoXCJcXFxcXCIpICE9PSAtMSkge1xuICAgIHRocm93IEVycm9yKFwiQ1NQIG92ZXJyaWRlIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVyIFxcXFxcIilcbiAgfVxuXG4gIHJldHVybiBwYXJhbVxufVxuXG4vKiBSZXBsYWNlIGFsbCB3aGl0ZXNwYWNlIGluIGEgc3RyaW5nIHdpdGggYSBzaW5nbGUgc3BhY2UgKi9cbmZ1bmN0aW9uIHRyaW0odmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB2YWx1ZS5yZXBsYWNlKC9cXHMrL2csIFwiIFwiKS50cmltKClcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVDb250ZW50U2VjdXJpdHlQb2xpY3lIZWFkZXIoXG4gIGhlYWRlck9wdGlvbnM/OiBDb250ZW50U2VjdXJpdHlQb2xpY3lIZWFkZXIsXG4pIHtcbiAgY29uc3QgZGVmYXVsdFZhbHVlcyA9IHtcbiAgICBiYXNlVXJpOiBcIidzZWxmJ1wiLFxuICAgIGNoaWxkU3JjOiBcIidub25lJ1wiLFxuICAgIGNvbm5lY3RTcmM6IFwiJ3NlbGYnXCIsXG4gICAgZGVmYXVsdFNyYzogXCInc2VsZidcIixcbiAgICBmb250U3JjOiBcIidzZWxmJ1wiLFxuICAgIGZvcm1BY3Rpb246IFwiJ3NlbGYnXCIsXG4gICAgZnJhbWVBbmNlc3RvcnM6IFwiJ25vbmUnXCIsXG4gICAgZnJhbWVTcmM6IFwiJ3NlbGYnXCIsXG4gICAgaW1nU3JjOiBcIidzZWxmJ1wiLFxuICAgIG1hbmlmZXN0U3JjOiBcIidzZWxmJ1wiLFxuICAgIG1lZGlhU3JjOiBcIidzZWxmJ1wiLFxuICAgIG9iamVjdFNyYzogXCInbm9uZSdcIixcbiAgICBzY3JpcHRTcmM6IFwiJ3NlbGYnXCIsXG4gICAgc3R5bGVTcmM6IFwiJ3NlbGYnXCIsXG4gIH1cblxuICBjb25zdCBvcHRpb25zID0ge1xuICAgIC4uLmRlZmF1bHRWYWx1ZXMsXG4gICAgLi4uaGVhZGVyT3B0aW9ucyxcbiAgfVxuXG4gIE9iamVjdC52YWx1ZXMob3B0aW9ucykuZm9yRWFjaChcbiAgICAodikgPT4gdHlwZW9mIHYgPT09IFwic3RyaW5nXCIgJiYgdmFsaWRhdGVDc3BQYXJhbSh2KSxcbiAgKVxuXG4gIGxldCBoZWFkZXJWYWx1ZSA9IFwiXCJcbiAgaGVhZGVyVmFsdWUgKz0gYGJhc2UtdXJpICR7dHJpbShvcHRpb25zLmJhc2VVcmkpfTtgXG4gIGhlYWRlclZhbHVlICs9IGBjaGlsZC1zcmMgJHt0cmltKG9wdGlvbnMuY2hpbGRTcmMpfTtgXG4gIGhlYWRlclZhbHVlICs9IGBjb25uZWN0LXNyYyAke3RyaW0ob3B0aW9ucy5jb25uZWN0U3JjKX07YFxuICBoZWFkZXJWYWx1ZSArPSBgZGVmYXVsdC1zcmMgJHt0cmltKG9wdGlvbnMuZGVmYXVsdFNyYyl9O2BcbiAgaGVhZGVyVmFsdWUgKz0gYGZvbnQtc3JjICR7dHJpbShvcHRpb25zLmZvbnRTcmMpfTtgXG4gIGhlYWRlclZhbHVlICs9IGBmcmFtZS1zcmMgJHt0cmltKG9wdGlvbnMuZnJhbWVTcmMpfTtgXG4gIGhlYWRlclZhbHVlICs9IGBpbWctc3JjICR7dHJpbShvcHRpb25zLmltZ1NyYyl9O2BcbiAgaGVhZGVyVmFsdWUgKz0gYG1hbmlmZXN0LXNyYyAke3RyaW0ob3B0aW9ucy5tYW5pZmVzdFNyYyl9O2BcbiAgaGVhZGVyVmFsdWUgKz0gYG1lZGlhLXNyYyAke3RyaW0ob3B0aW9ucy5tZWRpYVNyYyl9O2BcbiAgaGVhZGVyVmFsdWUgKz0gYG9iamVjdC1zcmMgJHt0cmltKG9wdGlvbnMub2JqZWN0U3JjKX07YFxuICBoZWFkZXJWYWx1ZSArPSBgc2NyaXB0LXNyYyAke3RyaW0ob3B0aW9ucy5zY3JpcHRTcmMpfTtgXG4gIGhlYWRlclZhbHVlICs9IGBzdHlsZS1zcmMgJHt0cmltKG9wdGlvbnMuc3R5bGVTcmMpfTtgXG5cbiAgcmV0dXJuIHRyaW0oaGVhZGVyVmFsdWUpXG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlU3RyaWN0VHJhbnNwb3J0U2VjdXJpdHlIZWFkZXIoXG4gIGhlYWRlck9wdGlvbnM/OiBTdHJpY3RUcmFuc3BvcnRTZWN1cml0eUhlYWRlcixcbikge1xuICBjb25zdCBkZWZhdWx0VmFsdWVzID0ge1xuICAgIG1heEFnZTogNjMwNzIwMDAsXG4gICAgaW5jbHVkZVN1YkRvbWFpbnM6IGZhbHNlLFxuICAgIHByZWxvYWQ6IGZhbHNlLFxuICB9XG4gIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgLi4uZGVmYXVsdFZhbHVlcyxcbiAgICAuLi5oZWFkZXJPcHRpb25zLFxuICB9XG4gIGxldCBoZWFkZXJWYWx1ZSA9IFwiXCJcbiAgaGVhZGVyVmFsdWUgKz0gYG1heC1hZ2U9JHtvcHRpb25zLm1heEFnZX07YFxuICBoZWFkZXJWYWx1ZSArPSBvcHRpb25zLnByZWxvYWQgPyBcInByZWxvYWQ7XCIgOiBcIlwiXG4gIGhlYWRlclZhbHVlICs9IG9wdGlvbnMuaW5jbHVkZVN1YkRvbWFpbnMgPyBcImluY2x1ZGVTdWJEb21haW5zO1wiIDogXCJcIlxuICByZXR1cm4gdHJpbShoZWFkZXJWYWx1ZSlcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVSZWZlcnJlclBvbGljeUhlYWRlcihoZWFkZXJPcHRpb25zPzogUmVmZXJyZXJQb2xpY3lIZWFkZXIpIHtcbiAgY29uc3QgZGVmYXVsdFZhbHVlcyA9IHtcbiAgICB2YWx1ZTogXCJzdHJpY3Qtb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luXCIsXG4gIH1cbiAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAuLi5kZWZhdWx0VmFsdWVzLFxuICAgIC4uLmhlYWRlck9wdGlvbnMsXG4gIH1cbiAgcmV0dXJuIG9wdGlvbnMudmFsdWVcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVGcmFtZU9wdGlvbnNIZWFkZXIoaGVhZGVyT3B0aW9ucz86IEZyYW1lT3B0aW9uc0hlYWRlcikge1xuICBjb25zdCBkZWZhdWx0VmFsdWVzID0ge1xuICAgIHZhbHVlOiBcIkRFTllcIixcbiAgfVxuICBjb25zdCBvcHRpb25zID0ge1xuICAgIC4uLmRlZmF1bHRWYWx1ZXMsXG4gICAgLi4uaGVhZGVyT3B0aW9ucyxcbiAgfVxuICByZXR1cm4gdHJpbShvcHRpb25zLnZhbHVlKVxufVxuXG5leHBvcnQgY2xhc3MgV2ViYXBwU2VjdXJpdHlIZWFkZXJzIGV4dGVuZHMgY2RrLkNvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBzZWN1cml0eUhlYWRlcnNGdW5jdGlvbjogY2xvdWRmcm9udC5GdW5jdGlvblxuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBjZGsuQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU2VjdXJpdHlIZWFkZXJzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKVxuXG4gICAgY29uc3QgY3NwSGVhZGVyTmFtZSA9IHByb3BzLmNvbnRlbnRTZWN1cml0eVBvbGljeT8ucmVwb3J0T25seVxuICAgICAgPyBcImNvbnRlbnQtc2VjdXJpdHktcG9saWN5LXJlcG9ydC1vbmx5XCJcbiAgICAgIDogXCJjb250ZW50LXNlY3VyaXR5LXBvbGljeVwiXG5cbiAgICBjb25zdCBjb250ZW50U2VjdXJpdHlQb2xpY3kgPSBnZW5lcmF0ZUNvbnRlbnRTZWN1cml0eVBvbGljeUhlYWRlcihcbiAgICAgIHByb3BzLmNvbnRlbnRTZWN1cml0eVBvbGljeSxcbiAgICApXG4gICAgY29uc3Qgc3RyaWN0VHJhbnNwb3J0U2VjdXJpdHkgPSBnZW5lcmF0ZVN0cmljdFRyYW5zcG9ydFNlY3VyaXR5SGVhZGVyKFxuICAgICAgcHJvcHMuc3RyaWN0VHJhbnNwb3J0U2VjdXJpdHksXG4gICAgKVxuICAgIGNvbnN0IHJlZmVycmVyUG9saWN5ID0gZ2VuZXJhdGVSZWZlcnJlclBvbGljeUhlYWRlcihwcm9wcy5yZWZlcnJlclBvbGljeSlcbiAgICBjb25zdCBmcmFtZU9wdGlvbnMgPSBnZW5lcmF0ZUZyYW1lT3B0aW9uc0hlYWRlcihwcm9wcy5mcmFtZU9wdGlvbnMpXG5cbiAgICBjb25zdCBsYW1iZGFDb2RlID0gYGZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQpIHtcbiAgICAgIHZhciByZXNwb25zZSA9IGV2ZW50LnJlc3BvbnNlO1xuICAgICAgdmFyIGhlYWRlcnMgPSByZXNwb25zZS5oZWFkZXJzO1xuICAgICAgaGVhZGVyc1sncmVmZXJyZXItcG9saWN5J10gPSB7dmFsdWU6ICcke3JlZmVycmVyUG9saWN5fSd9O1xuICAgICAgaGVhZGVyc1snc3RyaWN0LXRyYW5zcG9ydC1zZWN1cml0eSddID0ge3ZhbHVlOiAnJHtzdHJpY3RUcmFuc3BvcnRTZWN1cml0eX0nfTtcbiAgICAgIGhlYWRlcnNbJ3gtY29udGVudC10eXBlLW9wdGlvbnMnXSA9IHt2YWx1ZTogJ25vc25pZmYnfTtcbiAgICAgIGhlYWRlcnNbJ3gtZnJhbWUtb3B0aW9ucyddID0ge3ZhbHVlOiAnJHtmcmFtZU9wdGlvbnN9J307XG4gICAgICBoZWFkZXJzWyd4LXhzcy1wcm90ZWN0aW9uJ10gPSB7dmFsdWU6ICcxOyBtb2RlPWJsb2NrJ307XG4gICAgICBoZWFkZXJzWycke2NzcEhlYWRlck5hbWV9J10gPSB7dmFsdWU6IFwiJHtjb250ZW50U2VjdXJpdHlQb2xpY3l9XCJ9O1xuICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH1gXG5cbiAgICAvLyBIYXJkY29kZWQgbG9naWNhbCBJRCBkdWUgdG8gYnVnOiBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzE1NTIzXG4gICAgY29uc3QgZnVuY3Rpb25JZCA9IGBGdW5jdGlvbiR7dGhpcy5ub2RlLmFkZHJ9YFxuXG4gICAgdGhpcy5zZWN1cml0eUhlYWRlcnNGdW5jdGlvbiA9IG5ldyBjbG91ZGZyb250LkZ1bmN0aW9uKHRoaXMsIGZ1bmN0aW9uSWQsIHtcbiAgICAgIGZ1bmN0aW9uTmFtZTogZnVuY3Rpb25JZCxcbiAgICAgIGNvZGU6IGNsb3VkZnJvbnQuRnVuY3Rpb25Db2RlLmZyb21JbmxpbmUobGFtYmRhQ29kZSksXG4gICAgfSlcbiAgfVxufVxuIl19
|
package/lib/webapp/webapp.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ import * as r53 from "@aws-cdk/aws-route53";
|
|
|
5
5
|
import * as s3 from "@aws-cdk/aws-s3";
|
|
6
6
|
import * as cdk from "@aws-cdk/core";
|
|
7
7
|
import * as webappDeploy from "@capraconsulting/webapp-deploy-lambda";
|
|
8
|
+
import { SecurityHeaders } from "./security-headers";
|
|
8
9
|
export interface WebappProps {
|
|
9
10
|
/**
|
|
10
11
|
* ACM certificate that covers the specifeid domain names.
|
|
@@ -40,6 +41,28 @@ export interface WebappProps {
|
|
|
40
41
|
* @default - No custom page for 403 errors.
|
|
41
42
|
*/
|
|
42
43
|
webAclErrorPagePath?: string;
|
|
44
|
+
/**
|
|
45
|
+
* Enable adding common security headers to CloudFront responses using a CloudFront Function.
|
|
46
|
+
*
|
|
47
|
+
* If enabled, the default behavior is to add the following headers with fairly strict defaults. Most of the headers can be customized:
|
|
48
|
+
* - Content-Security-Policy
|
|
49
|
+
* - Referrer-Policy
|
|
50
|
+
* - Strict-Transport-Security
|
|
51
|
+
* - X-Content-Type-Options
|
|
52
|
+
* - X-Frame-Options
|
|
53
|
+
* - X-XSS-Protection
|
|
54
|
+
*
|
|
55
|
+
* @default - No security headers will be added to responses
|
|
56
|
+
*/
|
|
57
|
+
enableSecurityHeaders?: boolean;
|
|
58
|
+
/**
|
|
59
|
+
* Security headers overrides.
|
|
60
|
+
*
|
|
61
|
+
* Used to override certain security header values if the webapp requires more lax settings compared to the defaults.
|
|
62
|
+
*
|
|
63
|
+
* @default - A set of strict security header values will be used
|
|
64
|
+
*/
|
|
65
|
+
securityHeadersOverrides?: SecurityHeaders;
|
|
43
66
|
}
|
|
44
67
|
/**
|
|
45
68
|
* CloudFront for a Single-Page-Application.
|