@fjall/components-infrastructure 0.80.4 → 0.81.2

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.
Files changed (40) hide show
  1. package/dist/lib/__tests__/setup.js +1 -78
  2. package/dist/lib/resources/aws/compute/ecsFreeTier.d.ts +2 -1
  3. package/dist/lib/resources/aws/compute/ecsFreeTier.js +1 -352
  4. package/dist/lib/resources/aws/compute/ecsSpot.d.ts +2 -1
  5. package/dist/lib/resources/aws/compute/ecsSpot.js +1 -332
  6. package/dist/lib/resources/aws/compute/utilities/capacityProviderDrainWaiter.js +1 -180
  7. package/dist/lib/resources/aws/utilities/cfnOutput.js +1 -13
  8. package/package.json +3 -3
  9. package/dist/lib/patterns/aws/cdn.d.ts +0 -133
  10. package/dist/lib/patterns/aws/cdn.js +0 -216
  11. package/dist/lib/patterns/aws/dynamodb.d.ts +0 -66
  12. package/dist/lib/patterns/aws/dynamodb.js +0 -106
  13. package/dist/lib/patterns/aws/loadBalancer.d.ts +0 -163
  14. package/dist/lib/patterns/aws/loadBalancer.js +0 -278
  15. package/dist/lib/patterns/aws/queue.d.ts +0 -61
  16. package/dist/lib/patterns/aws/queue.js +0 -103
  17. package/dist/lib/resources/aws/cdn/cloudFront.d.ts +0 -65
  18. package/dist/lib/resources/aws/cdn/cloudFront.js +0 -135
  19. package/dist/lib/resources/aws/cdn/index.d.ts +0 -1
  20. package/dist/lib/resources/aws/cdn/index.js +0 -18
  21. package/dist/lib/resources/aws/compute/capacityProviderDrainWaiter.d.ts +0 -20
  22. package/dist/lib/resources/aws/compute/capacityProviderDrainWaiter.js +0 -180
  23. package/dist/lib/resources/aws/database/dynamodb.d.ts +0 -70
  24. package/dist/lib/resources/aws/database/dynamodb.js +0 -170
  25. package/dist/lib/resources/aws/database/rdsDeletionWaiter.d.ts +0 -33
  26. package/dist/lib/resources/aws/database/rdsDeletionWaiter.js +0 -74
  27. package/dist/lib/resources/aws/messaging/index.d.ts +0 -1
  28. package/dist/lib/resources/aws/messaging/index.js +0 -18
  29. package/dist/lib/resources/aws/messaging/sqs.d.ts +0 -65
  30. package/dist/lib/resources/aws/messaging/sqs.js +0 -195
  31. package/dist/lib/resources/aws/networking/vpcEndpoint.d.ts +0 -20
  32. package/dist/lib/resources/aws/networking/vpcEndpoint.js +0 -59
  33. package/dist/lib/resources/aws/networking/vpcEndpoints.d.ts +0 -71
  34. package/dist/lib/resources/aws/networking/vpcEndpoints.js +0 -125
  35. package/dist/lib/resources/aws/utilities/cfnOutput.test.d.ts +0 -1
  36. package/dist/lib/resources/aws/utilities/cfnOutput.test.js +0 -102
  37. package/dist/lib/utils/sanitizeCfnKey.d.ts +0 -5
  38. package/dist/lib/utils/sanitizeCfnKey.js +0 -11
  39. package/dist/lib/utils/tagResource.d.ts +0 -24
  40. package/dist/lib/utils/tagResource.js +0 -30
