@codedrifters/constructs 0.0.7 → 0.0.9
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/lib/index.d.mts +107 -0
- package/lib/index.d.ts +107 -2
- package/lib/index.js +371 -16
- package/lib/index.js.map +1 -0
- package/lib/index.mjs +387 -0
- package/lib/index.mjs.map +1 -0
- package/package.json +11 -8
- package/lib/s3/index.d.ts +0 -1
- package/lib/s3/index.js +0 -18
- package/lib/s3/private-bucket.d.ts +0 -7
- package/lib/s3/private-bucket.js +0 -22
- package/lib/static-hosting/index.d.ts +0 -2
- package/lib/static-hosting/index.js +0 -19
- package/lib/static-hosting/static-content.d.ts +0 -49
- package/lib/static-hosting/static-content.js +0 -52
- package/lib/static-hosting/static-hosting.d.ts +0 -49
- package/lib/static-hosting/static-hosting.js +0 -176
- package/lib/static-hosting/static-hosting.viewer-request-handler.d.ts +0 -35
- package/lib/static-hosting/static-hosting.viewer-request-handler.js +0 -76
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.StaticContent = void 0;
|
|
4
|
-
const utils_1 = require("@codedrifters/utils");
|
|
5
|
-
const aws_s3_1 = require("aws-cdk-lib/aws-s3");
|
|
6
|
-
const aws_s3_deployment_1 = require("aws-cdk-lib/aws-s3-deployment");
|
|
7
|
-
const aws_ssm_1 = require("aws-cdk-lib/aws-ssm");
|
|
8
|
-
const change_case_1 = require("change-case");
|
|
9
|
-
const constructs_1 = require("constructs");
|
|
10
|
-
class StaticContent extends constructs_1.Construct {
|
|
11
|
-
constructor(scope, id, props) {
|
|
12
|
-
super(scope, id);
|
|
13
|
-
/***************************************************************************
|
|
14
|
-
*
|
|
15
|
-
* Initial Setup
|
|
16
|
-
*
|
|
17
|
-
* Set some defaults, build domain information.
|
|
18
|
-
*
|
|
19
|
-
**************************************************************************/
|
|
20
|
-
const { bucketArnParamName, contentSourceDirectory, contentDestinationDirectory, subDomain, fullDomain, } = {
|
|
21
|
-
bucketArnParamName: "/STATIC_WEBSITE/BUCKET_ARN",
|
|
22
|
-
subDomain: (0, utils_1.findGitBranch)(),
|
|
23
|
-
...props,
|
|
24
|
-
};
|
|
25
|
-
/***************************************************************************
|
|
26
|
-
*
|
|
27
|
-
* Import and build some values from Param Store during deployment.
|
|
28
|
-
*
|
|
29
|
-
**************************************************************************/
|
|
30
|
-
const keyPrefix = [(0, change_case_1.paramCase)(subDomain), fullDomain].join(".");
|
|
31
|
-
const bucketArn = aws_ssm_1.StringParameter.valueForStringParameter(this, bucketArnParamName);
|
|
32
|
-
const bucket = aws_s3_1.Bucket.fromBucketArn(this, "bucket", bucketArn);
|
|
33
|
-
/***************************************************************************
|
|
34
|
-
*
|
|
35
|
-
* Gather the sources we'll be deploying. We need to have an empty source
|
|
36
|
-
* for tests since it will change all the time and bork up the test
|
|
37
|
-
* snapshots if we don't.
|
|
38
|
-
*
|
|
39
|
-
**************************************************************************/
|
|
40
|
-
const sources = process.env.JEST_WORKER_ID
|
|
41
|
-
? []
|
|
42
|
-
: [aws_s3_deployment_1.Source.asset(contentSourceDirectory)];
|
|
43
|
-
new aws_s3_deployment_1.BucketDeployment(this, "deploy", {
|
|
44
|
-
sources,
|
|
45
|
-
destinationBucket: bucket,
|
|
46
|
-
retainOnDelete: false,
|
|
47
|
-
destinationKeyPrefix: `${keyPrefix}${contentDestinationDirectory}`,
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
exports.StaticContent = StaticContent;
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGljLWNvbnRlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RhdGljLWhvc3Rpbmcvc3RhdGljLWNvbnRlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0NBQW9EO0FBQ3BELCtDQUE0QztBQUM1QyxxRUFBeUU7QUFDekUsaURBQXNEO0FBQ3RELDZDQUF3QztBQUN4QywyQ0FBdUM7QUFxRHZDLE1BQWEsYUFBYyxTQUFRLHNCQUFTO0lBQzFDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBeUI7UUFDakUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQjs7Ozs7O29GQU00RTtRQUU1RSxNQUFNLEVBQ0osa0JBQWtCLEVBQ2xCLHNCQUFzQixFQUN0QiwyQkFBMkIsRUFDM0IsU0FBUyxFQUNULFVBQVUsR0FDWCxHQUFHO1lBQ0Ysa0JBQWtCLEVBQUUsNEJBQTRCO1lBQ2hELFNBQVMsRUFBRSxJQUFBLHFCQUFhLEdBQUU7WUFDMUIsR0FBRyxLQUFLO1NBQ1QsQ0FBQztRQUVGOzs7O29GQUk0RTtRQUU1RSxNQUFNLFNBQVMsR0FBRyxDQUFDLElBQUEsdUJBQVMsRUFBQyxTQUFTLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFL0QsTUFBTSxTQUFTLEdBQUcseUJBQWUsQ0FBQyx1QkFBdUIsQ0FDdkQsSUFBSSxFQUNKLGtCQUFrQixDQUNuQixDQUFDO1FBQ0YsTUFBTSxNQUFNLEdBQUcsZUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRS9EOzs7Ozs7b0ZBTTRFO1FBRTVFLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYztZQUN4QyxDQUFDLENBQUMsRUFBRTtZQUNKLENBQUMsQ0FBQyxDQUFDLDBCQUFNLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQztRQUUzQyxJQUFJLG9DQUFnQixDQUFDLElBQUksRUFBRSxRQUFRLEVBQUU7WUFDbkMsT0FBTztZQUNQLGlCQUFpQixFQUFFLE1BQU07WUFDekIsY0FBYyxFQUFFLEtBQUs7WUFDckIsb0JBQW9CLEVBQUUsR0FBRyxTQUFTLEdBQUcsMkJBQTJCLEVBQUU7U0FDbkUsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBekRELHNDQXlEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZpbmRHaXRCcmFuY2ggfSBmcm9tIFwiQGNvZGVkcmlmdGVycy91dGlsc1wiO1xuaW1wb3J0IHsgQnVja2V0IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zM1wiO1xuaW1wb3J0IHsgQnVja2V0RGVwbG95bWVudCwgU291cmNlIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zMy1kZXBsb3ltZW50XCI7XG5pbXBvcnQgeyBTdHJpbmdQYXJhbWV0ZXIgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNzbVwiO1xuaW1wb3J0IHsgcGFyYW1DYXNlIH0gZnJvbSBcImNoYW5nZS1jYXNlXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICpcbiAqICBTVEFUSUMgQ09OVEVOVCBVUExPQURFUlxuICpcbiAqICBUaGlzIGNvbnN0cnVjdCB1cGxvYWRzIGEgZGlyZWN0b3J5IG9mIGNvbnRlbnQgZnJvbSBhIGxvY2FsIGxvY2F0aW9uIGludG8gUzMuXG4gKlxuICogIFRvIHN1cHBvcnQgUFIgYW5kIGJyYW5jaCBzcGVjaWZpYyBidWlsZHMsIGVhY2ggUzMgYnVja2V0IGNhbiBzdG9yZSBjb250ZW50XG4gKiAgZm9yIG11bHRpcGxlIGRvbWFpbnMgYW5kIGJ1aWxkcywgdXNpbmcgdGhlIGZvbGxvd2luZyBmb3JtYXQ6XG4gKlxuICogIFMzLWJ1Y2tldC9kb21haW4vKlxuICpcbiAqICBBIGJ1Y2tldCB1c2VkIHRvIHN0b3JlIGNvbnRlbnQgZm9yIHN0YWdlLm9wZW5oaS5vcmcgbWlnaHQgaGF2ZSB0aGVcbiAqICBmb2xsb3dpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZSAoYWxsIGluIHRoZSBzYW1lIGJ1Y2tldCkuXG4gKlxuICogIC9zdGFnZS5vcGVuaGkub3JnLyogLT4gc2VydmVzIGNvbnRlbnQgdG8gc3RhZ2Uub3BlbmhpLm9yZ1xuICogIC9mZWF0dXJlLTcuc3RhZ2Uub3BlbmhpLm9yZy8qIC0+IHNlcnZlcyBjb250ZW50IHRvIGZlYXR1cmUtNy5zdGFnZS5vcGVuaGkub3JnXG4gKiAgL3ByLTEyMy5zdGFnZS5vcGVuaGkub3JnLyogLT4gc2VydmVzIGNvbnRlbnQgdG8gcHItMTIzLnN0YWdlLm9wZW5oaS5vcmdcbiAqXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0YXRpY0NvbnRlbnRQcm9wcyB7XG4gIC8qKlxuICAgKiBQYXJhbWV0ZXIgbmFtZSB0byB1c2Ugd2hlbiBzdG9yaW5nIHRoZSBzdGF0aWMgaG9zdGluZyBidWNrZXQncyBBUk4uXG4gICAqIFRoaXMgaXMgbmVlZGVkIGluIG90aGVyIGxhdGVyIHN0ZXBzIHdoZW4gZGVwbG95aW5nIGhvc3RlZCBjb250ZW50IHRvIFMzLlxuICAgKi9cbiAgcmVhZG9ubHkgYnVja2V0QXJuUGFyYW1OYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiAgQWJzb2x1dGUgcGF0aCB0byBkaXJlY3RvcnkgY29udGFpbmluZyBjb250ZW50IGZvciB0aGUgd2Vic2l0ZS5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRlbnRTb3VyY2VEaXJlY3Rvcnk6IHN0cmluZztcblxuICAvKipcbiAgICogIERpcmVjdG9yeSB0byBwbGFjZSBjb250ZW50IGludG8uIFNob3VsZCBzdGFydCB3aXRoIGEgc2xhc2guXG4gICAqICBFeGFtcGxlOiAnL3dpZGdldCdcbiAgICovXG4gIHJlYWRvbmx5IGNvbnRlbnREZXN0aW5hdGlvbkRpcmVjdG9yeTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiAgVGhlIHN1YiBkb21haW4gcHJlZml4IChpZTogaW1hZ2VzKVxuICAgKlxuICAgKiBAZGVmYXVsdCBnaXQgYnJhbmNoIG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IHN1YkRvbWFpbj86IHN0cmluZztcblxuICAvKipcbiAgICogIFRoZSBmdWxsIGRvbWFpbiAoaWU6IHN0YWdpbmcuY29kZWRyaWZ0ZXJzLmNvbSlcbiAgICovXG4gIHJlYWRvbmx5IGZ1bGxEb21haW46IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFN0YXRpY0NvbnRlbnQgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU3RhdGljQ29udGVudFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgKlxuICAgICAqIEluaXRpYWwgU2V0dXBcbiAgICAgKlxuICAgICAqIFNldCBzb21lIGRlZmF1bHRzLCBidWlsZCBkb21haW4gaW5mb3JtYXRpb24uXG4gICAgICpcbiAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgICBjb25zdCB7XG4gICAgICBidWNrZXRBcm5QYXJhbU5hbWUsXG4gICAgICBjb250ZW50U291cmNlRGlyZWN0b3J5LFxuICAgICAgY29udGVudERlc3RpbmF0aW9uRGlyZWN0b3J5LFxuICAgICAgc3ViRG9tYWluLFxuICAgICAgZnVsbERvbWFpbixcbiAgICB9ID0ge1xuICAgICAgYnVja2V0QXJuUGFyYW1OYW1lOiBcIi9TVEFUSUNfV0VCU0lURS9CVUNLRVRfQVJOXCIsXG4gICAgICBzdWJEb21haW46IGZpbmRHaXRCcmFuY2goKSxcbiAgICAgIC4uLnByb3BzLFxuICAgIH07XG5cbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICpcbiAgICAgKiBJbXBvcnQgYW5kIGJ1aWxkIHNvbWUgdmFsdWVzIGZyb20gUGFyYW0gU3RvcmUgZHVyaW5nIGRlcGxveW1lbnQuXG4gICAgICpcbiAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgICBjb25zdCBrZXlQcmVmaXggPSBbcGFyYW1DYXNlKHN1YkRvbWFpbiksIGZ1bGxEb21haW5dLmpvaW4oXCIuXCIpO1xuXG4gICAgY29uc3QgYnVja2V0QXJuID0gU3RyaW5nUGFyYW1ldGVyLnZhbHVlRm9yU3RyaW5nUGFyYW1ldGVyKFxuICAgICAgdGhpcyxcbiAgICAgIGJ1Y2tldEFyblBhcmFtTmFtZSxcbiAgICApO1xuICAgIGNvbnN0IGJ1Y2tldCA9IEJ1Y2tldC5mcm9tQnVja2V0QXJuKHRoaXMsIFwiYnVja2V0XCIsIGJ1Y2tldEFybik7XG5cbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICpcbiAgICAgKiBHYXRoZXIgdGhlIHNvdXJjZXMgd2UnbGwgYmUgZGVwbG95aW5nLiBXZSBuZWVkIHRvIGhhdmUgYW4gZW1wdHkgc291cmNlXG4gICAgICogZm9yIHRlc3RzIHNpbmNlIGl0IHdpbGwgY2hhbmdlIGFsbCB0aGUgdGltZSBhbmQgYm9yayB1cCB0aGUgdGVzdFxuICAgICAqIHNuYXBzaG90cyBpZiB3ZSBkb24ndC5cbiAgICAgKlxuICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAgIGNvbnN0IHNvdXJjZXMgPSBwcm9jZXNzLmVudi5KRVNUX1dPUktFUl9JRFxuICAgICAgPyBbXVxuICAgICAgOiBbU291cmNlLmFzc2V0KGNvbnRlbnRTb3VyY2VEaXJlY3RvcnkpXTtcblxuICAgIG5ldyBCdWNrZXREZXBsb3ltZW50KHRoaXMsIFwiZGVwbG95XCIsIHtcbiAgICAgIHNvdXJjZXMsXG4gICAgICBkZXN0aW5hdGlvbkJ1Y2tldDogYnVja2V0LFxuICAgICAgcmV0YWluT25EZWxldGU6IGZhbHNlLFxuICAgICAgZGVzdGluYXRpb25LZXlQcmVmaXg6IGAke2tleVByZWZpeH0ke2NvbnRlbnREZXN0aW5hdGlvbkRpcmVjdG9yeX1gLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { StackProps } from "aws-cdk-lib";
|
|
2
|
-
import { HostedZoneAttributes } from "aws-cdk-lib/aws-route53";
|
|
3
|
-
import { Construct } from "constructs";
|
|
4
|
-
import { PrivateBucketProps } from "../s3/private-bucket";
|
|
5
|
-
export interface StaticDomainProps {
|
|
6
|
-
/**
|
|
7
|
-
* The base domain (ie: codedrifters.com)
|
|
8
|
-
*/
|
|
9
|
-
readonly baseDomain: string;
|
|
10
|
-
/**
|
|
11
|
-
* Hosted zone ID for the base domain.
|
|
12
|
-
*/
|
|
13
|
-
readonly hostedZoneAttributes: HostedZoneAttributes;
|
|
14
|
-
}
|
|
15
|
-
export interface StaticHostingProps extends StackProps {
|
|
16
|
-
/**
|
|
17
|
-
* Short description used in various places for traceability.
|
|
18
|
-
*/
|
|
19
|
-
readonly description?: string;
|
|
20
|
-
/**
|
|
21
|
-
* Values used to connect a domain name to the cloudfront distribution. If not
|
|
22
|
-
* supplied, cloudfront doesn't use a custom domain.
|
|
23
|
-
*/
|
|
24
|
-
readonly staticDomainProps?: StaticDomainProps;
|
|
25
|
-
/**
|
|
26
|
-
* Parameter name to use when storing the static hosting bucket's ARN.
|
|
27
|
-
* This is needed in other later steps when deploying hosted content to S3.
|
|
28
|
-
*/
|
|
29
|
-
readonly bucketArnParamName?: string;
|
|
30
|
-
/**
|
|
31
|
-
* Parameter name to use when storing the CloudFront Distribution Domain Name.
|
|
32
|
-
*/
|
|
33
|
-
readonly distributionDomainParamName?: string;
|
|
34
|
-
/**
|
|
35
|
-
* Parameter name to use when storing the CloudFront Distribution ID.
|
|
36
|
-
*/
|
|
37
|
-
readonly distributionIDParamName?: string;
|
|
38
|
-
/**
|
|
39
|
-
* Props to pass to the private S3 bucket.
|
|
40
|
-
*/
|
|
41
|
-
readonly privateBucketProps?: PrivateBucketProps;
|
|
42
|
-
}
|
|
43
|
-
export declare class StaticHosting extends Construct {
|
|
44
|
-
/**
|
|
45
|
-
* Full domain name used as basis for hosting.
|
|
46
|
-
*/
|
|
47
|
-
readonly fullDomain: string;
|
|
48
|
-
constructor(scope: Construct, id: string, props?: StaticHostingProps);
|
|
49
|
-
}
|
|
@@ -1,176 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.StaticHosting = void 0;
|
|
4
|
-
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
5
|
-
const aws_certificatemanager_1 = require("aws-cdk-lib/aws-certificatemanager");
|
|
6
|
-
const aws_cloudfront_1 = require("aws-cdk-lib/aws-cloudfront");
|
|
7
|
-
const aws_cloudfront_origins_1 = require("aws-cdk-lib/aws-cloudfront-origins");
|
|
8
|
-
const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
|
|
9
|
-
const aws_lambda_nodejs_1 = require("aws-cdk-lib/aws-lambda-nodejs");
|
|
10
|
-
const aws_logs_1 = require("aws-cdk-lib/aws-logs");
|
|
11
|
-
const aws_route53_1 = require("aws-cdk-lib/aws-route53");
|
|
12
|
-
const aws_route53_targets_1 = require("aws-cdk-lib/aws-route53-targets");
|
|
13
|
-
const aws_ssm_1 = require("aws-cdk-lib/aws-ssm");
|
|
14
|
-
const constructs_1 = require("constructs");
|
|
15
|
-
const private_bucket_1 = require("../s3/private-bucket");
|
|
16
|
-
class StaticHosting extends constructs_1.Construct {
|
|
17
|
-
constructor(scope, id, props = {}) {
|
|
18
|
-
super(scope, id);
|
|
19
|
-
/***************************************************************************
|
|
20
|
-
*
|
|
21
|
-
* Initial Setup
|
|
22
|
-
*
|
|
23
|
-
* Set some defaults, build domain information.
|
|
24
|
-
*
|
|
25
|
-
**************************************************************************/
|
|
26
|
-
const { bucketArnParamName, distributionDomainParamName, distributionIDParamName, staticDomainProps, privateBucketProps, } = {
|
|
27
|
-
bucketArnParamName: "/STATIC_WEBSITE/BUCKET_ARN",
|
|
28
|
-
distributionDomainParamName: "/STATIC_WEBSITE/DISTRIBUTION_DOMAIN",
|
|
29
|
-
distributionIDParamName: "/STATIC_WEBSITE/DISTRIBUTION_ID",
|
|
30
|
-
...props,
|
|
31
|
-
};
|
|
32
|
-
const { baseDomain, hostedZoneAttributes } = staticDomainProps ?? {};
|
|
33
|
-
/***************************************************************************
|
|
34
|
-
*
|
|
35
|
-
* PRIVATE BUCKET
|
|
36
|
-
*
|
|
37
|
-
* A bucket to store the files within.
|
|
38
|
-
* Save ARN for later deploys.
|
|
39
|
-
*
|
|
40
|
-
**************************************************************************/
|
|
41
|
-
const bucket = new private_bucket_1.PrivateBucket(this, "static-hosting-bucket", privateBucketProps);
|
|
42
|
-
/***************************************************************************
|
|
43
|
-
*
|
|
44
|
-
* DNS & Wildcard Certificate
|
|
45
|
-
*
|
|
46
|
-
* If a zone Id as passed in, find the hosted zone and create a wildcard
|
|
47
|
-
* certificate for the domain.
|
|
48
|
-
*
|
|
49
|
-
**************************************************************************/
|
|
50
|
-
let zone;
|
|
51
|
-
let certificate;
|
|
52
|
-
if (hostedZoneAttributes && baseDomain) {
|
|
53
|
-
zone = aws_route53_1.HostedZone.fromHostedZoneAttributes(this, "zone", hostedZoneAttributes);
|
|
54
|
-
certificate = new aws_certificatemanager_1.Certificate(this, "wildcard-certificate", {
|
|
55
|
-
domainName: `*.${baseDomain}`,
|
|
56
|
-
subjectAlternativeNames: [baseDomain],
|
|
57
|
-
validation: aws_certificatemanager_1.CertificateValidation.fromDnsMultiZone({
|
|
58
|
-
[`*.${baseDomain}`]: zone,
|
|
59
|
-
[baseDomain]: zone,
|
|
60
|
-
}),
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
/******************************************************************************
|
|
64
|
-
*
|
|
65
|
-
* LAMBDA@EDGE FUNCTION
|
|
66
|
-
*
|
|
67
|
-
* This handles rewriting the path from domain name.
|
|
68
|
-
*
|
|
69
|
-
*****************************************************************************/
|
|
70
|
-
const handler = new aws_lambda_nodejs_1.NodejsFunction(this, "viewer-request-handler", {
|
|
71
|
-
memorySize: 128,
|
|
72
|
-
runtime: aws_lambda_1.Runtime.NODEJS_24_X,
|
|
73
|
-
logGroup: new aws_logs_1.LogGroup(this, "viewer-request-handler-log-group", {
|
|
74
|
-
retention: aws_logs_1.RetentionDays.ONE_MONTH,
|
|
75
|
-
}),
|
|
76
|
-
});
|
|
77
|
-
/******************************************************************************
|
|
78
|
-
*
|
|
79
|
-
* CLOUDFRONT CONFIG
|
|
80
|
-
*
|
|
81
|
-
* Setup a CloudFront Distribution for the bucket.
|
|
82
|
-
*
|
|
83
|
-
*****************************************************************************/
|
|
84
|
-
const cachePolicy = new aws_cloudfront_1.CachePolicy(this, "cloudfront-policy", {
|
|
85
|
-
comment: "Relatively conservative TTL policy.",
|
|
86
|
-
maxTtl: aws_cdk_lib_1.Duration.seconds(300),
|
|
87
|
-
minTtl: aws_cdk_lib_1.Duration.seconds(0),
|
|
88
|
-
defaultTtl: aws_cdk_lib_1.Duration.seconds(60),
|
|
89
|
-
headerBehavior: aws_cloudfront_1.CacheHeaderBehavior.none(),
|
|
90
|
-
queryStringBehavior: aws_cloudfront_1.CacheQueryStringBehavior.none(),
|
|
91
|
-
cookieBehavior: aws_cloudfront_1.CacheCookieBehavior.none(),
|
|
92
|
-
enableAcceptEncodingGzip: true,
|
|
93
|
-
enableAcceptEncodingBrotli: true,
|
|
94
|
-
});
|
|
95
|
-
const oac = new aws_cloudfront_1.S3OriginAccessControl(this, "MyOAC", {
|
|
96
|
-
signing: aws_cloudfront_1.Signing.SIGV4_NO_OVERRIDE,
|
|
97
|
-
});
|
|
98
|
-
const origin = aws_cloudfront_origins_1.S3BucketOrigin.withOriginAccessControl(bucket, {
|
|
99
|
-
originAccessControl: oac,
|
|
100
|
-
originAccessLevels: [aws_cloudfront_1.AccessLevel.READ],
|
|
101
|
-
});
|
|
102
|
-
const distribution = new aws_cloudfront_1.Distribution(this, "cloudfront-distribution", {
|
|
103
|
-
comment: `Distribution for ${props.description ?? id}`,
|
|
104
|
-
/**
|
|
105
|
-
* Only if domain was supplied
|
|
106
|
-
*/
|
|
107
|
-
...(certificate && baseDomain
|
|
108
|
-
? {
|
|
109
|
-
certificate,
|
|
110
|
-
domainNames: [baseDomain, `*.${baseDomain}`],
|
|
111
|
-
}
|
|
112
|
-
: {}),
|
|
113
|
-
defaultBehavior: {
|
|
114
|
-
origin,
|
|
115
|
-
viewerProtocolPolicy: aws_cloudfront_1.ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
|
|
116
|
-
cachePolicy,
|
|
117
|
-
allowedMethods: aws_cloudfront_1.AllowedMethods.ALLOW_GET_HEAD_OPTIONS,
|
|
118
|
-
edgeLambdas: [
|
|
119
|
-
{
|
|
120
|
-
functionVersion: handler.currentVersion,
|
|
121
|
-
eventType: aws_cloudfront_1.LambdaEdgeEventType.VIEWER_REQUEST,
|
|
122
|
-
},
|
|
123
|
-
],
|
|
124
|
-
},
|
|
125
|
-
defaultRootObject: "index.html",
|
|
126
|
-
});
|
|
127
|
-
/**
|
|
128
|
-
* We finally have enough information to set the full domain.
|
|
129
|
-
*/
|
|
130
|
-
this.fullDomain =
|
|
131
|
-
certificate && baseDomain ? baseDomain : distribution.domainName;
|
|
132
|
-
/***************************************************************************
|
|
133
|
-
*
|
|
134
|
-
* DNS ENTRY
|
|
135
|
-
*
|
|
136
|
-
* Link cloudfront to both the root fulldomain and all possible subdomains.
|
|
137
|
-
*
|
|
138
|
-
**************************************************************************/
|
|
139
|
-
if (zone) {
|
|
140
|
-
new aws_route53_1.ARecord(this, "root-dns-entry", {
|
|
141
|
-
zone,
|
|
142
|
-
recordName: baseDomain ? baseDomain : "",
|
|
143
|
-
target: aws_route53_1.RecordTarget.fromAlias(new aws_route53_targets_1.CloudFrontTarget(distribution)),
|
|
144
|
-
});
|
|
145
|
-
new aws_route53_1.ARecord(this, "wc-dns-entry", {
|
|
146
|
-
zone,
|
|
147
|
-
recordName: baseDomain ? `*.${baseDomain}` : "*",
|
|
148
|
-
target: aws_route53_1.RecordTarget.fromAlias(new aws_route53_targets_1.CloudFrontTarget(distribution)),
|
|
149
|
-
});
|
|
150
|
-
}
|
|
151
|
-
/***************************************************************************
|
|
152
|
-
*
|
|
153
|
-
* EXPORTS
|
|
154
|
-
*
|
|
155
|
-
* Used by content uploader later.
|
|
156
|
-
*
|
|
157
|
-
**************************************************************************/
|
|
158
|
-
new aws_ssm_1.StringParameter(this, "dist-domain", {
|
|
159
|
-
description: `GENERATED DO NOT CHANGE - CloudFront Distribution Details (${props.description ?? id}).`,
|
|
160
|
-
parameterName: distributionDomainParamName,
|
|
161
|
-
stringValue: distribution.domainName,
|
|
162
|
-
});
|
|
163
|
-
new aws_ssm_1.StringParameter(this, "dist-id", {
|
|
164
|
-
description: `GENERATED DO NOT CHANGE - CloudFront Distribution Details (${props.description ?? id}).`,
|
|
165
|
-
parameterName: distributionIDParamName,
|
|
166
|
-
stringValue: distribution.distributionId,
|
|
167
|
-
});
|
|
168
|
-
new aws_ssm_1.StringParameter(this, "bucket-arn", {
|
|
169
|
-
description: `GENERATED DO NOT CHANGE - S3 Bucket ARN for (${props.description ?? id}).`,
|
|
170
|
-
parameterName: bucketArnParamName,
|
|
171
|
-
stringValue: bucket.bucketArn,
|
|
172
|
-
});
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
exports.StaticHosting = StaticHosting;
|
|
176
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGljLWhvc3RpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RhdGljLWhvc3Rpbmcvc3RhdGljLWhvc3RpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQW1EO0FBQ25ELCtFQUc0QztBQUM1QywrREFZb0M7QUFDcEMsK0VBQW9FO0FBQ3BFLHVEQUFpRDtBQUNqRCxxRUFBK0Q7QUFDL0QsbURBQStEO0FBQy9ELHlEQU1pQztBQUNqQyx5RUFBbUU7QUFDbkUsaURBQXNEO0FBQ3RELDJDQUF1QztBQUN2Qyx5REFBeUU7QUFnRHpFLE1BQWEsYUFBYyxTQUFRLHNCQUFTO0lBTTFDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsUUFBNEIsRUFBRTtRQUN0RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCOzs7Ozs7b0ZBTTRFO1FBRTVFLE1BQU0sRUFDSixrQkFBa0IsRUFDbEIsMkJBQTJCLEVBQzNCLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsa0JBQWtCLEdBQ25CLEdBQUc7WUFDRixrQkFBa0IsRUFBRSw0QkFBNEI7WUFDaEQsMkJBQTJCLEVBQUUscUNBQXFDO1lBQ2xFLHVCQUF1QixFQUFFLGlDQUFpQztZQUMxRCxHQUFHLEtBQUs7U0FDVCxDQUFDO1FBRUYsTUFBTSxFQUFFLFVBQVUsRUFBRSxvQkFBb0IsRUFBRSxHQUFHLGlCQUFpQixJQUFJLEVBQUUsQ0FBQztRQUVyRTs7Ozs7OztvRkFPNEU7UUFFNUUsTUFBTSxNQUFNLEdBQUcsSUFBSSw4QkFBYSxDQUM5QixJQUFJLEVBQ0osdUJBQXVCLEVBQ3ZCLGtCQUFrQixDQUNuQixDQUFDO1FBRUY7Ozs7Ozs7b0ZBTzRFO1FBRTVFLElBQUksSUFBNkIsQ0FBQztRQUNsQyxJQUFJLFdBQW9DLENBQUM7UUFFekMsSUFBSSxvQkFBb0IsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUN2QyxJQUFJLEdBQUcsd0JBQVUsQ0FBQyx3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WUFDdEMsV0FBVyxFQUFFLGdEQUFnRCxLQUFLLENBQUMsV0FBVyxJQUFJLEVBQUUsSUFBSTtZQUN4RixhQUFhLEVBQUUsa0JBQWtCO1lBQ2pDLFdBQVcsRUFBRSxNQUFNLENBQUMsU0FBUztTQUM5QixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUF6TUQsc0NBeU1DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRHVyYXRpb24sIFN0YWNrUHJvcHMgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7XG4gIENlcnRpZmljYXRlLFxuICBDZXJ0aWZpY2F0ZVZhbGlkYXRpb24sXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2VydGlmaWNhdGVtYW5hZ2VyXCI7XG5pbXBvcnQge1xuICBBY2Nlc3NMZXZlbCxcbiAgQWxsb3dlZE1ldGhvZHMsXG4gIENhY2hlQ29va2llQmVoYXZpb3IsXG4gIENhY2hlSGVhZGVyQmVoYXZpb3IsXG4gIENhY2hlUG9saWN5LFxuICBDYWNoZVF1ZXJ5U3RyaW5nQmVoYXZpb3IsXG4gIERpc3RyaWJ1dGlvbixcbiAgTGFtYmRhRWRnZUV2ZW50VHlwZSxcbiAgUzNPcmlnaW5BY2Nlc3NDb250cm9sLFxuICBTaWduaW5nLFxuICBWaWV3ZXJQcm90b2NvbFBvbGljeSxcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jbG91ZGZyb250XCI7XG5pbXBvcnQgeyBTM0J1Y2tldE9yaWdpbiB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udC1vcmlnaW5zXCI7XG5pbXBvcnQgeyBSdW50aW1lIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIjtcbmltcG9ydCB7IE5vZGVqc0Z1bmN0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGEtbm9kZWpzXCI7XG5pbXBvcnQgeyBMb2dHcm91cCwgUmV0ZW50aW9uRGF5cyB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbG9nc1wiO1xuaW1wb3J0IHtcbiAgQVJlY29yZCxcbiAgSG9zdGVkWm9uZSxcbiAgSG9zdGVkWm9uZUF0dHJpYnV0ZXMsXG4gIElIb3N0ZWRab25lLFxuICBSZWNvcmRUYXJnZXQsXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtcm91dGU1M1wiO1xuaW1wb3J0IHsgQ2xvdWRGcm9udFRhcmdldCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtcm91dGU1My10YXJnZXRzXCI7XG5pbXBvcnQgeyBTdHJpbmdQYXJhbWV0ZXIgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNzbVwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IFByaXZhdGVCdWNrZXQsIFByaXZhdGVCdWNrZXRQcm9wcyB9IGZyb20gXCIuLi9zMy9wcml2YXRlLWJ1Y2tldFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0YXRpY0RvbWFpblByb3BzIHtcbiAgLyoqXG4gICAqICBUaGUgYmFzZSBkb21haW4gKGllOiBjb2RlZHJpZnRlcnMuY29tKVxuICAgKi9cbiAgcmVhZG9ubHkgYmFzZURvbWFpbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBIb3N0ZWQgem9uZSBJRCBmb3IgdGhlIGJhc2UgZG9tYWluLlxuICAgKi9cbiAgcmVhZG9ubHkgaG9zdGVkWm9uZUF0dHJpYnV0ZXM6IEhvc3RlZFpvbmVBdHRyaWJ1dGVzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0YXRpY0hvc3RpbmdQcm9wcyBleHRlbmRzIFN0YWNrUHJvcHMge1xuICAvKipcbiAgICogU2hvcnQgZGVzY3JpcHRpb24gdXNlZCBpbiB2YXJpb3VzIHBsYWNlcyBmb3IgdHJhY2VhYmlsaXR5LlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFZhbHVlcyB1c2VkIHRvIGNvbm5lY3QgYSBkb21haW4gbmFtZSB0byB0aGUgY2xvdWRmcm9udCBkaXN0cmlidXRpb24uIElmIG5vdFxuICAgKiBzdXBwbGllZCwgY2xvdWRmcm9udCBkb2Vzbid0IHVzZSBhIGN1c3RvbSBkb21haW4uXG4gICAqL1xuICByZWFkb25seSBzdGF0aWNEb21haW5Qcm9wcz86IFN0YXRpY0RvbWFpblByb3BzO1xuXG4gIC8qKlxuICAgKiBQYXJhbWV0ZXIgbmFtZSB0byB1c2Ugd2hlbiBzdG9yaW5nIHRoZSBzdGF0aWMgaG9zdGluZyBidWNrZXQncyBBUk4uXG4gICAqIFRoaXMgaXMgbmVlZGVkIGluIG90aGVyIGxhdGVyIHN0ZXBzIHdoZW4gZGVwbG95aW5nIGhvc3RlZCBjb250ZW50IHRvIFMzLlxuICAgKi9cbiAgcmVhZG9ubHkgYnVja2V0QXJuUGFyYW1OYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYXJhbWV0ZXIgbmFtZSB0byB1c2Ugd2hlbiBzdG9yaW5nIHRoZSBDbG91ZEZyb250IERpc3RyaWJ1dGlvbiBEb21haW4gTmFtZS5cbiAgICovXG4gIHJlYWRvbmx5IGRpc3RyaWJ1dGlvbkRvbWFpblBhcmFtTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogUGFyYW1ldGVyIG5hbWUgdG8gdXNlIHdoZW4gc3RvcmluZyB0aGUgQ2xvdWRGcm9udCBEaXN0cmlidXRpb24gSUQuXG4gICAqL1xuICByZWFkb25seSBkaXN0cmlidXRpb25JRFBhcmFtTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogUHJvcHMgdG8gcGFzcyB0byB0aGUgcHJpdmF0ZSBTMyBidWNrZXQuXG4gICAqL1xuICByZWFkb25seSBwcml2YXRlQnVja2V0UHJvcHM/OiBQcml2YXRlQnVja2V0UHJvcHM7XG59XG5cbmV4cG9ydCBjbGFzcyBTdGF0aWNIb3N0aW5nIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIEZ1bGwgZG9tYWluIG5hbWUgdXNlZCBhcyBiYXNpcyBmb3IgaG9zdGluZy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBmdWxsRG9tYWluOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFN0YXRpY0hvc3RpbmdQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgKlxuICAgICAqIEluaXRpYWwgU2V0dXBcbiAgICAgKlxuICAgICAqIFNldCBzb21lIGRlZmF1bHRzLCBidWlsZCBkb21haW4gaW5mb3JtYXRpb24uXG4gICAgICpcbiAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgICBjb25zdCB7XG4gICAgICBidWNrZXRBcm5QYXJhbU5hbWUsXG4gICAgICBkaXN0cmlidXRpb25Eb21haW5QYXJhbU5hbWUsXG4gICAgICBkaXN0cmlidXRpb25JRFBhcmFtTmFtZSxcbiAgICAgIHN0YXRpY0RvbWFpblByb3BzLFxuICAgICAgcHJpdmF0ZUJ1Y2tldFByb3BzLFxuICAgIH0gPSB7XG4gICAgICBidWNrZXRBcm5QYXJhbU5hbWU6IFwiL1NUQVRJQ19XRUJTSVRFL0JVQ0tFVF9BUk5cIixcbiAgICAgIGRpc3RyaWJ1dGlvbkRvbWFpblBhcmFtTmFtZTogXCIvU1RBVElDX1dFQlNJVEUvRElTVFJJQlVUSU9OX0RPTUFJTlwiLFxuICAgICAgZGlzdHJpYnV0aW9uSURQYXJhbU5hbWU6IFwiL1NUQVRJQ19XRUJTSVRFL0RJU1RSSUJVVElPTl9JRFwiLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcblxuICAgIGNvbnN0IHsgYmFzZURvbWFpbiwgaG9zdGVkWm9uZUF0dHJpYnV0ZXMgfSA9IHN0YXRpY0RvbWFpblByb3BzID8/IHt9O1xuXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAqXG4gICAgICogUFJJVkFURSBCVUNLRVRcbiAgICAgKlxuICAgICAqIEEgYnVja2V0IHRvIHN0b3JlIHRoZSBmaWxlcyB3aXRoaW4uXG4gICAgICogU2F2ZSBBUk4gZm9yIGxhdGVyIGRlcGxveXMuXG4gICAgICpcbiAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgICBjb25zdCBidWNrZXQgPSBuZXcgUHJpdmF0ZUJ1Y2tldChcbiAgICAgIHRoaXMsXG4gICAgICBcInN0YXRpYy1ob3N0aW5nLWJ1Y2tldFwiLFxuICAgICAgcHJpdmF0ZUJ1Y2tldFByb3BzLFxuICAgICk7XG5cbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICpcbiAgICAgKiBETlMgJiBXaWxkY2FyZCBDZXJ0aWZpY2F0ZVxuICAgICAqXG4gICAgICogSWYgYSB6b25lIElkIGFzIHBhc3NlZCBpbiwgZmluZCB0aGUgaG9zdGVkIHpvbmUgYW5kIGNyZWF0ZSBhIHdpbGRjYXJkXG4gICAgICogY2VydGlmaWNhdGUgZm9yIHRoZSBkb21haW4uXG4gICAgICpcbiAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgICBsZXQgem9uZTogSUhvc3RlZFpvbmUgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGNlcnRpZmljYXRlOiBDZXJ0aWZpY2F0ZSB8IHVuZGVmaW5lZDtcblxuICAgIGlmIChob3N0ZWRab25lQXR0cmlidXRlcyAmJiBiYXNlRG9tYWluKSB7XG4gICAgICB6b25lID0gSG9zdGVkWm9uZS5mcm9tSG9zdGVkWm9uZUF0dHJpYnV0ZXMoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIFwiem9uZVwiLFxuICAgICAgICBob3N0ZWRab25lQXR0cmlidXRlcyxcbiAgICAgICk7XG4gICAgICBjZXJ0aWZpY2F0ZSA9IG5ldyBDZXJ0aWZpY2F0ZSh0aGlzLCBcIndpbGRjYXJkLWNlcnRpZmljYXRlXCIsIHtcbiAgICAgICAgZG9tYWluTmFtZTogYCouJHtiYXNlRG9tYWlufWAsXG4gICAgICAgIHN1YmplY3RBbHRlcm5hdGl2ZU5hbWVzOiBbYmFzZURvbWFpbl0sXG4gICAgICAgIHZhbGlkYXRpb246IENlcnRpZmljYXRlVmFsaWRhdGlvbi5mcm9tRG5zTXVsdGlab25lKHtcbiAgICAgICAgICBbYCouJHtiYXNlRG9tYWlufWBdOiB6b25lLFxuICAgICAgICAgIFtiYXNlRG9tYWluXTogem9uZSxcbiAgICAgICAgfSksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICpcbiAgICAgKiBMQU1CREFARURHRSBGVU5DVElPTlxuICAgICAqXG4gICAgICogVGhpcyBoYW5kbGVzIHJld3JpdGluZyB0aGUgcGF0aCBmcm9tIGRvbWFpbiBuYW1lLlxuICAgICAqXG4gICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgY29uc3QgaGFuZGxlciA9IG5ldyBOb2RlanNGdW5jdGlvbih0aGlzLCBcInZpZXdlci1yZXF1ZXN0LWhhbmRsZXJcIiwge1xuICAgICAgbWVtb3J5U2l6ZTogMTI4LFxuICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMjRfWCxcbiAgICAgIGxvZ0dyb3VwOiBuZXcgTG9nR3JvdXAodGhpcywgXCJ2aWV3ZXItcmVxdWVzdC1oYW5kbGVyLWxvZy1ncm91cFwiLCB7XG4gICAgICAgIHJldGVudGlvbjogUmV0ZW50aW9uRGF5cy5PTkVfTU9OVEgsXG4gICAgICB9KSxcbiAgICB9KTtcblxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgKlxuICAgICAqICBDTE9VREZST05UIENPTkZJR1xuICAgICAqXG4gICAgICogIFNldHVwIGEgQ2xvdWRGcm9udCBEaXN0cmlidXRpb24gZm9yIHRoZSBidWNrZXQuXG4gICAgICpcbiAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgICBjb25zdCBjYWNoZVBvbGljeSA9IG5ldyBDYWNoZVBvbGljeSh0aGlzLCBcImNsb3VkZnJvbnQtcG9saWN5XCIsIHtcbiAgICAgIGNvbW1lbnQ6IFwiUmVsYXRpdmVseSBjb25zZXJ2YXRpdmUgVFRMIHBvbGljeS5cIixcbiAgICAgIG1heFR0bDogRHVyYXRpb24uc2Vjb25kcygzMDApLFxuICAgICAgbWluVHRsOiBEdXJhdGlvbi5zZWNvbmRzKDApLFxuICAgICAgZGVmYXVsdFR0bDogRHVyYXRpb24uc2Vjb25kcyg2MCksXG4gICAgICBoZWFkZXJCZWhhdmlvcjogQ2FjaGVIZWFkZXJCZWhhdmlvci5ub25lKCksXG4gICAgICBxdWVyeVN0cmluZ0JlaGF2aW9yOiBDYWNoZVF1ZXJ5U3RyaW5nQmVoYXZpb3Iubm9uZSgpLFxuICAgICAgY29va2llQmVoYXZpb3I6IENhY2hlQ29va2llQmVoYXZpb3Iubm9uZSgpLFxuICAgICAgZW5hYmxlQWNjZXB0RW5jb2RpbmdHemlwOiB0cnVlLFxuICAgICAgZW5hYmxlQWNjZXB0RW5jb2RpbmdCcm90bGk6IHRydWUsXG4gICAgfSk7XG5cbiAgICBjb25zdCBvYWMgPSBuZXcgUzNPcmlnaW5BY2Nlc3NDb250cm9sKHRoaXMsIFwiTXlPQUNcIiwge1xuICAgICAgc2lnbmluZzogU2lnbmluZy5TSUdWNF9OT19PVkVSUklERSxcbiAgICB9KTtcbiAgICBjb25zdCBvcmlnaW4gPSBTM0J1Y2tldE9yaWdpbi53aXRoT3JpZ2luQWNjZXNzQ29udHJvbChidWNrZXQsIHtcbiAgICAgIG9yaWdpbkFjY2Vzc0NvbnRyb2w6IG9hYyxcbiAgICAgIG9yaWdpbkFjY2Vzc0xldmVsczogW0FjY2Vzc0xldmVsLlJFQURdLFxuICAgIH0pO1xuXG4gICAgY29uc3QgZGlzdHJpYnV0aW9uID0gbmV3IERpc3RyaWJ1dGlvbih0aGlzLCBcImNsb3VkZnJvbnQtZGlzdHJpYnV0aW9uXCIsIHtcbiAgICAgIGNvbW1lbnQ6IGBEaXN0cmlidXRpb24gZm9yICR7cHJvcHMuZGVzY3JpcHRpb24gPz8gaWR9YCxcblxuICAgICAgLyoqXG4gICAgICAgKiBPbmx5IGlmIGRvbWFpbiB3YXMgc3VwcGxpZWRcbiAgICAgICAqL1xuICAgICAgLi4uKGNlcnRpZmljYXRlICYmIGJhc2VEb21haW5cbiAgICAgICAgPyB7XG4gICAgICAgICAgICBjZXJ0aWZpY2F0ZSxcbiAgICAgICAgICAgIGRvbWFpbk5hbWVzOiBbYmFzZURvbWFpbiwgYCouJHtiYXNlRG9tYWlufWBdLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB7fSksXG5cbiAgICAgIGRlZmF1bHRCZWhhdmlvcjoge1xuICAgICAgICBvcmlnaW4sXG4gICAgICAgIHZpZXdlclByb3RvY29sUG9saWN5OiBWaWV3ZXJQcm90b2NvbFBvbGljeS5SRURJUkVDVF9UT19IVFRQUyxcbiAgICAgICAgY2FjaGVQb2xpY3ksXG4gICAgICAgIGFsbG93ZWRNZXRob2RzOiBBbGxvd2VkTWV0aG9kcy5BTExPV19HRVRfSEVBRF9PUFRJT05TLFxuICAgICAgICBlZGdlTGFtYmRhczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uVmVyc2lvbjogaGFuZGxlci5jdXJyZW50VmVyc2lvbixcbiAgICAgICAgICAgIGV2ZW50VHlwZTogTGFtYmRhRWRnZUV2ZW50VHlwZS5WSUVXRVJfUkVRVUVTVCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICAgIGRlZmF1bHRSb290T2JqZWN0OiBcImluZGV4Lmh0bWxcIixcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFdlIGZpbmFsbHkgaGF2ZSBlbm91Z2ggaW5mb3JtYXRpb24gdG8gc2V0IHRoZSBmdWxsIGRvbWFpbi5cbiAgICAgKi9cbiAgICB0aGlzLmZ1bGxEb21haW4gPVxuICAgICAgY2VydGlmaWNhdGUgJiYgYmFzZURvbWFpbiA/IGJhc2VEb21haW4gOiBkaXN0cmlidXRpb24uZG9tYWluTmFtZTtcblxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgKlxuICAgICAqICBETlMgRU5UUllcbiAgICAgKlxuICAgICAqIExpbmsgY2xvdWRmcm9udCB0byBib3RoIHRoZSByb290IGZ1bGxkb21haW4gYW5kIGFsbCBwb3NzaWJsZSBzdWJkb21haW5zLlxuICAgICAqXG4gICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgaWYgKHpvbmUpIHtcbiAgICAgIG5ldyBBUmVjb3JkKHRoaXMsIFwicm9vdC1kbnMtZW50cnlcIiwge1xuICAgICAgICB6b25lLFxuICAgICAgICByZWNvcmROYW1lOiBiYXNlRG9tYWluID8gYmFzZURvbWFpbiA6IFwiXCIsXG4gICAgICAgIHRhcmdldDogUmVjb3JkVGFyZ2V0LmZyb21BbGlhcyhuZXcgQ2xvdWRGcm9udFRhcmdldChkaXN0cmlidXRpb24pKSxcbiAgICAgIH0pO1xuXG4gICAgICBuZXcgQVJlY29yZCh0aGlzLCBcIndjLWRucy1lbnRyeVwiLCB7XG4gICAgICAgIHpvbmUsXG4gICAgICAgIHJlY29yZE5hbWU6IGJhc2VEb21haW4gPyBgKi4ke2Jhc2VEb21haW59YCA6IFwiKlwiLFxuICAgICAgICB0YXJnZXQ6IFJlY29yZFRhcmdldC5mcm9tQWxpYXMobmV3IENsb3VkRnJvbnRUYXJnZXQoZGlzdHJpYnV0aW9uKSksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICpcbiAgICAgKiBFWFBPUlRTXG4gICAgICpcbiAgICAgKiBVc2VkIGJ5IGNvbnRlbnQgdXBsb2FkZXIgbGF0ZXIuXG4gICAgICpcbiAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgICBuZXcgU3RyaW5nUGFyYW1ldGVyKHRoaXMsIFwiZGlzdC1kb21haW5cIiwge1xuICAgICAgZGVzY3JpcHRpb246IGBHRU5FUkFURUQgRE8gTk9UIENIQU5HRSAtIENsb3VkRnJvbnQgRGlzdHJpYnV0aW9uIERldGFpbHMgKCR7cHJvcHMuZGVzY3JpcHRpb24gPz8gaWR9KS5gLFxuICAgICAgcGFyYW1ldGVyTmFtZTogZGlzdHJpYnV0aW9uRG9tYWluUGFyYW1OYW1lLFxuICAgICAgc3RyaW5nVmFsdWU6IGRpc3RyaWJ1dGlvbi5kb21haW5OYW1lLFxuICAgIH0pO1xuXG4gICAgbmV3IFN0cmluZ1BhcmFtZXRlcih0aGlzLCBcImRpc3QtaWRcIiwge1xuICAgICAgZGVzY3JpcHRpb246IGBHRU5FUkFURUQgRE8gTk9UIENIQU5HRSAtIENsb3VkRnJvbnQgRGlzdHJpYnV0aW9uIERldGFpbHMgKCR7cHJvcHMuZGVzY3JpcHRpb24gPz8gaWR9KS5gLFxuICAgICAgcGFyYW1ldGVyTmFtZTogZGlzdHJpYnV0aW9uSURQYXJhbU5hbWUsXG4gICAgICBzdHJpbmdWYWx1ZTogZGlzdHJpYnV0aW9uLmRpc3RyaWJ1dGlvbklkLFxuICAgIH0pO1xuXG4gICAgbmV3IFN0cmluZ1BhcmFtZXRlcih0aGlzLCBcImJ1Y2tldC1hcm5cIiwge1xuICAgICAgZGVzY3JpcHRpb246IGBHRU5FUkFURUQgRE8gTk9UIENIQU5HRSAtIFMzIEJ1Y2tldCBBUk4gZm9yICgke3Byb3BzLmRlc2NyaXB0aW9uID8/IGlkfSkuYCxcbiAgICAgIHBhcmFtZXRlck5hbWU6IGJ1Y2tldEFyblBhcmFtTmFtZSxcbiAgICAgIHN0cmluZ1ZhbHVlOiBidWNrZXQuYnVja2V0QXJuLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { CloudFrontRequest, CloudFrontRequestEvent } from "aws-lambda";
|
|
2
|
-
/**
|
|
3
|
-
*
|
|
4
|
-
* Viewer Request Handler
|
|
5
|
-
*
|
|
6
|
-
* Handles requests at the CloudFront viewer request stage.
|
|
7
|
-
*
|
|
8
|
-
* - Logs the request
|
|
9
|
-
* - Adds default document if needed
|
|
10
|
-
* - Prepends folder with domain
|
|
11
|
-
*
|
|
12
|
-
* @param event CloudFrontRequestEvent
|
|
13
|
-
* @returns CloudFrontRequest
|
|
14
|
-
*/
|
|
15
|
-
export declare const handler: (event: CloudFrontRequestEvent) => Promise<CloudFrontRequest>;
|
|
16
|
-
/**
|
|
17
|
-
* This is a helper used in the main handler. It's split into it's own export
|
|
18
|
-
* to make testing easier.
|
|
19
|
-
*
|
|
20
|
-
* Adds default document to request URI if needed.
|
|
21
|
-
*
|
|
22
|
-
* @param request
|
|
23
|
-
* @returns
|
|
24
|
-
*/
|
|
25
|
-
export declare const addDefaultDocument: (request: CloudFrontRequest) => CloudFrontRequest;
|
|
26
|
-
/**
|
|
27
|
-
* This is a helper used in the main handler. It's split into it's own export
|
|
28
|
-
* to make testing easier.
|
|
29
|
-
*
|
|
30
|
-
* Adds domain folder to request URI.
|
|
31
|
-
*
|
|
32
|
-
* @param request
|
|
33
|
-
* @returns
|
|
34
|
-
*/
|
|
35
|
-
export declare const addDomainFolder: (request: CloudFrontRequest) => CloudFrontRequest;
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.addDomainFolder = exports.addDefaultDocument = exports.handler = void 0;
|
|
4
|
-
/**
|
|
5
|
-
*
|
|
6
|
-
* Viewer Request Handler
|
|
7
|
-
*
|
|
8
|
-
* Handles requests at the CloudFront viewer request stage.
|
|
9
|
-
*
|
|
10
|
-
* - Logs the request
|
|
11
|
-
* - Adds default document if needed
|
|
12
|
-
* - Prepends folder with domain
|
|
13
|
-
*
|
|
14
|
-
* @param event CloudFrontRequestEvent
|
|
15
|
-
* @returns CloudFrontRequest
|
|
16
|
-
*/
|
|
17
|
-
const handler = async (event) => {
|
|
18
|
-
// log request
|
|
19
|
-
if (process.env.JEST_WORKER_ID === undefined) {
|
|
20
|
-
console.log("Request Event: ", JSON.stringify(event, null, 2));
|
|
21
|
-
}
|
|
22
|
-
let request = event.Records[0].cf.request;
|
|
23
|
-
// add index if needed
|
|
24
|
-
request = (0, exports.addDefaultDocument)(request);
|
|
25
|
-
// prepend folder with domain
|
|
26
|
-
request = (0, exports.addDomainFolder)(request);
|
|
27
|
-
if (process.env.JEST_WORKER_ID === undefined) {
|
|
28
|
-
console.log("Resulting Request: ", JSON.stringify(request, null, 2));
|
|
29
|
-
}
|
|
30
|
-
// return body
|
|
31
|
-
return request;
|
|
32
|
-
};
|
|
33
|
-
exports.handler = handler;
|
|
34
|
-
/**
|
|
35
|
-
* This is a helper used in the main handler. It's split into it's own export
|
|
36
|
-
* to make testing easier.
|
|
37
|
-
*
|
|
38
|
-
* Adds default document to request URI if needed.
|
|
39
|
-
*
|
|
40
|
-
* @param request
|
|
41
|
-
* @returns
|
|
42
|
-
*/
|
|
43
|
-
const addDefaultDocument = (request) => {
|
|
44
|
-
if (request.uri !== "/") {
|
|
45
|
-
let paths = request.uri.split("/");
|
|
46
|
-
let lastPath = paths[paths.length - 1];
|
|
47
|
-
let isFile = lastPath.split(".").length > 1;
|
|
48
|
-
if (!isFile) {
|
|
49
|
-
if (lastPath != "") {
|
|
50
|
-
request.uri += "/";
|
|
51
|
-
}
|
|
52
|
-
request.uri += "index.html";
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
else {
|
|
56
|
-
request.uri = "/index.html";
|
|
57
|
-
}
|
|
58
|
-
return request;
|
|
59
|
-
};
|
|
60
|
-
exports.addDefaultDocument = addDefaultDocument;
|
|
61
|
-
/**
|
|
62
|
-
* This is a helper used in the main handler. It's split into it's own export
|
|
63
|
-
* to make testing easier.
|
|
64
|
-
*
|
|
65
|
-
* Adds domain folder to request URI.
|
|
66
|
-
*
|
|
67
|
-
* @param request
|
|
68
|
-
* @returns
|
|
69
|
-
*/
|
|
70
|
-
const addDomainFolder = (request) => {
|
|
71
|
-
const hostHeader = request.headers.host[0].value;
|
|
72
|
-
request.uri = `/${hostHeader}${request.uri}`;
|
|
73
|
-
return request;
|
|
74
|
-
};
|
|
75
|
-
exports.addDomainFolder = addDomainFolder;
|
|
76
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGljLWhvc3Rpbmcudmlld2VyLXJlcXVlc3QtaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdGF0aWMtaG9zdGluZy9zdGF0aWMtaG9zdGluZy52aWV3ZXItcmVxdWVzdC1oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBOzs7Ozs7Ozs7Ozs7R0FZRztBQUNJLE1BQU0sT0FBTyxHQUFHLEtBQUssRUFDMUIsS0FBNkIsRUFDRCxFQUFFO0lBQzlCLGNBQWM7SUFDZCxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzdDLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVELElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQztJQUUxQyxzQkFBc0I7SUFDdEIsT0FBTyxHQUFHLElBQUEsMEJBQWtCLEVBQUMsT0FBTyxDQUFDLENBQUM7SUFFdEMsNkJBQTZCO0lBQzdCLE9BQU8sR0FBRyxJQUFBLHVCQUFlLEVBQUMsT0FBTyxDQUFDLENBQUM7SUFFbkMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUM3QyxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxjQUFjO0lBQ2QsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQyxDQUFDO0FBdEJXLFFBQUEsT0FBTyxXQXNCbEI7QUFFRjs7Ozs7Ozs7R0FRRztBQUNJLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxPQUEwQixFQUFFLEVBQUU7SUFDL0QsSUFBSSxPQUFPLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25DLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUU1QyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixJQUFJLFFBQVEsSUFBSSxFQUFFLEVBQUUsQ0FBQztnQkFDbkIsT0FBTyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUM7WUFDckIsQ0FBQztZQUNELE9BQU8sQ0FBQyxHQUFHLElBQUksWUFBWSxDQUFDO1FBQzlCLENBQUM7SUFDSCxDQUFDO1NBQU0sQ0FBQztRQUNOLE9BQU8sQ0FBQyxHQUFHLEdBQUcsYUFBYSxDQUFDO0lBQzlCLENBQUM7SUFFRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDLENBQUM7QUFqQlcsUUFBQSxrQkFBa0Isc0JBaUI3QjtBQUVGOzs7Ozs7OztHQVFHO0FBQ0ksTUFBTSxlQUFlLEdBQUcsQ0FBQyxPQUEwQixFQUFFLEVBQUU7SUFDNUQsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ2pELE9BQU8sQ0FBQyxHQUFHLEdBQUcsSUFBSSxVQUFVLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQzdDLE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMsQ0FBQztBQUpXLFFBQUEsZUFBZSxtQkFJMUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDbG91ZEZyb250UmVxdWVzdCwgQ2xvdWRGcm9udFJlcXVlc3RFdmVudCB9IGZyb20gXCJhd3MtbGFtYmRhXCI7XG5cbi8qKlxuICpcbiAqIFZpZXdlciBSZXF1ZXN0IEhhbmRsZXJcbiAqXG4gKiBIYW5kbGVzIHJlcXVlc3RzIGF0IHRoZSBDbG91ZEZyb250IHZpZXdlciByZXF1ZXN0IHN0YWdlLlxuICpcbiAqIC0gTG9ncyB0aGUgcmVxdWVzdFxuICogLSBBZGRzIGRlZmF1bHQgZG9jdW1lbnQgaWYgbmVlZGVkXG4gKiAtIFByZXBlbmRzIGZvbGRlciB3aXRoIGRvbWFpblxuICpcbiAqIEBwYXJhbSBldmVudCBDbG91ZEZyb250UmVxdWVzdEV2ZW50XG4gKiBAcmV0dXJucyBDbG91ZEZyb250UmVxdWVzdFxuICovXG5leHBvcnQgY29uc3QgaGFuZGxlciA9IGFzeW5jIChcbiAgZXZlbnQ6IENsb3VkRnJvbnRSZXF1ZXN0RXZlbnQsXG4pOiBQcm9taXNlPENsb3VkRnJvbnRSZXF1ZXN0PiA9PiB7XG4gIC8vIGxvZyByZXF1ZXN0XG4gIGlmIChwcm9jZXNzLmVudi5KRVNUX1dPUktFUl9JRCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc29sZS5sb2coXCJSZXF1ZXN0IEV2ZW50OiBcIiwgSlNPTi5zdHJpbmdpZnkoZXZlbnQsIG51bGwsIDIpKTtcbiAgfVxuXG4gIGxldCByZXF1ZXN0ID0gZXZlbnQuUmVjb3Jkc1swXS5jZi5yZXF1ZXN0O1xuXG4gIC8vIGFkZCBpbmRleCBpZiBuZWVkZWRcbiAgcmVxdWVzdCA9IGFkZERlZmF1bHREb2N1bWVudChyZXF1ZXN0KTtcblxuICAvLyBwcmVwZW5kIGZvbGRlciB3aXRoIGRvbWFpblxuICByZXF1ZXN0ID0gYWRkRG9tYWluRm9sZGVyKHJlcXVlc3QpO1xuXG4gIGlmIChwcm9jZXNzLmVudi5KRVNUX1dPUktFUl9JRCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc29sZS5sb2coXCJSZXN1bHRpbmcgUmVxdWVzdDogXCIsIEpTT04uc3RyaW5naWZ5KHJlcXVlc3QsIG51bGwsIDIpKTtcbiAgfVxuXG4gIC8vIHJldHVybiBib2R5XG4gIHJldHVybiByZXF1ZXN0O1xufTtcblxuLyoqXG4gKiBUaGlzIGlzIGEgaGVscGVyIHVzZWQgaW4gdGhlIG1haW4gaGFuZGxlci4gSXQncyBzcGxpdCBpbnRvIGl0J3Mgb3duIGV4cG9ydFxuICogdG8gbWFrZSB0ZXN0aW5nIGVhc2llci5cbiAqXG4gKiBBZGRzIGRlZmF1bHQgZG9jdW1lbnQgdG8gcmVxdWVzdCBVUkkgaWYgbmVlZGVkLlxuICpcbiAqIEBwYXJhbSByZXF1ZXN0XG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgYWRkRGVmYXVsdERvY3VtZW50ID0gKHJlcXVlc3Q6IENsb3VkRnJvbnRSZXF1ZXN0KSA9PiB7XG4gIGlmIChyZXF1ZXN0LnVyaSAhPT0gXCIvXCIpIHtcbiAgICBsZXQgcGF0aHMgPSByZXF1ZXN0LnVyaS5zcGxpdChcIi9cIik7XG4gICAgbGV0IGxhc3RQYXRoID0gcGF0aHNbcGF0aHMubGVuZ3RoIC0gMV07XG4gICAgbGV0IGlzRmlsZSA9IGxhc3RQYXRoLnNwbGl0KFwiLlwiKS5sZW5ndGggPiAxO1xuXG4gICAgaWYgKCFpc0ZpbGUpIHtcbiAgICAgIGlmIChsYXN0UGF0aCAhPSBcIlwiKSB7XG4gICAgICAgIHJlcXVlc3QudXJpICs9IFwiL1wiO1xuICAgICAgfVxuICAgICAgcmVxdWVzdC51cmkgKz0gXCJpbmRleC5odG1sXCI7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJlcXVlc3QudXJpID0gXCIvaW5kZXguaHRtbFwiO1xuICB9XG5cbiAgcmV0dXJuIHJlcXVlc3Q7XG59O1xuXG4vKipcbiAqIFRoaXMgaXMgYSBoZWxwZXIgdXNlZCBpbiB0aGUgbWFpbiBoYW5kbGVyLiBJdCdzIHNwbGl0IGludG8gaXQncyBvd24gZXhwb3J0XG4gKiB0byBtYWtlIHRlc3RpbmcgZWFzaWVyLlxuICpcbiAqIEFkZHMgZG9tYWluIGZvbGRlciB0byByZXF1ZXN0IFVSSS5cbiAqXG4gKiBAcGFyYW0gcmVxdWVzdFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZERvbWFpbkZvbGRlciA9IChyZXF1ZXN0OiBDbG91ZEZyb250UmVxdWVzdCkgPT4ge1xuICBjb25zdCBob3N0SGVhZGVyID0gcmVxdWVzdC5oZWFkZXJzLmhvc3RbMF0udmFsdWU7XG4gIHJlcXVlc3QudXJpID0gYC8ke2hvc3RIZWFkZXJ9JHtyZXF1ZXN0LnVyaX1gO1xuICByZXR1cm4gcmVxdWVzdDtcbn07XG4iXX0=
|