@liflig/cdk 2.17.1 → 2.18.1
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/package.json +10 -10
- package/assets/cloudtrail-slack-integration-lambda/main.py +0 -267
- package/assets/pipeline-slack-notification-lambda/index.py +0 -300
- package/assets/prepare-cdk-source-lambda/index.py +0 -159
- package/assets/slack-alarm-lambda/index.py +0 -103
- package/lib/alarms/database-alarms.d.ts +0 -125
- package/lib/alarms/database-alarms.js +0 -171
- package/lib/alarms/index.d.ts +0 -3
- package/lib/alarms/index.js +0 -10
- package/lib/alarms/service-alarms.d.ts +0 -145
- package/lib/alarms/service-alarms.js +0 -148
- package/lib/alarms/ses-alarms.d.ts +0 -67
- package/lib/alarms/ses-alarms.js +0 -49
- package/lib/alarms/slack-alarm.d.ts +0 -25
- package/lib/alarms/slack-alarm.js +0 -47
- package/lib/bastion-host.d.ts +0 -41
- package/lib/bastion-host.js +0 -86
- package/lib/bin/cdk-create-snapshots.d.ts +0 -2
- package/lib/bin/fetch-pipeline-variables.d.ts +0 -2
- package/lib/build-artifacts/index.d.ts +0 -68
- package/lib/build-artifacts/index.js +0 -118
- package/lib/cdk-deploy/cdk-deploy.d.ts +0 -63
- package/lib/cdk-deploy/cdk-deploy.js +0 -175
- package/lib/cdk-deploy/index.d.ts +0 -1
- package/lib/cdk-deploy/index.js +0 -6
- package/lib/cdk-deploy/start-deploy-handler.d.ts +0 -8
- package/lib/cdk-deploy/start-deploy-handler.js +0 -72
- package/lib/cdk-deploy/status-handler.d.ts +0 -6
- package/lib/cdk-deploy/status-handler.js +0 -83
- package/lib/cdk-pipelines/cloud-assembly-lookup-handler.d.ts +0 -6
- package/lib/cdk-pipelines/cloud-assembly-lookup-handler.js +0 -63
- package/lib/cdk-pipelines/index.d.ts +0 -3
- package/lib/cdk-pipelines/index.js +0 -10
- package/lib/cdk-pipelines/liflig-cdk-pipeline.d.ts +0 -110
- package/lib/cdk-pipelines/liflig-cdk-pipeline.js +0 -232
- package/lib/cdk-pipelines/slack-notification.d.ts +0 -51
- package/lib/cdk-pipelines/slack-notification.js +0 -54
- package/lib/cdk-pipelines/variables.d.ts +0 -15
- package/lib/cdk-pipelines/variables.js +0 -80
- package/lib/cloudtrail-slack-integration/cloudtrail-slack-integration.d.ts +0 -47
- package/lib/cloudtrail-slack-integration/cloudtrail-slack-integration.js +0 -211
- package/lib/cloudtrail-slack-integration/index.d.ts +0 -1
- package/lib/cloudtrail-slack-integration/index.js +0 -6
- package/lib/configure-parameters/configure-parameters.d.ts +0 -61
- package/lib/configure-parameters/configure-parameters.js +0 -94
- package/lib/configure-parameters/index.d.ts +0 -1
- package/lib/configure-parameters/index.js +0 -6
- package/lib/cross-region-ssm-parameter.d.ts +0 -13
- package/lib/cross-region-ssm-parameter.js +0 -46
- package/lib/ecs/cluster.d.ts +0 -25
- package/lib/ecs/cluster.js +0 -70
- package/lib/ecs/fargate-service.d.ts +0 -62
- package/lib/ecs/fargate-service.js +0 -99
- package/lib/ecs/index.d.ts +0 -3
- package/lib/ecs/index.js +0 -10
- package/lib/ecs/listener-rule.d.ts +0 -25
- package/lib/ecs/listener-rule.js +0 -27
- package/lib/ecs-update-image/artifact-status.d.ts +0 -39
- package/lib/ecs-update-image/artifact-status.js +0 -41
- package/lib/ecs-update-image/ecs-update-image.d.ts +0 -41
- package/lib/ecs-update-image/ecs-update-image.js +0 -98
- package/lib/ecs-update-image/index.d.ts +0 -3
- package/lib/ecs-update-image/index.js +0 -10
- package/lib/ecs-update-image/start-deploy-handler.d.ts +0 -6
- package/lib/ecs-update-image/start-deploy-handler.js +0 -104
- package/lib/ecs-update-image/status-handler.d.ts +0 -11
- package/lib/ecs-update-image/status-handler.js +0 -74
- package/lib/ecs-update-image/tag.d.ts +0 -47
- package/lib/ecs-update-image/tag.js +0 -67
- package/lib/feature-flags.d.ts +0 -18
- package/lib/feature-flags.js +0 -48
- package/lib/griid/artefact-bucket.d.ts +0 -7
- package/lib/griid/artefact-bucket.js +0 -30
- package/lib/griid/index.d.ts +0 -4
- package/lib/griid/index.js +0 -18
- package/lib/hosted-zone-with-param.d.ts +0 -29
- package/lib/hosted-zone-with-param.js +0 -65
- package/lib/index.d.ts +0 -32
- package/lib/kinesis/index.d.ts +0 -1
- package/lib/kinesis/index.js +0 -6
- package/lib/kinesis/kinesis-to-datadog-stream.d.ts +0 -28
- package/lib/kinesis/kinesis-to-datadog-stream.js +0 -126
- package/lib/load-balancer/index.d.ts +0 -1
- package/lib/load-balancer/index.js +0 -6
- package/lib/load-balancer/load-balancer.d.ts +0 -16
- package/lib/load-balancer/load-balancer.js +0 -60
- package/lib/pipelines/conventions.d.ts +0 -14
- package/lib/pipelines/conventions.js +0 -24
- package/lib/pipelines/deploy-env.d.ts +0 -18
- package/lib/pipelines/deploy-env.js +0 -96
- package/lib/pipelines/index.d.ts +0 -2
- package/lib/pipelines/index.js +0 -8
- package/lib/pipelines/liflig-cdk-deployer-deps.d.ts +0 -13
- package/lib/pipelines/liflig-cdk-deployer-deps.js +0 -35
- package/lib/pipelines/pipeline.d.ts +0 -78
- package/lib/pipelines/pipeline.js +0 -224
- package/lib/platform/index.d.ts +0 -1
- package/lib/platform/index.js +0 -7
- package/lib/platform/platform.d.ts +0 -37
- package/lib/platform/platform.js +0 -57
- package/lib/rds/database.d.ts +0 -49
- package/lib/rds/database.js +0 -60
- package/lib/rds/index.d.ts +0 -1
- package/lib/rds/index.js +0 -6
- package/lib/ses/configurationsetdeliveryoptions/index.d.ts +0 -26
- package/lib/ses/configurationsetdeliveryoptions/index.js +0 -48
- package/lib/ses/configurationsetsnsdestination/handler.d.ts +0 -17
- package/lib/ses/configurationsetsnsdestination/handler.js +0 -75
- package/lib/ses/configurationsetsnsdestination/index.d.ts +0 -29
- package/lib/ses/configurationsetsnsdestination/index.js +0 -75
- package/lib/ses/index.d.ts +0 -4
- package/lib/ses/index.js +0 -12
- package/lib/ses/sesdomain/handler.d.ts +0 -10
- package/lib/ses/sesdomain/handler.js +0 -82
- package/lib/ses/sesdomain/index.d.ts +0 -57
- package/lib/ses/sesdomain/index.js +0 -94
- package/lib/ses/sesverifyemail/handler.d.ts +0 -9
- package/lib/ses/sesverifyemail/handler.js +0 -25
- package/lib/ses/sesverifyemail/index.d.ts +0 -13
- package/lib/ses/sesverifyemail/index.js +0 -51
- package/lib/snapshots.d.ts +0 -4
- package/lib/snapshots.js +0 -214
- package/lib/ssm-parameter-backed-resource.d.ts +0 -45
- package/lib/ssm-parameter-backed-resource.js +0 -67
- package/lib/ssm-parameter-reader.d.ts +0 -21
- package/lib/ssm-parameter-reader.js +0 -48
- package/lib/tags.d.ts +0 -8
- package/lib/tags.js +0 -36
- package/lib/utils.d.ts +0 -2
- package/lib/utils.js +0 -17
- package/lib/webapp/index.d.ts +0 -3
- package/lib/webapp/index.js +0 -10
- package/lib/webapp/monitor.d.ts +0 -187
- package/lib/webapp/monitor.js +0 -156
- package/lib/webapp/security-headers.d.ts +0 -38
- package/lib/webapp/security-headers.js +0 -129
- package/lib/webapp/webapp.d.ts +0 -116
- package/lib/webapp/webapp.js +0 -118
- package/lib/webapp-deploy-via-role.d.ts +0 -25
- package/lib/webapp-deploy-via-role.js +0 -32
package/lib/webapp/webapp.d.ts
DELETED
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
import * as constructs from "constructs";
|
|
2
|
-
import * as certificatemanager from "aws-cdk-lib/aws-certificatemanager";
|
|
3
|
-
import * as cloudfront from "aws-cdk-lib/aws-cloudfront";
|
|
4
|
-
import * as origins from "aws-cdk-lib/aws-cloudfront-origins";
|
|
5
|
-
import * as r53 from "aws-cdk-lib/aws-route53";
|
|
6
|
-
import * as s3 from "aws-cdk-lib/aws-s3";
|
|
7
|
-
import * as webappDeploy from "@capraconsulting/webapp-deploy-lambda";
|
|
8
|
-
import { WebappSecurityHeadersProps } from "./security-headers";
|
|
9
|
-
export interface WebappProps {
|
|
10
|
-
/**
|
|
11
|
-
* ACM certificate that covers the specifeid domain names.
|
|
12
|
-
*
|
|
13
|
-
* This certificate must be created in the region us-east-1.
|
|
14
|
-
*
|
|
15
|
-
* @default - The CloudFront wildcard certificate (*.cloudfront.net) will be used.
|
|
16
|
-
*/
|
|
17
|
-
cloudfrontCertificate?: certificatemanager.ICertificate;
|
|
18
|
-
/**
|
|
19
|
-
* List of domain names the CloudFront distribution should use.
|
|
20
|
-
*
|
|
21
|
-
* @default - Generated name (e.g., d111111abcdef8.cloudfront.net)
|
|
22
|
-
*/
|
|
23
|
-
domainNames?: string[];
|
|
24
|
-
/**
|
|
25
|
-
* AWS WAF web ACL to associate with the CloudFront distribution.
|
|
26
|
-
*
|
|
27
|
-
* To specify a web ACL created using the latest version of AWS WAF, use the ACL ARN, for example
|
|
28
|
-
* `arn:aws:wafv2:us-east-1:123456789012:global/webacl/ExampleWebACL/473e64fd-f30b-4765-81a0-62ad96dd167a`.
|
|
29
|
-
* To specify a web ACL created using AWS WAF Classic, use the ACL ID, for example `473e64fd-f30b-4765-81a0-62ad96dd167a`.
|
|
30
|
-
*
|
|
31
|
-
* @default - No AWS Web Application Firewall web access control list (web ACL).
|
|
32
|
-
*/
|
|
33
|
-
webAclId?: string;
|
|
34
|
-
/**
|
|
35
|
-
* The path to the page that will be served for users not allowed to access
|
|
36
|
-
* the site when using WAF. E.g. "/4xx-errors/403-forbidden.html".
|
|
37
|
-
*
|
|
38
|
-
* Note that this wil catch any 403 errors from the origin(s), that might
|
|
39
|
-
* cover any other behaviors is added.
|
|
40
|
-
*
|
|
41
|
-
* @default - No custom page for 403 errors.
|
|
42
|
-
*/
|
|
43
|
-
webAclErrorPagePath?: string;
|
|
44
|
-
/**
|
|
45
|
-
* Enable, disable or configure security headers for the web application
|
|
46
|
-
* @default - a set of strict security headers are configured by default
|
|
47
|
-
*/
|
|
48
|
-
securityHeaders?: {
|
|
49
|
-
/**
|
|
50
|
-
* Enable adding common security headers to CloudFront responses
|
|
51
|
-
*
|
|
52
|
-
* If enabled, the default behavior is to add the following headers with fairly strict defaults. Most of the headers can be customized:
|
|
53
|
-
* - Content-Security-Policy
|
|
54
|
-
* - Referrer-Policy
|
|
55
|
-
* - Strict-Transport-Security
|
|
56
|
-
* - X-Content-Type-Options
|
|
57
|
-
* - X-Frame-Options
|
|
58
|
-
* - X-XSS-Protection
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
* @default true
|
|
62
|
-
*/
|
|
63
|
-
enabled?: boolean;
|
|
64
|
-
/**
|
|
65
|
-
* Security headers overrides.
|
|
66
|
-
*
|
|
67
|
-
* Used to override certain default security header values if the webapp requires different settings than the defaults.
|
|
68
|
-
*
|
|
69
|
-
* NOTE: If you need to disable certain headers, you must explicitly set them to undefined
|
|
70
|
-
*
|
|
71
|
-
* @default - A set of strict security header values will be used
|
|
72
|
-
*/
|
|
73
|
-
behaviorOverrides?: WebappSecurityHeadersProps;
|
|
74
|
-
};
|
|
75
|
-
/**
|
|
76
|
-
* Cloudfront behavior overrides.
|
|
77
|
-
*
|
|
78
|
-
* Used to override cloudfront behavior
|
|
79
|
-
*
|
|
80
|
-
* NOTE: ResponseHeadersPolicy defined here will overwrite BOTH the default security headers policy and
|
|
81
|
-
* any values specified in securityHeaders.behaviorOverrides.
|
|
82
|
-
*/
|
|
83
|
-
overrideCloudFrontBehaviourOptions?: Partial<cloudfront.BehaviorOptions>;
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* CloudFront for a Single-Page-Application.
|
|
87
|
-
*
|
|
88
|
-
* A bucket will be created and its prefix "web" is used to
|
|
89
|
-
* serve files. Use the addDeployment method to automatically
|
|
90
|
-
* deploy files as part the the CDK deployment.
|
|
91
|
-
*/
|
|
92
|
-
export declare class Webapp extends constructs.Construct {
|
|
93
|
-
readonly distribution: cloudfront.Distribution;
|
|
94
|
-
readonly webappBucket: s3.Bucket;
|
|
95
|
-
readonly webappOrigin: origins.S3Origin;
|
|
96
|
-
constructor(scope: constructs.Construct, id: string, props: WebappProps);
|
|
97
|
-
addDnsRecord(hostedZone: r53.IHostedZone, domainName: string): void;
|
|
98
|
-
/**
|
|
99
|
-
* Add a deployment using webapp-deploy-lambda.
|
|
100
|
-
*
|
|
101
|
-
* See https://github.com/capraconsulting/webapp-deploy-lambda
|
|
102
|
-
* for details about how this works.
|
|
103
|
-
*/
|
|
104
|
-
addDeployment(
|
|
105
|
-
/**
|
|
106
|
-
* The deployment source.
|
|
107
|
-
*/
|
|
108
|
-
source: webappDeploy.ISource, props?: {
|
|
109
|
-
/**
|
|
110
|
-
* Include source maps in the deployment.
|
|
111
|
-
*
|
|
112
|
-
* @default false
|
|
113
|
-
*/
|
|
114
|
-
deploySourceMaps?: boolean;
|
|
115
|
-
}): void;
|
|
116
|
-
}
|
package/lib/webapp/webapp.js
DELETED
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Webapp = void 0;
|
|
4
|
-
const constructs = require("constructs");
|
|
5
|
-
const cloudfront = require("aws-cdk-lib/aws-cloudfront");
|
|
6
|
-
const origins = require("aws-cdk-lib/aws-cloudfront-origins");
|
|
7
|
-
const iam = require("aws-cdk-lib/aws-iam");
|
|
8
|
-
const r53 = require("aws-cdk-lib/aws-route53");
|
|
9
|
-
const r53t = require("aws-cdk-lib/aws-route53-targets");
|
|
10
|
-
const s3 = require("aws-cdk-lib/aws-s3");
|
|
11
|
-
const webappDeploy = require("@capraconsulting/webapp-deploy-lambda");
|
|
12
|
-
const security_headers_1 = require("./security-headers");
|
|
13
|
-
/**
|
|
14
|
-
* CloudFront for a Single-Page-Application.
|
|
15
|
-
*
|
|
16
|
-
* A bucket will be created and its prefix "web" is used to
|
|
17
|
-
* serve files. Use the addDeployment method to automatically
|
|
18
|
-
* deploy files as part the the CDK deployment.
|
|
19
|
-
*/
|
|
20
|
-
class Webapp extends constructs.Construct {
|
|
21
|
-
constructor(scope, id, props) {
|
|
22
|
-
var _a, _b, _c, _d, _e;
|
|
23
|
-
super(scope, id);
|
|
24
|
-
if (props.webAclErrorPagePath != null && props.webAclId == null) {
|
|
25
|
-
throw new Error("webAclErrorPagePath set but webAclId is missing");
|
|
26
|
-
}
|
|
27
|
-
this.webappBucket = new s3.Bucket(this, "Bucket", {
|
|
28
|
-
encryption: s3.BucketEncryption.S3_MANAGED,
|
|
29
|
-
});
|
|
30
|
-
const originAccessIdentity = new cloudfront.OriginAccessIdentity(this, "OriginAccessIdentity");
|
|
31
|
-
this.webappBucket.addToResourcePolicy(new iam.PolicyStatement({
|
|
32
|
-
resources: [this.webappBucket.arnForObjects("*")],
|
|
33
|
-
actions: ["s3:GetObject"],
|
|
34
|
-
principals: [originAccessIdentity.grantPrincipal],
|
|
35
|
-
}));
|
|
36
|
-
this.webappBucket.addToResourcePolicy(new iam.PolicyStatement({
|
|
37
|
-
resources: [this.webappBucket.bucketArn],
|
|
38
|
-
// Grant s3:ListBucket so that CloudFront receives 404 from
|
|
39
|
-
// the origin rather than 403 when accessing files that
|
|
40
|
-
// does not exist. We cannot fallback to index.html for 403
|
|
41
|
-
// errors since it would also be served if using a WAF.
|
|
42
|
-
// See https://aws.amazon.com/premiumsupport/knowledge-center/s3-website-cloudfront-error-403/#The_requested_objects_must_exist_in_the_bucket
|
|
43
|
-
actions: ["s3:ListBucket"],
|
|
44
|
-
principals: [originAccessIdentity.grantPrincipal],
|
|
45
|
-
}));
|
|
46
|
-
this.webappOrigin = new origins.S3Origin(this.webappBucket, {
|
|
47
|
-
// webapp-deploy-lambda will upload files to this folder
|
|
48
|
-
// since it keeps some other administrative files outside.
|
|
49
|
-
originPath: "/web",
|
|
50
|
-
originAccessIdentity,
|
|
51
|
-
});
|
|
52
|
-
const errorResponses = [
|
|
53
|
-
{
|
|
54
|
-
httpStatus: 404,
|
|
55
|
-
responseHttpStatus: 200,
|
|
56
|
-
responsePagePath: "/index.html",
|
|
57
|
-
},
|
|
58
|
-
];
|
|
59
|
-
if (props.webAclErrorPagePath != null) {
|
|
60
|
-
errorResponses.push({
|
|
61
|
-
httpStatus: 403,
|
|
62
|
-
responseHttpStatus: 403,
|
|
63
|
-
responsePagePath: props.webAclErrorPagePath,
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
let responseHeadersPolicy;
|
|
67
|
-
if (((_b = (_a = props.securityHeaders) === null || _a === void 0 ? void 0 : _a.enabled) !== null && _b !== void 0 ? _b : true) &&
|
|
68
|
-
!((_d = (_c = props.overrideCloudFrontBehaviourOptions) === null || _c === void 0 ? void 0 : _c.responseHeadersPolicy) === null || _d === void 0 ? void 0 : _d.responseHeadersPolicyId)) {
|
|
69
|
-
const securityHeaders = new security_headers_1.WebappSecurityHeaders(this, "SecurityHeaders", {
|
|
70
|
-
...(_e = props.securityHeaders) === null || _e === void 0 ? void 0 : _e.behaviorOverrides,
|
|
71
|
-
});
|
|
72
|
-
responseHeadersPolicy = securityHeaders.responseHeadersPolicy;
|
|
73
|
-
}
|
|
74
|
-
this.distribution = new cloudfront.Distribution(this, "Distribution", {
|
|
75
|
-
defaultBehavior: {
|
|
76
|
-
origin: this.webappOrigin,
|
|
77
|
-
viewerProtocolPolicy: cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
|
|
78
|
-
responseHeadersPolicy: responseHeadersPolicy,
|
|
79
|
-
...props.overrideCloudFrontBehaviourOptions,
|
|
80
|
-
},
|
|
81
|
-
defaultRootObject: "index.html",
|
|
82
|
-
priceClass: cloudfront.PriceClass.PRICE_CLASS_100,
|
|
83
|
-
certificate: props.cloudfrontCertificate,
|
|
84
|
-
domainNames: props.domainNames,
|
|
85
|
-
errorResponses,
|
|
86
|
-
webAclId: props.webAclId,
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
addDnsRecord(hostedZone, domainName) {
|
|
90
|
-
new r53.ARecord(this, `DnsRecord${domainName}`, {
|
|
91
|
-
zone: hostedZone,
|
|
92
|
-
recordName: `${domainName}.`,
|
|
93
|
-
target: r53.RecordTarget.fromAlias(new r53t.CloudFrontTarget(this.distribution)),
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Add a deployment using webapp-deploy-lambda.
|
|
98
|
-
*
|
|
99
|
-
* See https://github.com/capraconsulting/webapp-deploy-lambda
|
|
100
|
-
* for details about how this works.
|
|
101
|
-
*/
|
|
102
|
-
addDeployment(
|
|
103
|
-
/**
|
|
104
|
-
* The deployment source.
|
|
105
|
-
*/
|
|
106
|
-
source, props) {
|
|
107
|
-
var _a;
|
|
108
|
-
const deploySourceMaps = (_a = props === null || props === void 0 ? void 0 : props.deploySourceMaps) !== null && _a !== void 0 ? _a : false;
|
|
109
|
-
new webappDeploy.WebappDeploy(this, "Deploy", {
|
|
110
|
-
source: source,
|
|
111
|
-
webBucket: this.webappBucket,
|
|
112
|
-
distribution: this.distribution,
|
|
113
|
-
excludePattern: deploySourceMaps ? undefined : "\\.map$",
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
exports.Webapp = Webapp;
|
|
118
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3dlYmFwcC93ZWJhcHAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUNBQXdDO0FBRXhDLHlEQUF3RDtBQUN4RCw4REFBNkQ7QUFDN0QsMkNBQTBDO0FBQzFDLCtDQUE4QztBQUM5Qyx3REFBdUQ7QUFDdkQseUNBQXdDO0FBQ3hDLHNFQUFxRTtBQUNyRSx5REFHMkI7QUErRTNCOzs7Ozs7R0FNRztBQUNILE1BQWEsTUFBTyxTQUFRLFVBQVUsQ0FBQyxTQUFTO0lBSzlDLFlBQVksS0FBMkIsRUFBRSxFQUFVLEVBQUUsS0FBa0I7O1FBQ3JFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFFaEIsSUFBSSxLQUFLLENBQUMsbUJBQW1CLElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksSUFBSSxFQUFFLENBQUM7WUFDaEUsTUFBTSxJQUFJLEtBQUssQ0FBQyxpREFBaUQsQ0FBQyxDQUFBO1FBQ3BFLENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFO1lBQ2hELFVBQVUsRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsVUFBVTtTQUMzQyxDQUFDLENBQUE7UUFFRixNQUFNLG9CQUFvQixHQUFHLElBQUksVUFBVSxDQUFDLG9CQUFvQixDQUM5RCxJQUFJLEVBQ0osc0JBQXNCLENBQ3ZCLENBQUE7UUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLG1CQUFtQixDQUNuQyxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUM7WUFDdEIsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDakQsT0FBTyxFQUFFLENBQUMsY0FBYyxDQUFDO1lBQ3pCLFVBQVUsRUFBRSxDQUFDLG9CQUFvQixDQUFDLGNBQWMs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Q1g7O09BRUc7SUFDSCxNQUE0QixFQUM1QixLQU9DOztRQUVELE1BQU0sZ0JBQWdCLEdBQUcsTUFBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsZ0JBQWdCLG1DQUFJLEtBQUssQ0FBQTtRQUV6RCxJQUFJLFlBQVksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRTtZQUM1QyxNQUFNLEVBQUUsTUFBTTtZQUNkLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWTtZQUM1QixZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7WUFDL0IsY0FBYyxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVM7U0FDekQsQ0FBQyxDQUFBO0lBQ0osQ0FBQztDQUNGO0FBeklELHdCQXlJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNvbnN0cnVjdHMgZnJvbSBcImNvbnN0cnVjdHNcIlxuaW1wb3J0ICogYXMgY2VydGlmaWNhdGVtYW5hZ2VyIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2VydGlmaWNhdGVtYW5hZ2VyXCJcbmltcG9ydCAqIGFzIGNsb3VkZnJvbnQgZnJvbSBcImF3cy1jZGstbGliL2F3cy1jbG91ZGZyb250XCJcbmltcG9ydCAqIGFzIG9yaWdpbnMgZnJvbSBcImF3cy1jZGstbGliL2F3cy1jbG91ZGZyb250LW9yaWdpbnNcIlxuaW1wb3J0ICogYXMgaWFtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCJcbmltcG9ydCAqIGFzIHI1MyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJvdXRlNTNcIlxuaW1wb3J0ICogYXMgcjUzdCBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJvdXRlNTMtdGFyZ2V0c1wiXG5pbXBvcnQgKiBhcyBzMyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzXCJcbmltcG9ydCAqIGFzIHdlYmFwcERlcGxveSBmcm9tIFwiQGNhcHJhY29uc3VsdGluZy93ZWJhcHAtZGVwbG95LWxhbWJkYVwiXG5pbXBvcnQge1xuICBXZWJhcHBTZWN1cml0eUhlYWRlcnMsXG4gIFdlYmFwcFNlY3VyaXR5SGVhZGVyc1Byb3BzLFxufSBmcm9tIFwiLi9zZWN1cml0eS1oZWFkZXJzXCJcblxuZXhwb3J0IGludGVyZmFjZSBXZWJhcHBQcm9wcyB7XG4gIC8qKlxuICAgKiBBQ00gY2VydGlmaWNhdGUgdGhhdCBjb3ZlcnMgdGhlIHNwZWNpZmVpZCBkb21haW4gbmFtZXMuXG4gICAqXG4gICAqIFRoaXMgY2VydGlmaWNhdGUgbXVzdCBiZSBjcmVhdGVkIGluIHRoZSByZWdpb24gdXMtZWFzdC0xLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFRoZSBDbG91ZEZyb250IHdpbGRjYXJkIGNlcnRpZmljYXRlICgqLmNsb3VkZnJvbnQubmV0KSB3aWxsIGJlIHVzZWQuXG4gICAqL1xuICBjbG91ZGZyb250Q2VydGlmaWNhdGU/OiBjZXJ0aWZpY2F0ZW1hbmFnZXIuSUNlcnRpZmljYXRlXG4gIC8qKlxuICAgKiBMaXN0IG9mIGRvbWFpbiBuYW1lcyB0aGUgQ2xvdWRGcm9udCBkaXN0cmlidXRpb24gc2hvdWxkIHVzZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBHZW5lcmF0ZWQgbmFtZSAoZS5nLiwgZDExMTExMWFiY2RlZjguY2xvdWRmcm9udC5uZXQpXG4gICAqL1xuICBkb21haW5OYW1lcz86IHN0cmluZ1tdXG4gIC8qKlxuICAgKiBBV1MgV0FGIHdlYiBBQ0wgdG8gYXNzb2NpYXRlIHdpdGggdGhlIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uLlxuICAgKlxuICAgKiBUbyBzcGVjaWZ5IGEgd2ViIEFDTCBjcmVhdGVkIHVzaW5nIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBBV1MgV0FGLCB1c2UgdGhlIEFDTCBBUk4sIGZvciBleGFtcGxlXG4gICAqIGBhcm46YXdzOndhZnYyOnVzLWVhc3QtMToxMjM0NTY3ODkwMTI6Z2xvYmFsL3dlYmFjbC9FeGFtcGxlV2ViQUNMLzQ3M2U2NGZkLWYzMGItNDc2NS04MWEwLTYyYWQ5NmRkMTY3YWAuXG4gICAqIFRvIHNwZWNpZnkgYSB3ZWIgQUNMIGNyZWF0ZWQgdXNpbmcgQVdTIFdBRiBDbGFzc2ljLCB1c2UgdGhlIEFDTCBJRCwgZm9yIGV4YW1wbGUgYDQ3M2U2NGZkLWYzMGItNDc2NS04MWEwLTYyYWQ5NmRkMTY3YWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gQVdTIFdlYiBBcHBsaWNhdGlvbiBGaXJld2FsbCB3ZWIgYWNjZXNzIGNvbnRyb2wgbGlzdCAod2ViIEFDTCkuXG4gICAqL1xuICB3ZWJBY2xJZD86IHN0cmluZ1xuICAvKipcbiAgICogVGhlIHBhdGggdG8gdGhlIHBhZ2UgdGhhdCB3aWxsIGJlIHNlcnZlZCBmb3IgdXNlcnMgbm90IGFsbG93ZWQgdG8gYWNjZXNzXG4gICAqIHRoZSBzaXRlIHdoZW4gdXNpbmcgV0FGLiBFLmcuIFwiLzR4eC1lcnJvcnMvNDAzLWZvcmJpZGRlbi5odG1sXCIuXG4gICAqXG4gICAqIE5vdGUgdGhhdCB0aGlzIHdpbCBjYXRjaCBhbnkgNDAzIGVycm9ycyBmcm9tIHRoZSBvcmlnaW4ocyksIHRoYXQgbWlnaHRcbiAgICogY292ZXIgYW55IG90aGVyIGJlaGF2aW9ycyBpcyBhZGRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBjdXN0b20gcGFnZSBmb3IgNDAzIGVycm9ycy5cbiAgICovXG4gIHdlYkFjbEVycm9yUGFnZVBhdGg/OiBzdHJpbmdcbiAgLyoqXG4gICAqICBFbmFibGUsIGRpc2FibGUgb3IgY29uZmlndXJlIHNlY3VyaXR5IGhlYWRlcnMgZm9yIHRoZSB3ZWIgYXBwbGljYXRpb25cbiAgICogQGRlZmF1bHQgLSBhIHNldCBvZiBzdHJpY3Qgc2VjdXJpdHkgaGVhZGVycyBhcmUgY29uZmlndXJlZCBieSBkZWZhdWx0XG4gICAqL1xuICBzZWN1cml0eUhlYWRlcnM/OiB7XG4gICAgLyoqXG4gICAgICogRW5hYmxlIGFkZGluZyBjb21tb24gc2VjdXJpdHkgaGVhZGVycyB0byBDbG91ZEZyb250IHJlc3BvbnNlc1xuICAgICAqXG4gICAgICogSWYgZW5hYmxlZCwgdGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgdG8gYWRkIHRoZSBmb2xsb3dpbmcgaGVhZGVycyB3aXRoIGZhaXJseSBzdHJpY3QgZGVmYXVsdHMuIE1vc3Qgb2YgdGhlIGhlYWRlcnMgY2FuIGJlIGN1c3RvbWl6ZWQ6XG4gICAgICogLSBDb250ZW50LVNlY3VyaXR5LVBvbGljeVxuICAgICAqIC0gUmVmZXJyZXItUG9saWN5XG4gICAgICogLSBTdHJpY3QtVHJhbnNwb3J0LVNlY3VyaXR5XG4gICAgICogLSBYLUNvbnRlbnQtVHlwZS1PcHRpb25zXG4gICAgICogLSBYLUZyYW1lLU9wdGlvbnNcbiAgICAgKiAtIFgtWFNTLVByb3RlY3Rpb25cbiAgICAgKlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIGVuYWJsZWQ/OiBib29sZWFuXG4gICAgLyoqXG4gICAgICogU2VjdXJpdHkgaGVhZGVycyBvdmVycmlkZXMuXG4gICAgICpcbiAgICAgKiBVc2VkIHRvIG92ZXJyaWRlIGNlcnRhaW4gZGVmYXVsdCBzZWN1cml0eSBoZWFkZXIgdmFsdWVzIGlmIHRoZSB3ZWJhcHAgcmVxdWlyZXMgZGlmZmVyZW50IHNldHRpbmdzIHRoYW4gdGhlIGRlZmF1bHRzLlxuICAgICAqXG4gICAgICogTk9URTogSWYgeW91IG5lZWQgdG8gZGlzYWJsZSBjZXJ0YWluIGhlYWRlcnMsIHlvdSBtdXN0IGV4cGxpY2l0bHkgc2V0IHRoZW0gdG8gdW5kZWZpbmVkXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAtIEEgc2V0IG9mIHN0cmljdCBzZWN1cml0eSBoZWFkZXIgdmFsdWVzIHdpbGwgYmUgdXNlZFxuICAgICAqL1xuICAgIGJlaGF2aW9yT3ZlcnJpZGVzPzogV2ViYXBwU2VjdXJpdHlIZWFkZXJzUHJvcHNcbiAgfVxuICAvKipcbiAgICogQ2xvdWRmcm9udCBiZWhhdmlvciBvdmVycmlkZXMuXG4gICAqXG4gICAqIFVzZWQgdG8gb3ZlcnJpZGUgY2xvdWRmcm9udCBiZWhhdmlvclxuICAgKlxuICAgKiBOT1RFOiBSZXNwb25zZUhlYWRlcnNQb2xpY3kgZGVmaW5lZCBoZXJlIHdpbGwgb3ZlcndyaXRlIEJPVEggdGhlIGRlZmF1bHQgc2VjdXJpdHkgaGVhZGVycyBwb2xpY3kgYW5kXG4gICAqIGFueSB2YWx1ZXMgc3BlY2lmaWVkIGluIHNlY3VyaXR5SGVhZGVycy5iZWhhdmlvck92ZXJyaWRlcy5cbiAgICovXG4gIG92ZXJyaWRlQ2xvdWRGcm9udEJlaGF2aW91ck9wdGlvbnM/OiBQYXJ0aWFsPGNsb3VkZnJvbnQuQmVoYXZpb3JPcHRpb25zPlxufVxuXG4vKipcbiAqIENsb3VkRnJvbnQgZm9yIGEgU2luZ2xlLVBhZ2UtQXBwbGljYXRpb24uXG4gKlxuICogQSBidWNrZXQgd2lsbCBiZSBjcmVhdGVkIGFuZCBpdHMgcHJlZml4IFwid2ViXCIgaXMgdXNlZCB0b1xuICogc2VydmUgZmlsZXMuIFVzZSB0aGUgYWRkRGVwbG95bWVudCBtZXRob2QgdG8gYXV0b21hdGljYWxseVxuICogZGVwbG95IGZpbGVzIGFzIHBhcnQgdGhlIHRoZSBDREsgZGVwbG95bWVudC5cbiAqL1xuZXhwb3J0IGNsYXNzIFdlYmFwcCBleHRlbmRzIGNvbnN0cnVjdHMuQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IGRpc3RyaWJ1dGlvbjogY2xvdWRmcm9udC5EaXN0cmlidXRpb25cbiAgcHVibGljIHJlYWRvbmx5IHdlYmFwcEJ1Y2tldDogczMuQnVja2V0XG4gIHB1YmxpYyByZWFkb25seSB3ZWJhcHBPcmlnaW46IG9yaWdpbnMuUzNPcmlnaW5cblxuICBjb25zdHJ1Y3RvcihzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBXZWJhcHBQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZClcblxuICAgIGlmIChwcm9wcy53ZWJBY2xFcnJvclBhZ2VQYXRoICE9IG51bGwgJiYgcHJvcHMud2ViQWNsSWQgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwid2ViQWNsRXJyb3JQYWdlUGF0aCBzZXQgYnV0IHdlYkFjbElkIGlzIG1pc3NpbmdcIilcbiAgICB9XG5cbiAgICB0aGlzLndlYmFwcEJ1Y2tldCA9IG5ldyBzMy5CdWNrZXQodGhpcywgXCJCdWNrZXRcIiwge1xuICAgICAgZW5jcnlwdGlvbjogczMuQnVja2V0RW5jcnlwdGlvbi5TM19NQU5BR0VELFxuICAgIH0pXG5cbiAgICBjb25zdCBvcmlnaW5BY2Nlc3NJZGVudGl0eSA9IG5ldyBjbG91ZGZyb250Lk9yaWdpbkFjY2Vzc0lkZW50aXR5KFxuICAgICAgdGhpcyxcbiAgICAgIFwiT3JpZ2luQWNjZXNzSWRlbnRpdHlcIixcbiAgICApXG5cbiAgICB0aGlzLndlYmFwcEJ1Y2tldC5hZGRUb1Jlc291cmNlUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICByZXNvdXJjZXM6IFt0aGlzLndlYmFwcEJ1Y2tldC5hcm5Gb3JPYmplY3RzKFwiKlwiKV0sXG4gICAgICAgIGFjdGlvbnM6IFtcInMzOkdldE9iamVjdFwiXSxcbiAgICAgICAgcHJpbmNpcGFsczogW29yaWdpbkFjY2Vzc0lkZW50aXR5LmdyYW50UHJpbmNpcGFsXSxcbiAgICAgIH0pLFxuICAgIClcblxuICAgIHRoaXMud2ViYXBwQnVja2V0LmFkZFRvUmVzb3VyY2VQb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIHJlc291cmNlczogW3RoaXMud2ViYXBwQnVja2V0LmJ1Y2tldEFybl0sXG4gICAgICAgIC8vIEdyYW50IHMzOkxpc3RCdWNrZXQgc28gdGhhdCBDbG91ZEZyb250IHJlY2VpdmVzIDQwNCBmcm9tXG4gICAgICAgIC8vIHRoZSBvcmlnaW4gcmF0aGVyIHRoYW4gNDAzIHdoZW4gYWNjZXNzaW5nIGZpbGVzIHRoYXRcbiAgICAgICAgLy8gZG9lcyBub3QgZXhpc3QuIFdlIGNhbm5vdCBmYWxsYmFjayB0byBpbmRleC5odG1sIGZvciA0MDNcbiAgICAgICAgLy8gZXJyb3JzIHNpbmNlIGl0IHdvdWxkIGFsc28gYmUgc2VydmVkIGlmIHVzaW5nIGEgV0FGLlxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9wcmVtaXVtc3VwcG9ydC9rbm93bGVkZ2UtY2VudGVyL3MzLXdlYnNpdGUtY2xvdWRmcm9udC1lcnJvci00MDMvI1RoZV9yZXF1ZXN0ZWRfb2JqZWN0c19tdXN0X2V4aXN0X2luX3RoZV9idWNrZXRcbiAgICAgICAgYWN0aW9uczogW1wiczM6TGlzdEJ1Y2tldFwiXSxcbiAgICAgICAgcHJpbmNpcGFsczogW29yaWdpbkFjY2Vzc0lkZW50aXR5LmdyYW50UHJpbmNpcGFsXSxcbiAgICAgIH0pLFxuICAgIClcblxuICAgIHRoaXMud2ViYXBwT3JpZ2luID0gbmV3IG9yaWdpbnMuUzNPcmlnaW4odGhpcy53ZWJhcHBCdWNrZXQsIHtcbiAgICAgIC8vIHdlYmFwcC1kZXBsb3ktbGFtYmRhIHdpbGwgdXBsb2FkIGZpbGVzIHRvIHRoaXMgZm9sZGVyXG4gICAgICAvLyBzaW5jZSBpdCBrZWVwcyBzb21lIG90aGVyIGFkbWluaXN0cmF0aXZlIGZpbGVzIG91dHNpZGUuXG4gICAgICBvcmlnaW5QYXRoOiBcIi93ZWJcIixcbiAgICAgIG9yaWdpbkFjY2Vzc0lkZW50aXR5LFxuICAgIH0pXG5cbiAgICBjb25zdCBlcnJvclJlc3BvbnNlczogY2xvdWRmcm9udC5FcnJvclJlc3BvbnNlW10gPSBbXG4gICAgICB7XG4gICAgICAgIGh0dHBTdGF0dXM6IDQwNCxcbiAgICAgICAgcmVzcG9uc2VIdHRwU3RhdHVzOiAyMDAsXG4gICAgICAgIHJlc3BvbnNlUGFnZVBhdGg6IFwiL2luZGV4Lmh0bWxcIixcbiAgICAgIH0sXG4gICAgXVxuXG4gICAgaWYgKHByb3BzLndlYkFjbEVycm9yUGFnZVBhdGggIT0gbnVsbCkge1xuICAgICAgZXJyb3JSZXNwb25zZXMucHVzaCh7XG4gICAgICAgIGh0dHBTdGF0dXM6IDQwMyxcbiAgICAgICAgcmVzcG9uc2VIdHRwU3RhdHVzOiA0MDMsXG4gICAgICAgIHJlc3BvbnNlUGFnZVBhdGg6IHByb3BzLndlYkFjbEVycm9yUGFnZVBhdGgsXG4gICAgICB9KVxuICAgIH1cblxuICAgIGxldCByZXNwb25zZUhlYWRlcnNQb2xpY3k6IGNsb3VkZnJvbnQuSVJlc3BvbnNlSGVhZGVyc1BvbGljeSB8IHVuZGVmaW5lZFxuXG4gICAgaWYgKFxuICAgICAgKHByb3BzLnNlY3VyaXR5SGVhZGVycz8uZW5hYmxlZCA/PyB0cnVlKSAmJlxuICAgICAgIXByb3BzLm92ZXJyaWRlQ2xvdWRGcm9udEJlaGF2aW91ck9wdGlvbnM/LnJlc3BvbnNlSGVhZGVyc1BvbGljeVxuICAgICAgICA/LnJlc3BvbnNlSGVhZGVyc1BvbGljeUlkXG4gICAgKSB7XG4gICAgICBjb25zdCBzZWN1cml0eUhlYWRlcnMgPSBuZXcgV2ViYXBwU2VjdXJpdHlIZWFkZXJzKFxuICAgICAgICB0aGlzLFxuICAgICAgICBcIlNlY3VyaXR5SGVhZGVyc1wiLFxuICAgICAgICB7XG4gICAgICAgICAgLi4ucHJvcHMuc2VjdXJpdHlIZWFkZXJzPy5iZWhhdmlvck92ZXJyaWRlcyxcbiAgICAgICAgfSxcbiAgICAgIClcbiAgICAgIHJlc3BvbnNlSGVhZGVyc1BvbGljeSA9IHNlY3VyaXR5SGVhZGVycy5yZXNwb25zZUhlYWRlcnNQb2xpY3lcbiAgICB9XG5cbiAgICB0aGlzLmRpc3RyaWJ1dGlvbiA9IG5ldyBjbG91ZGZyb250LkRpc3RyaWJ1dGlvbih0aGlzLCBcIkRpc3RyaWJ1dGlvblwiLCB7XG4gICAgICBkZWZhdWx0QmVoYXZpb3I6IHtcbiAgICAgICAgb3JpZ2luOiB0aGlzLndlYmFwcE9yaWdpbixcbiAgICAgICAgdmlld2VyUHJvdG9jb2xQb2xpY3k6IGNsb3VkZnJvbnQuVmlld2VyUHJvdG9jb2xQb2xpY3kuUkVESVJFQ1RfVE9fSFRUUFMsXG4gICAgICAgIHJlc3BvbnNlSGVhZGVyc1BvbGljeTogcmVzcG9uc2VIZWFkZXJzUG9saWN5LFxuICAgICAgICAuLi5wcm9wcy5vdmVycmlkZUNsb3VkRnJvbnRCZWhhdmlvdXJPcHRpb25zLFxuICAgICAgfSxcbiAgICAgIGRlZmF1bHRSb290T2JqZWN0OiBcImluZGV4Lmh0bWxcIixcbiAgICAgIHByaWNlQ2xhc3M6IGNsb3VkZnJvbnQuUHJpY2VDbGFzcy5QUklDRV9DTEFTU18xMDAsXG4gICAgICBjZXJ0aWZpY2F0ZTogcHJvcHMuY2xvdWRmcm9udENlcnRpZmljYXRlLFxuICAgICAgZG9tYWluTmFtZXM6IHByb3BzLmRvbWFpbk5hbWVzLFxuICAgICAgZXJyb3JSZXNwb25zZXMsXG4gICAgICB3ZWJBY2xJZDogcHJvcHMud2ViQWNsSWQsXG4gICAgfSlcbiAgfVxuXG4gIGFkZERuc1JlY29yZChob3N0ZWRab25lOiByNTMuSUhvc3RlZFpvbmUsIGRvbWFpbk5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIG5ldyByNTMuQVJlY29yZCh0aGlzLCBgRG5zUmVjb3JkJHtkb21haW5OYW1lfWAsIHtcbiAgICAgIHpvbmU6IGhvc3RlZFpvbmUsXG4gICAgICByZWNvcmROYW1lOiBgJHtkb21haW5OYW1lfS5gLFxuICAgICAgdGFyZ2V0OiByNTMuUmVjb3JkVGFyZ2V0LmZyb21BbGlhcyhcbiAgICAgICAgbmV3IHI1M3QuQ2xvdWRGcm9udFRhcmdldCh0aGlzLmRpc3RyaWJ1dGlvbiksXG4gICAgICApLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgZGVwbG95bWVudCB1c2luZyB3ZWJhcHAtZGVwbG95LWxhbWJkYS5cbiAgICpcbiAgICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jYXByYWNvbnN1bHRpbmcvd2ViYXBwLWRlcGxveS1sYW1iZGFcbiAgICogZm9yIGRldGFpbHMgYWJvdXQgaG93IHRoaXMgd29ya3MuXG4gICAqL1xuICBhZGREZXBsb3ltZW50KFxuICAgIC8qKlxuICAgICAqIFRoZSBkZXBsb3ltZW50IHNvdXJjZS5cbiAgICAgKi9cbiAgICBzb3VyY2U6IHdlYmFwcERlcGxveS5JU291cmNlLFxuICAgIHByb3BzPzoge1xuICAgICAgLyoqXG4gICAgICAgKiBJbmNsdWRlIHNvdXJjZSBtYXBzIGluIHRoZSBkZXBsb3ltZW50LlxuICAgICAgICpcbiAgICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICAgKi9cbiAgICAgIGRlcGxveVNvdXJjZU1hcHM/OiBib29sZWFuXG4gICAgfSxcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgZGVwbG95U291cmNlTWFwcyA9IHByb3BzPy5kZXBsb3lTb3VyY2VNYXBzID8/IGZhbHNlXG5cbiAgICBuZXcgd2ViYXBwRGVwbG95LldlYmFwcERlcGxveSh0aGlzLCBcIkRlcGxveVwiLCB7XG4gICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgIHdlYkJ1Y2tldDogdGhpcy53ZWJhcHBCdWNrZXQsXG4gICAgICBkaXN0cmlidXRpb246IHRoaXMuZGlzdHJpYnV0aW9uLFxuICAgICAgZXhjbHVkZVBhdHRlcm46IGRlcGxveVNvdXJjZU1hcHMgPyB1bmRlZmluZWQgOiBcIlxcXFwubWFwJFwiLFxuICAgIH0pXG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import * as constructs from "constructs";
|
|
2
|
-
import { WebappDeployProps } from "@capraconsulting/webapp-deploy-lambda";
|
|
3
|
-
interface Props {
|
|
4
|
-
/**
|
|
5
|
-
* Reference to the IAM Role that will be granted permission to
|
|
6
|
-
* assume the CI role. This role must have permission to assume
|
|
7
|
-
* the CI role.
|
|
8
|
-
*/
|
|
9
|
-
externalRoleArn: string;
|
|
10
|
-
/**
|
|
11
|
-
* The name of the role that will be created.
|
|
12
|
-
*/
|
|
13
|
-
roleName: string;
|
|
14
|
-
webappDeploy: WebappDeployProps;
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Provide the construct described at
|
|
18
|
-
* https://github.com/capraconsulting/webapp-deploy-lambda
|
|
19
|
-
* in combination with a separate role to be used to
|
|
20
|
-
* trigger the process.
|
|
21
|
-
*/
|
|
22
|
-
export declare class WebappDeployViaRole extends constructs.Construct {
|
|
23
|
-
constructor(scope: constructs.Construct, id: string, props: Props);
|
|
24
|
-
}
|
|
25
|
-
export {};
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.WebappDeployViaRole = void 0;
|
|
4
|
-
const constructs = require("constructs");
|
|
5
|
-
const iam = require("aws-cdk-lib/aws-iam");
|
|
6
|
-
const cdk = require("aws-cdk-lib");
|
|
7
|
-
const webapp_deploy_lambda_1 = require("@capraconsulting/webapp-deploy-lambda");
|
|
8
|
-
/**
|
|
9
|
-
* Provide the construct described at
|
|
10
|
-
* https://github.com/capraconsulting/webapp-deploy-lambda
|
|
11
|
-
* in combination with a separate role to be used to
|
|
12
|
-
* trigger the process.
|
|
13
|
-
*/
|
|
14
|
-
class WebappDeployViaRole extends constructs.Construct {
|
|
15
|
-
constructor(scope, id, props) {
|
|
16
|
-
super(scope, id);
|
|
17
|
-
const roleToBeAssumedForDeploy = new iam.Role(this, "Role", {
|
|
18
|
-
assumedBy: new iam.ArnPrincipal(props.externalRoleArn),
|
|
19
|
-
roleName: props.roleName,
|
|
20
|
-
});
|
|
21
|
-
const webappDeploy = new webapp_deploy_lambda_1.WebappDeploy(this, "Resource", props.webappDeploy);
|
|
22
|
-
webappDeploy.deployFn.grantInvoke(roleToBeAssumedForDeploy);
|
|
23
|
-
new cdk.CfnOutput(this, "FunctionArnOutput", {
|
|
24
|
-
value: webappDeploy.deployFn.functionArn,
|
|
25
|
-
});
|
|
26
|
-
new cdk.CfnOutput(this, "RoleArnOutput", {
|
|
27
|
-
value: roleToBeAssumedForDeploy.roleArn,
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
exports.WebappDeployViaRole = WebappDeployViaRole;
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViYXBwLWRlcGxveS12aWEtcm9sZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy93ZWJhcHAtZGVwbG95LXZpYS1yb2xlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlDQUF3QztBQUN4QywyQ0FBMEM7QUFDMUMsbUNBQWtDO0FBQ2xDLGdGQUc4QztBQWdCOUM7Ozs7O0dBS0c7QUFDSCxNQUFhLG1CQUFvQixTQUFRLFVBQVUsQ0FBQyxTQUFTO0lBQzNELFlBQVksS0FBMkIsRUFBRSxFQUFVLEVBQUUsS0FBWTtRQUMvRCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBRWhCLE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUU7WUFDMUQsU0FBUyxFQUFFLElBQUksR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDO1lBQ3RELFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtTQUN6QixDQUFDLENBQUE7UUFFRixNQUFNLFlBQVksR0FBRyxJQUFJLG1DQUFZLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUE7UUFFM0UsWUFBWSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsd0JBQXdCLENBQUMsQ0FBQTtRQUUzRCxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLG1CQUFtQixFQUFFO1lBQzNDLEtBQUssRUFBRSxZQUFZLENBQUMsUUFBUSxDQUFDLFdBQVc7U0FDekMsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxlQUFlLEVBQUU7WUFDdkMsS0FBSyxFQUFFLHdCQUF3QixDQUFDLE9BQU87U0FDeEMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztDQUNGO0FBcEJELGtEQW9CQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNvbnN0cnVjdHMgZnJvbSBcImNvbnN0cnVjdHNcIlxuaW1wb3J0ICogYXMgaWFtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCJcbmltcG9ydCAqIGFzIGNkayBmcm9tIFwiYXdzLWNkay1saWJcIlxuaW1wb3J0IHtcbiAgV2ViYXBwRGVwbG95LFxuICBXZWJhcHBEZXBsb3lQcm9wcyxcbn0gZnJvbSBcIkBjYXByYWNvbnN1bHRpbmcvd2ViYXBwLWRlcGxveS1sYW1iZGFcIlxuXG5pbnRlcmZhY2UgUHJvcHMge1xuICAvKipcbiAgICogUmVmZXJlbmNlIHRvIHRoZSBJQU0gUm9sZSB0aGF0IHdpbGwgYmUgZ3JhbnRlZCBwZXJtaXNzaW9uIHRvXG4gICAqIGFzc3VtZSB0aGUgQ0kgcm9sZS4gVGhpcyByb2xlIG11c3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFzc3VtZVxuICAgKiB0aGUgQ0kgcm9sZS5cbiAgICovXG4gIGV4dGVybmFsUm9sZUFybjogc3RyaW5nXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgcm9sZSB0aGF0IHdpbGwgYmUgY3JlYXRlZC5cbiAgICovXG4gIHJvbGVOYW1lOiBzdHJpbmdcbiAgd2ViYXBwRGVwbG95OiBXZWJhcHBEZXBsb3lQcm9wc1xufVxuXG4vKipcbiAqIFByb3ZpZGUgdGhlIGNvbnN0cnVjdCBkZXNjcmliZWQgYXRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jYXByYWNvbnN1bHRpbmcvd2ViYXBwLWRlcGxveS1sYW1iZGFcbiAqIGluIGNvbWJpbmF0aW9uIHdpdGggYSBzZXBhcmF0ZSByb2xlIHRvIGJlIHVzZWQgdG9cbiAqIHRyaWdnZXIgdGhlIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjbGFzcyBXZWJhcHBEZXBsb3lWaWFSb2xlIGV4dGVuZHMgY29uc3RydWN0cy5Db25zdHJ1Y3Qge1xuICBjb25zdHJ1Y3RvcihzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZClcblxuICAgIGNvbnN0IHJvbGVUb0JlQXNzdW1lZEZvckRlcGxveSA9IG5ldyBpYW0uUm9sZSh0aGlzLCBcIlJvbGVcIiwge1xuICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLkFyblByaW5jaXBhbChwcm9wcy5leHRlcm5hbFJvbGVBcm4pLFxuICAgICAgcm9sZU5hbWU6IHByb3BzLnJvbGVOYW1lLFxuICAgIH0pXG5cbiAgICBjb25zdCB3ZWJhcHBEZXBsb3kgPSBuZXcgV2ViYXBwRGVwbG95KHRoaXMsIFwiUmVzb3VyY2VcIiwgcHJvcHMud2ViYXBwRGVwbG95KVxuXG4gICAgd2ViYXBwRGVwbG95LmRlcGxveUZuLmdyYW50SW52b2tlKHJvbGVUb0JlQXNzdW1lZEZvckRlcGxveSlcblxuICAgIG5ldyBjZGsuQ2ZuT3V0cHV0KHRoaXMsIFwiRnVuY3Rpb25Bcm5PdXRwdXRcIiwge1xuICAgICAgdmFsdWU6IHdlYmFwcERlcGxveS5kZXBsb3lGbi5mdW5jdGlvbkFybixcbiAgICB9KVxuICAgIG5ldyBjZGsuQ2ZuT3V0cHV0KHRoaXMsIFwiUm9sZUFybk91dHB1dFwiLCB7XG4gICAgICB2YWx1ZTogcm9sZVRvQmVBc3N1bWVkRm9yRGVwbG95LnJvbGVBcm4sXG4gICAgfSlcbiAgfVxufVxuIl19
|