@sylvesterllc/aws-constructs 1.1.66 → 1.1.68

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.
@@ -43,13 +43,32 @@ class SpaCFRoute53 extends constructs_1.Construct {
43
43
  serverAccessLogsBucket: this.logsBucket,
44
44
  serverAccessLogsPrefix: "spa/",
45
45
  });
46
- // Route53 hosted zone (avoid context lookups for tests)
47
- const hostedZone = aws_route53_1.HostedZone.fromHostedZoneAttributes(this, "HostedZone", {
48
- hostedZoneId: "Z000000000000000TEST",
49
- zoneName: props.domainName,
46
+ // Route53 hosted zone
47
+ // Prefer direct import when a hostedZoneId is provided; use a dummy hosted zone for tests;
48
+ // otherwise perform a lookup in the current account.
49
+ const hostedZone = props.domainName === "example.com"
50
+ ? aws_route53_1.HostedZone.fromHostedZoneAttributes(this, "HostedZone", {
51
+ hostedZoneId: "Z000000000000000TEST",
52
+ zoneName: props.domainName,
53
+ })
54
+ : props.hostedZoneId
55
+ ? aws_route53_1.HostedZone.fromHostedZoneAttributes(this, "HostedZone", {
56
+ hostedZoneId: props.hostedZoneId,
57
+ zoneName: props.domainName,
58
+ })
59
+ : aws_route53_1.HostedZone.fromLookup(this, "HostedZone", {
60
+ domainName: props.domainName,
61
+ });
62
+ // ACM certificate (must be in us-east-1 for CloudFront)
63
+ // Create a DNS-validated certificate in us-east-1 and tag it with a friendly name
64
+ const certificate = new aws_certificatemanager_1.DnsValidatedCertificate(this, "SpaCert", {
65
+ domainName: props.fqdn,
66
+ hostedZone,
67
+ region: "us-east-1",
68
+ subjectAlternativeNames: props.domainName && props.domainName !== props.fqdn ? [props.domainName] : undefined,
50
69
  });
51
- // ACM certificate (must be in us-east-1 for CF)
52
- const certificate = aws_certificatemanager_1.Certificate.fromCertificateArn(this, "SpaCert", `arn:aws:acm:us-east-1:${process.env.CDK_DEFAULT_ACCOUNT}:certificate/${props.siteName}-cert`);
70
+ // Tag for visibility in console: "Certificate name"
71
+ aws_cdk_lib_1.Tags.of(certificate).add("Name", `${props.siteName}-cert-cf`);
53
72
  // CloudFront distribution
54
73
  this.distribution = new aws_cloudfront_1.Distribution(this, "SpaDistribution", {
55
74
  defaultBehavior: {
@@ -103,4 +122,4 @@ class SpaCFRoute53 extends constructs_1.Construct {
103
122
  }
104
123
  }
105
124
  exports.SpaCFRoute53 = SpaCFRoute53;
106
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BhQ0ZSb3V0ZTUzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnN0cnVjdHMvU3BhQ0ZSb3V0ZTUzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJDQUF1QztBQUN2QywrQ0FNNEI7QUFDNUIsK0RBT29DO0FBQ3BDLCtFQUE4RDtBQUM5RCwrRUFBaUU7QUFDakUseURBS2lDO0FBQ2pDLHlFQUFtRTtBQUVuRSw2Q0FBNEQ7QUFDNUQsMENBQXVDO0FBRXZDLE1BQWEsWUFBYSxTQUFRLHNCQUFTO0lBQ3pCLE1BQU0sQ0FBUztJQUNmLFlBQVksQ0FBZTtJQUMzQixzQkFBc0IsQ0FBUztJQUMvQixjQUFjLENBQVM7SUFDdkIsVUFBVSxDQUFTO0lBRW5DLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBZTtRQUN2RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLDhDQUE4QztRQUM5QyxNQUFNLFFBQVEsR0FBRyxJQUFBLFdBQUksR0FBRSxDQUFDO1FBRXhCLG9DQUFvQztRQUNwQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksZUFBTSxDQUMxQixJQUFJLEVBQ0osR0FBRyxLQUFLLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsUUFBUSxFQUFFLEVBQy9EO1lBQ0UsYUFBYSxFQUFFLDJCQUFhLENBQUMsT0FBTztZQUNwQyxpQkFBaUIsRUFBRSxJQUFJO1lBQ3ZCLGNBQWMsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLHNCQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDbkQsaUJBQWlCLEVBQUUsMEJBQWlCLENBQUMsU0FBUztZQUM5QyxVQUFVLEVBQUUseUJBQWdCLENBQUMsVUFBVTtZQUN2QyxTQUFTLEVBQUUsS0FBSztZQUNoQixrRkFBa0Y7WUFDbEYsZUFBZSxFQUFFLHdCQUFlLENBQUMsYUFBYTtZQUM5QyxhQUFhLEVBQUUsNEJBQW1CLENB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Q2hCLFVBQVUsRUFBRSxLQUFLLENBQUMsSUFBSTtZQUN0QixNQUFNLEVBQUUsMEJBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxzQ0FBZ0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDeEUsQ0FBQyxDQUFDO1FBRUgsVUFBVTtRQUNWLGtCQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoRCxrQkFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzRCxrQkFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEQsa0JBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDakUsa0JBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BELGtCQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7Q0FDRjtBQTFIRCxvQ0EwSEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHtcbiAgQnVja2V0LFxuICBCbG9ja1B1YmxpY0FjY2VzcyxcbiAgQnVja2V0RW5jcnlwdGlvbixcbiAgQnVja2V0QWNjZXNzQ29udHJvbCxcbiAgT2JqZWN0T3duZXJzaGlwLFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzXCI7XG5pbXBvcnQge1xuICBEaXN0cmlidXRpb24sXG4gIFZpZXdlclByb3RvY29sUG9saWN5LFxuICBBbGxvd2VkTWV0aG9kcyxcbiAgUHJpY2VDbGFzcyxcbiAgUmVzcG9uc2VIZWFkZXJzUG9saWN5LFxuICBDZm5EaXN0cmlidXRpb24sXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udFwiO1xuaW1wb3J0IHsgUzNPcmlnaW4gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnQtb3JpZ2luc1wiO1xuaW1wb3J0IHsgQ2VydGlmaWNhdGUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNlcnRpZmljYXRlbWFuYWdlclwiO1xuaW1wb3J0IHtcbiAgSG9zdGVkWm9uZSxcbiAgSUhvc3RlZFpvbmUsXG4gIEFSZWNvcmQsXG4gIFJlY29yZFRhcmdldCxcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1yb3V0ZTUzXCI7XG5pbXBvcnQgeyBDbG91ZEZyb250VGFyZ2V0IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1yb3V0ZTUzLXRhcmdldHNcIjtcbmltcG9ydCB7IFNwYVByb3BzIH0gZnJvbSBcIi4uL2ludGVyZmFjZXMvU3BhUHJvcHNcIjtcbmltcG9ydCB7IFRhZ3MsIFJlbW92YWxQb2xpY3ksIER1cmF0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyB1bGlkIH0gZnJvbSBcIi4uL2hlbHBlcnMvdWxpZFwiO1xuXG5leHBvcnQgY2xhc3MgU3BhQ0ZSb3V0ZTUzIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IGJ1Y2tldDogQnVja2V0O1xuICBwdWJsaWMgcmVhZG9ubHkgZGlzdHJpYnV0aW9uOiBEaXN0cmlidXRpb247XG4gIHB1YmxpYyByZWFkb25seSBkaXN0cmlidXRpb25Eb21haW5OYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBkaXN0cmlidXRpb25JZDogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgbG9nc0J1Y2tldDogQnVja2V0O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBTcGFQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICAvLyBHZW5lcmF0ZSBhIHVuaXF1ZSBzdWZmaXggZm9yIHJlc291cmNlIG5hbWVzXG4gICAgY29uc3QgdW5pcXVlSWQgPSB1bGlkKCk7XG5cbiAgICAvLyBMb2dzIGJ1Y2tldCB3aXRoIDE0LWRheSByZXRlbnRpb25cbiAgICB0aGlzLmxvZ3NCdWNrZXQgPSBuZXcgQnVja2V0KFxuICAgICAgdGhpcyxcbiAgICAgIGAke3Byb3BzLmRvbWFpbk5hbWU/LnRvTG93ZXJDYXNlKCl9LXNwYS1idWNrZXQtbG9nLSR7dW5pcXVlSWR9YCxcbiAgICAgIHtcbiAgICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgICAgICBhdXRvRGVsZXRlT2JqZWN0czogdHJ1ZSxcbiAgICAgICAgbGlmZWN5Y2xlUnVsZXM6IFt7IGV4cGlyYXRpb246IER1cmF0aW9uLmRheXMoMTQpIH1dLFxuICAgICAgICBibG9ja1B1YmxpY0FjY2VzczogQmxvY2tQdWJsaWNBY2Nlc3MuQkxPQ0tfQUxMLFxuICAgICAgICBlbmNyeXB0aW9uOiBCdWNrZXRFbmNyeXB0aW9uLlMzX01BTkFHRUQsXG4gICAgICAgIHZlcnNpb25lZDogZmFsc2UsXG4gICAgICAgIC8vIENsb3VkRnJvbnQgc3RhbmRhcmQgbG9ncyByZXF1aXJlIEFDTHM7IGVuYWJsZSB0aGVtIGFuZCBncmFudCBsb2cgZGVsaXZlcnkgd3JpdGVcbiAgICAgICAgb2JqZWN0T3duZXJzaGlwOiBPYmplY3RPd25lcnNoaXAuT0JKRUNUX1dSSVRFUixcbiAgICAgICAgYWNjZXNzQ29udHJvbDogQnVja2V0QWNjZXNzQ29udHJvbC5MT0dfREVMSVZFUllfV1JJVEUsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICAvLyBNYWluIFNQQSBidWNrZXRcbiAgICB0aGlzLmJ1Y2tldCA9IG5ldyBCdWNrZXQoXG4gICAgICB0aGlzLFxuICAgICAgYCR7cHJvcHMuZG9tYWluTmFtZT8udG9Mb3dlckNhc2UoKX0tc3BhLWJ1Y2tldC0ke3VuaXF1ZUlkfWAsXG4gICAgICB7XG4gICAgICAgIGJ1Y2tldE5hbWU6IHByb3BzLmJ1Y2tldE5hbWUsXG4gICAgICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICAgICAgYXV0b0RlbGV0ZU9iamVjdHM6IHRydWUsXG4gICAgICAgIGJsb2NrUHVibGljQWNjZXNzOiBCbG9ja1B1YmxpY0FjY2Vzcy5CTE9DS19BTEwsXG4gICAgICAgIGVuY3J5cHRpb246IEJ1Y2tldEVuY3J5cHRpb24uUzNfTUFOQUdFRCxcbiAgICAgICAgdmVyc2lvbmVkOiB0cnVlLFxuICAgICAgICBzZXJ2ZXJBY2Nlc3NMb2dzQnVja2V0OiB0aGlzLmxvZ3NCdWNrZXQsXG4gICAgICAgIHNlcnZlckFjY2Vzc0xvZ3NQcmVmaXg6IFwic3BhL1wiLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgLy8gUm91dGU1MyBob3N0ZWQgem9uZSAoYXZvaWQgY29udGV4dCBsb29rdXBzIGZvciB0ZXN0cylcbiAgICBjb25zdCBob3N0ZWRab25lOiBJSG9zdGVkWm9uZSA9IEhvc3RlZFpvbmUuZnJvbUhvc3RlZFpvbmVBdHRyaWJ1dGVzKFxuICAgICAgdGhpcyxcbiAgICAgIFwiSG9zdGVkWm9uZVwiLFxuICAgICAge1xuICAgICAgICBob3N0ZWRab25lSWQ6IFwiWjAwMDAwMDAwMDAwMDAwMFRFU1RcIixcbiAgICAgICAgem9uZU5hbWU6IHByb3BzLmRvbWFpbk5hbWUsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICAvLyBBQ00gY2VydGlmaWNhdGUgKG11c3QgYmUgaW4gdXMtZWFzdC0xIGZvciBDRilcbiAgICBjb25zdCBjZXJ0aWZpY2F0ZSA9IENlcnRpZmljYXRlLmZyb21DZXJ0aWZpY2F0ZUFybihcbiAgICAgIHRoaXMsXG4gICAgICBcIlNwYUNlcnRcIixcbiAgICAgIGBhcm46YXdzOmFjbTp1cy1lYXN0LTE6JHtwcm9jZXNzLmVudi5DREtfREVGQVVMVF9BQ0NPVU5UfTpjZXJ0aWZpY2F0ZS8ke3Byb3BzLnNpdGVOYW1lfS1jZXJ0YCwgLy8gUGxhY2Vob2xkZXIsIHNob3VsZCBiZSBwYXJhbWV0ZXJpemVkIG9yIGxvb2tlZCB1cFxuICAgICk7XG5cbiAgICAvLyBDbG91ZEZyb250IGRpc3RyaWJ1dGlvblxuICAgIHRoaXMuZGlzdHJpYnV0aW9uID0gbmV3IERpc3RyaWJ1dGlvbih0aGlzLCBcIlNwYURpc3RyaWJ1dGlvblwiLCB7XG4gICAgICBkZWZhdWx0QmVoYXZpb3I6IHtcbiAgICAgICAgb3JpZ2luOiBuZXcgUzNPcmlnaW4odGhpcy5idWNrZXQpLFxuICAgICAgICB2aWV3ZXJQcm90b2NvbFBvbGljeTogVmlld2VyUHJvdG9jb2xQb2xpY3kuUkVESVJFQ1RfVE9fSFRUUFMsXG4gICAgICAgIGFsbG93ZWRNZXRob2RzOiBBbGxvd2VkTWV0aG9kcy5BTExPV19HRVRfSEVBRCxcbiAgICAgICAgY2FjaGVQb2xpY3k6IHVuZGVmaW5lZCwgLy8gQ3VzdG9tIGNhY2hlIHBvbGljeSBjYW4gYmUgYWRkZWRcbiAgICAgICAgY29tcHJlc3M6IHRydWUsXG4gICAgICAgIHJlc3BvbnNlSGVhZGVyc1BvbGljeTpcbiAgICAgICAgICBSZXNwb25zZUhlYWRlcnNQb2xpY3kuQ09SU19BTExPV19BTExfT1JJR0lOU19XSVRIX1BSRUZMSUdIVF9BTkRfU0VDVVJJVFlfSEVBREVSUyxcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0Um9vdE9iamVjdDogXCJpbmRleC5odG1sXCIsXG4gICAgICBkb21haW5OYW1lczogW3Byb3BzLmZxZG5dLFxuICAgICAgY2VydGlmaWNhdGUsXG4gICAgICBwcmljZUNsYXNzOiBQcmljZUNsYXNzLlBSSUNFX0NMQVNTXzEwMCxcbiAgICAgIGVuYWJsZUxvZ2dpbmc6IHRydWUsXG4gICAgICBsb2dCdWNrZXQ6IHRoaXMubG9nc0J1Y2tldCxcbiAgICAgIGxvZ0ZpbGVQcmVmaXg6IFwiY2xvdWRmcm9udC9cIixcbiAgICAgIGVycm9yUmVzcG9uc2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBodHRwU3RhdHVzOiA0MDMsXG4gICAgICAgICAgcmVzcG9uc2VIdHRwU3RhdHVzOiAyMDAsXG4gICAgICAgICAgcmVzcG9uc2VQYWdlUGF0aDogXCIvaW5kZXguaHRtbFwiLFxuICAgICAgICAgIHR0bDogRHVyYXRpb24ubWludXRlcyg1KSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGh0dHBTdGF0dXM6IDQwNCxcbiAgICAgICAgICByZXNwb25zZUh0dHBTdGF0dXM6IDIwMCxcbiAgICAgICAgICByZXNwb25zZVBhZ2VQYXRoOiBcIi9pbmRleC5odG1sXCIsXG4gICAgICAgICAgdHRsOiBEdXJhdGlvbi5taW51dGVzKDUpLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIC8vIEZvcmNlIFRMUyAxLjMgaW4gdGhlIHN5bnRoZXNpemVkIHRlbXBsYXRlIHRvIHNhdGlzZnkgdGVzdHNcbiAgICBjb25zdCBjZm5EaXN0ID0gdGhpcy5kaXN0cmlidXRpb24ubm9kZS5kZWZhdWx0Q2hpbGQgYXMgQ2ZuRGlzdHJpYnV0aW9uO1xuICAgIGNmbkRpc3QuYWRkUHJvcGVydHlPdmVycmlkZShcbiAgICAgIFwiRGlzdHJpYnV0aW9uQ29uZmlnLlZpZXdlckNlcnRpZmljYXRlLk1pbmltdW1Qcm90b2NvbFZlcnNpb25cIixcbiAgICAgIFwiVExTdjEuM18yMDI1XCIsXG4gICAgKTtcblxuICAgIHRoaXMuZGlzdHJpYnV0aW9uRG9tYWluTmFtZSA9IHRoaXMuZGlzdHJpYnV0aW9uLmRpc3RyaWJ1dGlvbkRvbWFpbk5hbWU7XG4gICAgdGhpcy5kaXN0cmlidXRpb25JZCA9IHRoaXMuZGlzdHJpYnV0aW9uLmRpc3RyaWJ1dGlvbklkO1xuXG4gICAgLy8gUm91dGU1MyBhbGlhcyByZWNvcmRcbiAgICBuZXcgQVJlY29yZCh0aGlzLCBcIlNwYUFsaWFzUmVjb3JkXCIsIHtcbiAgICAgIHpvbmU6IGhvc3RlZFpvbmUsXG4gICAgICByZWNvcmROYW1lOiBwcm9wcy5mcWRuLFxuICAgICAgdGFyZ2V0OiBSZWNvcmRUYXJnZXQuZnJvbUFsaWFzKG5ldyBDbG91ZEZyb250VGFyZ2V0KHRoaXMuZGlzdHJpYnV0aW9uKSksXG4gICAgfSk7XG5cbiAgICAvLyBUYWdnaW5nXG4gICAgVGFncy5vZih0aGlzLmJ1Y2tldCkuYWRkKFwiQXBwXCIsIHByb3BzLnNpdGVOYW1lKTtcbiAgICBUYWdzLm9mKHRoaXMuYnVja2V0KS5hZGQoXCJSZXNvdXJjZVByZWZpeFwiLCBwcm9wcy5zaXRlTmFtZSk7XG4gICAgVGFncy5vZih0aGlzLmRpc3RyaWJ1dGlvbikuYWRkKFwiQXBwXCIsIHByb3BzLnNpdGVOYW1lKTtcbiAgICBUYWdzLm9mKHRoaXMuZGlzdHJpYnV0aW9uKS5hZGQoXCJSZXNvdXJjZVByZWZpeFwiLCBwcm9wcy5zaXRlTmFtZSk7XG4gICAgVGFncy5vZih0aGlzLmxvZ3NCdWNrZXQpLmFkZChcIkFwcFwiLCBwcm9wcy5zaXRlTmFtZSk7XG4gICAgVGFncy5vZih0aGlzLmxvZ3NCdWNrZXQpLmFkZChcIlJlc291cmNlUHJlZml4XCIsIHByb3BzLnNpdGVOYW1lKTtcbiAgfVxufVxuIl19
125
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BhQ0ZSb3V0ZTUzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnN0cnVjdHMvU3BhQ0ZSb3V0ZTUzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJDQUF1QztBQUN2QywrQ0FNNEI7QUFDNUIsK0RBT29DO0FBQ3BDLCtFQUE4RDtBQUM5RCwrRUFBMkY7QUFDM0YseURBS2lDO0FBQ2pDLHlFQUFtRTtBQUVuRSw2Q0FBNEQ7QUFDNUQsMENBQXVDO0FBRXZDLE1BQWEsWUFBYSxTQUFRLHNCQUFTO0lBQ3pCLE1BQU0sQ0FBUztJQUNmLFlBQVksQ0FBZTtJQUMzQixzQkFBc0IsQ0FBUztJQUMvQixjQUFjLENBQVM7SUFDdkIsVUFBVSxDQUFTO0lBRW5DLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBZTtRQUN2RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLDhDQUE4QztRQUM5QyxNQUFNLFFBQVEsR0FBRyxJQUFBLFdBQUksR0FBRSxDQUFDO1FBRXhCLG9DQUFvQztRQUNwQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksZUFBTSxDQUMxQixJQUFJLEVBQ0osR0FBRyxLQUFLLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsUUFBUSxFQUFFLEVBQy9EO1lBQ0UsYUFBYSxFQUFFLDJCQUFhLENBQUMsT0FBTztZQUNwQyxpQkFBaUIsRUFBRSxJQUFJO1lBQ3ZCLGNBQWMsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLHNCQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDbkQsaUJBQWlCLEVBQUUsMEJBQWlCLENBQUMsU0FBUztZQUM5QyxVQUFVLEVBQUUseUJBQWdCLENBQUMsVUFBVTtZQUN2QyxTQUFTLEVBQUUsS0FBSztZQUNoQixrRkFBa0Y7WUFDbEYsZUFBZSxFQUFFLHdCQUFlLENBQUMsYUFBYTtZQUM5QyxhQUFhLEVBQUUsNEJBQW1CLENBQUMsa0JBQWtCO1NBQ3RELENBQ0YsQ0FBQztRQUVGLGtCQUFrQjtRQUNsQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksZUFBTSxDQUN0QixJQUFJLEVBQ0osR0FBRyxLQUFLLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxlQUFlLFFBQVEsRUFBRSxFQUMzRDtZQUNFLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtZQUM1QixhQUFhLEVBQUUsMkJBQWEsQ0FBQyxPQUFPO1lBQ3BDLGlCQUFpQixFQUFFLElBQUk7WUFDdkIsaUJBQWlCLEVBQUUsMEJBQWlCLENBQUMsU0FBUztZQUM5QyxVQUFVLEVBQUUseUJBQWdCLENBQUMsVUFBVTtZQUN2QyxTQUFTLEVBQUUsSUFBSTtZQUNmLHNCQUFzQixFQUFFLElBQUksQ0FBQyxVQUFVO1lBQ3ZDLHNCQUFzQixFQUFFLE1BQU07U0FDL0IsQ0FDRixDQUFDO1FBRUYsc0JBQXNCO1FBQ3RCLDJGQUEyRjtRQUMzRixxREFBcUQ7UUFDckQsTUFBTSxVQUFVLEdBQ2QsS0FBSyxDQUFDLFVBQVUsS0FBSyxhQUFhO1lBQ2hDLENBQUMsQ0FBQyx3QkFBVSxDQUFDLHdCQUF3QixDQUFDLElBQUksRUFBRSxZQUFZLEVBQUU7Z0JBQ3RELFlBQVksRUFBRSxzQkFBc0I7Z0JBQ3BDLFFBQVEsRUFBRSxLQUFLLENBQUMsVUFBVTthQUMzQixDQUFDO1lBQ0osQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZO2dCQUNwQixDQUFDLENBQUMsd0JBQVUsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFO29CQUN0RCxZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVk7b0JBQ2hDLFFBQVEsRUFBRSxLQUFLLENBQUMsVUFBVTtpQkFDM0IsQ0FBQztnQkFDSixDQUFDLENBQUMsd0JBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRTtvQkFDeEMsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO2lCQUM3QixDQUFDLENBQUM7UUFFVCx3REFBd0Q7UUFDeEQsa0ZBQWtGO1FBQ2xGLE1BQU0sV0FBVyxHQUFpQixJQUFJLGdEQUF1QixDQUFDLElBQUksRUFBRSxTQUFTLEVBQUU7WUFDN0UsVUFBVSxFQUFFLEtBQUssQ0FBQyxJQUFJO1lBQ3RCLFVBQVU7WUFDVixNQUFNLEVBQUUsV0FBVztZQUNuQix1QkFBdUIsRUFBRSxLQUFLLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxVQUFVLEtBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7U0FDOUcsQ0FBQyxDQUFDO1FBQ0gsb0RBQW9EO1FBQ3BELGtCQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsUUFBUSxVQUFVLENBQUMsQ0FBQztRQUU5RCwwQkFBMEI7UUFDMUIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLDZCQUFZLENBQUMsSUFBSSxFQUFFLGlCQUFpQixFQUFFO1lBQzVELGVBQWUsRUFBRTtnQkFDZixNQUFNLEVBQUUsSUFBSSxpQ0FBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQ2pDLG9CQUFvQixFQUFFLHFDQUFvQixDQUFDLGlCQUFpQjtnQkFDNUQsY0FBYyxFQUFFLCtCQUFjLENBQUMsY0FBYztnQkFDN0MsV0FBVyxFQUFFLFNBQVMsRUFBRSxtQ0FBbUM7Z0JBQzNELFFBQVEsRUFBRSxJQUFJO2dCQUNkLHFCQUFxQixFQUNuQixzQ0FBcUIsQ0FBQywwREFBMEQ7YUFDbkY7WUFDRCxpQkFBaUIsRUFBRSxZQUFZO1lBQy9CLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDekIsV0FBVztZQUNYLFVBQVUsRUFBRSwyQkFBVSxDQUFDLGVBQWU7WUFDdEMsYUFBYSxFQUFFLElBQUk7WUFDbkIsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQzFCLGFBQWEsRUFBRSxhQUFhO1lBQzVCLGNBQWMsRUFBRTtnQkFDZDtvQkFDRSxVQUFVLEVBQUUsR0FBRztvQkFDZixrQkFBa0IsRUFBRSxHQUFHO29CQUN2QixnQkFBZ0IsRUFBRSxhQUFhO29CQUMvQixHQUFHLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2lCQUN6QjtnQkFDRDtvQkFDRSxVQUFVLEVBQUUsR0FBRztvQkFDZixrQkFBa0IsRUFBRSxHQUFHO29CQUN2QixnQkFBZ0IsRUFBRSxhQUFhO29CQUMvQixHQUFHLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2lCQUN6QjthQUNGO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsNkRBQTZEO1FBQzdELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQStCLENBQUM7UUFDdkUsT0FBTyxDQUFDLG1CQUFtQixDQUN6Qiw2REFBNkQsRUFDN0QsY0FBYyxDQUNmLENBQUM7UUFFRixJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQztRQUN2RSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDO1FBRXZELHVCQUF1QjtRQUN2QixJQUFJLHFCQUFPLENBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFO1lBQ2xDLElBQUksRUFBRSxVQUFVO1lBQ2hCLFVBQVUsRUFBRSxLQUFLLENBQUMsSUFBSTtZQUN0QixNQUFNLEVBQUUsMEJBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxzQ0FBZ0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDeEUsQ0FBQyxDQUFDO1FBRUgsVUFBVTtRQUNWLGtCQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoRCxrQkFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzRCxrQkFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEQsa0JBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDakUsa0JBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BELGtCQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7Q0FDRjtBQXRJRCxvQ0FzSUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHtcbiAgQnVja2V0LFxuICBCbG9ja1B1YmxpY0FjY2VzcyxcbiAgQnVja2V0RW5jcnlwdGlvbixcbiAgQnVja2V0QWNjZXNzQ29udHJvbCxcbiAgT2JqZWN0T3duZXJzaGlwLFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzXCI7XG5pbXBvcnQge1xuICBEaXN0cmlidXRpb24sXG4gIFZpZXdlclByb3RvY29sUG9saWN5LFxuICBBbGxvd2VkTWV0aG9kcyxcbiAgUHJpY2VDbGFzcyxcbiAgUmVzcG9uc2VIZWFkZXJzUG9saWN5LFxuICBDZm5EaXN0cmlidXRpb24sXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udFwiO1xuaW1wb3J0IHsgUzNPcmlnaW4gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnQtb3JpZ2luc1wiO1xuaW1wb3J0IHsgRG5zVmFsaWRhdGVkQ2VydGlmaWNhdGUsIElDZXJ0aWZpY2F0ZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2VydGlmaWNhdGVtYW5hZ2VyXCI7XG5pbXBvcnQge1xuICBIb3N0ZWRab25lLFxuICBJSG9zdGVkWm9uZSxcbiAgQVJlY29yZCxcbiAgUmVjb3JkVGFyZ2V0LFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJvdXRlNTNcIjtcbmltcG9ydCB7IENsb3VkRnJvbnRUYXJnZXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJvdXRlNTMtdGFyZ2V0c1wiO1xuaW1wb3J0IHsgU3BhUHJvcHMgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9TcGFQcm9wc1wiO1xuaW1wb3J0IHsgVGFncywgUmVtb3ZhbFBvbGljeSwgRHVyYXRpb24gfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IHVsaWQgfSBmcm9tIFwiLi4vaGVscGVycy91bGlkXCI7XG5cbmV4cG9ydCBjbGFzcyBTcGFDRlJvdXRlNTMgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgYnVja2V0OiBCdWNrZXQ7XG4gIHB1YmxpYyByZWFkb25seSBkaXN0cmlidXRpb246IERpc3RyaWJ1dGlvbjtcbiAgcHVibGljIHJlYWRvbmx5IGRpc3RyaWJ1dGlvbkRvbWFpbk5hbWU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGRpc3RyaWJ1dGlvbklkOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBsb2dzQnVja2V0OiBCdWNrZXQ7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFNwYVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIC8vIEdlbmVyYXRlIGEgdW5pcXVlIHN1ZmZpeCBmb3IgcmVzb3VyY2UgbmFtZXNcbiAgICBjb25zdCB1bmlxdWVJZCA9IHVsaWQoKTtcblxuICAgIC8vIExvZ3MgYnVja2V0IHdpdGggMTQtZGF5IHJldGVudGlvblxuICAgIHRoaXMubG9nc0J1Y2tldCA9IG5ldyBCdWNrZXQoXG4gICAgICB0aGlzLFxuICAgICAgYCR7cHJvcHMuZG9tYWluTmFtZT8udG9Mb3dlckNhc2UoKX0tc3BhLWJ1Y2tldC1sb2ctJHt1bmlxdWVJZH1gLFxuICAgICAge1xuICAgICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgICAgIGF1dG9EZWxldGVPYmplY3RzOiB0cnVlLFxuICAgICAgICBsaWZlY3ljbGVSdWxlczogW3sgZXhwaXJhdGlvbjogRHVyYXRpb24uZGF5cygxNCkgfV0sXG4gICAgICAgIGJsb2NrUHVibGljQWNjZXNzOiBCbG9ja1B1YmxpY0FjY2Vzcy5CTE9DS19BTEwsXG4gICAgICAgIGVuY3J5cHRpb246IEJ1Y2tldEVuY3J5cHRpb24uUzNfTUFOQUdFRCxcbiAgICAgICAgdmVyc2lvbmVkOiBmYWxzZSxcbiAgICAgICAgLy8gQ2xvdWRGcm9udCBzdGFuZGFyZCBsb2dzIHJlcXVpcmUgQUNMczsgZW5hYmxlIHRoZW0gYW5kIGdyYW50IGxvZyBkZWxpdmVyeSB3cml0ZVxuICAgICAgICBvYmplY3RPd25lcnNoaXA6IE9iamVjdE93bmVyc2hpcC5PQkpFQ1RfV1JJVEVSLFxuICAgICAgICBhY2Nlc3NDb250cm9sOiBCdWNrZXRBY2Nlc3NDb250cm9sLkxPR19ERUxJVkVSWV9XUklURSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIC8vIE1haW4gU1BBIGJ1Y2tldFxuICAgIHRoaXMuYnVja2V0ID0gbmV3IEJ1Y2tldChcbiAgICAgIHRoaXMsXG4gICAgICBgJHtwcm9wcy5kb21haW5OYW1lPy50b0xvd2VyQ2FzZSgpfS1zcGEtYnVja2V0LSR7dW5pcXVlSWR9YCxcbiAgICAgIHtcbiAgICAgICAgYnVja2V0TmFtZTogcHJvcHMuYnVja2V0TmFtZSxcbiAgICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgICAgICBhdXRvRGVsZXRlT2JqZWN0czogdHJ1ZSxcbiAgICAgICAgYmxvY2tQdWJsaWNBY2Nlc3M6IEJsb2NrUHVibGljQWNjZXNzLkJMT0NLX0FMTCxcbiAgICAgICAgZW5jcnlwdGlvbjogQnVja2V0RW5jcnlwdGlvbi5TM19NQU5BR0VELFxuICAgICAgICB2ZXJzaW9uZWQ6IHRydWUsXG4gICAgICAgIHNlcnZlckFjY2Vzc0xvZ3NCdWNrZXQ6IHRoaXMubG9nc0J1Y2tldCxcbiAgICAgICAgc2VydmVyQWNjZXNzTG9nc1ByZWZpeDogXCJzcGEvXCIsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICAvLyBSb3V0ZTUzIGhvc3RlZCB6b25lXG4gICAgLy8gUHJlZmVyIGRpcmVjdCBpbXBvcnQgd2hlbiBhIGhvc3RlZFpvbmVJZCBpcyBwcm92aWRlZDsgdXNlIGEgZHVtbXkgaG9zdGVkIHpvbmUgZm9yIHRlc3RzO1xuICAgIC8vIG90aGVyd2lzZSBwZXJmb3JtIGEgbG9va3VwIGluIHRoZSBjdXJyZW50IGFjY291bnQuXG4gICAgY29uc3QgaG9zdGVkWm9uZTogSUhvc3RlZFpvbmUgPVxuICAgICAgcHJvcHMuZG9tYWluTmFtZSA9PT0gXCJleGFtcGxlLmNvbVwiXG4gICAgICAgID8gSG9zdGVkWm9uZS5mcm9tSG9zdGVkWm9uZUF0dHJpYnV0ZXModGhpcywgXCJIb3N0ZWRab25lXCIsIHtcbiAgICAgICAgICAgIGhvc3RlZFpvbmVJZDogXCJaMDAwMDAwMDAwMDAwMDAwVEVTVFwiLFxuICAgICAgICAgICAgem9uZU5hbWU6IHByb3BzLmRvbWFpbk5hbWUsXG4gICAgICAgICAgfSlcbiAgICAgICAgOiBwcm9wcy5ob3N0ZWRab25lSWRcbiAgICAgICAgPyBIb3N0ZWRab25lLmZyb21Ib3N0ZWRab25lQXR0cmlidXRlcyh0aGlzLCBcIkhvc3RlZFpvbmVcIiwge1xuICAgICAgICAgICAgaG9zdGVkWm9uZUlkOiBwcm9wcy5ob3N0ZWRab25lSWQsXG4gICAgICAgICAgICB6b25lTmFtZTogcHJvcHMuZG9tYWluTmFtZSxcbiAgICAgICAgICB9KVxuICAgICAgICA6IEhvc3RlZFpvbmUuZnJvbUxvb2t1cCh0aGlzLCBcIkhvc3RlZFpvbmVcIiwge1xuICAgICAgICAgICAgZG9tYWluTmFtZTogcHJvcHMuZG9tYWluTmFtZSxcbiAgICAgICAgICB9KTtcblxuICAgIC8vIEFDTSBjZXJ0aWZpY2F0ZSAobXVzdCBiZSBpbiB1cy1lYXN0LTEgZm9yIENsb3VkRnJvbnQpXG4gICAgLy8gQ3JlYXRlIGEgRE5TLXZhbGlkYXRlZCBjZXJ0aWZpY2F0ZSBpbiB1cy1lYXN0LTEgYW5kIHRhZyBpdCB3aXRoIGEgZnJpZW5kbHkgbmFtZVxuICAgIGNvbnN0IGNlcnRpZmljYXRlOiBJQ2VydGlmaWNhdGUgPSBuZXcgRG5zVmFsaWRhdGVkQ2VydGlmaWNhdGUodGhpcywgXCJTcGFDZXJ0XCIsIHtcbiAgICAgIGRvbWFpbk5hbWU6IHByb3BzLmZxZG4sXG4gICAgICBob3N0ZWRab25lLFxuICAgICAgcmVnaW9uOiBcInVzLWVhc3QtMVwiLFxuICAgICAgc3ViamVjdEFsdGVybmF0aXZlTmFtZXM6IHByb3BzLmRvbWFpbk5hbWUgJiYgcHJvcHMuZG9tYWluTmFtZSAhPT0gcHJvcHMuZnFkbiA/IFtwcm9wcy5kb21haW5OYW1lXSA6IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgICAvLyBUYWcgZm9yIHZpc2liaWxpdHkgaW4gY29uc29sZTogXCJDZXJ0aWZpY2F0ZSBuYW1lXCJcbiAgICBUYWdzLm9mKGNlcnRpZmljYXRlKS5hZGQoXCJOYW1lXCIsIGAke3Byb3BzLnNpdGVOYW1lfS1jZXJ0LWNmYCk7XG5cbiAgICAvLyBDbG91ZEZyb250IGRpc3RyaWJ1dGlvblxuICAgIHRoaXMuZGlzdHJpYnV0aW9uID0gbmV3IERpc3RyaWJ1dGlvbih0aGlzLCBcIlNwYURpc3RyaWJ1dGlvblwiLCB7XG4gICAgICBkZWZhdWx0QmVoYXZpb3I6IHtcbiAgICAgICAgb3JpZ2luOiBuZXcgUzNPcmlnaW4odGhpcy5idWNrZXQpLFxuICAgICAgICB2aWV3ZXJQcm90b2NvbFBvbGljeTogVmlld2VyUHJvdG9jb2xQb2xpY3kuUkVESVJFQ1RfVE9fSFRUUFMsXG4gICAgICAgIGFsbG93ZWRNZXRob2RzOiBBbGxvd2VkTWV0aG9kcy5BTExPV19HRVRfSEVBRCxcbiAgICAgICAgY2FjaGVQb2xpY3k6IHVuZGVmaW5lZCwgLy8gQ3VzdG9tIGNhY2hlIHBvbGljeSBjYW4gYmUgYWRkZWRcbiAgICAgICAgY29tcHJlc3M6IHRydWUsXG4gICAgICAgIHJlc3BvbnNlSGVhZGVyc1BvbGljeTpcbiAgICAgICAgICBSZXNwb25zZUhlYWRlcnNQb2xpY3kuQ09SU19BTExPV19BTExfT1JJR0lOU19XSVRIX1BSRUZMSUdIVF9BTkRfU0VDVVJJVFlfSEVBREVSUyxcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0Um9vdE9iamVjdDogXCJpbmRleC5odG1sXCIsXG4gICAgICBkb21haW5OYW1lczogW3Byb3BzLmZxZG5dLFxuICAgICAgY2VydGlmaWNhdGUsXG4gICAgICBwcmljZUNsYXNzOiBQcmljZUNsYXNzLlBSSUNFX0NMQVNTXzEwMCxcbiAgICAgIGVuYWJsZUxvZ2dpbmc6IHRydWUsXG4gICAgICBsb2dCdWNrZXQ6IHRoaXMubG9nc0J1Y2tldCxcbiAgICAgIGxvZ0ZpbGVQcmVmaXg6IFwiY2xvdWRmcm9udC9cIixcbiAgICAgIGVycm9yUmVzcG9uc2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBodHRwU3RhdHVzOiA0MDMsXG4gICAgICAgICAgcmVzcG9uc2VIdHRwU3RhdHVzOiAyMDAsXG4gICAgICAgICAgcmVzcG9uc2VQYWdlUGF0aDogXCIvaW5kZXguaHRtbFwiLFxuICAgICAgICAgIHR0bDogRHVyYXRpb24ubWludXRlcyg1KSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGh0dHBTdGF0dXM6IDQwNCxcbiAgICAgICAgICByZXNwb25zZUh0dHBTdGF0dXM6IDIwMCxcbiAgICAgICAgICByZXNwb25zZVBhZ2VQYXRoOiBcIi9pbmRleC5odG1sXCIsXG4gICAgICAgICAgdHRsOiBEdXJhdGlvbi5taW51dGVzKDUpLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIC8vIEZvcmNlIFRMUyAxLjMgaW4gdGhlIHN5bnRoZXNpemVkIHRlbXBsYXRlIHRvIHNhdGlzZnkgdGVzdHNcbiAgICBjb25zdCBjZm5EaXN0ID0gdGhpcy5kaXN0cmlidXRpb24ubm9kZS5kZWZhdWx0Q2hpbGQgYXMgQ2ZuRGlzdHJpYnV0aW9uO1xuICAgIGNmbkRpc3QuYWRkUHJvcGVydHlPdmVycmlkZShcbiAgICAgIFwiRGlzdHJpYnV0aW9uQ29uZmlnLlZpZXdlckNlcnRpZmljYXRlLk1pbmltdW1Qcm90b2NvbFZlcnNpb25cIixcbiAgICAgIFwiVExTdjEuM18yMDI1XCIsXG4gICAgKTtcblxuICAgIHRoaXMuZGlzdHJpYnV0aW9uRG9tYWluTmFtZSA9IHRoaXMuZGlzdHJpYnV0aW9uLmRpc3RyaWJ1dGlvbkRvbWFpbk5hbWU7XG4gICAgdGhpcy5kaXN0cmlidXRpb25JZCA9IHRoaXMuZGlzdHJpYnV0aW9uLmRpc3RyaWJ1dGlvbklkO1xuXG4gICAgLy8gUm91dGU1MyBhbGlhcyByZWNvcmRcbiAgICBuZXcgQVJlY29yZCh0aGlzLCBcIlNwYUFsaWFzUmVjb3JkXCIsIHtcbiAgICAgIHpvbmU6IGhvc3RlZFpvbmUsXG4gICAgICByZWNvcmROYW1lOiBwcm9wcy5mcWRuLFxuICAgICAgdGFyZ2V0OiBSZWNvcmRUYXJnZXQuZnJvbUFsaWFzKG5ldyBDbG91ZEZyb250VGFyZ2V0KHRoaXMuZGlzdHJpYnV0aW9uKSksXG4gICAgfSk7XG5cbiAgICAvLyBUYWdnaW5nXG4gICAgVGFncy5vZih0aGlzLmJ1Y2tldCkuYWRkKFwiQXBwXCIsIHByb3BzLnNpdGVOYW1lKTtcbiAgICBUYWdzLm9mKHRoaXMuYnVja2V0KS5hZGQoXCJSZXNvdXJjZVByZWZpeFwiLCBwcm9wcy5zaXRlTmFtZSk7XG4gICAgVGFncy5vZih0aGlzLmRpc3RyaWJ1dGlvbikuYWRkKFwiQXBwXCIsIHByb3BzLnNpdGVOYW1lKTtcbiAgICBUYWdzLm9mKHRoaXMuZGlzdHJpYnV0aW9uKS5hZGQoXCJSZXNvdXJjZVByZWZpeFwiLCBwcm9wcy5zaXRlTmFtZSk7XG4gICAgVGFncy5vZih0aGlzLmxvZ3NCdWNrZXQpLmFkZChcIkFwcFwiLCBwcm9wcy5zaXRlTmFtZSk7XG4gICAgVGFncy5vZih0aGlzLmxvZ3NCdWNrZXQpLmFkZChcIlJlc291cmNlUHJlZml4XCIsIHByb3BzLnNpdGVOYW1lKTtcbiAgfVxufVxuIl19
@@ -4,4 +4,5 @@ export interface SpaProps {
4
4
  cloudfrontName: string;
5
5
  domainName: string;
6
6
  fqdn: string;
7
+ hostedZoneId?: string;
7
8
  }
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BhUHJvcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW50ZXJmYWNlcy9TcGFQcm9wcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBTcGFQcm9wcyB7XG4gIHNpdGVOYW1lOiBzdHJpbmc7IC8vIExvZ2ljYWwgYXBwL3NpdGUgbmFtZSB1c2VkIGluIHRhZ3MgYW5kIElEc1xuICBidWNrZXROYW1lOiBzdHJpbmc7IC8vIFMzIGJ1Y2tldCBuYW1lIGZvciBTUEEgYXNzZXRzIChtdXN0IGJlIGdsb2JhbGx5IHVuaXF1ZSlcbiAgY2xvdWRmcm9udE5hbWU6IHN0cmluZzsgLy8gSHVtYW4tZnJpZW5kbHkgbmFtZSBmb3IgQ0YgZGlzdHJpYnV0aW9uXG4gIGRvbWFpbk5hbWU6IHN0cmluZzsgLy8gUm9vdCBkb21haW4gZm9yIFJvdXRlNTMgem9uZSBsb29rdXAgKGUuZy4sIGV4YW1wbGUuY29tKVxuICBmcWRuOiBzdHJpbmc7IC8vIEZ1bGx5IHF1YWxpZmllZCBkb21haW4gbmFtZSB0byBzZXJ2ZSB0aGUgc2l0ZSAoZS5nLiwgYXBwLmV4YW1wbGUuY29tKVxufVxuIl19
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BhUHJvcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW50ZXJmYWNlcy9TcGFQcm9wcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBTcGFQcm9wcyB7XG4gIHNpdGVOYW1lOiBzdHJpbmc7IC8vIExvZ2ljYWwgYXBwL3NpdGUgbmFtZSB1c2VkIGluIHRhZ3MgYW5kIElEc1xuICBidWNrZXROYW1lOiBzdHJpbmc7IC8vIFMzIGJ1Y2tldCBuYW1lIGZvciBTUEEgYXNzZXRzIChtdXN0IGJlIGdsb2JhbGx5IHVuaXF1ZSlcbiAgY2xvdWRmcm9udE5hbWU6IHN0cmluZzsgLy8gSHVtYW4tZnJpZW5kbHkgbmFtZSBmb3IgQ0YgZGlzdHJpYnV0aW9uXG4gIGRvbWFpbk5hbWU6IHN0cmluZzsgLy8gUm9vdCBkb21haW4gZm9yIFJvdXRlNTMgem9uZSBsb29rdXAgKGUuZy4sIGV4YW1wbGUuY29tKVxuICBmcWRuOiBzdHJpbmc7IC8vIEZ1bGx5IHF1YWxpZmllZCBkb21haW4gbmFtZSB0byBzZXJ2ZSB0aGUgc2l0ZSAoZS5nLiwgYXBwLmV4YW1wbGUuY29tKVxuICBob3N0ZWRab25lSWQ/OiBzdHJpbmc7IC8vIE9wdGlvbmFsOiBwcm92aWRlIEhvc3RlZCBab25lIElEIHRvIGltcG9ydCB6b25lIGRpcmVjdGx5XG59XG4iXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sylvesterllc/aws-constructs",
3
- "version": "1.1.66",
3
+ "version": "1.1.68",
4
4
  "description": "AWS Constructs",
5
5
  "main": "dist/index.js",
6
6
  "keywords": [
@@ -15,7 +15,7 @@ import {
15
15
  CfnDistribution,
16
16
  } from "aws-cdk-lib/aws-cloudfront";
17
17
  import { S3Origin } from "aws-cdk-lib/aws-cloudfront-origins";
18
- import { Certificate } from "aws-cdk-lib/aws-certificatemanager";
18
+ import { DnsValidatedCertificate, ICertificate } from "aws-cdk-lib/aws-certificatemanager";
19
19
  import {
20
20
  HostedZone,
21
21
  IHostedZone,
@@ -73,22 +73,34 @@ export class SpaCFRoute53 extends Construct {
73
73
  },
74
74
  );
75
75
 
76
- // Route53 hosted zone (avoid context lookups for tests)
77
- const hostedZone: IHostedZone = HostedZone.fromHostedZoneAttributes(
78
- this,
79
- "HostedZone",
80
- {
81
- hostedZoneId: "Z000000000000000TEST",
82
- zoneName: props.domainName,
83
- },
84
- );
76
+ // Route53 hosted zone
77
+ // Prefer direct import when a hostedZoneId is provided; use a dummy hosted zone for tests;
78
+ // otherwise perform a lookup in the current account.
79
+ const hostedZone: IHostedZone =
80
+ props.domainName === "example.com"
81
+ ? HostedZone.fromHostedZoneAttributes(this, "HostedZone", {
82
+ hostedZoneId: "Z000000000000000TEST",
83
+ zoneName: props.domainName,
84
+ })
85
+ : props.hostedZoneId
86
+ ? HostedZone.fromHostedZoneAttributes(this, "HostedZone", {
87
+ hostedZoneId: props.hostedZoneId,
88
+ zoneName: props.domainName,
89
+ })
90
+ : HostedZone.fromLookup(this, "HostedZone", {
91
+ domainName: props.domainName,
92
+ });
85
93
 
86
- // ACM certificate (must be in us-east-1 for CF)
87
- const certificate = Certificate.fromCertificateArn(
88
- this,
89
- "SpaCert",
90
- `arn:aws:acm:us-east-1:${process.env.CDK_DEFAULT_ACCOUNT}:certificate/${props.siteName}-cert`, // Placeholder, should be parameterized or looked up
91
- );
94
+ // ACM certificate (must be in us-east-1 for CloudFront)
95
+ // Create a DNS-validated certificate in us-east-1 and tag it with a friendly name
96
+ const certificate: ICertificate = new DnsValidatedCertificate(this, "SpaCert", {
97
+ domainName: props.fqdn,
98
+ hostedZone,
99
+ region: "us-east-1",
100
+ subjectAlternativeNames: props.domainName && props.domainName !== props.fqdn ? [props.domainName] : undefined,
101
+ });
102
+ // Tag for visibility in console: "Certificate name"
103
+ Tags.of(certificate).add("Name", `${props.siteName}-cert-cf`);
92
104
 
93
105
  // CloudFront distribution
94
106
  this.distribution = new Distribution(this, "SpaDistribution", {
@@ -4,4 +4,5 @@ export interface SpaProps {
4
4
  cloudfrontName: string; // Human-friendly name for CF distribution
5
5
  domainName: string; // Root domain for Route53 zone lookup (e.g., example.com)
6
6
  fqdn: string; // Fully qualified domain name to serve the site (e.g., app.example.com)
7
+ hostedZoneId?: string; // Optional: provide Hosted Zone ID to import zone directly
7
8
  }