@fjall/components-infrastructure 0.76.0 → 0.77.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 (63) hide show
  1. package/dist/lib/app.d.ts +93 -12
  2. package/dist/lib/app.js +117 -48
  3. package/dist/lib/aspects/resourceInventory.d.ts +41 -0
  4. package/dist/lib/aspects/resourceInventory.js +56 -0
  5. package/dist/lib/config/audit.d.ts +18 -0
  6. package/dist/lib/config/audit.js +22 -0
  7. package/dist/lib/config/aws/ecrDefaultImage.js +3 -3
  8. package/dist/lib/patterns/aws/auditRole.d.ts +44 -0
  9. package/dist/lib/patterns/aws/auditRole.js +58 -0
  10. package/dist/lib/patterns/aws/basicApp.d.ts +0 -0
  11. package/dist/lib/patterns/aws/basicApp.js +150 -0
  12. package/dist/lib/patterns/aws/compute.d.ts +10 -4
  13. package/dist/lib/patterns/aws/compute.js +5 -5
  14. package/dist/lib/patterns/aws/database.d.ts +24 -30
  15. package/dist/lib/patterns/aws/database.js +93 -14
  16. package/dist/lib/patterns/aws/ec2.d.ts +43 -0
  17. package/dist/lib/patterns/aws/ec2.js +123 -0
  18. package/dist/lib/patterns/aws/freeTierApp.d.ts +44 -0
  19. package/dist/lib/patterns/aws/freeTierApp.js +83 -0
  20. package/dist/lib/patterns/aws/index.d.ts +1 -0
  21. package/dist/lib/patterns/aws/index.js +2 -1
  22. package/dist/lib/patterns/aws/network.d.ts +75 -0
  23. package/dist/lib/patterns/aws/network.js +99 -0
  24. package/dist/lib/patterns/aws/spotInstanceApp.d.ts +45 -0
  25. package/dist/lib/patterns/aws/spotInstanceApp.js +85 -0
  26. package/dist/lib/resources/aws/audit/auditRole.d.ts +32 -0
  27. package/dist/lib/resources/aws/audit/auditRole.js +46 -0
  28. package/dist/lib/resources/aws/base/awsStack.js +1 -4
  29. package/dist/lib/resources/aws/compute/ec2.d.ts +1 -0
  30. package/dist/lib/resources/aws/compute/ec2.js +5 -3
  31. package/dist/lib/resources/aws/compute/ecs.d.ts +1 -1
  32. package/dist/lib/resources/aws/compute/ecs.js +6 -2
  33. package/dist/lib/resources/aws/compute/ecsFreeTier.d.ts +1 -1
  34. package/dist/lib/resources/aws/compute/ecsFreeTier.js +15 -4
  35. package/dist/lib/resources/aws/compute/ecsSpot.d.ts +1 -1
  36. package/dist/lib/resources/aws/compute/ecsSpot.js +17 -4
  37. package/dist/lib/resources/aws/compute/lambda.d.ts +12 -7
  38. package/dist/lib/resources/aws/compute/lambda.js +27 -19
  39. package/dist/lib/resources/aws/database/databaseFreeTier.d.ts +15 -0
  40. package/dist/lib/resources/aws/database/databaseFreeTier.js +29 -0
  41. package/dist/lib/resources/aws/database/rdsAurora.d.ts +2 -0
  42. package/dist/lib/resources/aws/database/rdsAurora.js +36 -37
  43. package/dist/lib/resources/aws/database/rdsAuroraGlobal.d.ts +2 -0
  44. package/dist/lib/resources/aws/database/rdsAuroraGlobal.js +7 -6
  45. package/dist/lib/resources/aws/database/rdsFreeTier.d.ts +37 -0
  46. package/dist/lib/resources/aws/database/rdsFreeTier.js +84 -0
  47. package/dist/lib/resources/aws/database/rdsInstance.d.ts +3 -0
  48. package/dist/lib/resources/aws/database/rdsInstance.js +117 -33
  49. package/dist/lib/resources/aws/networking/index.d.ts +0 -1
  50. package/dist/lib/resources/aws/networking/index.js +1 -2
  51. package/dist/lib/resources/aws/networking/vpc.d.ts +40 -21
  52. package/dist/lib/resources/aws/networking/vpc.js +185 -36
  53. package/dist/lib/resources/aws/networking/vpcEndpoint.d.ts +2 -2
  54. package/dist/lib/resources/aws/networking/vpcEndpoint.js +1 -1
  55. package/dist/lib/resources/aws/utilities/customResource.d.ts +8 -6
  56. package/dist/lib/resources/aws/utilities/customResource.js +35 -11
  57. package/dist/lib/utils/getCidr.d.ts +8 -0
  58. package/dist/lib/utils/getCidr.js +40 -0
  59. package/dist/lib/utils/index.d.ts +1 -0
  60. package/dist/lib/utils/index.js +2 -1
  61. package/dist/lib/utils/resourceNaming.d.ts +41 -0
  62. package/dist/lib/utils/resourceNaming.js +77 -0
  63. package/package.json +3 -3
