@fjall/components-infrastructure 0.76.0 → 0.77.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/app.d.ts +93 -12
- package/dist/lib/app.js +116 -48
- package/dist/lib/aspects/resourceInventory.d.ts +41 -0
- package/dist/lib/aspects/resourceInventory.js +56 -0
- package/dist/lib/config/audit.d.ts +18 -0
- package/dist/lib/config/audit.js +22 -0
- package/dist/lib/config/aws/ecrDefaultImage.js +3 -3
- package/dist/lib/patterns/aws/auditRole.d.ts +44 -0
- package/dist/lib/patterns/aws/auditRole.js +58 -0
- package/dist/lib/patterns/aws/basicApp.d.ts +0 -0
- package/dist/lib/patterns/aws/basicApp.js +150 -0
- package/dist/lib/patterns/aws/compute.d.ts +10 -4
- package/dist/lib/patterns/aws/compute.js +5 -5
- package/dist/lib/patterns/aws/database.d.ts +24 -30
- package/dist/lib/patterns/aws/database.js +93 -14
- package/dist/lib/patterns/aws/ec2.d.ts +43 -0
- package/dist/lib/patterns/aws/ec2.js +123 -0
- package/dist/lib/patterns/aws/freeTierApp.d.ts +44 -0
- package/dist/lib/patterns/aws/freeTierApp.js +83 -0
- package/dist/lib/patterns/aws/index.d.ts +1 -0
- package/dist/lib/patterns/aws/index.js +2 -1
- package/dist/lib/patterns/aws/network.d.ts +75 -0
- package/dist/lib/patterns/aws/network.js +99 -0
- package/dist/lib/patterns/aws/spotInstanceApp.d.ts +45 -0
- package/dist/lib/patterns/aws/spotInstanceApp.js +85 -0
- package/dist/lib/resources/aws/audit/auditRole.d.ts +32 -0
- package/dist/lib/resources/aws/audit/auditRole.js +46 -0
- package/dist/lib/resources/aws/base/awsStack.js +1 -4
- package/dist/lib/resources/aws/compute/ec2.d.ts +1 -0
- package/dist/lib/resources/aws/compute/ec2.js +5 -3
- package/dist/lib/resources/aws/compute/ecs.d.ts +1 -1
- package/dist/lib/resources/aws/compute/ecs.js +6 -2
- package/dist/lib/resources/aws/compute/ecsFreeTier.d.ts +1 -1
- package/dist/lib/resources/aws/compute/ecsFreeTier.js +15 -4
- package/dist/lib/resources/aws/compute/ecsSpot.d.ts +1 -1
- package/dist/lib/resources/aws/compute/ecsSpot.js +17 -4
- package/dist/lib/resources/aws/compute/lambda.d.ts +12 -7
- package/dist/lib/resources/aws/compute/lambda.js +27 -19
- package/dist/lib/resources/aws/database/databaseFreeTier.d.ts +15 -0
- package/dist/lib/resources/aws/database/databaseFreeTier.js +29 -0
- package/dist/lib/resources/aws/database/rdsAurora.d.ts +2 -0
- package/dist/lib/resources/aws/database/rdsAurora.js +36 -37
- package/dist/lib/resources/aws/database/rdsAuroraGlobal.d.ts +2 -0
- package/dist/lib/resources/aws/database/rdsAuroraGlobal.js +7 -6
- package/dist/lib/resources/aws/database/rdsFreeTier.d.ts +37 -0
- package/dist/lib/resources/aws/database/rdsFreeTier.js +84 -0
- package/dist/lib/resources/aws/database/rdsInstance.d.ts +3 -0
- package/dist/lib/resources/aws/database/rdsInstance.js +117 -33
- package/dist/lib/resources/aws/networking/index.d.ts +0 -1
- package/dist/lib/resources/aws/networking/index.js +1 -2
- package/dist/lib/resources/aws/networking/vpc.d.ts +40 -21
- package/dist/lib/resources/aws/networking/vpc.js +185 -36
- package/dist/lib/resources/aws/networking/vpcEndpoint.d.ts +2 -2
- package/dist/lib/resources/aws/networking/vpcEndpoint.js +1 -1
- package/dist/lib/resources/aws/utilities/customResource.d.ts +8 -6
- package/dist/lib/resources/aws/utilities/customResource.js +35 -11
- package/dist/lib/utils/getCidr.d.ts +8 -0
- package/dist/lib/utils/getCidr.js +40 -0
- package/dist/lib/utils/index.d.ts +1 -0
- package/dist/lib/utils/index.js +2 -1
- package/dist/lib/utils/resourceNaming.d.ts +41 -0
- package/dist/lib/utils/resourceNaming.js +77 -0
- package/package.json +3 -3
|
@@ -1,56 +1,215 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Vpc =
|
|
3
|
+
exports.Vpc = void 0;
|
|
4
4
|
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
5
5
|
const ec2 = require("aws-cdk-lib/aws-ec2");
|
|
6
|
+
const s3 = require("aws-cdk-lib/aws-s3");
|
|
6
7
|
const logGroup_1 = require("../logging/logGroup");
|
|
7
|
-
class VpcFactory {
|
|
8
|
-
static build(id, props) {
|
|
9
|
-
return (app, scope) => {
|
|
10
|
-
const vpcProps = {
|
|
11
|
-
...props,
|
|
12
|
-
...{
|
|
13
|
-
vpcName: `${app.getDefaultNetworkStack().getStackName()}/${id}`
|
|
14
|
-
}
|
|
15
|
-
};
|
|
16
|
-
return new Vpc(scope, id, vpcProps);
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
exports.VpcFactory = VpcFactory;
|
|
21
8
|
class Vpc extends ec2.Vpc {
|
|
22
9
|
constructor(scope, id, props) {
|
|
10
|
+
const { maxAzs: maxAzsFromProps, ...restProps } = props ?? {};
|
|
11
|
+
const maxAzs = maxAzsFromProps ?? 3;
|
|
12
|
+
const natGateways = Vpc.resolveNatGateways(props);
|
|
23
13
|
super(scope, `vpc-${id}`, {
|
|
24
|
-
...
|
|
14
|
+
...restProps,
|
|
25
15
|
vpcName: `vpc-${id}`,
|
|
26
|
-
|
|
16
|
+
natGateways,
|
|
17
|
+
availabilityZones: Vpc.availabilityZones(scope, maxAzs),
|
|
27
18
|
flowLogs: Vpc.flowLogs(scope, id, props),
|
|
28
|
-
ipAddresses: Vpc.ipAddresses(scope, id, props)
|
|
19
|
+
ipAddresses: Vpc.ipAddresses(scope, id, props),
|
|
20
|
+
gatewayEndpoints: Vpc.gatewayEndpoints(props)
|
|
29
21
|
});
|
|
22
|
+
this.gatewayEndpoints = [];
|
|
23
|
+
this.interfaceEndpoints = [];
|
|
24
|
+
const hasNatGateways = natGateways !== 0;
|
|
25
|
+
this.addInterfaceEndpoints(id, props, hasNatGateways);
|
|
30
26
|
}
|
|
31
|
-
static
|
|
32
|
-
|
|
27
|
+
static gatewayEndpoints(props) {
|
|
28
|
+
if (props?.endpointsConfig === false) {
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
const gatewayConfig = props?.endpointsConfig?.gateway;
|
|
32
|
+
if (gatewayConfig === false) {
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
35
|
+
const enableS3 = gatewayConfig?.s3 ?? true;
|
|
36
|
+
const enableDynamodb = gatewayConfig?.dynamodb ?? true;
|
|
37
|
+
if (!enableS3 && !enableDynamodb) {
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
const endpoints = {};
|
|
41
|
+
if (enableS3) {
|
|
42
|
+
endpoints.S3 = { service: ec2.GatewayVpcEndpointAwsService.S3 };
|
|
43
|
+
}
|
|
44
|
+
if (enableDynamodb) {
|
|
45
|
+
endpoints.DynamoDB = {
|
|
46
|
+
service: ec2.GatewayVpcEndpointAwsService.DYNAMODB
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
return endpoints;
|
|
50
|
+
}
|
|
51
|
+
addInterfaceEndpoints(id, props, hasNatGateways) {
|
|
52
|
+
if (props?.endpointsConfig === false) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const interfaceConfig = props?.endpointsConfig?.interface;
|
|
56
|
+
if (interfaceConfig === false || interfaceConfig === undefined) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const subnetType = hasNatGateways
|
|
60
|
+
? ec2.SubnetType.PRIVATE_WITH_EGRESS
|
|
61
|
+
: ec2.SubnetType.PRIVATE_ISOLATED;
|
|
62
|
+
const subnetSelection = { subnetType };
|
|
63
|
+
if (interfaceConfig.ecr) {
|
|
64
|
+
this.interfaceEndpoints.push(new ec2.InterfaceVpcEndpoint(this, `${id}EcrDocker`, {
|
|
65
|
+
vpc: this,
|
|
66
|
+
service: ec2.InterfaceVpcEndpointAwsService.ECR_DOCKER,
|
|
67
|
+
privateDnsEnabled: true,
|
|
68
|
+
subnets: subnetSelection
|
|
69
|
+
}));
|
|
70
|
+
this.interfaceEndpoints.push(new ec2.InterfaceVpcEndpoint(this, `${id}EcrApi`, {
|
|
71
|
+
vpc: this,
|
|
72
|
+
service: ec2.InterfaceVpcEndpointAwsService.ECR,
|
|
73
|
+
privateDnsEnabled: true,
|
|
74
|
+
subnets: subnetSelection
|
|
75
|
+
}));
|
|
76
|
+
}
|
|
77
|
+
if (interfaceConfig.secretsManager) {
|
|
78
|
+
this.interfaceEndpoints.push(new ec2.InterfaceVpcEndpoint(this, `${id}SecretsManager`, {
|
|
79
|
+
vpc: this,
|
|
80
|
+
service: ec2.InterfaceVpcEndpointAwsService.SECRETS_MANAGER,
|
|
81
|
+
privateDnsEnabled: true,
|
|
82
|
+
subnets: subnetSelection
|
|
83
|
+
}));
|
|
84
|
+
}
|
|
85
|
+
if (interfaceConfig.kms) {
|
|
86
|
+
this.interfaceEndpoints.push(new ec2.InterfaceVpcEndpoint(this, `${id}Kms`, {
|
|
87
|
+
vpc: this,
|
|
88
|
+
service: ec2.InterfaceVpcEndpointAwsService.KMS,
|
|
89
|
+
privateDnsEnabled: true,
|
|
90
|
+
subnets: subnetSelection
|
|
91
|
+
}));
|
|
92
|
+
}
|
|
93
|
+
if (interfaceConfig.cloudwatchLogs) {
|
|
94
|
+
this.interfaceEndpoints.push(new ec2.InterfaceVpcEndpoint(this, `${id}CloudWatchLogs`, {
|
|
95
|
+
vpc: this,
|
|
96
|
+
service: ec2.InterfaceVpcEndpointAwsService.CLOUDWATCH_LOGS,
|
|
97
|
+
privateDnsEnabled: true,
|
|
98
|
+
subnets: subnetSelection
|
|
99
|
+
}));
|
|
100
|
+
}
|
|
101
|
+
if (interfaceConfig.ssm) {
|
|
102
|
+
this.interfaceEndpoints.push(new ec2.InterfaceVpcEndpoint(this, `${id}Ssm`, {
|
|
103
|
+
vpc: this,
|
|
104
|
+
service: ec2.InterfaceVpcEndpointAwsService.SSM,
|
|
105
|
+
privateDnsEnabled: true,
|
|
106
|
+
subnets: subnetSelection
|
|
107
|
+
}));
|
|
108
|
+
this.interfaceEndpoints.push(new ec2.InterfaceVpcEndpoint(this, `${id}SsmMessages`, {
|
|
109
|
+
vpc: this,
|
|
110
|
+
service: ec2.InterfaceVpcEndpointAwsService.SSM_MESSAGES,
|
|
111
|
+
privateDnsEnabled: true,
|
|
112
|
+
subnets: subnetSelection
|
|
113
|
+
}));
|
|
114
|
+
}
|
|
115
|
+
if (interfaceConfig.sts) {
|
|
116
|
+
this.interfaceEndpoints.push(new ec2.InterfaceVpcEndpoint(this, `${id}Sts`, {
|
|
117
|
+
vpc: this,
|
|
118
|
+
service: ec2.InterfaceVpcEndpointAwsService.STS,
|
|
119
|
+
privateDnsEnabled: true,
|
|
120
|
+
subnets: subnetSelection
|
|
121
|
+
}));
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
static resolveNatGateways(props) {
|
|
125
|
+
const natConfig = props?.natGatewayConfig;
|
|
126
|
+
if (natConfig === undefined) {
|
|
127
|
+
return undefined;
|
|
128
|
+
}
|
|
129
|
+
if (natConfig === false) {
|
|
130
|
+
return 0;
|
|
131
|
+
}
|
|
132
|
+
return natConfig.count ?? 1;
|
|
133
|
+
}
|
|
134
|
+
static availabilityZones(scope, maxAzs = 3) {
|
|
135
|
+
return aws_cdk_lib_1.Stack.of(scope).availabilityZones.slice(0, maxAzs);
|
|
33
136
|
}
|
|
34
137
|
static flowLogs(scope, id, props) {
|
|
35
|
-
if (
|
|
138
|
+
if (props?.flowLogConfig === false) {
|
|
36
139
|
return undefined;
|
|
140
|
+
}
|
|
141
|
+
if (props?.flowLogConfig === undefined) {
|
|
142
|
+
if (!props?.accountId) {
|
|
143
|
+
return undefined;
|
|
144
|
+
}
|
|
145
|
+
return {
|
|
146
|
+
[`${id}VpcFlowLogs`]: {
|
|
147
|
+
destination: ec2.FlowLogDestination.toCloudWatchLogs(new logGroup_1.LogGroup(scope, `${id}FlowLogGroup`, {
|
|
148
|
+
logGroupName: `/vpc/flowlogs/vpc-${id}/`,
|
|
149
|
+
removalPolicy: aws_cdk_lib_1.RemovalPolicy.DESTROY
|
|
150
|
+
}))
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
const config = props.flowLogConfig;
|
|
155
|
+
const trafficType = Vpc.resolveTrafficType(config.trafficType);
|
|
156
|
+
if (config.destination === "s3") {
|
|
157
|
+
const bucket = new s3.Bucket(scope, `${id}FlowLogBucket`, {
|
|
158
|
+
bucketName: `vpc-flowlogs-${id.toLowerCase()}-${aws_cdk_lib_1.Stack.of(scope).account}`,
|
|
159
|
+
removalPolicy: aws_cdk_lib_1.RemovalPolicy.RETAIN,
|
|
160
|
+
encryption: s3.BucketEncryption.S3_MANAGED,
|
|
161
|
+
blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL,
|
|
162
|
+
lifecycleRules: config.retentionDays
|
|
163
|
+
? [{ expiration: aws_cdk_lib_1.Duration.days(config.retentionDays), enabled: true }]
|
|
164
|
+
: undefined
|
|
165
|
+
});
|
|
166
|
+
return {
|
|
167
|
+
[`${id}VpcFlowLogs`]: {
|
|
168
|
+
destination: ec2.FlowLogDestination.toS3(bucket),
|
|
169
|
+
trafficType
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
const retentionDays = config.retentionDays ?? 14;
|
|
37
174
|
return {
|
|
38
175
|
[`${id}VpcFlowLogs`]: {
|
|
39
176
|
destination: ec2.FlowLogDestination.toCloudWatchLogs(new logGroup_1.LogGroup(scope, `${id}FlowLogGroup`, {
|
|
40
177
|
logGroupName: `/vpc/flowlogs/vpc-${id}/`,
|
|
41
|
-
removalPolicy: aws_cdk_lib_1.RemovalPolicy.DESTROY
|
|
42
|
-
|
|
178
|
+
removalPolicy: aws_cdk_lib_1.RemovalPolicy.DESTROY,
|
|
179
|
+
retention: Vpc.daysToRetention(retentionDays)
|
|
180
|
+
})),
|
|
181
|
+
trafficType
|
|
43
182
|
}
|
|
44
183
|
};
|
|
45
184
|
}
|
|
185
|
+
static daysToRetention(days) {
|
|
186
|
+
const validRetentions = [
|
|
187
|
+
1, 3, 5, 7, 14, 30, 60, 90, 120, 150, 180, 365, 400, 545, 731, 1096, 1827,
|
|
188
|
+
2192, 2557, 2922, 3288, 3653
|
|
189
|
+
];
|
|
190
|
+
return validRetentions.find((r) => r >= days) ?? 3653;
|
|
191
|
+
}
|
|
192
|
+
static resolveTrafficType(trafficType) {
|
|
193
|
+
switch (trafficType) {
|
|
194
|
+
case "ACCEPT":
|
|
195
|
+
return ec2.FlowLogTrafficType.ACCEPT;
|
|
196
|
+
case "REJECT":
|
|
197
|
+
return ec2.FlowLogTrafficType.REJECT;
|
|
198
|
+
case "ALL":
|
|
199
|
+
default:
|
|
200
|
+
return ec2.FlowLogTrafficType.ALL;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
46
203
|
static ipAddresses(scope, id, props) {
|
|
47
204
|
if (!props?.accountId || !props?.ipv4IpamPoolId) {
|
|
48
205
|
return undefined;
|
|
49
206
|
}
|
|
207
|
+
const vpcCidrMask = props.vpcCidrMask ?? 20;
|
|
208
|
+
const subnetCidrMask = props.subnetCidrMask ?? 23;
|
|
50
209
|
return ec2.IpAddresses.awsIpamAllocation({
|
|
51
210
|
ipv4IpamPoolId: props.ipv4IpamPoolId,
|
|
52
|
-
ipv4NetmaskLength:
|
|
53
|
-
defaultSubnetIpv4NetmaskLength:
|
|
211
|
+
ipv4NetmaskLength: vpcCidrMask,
|
|
212
|
+
defaultSubnetIpv4NetmaskLength: subnetCidrMask
|
|
54
213
|
});
|
|
55
214
|
}
|
|
56
215
|
static build(id, props) {
|
|
@@ -58,16 +217,6 @@ class Vpc extends ec2.Vpc {
|
|
|
58
217
|
return new this(sb.getStack(), id, props);
|
|
59
218
|
};
|
|
60
219
|
}
|
|
61
|
-
/**
|
|
62
|
-
* Imports a pre-existing VPC Resource into your Stack
|
|
63
|
-
*
|
|
64
|
-
* Before using an import method ensure you have set the account and region props
|
|
65
|
-
* when creating your AwsStack.
|
|
66
|
-
*
|
|
67
|
-
* @param id
|
|
68
|
-
* @param vpcStackName
|
|
69
|
-
* @returns
|
|
70
|
-
*/
|
|
71
220
|
static import(id, vpcStackName) {
|
|
72
221
|
return (sb) => {
|
|
73
222
|
return ec2.Vpc.fromLookup(sb.getStack(), id, {
|
|
@@ -77,4 +226,4 @@ class Vpc extends ec2.Vpc {
|
|
|
77
226
|
}
|
|
78
227
|
}
|
|
79
228
|
exports.Vpc = Vpc;
|
|
80
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnBjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3MvbmV0d29ya2luZy92cGMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsNkNBQW1EO0FBQ25ELDJDQUEyQztBQUkzQyxrREFBK0M7QUFTL0MsTUFBYSxVQUFVO0lBQ3JCLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBVSxFQUFFLEtBQWU7UUFDdEMsT0FBTyxDQUFDLEdBQVEsRUFBRSxLQUFnQixFQUFFLEVBQUU7WUFDcEMsTUFBTSxRQUFRLEdBQUc7Z0JBQ2YsR0FBRyxLQUFLO2dCQUNSLEdBQUc7b0JBQ0QsT0FBTyxFQUFFLEdBQUcsR0FBRyxDQUFDLHNCQUFzQixFQUFFLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxFQUFFO2lCQUNoRTthQUNGLENBQUM7WUFDRixPQUFPLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBWkQsZ0NBWUM7QUFFRCxNQUFhLEdBQUksU0FBUSxHQUFHLENBQUMsR0FBRztJQUM5QixZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWdCO1FBQ3hELEtBQUssQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRTtZQUN4QixHQUFHLEtBQUs7WUFDUixPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDcEIsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQztZQUMvQyxRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQztZQUN4QyxXQUFXLEVBQUUsR0FBRyxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQztTQUMvQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEtBQWdCO1FBQ3ZDLE9BQU8sbUJBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFnQjtRQUM1RCxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVM7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUVqRCxPQUFPO1lBQ0wsQ0FBQyxHQUFHLEVBQUUsYUFBYSxDQUFDLEVBQUU7Z0JBQ3BCLFdBQVcsRUFBRSxHQUFHLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLENBQ2xELElBQUksbUJBQVEsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLGNBQWMsRUFBRTtvQkFDdkMsWUFBWSxFQUFFLHFCQUFxQixFQUFFLEdBQUc7b0JBQ3hDLGFBQWEsRUFBRSwyQkFBYSxDQUFDLE9BQU87aUJBQ3JDLENBQUMsQ0FDSDthQUNGO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWdCO1FBQy9ELElBQUksQ0FBQyxLQUFLLEVBQUUsU0FBUyxJQUFJLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRSxDQUFDO1lBQ2hELE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFFRCxPQUFPLEdBQUcsQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUM7WUFDdkMsY0FBYyxFQUFFLEtBQUssQ0FBQyxjQUFjO1lBQ3BDLGlCQUFpQixFQUFFLEVBQUU7WUFDckIsOEJBQThCLEVBQUUsRUFBRTtTQUNuQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFVLEVBQUUsS0FBZ0I7UUFDdkMsT0FBTyxDQUFDLEVBQWdCLEVBQUUsRUFBRTtZQUMxQixPQUFPLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUNEOzs7Ozs7Ozs7T0FTRztJQUNILE1BQU0sQ0FBQyxNQUFNLENBQ1gsRUFBVSxFQUNWLFlBQW9CO1FBRXBCLE9BQU8sQ0FBQyxFQUFnQixFQUFFLEVBQUU7WUFDMUIsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFO2dCQUMzQyxPQUFPLEVBQUUsR0FBRyxZQUFZLElBQUksRUFBRSxFQUFFO2FBQ2pDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQW5FRCxrQkFtRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBSZW1vdmFsUG9saWN5LCBTdGFjayB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0ICogYXMgZWMyIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5cbmltcG9ydCB0eXBlIEFwcCBmcm9tIFwiLi4vLi4vLi4vYXBwXCI7XG5pbXBvcnQgeyB0eXBlIFN0YWNrQnVpbGRlciB9IGZyb20gXCIuLi9iYXNlL2F3c1N0YWNrXCI7XG5pbXBvcnQgeyBMb2dHcm91cCB9IGZyb20gXCIuLi9sb2dnaW5nL2xvZ0dyb3VwXCI7XG5cbmludGVyZmFjZSBWcGNQcm9wcyBleHRlbmRzIGVjMi5WcGNQcm9wcyB7XG4gIHJlZ2lvbj86IHN0cmluZztcbiAgYWNjb3VudElkPzogc3RyaW5nO1xuICBhdmFpbGFiaWxpdHlab25lcz86IHN0cmluZ1tdO1xuICBpcHY0SXBhbVBvb2xJZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFZwY0ZhY3Rvcnkge1xuICBzdGF0aWMgYnVpbGQoaWQ6IHN0cmluZywgcHJvcHM6IFZwY1Byb3BzKSB7XG4gICAgcmV0dXJuIChhcHA6IEFwcCwgc2NvcGU6IENvbnN0cnVjdCkgPT4ge1xuICAgICAgY29uc3QgdnBjUHJvcHMgPSB7XG4gICAgICAgIC4uLnByb3BzLFxuICAgICAgICAuLi57XG4gICAgICAgICAgdnBjTmFtZTogYCR7YXBwLmdldERlZmF1bHROZXR3b3JrU3RhY2soKS5nZXRTdGFja05hbWUoKX0vJHtpZH1gXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4gbmV3IFZwYyhzY29wZSwgaWQsIHZwY1Byb3BzKTtcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBWcGMgZXh0ZW5kcyBlYzIuVnBjIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM/OiBWcGNQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBgdnBjLSR7aWR9YCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICB2cGNOYW1lOiBgdnBjLSR7aWR9YCxcbiAgICAgIGF2YWlsYWJpbGl0eVpvbmVzOiBWcGMuYXZhaWxhYmlsaXR5Wm9uZXMoc2NvcGUpLFxuICAgICAgZmxvd0xvZ3M6IFZwYy5mbG93TG9ncyhzY29wZSwgaWQsIHByb3BzKSxcbiAgICAgIGlwQWRkcmVzc2VzOiBWcGMuaXBBZGRyZXNzZXMoc2NvcGUsIGlkLCBwcm9wcylcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBhdmFpbGFiaWxpdHlab25lcyhzY29wZTogQ29uc3RydWN0KSB7XG4gICAgcmV0dXJuIFN0YWNrLm9mKHNjb3BlKS5hdmFpbGFiaWxpdHlab25lcy5zbGljZSgwLCAzKTtcbiAgfVxuXG4gIHN0YXRpYyBmbG93TG9ncyhzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wcz86IFZwY1Byb3BzKSB7XG4gICAgaWYgKCFwcm9wcyB8fCAhcHJvcHMuYWNjb3VudElkKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIFtgJHtpZH1WcGNGbG93TG9nc2BdOiB7XG4gICAgICAgIGRlc3RpbmF0aW9uOiBlYzIuRmxvd0xvZ0Rlc3RpbmF0aW9uLnRvQ2xvdWRXYXRjaExvZ3MoXG4gICAgICAgICAgbmV3IExvZ0dyb3VwKHNjb3BlLCBgJHtpZH1GbG93TG9nR3JvdXBgLCB7XG4gICAgICAgICAgICBsb2dHcm91cE5hbWU6IGAvdnBjL2Zsb3dsb2dzL3ZwYy0ke2lkfS9gLFxuICAgICAgICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgaXBBZGRyZXNzZXMoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM/OiBWcGNQcm9wcykge1xuICAgIGlmICghcHJvcHM/LmFjY291bnRJZCB8fCAhcHJvcHM/LmlwdjRJcGFtUG9vbElkKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiBlYzIuSXBBZGRyZXNzZXMuYXdzSXBhbUFsbG9jYXRpb24oe1xuICAgICAgaXB2NElwYW1Qb29sSWQ6IHByb3BzLmlwdjRJcGFtUG9vbElkLFxuICAgICAgaXB2NE5ldG1hc2tMZW5ndGg6IDIwLFxuICAgICAgZGVmYXVsdFN1Ym5ldElwdjROZXRtYXNrTGVuZ3RoOiAyM1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGJ1aWxkKGlkOiBzdHJpbmcsIHByb3BzPzogVnBjUHJvcHMpOiAoc2I6IFN0YWNrQnVpbGRlcikgPT4gQ29uc3RydWN0IHtcbiAgICByZXR1cm4gKHNiOiBTdGFja0J1aWxkZXIpID0+IHtcbiAgICAgIHJldHVybiBuZXcgdGhpcyhzYi5nZXRTdGFjaygpLCBpZCwgcHJvcHMpO1xuICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIEltcG9ydHMgYSBwcmUtZXhpc3RpbmcgVlBDIFJlc291cmNlIGludG8geW91ciBTdGFja1xuICAgKlxuICAgKiBCZWZvcmUgdXNpbmcgYW4gaW1wb3J0IG1ldGhvZCBlbnN1cmUgeW91IGhhdmUgc2V0IHRoZSBhY2NvdW50IGFuZCByZWdpb24gcHJvcHNcbiAgICogIHdoZW4gY3JlYXRpbmcgeW91ciBBd3NTdGFjay5cbiAgICpcbiAgICogQHBhcmFtIGlkXG4gICAqIEBwYXJhbSB2cGNTdGFja05hbWVcbiAgICogQHJldHVybnNcbiAgICovXG4gIHN0YXRpYyBpbXBvcnQoXG4gICAgaWQ6IHN0cmluZyxcbiAgICB2cGNTdGFja05hbWU6IHN0cmluZ1xuICApOiAoc2I6IFN0YWNrQnVpbGRlcikgPT4gQ29uc3RydWN0IHtcbiAgICByZXR1cm4gKHNiOiBTdGFja0J1aWxkZXIpID0+IHtcbiAgICAgIHJldHVybiBlYzIuVnBjLmZyb21Mb29rdXAoc2IuZ2V0U3RhY2soKSwgaWQsIHtcbiAgICAgICAgdnBjTmFtZTogYCR7dnBjU3RhY2tOYW1lfS8ke2lkfWBcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
|
229
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnBjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3MvbmV0d29ya2luZy92cGMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsNkNBQTZEO0FBQzdELDJDQUEyQztBQUMzQyx5Q0FBeUM7QUFFekMsa0RBQStDO0FBNEMvQyxNQUFhLEdBQUksU0FBUSxHQUFHLENBQUMsR0FBRztJQUk5QixZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWdCO1FBQ3hELE1BQU0sRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLEdBQUcsU0FBUyxFQUFFLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUM5RCxNQUFNLE1BQU0sR0FBRyxlQUFlLElBQUksQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVsRCxLQUFLLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUU7WUFDeEIsR0FBRyxTQUFTO1lBQ1osT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQ3BCLFdBQVc7WUFDWCxpQkFBaUIsRUFBRSxHQUFHLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQztZQUN2RCxRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQztZQUN4QyxXQUFXLEVBQUUsR0FBRyxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQztZQUM5QyxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDO1NBQzlDLENBQUMsQ0FBQztRQWhCVyxxQkFBZ0IsR0FBNkIsRUFBRSxDQUFDO1FBQ2hELHVCQUFrQixHQUErQixFQUFFLENBQUM7UUFpQmxFLE1BQU0sY0FBYyxHQUFHLFdBQVcsS0FBSyxDQUFDLENBQUM7UUFD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YztZQUNwQyxpQkFBaUIsRUFBRSxXQUFXO1lBQzlCLDhCQUE4QixFQUFFLGNBQWM7U0FDL0MsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBVSxFQUFFLEtBQWdCO1FBQ3ZDLE9BQU8sQ0FBQyxFQUFnQixFQUFFLEVBQUU7WUFDMUIsT0FBTyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLENBQUMsTUFBTSxDQUNYLEVBQVUsRUFDVixZQUFvQjtRQUVwQixPQUFPLENBQUMsRUFBZ0IsRUFBRSxFQUFFO1lBQzFCLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRTtnQkFDM0MsT0FBTyxFQUFFLEdBQUcsWUFBWSxJQUFJLEVBQUUsRUFBRTthQUNqQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFuU0Qsa0JBbVNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgRHVyYXRpb24sIFJlbW92YWxQb2xpY3ksIFN0YWNrIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgKiBhcyBlYzIgZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcbmltcG9ydCAqIGFzIHMzIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczNcIjtcbmltcG9ydCB7IHR5cGUgU3RhY2tCdWlsZGVyIH0gZnJvbSBcIi4uL2Jhc2UvYXdzU3RhY2tcIjtcbmltcG9ydCB7IExvZ0dyb3VwIH0gZnJvbSBcIi4uL2xvZ2dpbmcvbG9nR3JvdXBcIjtcblxuZXhwb3J0IGludGVyZmFjZSBWcGNGbG93TG9nQ29uZmlnIHtcbiAgZGVzdGluYXRpb24/OiBcImNsb3Vkd2F0Y2hcIiB8IFwiczNcIjtcbiAgcmV0ZW50aW9uRGF5cz86IG51bWJlcjtcbiAgdHJhZmZpY1R5cGU/OiBcIkFMTFwiIHwgXCJBQ0NFUFRcIiB8IFwiUkVKRUNUXCI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVnBjTmF0Q29uZmlnIHtcbiAgY291bnQ/OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBHYXRld2F5RW5kcG9pbnRzIHtcbiAgczM/OiBib29sZWFuO1xuICBkeW5hbW9kYj86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBJbnRlcmZhY2VFbmRwb2ludHMge1xuICBlY3I/OiBib29sZWFuO1xuICBzZWNyZXRzTWFuYWdlcj86IGJvb2xlYW47XG4gIGttcz86IGJvb2xlYW47XG4gIGNsb3Vkd2F0Y2hMb2dzPzogYm9vbGVhbjtcbiAgc3NtPzogYm9vbGVhbjtcbiAgc3RzPzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEVuZHBvaW50c0NvbmZpZyB7XG4gIGdhdGV3YXk/OiBHYXRld2F5RW5kcG9pbnRzIHwgZmFsc2U7XG4gIGludGVyZmFjZT86IEludGVyZmFjZUVuZHBvaW50cyB8IGZhbHNlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZwY1Byb3BzIGV4dGVuZHMgZWMyLlZwY1Byb3BzIHtcbiAgcmVnaW9uPzogc3RyaW5nO1xuICBhY2NvdW50SWQ/OiBzdHJpbmc7XG4gIGF2YWlsYWJpbGl0eVpvbmVzPzogc3RyaW5nW107XG4gIGlwdjRJcGFtUG9vbElkPzogc3RyaW5nO1xuICBtYXhBenM/OiBudW1iZXI7XG4gIG5hdEdhdGV3YXlDb25maWc/OiBWcGNOYXRDb25maWcgfCBmYWxzZTtcbiAgZmxvd0xvZ0NvbmZpZz86IFZwY0Zsb3dMb2dDb25maWcgfCBmYWxzZTtcbiAgZW5kcG9pbnRzQ29uZmlnPzogRW5kcG9pbnRzQ29uZmlnIHwgZmFsc2U7XG4gIHZwY0NpZHJNYXNrPzogbnVtYmVyO1xuICBzdWJuZXRDaWRyTWFzaz86IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIFZwYyBleHRlbmRzIGVjMi5WcGMge1xuICBwdWJsaWMgcmVhZG9ubHkgZ2F0ZXdheUVuZHBvaW50czogZWMyLkdhdGV3YXlWcGNFbmRwb2ludFtdID0gW107XG4gIHB1YmxpYyByZWFkb25seSBpbnRlcmZhY2VFbmRwb2ludHM6IGVjMi5JbnRlcmZhY2VWcGNFbmRwb2ludFtdID0gW107XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM/OiBWcGNQcm9wcykge1xuICAgIGNvbnN0IHsgbWF4QXpzOiBtYXhBenNGcm9tUHJvcHMsIC4uLnJlc3RQcm9wcyB9ID0gcHJvcHMgPz8ge307XG4gICAgY29uc3QgbWF4QXpzID0gbWF4QXpzRnJvbVByb3BzID8/IDM7XG4gICAgY29uc3QgbmF0R2F0ZXdheXMgPSBWcGMucmVzb2x2ZU5hdEdhdGV3YXlzKHByb3BzKTtcblxuICAgIHN1cGVyKHNjb3BlLCBgdnBjLSR7aWR9YCwge1xuICAgICAgLi4ucmVzdFByb3BzLFxuICAgICAgdnBjTmFtZTogYHZwYy0ke2lkfWAsXG4gICAgICBuYXRHYXRld2F5cyxcbiAgICAgIGF2YWlsYWJpbGl0eVpvbmVzOiBWcGMuYXZhaWxhYmlsaXR5Wm9uZXMoc2NvcGUsIG1heEF6cyksXG4gICAgICBmbG93TG9nczogVnBjLmZsb3dMb2dzKHNjb3BlLCBpZCwgcHJvcHMpLFxuICAgICAgaXBBZGRyZXNzZXM6IFZwYy5pcEFkZHJlc3NlcyhzY29wZSwgaWQsIHByb3BzKSxcbiAgICAgIGdhdGV3YXlFbmRwb2ludHM6IFZwYy5nYXRld2F5RW5kcG9pbnRzKHByb3BzKVxuICAgIH0pO1xuXG4gICAgY29uc3QgaGFzTmF0R2F0ZXdheXMgPSBuYXRHYXRld2F5cyAhPT0gMDtcbiAgICB0aGlzLmFkZEludGVyZmFjZUVuZHBvaW50cyhpZCwgcHJvcHMsIGhhc05hdEdhdGV3YXlzKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdhdGV3YXlFbmRwb2ludHMoXG4gICAgcHJvcHM/OiBWcGNQcm9wc1xuICApOiBSZWNvcmQ8c3RyaW5nLCBlYzIuR2F0ZXdheVZwY0VuZHBvaW50T3B0aW9ucz4gfCB1bmRlZmluZWQge1xuICAgIGlmIChwcm9wcz8uZW5kcG9pbnRzQ29uZmlnID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBnYXRld2F5Q29uZmlnID0gcHJvcHM/LmVuZHBvaW50c0NvbmZpZz8uZ2F0ZXdheTtcbiAgICBpZiAoZ2F0ZXdheUNvbmZpZyA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgZW5hYmxlUzMgPSBnYXRld2F5Q29uZmlnPy5zMyA/PyB0cnVlO1xuICAgIGNvbnN0IGVuYWJsZUR5bmFtb2RiID0gZ2F0ZXdheUNvbmZpZz8uZHluYW1vZGIgPz8gdHJ1ZTtcblxuICAgIGlmICghZW5hYmxlUzMgJiYgIWVuYWJsZUR5bmFtb2RiKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGVuZHBvaW50czogUmVjb3JkPHN0cmluZywgZWMyLkdhdGV3YXlWcGNFbmRwb2ludE9wdGlvbnM+ID0ge307XG5cbiAgICBpZiAoZW5hYmxlUzMpIHtcbiAgICAgIGVuZHBvaW50cy5TMyA9IHsgc2VydmljZTogZWMyLkdhdGV3YXlWcGNFbmRwb2ludEF3c1NlcnZpY2UuUzMgfTtcbiAgICB9XG4gICAgaWYgKGVuYWJsZUR5bmFtb2RiKSB7XG4gICAgICBlbmRwb2ludHMuRHluYW1vREIgPSB7XG4gICAgICAgIHNlcnZpY2U6IGVjMi5HYXRld2F5VnBjRW5kcG9pbnRBd3NTZXJ2aWNlLkRZTkFNT0RCXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBlbmRwb2ludHM7XG4gIH1cblxuICBwcml2YXRlIGFkZEludGVyZmFjZUVuZHBvaW50cyhcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBWcGNQcm9wcyB8IHVuZGVmaW5lZCxcbiAgICBoYXNOYXRHYXRld2F5czogYm9vbGVhblxuICApIHtcbiAgICBpZiAocHJvcHM/LmVuZHBvaW50c0NvbmZpZyA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpbnRlcmZhY2VDb25maWcgPSBwcm9wcz8uZW5kcG9pbnRzQ29uZmlnPy5pbnRlcmZhY2U7XG4gICAgaWYgKGludGVyZmFjZUNvbmZpZyA9PT0gZmFsc2UgfHwgaW50ZXJmYWNlQ29uZmlnID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzdWJuZXRUeXBlID0gaGFzTmF0R2F0ZXdheXNcbiAgICAgID8gZWMyLlN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX0VHUkVTU1xuICAgICAgOiBlYzIuU3VibmV0VHlwZS5QUklWQVRFX0lTT0xBVEVEO1xuICAgIGNvbnN0IHN1Ym5ldFNlbGVjdGlvbiA9IHsgc3VibmV0VHlwZSB9O1xuXG4gICAgaWYgKGludGVyZmFjZUNvbmZpZy5lY3IpIHtcbiAgICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRzLnB1c2goXG4gICAgICAgIG5ldyBlYzIuSW50ZXJmYWNlVnBjRW5kcG9pbnQodGhpcywgYCR7aWR9RWNyRG9ja2VyYCwge1xuICAgICAgICAgIHZwYzogdGhpcyxcbiAgICAgICAgICBzZXJ2aWNlOiBlYzIuSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlLkVDUl9ET0NLRVIsXG4gICAgICAgICAgcHJpdmF0ZURuc0VuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgc3VibmV0czogc3VibmV0U2VsZWN0aW9uXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludHMucHVzaChcbiAgICAgICAgbmV3IGVjMi5JbnRlcmZhY2VWcGNFbmRwb2ludCh0aGlzLCBgJHtpZH1FY3JBcGlgLCB7XG4gICAgICAgICAgdnBjOiB0aGlzLFxuICAgICAgICAgIHNlcnZpY2U6IGVjMi5JbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UuRUNSLFxuICAgICAgICAgIHByaXZhdGVEbnNFbmFibGVkOiB0cnVlLFxuICAgICAgICAgIHN1Ym5ldHM6IHN1Ym5ldFNlbGVjdGlvblxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoaW50ZXJmYWNlQ29uZmlnLnNlY3JldHNNYW5hZ2VyKSB7XG4gICAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50cy5wdXNoKFxuICAgICAgICBuZXcgZWMyLkludGVyZmFjZVZwY0VuZHBvaW50KHRoaXMsIGAke2lkfVNlY3JldHNNYW5hZ2VyYCwge1xuICAgICAgICAgIHZwYzogdGhpcyxcbiAgICAgICAgICBzZXJ2aWNlOiBlYzIuSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlLlNFQ1JFVFNfTUFOQUdFUixcbiAgICAgICAgICBwcml2YXRlRG5zRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICBzdWJuZXRzOiBzdWJuZXRTZWxlY3Rpb25cbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGludGVyZmFjZUNvbmZpZy5rbXMpIHtcbiAgICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRzLnB1c2goXG4gICAgICAgIG5ldyBlYzIuSW50ZXJmYWNlVnBjRW5kcG9pbnQodGhpcywgYCR7aWR9S21zYCwge1xuICAgICAgICAgIHZwYzogdGhpcyxcbiAgICAgICAgICBzZXJ2aWNlOiBlYzIuSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlLktNUyxcbiAgICAgICAgICBwcml2YXRlRG5zRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICBzdWJuZXRzOiBzdWJuZXRTZWxlY3Rpb25cbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGludGVyZmFjZUNvbmZpZy5jbG91ZHdhdGNoTG9ncykge1xuICAgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludHMucHVzaChcbiAgICAgICAgbmV3IGVjMi5JbnRlcmZhY2VWcGNFbmRwb2ludCh0aGlzLCBgJHtpZH1DbG91ZFdhdGNoTG9nc2AsIHtcbiAgICAgICAgICB2cGM6IHRoaXMsXG4gICAgICAgICAgc2VydmljZTogZWMyLkludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZS5DTE9VRFdBVENIX0xPR1MsXG4gICAgICAgICAgcHJpdmF0ZURuc0VuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgc3VibmV0czogc3VibmV0U2VsZWN0aW9uXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChpbnRlcmZhY2VDb25maWcuc3NtKSB7XG4gICAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50cy5wdXNoKFxuICAgICAgICBuZXcgZWMyLkludGVyZmFjZVZwY0VuZHBvaW50KHRoaXMsIGAke2lkfVNzbWAsIHtcbiAgICAgICAgICB2cGM6IHRoaXMsXG4gICAgICAgICAgc2VydmljZTogZWMyLkludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZS5TU00sXG4gICAgICAgICAgcHJpdmF0ZURuc0VuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgc3VibmV0czogc3VibmV0U2VsZWN0aW9uXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludHMucHVzaChcbiAgICAgICAgbmV3IGVjMi5JbnRlcmZhY2VWcGNFbmRwb2ludCh0aGlzLCBgJHtpZH1Tc21NZXNzYWdlc2AsIHtcbiAgICAgICAgICB2cGM6IHRoaXMsXG4gICAgICAgICAgc2VydmljZTogZWMyLkludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZS5TU01fTUVTU0FHRVMsXG4gICAgICAgICAgcHJpdmF0ZURuc0VuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgc3VibmV0czogc3VibmV0U2VsZWN0aW9uXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChpbnRlcmZhY2VDb25maWcuc3RzKSB7XG4gICAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50cy5wdXNoKFxuICAgICAgICBuZXcgZWMyLkludGVyZmFjZVZwY0VuZHBvaW50KHRoaXMsIGAke2lkfVN0c2AsIHtcbiAgICAgICAgICB2cGM6IHRoaXMsXG4gICAgICAgICAgc2VydmljZTogZWMyLkludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZS5TVFMsXG4gICAgICAgICAgcHJpdmF0ZURuc0VuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgc3VibmV0czogc3VibmV0U2VsZWN0aW9uXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyByZXNvbHZlTmF0R2F0ZXdheXMocHJvcHM/OiBWcGNQcm9wcyk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbmF0Q29uZmlnID0gcHJvcHM/Lm5hdEdhdGV3YXlDb25maWc7XG5cbiAgICBpZiAobmF0Q29uZmlnID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKG5hdENvbmZpZyA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHJldHVybiBuYXRDb25maWcuY291bnQgPz8gMTtcbiAgfVxuXG4gIHN0YXRpYyBhdmFpbGFiaWxpdHlab25lcyhzY29wZTogQ29uc3RydWN0LCBtYXhBenM6IG51bWJlciA9IDMpIHtcbiAgICByZXR1cm4gU3RhY2sub2Yoc2NvcGUpLmF2YWlsYWJpbGl0eVpvbmVzLnNsaWNlKDAsIG1heEF6cyk7XG4gIH1cblxuICBzdGF0aWMgZmxvd0xvZ3MoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzPzogVnBjUHJvcHNcbiAgKTogUmVjb3JkPHN0cmluZywgZWMyLkZsb3dMb2dPcHRpb25zPiB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHByb3BzPy5mbG93TG9nQ29uZmlnID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAocHJvcHM/LmZsb3dMb2dDb25maWcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCFwcm9wcz8uYWNjb3VudElkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBbYCR7aWR9VnBjRmxvd0xvZ3NgXToge1xuICAgICAgICAgIGRlc3RpbmF0aW9uOiBlYzIuRmxvd0xvZ0Rlc3RpbmF0aW9uLnRvQ2xvdWRXYXRjaExvZ3MoXG4gICAgICAgICAgICBuZXcgTG9nR3JvdXAoc2NvcGUsIGAke2lkfUZsb3dMb2dHcm91cGAsIHtcbiAgICAgICAgICAgICAgbG9nR3JvdXBOYW1lOiBgL3ZwYy9mbG93bG9ncy92cGMtJHtpZH0vYCxcbiAgICAgICAgICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBjb25maWcgPSBwcm9wcy5mbG93TG9nQ29uZmlnO1xuICAgIGNvbnN0IHRyYWZmaWNUeXBlID0gVnBjLnJlc29sdmVUcmFmZmljVHlwZShjb25maWcudHJhZmZpY1R5cGUpO1xuXG4gICAgaWYgKGNvbmZpZy5kZXN0aW5hdGlvbiA9PT0gXCJzM1wiKSB7XG4gICAgICBjb25zdCBidWNrZXQgPSBuZXcgczMuQnVja2V0KHNjb3BlLCBgJHtpZH1GbG93TG9nQnVja2V0YCwge1xuICAgICAgICBidWNrZXROYW1lOiBgdnBjLWZsb3dsb2dzLSR7aWQudG9Mb3dlckNhc2UoKX0tJHtTdGFjay5vZihzY29wZSkuYWNjb3VudH1gLFxuICAgICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LlJFVEFJTixcbiAgICAgICAgZW5jcnlwdGlvbjogczMuQnVja2V0RW5jcnlwdGlvbi5TM19NQU5BR0VELFxuICAgICAgICBibG9ja1B1YmxpY0FjY2VzczogczMuQmxvY2tQdWJsaWNBY2Nlc3MuQkxPQ0tfQUxMLFxuICAgICAgICBsaWZlY3ljbGVSdWxlczogY29uZmlnLnJldGVudGlvbkRheXNcbiAgICAgICAgICA/IFt7IGV4cGlyYXRpb246IER1cmF0aW9uLmRheXMoY29uZmlnLnJldGVudGlvbkRheXMpLCBlbmFibGVkOiB0cnVlIH1dXG4gICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBbYCR7aWR9VnBjRmxvd0xvZ3NgXToge1xuICAgICAgICAgIGRlc3RpbmF0aW9uOiBlYzIuRmxvd0xvZ0Rlc3RpbmF0aW9uLnRvUzMoYnVja2V0KSxcbiAgICAgICAgICB0cmFmZmljVHlwZVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHJldGVudGlvbkRheXMgPSBjb25maWcucmV0ZW50aW9uRGF5cyA/PyAxNDtcbiAgICByZXR1cm4ge1xuICAgICAgW2Ake2lkfVZwY0Zsb3dMb2dzYF06IHtcbiAgICAgICAgZGVzdGluYXRpb246IGVjMi5GbG93TG9nRGVzdGluYXRpb24udG9DbG91ZFdhdGNoTG9ncyhcbiAgICAgICAgICBuZXcgTG9nR3JvdXAoc2NvcGUsIGAke2lkfUZsb3dMb2dHcm91cGAsIHtcbiAgICAgICAgICAgIGxvZ0dyb3VwTmFtZTogYC92cGMvZmxvd2xvZ3MvdnBjLSR7aWR9L2AsXG4gICAgICAgICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgICAgICAgICByZXRlbnRpb246IFZwYy5kYXlzVG9SZXRlbnRpb24ocmV0ZW50aW9uRGF5cylcbiAgICAgICAgICB9KVxuICAgICAgICApLFxuICAgICAgICB0cmFmZmljVHlwZVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBkYXlzVG9SZXRlbnRpb24oZGF5czogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCB2YWxpZFJldGVudGlvbnMgPSBbXG4gICAgICAxLCAzLCA1LCA3LCAxNCwgMzAsIDYwLCA5MCwgMTIwLCAxNTAsIDE4MCwgMzY1LCA0MDAsIDU0NSwgNzMxLCAxMDk2LCAxODI3LFxuICAgICAgMjE5MiwgMjU1NywgMjkyMiwgMzI4OCwgMzY1M1xuICAgIF07XG4gICAgcmV0dXJuIHZhbGlkUmV0ZW50aW9ucy5maW5kKChyKSA9PiByID49IGRheXMpID8/IDM2NTM7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyByZXNvbHZlVHJhZmZpY1R5cGUoXG4gICAgdHJhZmZpY1R5cGU/OiBcIkFMTFwiIHwgXCJBQ0NFUFRcIiB8IFwiUkVKRUNUXCJcbiAgKTogZWMyLkZsb3dMb2dUcmFmZmljVHlwZSB7XG4gICAgc3dpdGNoICh0cmFmZmljVHlwZSkge1xuICAgICAgY2FzZSBcIkFDQ0VQVFwiOlxuICAgICAgICByZXR1cm4gZWMyLkZsb3dMb2dUcmFmZmljVHlwZS5BQ0NFUFQ7XG4gICAgICBjYXNlIFwiUkVKRUNUXCI6XG4gICAgICAgIHJldHVybiBlYzIuRmxvd0xvZ1RyYWZmaWNUeXBlLlJFSkVDVDtcbiAgICAgIGNhc2UgXCJBTExcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBlYzIuRmxvd0xvZ1RyYWZmaWNUeXBlLkFMTDtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgaXBBZGRyZXNzZXMoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM/OiBWcGNQcm9wcykge1xuICAgIGlmICghcHJvcHM/LmFjY291bnRJZCB8fCAhcHJvcHM/LmlwdjRJcGFtUG9vbElkKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IHZwY0NpZHJNYXNrID0gcHJvcHMudnBjQ2lkck1hc2sgPz8gMjA7XG4gICAgY29uc3Qgc3VibmV0Q2lkck1hc2sgPSBwcm9wcy5zdWJuZXRDaWRyTWFzayA/PyAyMztcblxuICAgIHJldHVybiBlYzIuSXBBZGRyZXNzZXMuYXdzSXBhbUFsbG9jYXRpb24oe1xuICAgICAgaXB2NElwYW1Qb29sSWQ6IHByb3BzLmlwdjRJcGFtUG9vbElkLFxuICAgICAgaXB2NE5ldG1hc2tMZW5ndGg6IHZwY0NpZHJNYXNrLFxuICAgICAgZGVmYXVsdFN1Ym5ldElwdjROZXRtYXNrTGVuZ3RoOiBzdWJuZXRDaWRyTWFza1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGJ1aWxkKGlkOiBzdHJpbmcsIHByb3BzPzogVnBjUHJvcHMpOiAoc2I6IFN0YWNrQnVpbGRlcikgPT4gQ29uc3RydWN0IHtcbiAgICByZXR1cm4gKHNiOiBTdGFja0J1aWxkZXIpID0+IHtcbiAgICAgIHJldHVybiBuZXcgdGhpcyhzYi5nZXRTdGFjaygpLCBpZCwgcHJvcHMpO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgaW1wb3J0KFxuICAgIGlkOiBzdHJpbmcsXG4gICAgdnBjU3RhY2tOYW1lOiBzdHJpbmdcbiAgKTogKHNiOiBTdGFja0J1aWxkZXIpID0+IENvbnN0cnVjdCB7XG4gICAgcmV0dXJuIChzYjogU3RhY2tCdWlsZGVyKSA9PiB7XG4gICAgICByZXR1cm4gZWMyLlZwYy5mcm9tTG9va3VwKHNiLmdldFN0YWNrKCksIGlkLCB7XG4gICAgICAgIHZwY05hbWU6IGAke3ZwY1N0YWNrTmFtZX0vJHtpZH1gXG4gICAgICB9KTtcbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Construct } from "constructs";
|
|
2
|
-
import { Stack,
|
|
3
|
-
import {
|
|
2
|
+
import { Stack, StackProps } from "aws-cdk-lib";
|
|
3
|
+
import { KeyValue } from "../../../types";
|
|
4
4
|
interface VpcEndpointProps extends StackProps {
|
|
5
5
|
vpcId: string;
|
|
6
6
|
service: string;
|
|
@@ -56,4 +56,4 @@ class VpcEndpointStack extends aws_cdk_lib_1.Stack {
|
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
58
|
exports.VpcEndpointStack = VpcEndpointStack;
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnBjRW5kcG9pbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy9uZXR3b3JraW5nL3ZwY0VuZHBvaW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJDQUF1QztBQUN2QyxpREFPNkI7QUFDN0Isd0RBQXFEO0FBQ3JELDZDQUFnRDtBQUVoRCwrQkFBNEI7QUFRNUIsTUFBYSxXQUFZLFNBQVEsc0JBQVM7SUFJeEMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF1QjtRQUMvRCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBSFgsbUJBQWMsR0FBcUIsRUFBRSxDQUFDO1FBSzVDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQWE7UUFDbEIsSUFBSSxDQUFDLEdBQUcsR0FBRyxTQUFHLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7WUFDckMsS0FBSyxFQUFFLEtBQUs7U0FDYixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsT0FBZTtRQUM5QixNQUFNLGFBQWEsR0FBRyxJQUFJLDZCQUFhLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRTtZQUM3RCxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7WUFDYixXQUFXLEVBQUUsMEJBQTBCLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxlQUFlO1NBQ3JFLENBQUMsQ0FBQztRQUVILElBQUksT0FBTyxLQUFLLGtDQUFrQyxFQUFFLENBQUM7WUFDbkQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFFOUQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNyQixJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUM3QixhQUFhLENBQUMsY0FBYyxDQUMxQixjQUFJLENBQUMsT0FBTyxFQUFFLEVBQ2QsY0FBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFDZCx5QkFBeUIsSUFBSSx3QkFBd0IsQ0FDdEQsQ0FBQztnQkFDSixDQUFDO3FCQUFNLENBQUM7b0JBQ04sYUFBYSxDQUFDLGNBQWMsQ0FDMUIsY0FBSSxDQUFDLE9BQU8sRUFBRSxFQUNkLGNBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQ3pDLCtCQUErQixJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLHdCQUF3QixDQUNwRixDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQXVCO1FBQ25DLElBQUksOEJBQW9CLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRTtZQUM1QyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7WUFDYixPQUFPLEVBQUUsSUFBSSxxQ0FBMkIsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO1lBQ3ZELGtCQUFrQixFQUFFLElBQUk7WUFDeEIsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjO1NBQ3BDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQXRERCxrQ0FzREM7QUFFRCxNQUFhLGdCQUFpQixTQUFRLG1CQUFLO0lBQ3pDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBdUI7UUFDL0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRTtZQUNuQyxHQUFHLEtBQUs7U0FDVCxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFSRCw0Q0FRQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQge1xuICBJbnRlcmZhY2VWcGNFbmRwb2ludCxcbiAgSW50ZXJmYWNlVnBjRW5kcG9pbnRTZXJ2aWNlLFxuICBJU2VjdXJpdHlHcm91cCxcbiAgSVZwYyxcbiAgUGVlcixcbiAgUG9ydFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0IHsgU2VjdXJpdHlHcm91cCB9IGZyb20gXCIuLi9pYW0vc2VjdXJpdHlHcm91cFwiO1xuaW1wb3J0IHsgU3RhY2ssIFN0YWNrUHJvcHMgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IEtleVZhbHVlIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgeyBWcGMgfSBmcm9tIFwiLi92cGNcIjtcblxuaW50ZXJmYWNlIFZwY0VuZHBvaW50UHJvcHMgZXh0ZW5kcyBTdGFja1Byb3BzIHtcbiAgdnBjSWQ6IHN0cmluZztcbiAgc2VydmljZTogc3RyaW5nO1xuICB0YWdzOiBLZXlWYWx1ZTtcbn1cblxuZXhwb3J0IGNsYXNzIFZwY0VuZHBvaW50IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHJpdmF0ZSB2cGM6IElWcGM7XG4gIHByaXZhdGUgc2VjdXJpdHlHcm91cHM6IElTZWN1cml0eUdyb3VwW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogVnBjRW5kcG9pbnRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLmFkZFZwYyhwcm9wcy52cGNJZCk7XG4gICAgdGhpcy5hZGRTZWN1cml0eUdyb3VwKHByb3BzLnNlcnZpY2UpO1xuICAgIHRoaXMuYWRkRW50cnlwb2ludChwcm9wcyk7XG4gIH1cblxuICBhZGRWcGModnBjSWQ6IHN0cmluZykge1xuICAgIHRoaXMudnBjID0gVnBjLmZyb21Mb29rdXAodGhpcywgYFZwY2AsIHtcbiAgICAgIHZwY0lkOiB2cGNJZFxuICAgIH0pO1xuICB9XG5cbiAgYWRkU2VjdXJpdHlHcm91cChzZXJ2aWNlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzZWN1cml0eUdyb3VwID0gbmV3IFNlY3VyaXR5R3JvdXAodGhpcywgYHNlY3VyaXR5R3JvdXBgLCB7XG4gICAgICB2cGM6IHRoaXMudnBjLFxuICAgICAgZGVzY3JpcHRpb246IGBTZWN1cml0eSBncm91cCBmb3IgdGhlICR7dGhpcy52cGMudnBjSWR9IFZQQyBlbmRwb2ludGBcbiAgICB9KTtcblxuICAgIGlmIChzZXJ2aWNlID09PSBcImNvbS5hbWF6b25hd3MudXMtZWFzdC0xLmRhdGFzeW5jXCIpIHtcbiAgICAgIGNvbnN0IHBvcnRzID0gWzgwLCA0NDMsIDIyLCB7IGZyb21Qb3J0OiAxMDI0LCB0b1BvcnQ6IDEwNjQgfV07XG5cbiAgICAgIHBvcnRzLmZvckVhY2goKHBvcnQpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBwb3J0ID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgc2VjdXJpdHlHcm91cC5hZGRJbmdyZXNzUnVsZShcbiAgICAgICAgICAgIFBlZXIuYW55SXB2NCgpLFxuICAgICAgICAgICAgUG9ydC50Y3AocG9ydCksXG4gICAgICAgICAgICBgQWxsb3cgdHJhZmZpYyBvbiBwb3J0ICR7cG9ydH0gZnJvbSB0aGUgVlBDIGVuZHBvaW50YFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VjdXJpdHlHcm91cC5hZGRJbmdyZXNzUnVsZShcbiAgICAgICAgICAgIFBlZXIuYW55SXB2NCgpLFxuICAgICAgICAgICAgUG9ydC50Y3BSYW5nZShwb3J0LmZyb21Qb3J0LCBwb3J0LnRvUG9ydCksXG4gICAgICAgICAgICBgQWxsb3cgdHJhZmZpYyBvbiBwb3J0IHJhbmdlICR7cG9ydC5mcm9tUG9ydH0tJHtwb3J0LnRvUG9ydH0gZnJvbSB0aGUgVlBDIGVuZHBvaW50YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLnNlY3VyaXR5R3JvdXBzLnB1c2goc2VjdXJpdHlHcm91cCk7XG4gIH1cblxuICBhZGRFbnRyeXBvaW50KHByb3BzOiBWcGNFbmRwb2ludFByb3BzKSB7XG4gICAgbmV3IEludGVyZmFjZVZwY0VuZHBvaW50KHRoaXMsIFwiVnBjRW5kcG9pbnRcIiwge1xuICAgICAgdnBjOiB0aGlzLnZwYyxcbiAgICAgIHNlcnZpY2U6IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludFNlcnZpY2UocHJvcHMuc2VydmljZSksXG4gICAgICBsb29rdXBTdXBwb3J0ZWRBenM6IHRydWUsXG4gICAgICBzZWN1cml0eUdyb3VwczogdGhpcy5zZWN1cml0eUdyb3Vwc1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBWcGNFbmRwb2ludFN0YWNrIGV4dGVuZHMgU3RhY2sge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogVnBjRW5kcG9pbnRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgbmV3IFZwY0VuZHBvaW50KHRoaXMsIFwiVnBjRW5kcG9pbnRcIiwge1xuICAgICAgLi4ucHJvcHNcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -1,22 +1,24 @@
|
|
|
1
|
-
import { type AssetOptions } from "aws-cdk-lib";
|
|
2
|
-
import { type
|
|
1
|
+
import { CustomResource as customResource, Duration, type AssetOptions } from "aws-cdk-lib";
|
|
2
|
+
import { type PolicyStatement } from "aws-cdk-lib/aws-iam";
|
|
3
3
|
import { type Runtime } from "aws-cdk-lib/aws-lambda";
|
|
4
4
|
import { Construct } from "constructs";
|
|
5
5
|
interface CustomResourceProps {
|
|
6
6
|
runtime: Runtime;
|
|
7
7
|
roleDescription?: string;
|
|
8
8
|
lambdaDescription?: string;
|
|
9
|
-
inlinePolicy:
|
|
10
|
-
[name: string]: PolicyDocument;
|
|
11
|
-
};
|
|
9
|
+
inlinePolicy: PolicyStatement[];
|
|
12
10
|
properties?: {
|
|
13
11
|
[key: string]: string;
|
|
14
12
|
};
|
|
15
|
-
codePath
|
|
13
|
+
codePath?: string;
|
|
14
|
+
inlineCode?: string;
|
|
16
15
|
assetOptions?: AssetOptions;
|
|
16
|
+
handler?: string;
|
|
17
|
+
timeout?: Duration;
|
|
17
18
|
}
|
|
18
19
|
export declare class CustomResource extends Construct {
|
|
19
20
|
readonly response: string;
|
|
21
|
+
readonly resource: customResource;
|
|
20
22
|
constructor(scope: Construct, id: string, props: CustomResourceProps);
|
|
21
23
|
}
|
|
22
24
|
export {};
|
|
@@ -9,23 +9,47 @@ const lambda_1 = require("../compute/lambda");
|
|
|
9
9
|
class CustomResource extends constructs_1.Construct {
|
|
10
10
|
constructor(scope, id, props) {
|
|
11
11
|
super(scope, id);
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
12
|
+
// Validate exactly one code source
|
|
13
|
+
if (!props.codePath && !props.inlineCode) {
|
|
14
|
+
throw new Error("CustomResource requires either codePath or inlineCode to be specified");
|
|
15
|
+
}
|
|
16
|
+
if (props.codePath && props.inlineCode) {
|
|
17
|
+
throw new Error("CustomResource requires exactly one of codePath or inlineCode, not both");
|
|
18
|
+
}
|
|
19
|
+
const isInlineCode = !!props.inlineCode;
|
|
20
|
+
const code = isInlineCode
|
|
21
|
+
? aws_lambda_1.Code.fromInline(props.inlineCode)
|
|
22
|
+
: aws_lambda_1.Code.fromAsset(props.codePath, props.assetOptions);
|
|
23
|
+
const handler = props.handler ?? (isInlineCode ? "index.handler" : `${id}.handler`);
|
|
24
|
+
const timeout = props.timeout?.toSeconds() ?? 300;
|
|
25
|
+
// Use LambdaFunction for inline code (unique per use), SingletonFunction for assets (shared)
|
|
26
|
+
const lambdaFunction = isInlineCode
|
|
27
|
+
? new lambda_1.LambdaFunction(this, `${id}Lambda`, {
|
|
28
|
+
code,
|
|
29
|
+
handler,
|
|
30
|
+
runtime: props.runtime,
|
|
31
|
+
timeout,
|
|
32
|
+
lambdaDescription: props.lambdaDescription || `${id} lambda`,
|
|
33
|
+
roleDescription: props.roleDescription || `${id} custom resource lambda`,
|
|
34
|
+
inlinePolicy: props.inlinePolicy
|
|
35
|
+
})
|
|
36
|
+
: new lambda_1.SingletonFunction(this, `${id}Lambda`, {
|
|
37
|
+
code,
|
|
38
|
+
handler,
|
|
39
|
+
runtime: props.runtime,
|
|
40
|
+
lambdaDescription: props.lambdaDescription || `${id} lambda`,
|
|
41
|
+
roleDescription: props.roleDescription || `${id} custom resource lambda`,
|
|
42
|
+
inlinePolicy: props.inlinePolicy
|
|
43
|
+
});
|
|
20
44
|
const provider = new custom_resources_1.Provider(this, `${id}Provider`, {
|
|
21
45
|
onEventHandler: lambdaFunction
|
|
22
46
|
});
|
|
23
|
-
|
|
47
|
+
this.resource = new aws_cdk_lib_1.CustomResource(this, `${id}Resource`, {
|
|
24
48
|
serviceToken: provider.serviceToken,
|
|
25
49
|
properties: props.properties
|
|
26
50
|
});
|
|
27
|
-
this.response = resource.getAtt("Response").toString();
|
|
51
|
+
this.response = this.resource.getAtt("Response").toString();
|
|
28
52
|
}
|
|
29
53
|
}
|
|
30
54
|
exports.CustomResource = CustomResource;
|
|
31
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tUmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy91dGlsaXRpZXMvY3VzdG9tUmVzb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBSXFCO0FBQ3JCLG1FQUF3RDtBQUV4RCx1REFBNEQ7QUFDNUQsMkNBQXVDO0FBRXZDLDhDQUFzRTtBQXVCdEUsTUFBYSxjQUFlLFNBQVEsc0JBQVM7SUFJM0MsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUEwQjtRQUNsRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLG1DQUFtQztRQUNuQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN6QyxNQUFNLElBQUksS0FBSyxDQUNiLHVFQUF1RSxDQUN4RSxDQUFDO1FBQ0osQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDdkMsTUFBTSxJQUFJLEtBQUssQ0FDYix5RUFBeUUsQ0FDMUUsQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLFlBQVksR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztRQUN4QyxNQUFNLElBQUksR0FBRyxZQUFZO1lBQ3ZCLENBQUMsQ0FBQyxpQkFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsVUFBVyxDQUFDO1lBQ3BDLENBQUMsQ0FBQyxpQkFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUyxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN4RCxNQUFNLE9BQU8sR0FDWCxLQUFLLENBQUMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN0RSxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEdBQUcsQ0FBQztRQUVsRCw2RkFBNkY7UUFDN0YsTUFBTSxjQUFjLEdBQUcsWUFBWTtZQUNqQyxDQUFDLENBQUMsSUFBSSx1QkFBYyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFO2dCQUN0QyxJQUFJO2dCQUNKLE9BQU87Z0JBQ1AsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO2dCQUN0QixPQUFPO2dCQUNQLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxHQUFHLEVBQUUsU0FBUztnQkFDNUQsZUFBZSxFQUNiLEtBQUssQ0FBQyxlQUFlLElBQUksR0FBRyxFQUFFLHlCQUF5QjtnQkFDekQsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZO2FBQ2pDLENBQUM7WUFDSixDQUFDLENBQUMsSUFBSSwwQkFBaUIsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRTtnQkFDekMsSUFBSTtnQkFDSixPQUFPO2dCQUNQLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztnQkFDdEIsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixJQUFJLEdBQUcsRUFBRSxTQUFTO2dCQUM1RCxlQUFlLEVBQ2IsS0FBSyxDQUFDLGVBQWUsSUFBSSxHQUFHLEVBQUUseUJBQXlCO2dCQUN6RCxZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVk7YUFDakMsQ0FBQyxDQUFDO1FBRVAsTUFBTSxRQUFRLEdBQUcsSUFBSSwyQkFBUSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFO1lBQ25ELGNBQWMsRUFBRSxjQUFjO1NBQy9CLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSw0QkFBYyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFO1lBQ3hELFlBQVksRUFBRSxRQUFRLENBQUMsWUFBWTtZQUNuQyxVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7U0FDN0IsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM5RCxDQUFDO0NBQ0Y7QUE1REQsd0NBNERDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ3VzdG9tUmVzb3VyY2UgYXMgY3VzdG9tUmVzb3VyY2UsXG4gIER1cmF0aW9uLFxuICB0eXBlIEFzc2V0T3B0aW9uc1xufSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSBcImF3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXNcIjtcbmltcG9ydCB7IHR5cGUgUG9saWN5U3RhdGVtZW50IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7IENvZGUsIHR5cGUgUnVudGltZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG5pbXBvcnQgeyBTaW5nbGV0b25GdW5jdGlvbiwgTGFtYmRhRnVuY3Rpb24gfSBmcm9tIFwiLi4vY29tcHV0ZS9sYW1iZGFcIjtcblxuaW50ZXJmYWNlIEN1c3RvbVJlc291cmNlUHJvcHMge1xuICBydW50aW1lOiBSdW50aW1lO1xuICByb2xlRGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGxhbWJkYURlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBpbmxpbmVQb2xpY3k6IFBvbGljeVN0YXRlbWVudFtdO1xuICBwcm9wZXJ0aWVzPzoge1xuICAgIFtrZXk6IHN0cmluZ106IHN0cmluZzsgLy8gVXNlZCB0byBiZSBgW2tleTogc3RyaW5nXTogYW55YCwgdGhpcyBjb3VsZCBicmVha1xuICB9O1xuXG4gIC8vIENvZGUgc291cmNlXG4gIGNvZGVQYXRoPzogc3RyaW5nO1xuICBpbmxpbmVDb2RlPzogc3RyaW5nO1xuXG4gIC8vIEFzc2V0IG9wdGlvbnMgKG9ubHkgdXNlZCB3aXRoIGNvZGVQYXRoKVxuICBhc3NldE9wdGlvbnM/OiBBc3NldE9wdGlvbnM7XG5cbiAgLy8gT3B0aW9uYWwgb3ZlcnJpZGVzXG4gIGhhbmRsZXI/OiBzdHJpbmc7IC8vIERlZmF1bHQ6IGAke2lkfS5oYW5kbGVyYCBmb3IgY29kZVBhdGgsIGBpbmRleC5oYW5kbGVyYCBmb3IgaW5saW5lQ29kZVxuICB0aW1lb3V0PzogRHVyYXRpb247IC8vIERlZmF1bHQ6IDMwMHMgKDUgbWludXRlcylcbn1cblxuZXhwb3J0IGNsYXNzIEN1c3RvbVJlc291cmNlIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IHJlc3BvbnNlOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZTogY3VzdG9tUmVzb3VyY2U7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEN1c3RvbVJlc291cmNlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgLy8gVmFsaWRhdGUgZXhhY3RseSBvbmUgY29kZSBzb3VyY2VcbiAgICBpZiAoIXByb3BzLmNvZGVQYXRoICYmICFwcm9wcy5pbmxpbmVDb2RlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiQ3VzdG9tUmVzb3VyY2UgcmVxdWlyZXMgZWl0aGVyIGNvZGVQYXRoIG9yIGlubGluZUNvZGUgdG8gYmUgc3BlY2lmaWVkXCJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChwcm9wcy5jb2RlUGF0aCAmJiBwcm9wcy5pbmxpbmVDb2RlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiQ3VzdG9tUmVzb3VyY2UgcmVxdWlyZXMgZXhhY3RseSBvbmUgb2YgY29kZVBhdGggb3IgaW5saW5lQ29kZSwgbm90IGJvdGhcIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBpc0lubGluZUNvZGUgPSAhIXByb3BzLmlubGluZUNvZGU7XG4gICAgY29uc3QgY29kZSA9IGlzSW5saW5lQ29kZVxuICAgICAgPyBDb2RlLmZyb21JbmxpbmUocHJvcHMuaW5saW5lQ29kZSEpXG4gICAgICA6IENvZGUuZnJvbUFzc2V0KHByb3BzLmNvZGVQYXRoISwgcHJvcHMuYXNzZXRPcHRpb25zKTtcbiAgICBjb25zdCBoYW5kbGVyID1cbiAgICAgIHByb3BzLmhhbmRsZXIgPz8gKGlzSW5saW5lQ29kZSA/IFwiaW5kZXguaGFuZGxlclwiIDogYCR7aWR9LmhhbmRsZXJgKTtcbiAgICBjb25zdCB0aW1lb3V0ID0gcHJvcHMudGltZW91dD8udG9TZWNvbmRzKCkgPz8gMzAwO1xuXG4gICAgLy8gVXNlIExhbWJkYUZ1bmN0aW9uIGZvciBpbmxpbmUgY29kZSAodW5pcXVlIHBlciB1c2UpLCBTaW5nbGV0b25GdW5jdGlvbiBmb3IgYXNzZXRzIChzaGFyZWQpXG4gICAgY29uc3QgbGFtYmRhRnVuY3Rpb24gPSBpc0lubGluZUNvZGVcbiAgICAgID8gbmV3IExhbWJkYUZ1bmN0aW9uKHRoaXMsIGAke2lkfUxhbWJkYWAsIHtcbiAgICAgICAgICBjb2RlLFxuICAgICAgICAgIGhhbmRsZXIsXG4gICAgICAgICAgcnVudGltZTogcHJvcHMucnVudGltZSxcbiAgICAgICAgICB0aW1lb3V0LFxuICAgICAgICAgIGxhbWJkYURlc2NyaXB0aW9uOiBwcm9wcy5sYW1iZGFEZXNjcmlwdGlvbiB8fCBgJHtpZH0gbGFtYmRhYCxcbiAgICAgICAgICByb2xlRGVzY3JpcHRpb246XG4gICAgICAgICAgICBwcm9wcy5yb2xlRGVzY3JpcHRpb24gfHwgYCR7aWR9IGN1c3RvbSByZXNvdXJjZSBsYW1iZGFgLFxuICAgICAgICAgIGlubGluZVBvbGljeTogcHJvcHMuaW5saW5lUG9saWN5XG4gICAgICAgIH0pXG4gICAgICA6IG5ldyBTaW5nbGV0b25GdW5jdGlvbih0aGlzLCBgJHtpZH1MYW1iZGFgLCB7XG4gICAgICAgICAgY29kZSxcbiAgICAgICAgICBoYW5kbGVyLFxuICAgICAgICAgIHJ1bnRpbWU6IHByb3BzLnJ1bnRpbWUsXG4gICAgICAgICAgbGFtYmRhRGVzY3JpcHRpb246IHByb3BzLmxhbWJkYURlc2NyaXB0aW9uIHx8IGAke2lkfSBsYW1iZGFgLFxuICAgICAgICAgIHJvbGVEZXNjcmlwdGlvbjpcbiAgICAgICAgICAgIHByb3BzLnJvbGVEZXNjcmlwdGlvbiB8fCBgJHtpZH0gY3VzdG9tIHJlc291cmNlIGxhbWJkYWAsXG4gICAgICAgICAgaW5saW5lUG9saWN5OiBwcm9wcy5pbmxpbmVQb2xpY3lcbiAgICAgICAgfSk7XG5cbiAgICBjb25zdCBwcm92aWRlciA9IG5ldyBQcm92aWRlcih0aGlzLCBgJHtpZH1Qcm92aWRlcmAsIHtcbiAgICAgIG9uRXZlbnRIYW5kbGVyOiBsYW1iZGFGdW5jdGlvblxuICAgIH0pO1xuXG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyBjdXN0b21SZXNvdXJjZSh0aGlzLCBgJHtpZH1SZXNvdXJjZWAsIHtcbiAgICAgIHNlcnZpY2VUb2tlbjogcHJvdmlkZXIuc2VydmljZVRva2VuLFxuICAgICAgcHJvcGVydGllczogcHJvcHMucHJvcGVydGllc1xuICAgIH0pO1xuXG4gICAgdGhpcy5yZXNwb25zZSA9IHRoaXMucmVzb3VyY2UuZ2V0QXR0KFwiUmVzcG9uc2VcIikudG9TdHJpbmcoKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const fs = require("fs");
|
|
4
|
+
class CidrBlock {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.configFile = "../cidr-config.json";
|
|
7
|
+
// Import config, or create it if it doesn't exist
|
|
8
|
+
if (fs.existsSync(this.configFile)) {
|
|
9
|
+
const configString = fs.readFileSync(this.configFile, "utf-8");
|
|
10
|
+
this.cidrBlock = JSON.parse(configString);
|
|
11
|
+
}
|
|
12
|
+
else {
|
|
13
|
+
this.cidrBlock = {};
|
|
14
|
+
for (let i = 1; i <= 255; i++) {
|
|
15
|
+
this.cidrBlock[`${i}.0.0.0/8`] = true;
|
|
16
|
+
}
|
|
17
|
+
const configString = JSON.stringify(this.cidrBlock, null, 2);
|
|
18
|
+
fs.writeFileSync(this.configFile, configString);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
writeState() {
|
|
22
|
+
// JSON-ify config and write to file
|
|
23
|
+
const configString = JSON.stringify(this.cidrBlock, null, 2);
|
|
24
|
+
fs.writeFileSync(this.configFile, configString);
|
|
25
|
+
}
|
|
26
|
+
getCidrBlock() {
|
|
27
|
+
for (const key in this.cidrBlock) {
|
|
28
|
+
if (this.cidrBlock[key]) {
|
|
29
|
+
return key;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return "0.0.0.0/8";
|
|
33
|
+
}
|
|
34
|
+
updateState(cidrBlock, status) {
|
|
35
|
+
this.cidrBlock[cidrBlock] = status;
|
|
36
|
+
this.writeState();
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
exports.default = CidrBlock;
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0Q2lkci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi91dGlscy9nZXRDaWRyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEseUJBQXlCO0FBTXpCLE1BQXFCLFNBQVM7SUFJNUI7UUFGUSxlQUFVLEdBQUcscUJBQXFCLENBQUM7UUFHekMsa0RBQWtEO1FBQ2xELElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUNuQyxNQUFNLFlBQVksR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDL0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzVDLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7WUFDcEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUM5QixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDeEMsQ0FBQztZQUNELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDN0QsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ2xELENBQUM7SUFDSCxDQUFDO0lBRUQsVUFBVTtRQUNSLG9DQUFvQztRQUNwQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzdELEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsWUFBWTtRQUNWLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2pDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN4QixPQUFPLEdBQUcsQ0FBQztZQUNiLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVELFdBQVcsQ0FBQyxTQUFpQixFQUFFLE1BQWU7UUFDNUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLENBQUM7UUFDbkMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3BCLENBQUM7Q0FDRjtBQXRDRCw0QkFzQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIjtcblxuaW50ZXJmYWNlIGNpZHJUYWJsZSB7XG4gIFtrZXk6IHN0cmluZ106IGJvb2xlYW47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENpZHJCbG9jayB7XG4gIHByaXZhdGUgY2lkckJsb2NrOiBjaWRyVGFibGU7XG4gIHByaXZhdGUgY29uZmlnRmlsZSA9IFwiLi4vY2lkci1jb25maWcuanNvblwiO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8vIEltcG9ydCBjb25maWcsIG9yIGNyZWF0ZSBpdCBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgaWYgKGZzLmV4aXN0c1N5bmModGhpcy5jb25maWdGaWxlKSkge1xuICAgICAgY29uc3QgY29uZmlnU3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHRoaXMuY29uZmlnRmlsZSwgXCJ1dGYtOFwiKTtcbiAgICAgIHRoaXMuY2lkckJsb2NrID0gSlNPTi5wYXJzZShjb25maWdTdHJpbmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNpZHJCbG9jayA9IHt9O1xuICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gMjU1OyBpKyspIHtcbiAgICAgICAgdGhpcy5jaWRyQmxvY2tbYCR7aX0uMC4wLjAvOGBdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbmZpZ1N0cmluZyA9IEpTT04uc3RyaW5naWZ5KHRoaXMuY2lkckJsb2NrLCBudWxsLCAyKTtcbiAgICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy5jb25maWdGaWxlLCBjb25maWdTdHJpbmcpO1xuICAgIH1cbiAgfVxuXG4gIHdyaXRlU3RhdGUoKSB7XG4gICAgLy8gSlNPTi1pZnkgY29uZmlnIGFuZCB3cml0ZSB0byBmaWxlXG4gICAgY29uc3QgY29uZmlnU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkodGhpcy5jaWRyQmxvY2ssIG51bGwsIDIpO1xuICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy5jb25maWdGaWxlLCBjb25maWdTdHJpbmcpO1xuICB9XG5cbiAgZ2V0Q2lkckJsb2NrKCkge1xuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuY2lkckJsb2NrKSB7XG4gICAgICBpZiAodGhpcy5jaWRyQmxvY2tba2V5XSkge1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gXCIwLjAuMC4wLzhcIjtcbiAgfVxuXG4gIHVwZGF0ZVN0YXRlKGNpZHJCbG9jazogc3RyaW5nLCBzdGF0dXM6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmNpZHJCbG9ja1tjaWRyQmxvY2tdID0gc3RhdHVzO1xuICAgIHRoaXMud3JpdGVTdGF0ZSgpO1xuICB9XG59XG4iXX0=
|
package/dist/lib/utils/index.js
CHANGED
|
@@ -15,5 +15,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./getConfig"), exports);
|
|
18
|
+
__exportStar(require("./resourceNaming"), exports);
|
|
18
19
|
__exportStar(require("./standardTagsAspect"), exports);
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDhDQUE0QjtBQUM1QixtREFBaUM7QUFDakMsdURBQXFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vZ2V0Q29uZmlnXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9yZXNvdXJjZU5hbWluZ1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vc3RhbmRhcmRUYWdzQXNwZWN0XCI7XG4iXX0=
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Centralized resource naming for database infrastructure.
|
|
3
|
+
* Ensures consistent, predictable names across constructs and tests.
|
|
4
|
+
*
|
|
5
|
+
* AWS Naming Constraints:
|
|
6
|
+
* - DB Instance/Cluster ID: max 63 chars, alphanumeric + hyphens, case-insensitive (lowercased by AWS)
|
|
7
|
+
* - Secret Name: max 512 chars, case-sensitive
|
|
8
|
+
* - Proxy Name: max 60 chars, alphanumeric + hyphens
|
|
9
|
+
*/
|
|
10
|
+
export declare class ResourceNaming {
|
|
11
|
+
/** RDS Instance identifier. AWS lowercases this. */
|
|
12
|
+
static dbInstanceId(databaseName: string): string;
|
|
13
|
+
/** Aurora cluster identifier. Must be lowercase. */
|
|
14
|
+
static clusterId(databaseName: string): string;
|
|
15
|
+
/** Global Aurora cluster identifier. Must be lowercase. */
|
|
16
|
+
static globalClusterId(databaseName: string): string;
|
|
17
|
+
/** Primary cluster ID for GlobalAurora. Must be lowercase. */
|
|
18
|
+
static primaryClusterId(databaseName: string): string;
|
|
19
|
+
/** Secondary cluster ID for GlobalAurora. Must be lowercase. */
|
|
20
|
+
static secondaryClusterId(databaseName: string, region: string): string;
|
|
21
|
+
/** RDS Proxy name. Must be lowercase for consistency. */
|
|
22
|
+
static proxyName(databaseName: string): string;
|
|
23
|
+
/** Aurora writer instance identifier. */
|
|
24
|
+
static writerInstanceId(databaseName: string, suffix?: string): string;
|
|
25
|
+
/** Aurora reader instance identifier. */
|
|
26
|
+
static readerInstanceId(databaseName: string, index: number, suffix?: string): string;
|
|
27
|
+
/** RDS read replica identifier. */
|
|
28
|
+
static readReplicaId(databaseName: string): string;
|
|
29
|
+
/** Credentials secret name. Case-sensitive, preserves casing. */
|
|
30
|
+
static credentialsSecretName(databaseName: string): string;
|
|
31
|
+
/** Master secret name for rotation. Case-sensitive. */
|
|
32
|
+
static masterSecretName(databaseName: string): string;
|
|
33
|
+
/** Security group description for RDS Instance. */
|
|
34
|
+
static instanceSecurityGroupDescription(databaseName: string): string;
|
|
35
|
+
/** Security group description for Aurora cluster. */
|
|
36
|
+
static clusterSecurityGroupDescription(databaseName: string): string;
|
|
37
|
+
/** Security group description for RDS Proxy. */
|
|
38
|
+
static proxySecurityGroupDescription(databaseName: string): string;
|
|
39
|
+
/** Security group description for read replica. */
|
|
40
|
+
static readReplicaSecurityGroupDescription(databaseName: string): string;
|
|
41
|
+
}
|