@@ -1,59 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.VpcEndpointStack = exports.VpcEndpoint = void 0;
4
- const constructs_1 = require("constructs");
5
- const aws_ec2_1 = require("aws-cdk-lib/aws-ec2");
6
- const securityGroup_1 = require("../iam/securityGroup");
7
- const aws_cdk_lib_1 = require("aws-cdk-lib");
8
- const vpc_1 = require("./vpc");
9
- class VpcEndpoint extends constructs_1.Construct {
10
- constructor(scope, id, props) {
11
- super(scope, id);
12
- this.securityGroups = [];
13
- this.addVpc(props.vpcId);
14
- this.addSecurityGroup(props.service);
15
- this.addEntrypoint(props);
16
- }
17
- addVpc(vpcId) {
18
- this.vpc = vpc_1.Vpc.fromLookup(this, `Vpc`, {
19
- vpcId: vpcId
20
- });
21
- }
22
- addSecurityGroup(service) {
23
- const securityGroup = new securityGroup_1.SecurityGroup(this, `securityGroup`, {
24
- vpc: this.vpc,
25
- description: `Security group for the ${this.vpc.vpcId} VPC endpoint`
26
- });
27
- if (service === "com.amazonaws.us-east-1.datasync") {
28
- const ports = [80, 443, 22, { fromPort: 1024, toPort: 1064 }];
29
- ports.forEach((port) => {
30
- if (typeof port === "number") {
31
- securityGroup.addIngressRule(aws_ec2_1.Peer.anyIpv4(), aws_ec2_1.Port.tcp(port), `Allow traffic on port ${port} from the VPC endpoint`);
32
- }
33
- else {
34
- securityGroup.addIngressRule(aws_ec2_1.Peer.anyIpv4(), aws_ec2_1.Port.tcpRange(port.fromPort, port.toPort), `Allow traffic on port range ${port.fromPort}-${port.toPort} from the VPC endpoint`);
35
- }
36
- });
37
- }
38
- this.securityGroups.push(securityGroup);
39
- }
40
- addEntrypoint(props) {
41
- new aws_ec2_1.InterfaceVpcEndpoint(this, "VpcEndpoint", {
42
- vpc: this.vpc,
43
- service: new aws_ec2_1.InterfaceVpcEndpointService(props.service),
44
- lookupSupportedAzs: true,
45
- securityGroups: this.securityGroups
46
- });
47
- }
48
- }
49
- exports.VpcEndpoint = VpcEndpoint;
50
- class VpcEndpointStack extends aws_cdk_lib_1.Stack {
51
- constructor(scope, id, props) {
52
- super(scope, id, props);
53
- new VpcEndpoint(this, "VpcEndpoint", {
54
- ...props
55
- });
56
- }
57
- }
58
- exports.VpcEndpointStack = VpcEndpointStack;
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnBjRW5kcG9pbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy9uZXR3b3JraW5nL3ZwY0VuZHBvaW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJDQUF1QztBQUN2QyxpREFPNkI7QUFDN0Isd0RBQXFEO0FBQ3JELDZDQUFxRDtBQUVyRCwrQkFBNEI7QUFRNUIsTUFBYSxXQUFZLFNBQVEsc0JBQVM7SUFJeEMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF1QjtRQUMvRCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBSFgsbUJBQWMsR0FBcUIsRUFBRSxDQUFDO1FBSzVDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQWE7UUFDbEIsSUFBSSxDQUFDLEdBQUcsR0FBRyxTQUFHLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7WUFDckMsS0FBSyxFQUFFLEtBQUs7U0FDYixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsT0FBZTtRQUM5QixNQUFNLGFBQWEsR0FBRyxJQUFJLDZCQUFhLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRTtZQUM3RCxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7WUFDYixXQUFXLEVBQUUsMEJBQTBCLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxlQUFlO1NBQ3JFLENBQUMsQ0FBQztRQUVILElBQUksT0FBTyxLQUFLLGtDQUFrQyxFQUFFLENBQUM7WUFDbkQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFFOUQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNyQixJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUM3QixhQUFhLENBQUMsY0FBYyxDQUMxQixjQUFJLENBQUMsT0FBTyxFQUFFLEVBQ2QsY0FBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFDZCx5QkFBeUIsSUFBSSx3QkFBd0IsQ0FDdEQsQ0FBQztnQkFDSixDQUFDO3FCQUFNLENBQUM7b0JBQ04sYUFBYSxDQUFDLGNBQWMsQ0FDMUIsY0FBSSxDQUFDLE9BQU8sRUFBRSxFQUNkLGNBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQ3pDLCtCQUErQixJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLHdCQUF3QixDQUNwRixDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQXVCO1FBQ25DLElBQUksOEJBQW9CLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRTtZQUM1QyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7WUFDYixPQUFPLEVBQUUsSUFBSSxxQ0FBMkIsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO1lBQ3ZELGtCQUFrQixFQUFFLElBQUk7WUFDeEIsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjO1NBQ3BDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQXRERCxrQ0FzREM7QUFFRCxNQUFhLGdCQUFpQixTQUFRLG1CQUFLO0lBQ3pDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBdUI7UUFDL0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRTtZQUNuQyxHQUFHLEtBQUs7U0FDVCxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFSRCw0Q0FRQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQge1xuICBJbnRlcmZhY2VWcGNFbmRwb2ludCxcbiAgSW50ZXJmYWNlVnBjRW5kcG9pbnRTZXJ2aWNlLFxuICB0eXBlIElTZWN1cml0eUdyb3VwLFxuICB0eXBlIElWcGMsXG4gIFBlZXIsXG4gIFBvcnRcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcbmltcG9ydCB7IFNlY3VyaXR5R3JvdXAgfSBmcm9tIFwiLi4vaWFtL3NlY3VyaXR5R3JvdXBcIjtcbmltcG9ydCB7IFN0YWNrLCB0eXBlIFN0YWNrUHJvcHMgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IHR5cGUgS2V5VmFsdWUgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB7IFZwYyB9IGZyb20gXCIuL3ZwY1wiO1xuXG5pbnRlcmZhY2UgVnBjRW5kcG9pbnRQcm9wcyBleHRlbmRzIFN0YWNrUHJvcHMge1xuICB2cGNJZDogc3RyaW5nO1xuICBzZXJ2aWNlOiBzdHJpbmc7XG4gIHRhZ3M6IEtleVZhbHVlO1xufVxuXG5leHBvcnQgY2xhc3MgVnBjRW5kcG9pbnQgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwcml2YXRlIHZwYzogSVZwYztcbiAgcHJpdmF0ZSBzZWN1cml0eUdyb3VwczogSVNlY3VyaXR5R3JvdXBbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBWcGNFbmRwb2ludFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMuYWRkVnBjKHByb3BzLnZwY0lkKTtcbiAgICB0aGlzLmFkZFNlY3VyaXR5R3JvdXAocHJvcHMuc2VydmljZSk7XG4gICAgdGhpcy5hZGRFbnRyeXBvaW50KHByb3BzKTtcbiAgfVxuXG4gIGFkZFZwYyh2cGNJZDogc3RyaW5nKSB7XG4gICAgdGhpcy52cGMgPSBWcGMuZnJvbUxvb2t1cCh0aGlzLCBgVnBjYCwge1xuICAgICAgdnBjSWQ6IHZwY0lkXG4gICAgfSk7XG4gIH1cblxuICBhZGRTZWN1cml0eUdyb3VwKHNlcnZpY2U6IHN0cmluZykge1xuICAgIGNvbnN0IHNlY3VyaXR5R3JvdXAgPSBuZXcgU2VjdXJpdHlHcm91cCh0aGlzLCBgc2VjdXJpdHlHcm91cGAsIHtcbiAgICAgIHZwYzogdGhpcy52cGMsXG4gICAgICBkZXNjcmlwdGlvbjogYFNlY3VyaXR5IGdyb3VwIGZvciB0aGUgJHt0aGlzLnZwYy52cGNJZH0gVlBDIGVuZHBvaW50YFxuICAgIH0pO1xuXG4gICAgaWYgKHNlcnZpY2UgPT09IFwiY29tLmFtYXpvbmF3cy51cy1lYXN0LTEuZGF0YXN5bmNcIikge1xuICAgICAgY29uc3QgcG9ydHMgPSBbODAsIDQ0MywgMjIsIHsgZnJvbVBvcnQ6IDEwMjQsIHRvUG9ydDogMTA2NCB9XTtcblxuICAgICAgcG9ydHMuZm9yRWFjaCgocG9ydCkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHBvcnQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICBzZWN1cml0eUdyb3VwLmFkZEluZ3Jlc3NSdWxlKFxuICAgICAgICAgICAgUGVlci5hbnlJcHY0KCksXG4gICAgICAgICAgICBQb3J0LnRjcChwb3J0KSxcbiAgICAgICAgICAgIGBBbGxvdyB0cmFmZmljIG9uIHBvcnQgJHtwb3J0fSBmcm9tIHRoZSBWUEMgZW5kcG9pbnRgXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZWN1cml0eUdyb3VwLmFkZEluZ3Jlc3NSdWxlKFxuICAgICAgICAgICAgUGVlci5hbnlJcHY0KCksXG4gICAgICAgICAgICBQb3J0LnRjcFJhbmdlKHBvcnQuZnJvbVBvcnQsIHBvcnQudG9Qb3J0KSxcbiAgICAgICAgICAgIGBBbGxvdyB0cmFmZmljIG9uIHBvcnQgcmFuZ2UgJHtwb3J0LmZyb21Qb3J0fS0ke3BvcnQudG9Qb3J0fSBmcm9tIHRoZSBWUEMgZW5kcG9pbnRgXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuc2VjdXJpdHlHcm91cHMucHVzaChzZWN1cml0eUdyb3VwKTtcbiAgfVxuXG4gIGFkZEVudHJ5cG9pbnQocHJvcHM6IFZwY0VuZHBvaW50UHJvcHMpIHtcbiAgICBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnQodGhpcywgXCJWcGNFbmRwb2ludFwiLCB7XG4gICAgICB2cGM6IHRoaXMudnBjLFxuICAgICAgc2VydmljZTogbmV3IEludGVyZmFjZVZwY0VuZHBvaW50U2VydmljZShwcm9wcy5zZXJ2aWNlKSxcbiAgICAgIGxvb2t1cFN1cHBvcnRlZEF6czogdHJ1ZSxcbiAgICAgIHNlY3VyaXR5R3JvdXBzOiB0aGlzLnNlY3VyaXR5R3JvdXBzXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFZwY0VuZHBvaW50U3RhY2sgZXh0ZW5kcyBTdGFjayB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBWcGNFbmRwb2ludFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICBuZXcgVnBjRW5kcG9pbnQodGhpcywgXCJWcGNFbmRwb2ludFwiLCB7XG4gICAgICAuLi5wcm9wc1xuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -1,71 +0,0 @@
1
- import { Construct } from "constructs";
2
- import { type IVpc, GatewayVpcEndpoint, InterfaceVpcEndpoint } from "aws-cdk-lib/aws-ec2";
3
- /**
4
- * Gateway VPC endpoint configuration for resource layer.
5
- */
6
- export interface VpcGatewayEndpointsConfig {
7
- /** Enable S3 Gateway endpoint. Default: true */
8
- s3?: boolean;
9
- /** Enable DynamoDB Gateway endpoint. Default: true */
10
- dynamodb?: boolean;
11
- }
12
- /**
13
- * Interface VPC endpoint configuration for resource layer.
14
- * Interface endpoints cost money (~$7-15/month each) but provide private connectivity.
15
- */
16
- export interface VpcInterfaceEndpointsConfig {
17
- /** ECR endpoints (dkr + api) for container image pulls. ~$15/month */
18
- ecr?: boolean;
19
- /** Secrets Manager endpoint for secret access. ~$7/month */
20
- secretsManager?: boolean;
21
- /** KMS endpoint for CMK operations. ~$7/month */
22
- kms?: boolean;
23
- /** CloudWatch Logs endpoint for log shipping. ~$7/month */
24
- cloudwatchLogs?: boolean;
25
- /** Systems Manager endpoint. ~$7/month */
26
- ssm?: boolean;
27
- /** STS endpoint for assume-role operations. ~$7/month */
28
- sts?: boolean;
29
- }
30
- /**
31
- * Props for creating VPC endpoints.
32
- */
33
- export interface VpcEndpointsProps {
34
- /** The VPC to create endpoints in. Required. */
35
- vpc: IVpc;
36
- /**
37
- * Gateway endpoints (FREE).
38
- * - Omit: enabled with defaults (s3: true, dynamodb: true)
39
- * - `{}`: enabled with defaults
40
- * - `{ s3: true, dynamodb: false }`: specific configuration
41
- * - `false`: explicitly disabled
42
- */
43
- gateway?: VpcGatewayEndpointsConfig | false;
44
- /**
45
- * Interface endpoints (cost money).
46
- * - Omit: disabled (default)
47
- * - `{}`: disabled (must specify which endpoints)
48
- * - `{ ecr: true, kms: true }`: specific endpoints
49
- * - `false`: explicitly disabled
50
- */
51
- interface?: VpcInterfaceEndpointsConfig | false;
52
- }
53
- /**
54
- * Creates VPC endpoints for AWS services.
55
- *
56
- * Gateway endpoints (S3, DynamoDB) are FREE and should always be enabled.
57
- * They route traffic directly to the service without going through NAT.
58
- *
59
- * Interface endpoints cost money but provide private connectivity to AWS services.
60
- * They're useful for:
61
- * - Security: Traffic stays within AWS network
62
- * - Cost: Avoid NAT Gateway data processing charges for high-volume services
63
- * - Latency: Direct path to service
64
- */
65
- export declare class VpcEndpoints extends Construct {
66
- readonly gatewayEndpoints: GatewayVpcEndpoint[];
67
- readonly interfaceEndpoints: InterfaceVpcEndpoint[];
68
- constructor(scope: Construct, id: string, props: VpcEndpointsProps);
69
- private addGatewayEndpoints;
70
- private addInterfaceEndpoints;
71
- }
@@ -1,125 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.VpcEndpoints = void 0;
4
- const constructs_1 = require("constructs");
5
- const aws_ec2_1 = require("aws-cdk-lib/aws-ec2");
6
- /**
7
- * Creates VPC endpoints for AWS services.
8
- *
9
- * Gateway endpoints (S3, DynamoDB) are FREE and should always be enabled.
10
- * They route traffic directly to the service without going through NAT.
11
- *
12
- * Interface endpoints cost money but provide private connectivity to AWS services.
13
- * They're useful for:
14
- * - Security: Traffic stays within AWS network
15
- * - Cost: Avoid NAT Gateway data processing charges for high-volume services
16
- * - Latency: Direct path to service
17
- */
18
- class VpcEndpoints extends constructs_1.Construct {
19
- constructor(scope, id, props) {
20
- super(scope, id);
21
- this.gatewayEndpoints = [];
22
- this.interfaceEndpoints = [];
23
- this.addGatewayEndpoints(props);
24
- this.addInterfaceEndpoints(props);
25
- }
26
- addGatewayEndpoints(props) {
27
- const gatewayConfig = props.gateway;
28
- if (gatewayConfig === false) {
29
- return;
30
- }
31
- const enableS3 = gatewayConfig?.s3 ?? true;
32
- const enableDynamodb = gatewayConfig?.dynamodb ?? true;
33
- if (enableS3) {
34
- const s3Endpoint = new aws_ec2_1.GatewayVpcEndpoint(this, "S3Endpoint", {
35
- vpc: props.vpc,
36
- service: aws_ec2_1.GatewayVpcEndpointAwsService.S3
37
- });
38
- this.gatewayEndpoints.push(s3Endpoint);
39
- }
40
- if (enableDynamodb) {
41
- const dynamoEndpoint = new aws_ec2_1.GatewayVpcEndpoint(this, "DynamoDBEndpoint", {
42
- vpc: props.vpc,
43
- service: aws_ec2_1.GatewayVpcEndpointAwsService.DYNAMODB
44
- });
45
- this.gatewayEndpoints.push(dynamoEndpoint);
46
- }
47
- }
48
- addInterfaceEndpoints(props) {
49
- const interfaceConfig = props.interface;
50
- if (interfaceConfig === false || interfaceConfig === undefined) {
51
- return;
52
- }
53
- if (interfaceConfig.ecr) {
54
- const ecrDockerEndpoint = new aws_ec2_1.InterfaceVpcEndpoint(this, "EcrDockerEndpoint", {
55
- vpc: props.vpc,
56
- service: aws_ec2_1.InterfaceVpcEndpointAwsService.ECR_DOCKER,
57
- privateDnsEnabled: true,
58
- subnets: { subnetType: aws_ec2_1.SubnetType.PRIVATE_WITH_EGRESS }
59
- });
60
- this.interfaceEndpoints.push(ecrDockerEndpoint);
61
- const ecrApiEndpoint = new aws_ec2_1.InterfaceVpcEndpoint(this, "EcrApiEndpoint", {
62
- vpc: props.vpc,
63
- service: aws_ec2_1.InterfaceVpcEndpointAwsService.ECR,
64
- privateDnsEnabled: true,
65
- subnets: { subnetType: aws_ec2_1.SubnetType.PRIVATE_WITH_EGRESS }
66
- });
67
- this.interfaceEndpoints.push(ecrApiEndpoint);
68
- }
69
- if (interfaceConfig.secretsManager) {
70
- const smEndpoint = new aws_ec2_1.InterfaceVpcEndpoint(this, "SecretsManagerEndpoint", {
71
- vpc: props.vpc,
72
- service: aws_ec2_1.InterfaceVpcEndpointAwsService.SECRETS_MANAGER,
73
- privateDnsEnabled: true,
74
- subnets: { subnetType: aws_ec2_1.SubnetType.PRIVATE_WITH_EGRESS }
75
- });
76
- this.interfaceEndpoints.push(smEndpoint);
77
- }
78
- if (interfaceConfig.kms) {
79
- const kmsEndpoint = new aws_ec2_1.InterfaceVpcEndpoint(this, "KmsEndpoint", {
80
- vpc: props.vpc,
81
- service: aws_ec2_1.InterfaceVpcEndpointAwsService.KMS,
82
- privateDnsEnabled: true,
83
- subnets: { subnetType: aws_ec2_1.SubnetType.PRIVATE_WITH_EGRESS }
84
- });
85
- this.interfaceEndpoints.push(kmsEndpoint);
86
- }
87
- if (interfaceConfig.cloudwatchLogs) {
88
- const cwLogsEndpoint = new aws_ec2_1.InterfaceVpcEndpoint(this, "CloudWatchLogsEndpoint", {
89
- vpc: props.vpc,
90
- service: aws_ec2_1.InterfaceVpcEndpointAwsService.CLOUDWATCH_LOGS,
91
- privateDnsEnabled: true,
92
- subnets: { subnetType: aws_ec2_1.SubnetType.PRIVATE_WITH_EGRESS }
93
- });
94
- this.interfaceEndpoints.push(cwLogsEndpoint);
95
- }
96
- if (interfaceConfig.ssm) {
97
- const ssmEndpoint = new aws_ec2_1.InterfaceVpcEndpoint(this, "SsmEndpoint", {
98
- vpc: props.vpc,
99
- service: aws_ec2_1.InterfaceVpcEndpointAwsService.SSM,
100
- privateDnsEnabled: true,
101
- subnets: { subnetType: aws_ec2_1.SubnetType.PRIVATE_WITH_EGRESS }
102
- });
103
- this.interfaceEndpoints.push(ssmEndpoint);
104
- // SSM also needs SSM Messages endpoint for session manager
105
- const ssmMessagesEndpoint = new aws_ec2_1.InterfaceVpcEndpoint(this, "SsmMessagesEndpoint", {
106
- vpc: props.vpc,
107
- service: aws_ec2_1.InterfaceVpcEndpointAwsService.SSM_MESSAGES,
108
- privateDnsEnabled: true,
109
- subnets: { subnetType: aws_ec2_1.SubnetType.PRIVATE_WITH_EGRESS }
110
- });
111
- this.interfaceEndpoints.push(ssmMessagesEndpoint);
112
- }
113
- if (interfaceConfig.sts) {
114
- const stsEndpoint = new aws_ec2_1.InterfaceVpcEndpoint(this, "StsEndpoint", {
115
- vpc: props.vpc,
116
- service: aws_ec2_1.InterfaceVpcEndpointAwsService.STS,
117
- privateDnsEnabled: true,
118
- subnets: { subnetType: aws_ec2_1.SubnetType.PRIVATE_WITH_EGRESS }
119
- });
120
- this.interfaceEndpoints.push(stsEndpoint);
121
- }
122
- }
123
- }
124
- exports.VpcEndpoints = VpcEndpoints;
125
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnBjRW5kcG9pbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3MvbmV0d29ya2luZy92cGNFbmRwb2ludHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkNBQXVDO0FBQ3ZDLGlEQU82QjtBQXVEN0I7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFhLFlBQWEsU0FBUSxzQkFBUztJQUl6QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXdCO1FBQ2hFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFKSCxxQkFBZ0IsR0FBeUIsRUFBRSxDQUFDO1FBQzVDLHVCQUFrQixHQUEyQixFQUFFLENBQUM7UUFLOUQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRU8sbUJBQW1CLENBQUMsS0FBd0I7UUFDbEQsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUVwQyxJQUFJLGFBQWEsS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUM1QixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLGFBQWEsRUFBRSxFQUFFLElBQUksSUFBSSxDQUFDO1FBQzNDLE1BQU0sY0FBYyxHQUFHLGFBQWEsRUFBRSxRQUFRLElBQUksSUFBSSxDQUFDO1FBRXZELElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixNQUFNLFVBQVUsR0FBRyxJQUFJLDRCQUFrQixDQUFDLElBQUksRUFBRSxZQUFZLEVBQUU7Z0JBQzVELEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRztnQkFDZCxPQUFPLEVBQUUsc0NBQTRCLENBQUMsRUFBRTthQUN6QyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FB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RztnQkFDM0MsaUJBQWlCLEVBQUUsSUFBSTtnQkFDdkIsT0FBTyxFQUFFLEVBQUUsVUFBVSxFQUFFLG9CQUFVLENBQUMsbUJBQW1CLEVBQUU7YUFDeEQsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM1QyxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBMUlELG9DQTBJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQge1xuICB0eXBlIElWcGMsXG4gIEdhdGV3YXlWcGNFbmRwb2ludCxcbiAgR2F0ZXdheVZwY0VuZHBvaW50QXdzU2VydmljZSxcbiAgSW50ZXJmYWNlVnBjRW5kcG9pbnQsXG4gIEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSxcbiAgU3VibmV0VHlwZVxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuXG4vKipcbiAqIEdhdGV3YXkgVlBDIGVuZHBvaW50IGNvbmZpZ3VyYXRpb24gZm9yIHJlc291cmNlIGxheWVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZwY0dhdGV3YXlFbmRwb2ludHNDb25maWcge1xuICAvKiogRW5hYmxlIFMzIEdhdGV3YXkgZW5kcG9pbnQuIERlZmF1bHQ6IHRydWUgKi9cbiAgczM/OiBib29sZWFuO1xuICAvKiogRW5hYmxlIER5bmFtb0RCIEdhdGV3YXkgZW5kcG9pbnQuIERlZmF1bHQ6IHRydWUgKi9cbiAgZHluYW1vZGI/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEludGVyZmFjZSBWUEMgZW5kcG9pbnQgY29uZmlndXJhdGlvbiBmb3IgcmVzb3VyY2UgbGF5ZXIuXG4gKiBJbnRlcmZhY2UgZW5kcG9pbnRzIGNvc3QgbW9uZXkgKH4kNy0xNS9tb250aCBlYWNoKSBidXQgcHJvdmlkZSBwcml2YXRlIGNvbm5lY3Rpdml0eS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWcGNJbnRlcmZhY2VFbmRwb2ludHNDb25maWcge1xuICAvKiogRUNSIGVuZHBvaW50cyAoZGtyICsgYXBpKSBmb3IgY29udGFpbmVyIGltYWdlIHB1bGxzLiB+JDE1L21vbnRoICovXG4gIGVjcj86IGJvb2xlYW47XG4gIC8qKiBTZWNyZXRzIE1hbmFnZXIgZW5kcG9pbnQgZm9yIHNlY3JldCBhY2Nlc3MuIH4kNy9tb250aCAqL1xuICBzZWNyZXRzTWFuYWdlcj86IGJvb2xlYW47XG4gIC8qKiBLTVMgZW5kcG9pbnQgZm9yIENNSyBvcGVyYXRpb25zLiB+JDcvbW9udGggKi9cbiAga21zPzogYm9vbGVhbjtcbiAgLyoqIENsb3VkV2F0Y2ggTG9ncyBlbmRwb2ludCBmb3IgbG9nIHNoaXBwaW5nLiB+JDcvbW9udGggKi9cbiAgY2xvdWR3YXRjaExvZ3M/OiBib29sZWFuO1xuICAvKiogU3lzdGVtcyBNYW5hZ2VyIGVuZHBvaW50LiB+JDcvbW9udGggKi9cbiAgc3NtPzogYm9vbGVhbjtcbiAgLyoqIFNUUyBlbmRwb2ludCBmb3IgYXNzdW1lLXJvbGUgb3BlcmF0aW9ucy4gfiQ3L21vbnRoICovXG4gIHN0cz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUHJvcHMgZm9yIGNyZWF0aW5nIFZQQyBlbmRwb2ludHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVnBjRW5kcG9pbnRzUHJvcHMge1xuICAvKiogVGhlIFZQQyB0byBjcmVhdGUgZW5kcG9pbnRzIGluLiBSZXF1aXJlZC4gKi9cbiAgdnBjOiBJVnBjO1xuICAvKipcbiAgICogR2F0ZXdheSBlbmRwb2ludHMgKEZSRUUpLlxuICAgKiAtIE9taXQ6IGVuYWJsZWQgd2l0aCBkZWZhdWx0cyAoczM6IHRydWUsIGR5bmFtb2RiOiB0cnVlKVxuICAgKiAtIGB7fWA6IGVuYWJsZWQgd2l0aCBkZWZhdWx0c1xuICAgKiAtIGB7IHMzOiB0cnVlLCBkeW5hbW9kYjogZmFsc2UgfWA6IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25cbiAgICogLSBgZmFsc2VgOiBleHBsaWNpdGx5IGRpc2FibGVkXG4gICAqL1xuICBnYXRld2F5PzogVnBjR2F0ZXdheUVuZHBvaW50c0NvbmZpZyB8IGZhbHNlO1xuICAvKipcbiAgICogSW50ZXJmYWNlIGVuZHBvaW50cyAoY29zdCBtb25leSkuXG4gICAqIC0gT21pdDogZGlzYWJsZWQgKGRlZmF1bHQpXG4gICAqIC0gYHt9YDogZGlzYWJsZWQgKG11c3Qgc3BlY2lmeSB3aGljaCBlbmRwb2ludHMpXG4gICAqIC0gYHsgZWNyOiB0cnVlLCBrbXM6IHRydWUgfWA6IHNwZWNpZmljIGVuZHBvaW50c1xuICAgKiAtIGBmYWxzZWA6IGV4cGxpY2l0bHkgZGlzYWJsZWRcbiAgICovXG4gIGludGVyZmFjZT86IFZwY0ludGVyZmFjZUVuZHBvaW50c0NvbmZpZyB8IGZhbHNlO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgVlBDIGVuZHBvaW50cyBmb3IgQVdTIHNlcnZpY2VzLlxuICpcbiAqIEdhdGV3YXkgZW5kcG9pbnRzIChTMywgRHluYW1vREIpIGFyZSBGUkVFIGFuZCBzaG91bGQgYWx3YXlzIGJlIGVuYWJsZWQuXG4gKiBUaGV5IHJvdXRlIHRyYWZmaWMgZGlyZWN0bHkgdG8gdGhlIHNlcnZpY2Ugd2l0aG91dCBnb2luZyB0aHJvdWdoIE5BVC5cbiAqXG4gKiBJbnRlcmZhY2UgZW5kcG9pbnRzIGNvc3QgbW9uZXkgYnV0IHByb3ZpZGUgcHJpdmF0ZSBjb25uZWN0aXZpdHkgdG8gQVdTIHNlcnZpY2VzLlxuICogVGhleSdyZSB1c2VmdWwgZm9yOlxuICogLSBTZWN1cml0eTogVHJhZmZpYyBzdGF5cyB3aXRoaW4gQVdTIG5ldHdvcmtcbiAqIC0gQ29zdDogQXZvaWQgTkFUIEdhdGV3YXkgZGF0YSBwcm9jZXNzaW5nIGNoYXJnZXMgZm9yIGhpZ2gtdm9sdW1lIHNlcnZpY2VzXG4gKiAtIExhdGVuY3k6IERpcmVjdCBwYXRoIHRvIHNlcnZpY2VcbiAqL1xuZXhwb3J0IGNsYXNzIFZwY0VuZHBvaW50cyBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBnYXRld2F5RW5kcG9pbnRzOiBHYXRld2F5VnBjRW5kcG9pbnRbXSA9IFtdO1xuICBwdWJsaWMgcmVhZG9ubHkgaW50ZXJmYWNlRW5kcG9pbnRzOiBJbnRlcmZhY2VWcGNFbmRwb2ludFtdID0gW107XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFZwY0VuZHBvaW50c1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMuYWRkR2F0ZXdheUVuZHBvaW50cyhwcm9wcyk7XG4gICAgdGhpcy5hZGRJbnRlcmZhY2VFbmRwb2ludHMocHJvcHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRHYXRld2F5RW5kcG9pbnRzKHByb3BzOiBWcGNFbmRwb2ludHNQcm9wcykge1xuICAgIGNvbnN0IGdhdGV3YXlDb25maWcgPSBwcm9wcy5nYXRld2F5O1xuXG4gICAgaWYgKGdhdGV3YXlDb25maWcgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZW5hYmxlUzMgPSBnYXRld2F5Q29uZmlnPy5zMyA/PyB0cnVlO1xuICAgIGNvbnN0IGVuYWJsZUR5bmFtb2RiID0gZ2F0ZXdheUNvbmZpZz8uZHluYW1vZGIgPz8gdHJ1ZTtcblxuICAgIGlmIChlbmFibGVTMykge1xuICAgICAgY29uc3QgczNFbmRwb2ludCA9IG5ldyBHYXRld2F5VnBjRW5kcG9pbnQodGhpcywgXCJTM0VuZHBvaW50XCIsIHtcbiAgICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICAgIHNlcnZpY2U6IEdhdGV3YXlWcGNFbmRwb2ludEF3c1NlcnZpY2UuUzNcbiAgICAgIH0pO1xuICAgICAgdGhpcy5nYXRld2F5RW5kcG9pbnRzLnB1c2goczNFbmRwb2ludCk7XG4gICAgfVxuXG4gICAgaWYgKGVuYWJsZUR5bmFtb2RiKSB7XG4gICAgICBjb25zdCBkeW5hbW9FbmRwb2ludCA9IG5ldyBHYXRld2F5VnBjRW5kcG9pbnQodGhpcywgXCJEeW5hbW9EQkVuZHBvaW50XCIsIHtcbiAgICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICAgIHNlcnZpY2U6IEdhdGV3YXlWcGNFbmRwb2ludEF3c1NlcnZpY2UuRFlOQU1PREJcbiAgICAgIH0pO1xuICAgICAgdGhpcy5nYXRld2F5RW5kcG9pbnRzLnB1c2goZHluYW1vRW5kcG9pbnQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkSW50ZXJmYWNlRW5kcG9pbnRzKHByb3BzOiBWcGNFbmRwb2ludHNQcm9wcykge1xuICAgIGNvbnN0IGludGVyZmFjZUNvbmZpZyA9IHByb3BzLmludGVyZmFjZTtcblxuICAgIGlmIChpbnRlcmZhY2VDb25maWcgPT09IGZhbHNlIHx8IGludGVyZmFjZUNvbmZpZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGludGVyZmFjZUNvbmZpZy5lY3IpIHtcbiAgICAgIGNvbnN0IGVjckRvY2tlckVuZHBvaW50ID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50KFxuICAgICAgICB0aGlzLFxuICAgICAgICBcIkVjckRvY2tlckVuZHBvaW50XCIsXG4gICAgICAgIHtcbiAgICAgICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgICAgICBzZXJ2aWNlOiBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UuRUNSX0RPQ0tFUixcbiAgICAgICAgICBwcml2YXRlRG5zRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICBzdWJuZXRzOiB7IHN1Ym5ldFR5cGU6IFN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX0VHUkVTUyB9XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50cy5wdXNoKGVjckRvY2tlckVuZHBvaW50KTtcblxuICAgICAgY29uc3QgZWNyQXBpRW5kcG9pbnQgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnQodGhpcywgXCJFY3JBcGlFbmRwb2ludFwiLCB7XG4gICAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgICBzZXJ2aWNlOiBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UuRUNSLFxuICAgICAgICBwcml2YXRlRG5zRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgc3VibmV0czogeyBzdWJuZXRUeXBlOiBTdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9FR1JFU1MgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50cy5wdXNoKGVjckFwaUVuZHBvaW50KTtcbiAgICB9XG5cbiAgICBpZiAoaW50ZXJmYWNlQ29uZmlnLnNlY3JldHNNYW5hZ2VyKSB7XG4gICAgICBjb25zdCBzbUVuZHBvaW50ID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50KFxuICAgICAgICB0aGlzLFxuICAgICAgICBcIlNlY3JldHNNYW5hZ2VyRW5kcG9pbnRcIixcbiAgICAgICAge1xuICAgICAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgICAgIHNlcnZpY2U6IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZS5TRUNSRVRTX01BTkFHRVIsXG4gICAgICAgICAgcHJpdmF0ZURuc0VuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgc3VibmV0czogeyBzdWJuZXRUeXBlOiBTdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9FR1JFU1MgfVxuICAgICAgICB9XG4gICAgICApO1xuICAgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludHMucHVzaChzbUVuZHBvaW50KTtcbiAgICB9XG5cbiAgICBpZiAoaW50ZXJmYWNlQ29uZmlnLmttcykge1xuICAgICAgY29uc3Qga21zRW5kcG9pbnQgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnQodGhpcywgXCJLbXNFbmRwb2ludFwiLCB7XG4gICAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgICBzZXJ2aWNlOiBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UuS01TLFxuICAgICAgICBwcml2YXRlRG5zRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgc3VibmV0czogeyBzdWJuZXRUeXBlOiBTdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9FR1JFU1MgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50cy5wdXNoKGttc0VuZHBvaW50KTtcbiAgICB9XG5cbiAgICBpZiAoaW50ZXJmYWNlQ29uZmlnLmNsb3Vkd2F0Y2hMb2dzKSB7XG4gICAgICBjb25zdCBjd0xvZ3NFbmRwb2ludCA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludChcbiAgICAgICAgdGhpcyxcbiAgICAgICAgXCJDbG91ZFdhdGNoTG9nc0VuZHBvaW50XCIsXG4gICAgICAgIHtcbiAgICAgICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgICAgICBzZXJ2aWNlOiBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UuQ0xPVURXQVRDSF9MT0dTLFxuICAgICAgICAgIHByaXZhdGVEbnNFbmFibGVkOiB0cnVlLFxuICAgICAgICAgIHN1Ym5ldHM6IHsgc3VibmV0VHlwZTogU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfRUdSRVNTIH1cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRzLnB1c2goY3dMb2dzRW5kcG9pbnQpO1xuICAgIH1cblxuICAgIGlmIChpbnRlcmZhY2VDb25maWcuc3NtKSB7XG4gICAgICBjb25zdCBzc21FbmRwb2ludCA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludCh0aGlzLCBcIlNzbUVuZHBvaW50XCIsIHtcbiAgICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICAgIHNlcnZpY2U6IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZS5TU00sXG4gICAgICAgIHByaXZhdGVEbnNFbmFibGVkOiB0cnVlLFxuICAgICAgICBzdWJuZXRzOiB7IHN1Ym5ldFR5cGU6IFN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX0VHUkVTUyB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRzLnB1c2goc3NtRW5kcG9pbnQpO1xuXG4gICAgICAvLyBTU00gYWxzbyBuZWVkcyBTU00gTWVzc2FnZXMgZW5kcG9pbnQgZm9yIHNlc3Npb24gbWFuYWdlclxuICAgICAgY29uc3Qgc3NtTWVzc2FnZXNFbmRwb2ludCA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludChcbiAgICAgICAgdGhpcyxcbiAgICAgICAgXCJTc21NZXNzYWdlc0VuZHBvaW50XCIsXG4gICAgICAgIHtcbiAgICAgICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgICAgICBzZXJ2aWNlOiBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UuU1NNX01FU1NBR0VTLFxuICAgICAgICAgIHByaXZhdGVEbnNFbmFibGVkOiB0cnVlLFxuICAgICAgICAgIHN1Ym5ldHM6IHsgc3VibmV0VHlwZTogU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfRUdSRVNTIH1cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRzLnB1c2goc3NtTWVzc2FnZXNFbmRwb2ludCk7XG4gICAgfVxuXG4gICAgaWYgKGludGVyZmFjZUNvbmZpZy5zdHMpIHtcbiAgICAgIGNvbnN0IHN0c0VuZHBvaW50ID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50KHRoaXMsIFwiU3RzRW5kcG9pbnRcIiwge1xuICAgICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgICAgc2VydmljZTogSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlLlNUUyxcbiAgICAgICAgcHJpdmF0ZURuc0VuYWJsZWQ6IHRydWUsXG4gICAgICAgIHN1Ym5ldHM6IHsgc3VibmV0VHlwZTogU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfRUdSRVNTIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludHMucHVzaChzdHNFbmRwb2ludCk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -1 +0,0 @@
1
- export {};
@@ -1,102 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const cfnOutput_js_1 = require("./cfnOutput.js");
4
- const cdk = require("aws-cdk-lib");
5
- describe("sanitiseCfnKey", () => {
6
- it("should convert kebab-case to camelCase", () => {
7
- expect((0, cfnOutput_js_1.sanitiseCfnKey)("compute-deploy-test")).toBe("computeDeployTest");
8
- expect((0, cfnOutput_js_1.sanitiseCfnKey)("my-resource-name")).toBe("myResourceName");
9
- });
10
- it("should convert dot.separated to camelCase", () => {
11
- expect((0, cfnOutput_js_1.sanitiseCfnKey)("my.domain.com")).toBe("myDomainCom");
12
- expect((0, cfnOutput_js_1.sanitiseCfnKey)("api.v2.endpoint")).toBe("apiV2Endpoint");
13
- });
14
- it("should convert snake_case to camelCase", () => {
15
- expect((0, cfnOutput_js_1.sanitiseCfnKey)("my_resource_name")).toBe("myResourceName");
16
- expect((0, cfnOutput_js_1.sanitiseCfnKey)("database_host_endpoint")).toBe("databaseHostEndpoint");
17
- });
18
- it("should remove non-alphanumeric characters", () => {
19
- expect((0, cfnOutput_js_1.sanitiseCfnKey)("my@resource#name")).toBe("myresourcename");
20
- expect((0, cfnOutput_js_1.sanitiseCfnKey)("test!value$here")).toBe("testvaluehere");
21
- });
22
- it("should preserve camelCase input", () => {
23
- expect((0, cfnOutput_js_1.sanitiseCfnKey)("myResourceName")).toBe("myresourcename");
24
- expect((0, cfnOutput_js_1.sanitiseCfnKey)("ecrRepositoryName")).toBe("ecrrepositoryname");
25
- });
26
- it("should handle mixed formats", () => {
27
- expect((0, cfnOutput_js_1.sanitiseCfnKey)("app-name_v2.test")).toBe("appNameV2Test");
28
- });
29
- });
30
- describe("CfnOutput", () => {
31
- let app;
32
- let stack;
33
- beforeEach(() => {
34
- app = new cdk.App();
35
- stack = new cdk.Stack(app, "TestStack");
36
- });
37
- describe("export name handling", () => {
38
- it("should NOT sanitize exportName - must preserve case for cross-stack lookups", () => {
39
- // This is a regression test for the ECR repository lookup issue.
40
- // The CLI looks for exports like "app6EcrRepositoryName" and CloudFormation
41
- // export names are case-sensitive. Sanitizing export names would break lookups.
42
- const output = new cfnOutput_js_1.CfnOutput(stack, "TestOutput", {
43
- value: "test-value",
44
- exportName: "app6EcrRepositoryName"
45
- });
46
- // Get the CloudFormation template
47
- const template = app.synth().getStackByName("TestStack").template;
48
- const outputs = template.Outputs;
49
- // Find our output (the key will be sanitized, but we need to check exportName)
50
- const outputKey = Object.keys(outputs).find((key) => key.toLowerCase().includes("testoutput"));
51
- expect(outputKey).toBeDefined();
52
- // The export name must NOT be sanitized - it must be exactly as provided
53
- expect(outputs[outputKey].Export.Name).toBe("app6EcrRepositoryName");
54
- });
55
- it("should preserve PascalCase export names", () => {
56
- const output = new cfnOutput_js_1.CfnOutput(stack, "MyOutput", {
57
- value: "test-value",
58
- exportName: "MyAppDatabaseEndpoint"
59
- });
60
- const template = app.synth().getStackByName("TestStack").template;
61
- const outputs = template.Outputs;
62
- const outputKey = Object.keys(outputs).find((key) => key.toLowerCase().includes("myoutput"));
63
- expect(outputs[outputKey].Export.Name).toBe("MyAppDatabaseEndpoint");
64
- });
65
- it("should preserve export names with mixed casing", () => {
66
- const output = new cfnOutput_js_1.CfnOutput(stack, "EcrOutput", {
67
- value: "test-ecr-arn",
68
- exportName: "app6EcrRepositoryArn"
69
- });
70
- const template = app.synth().getStackByName("TestStack").template;
71
- const outputs = template.Outputs;
72
- const outputKey = Object.keys(outputs).find((key) => key.toLowerCase().includes("ecroutput"));
73
- // Export name must be exactly as provided - CLI depends on this
74
- expect(outputs[outputKey].Export.Name).toBe("app6EcrRepositoryArn");
75
- });
76
- });
77
- describe("key sanitization", () => {
78
- it("should sanitize the output key", () => {
79
- new cfnOutput_js_1.CfnOutput(stack, "my-output-id", {
80
- value: "test-value"
81
- });
82
- const template = app.synth().getStackByName("TestStack").template;
83
- const outputs = template.Outputs;
84
- // Key should be sanitized to camelCase
85
- expect(outputs["myoutputid"]).toBeDefined();
86
- });
87
- it("should sanitize key when explicitly provided", () => {
88
- new cfnOutput_js_1.CfnOutput(stack, "TestId", {
89
- value: "test-value",
90
- key: "my-custom-key"
91
- });
92
- const template = app.synth().getStackByName("TestStack").template;
93
- const outputs = template.Outputs;
94
- // The custom key should be sanitized
95
- const outputEntry = Object.values(outputs)[0];
96
- // Note: The key is set in CloudFormation logical ID, not as a separate property
97
- // The output should use the sanitized ID
98
- expect(outputs["testid"]).toBeDefined();
99
- });
100
- });
101
- });
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2ZuT3V0cHV0LnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy91dGlsaXRpZXMvY2ZuT3V0cHV0LnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxpREFBMkQ7QUFDM0QsbUNBQW1DO0FBRW5DLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUU7SUFDOUIsRUFBRSxDQUFDLHdDQUF3QyxFQUFFLEdBQUcsRUFBRTtRQUNoRCxNQUFNLENBQUMsSUFBQSw2QkFBYyxFQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUN4RSxNQUFNLENBQUMsSUFBQSw2QkFBYyxFQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNwRSxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQywyQ0FBMkMsRUFBRSxHQUFHLEVBQUU7UUFDbkQsTUFBTSxDQUFDLElBQUEsNkJBQWMsRUFBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM1RCxNQUFNLENBQUMsSUFBQSw2QkFBYyxFQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDbEUsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsd0NBQXdDLEVBQUUsR0FBRyxFQUFFO1FBQ2hELE1BQU0sQ0FBQyxJQUFBLDZCQUFjLEVBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sQ0FBQyxJQUFBLDZCQUFjLEVBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDbkQsc0JBQXNCLENBQ3ZCLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQywyQ0FBMkMsRUFB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LHdCQUFTLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRTtnQkFDbkMsS0FBSyxFQUFFLFlBQVk7YUFDcEIsQ0FBQyxDQUFDO1lBRUgsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxRQUFRLENBQUM7WUFDbEUsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQztZQUVqQyx1Q0FBdUM7WUFDdkMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzlDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDhDQUE4QyxFQUFFLEdBQUcsRUFBRTtZQUN0RCxJQUFJLHdCQUFTLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRTtnQkFDN0IsS0FBSyxFQUFFLFlBQVk7Z0JBQ25CLEdBQUcsRUFBRSxlQUFlO2FBQ3JCLENBQUMsQ0FBQztZQUVILE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUMsUUFBUSxDQUFDO1lBQ2xFLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUM7WUFFakMscUNBQXFDO1lBQ3JDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFRLENBQUM7WUFDckQsZ0ZBQWdGO1lBQ2hGLHlDQUF5QztZQUN6QyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc2FuaXRpc2VDZm5LZXksIENmbk91dHB1dCB9IGZyb20gXCIuL2Nmbk91dHB1dC5qc1wiO1xuaW1wb3J0ICogYXMgY2RrIGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuXG5kZXNjcmliZShcInNhbml0aXNlQ2ZuS2V5XCIsICgpID0+IHtcbiAgaXQoXCJzaG91bGQgY29udmVydCBrZWJhYi1jYXNlIHRvIGNhbWVsQ2FzZVwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KHNhbml0aXNlQ2ZuS2V5KFwiY29tcHV0ZS1kZXBsb3ktdGVzdFwiKSkudG9CZShcImNvbXB1dGVEZXBsb3lUZXN0XCIpO1xuICAgIGV4cGVjdChzYW5pdGlzZUNmbktleShcIm15LXJlc291cmNlLW5hbWVcIikpLnRvQmUoXCJteVJlc291cmNlTmFtZVwiKTtcbiAgfSk7XG5cbiAgaXQoXCJzaG91bGQgY29udmVydCBkb3Quc2VwYXJhdGVkIHRvIGNhbWVsQ2FzZVwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KHNhbml0aXNlQ2ZuS2V5KFwibXkuZG9tYWluLmNvbVwiKSkudG9CZShcIm15RG9tYWluQ29tXCIpO1xuICAgIGV4cGVjdChzYW5pdGlzZUNmbktleShcImFwaS52Mi5lbmRwb2ludFwiKSkudG9CZShcImFwaVYyRW5kcG9pbnRcIik7XG4gIH0pO1xuXG4gIGl0KFwic2hvdWxkIGNvbnZlcnQgc25ha2VfY2FzZSB0byBjYW1lbENhc2VcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChzYW5pdGlzZUNmbktleShcIm15X3Jlc291cmNlX25hbWVcIikpLnRvQmUoXCJteVJlc291cmNlTmFtZVwiKTtcbiAgICBleHBlY3Qoc2FuaXRpc2VDZm5LZXkoXCJkYXRhYmFzZV9ob3N0X2VuZHBvaW50XCIpKS50b0JlKFxuICAgICAgXCJkYXRhYmFzZUhvc3RFbmRwb2ludFwiXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoXCJzaG91bGQgcmVtb3ZlIG5vbi1hbHBoYW51bWVyaWMgY2hhcmFjdGVyc1wiLCAoKSA9PiB7XG4gICAgZXhwZWN0KHNhbml0aXNlQ2ZuS2V5KFwibXlAcmVzb3VyY2UjbmFtZVwiKSkudG9CZShcIm15cmVzb3VyY2VuYW1lXCIpO1xuICAgIGV4cGVjdChzYW5pdGlzZUNmbktleShcInRlc3QhdmFsdWUkaGVyZVwiKSkudG9CZShcInRlc3R2YWx1ZWhlcmVcIik7XG4gIH0pO1xuXG4gIGl0KFwic2hvdWxkIHByZXNlcnZlIGNhbWVsQ2FzZSBpbnB1dFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KHNhbml0aXNlQ2ZuS2V5KFwibXlSZXNvdXJjZU5hbWVcIikpLnRvQmUoXCJteXJlc291cmNlbmFtZVwiKTtcbiAgICBleHBlY3Qoc2FuaXRpc2VDZm5LZXkoXCJlY3JSZXBvc2l0b3J5TmFtZVwiKSkudG9CZShcImVjcnJlcG9zaXRvcnluYW1lXCIpO1xuICB9KTtcblxuICBpdChcInNob3VsZCBoYW5kbGUgbWl4ZWQgZm9ybWF0c1wiLCAoKSA9PiB7XG4gICAgZXhwZWN0KHNhbml0aXNlQ2ZuS2V5KFwiYXBwLW5hbWVfdjIudGVzdFwiKSkudG9CZShcImFwcE5hbWVWMlRlc3RcIik7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiQ2ZuT3V0cHV0XCIsICgpID0+IHtcbiAgbGV0IGFwcDogY2RrLkFwcDtcbiAgbGV0IHN0YWNrOiBjZGsuU3RhY2s7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgYXBwID0gbmV3IGNkay5BcHAoKTtcbiAgICBzdGFjayA9IG5ldyBjZGsuU3RhY2soYXBwLCBcIlRlc3RTdGFja1wiKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJleHBvcnQgbmFtZSBoYW5kbGluZ1wiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgTk9UIHNhbml0aXplIGV4cG9ydE5hbWUgLSBtdXN0IHByZXNlcnZlIGNhc2UgZm9yIGNyb3NzLXN0YWNrIGxvb2t1cHNcIiwgKCkgPT4ge1xuICAgICAgLy8gVGhpcyBpcyBhIHJlZ3Jlc3Npb24gdGVzdCBmb3IgdGhlIEVDUiByZXBvc2l0b3J5IGxvb2t1cCBpc3N1ZS5cbiAgICAgIC8vIFRoZSBDTEkgbG9va3MgZm9yIGV4cG9ydHMgbGlrZSBcImFwcDZFY3JSZXBvc2l0b3J5TmFtZVwiIGFuZCBDbG91ZEZvcm1hdGlvblxuICAgICAgLy8gZXhwb3J0IG5hbWVzIGFyZSBjYXNlLXNlbnNpdGl2ZS4gU2FuaXRpemluZyBleHBvcnQgbmFtZXMgd291bGQgYnJlYWsgbG9va3Vwcy5cblxuICAgICAgY29uc3Qgb3V0cHV0ID0gbmV3IENmbk91dHB1dChzdGFjaywgXCJUZXN0T3V0cHV0XCIsIHtcbiAgICAgICAgdmFsdWU6IFwidGVzdC12YWx1ZVwiLFxuICAgICAgICBleHBvcnROYW1lOiBcImFwcDZFY3JSZXBvc2l0b3J5TmFtZVwiXG4gICAgICB9KTtcblxuICAgICAgLy8gR2V0IHRoZSBDbG91ZEZvcm1hdGlvbiB0ZW1wbGF0ZVxuICAgICAgY29uc3QgdGVtcGxhdGUgPSBhcHAuc3ludGgoKS5nZXRTdGFja0J5TmFtZShcIlRlc3RTdGFja1wiKS50ZW1wbGF0ZTtcbiAgICAgIGNvbnN0IG91dHB1dHMgPSB0ZW1wbGF0ZS5PdXRwdXRzO1xuXG4gICAgICAvLyBGaW5kIG91ciBvdXRwdXQgKHRoZSBrZXkgd2lsbCBiZSBzYW5pdGl6ZWQsIGJ1dCB3ZSBuZWVkIHRvIGNoZWNrIGV4cG9ydE5hbWUpXG4gICAgICBjb25zdCBvdXRwdXRLZXkgPSBPYmplY3Qua2V5cyhvdXRwdXRzKS5maW5kKChrZXkpID0+XG4gICAgICAgIGtleS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwidGVzdG91dHB1dFwiKVxuICAgICAgKTtcbiAgICAgIGV4cGVjdChvdXRwdXRLZXkpLnRvQmVEZWZpbmVkKCk7XG5cbiAgICAgIC8vIFRoZSBleHBvcnQgbmFtZSBtdXN0IE5PVCBiZSBzYW5pdGl6ZWQgLSBpdCBtdXN0IGJlIGV4YWN0bHkgYXMgcHJvdmlkZWRcbiAgICAgIGV4cGVjdChvdXRwdXRzW291dHB1dEtleSFdLkV4cG9ydC5OYW1lKS50b0JlKFwiYXBwNkVjclJlcG9zaXRvcnlOYW1lXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgcHJlc2VydmUgUGFzY2FsQ2FzZSBleHBvcnQgbmFtZXNcIiwgKCkgPT4ge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gbmV3IENmbk91dHB1dChzdGFjaywgXCJNeU91dHB1dFwiLCB7XG4gICAgICAgIHZhbHVlOiBcInRlc3QtdmFsdWVcIixcbiAgICAgICAgZXhwb3J0TmFtZTogXCJNeUFwcERhdGFiYXNlRW5kcG9pbnRcIlxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gYXBwLnN5bnRoKCkuZ2V0U3RhY2tCeU5hbWUoXCJUZXN0U3RhY2tcIikudGVtcGxhdGU7XG4gICAgICBjb25zdCBvdXRwdXRzID0gdGVtcGxhdGUuT3V0cHV0cztcbiAgICAgIGNvbnN0IG91dHB1dEtleSA9IE9iamVjdC5rZXlzKG91dHB1dHMpLmZpbmQoKGtleSkgPT5cbiAgICAgICAga2V5LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoXCJteW91dHB1dFwiKVxuICAgICAgKTtcblxuICAgICAgZXhwZWN0KG91dHB1dHNbb3V0cHV0S2V5IV0uRXhwb3J0Lk5hbWUpLnRvQmUoXCJNeUFwcERhdGFiYXNlRW5kcG9pbnRcIik7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBwcmVzZXJ2ZSBleHBvcnQgbmFtZXMgd2l0aCBtaXhlZCBjYXNpbmdcIiwgKCkgPT4ge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gbmV3IENmbk91dHB1dChzdGFjaywgXCJFY3JPdXRwdXRcIiwge1xuICAgICAgICB2YWx1ZTogXCJ0ZXN0LWVjci1hcm5cIixcbiAgICAgICAgZXhwb3J0TmFtZTogXCJhcHA2RWNyUmVwb3NpdG9yeUFyblwiXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdGVtcGxhdGUgPSBhcHAuc3ludGgoKS5nZXRTdGFja0J5TmFtZShcIlRlc3RTdGFja1wiKS50ZW1wbGF0ZTtcbiAgICAgIGNvbnN0IG91dHB1dHMgPSB0ZW1wbGF0ZS5PdXRwdXRzO1xuICAgICAgY29uc3Qgb3V0cHV0S2V5ID0gT2JqZWN0LmtleXMob3V0cHV0cykuZmluZCgoa2V5KSA9PlxuICAgICAgICBrZXkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcImVjcm91dHB1dFwiKVxuICAgICAgKTtcblxuICAgICAgLy8gRXhwb3J0IG5hbWUgbXVzdCBiZSBleGFjdGx5IGFzIHByb3ZpZGVkIC0gQ0xJIGRlcGVuZHMgb24gdGhpc1xuICAgICAgZXhwZWN0KG91dHB1dHNbb3V0cHV0S2V5IV0uRXhwb3J0Lk5hbWUpLnRvQmUoXCJhcHA2RWNyUmVwb3NpdG9yeUFyblwiKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJrZXkgc2FuaXRpemF0aW9uXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCBzYW5pdGl6ZSB0aGUgb3V0cHV0IGtleVwiLCAoKSA9PiB7XG4gICAgICBuZXcgQ2ZuT3V0cHV0KHN0YWNrLCBcIm15LW91dHB1dC1pZFwiLCB7XG4gICAgICAgIHZhbHVlOiBcInRlc3QtdmFsdWVcIlxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gYXBwLnN5bnRoKCkuZ2V0U3RhY2tCeU5hbWUoXCJUZXN0U3RhY2tcIikudGVtcGxhdGU7XG4gICAgICBjb25zdCBvdXRwdXRzID0gdGVtcGxhdGUuT3V0cHV0cztcblxuICAgICAgLy8gS2V5IHNob3VsZCBiZSBzYW5pdGl6ZWQgdG8gY2FtZWxDYXNlXG4gICAgICBleHBlY3Qob3V0cHV0c1tcIm15b3V0cHV0aWRcIl0pLnRvQmVEZWZpbmVkKCk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBzYW5pdGl6ZSBrZXkgd2hlbiBleHBsaWNpdGx5IHByb3ZpZGVkXCIsICgpID0+IHtcbiAgICAgIG5ldyBDZm5PdXRwdXQoc3RhY2ssIFwiVGVzdElkXCIsIHtcbiAgICAgICAgdmFsdWU6IFwidGVzdC12YWx1ZVwiLFxuICAgICAgICBrZXk6IFwibXktY3VzdG9tLWtleVwiXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdGVtcGxhdGUgPSBhcHAuc3ludGgoKS5nZXRTdGFja0J5TmFtZShcIlRlc3RTdGFja1wiKS50ZW1wbGF0ZTtcbiAgICAgIGNvbnN0IG91dHB1dHMgPSB0ZW1wbGF0ZS5PdXRwdXRzO1xuXG4gICAgICAvLyBUaGUgY3VzdG9tIGtleSBzaG91bGQgYmUgc2FuaXRpemVkXG4gICAgICBjb25zdCBvdXRwdXRFbnRyeSA9IE9iamVjdC52YWx1ZXMob3V0cHV0cylbMF0gYXMgYW55O1xuICAgICAgLy8gTm90ZTogVGhlIGtleSBpcyBzZXQgaW4gQ2xvdWRGb3JtYXRpb24gbG9naWNhbCBJRCwgbm90IGFzIGEgc2VwYXJhdGUgcHJvcGVydHlcbiAgICAgIC8vIFRoZSBvdXRwdXQgc2hvdWxkIHVzZSB0aGUgc2FuaXRpemVkIElEXG4gICAgICBleHBlY3Qob3V0cHV0c1tcInRlc3RpZFwiXSkudG9CZURlZmluZWQoKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -1,5 +0,0 @@
1
- /**
2
- * Sanitizes a string to be a valid CloudFormation output key.
3
- * CloudFormation output names must be alphanumeric only (no hyphens, underscores, or dots).
4
- */
5
- export declare function sanitizeCfnKey(input: string): string;
@@ -1,11 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.sanitizeCfnKey = sanitizeCfnKey;
4
- /**
5
- * Sanitizes a string to be a valid CloudFormation output key.
6
- * CloudFormation output names must be alphanumeric only (no hyphens, underscores, or dots).
7
- */
8
- function sanitizeCfnKey(input) {
9
- return input.replace(/[^a-zA-Z0-9]/g, "");
10
- }
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FuaXRpemVDZm5LZXkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvdXRpbHMvc2FuaXRpemVDZm5LZXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFJQSx3Q0FFQztBQU5EOzs7R0FHRztBQUNILFNBQWdCLGNBQWMsQ0FBQyxLQUFhO0lBQzFDLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDNUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU2FuaXRpemVzIGEgc3RyaW5nIHRvIGJlIGEgdmFsaWQgQ2xvdWRGb3JtYXRpb24gb3V0cHV0IGtleS5cbiAqIENsb3VkRm9ybWF0aW9uIG91dHB1dCBuYW1lcyBtdXN0IGJlIGFscGhhbnVtZXJpYyBvbmx5IChubyBoeXBoZW5zLCB1bmRlcnNjb3Jlcywgb3IgZG90cykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzYW5pdGl6ZUNmbktleShpbnB1dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGlucHV0LnJlcGxhY2UoL1teYS16QS1aMC05XS9nLCBcIlwiKTtcbn1cbiJdfQ==
@@ -1,24 +0,0 @@
1
- import { type IConstruct } from "constructs";
2
- /**
3
- * Apply tags directly to a specific resource.
4
- *
5
- * This uses CDK's native Tags.of().add() API which:
6
- * - Properly merges with existing tags from L2 constructs
7
- * - Works regardless of when it's called during construction
8
- * - Applies tags to the resource and all its children
9
- *
10
- * Use this for resources that need specific tags beyond the standard Fjall tags,
11
- * like VPC IPAM pool tags or resource-specific metadata.
12
- *
13
- * @param resource - The construct to tag
14
- * @param tags - Key-value pairs of tags to apply
15
- *
16
- * @example
17
- * // Apply specific tags to a resource
18
- * tagResource(myVpc, {
19
- * "fjall:operations:pool": "pool-123"
20
- * });
21
- */
22
- export default function tagResource(resource: IConstruct, tags: {
23
- [key: string]: string;
24
- }): void;
@@ -1,30 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.default = tagResource;
4
- const aws_cdk_lib_1 = require("aws-cdk-lib");
5
- /**
6
- * Apply tags directly to a specific resource.
7
- *
8
- * This uses CDK's native Tags.of().add() API which:
9
- * - Properly merges with existing tags from L2 constructs
10
- * - Works regardless of when it's called during construction
11
- * - Applies tags to the resource and all its children
12
- *
13
- * Use this for resources that need specific tags beyond the standard Fjall tags,
14
- * like VPC IPAM pool tags or resource-specific metadata.
15
- *
16
- * @param resource - The construct to tag
17
- * @param tags - Key-value pairs of tags to apply
18
- *
19
- * @example
20
- * // Apply specific tags to a resource
21
- * tagResource(myVpc, {
22
- * "fjall:operations:pool": "pool-123"
23
- * });
24
- */
25
- function tagResource(resource, tags) {
26
- Object.entries(tags).forEach(([key, value]) => {
27
- aws_cdk_lib_1.Tags.of(resource).add(key, value);
28
- });
29
- }
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnUmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvdXRpbHMvdGFnUmVzb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUF1QkEsOEJBT0M7QUE5QkQsNkNBQW1DO0FBR25DOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsU0FBd0IsV0FBVyxDQUNqQyxRQUFvQixFQUNwQixJQUErQjtJQUUvQixNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7UUFDNUMsa0JBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNwQyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUYWdzIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyB0eXBlIElDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG4vKipcbiAqIEFwcGx5IHRhZ3MgZGlyZWN0bHkgdG8gYSBzcGVjaWZpYyByZXNvdXJjZS5cbiAqXG4gKiBUaGlzIHVzZXMgQ0RLJ3MgbmF0aXZlIFRhZ3Mub2YoKS5hZGQoKSBBUEkgd2hpY2g6XG4gKiAtIFByb3Blcmx5IG1lcmdlcyB3aXRoIGV4aXN0aW5nIHRhZ3MgZnJvbSBMMiBjb25zdHJ1Y3RzXG4gKiAtIFdvcmtzIHJlZ2FyZGxlc3Mgb2Ygd2hlbiBpdCdzIGNhbGxlZCBkdXJpbmcgY29uc3RydWN0aW9uXG4gKiAtIEFwcGxpZXMgdGFncyB0byB0aGUgcmVzb3VyY2UgYW5kIGFsbCBpdHMgY2hpbGRyZW5cbiAqXG4gKiBVc2UgdGhpcyBmb3IgcmVzb3VyY2VzIHRoYXQgbmVlZCBzcGVjaWZpYyB0YWdzIGJleW9uZCB0aGUgc3RhbmRhcmQgRmphbGwgdGFncyxcbiAqIGxpa2UgVlBDIElQQU0gcG9vbCB0YWdzIG9yIHJlc291cmNlLXNwZWNpZmljIG1ldGFkYXRhLlxuICpcbiAqIEBwYXJhbSByZXNvdXJjZSAtIFRoZSBjb25zdHJ1Y3QgdG8gdGFnXG4gKiBAcGFyYW0gdGFncyAtIEtleS12YWx1ZSBwYWlycyBvZiB0YWdzIHRvIGFwcGx5XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFwcGx5IHNwZWNpZmljIHRhZ3MgdG8gYSByZXNvdXJjZVxuICogdGFnUmVzb3VyY2UobXlWcGMsIHtcbiAqICAgXCJmamFsbDpvcGVyYXRpb25zOnBvb2xcIjogXCJwb29sLTEyM1wiXG4gKiB9KTtcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdGFnUmVzb3VyY2UoXG4gIHJlc291cmNlOiBJQ29uc3RydWN0LFxuICB0YWdzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9XG4pOiB2b2lkIHtcbiAgT2JqZWN0LmVudHJpZXModGFncykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgVGFncy5vZihyZXNvdXJjZSkuYWRkKGtleSwgdmFsdWUpO1xuICB9KTtcbn1cbiJdfQ==