@@ -1,56 +1,215 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Vpc = exports.VpcFactory = void 0;
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
- ...props,
14
+ ...restProps,
25
15
  vpcName: `vpc-${id}`,
26
- availabilityZones: Vpc.availabilityZones(scope),
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 availabilityZones(scope) {
32
- return aws_cdk_lib_1.Stack.of(scope).availabilityZones.slice(0, 3);
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 (!props || !props.accountId)
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: 20,
53
- defaultSubnetIpv4NetmaskLength: 23
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, type StackProps } from "aws-cdk-lib";
3
- import { type KeyValue } from "../../../types";
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnBjRW5kcG9pbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy9uZXR3b3JraW5nL3ZwY0VuZHBvaW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJDQUF1QztBQUN2QyxpREFPNkI7QUFDN0Isd0RBQXFEO0FBQ3JELDZDQUFxRDtBQUVyRCwrQkFBNEI7QUFRNUIsTUFBYSxXQUFZLFNBQVEsc0JBQVM7SUFJeEMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF1QjtRQUMvRCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBSFgsbUJBQWMsR0FBcUIsRUFBRSxDQUFDO1FBSzVDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQWE7UUFDbEIsSUFBSSxDQUFDLEdBQUcsR0FBRyxTQUFHLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7WUFDckMsS0FBSyxFQUFFLEtBQUs7U0FDYixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsT0FBZTtRQUM5QixNQUFNLGFBQWEsR0FBRyxJQUFJLDZCQUFhLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRTtZQUM3RCxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7WUFDYixXQUFXLEVBQUUsMEJBQTBCLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxlQUFlO1NBQ3JFLENBQUMsQ0FBQztRQUVILElBQUksT0FBTyxLQUFLLGtDQUFrQyxFQUFFLENBQUM7WUFDbkQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFFOUQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNyQixJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUM3QixhQUFhLENBQUMsY0FBYyxDQUMxQixjQUFJLENBQUMsT0FBTyxFQUFFLEVBQ2QsY0FBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFDZCx5QkFBeUIsSUFBSSx3QkFBd0IsQ0FDdEQsQ0FBQztnQkFDSixDQUFDO3FCQUFNLENBQUM7b0JBQ04sYUFBYSxDQUFDLGNBQWMsQ0FDMUIsY0FBSSxDQUFDLE9BQU8sRUFBRSxFQUNkLGNBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQ3pDLCtCQUErQixJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLHdCQUF3QixDQUNwRixDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQXVCO1FBQ25DLElBQUksOEJBQW9CLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRTtZQUM1QyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7WUFDYixPQUFPLEVBQUUsSUFBSSxxQ0FBMkIsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO1lBQ3ZELGtCQUFrQixFQUFFLElBQUk7WUFDeEIsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjO1NBQ3BDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQXRERCxrQ0FzREM7QUFFRCxNQUFhLGdCQUFpQixTQUFRLG1CQUFLO0lBQ3pDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBdUI7UUFDL0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRTtZQUNuQyxHQUFHLEtBQUs7U0FDVCxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFSRCw0Q0FRQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQge1xuICBJbnRlcmZhY2VWcGNFbmRwb2ludCxcbiAgSW50ZXJmYWNlVnBjRW5kcG9pbnRTZXJ2aWNlLFxuICB0eXBlIElTZWN1cml0eUdyb3VwLFxuICB0eXBlIElWcGMsXG4gIFBlZXIsXG4gIFBvcnRcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcbmltcG9ydCB7IFNlY3VyaXR5R3JvdXAgfSBmcm9tIFwiLi4vaWFtL3NlY3VyaXR5R3JvdXBcIjtcbmltcG9ydCB7IFN0YWNrLCB0eXBlIFN0YWNrUHJvcHMgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IHR5cGUgS2V5VmFsdWUgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB7IFZwYyB9IGZyb20gXCIuL3ZwY1wiO1xuXG5pbnRlcmZhY2UgVnBjRW5kcG9pbnRQcm9wcyBleHRlbmRzIFN0YWNrUHJvcHMge1xuICB2cGNJZDogc3RyaW5nO1xuICBzZXJ2aWNlOiBzdHJpbmc7XG4gIHRhZ3M6IEtleVZhbHVlO1xufVxuXG5leHBvcnQgY2xhc3MgVnBjRW5kcG9pbnQgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwcml2YXRlIHZwYzogSVZwYztcbiAgcHJpdmF0ZSBzZWN1cml0eUdyb3VwczogSVNlY3VyaXR5R3JvdXBbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBWcGNFbmRwb2ludFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMuYWRkVnBjKHByb3BzLnZwY0lkKTtcbiAgICB0aGlzLmFkZFNlY3VyaXR5R3JvdXAocHJvcHMuc2VydmljZSk7XG4gICAgdGhpcy5hZGRFbnRyeXBvaW50KHByb3BzKTtcbiAgfVxuXG4gIGFkZFZwYyh2cGNJZDogc3RyaW5nKSB7XG4gICAgdGhpcy52cGMgPSBWcGMuZnJvbUxvb2t1cCh0aGlzLCBgVnBjYCwge1xuICAgICAgdnBjSWQ6IHZwY0lkXG4gICAgfSk7XG4gIH1cblxuICBhZGRTZWN1cml0eUdyb3VwKHNlcnZpY2U6IHN0cmluZykge1xuICAgIGNvbnN0IHNlY3VyaXR5R3JvdXAgPSBuZXcgU2VjdXJpdHlHcm91cCh0aGlzLCBgc2VjdXJpdHlHcm91cGAsIHtcbiAgICAgIHZwYzogdGhpcy52cGMsXG4gICAgICBkZXNjcmlwdGlvbjogYFNlY3VyaXR5IGdyb3VwIGZvciB0aGUgJHt0aGlzLnZwYy52cGNJZH0gVlBDIGVuZHBvaW50YFxuICAgIH0pO1xuXG4gICAgaWYgKHNlcnZpY2UgPT09IFwiY29tLmFtYXpvbmF3cy51cy1lYXN0LTEuZGF0YXN5bmNcIikge1xuICAgICAgY29uc3QgcG9ydHMgPSBbODAsIDQ0MywgMjIsIHsgZnJvbVBvcnQ6IDEwMjQsIHRvUG9ydDogMTA2NCB9XTtcblxuICAgICAgcG9ydHMuZm9yRWFjaCgocG9ydCkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHBvcnQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICBzZWN1cml0eUdyb3VwLmFkZEluZ3Jlc3NSdWxlKFxuICAgICAgICAgICAgUGVlci5hbnlJcHY0KCksXG4gICAgICAgICAgICBQb3J0LnRjcChwb3J0KSxcbiAgICAgICAgICAgIGBBbGxvdyB0cmFmZmljIG9uIHBvcnQgJHtwb3J0fSBmcm9tIHRoZSBWUEMgZW5kcG9pbnRgXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZWN1cml0eUdyb3VwLmFkZEluZ3Jlc3NSdWxlKFxuICAgICAgICAgICAgUGVlci5hbnlJcHY0KCksXG4gICAgICAgICAgICBQb3J0LnRjcFJhbmdlKHBvcnQuZnJvbVBvcnQsIHBvcnQudG9Qb3J0KSxcbiAgICAgICAgICAgIGBBbGxvdyB0cmFmZmljIG9uIHBvcnQgcmFuZ2UgJHtwb3J0LmZyb21Qb3J0fS0ke3BvcnQudG9Qb3J0fSBmcm9tIHRoZSBWUEMgZW5kcG9pbnRgXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuc2VjdXJpdHlHcm91cHMucHVzaChzZWN1cml0eUdyb3VwKTtcbiAgfVxuXG4gIGFkZEVudHJ5cG9pbnQocHJvcHM6IFZwY0VuZHBvaW50UHJvcHMpIHtcbiAgICBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnQodGhpcywgXCJWcGNFbmRwb2ludFwiLCB7XG4gICAgICB2cGM6IHRoaXMudnBjLFxuICAgICAgc2VydmljZTogbmV3IEludGVyZmFjZVZwY0VuZHBvaW50U2VydmljZShwcm9wcy5zZXJ2aWNlKSxcbiAgICAgIGxvb2t1cFN1cHBvcnRlZEF6czogdHJ1ZSxcbiAgICAgIHNlY3VyaXR5R3JvdXBzOiB0aGlzLnNlY3VyaXR5R3JvdXBzXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFZwY0VuZHBvaW50U3RhY2sgZXh0ZW5kcyBTdGFjayB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBWcGNFbmRwb2ludFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICBuZXcgVnBjRW5kcG9pbnQodGhpcywgXCJWcGNFbmRwb2ludFwiLCB7XG4gICAgICAuLi5wcm9wc1xuICAgIH0pO1xuICB9XG59XG4iXX0=
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnBjRW5kcG9pbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy9uZXR3b3JraW5nL3ZwY0VuZHBvaW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJDQUF1QztBQUN2QyxpREFPNkI7QUFDN0Isd0RBQXFEO0FBQ3JELDZDQUFnRDtBQUVoRCwrQkFBNEI7QUFRNUIsTUFBYSxXQUFZLFNBQVEsc0JBQVM7SUFJeEMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF1QjtRQUMvRCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBSFgsbUJBQWMsR0FBcUIsRUFBRSxDQUFDO1FBSzVDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQWE7UUFDbEIsSUFBSSxDQUFDLEdBQUcsR0FBRyxTQUFHLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7WUFDckMsS0FBSyxFQUFFLEtBQUs7U0FDYixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsT0FBZTtRQUM5QixNQUFNLGFBQWEsR0FBRyxJQUFJLDZCQUFhLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRTtZQUM3RCxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7WUFDYixXQUFXLEVBQUUsMEJBQTBCLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxlQUFlO1NBQ3JFLENBQUMsQ0FBQztRQUVILElBQUksT0FBTyxLQUFLLGtDQUFrQyxFQUFFLENBQUM7WUFDbkQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFFOUQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNyQixJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUM3QixhQUFhLENBQUMsY0FBYyxDQUMxQixjQUFJLENBQUMsT0FBTyxFQUFFLEVBQ2QsY0FBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFDZCx5QkFBeUIsSUFBSSx3QkFBd0IsQ0FDdEQsQ0FBQztnQkFDSixDQUFDO3FCQUFNLENBQUM7b0JBQ04sYUFBYSxDQUFDLGNBQWMsQ0FDMUIsY0FBSSxDQUFDLE9BQU8sRUFBRSxFQUNkLGNBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQ3pDLCtCQUErQixJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLHdCQUF3QixDQUNwRixDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQXVCO1FBQ25DLElBQUksOEJBQW9CLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRTtZQUM1QyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7WUFDYixPQUFPLEVBQUUsSUFBSSxxQ0FBMkIsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO1lBQ3ZELGtCQUFrQixFQUFFLElBQUk7WUFDeEIsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjO1NBQ3BDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQXRERCxrQ0FzREM7QUFFRCxNQUFhLGdCQUFpQixTQUFRLG1CQUFLO0lBQ3pDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBdUI7UUFDL0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRTtZQUNuQyxHQUFHLEtBQUs7U0FDVCxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFSRCw0Q0FRQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQge1xuICBJbnRlcmZhY2VWcGNFbmRwb2ludCxcbiAgSW50ZXJmYWNlVnBjRW5kcG9pbnRTZXJ2aWNlLFxuICBJU2VjdXJpdHlHcm91cCxcbiAgSVZwYyxcbiAgUGVlcixcbiAgUG9ydFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0IHsgU2VjdXJpdHlHcm91cCB9IGZyb20gXCIuLi9pYW0vc2VjdXJpdHlHcm91cFwiO1xuaW1wb3J0IHsgU3RhY2ssIFN0YWNrUHJvcHMgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IEtleVZhbHVlIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgeyBWcGMgfSBmcm9tIFwiLi92cGNcIjtcblxuaW50ZXJmYWNlIFZwY0VuZHBvaW50UHJvcHMgZXh0ZW5kcyBTdGFja1Byb3BzIHtcbiAgdnBjSWQ6IHN0cmluZztcbiAgc2VydmljZTogc3RyaW5nO1xuICB0YWdzOiBLZXlWYWx1ZTtcbn1cblxuZXhwb3J0IGNsYXNzIFZwY0VuZHBvaW50IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHJpdmF0ZSB2cGM6IElWcGM7XG4gIHByaXZhdGUgc2VjdXJpdHlHcm91cHM6IElTZWN1cml0eUdyb3VwW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogVnBjRW5kcG9pbnRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLmFkZFZwYyhwcm9wcy52cGNJZCk7XG4gICAgdGhpcy5hZGRTZWN1cml0eUdyb3VwKHByb3BzLnNlcnZpY2UpO1xuICAgIHRoaXMuYWRkRW50cnlwb2ludChwcm9wcyk7XG4gIH1cblxuICBhZGRWcGModnBjSWQ6IHN0cmluZykge1xuICAgIHRoaXMudnBjID0gVnBjLmZyb21Mb29rdXAodGhpcywgYFZwY2AsIHtcbiAgICAgIHZwY0lkOiB2cGNJZFxuICAgIH0pO1xuICB9XG5cbiAgYWRkU2VjdXJpdHlHcm91cChzZXJ2aWNlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzZWN1cml0eUdyb3VwID0gbmV3IFNlY3VyaXR5R3JvdXAodGhpcywgYHNlY3VyaXR5R3JvdXBgLCB7XG4gICAgICB2cGM6IHRoaXMudnBjLFxuICAgICAgZGVzY3JpcHRpb246IGBTZWN1cml0eSBncm91cCBmb3IgdGhlICR7dGhpcy52cGMudnBjSWR9IFZQQyBlbmRwb2ludGBcbiAgICB9KTtcblxuICAgIGlmIChzZXJ2aWNlID09PSBcImNvbS5hbWF6b25hd3MudXMtZWFzdC0xLmRhdGFzeW5jXCIpIHtcbiAgICAgIGNvbnN0IHBvcnRzID0gWzgwLCA0NDMsIDIyLCB7IGZyb21Qb3J0OiAxMDI0LCB0b1BvcnQ6IDEwNjQgfV07XG5cbiAgICAgIHBvcnRzLmZvckVhY2goKHBvcnQpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBwb3J0ID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgc2VjdXJpdHlHcm91cC5hZGRJbmdyZXNzUnVsZShcbiAgICAgICAgICAgIFBlZXIuYW55SXB2NCgpLFxuICAgICAgICAgICAgUG9ydC50Y3AocG9ydCksXG4gICAgICAgICAgICBgQWxsb3cgdHJhZmZpYyBvbiBwb3J0ICR7cG9ydH0gZnJvbSB0aGUgVlBDIGVuZHBvaW50YFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VjdXJpdHlHcm91cC5hZGRJbmdyZXNzUnVsZShcbiAgICAgICAgICAgIFBlZXIuYW55SXB2NCgpLFxuICAgICAgICAgICAgUG9ydC50Y3BSYW5nZShwb3J0LmZyb21Qb3J0LCBwb3J0LnRvUG9ydCksXG4gICAgICAgICAgICBgQWxsb3cgdHJhZmZpYyBvbiBwb3J0IHJhbmdlICR7cG9ydC5mcm9tUG9ydH0tJHtwb3J0LnRvUG9ydH0gZnJvbSB0aGUgVlBDIGVuZHBvaW50YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLnNlY3VyaXR5R3JvdXBzLnB1c2goc2VjdXJpdHlHcm91cCk7XG4gIH1cblxuICBhZGRFbnRyeXBvaW50KHByb3BzOiBWcGNFbmRwb2ludFByb3BzKSB7XG4gICAgbmV3IEludGVyZmFjZVZwY0VuZHBvaW50KHRoaXMsIFwiVnBjRW5kcG9pbnRcIiwge1xuICAgICAgdnBjOiB0aGlzLnZwYyxcbiAgICAgIHNlcnZpY2U6IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludFNlcnZpY2UocHJvcHMuc2VydmljZSksXG4gICAgICBsb29rdXBTdXBwb3J0ZWRBenM6IHRydWUsXG4gICAgICBzZWN1cml0eUdyb3VwczogdGhpcy5zZWN1cml0eUdyb3Vwc1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBWcGNFbmRwb2ludFN0YWNrIGV4dGVuZHMgU3RhY2sge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogVnBjRW5kcG9pbnRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgbmV3IFZwY0VuZHBvaW50KHRoaXMsIFwiVnBjRW5kcG9pbnRcIiwge1xuICAgICAgLi4ucHJvcHNcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -1,22 +1,24 @@
1
- import { type AssetOptions } from "aws-cdk-lib";
2
- import { type PolicyDocument } from "aws-cdk-lib/aws-iam";
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: string;
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
- const lambdaFunction = new lambda_1.SingletonFunction(this, `${id}Lambda`, {
13
- code: aws_lambda_1.Code.fromAsset(props.codePath, props.assetOptions),
14
- handler: `${id}.handler`,
15
- runtime: props.runtime,
16
- lambdaDescription: props.lambdaDescription || `${id} lambda`,
17
- roleDescription: props.roleDescription || `${id} custom resource lambda`,
18
- inlinePolicy: props.inlinePolicy
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
- const resource = new aws_cdk_lib_1.CustomResource(this, `${id}Resource`, {
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tUmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy91dGlsaXRpZXMvY3VzdG9tUmVzb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBR3FCO0FBQ3JCLG1FQUF3RDtBQUV4RCx1REFBNEQ7QUFDNUQsMkNBQXVDO0FBRXZDLDhDQUFzRDtBQWV0RCxNQUFhLGNBQWUsU0FBUSxzQkFBUztJQUczQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTBCO1FBQ2xFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxjQUFjLEdBQUcsSUFBSSwwQkFBaUIsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRTtZQUNoRSxJQUFJLEVBQUUsaUJBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDO1lBQ3hELE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVTtZQUN4QixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87WUFDdEIsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixJQUFJLEdBQUcsRUFBRSxTQUFTO1lBQzVELGVBQWUsRUFBRSxLQUFLLENBQUMsZUFBZSxJQUFJLEdBQUcsRUFBRSx5QkFBeUI7WUFDeEUsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZO1NBQ2pDLENBQUMsQ0FBQztRQUVILE1BQU0sUUFBUSxHQUFHLElBQUksMkJBQVEsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRTtZQUNuRCxjQUFjLEVBQUUsY0FBYztTQUMvQixDQUFDLENBQUM7UUFFSCxNQUFNLFFBQVEsR0FBRyxJQUFJLDRCQUFjLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUU7WUFDekQsWUFBWSxFQUFFLFFBQVEsQ0FBQyxZQUFZO1lBQ25DLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtTQUM3QixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDekQsQ0FBQztDQUNGO0FBMUJELHdDQTBCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEN1c3RvbVJlc291cmNlIGFzIGN1c3RvbVJlc291cmNlLFxuICB0eXBlIEFzc2V0T3B0aW9uc1xufSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSBcImF3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXNcIjtcbmltcG9ydCB7IHR5cGUgUG9saWN5RG9jdW1lbnQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHsgQ29kZSwgdHlwZSBSdW50aW1lIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5cbmltcG9ydCB7IFNpbmdsZXRvbkZ1bmN0aW9uIH0gZnJvbSBcIi4uL2NvbXB1dGUvbGFtYmRhXCI7XG5cbmludGVyZmFjZSBDdXN0b21SZXNvdXJjZVByb3BzIHtcbiAgcnVudGltZTogUnVudGltZTtcbiAgcm9sZURlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBsYW1iZGFEZXNjcmlwdGlvbj86IHN0cmluZztcbiAgaW5saW5lUG9saWN5OiB7XG4gICAgW25hbWU6IHN0cmluZ106IFBvbGljeURvY3VtZW50O1xuICB9O1xuICBwcm9wZXJ0aWVzPzoge1xuICAgIFtrZXk6IHN0cmluZ106IHN0cmluZzsgLy8gVXNlZCB0byBiZSBgW2tleTogc3RyaW5nXTogYW55YCwgdGhpcyBjb3VsZCBicmVha1xuICB9O1xuICBjb2RlUGF0aDogc3RyaW5nO1xuICBhc3NldE9wdGlvbnM/OiBBc3NldE9wdGlvbnM7XG59XG5leHBvcnQgY2xhc3MgQ3VzdG9tUmVzb3VyY2UgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzcG9uc2U6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQ3VzdG9tUmVzb3VyY2VQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBsYW1iZGFGdW5jdGlvbiA9IG5ldyBTaW5nbGV0b25GdW5jdGlvbih0aGlzLCBgJHtpZH1MYW1iZGFgLCB7XG4gICAgICBjb2RlOiBDb2RlLmZyb21Bc3NldChwcm9wcy5jb2RlUGF0aCwgcHJvcHMuYXNzZXRPcHRpb25zKSxcbiAgICAgIGhhbmRsZXI6IGAke2lkfS5oYW5kbGVyYCxcbiAgICAgIHJ1bnRpbWU6IHByb3BzLnJ1bnRpbWUsXG4gICAgICBsYW1iZGFEZXNjcmlwdGlvbjogcHJvcHMubGFtYmRhRGVzY3JpcHRpb24gfHwgYCR7aWR9IGxhbWJkYWAsXG4gICAgICByb2xlRGVzY3JpcHRpb246IHByb3BzLnJvbGVEZXNjcmlwdGlvbiB8fCBgJHtpZH0gY3VzdG9tIHJlc291cmNlIGxhbWJkYWAsXG4gICAgICBpbmxpbmVQb2xpY3k6IHByb3BzLmlubGluZVBvbGljeVxuICAgIH0pO1xuXG4gICAgY29uc3QgcHJvdmlkZXIgPSBuZXcgUHJvdmlkZXIodGhpcywgYCR7aWR9UHJvdmlkZXJgLCB7XG4gICAgICBvbkV2ZW50SGFuZGxlcjogbGFtYmRhRnVuY3Rpb25cbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc291cmNlID0gbmV3IGN1c3RvbVJlc291cmNlKHRoaXMsIGAke2lkfVJlc291cmNlYCwge1xuICAgICAgc2VydmljZVRva2VuOiBwcm92aWRlci5zZXJ2aWNlVG9rZW4sXG4gICAgICBwcm9wZXJ0aWVzOiBwcm9wcy5wcm9wZXJ0aWVzXG4gICAgfSk7XG5cbiAgICB0aGlzLnJlc3BvbnNlID0gcmVzb3VyY2UuZ2V0QXR0KFwiUmVzcG9uc2VcIikudG9TdHJpbmcoKTtcbiAgfVxufVxuIl19
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tUmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy91dGlsaXRpZXMvY3VzdG9tUmVzb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBSXFCO0FBQ3JCLG1FQUF3RDtBQUV4RCx1REFBNEQ7QUFDNUQsMkNBQXVDO0FBRXZDLDhDQUFzRTtBQXVCdEUsTUFBYSxjQUFlLFNBQVEsc0JBQVM7SUFJM0MsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUEwQjtRQUNsRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLG1DQUFtQztRQUNuQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN6QyxNQUFNLElBQUksS0FBSyxDQUNiLHVFQUF1RSxDQUN4RSxDQUFDO1FBQ0osQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDdkMsTUFBTSxJQUFJLEtBQUssQ0FDYix5RUFBeUUsQ0FDMUUsQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLFlBQVksR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztRQUN4QyxNQUFNLElBQUksR0FBRyxZQUFZO1lBQ3ZCLENBQUMsQ0FBQyxpQkFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsVUFBVyxDQUFDO1lBQ3BDLENBQUMsQ0FBQyxpQkFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUyxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN4RCxNQUFNLE9BQU8sR0FDWCxLQUFLLENBQUMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN0RSxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEdBQUcsQ0FBQztRQUVsRCw2RkFBNkY7UUFDN0YsTUFBTSxjQUFjLEdBQUcsWUFBWTtZQUNqQyxDQUFDLENBQUMsSUFBSSx1QkFBYyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFO2dCQUN0QyxJQUFJO2dCQUNKLE9BQU87Z0JBQ1AsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO2dCQUN0QixPQUFPO2dCQUNQLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxHQUFHLEVBQUUsU0FBUztnQkFDNUQsZUFBZSxFQUNiLEtBQUssQ0FBQyxlQUFlLElBQUksR0FBRyxFQUFFLHlCQUF5QjtnQkFDekQsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZO2FBQ2pDLENBQUM7WUFDSixDQUFDLENBQUMsSUFBSSwwQkFBaUIsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRTtnQkFDekMsSUFBSTtnQkFDSixPQUFPO2dCQUNQLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztnQkFDdEIsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixJQUFJLEdBQUcsRUFBRSxTQUFTO2dCQUM1RCxlQUFlLEVBQ2IsS0FBSyxDQUFDLGVBQWUsSUFBSSxHQUFHLEVBQUUseUJBQXlCO2dCQUN6RCxZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVk7YUFDakMsQ0FBQyxDQUFDO1FBRVAsTUFBTSxRQUFRLEdBQUcsSUFBSSwyQkFBUSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFO1lBQ25ELGNBQWMsRUFBRSxjQUFjO1NBQy9CLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSw0QkFBYyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFO1lBQ3hELFlBQVksRUFBRSxRQUFRLENBQUMsWUFBWTtZQUNuQyxVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7U0FDN0IsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM5RCxDQUFDO0NBQ0Y7QUE1REQsd0NBNERDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ3VzdG9tUmVzb3VyY2UgYXMgY3VzdG9tUmVzb3VyY2UsXG4gIER1cmF0aW9uLFxuICB0eXBlIEFzc2V0T3B0aW9uc1xufSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSBcImF3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXNcIjtcbmltcG9ydCB7IHR5cGUgUG9saWN5U3RhdGVtZW50IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7IENvZGUsIHR5cGUgUnVudGltZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG5pbXBvcnQgeyBTaW5nbGV0b25GdW5jdGlvbiwgTGFtYmRhRnVuY3Rpb24gfSBmcm9tIFwiLi4vY29tcHV0ZS9sYW1iZGFcIjtcblxuaW50ZXJmYWNlIEN1c3RvbVJlc291cmNlUHJvcHMge1xuICBydW50aW1lOiBSdW50aW1lO1xuICByb2xlRGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGxhbWJkYURlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBpbmxpbmVQb2xpY3k6IFBvbGljeVN0YXRlbWVudFtdO1xuICBwcm9wZXJ0aWVzPzoge1xuICAgIFtrZXk6IHN0cmluZ106IHN0cmluZzsgLy8gVXNlZCB0byBiZSBgW2tleTogc3RyaW5nXTogYW55YCwgdGhpcyBjb3VsZCBicmVha1xuICB9O1xuXG4gIC8vIENvZGUgc291cmNlXG4gIGNvZGVQYXRoPzogc3RyaW5nO1xuICBpbmxpbmVDb2RlPzogc3RyaW5nO1xuXG4gIC8vIEFzc2V0IG9wdGlvbnMgKG9ubHkgdXNlZCB3aXRoIGNvZGVQYXRoKVxuICBhc3NldE9wdGlvbnM/OiBBc3NldE9wdGlvbnM7XG5cbiAgLy8gT3B0aW9uYWwgb3ZlcnJpZGVzXG4gIGhhbmRsZXI/OiBzdHJpbmc7IC8vIERlZmF1bHQ6IGAke2lkfS5oYW5kbGVyYCBmb3IgY29kZVBhdGgsIGBpbmRleC5oYW5kbGVyYCBmb3IgaW5saW5lQ29kZVxuICB0aW1lb3V0PzogRHVyYXRpb247IC8vIERlZmF1bHQ6IDMwMHMgKDUgbWludXRlcylcbn1cblxuZXhwb3J0IGNsYXNzIEN1c3RvbVJlc291cmNlIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IHJlc3BvbnNlOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZTogY3VzdG9tUmVzb3VyY2U7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEN1c3RvbVJlc291cmNlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgLy8gVmFsaWRhdGUgZXhhY3RseSBvbmUgY29kZSBzb3VyY2VcbiAgICBpZiAoIXByb3BzLmNvZGVQYXRoICYmICFwcm9wcy5pbmxpbmVDb2RlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiQ3VzdG9tUmVzb3VyY2UgcmVxdWlyZXMgZWl0aGVyIGNvZGVQYXRoIG9yIGlubGluZUNvZGUgdG8gYmUgc3BlY2lmaWVkXCJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChwcm9wcy5jb2RlUGF0aCAmJiBwcm9wcy5pbmxpbmVDb2RlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiQ3VzdG9tUmVzb3VyY2UgcmVxdWlyZXMgZXhhY3RseSBvbmUgb2YgY29kZVBhdGggb3IgaW5saW5lQ29kZSwgbm90IGJvdGhcIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBpc0lubGluZUNvZGUgPSAhIXByb3BzLmlubGluZUNvZGU7XG4gICAgY29uc3QgY29kZSA9IGlzSW5saW5lQ29kZVxuICAgICAgPyBDb2RlLmZyb21JbmxpbmUocHJvcHMuaW5saW5lQ29kZSEpXG4gICAgICA6IENvZGUuZnJvbUFzc2V0KHByb3BzLmNvZGVQYXRoISwgcHJvcHMuYXNzZXRPcHRpb25zKTtcbiAgICBjb25zdCBoYW5kbGVyID1cbiAgICAgIHByb3BzLmhhbmRsZXIgPz8gKGlzSW5saW5lQ29kZSA/IFwiaW5kZXguaGFuZGxlclwiIDogYCR7aWR9LmhhbmRsZXJgKTtcbiAgICBjb25zdCB0aW1lb3V0ID0gcHJvcHMudGltZW91dD8udG9TZWNvbmRzKCkgPz8gMzAwO1xuXG4gICAgLy8gVXNlIExhbWJkYUZ1bmN0aW9uIGZvciBpbmxpbmUgY29kZSAodW5pcXVlIHBlciB1c2UpLCBTaW5nbGV0b25GdW5jdGlvbiBmb3IgYXNzZXRzIChzaGFyZWQpXG4gICAgY29uc3QgbGFtYmRhRnVuY3Rpb24gPSBpc0lubGluZUNvZGVcbiAgICAgID8gbmV3IExhbWJkYUZ1bmN0aW9uKHRoaXMsIGAke2lkfUxhbWJkYWAsIHtcbiAgICAgICAgICBjb2RlLFxuICAgICAgICAgIGhhbmRsZXIsXG4gICAgICAgICAgcnVudGltZTogcHJvcHMucnVudGltZSxcbiAgICAgICAgICB0aW1lb3V0LFxuICAgICAgICAgIGxhbWJkYURlc2NyaXB0aW9uOiBwcm9wcy5sYW1iZGFEZXNjcmlwdGlvbiB8fCBgJHtpZH0gbGFtYmRhYCxcbiAgICAgICAgICByb2xlRGVzY3JpcHRpb246XG4gICAgICAgICAgICBwcm9wcy5yb2xlRGVzY3JpcHRpb24gfHwgYCR7aWR9IGN1c3RvbSByZXNvdXJjZSBsYW1iZGFgLFxuICAgICAgICAgIGlubGluZVBvbGljeTogcHJvcHMuaW5saW5lUG9saWN5XG4gICAgICAgIH0pXG4gICAgICA6IG5ldyBTaW5nbGV0b25GdW5jdGlvbih0aGlzLCBgJHtpZH1MYW1iZGFgLCB7XG4gICAgICAgICAgY29kZSxcbiAgICAgICAgICBoYW5kbGVyLFxuICAgICAgICAgIHJ1bnRpbWU6IHByb3BzLnJ1bnRpbWUsXG4gICAgICAgICAgbGFtYmRhRGVzY3JpcHRpb246IHByb3BzLmxhbWJkYURlc2NyaXB0aW9uIHx8IGAke2lkfSBsYW1iZGFgLFxuICAgICAgICAgIHJvbGVEZXNjcmlwdGlvbjpcbiAgICAgICAgICAgIHByb3BzLnJvbGVEZXNjcmlwdGlvbiB8fCBgJHtpZH0gY3VzdG9tIHJlc291cmNlIGxhbWJkYWAsXG4gICAgICAgICAgaW5saW5lUG9saWN5OiBwcm9wcy5pbmxpbmVQb2xpY3lcbiAgICAgICAgfSk7XG5cbiAgICBjb25zdCBwcm92aWRlciA9IG5ldyBQcm92aWRlcih0aGlzLCBgJHtpZH1Qcm92aWRlcmAsIHtcbiAgICAgIG9uRXZlbnRIYW5kbGVyOiBsYW1iZGFGdW5jdGlvblxuICAgIH0pO1xuXG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyBjdXN0b21SZXNvdXJjZSh0aGlzLCBgJHtpZH1SZXNvdXJjZWAsIHtcbiAgICAgIHNlcnZpY2VUb2tlbjogcHJvdmlkZXIuc2VydmljZVRva2VuLFxuICAgICAgcHJvcGVydGllczogcHJvcHMucHJvcGVydGllc1xuICAgIH0pO1xuXG4gICAgdGhpcy5yZXNwb25zZSA9IHRoaXMucmVzb3VyY2UuZ2V0QXR0KFwiUmVzcG9uc2VcIikudG9TdHJpbmcoKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,8 @@
1
+ export default class CidrBlock {
2
+ private cidrBlock;
3
+ private configFile;
4
+ constructor();
5
+ writeState(): void;
6
+ getCidrBlock(): string;
7
+ updateState(cidrBlock: string, status: boolean): void;
8
+ }
@@ -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=
@@ -1,2 +1,3 @@
1
1
  export * from "./getConfig";
2
+ export * from "./resourceNaming";
2
3
  export * from "./standardTagsAspect";
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDhDQUE0QjtBQUM1Qix1REFBcUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9nZXRDb25maWdcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3N0YW5kYXJkVGFnc0FzcGVjdFwiO1xuIl19
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
+ }