@fjall/components-infrastructure 0.80.4 → 0.81.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/dist/lib/__tests__/setup.js +1 -78
  2. package/dist/lib/resources/aws/compute/ecsFreeTier.d.ts +2 -1
  3. package/dist/lib/resources/aws/compute/ecsFreeTier.js +1 -352
  4. package/dist/lib/resources/aws/compute/ecsSpot.d.ts +2 -1
  5. package/dist/lib/resources/aws/compute/ecsSpot.js +1 -332
  6. package/dist/lib/resources/aws/compute/utilities/capacityProviderDrainWaiter.js +1 -180
  7. package/dist/lib/resources/aws/utilities/cfnOutput.js +1 -13
  8. package/package.json +3 -3
  9. package/dist/lib/patterns/aws/cdn.d.ts +0 -133
  10. package/dist/lib/patterns/aws/cdn.js +0 -216
  11. package/dist/lib/patterns/aws/dynamodb.d.ts +0 -66
  12. package/dist/lib/patterns/aws/dynamodb.js +0 -106
  13. package/dist/lib/patterns/aws/loadBalancer.d.ts +0 -163
  14. package/dist/lib/patterns/aws/loadBalancer.js +0 -278
  15. package/dist/lib/patterns/aws/queue.d.ts +0 -61
  16. package/dist/lib/patterns/aws/queue.js +0 -103
  17. package/dist/lib/resources/aws/cdn/cloudFront.d.ts +0 -65
  18. package/dist/lib/resources/aws/cdn/cloudFront.js +0 -135
  19. package/dist/lib/resources/aws/cdn/index.d.ts +0 -1
  20. package/dist/lib/resources/aws/cdn/index.js +0 -18
  21. package/dist/lib/resources/aws/compute/capacityProviderDrainWaiter.d.ts +0 -20
  22. package/dist/lib/resources/aws/compute/capacityProviderDrainWaiter.js +0 -180
  23. package/dist/lib/resources/aws/database/dynamodb.d.ts +0 -70
  24. package/dist/lib/resources/aws/database/dynamodb.js +0 -170
  25. package/dist/lib/resources/aws/database/rdsDeletionWaiter.d.ts +0 -33
  26. package/dist/lib/resources/aws/database/rdsDeletionWaiter.js +0 -74
  27. package/dist/lib/resources/aws/messaging/index.d.ts +0 -1
  28. package/dist/lib/resources/aws/messaging/index.js +0 -18
  29. package/dist/lib/resources/aws/messaging/sqs.d.ts +0 -65
  30. package/dist/lib/resources/aws/messaging/sqs.js +0 -195
  31. package/dist/lib/resources/aws/networking/vpcEndpoint.d.ts +0 -20
  32. package/dist/lib/resources/aws/networking/vpcEndpoint.js +0 -59
  33. package/dist/lib/resources/aws/networking/vpcEndpoints.d.ts +0 -71
  34. package/dist/lib/resources/aws/networking/vpcEndpoints.js +0 -125
  35. package/dist/lib/resources/aws/utilities/cfnOutput.test.d.ts +0 -1
  36. package/dist/lib/resources/aws/utilities/cfnOutput.test.js +0 -102
  37. package/dist/lib/utils/sanitizeCfnKey.d.ts +0 -5
  38. package/dist/lib/utils/sanitizeCfnKey.js +0 -11
  39. package/dist/lib/utils/tagResource.d.ts +0 -24
  40. package/dist/lib/utils/tagResource.js +0 -30
@@ -1,170 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DynamoDBTable = void 0;
4
- const constructs_1 = require("constructs");
5
- const aws_cdk_lib_1 = require("aws-cdk-lib");
6
- const aws_dynamodb_1 = require("aws-cdk-lib/aws-dynamodb");
7
- function toAttributeType(type) {
8
- switch (type) {
9
- case "S":
10
- return aws_dynamodb_1.AttributeType.STRING;
11
- case "N":
12
- return aws_dynamodb_1.AttributeType.NUMBER;
13
- case "B":
14
- return aws_dynamodb_1.AttributeType.BINARY;
15
- }
16
- }
17
- function toBillingMode(mode) {
18
- switch (mode) {
19
- case "PROVISIONED":
20
- return aws_dynamodb_1.BillingMode.PROVISIONED;
21
- case "PAY_PER_REQUEST":
22
- default:
23
- return aws_dynamodb_1.BillingMode.PAY_PER_REQUEST;
24
- }
25
- }
26
- function toStreamViewType(stream) {
27
- switch (stream) {
28
- case "NEW_IMAGE":
29
- return aws_dynamodb_1.StreamViewType.NEW_IMAGE;
30
- case "OLD_IMAGE":
31
- return aws_dynamodb_1.StreamViewType.OLD_IMAGE;
32
- case "NEW_AND_OLD_IMAGES":
33
- return aws_dynamodb_1.StreamViewType.NEW_AND_OLD_IMAGES;
34
- case "KEYS_ONLY":
35
- return aws_dynamodb_1.StreamViewType.KEYS_ONLY;
36
- default:
37
- return undefined;
38
- }
39
- }
40
- function toRemovalPolicy(policy) {
41
- switch (policy) {
42
- case "RETAIN":
43
- return aws_cdk_lib_1.RemovalPolicy.RETAIN;
44
- case "SNAPSHOT":
45
- return aws_cdk_lib_1.RemovalPolicy.SNAPSHOT;
46
- case "DESTROY":
47
- default:
48
- return aws_cdk_lib_1.RemovalPolicy.DESTROY;
49
- }
50
- }
51
- class DynamoDBTable extends constructs_1.Construct {
52
- constructor(scope, id, props) {
53
- super(scope, id);
54
- this.id = id;
55
- this.table = new aws_dynamodb_1.Table(this, `${id}Table`, {
56
- tableName: props.tableName,
57
- partitionKey: {
58
- name: props.partitionKey.name,
59
- type: toAttributeType(props.partitionKey.type)
60
- },
61
- sortKey: props.sortKey
62
- ? {
63
- name: props.sortKey.name,
64
- type: toAttributeType(props.sortKey.type)
65
- }
66
- : undefined,
67
- billingMode: toBillingMode(props.billingMode),
68
- readCapacity: props.billingMode === "PROVISIONED" ? props.readCapacity : undefined,
69
- writeCapacity: props.billingMode === "PROVISIONED" ? props.writeCapacity : undefined,
70
- stream: toStreamViewType(props.stream),
71
- pointInTimeRecovery: props.pointInTimeRecovery ?? true,
72
- removalPolicy: toRemovalPolicy(props.removalPolicy),
73
- timeToLiveAttribute: props.timeToLiveAttribute
74
- });
75
- // Add Global Secondary Indexes
76
- if (props.globalSecondaryIndexes) {
77
- for (const gsi of props.globalSecondaryIndexes) {
78
- const gsiProps = {
79
- indexName: gsi.indexName,
80
- partitionKey: {
81
- name: gsi.partitionKey.name,
82
- type: toAttributeType(gsi.partitionKey.type)
83
- },
84
- sortKey: gsi.sortKey
85
- ? {
86
- name: gsi.sortKey.name,
87
- type: toAttributeType(gsi.sortKey.type)
88
- }
89
- : undefined,
90
- projectionType: gsi.projectionType,
91
- nonKeyAttributes: gsi.nonKeyAttributes
92
- };
93
- this.table.addGlobalSecondaryIndex(gsiProps);
94
- }
95
- }
96
- new aws_cdk_lib_1.CfnOutput(this, `${id}TableName`, {
97
- key: `${id}TableName`,
98
- value: this.table.tableName,
99
- description: `DynamoDB table name for ${id}`
100
- });
101
- new aws_cdk_lib_1.CfnOutput(this, `${id}TableArn`, {
102
- key: `${id}TableArn`,
103
- value: this.table.tableArn,
104
- description: `DynamoDB table ARN for ${id}`
105
- });
106
- if (props.stream) {
107
- new aws_cdk_lib_1.CfnOutput(this, `${id}TableStreamArn`, {
108
- key: `${id}TableStreamArn`,
109
- value: this.table.tableStreamArn || "",
110
- description: `DynamoDB table stream ARN for ${id}`
111
- });
112
- }
113
- }
114
- /**
115
- * Get the DynamoDB table name.
116
- */
117
- getTableName() {
118
- return this.table.tableName;
119
- }
120
- /**
121
- * Get the DynamoDB table ARN.
122
- */
123
- getTableArn() {
124
- return this.table.tableArn;
125
- }
126
- /**
127
- * Get the DynamoDB table stream ARN (if streaming is enabled).
128
- */
129
- getTableStreamArn() {
130
- return this.table.tableStreamArn;
131
- }
132
- /**
133
- * Get the underlying CDK Table construct.
134
- */
135
- getTable() {
136
- return this.table;
137
- }
138
- /**
139
- * Grant read permissions to the grantee.
140
- */
141
- grantRead(grantee) {
142
- return this.table.grantReadData(grantee);
143
- }
144
- /**
145
- * Grant write permissions to the grantee.
146
- */
147
- grantWrite(grantee) {
148
- return this.table.grantWriteData(grantee);
149
- }
150
- /**
151
- * Grant read and write permissions to the grantee.
152
- */
153
- grantReadWrite(grantee) {
154
- return this.table.grantReadWriteData(grantee);
155
- }
156
- /**
157
- * Grant full access (read, write, delete) to the grantee.
158
- */
159
- grantFullAccess(grantee) {
160
- return this.table.grantFullAccess(grantee);
161
- }
162
- /**
163
- * Grant stream read permissions to the grantee.
164
- */
165
- grantStreamRead(grantee) {
166
- return this.table.grantStreamRead(grantee);
167
- }
168
- }
169
- exports.DynamoDBTable = DynamoDBTable;
170
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1vZGIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy9kYXRhYmFzZS9keW5hbW9kYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyQ0FBdUM7QUFDdkMsNkNBQXVEO0FBQ3ZELDJEQU9rQztBQWlDbEMsU0FBUyxlQUFlLENBQUMsSUFBMkI7SUFDbEQsUUFBUSxJQUFJLEVBQUUsQ0FBQztRQUNiLEtBQUssR0FBRztZQUNOLE9BQU8sNEJBQWEsQ0FBQyxNQUFNLENBQUM7UUFDOUIsS0FBSyxHQUFHO1lBQ04sT0FBTyw0QkFBYSxDQUFDLE1BQU0sQ0FBQztRQUM5QixLQUFLLEdBQUc7WUFDTixPQUFPLDRCQUFhLENBQUMsTUFBTSxDQUFDO0lBQ2hDLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxhQUFhLENBQ3BCLElBQXdDO0lBRXhDLFFBQVEsSUFBSSxFQUFFLENBQUM7UUFDYixLQUFLLGFBQWE7WUFDaEIsT0FBTywwQkFBVyxDQUFDLFdBQVcsQ0FBQztRQUNqQyxLQUFLLGlCQUFpQixDQUFDO1FBQ3ZCO1lBQ0UsT0FBTywwQkFBVyxDQUFDLGVBQWUsQ0FBQztJQUN2QyxDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQ3ZCLE1BQXVFO0lBRXZFLFFBQVEsTUFBTSxFQUFFLENBQUM7UUFDZixLQUFLLFdBQVc7WUFDZCxPQUFPLDZCQUFjLENBQUMsU0FBUyxDQUFDO1FBQ2xDLEtBQUssV0FBVztZQUNkLE9BQU8sNkJBQWMsQ0FBQyxTQUFTLENBQUM7UUFDbEMsS0FBSyxvQkFBb0I7WUFDdkIsT0FBTyw2QkFBYyxDQUFDLGtCQUFrQixDQUFDO1FBQzNDLEtBQUssV0FBVztZQUNkLE9BQU8sNkJBQWMsQ0FBQyxTQUFTLENBQUM7UUFDbEM7WUFDRSxPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUN0QixNQUEwQztJ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QyxPQUFPLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxVQUFVLENBQUMsT0FBbUI7UUFDbkMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxjQUFjLENBQUMsT0FBbUI7UUFDdkMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRDs7T0FFRztJQUNJLGVBQWUsQ0FBQyxPQUFtQjtRQUN4QyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRDs7T0FFRztJQUNJLGVBQWUsQ0FBQyxPQUFtQjtRQUN4QyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzdDLENBQUM7Q0FDRjtBQXhJRCxzQ0F3SUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgQ2ZuT3V0cHV0LCBSZW1vdmFsUG9saWN5IH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQge1xuICBUYWJsZSxcbiAgQXR0cmlidXRlVHlwZSxcbiAgQmlsbGluZ01vZGUsXG4gIFN0cmVhbVZpZXdUeXBlLFxuICB0eXBlIEdsb2JhbFNlY29uZGFyeUluZGV4UHJvcHMsXG4gIHR5cGUgSVRhYmxlXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZHluYW1vZGJcIjtcbmltcG9ydCB7IHR5cGUgSUdyYW50YWJsZSwgdHlwZSBHcmFudCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5cbmV4cG9ydCB0eXBlIER5bmFtb0RCQXR0cmlidXRlVHlwZSA9IFwiU1wiIHwgXCJOXCIgfCBcIkJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBEeW5hbW9EQktleVNjaGVtYSB7XG4gIG5hbWU6IHN0cmluZztcbiAgdHlwZTogRHluYW1vREJBdHRyaWJ1dGVUeXBlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIER5bmFtb0RCR2xvYmFsU2Vjb25kYXJ5SW5kZXgge1xuICBpbmRleE5hbWU6IHN0cmluZztcbiAgcGFydGl0aW9uS2V5OiBEeW5hbW9EQktleVNjaGVtYTtcbiAgc29ydEtleT86IER5bmFtb0RCS2V5U2NoZW1hO1xuICBwcm9qZWN0aW9uVHlwZT86IFwiQUxMXCIgfCBcIktFWVNfT05MWVwiIHwgXCJJTkNMVURFXCI7XG4gIG5vbktleUF0dHJpYnV0ZXM/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEeW5hbW9EQlRhYmxlUHJvcHMge1xuICB0YWJsZU5hbWU/OiBzdHJpbmc7XG4gIHBhcnRpdGlvbktleTogRHluYW1vREJLZXlTY2hlbWE7XG4gIHNvcnRLZXk/OiBEeW5hbW9EQktleVNjaGVtYTtcbiAgYmlsbGluZ01vZGU/OiBcIlBBWV9QRVJfUkVRVUVTVFwiIHwgXCJQUk9WSVNJT05FRFwiO1xuICByZWFkQ2FwYWNpdHk/OiBudW1iZXI7XG4gIHdyaXRlQ2FwYWNpdHk/OiBudW1iZXI7XG4gIGdsb2JhbFNlY29uZGFyeUluZGV4ZXM/OiBEeW5hbW9EQkdsb2JhbFNlY29uZGFyeUluZGV4W107XG4gIHRpbWVUb0xpdmVBdHRyaWJ1dGU/OiBzdHJpbmc7XG4gIHN0cmVhbT86IFwiTkVXX0lNQUdFXCIgfCBcIk9MRF9JTUFHRVwiIHwgXCJORVdfQU5EX09MRF9JTUFHRVNcIiB8IFwiS0VZU19PTkxZXCI7XG4gIHBvaW50SW5UaW1lUmVjb3Zlcnk/OiBib29sZWFuO1xuICBlbmNyeXB0aW9uPzogXCJBV1NfT1dORURcIiB8IFwiQVdTX01BTkFHRURcIiB8IFwiQ1VTVE9NRVJfTUFOQUdFRFwiO1xuICByZW1vdmFsUG9saWN5PzogXCJERVNUUk9ZXCIgfCBcIlJFVEFJTlwiIHwgXCJTTkFQU0hPVFwiO1xufVxuXG5mdW5jdGlvbiB0b0F0dHJpYnV0ZVR5cGUodHlwZTogRHluYW1vREJBdHRyaWJ1dGVUeXBlKTogQXR0cmlidXRlVHlwZSB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgXCJTXCI6XG4gICAgICByZXR1cm4gQXR0cmlidXRlVHlwZS5TVFJJTkc7XG4gICAgY2FzZSBcIk5cIjpcbiAgICAgIHJldHVybiBBdHRyaWJ1dGVUeXBlLk5VTUJFUjtcbiAgICBjYXNlIFwiQlwiOlxuICAgICAgcmV0dXJuIEF0dHJpYnV0ZVR5cGUuQklOQVJZO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvQmlsbGluZ01vZGUoXG4gIG1vZGU/OiBcIlBBWV9QRVJfUkVRVUVTVFwiIHwgXCJQUk9WSVNJT05FRFwiXG4pOiBCaWxsaW5nTW9kZSB7XG4gIHN3aXRjaCAobW9kZSkge1xuICAgIGNhc2UgXCJQUk9WSVNJT05FRFwiOlxuICAgICAgcmV0dXJuIEJpbGxpbmdNb2RlLlBST1ZJU0lPTkVEO1xuICAgIGNhc2UgXCJQQVlfUEVSX1JFUVVFU1RcIjpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIEJpbGxpbmdNb2RlLlBBWV9QRVJfUkVRVUVTVDtcbiAgfVxufVxuXG5mdW5jdGlvbiB0b1N0cmVhbVZpZXdUeXBlKFxuICBzdHJlYW0/OiBcIk5FV19JTUFHRVwiIHwgXCJPTERfSU1BR0VcIiB8IFwiTkVXX0FORF9PTERfSU1BR0VTXCIgfCBcIktFWVNfT05MWVwiXG4pOiBTdHJlYW1WaWV3VHlwZSB8IHVuZGVmaW5lZCB7XG4gIHN3aXRjaCAoc3RyZWFtKSB7XG4gICAgY2FzZSBcIk5FV19JTUFHRVwiOlxuICAgICAgcmV0dXJuIFN0cmVhbVZpZXdUeXBlLk5FV19JTUFHRTtcbiAgICBjYXNlIFwiT0xEX0lNQUdFXCI6XG4gICAgICByZXR1cm4gU3RyZWFtVmlld1R5cGUuT0xEX0lNQUdFO1xuICAgIGNhc2UgXCJORVdfQU5EX09MRF9JTUFHRVNcIjpcbiAgICAgIHJldHVybiBTdHJlYW1WaWV3VHlwZS5ORVdfQU5EX09MRF9JTUFHRVM7XG4gICAgY2FzZSBcIktFWVNfT05MWVwiOlxuICAgICAgcmV0dXJuIFN0cmVhbVZpZXdUeXBlLktFWVNfT05MWTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG5mdW5jdGlvbiB0b1JlbW92YWxQb2xpY3koXG4gIHBvbGljeT86IFwiREVTVFJPWVwiIHwgXCJSRVRBSU5cIiB8IFwiU05BUFNIT1RcIlxuKTogUmVtb3ZhbFBvbGljeSB7XG4gIHN3aXRjaCAocG9saWN5KSB7XG4gICAgY2FzZSBcIlJFVEFJTlwiOlxuICAgICAgcmV0dXJuIFJlbW92YWxQb2xpY3kuUkVUQUlOO1xuICAgIGNhc2UgXCJTTkFQU0hPVFwiOlxuICAgICAgcmV0dXJuIFJlbW92YWxQb2xpY3kuU05BUFNIT1Q7XG4gICAgY2FzZSBcIkRFU1RST1lcIjpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFJlbW92YWxQb2xpY3kuREVTVFJPWTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRHluYW1vREJUYWJsZSBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBpZDogc3RyaW5nO1xuICBwcml2YXRlIHRhYmxlOiBUYWJsZTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRHluYW1vREJUYWJsZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLmlkID0gaWQ7XG5cbiAgICB0aGlzLnRhYmxlID0gbmV3IFRhYmxlKHRoaXMsIGAke2lkfVRhYmxlYCwge1xuICAgICAgdGFibGVOYW1lOiBwcm9wcy50YWJsZU5hbWUsXG4gICAgICBwYXJ0aXRpb25LZXk6IHtcbiAgICAgICAgbmFtZTogcHJvcHMucGFydGl0aW9uS2V5Lm5hbWUsXG4gICAgICAgIHR5cGU6IHRvQXR0cmlidXRlVHlwZShwcm9wcy5wYXJ0aXRpb25LZXkudHlwZSlcbiAgICAgIH0sXG4gICAgICBzb3J0S2V5OiBwcm9wcy5zb3J0S2V5XG4gICAgICAgID8ge1xuICAgICAgICAgICAgbmFtZTogcHJvcHMuc29ydEtleS5uYW1lLFxuICAgICAgICAgICAgdHlwZTogdG9BdHRyaWJ1dGVUeXBlKHByb3BzLnNvcnRLZXkudHlwZSlcbiAgICAgICAgICB9XG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgYmlsbGluZ01vZGU6IHRvQmlsbGluZ01vZGUocHJvcHMuYmlsbGluZ01vZGUpLFxuICAgICAgcmVhZENhcGFjaXR5OlxuICAgICAgICBwcm9wcy5iaWxsaW5nTW9kZSA9PT0gXCJQUk9WSVNJT05FRFwiID8gcHJvcHMucmVhZENhcGFjaXR5IDogdW5kZWZpbmVkLFxuICAgICAgd3JpdGVDYXBhY2l0eTpcbiAgICAgICAgcHJvcHMuYmlsbGluZ01vZGUgPT09IFwiUFJPVklTSU9ORURcIiA/IHByb3BzLndyaXRlQ2FwYWNpdHkgOiB1bmRlZmluZWQsXG4gICAgICBzdHJlYW06IHRvU3RyZWFtVmlld1R5cGUocHJvcHMuc3RyZWFtKSxcbiAgICAgIHBvaW50SW5UaW1lUmVjb3Zlcnk6IHByb3BzLnBvaW50SW5UaW1lUmVjb3ZlcnkgPz8gdHJ1ZSxcbiAgICAgIHJlbW92YWxQb2xpY3k6IHRvUmVtb3ZhbFBvbGljeShwcm9wcy5yZW1vdmFsUG9saWN5KSxcbiAgICAgIHRpbWVUb0xpdmVBdHRyaWJ1dGU6IHByb3BzLnRpbWVUb0xpdmVBdHRyaWJ1dGVcbiAgICB9KTtcblxuICAgIC8vIEFkZCBHbG9iYWwgU2Vjb25kYXJ5IEluZGV4ZXNcbiAgICBpZiAocHJvcHMuZ2xvYmFsU2Vjb25kYXJ5SW5kZXhlcykge1xuICAgICAgZm9yIChjb25zdCBnc2kgb2YgcHJvcHMuZ2xvYmFsU2Vjb25kYXJ5SW5kZXhlcykge1xuICAgICAgICBjb25zdCBnc2lQcm9wczogR2xvYmFsU2Vjb25kYXJ5SW5kZXhQcm9wcyA9IHtcbiAgICAgICAgICBpbmRleE5hbWU6IGdzaS5pbmRleE5hbWUsXG4gICAgICAgICAgcGFydGl0aW9uS2V5OiB7XG4gICAgICAgICAgICBuYW1lOiBnc2kucGFydGl0aW9uS2V5Lm5hbWUsXG4gICAgICAgICAgICB0eXBlOiB0b0F0dHJpYnV0ZVR5cGUoZ3NpLnBhcnRpdGlvbktleS50eXBlKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgc29ydEtleTogZ3NpLnNvcnRLZXlcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIG5hbWU6IGdzaS5zb3J0S2V5Lm5hbWUsXG4gICAgICAgICAgICAgICAgdHlwZTogdG9BdHRyaWJ1dGVUeXBlKGdzaS5zb3J0S2V5LnR5cGUpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgIHByb2plY3Rpb25UeXBlOiBnc2kucHJvamVjdGlvblR5cGUgYXMgYW55LFxuICAgICAgICAgIG5vbktleUF0dHJpYnV0ZXM6IGdzaS5ub25LZXlBdHRyaWJ1dGVzXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudGFibGUuYWRkR2xvYmFsU2Vjb25kYXJ5SW5kZXgoZ3NpUHJvcHMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgYCR7aWR9VGFibGVOYW1lYCwge1xuICAgICAga2V5OiBgJHtpZH1UYWJsZU5hbWVgLFxuICAgICAgdmFsdWU6IHRoaXMudGFibGUudGFibGVOYW1lLFxuICAgICAgZGVzY3JpcHRpb246IGBEeW5hbW9EQiB0YWJsZSBuYW1lIGZvciAke2lkfWBcbiAgICB9KTtcblxuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgYCR7aWR9VGFibGVBcm5gLCB7XG4gICAgICBrZXk6IGAke2lkfVRhYmxlQXJuYCxcbiAgICAgIHZhbHVlOiB0aGlzLnRhYmxlLnRhYmxlQXJuLFxuICAgICAgZGVzY3JpcHRpb246IGBEeW5hbW9EQiB0YWJsZSBBUk4gZm9yICR7aWR9YFxuICAgIH0pO1xuXG4gICAgaWYgKHByb3BzLnN0cmVhbSkge1xuICAgICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHtpZH1UYWJsZVN0cmVhbUFybmAsIHtcbiAgICAgICAga2V5OiBgJHtpZH1UYWJsZVN0cmVhbUFybmAsXG4gICAgICAgIHZhbHVlOiB0aGlzLnRhYmxlLnRhYmxlU3RyZWFtQXJuIHx8IFwiXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgRHluYW1vREIgdGFibGUgc3RyZWFtIEFSTiBmb3IgJHtpZH1gXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBEeW5hbW9EQiB0YWJsZSBuYW1lLlxuICAgKi9cbiAgcHVibGljIGdldFRhYmxlTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRhYmxlLnRhYmxlTmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIER5bmFtb0RCIHRhYmxlIEFSTi5cbiAgICovXG4gIHB1YmxpYyBnZXRUYWJsZUFybigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRhYmxlLnRhYmxlQXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgRHluYW1vREIgdGFibGUgc3RyZWFtIEFSTiAoaWYgc3RyZWFtaW5nIGlzIGVuYWJsZWQpLlxuICAgKi9cbiAgcHVibGljIGdldFRhYmxlU3RyZWFtQXJuKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMudGFibGUudGFibGVTdHJlYW1Bcm47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB1bmRlcmx5aW5nIENESyBUYWJsZSBjb25zdHJ1Y3QuXG4gICAqL1xuICBwdWJsaWMgZ2V0VGFibGUoKTogSVRhYmxlIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCByZWFkIHBlcm1pc3Npb25zIHRvIHRoZSBncmFudGVlLlxuICAgKi9cbiAgcHVibGljIGdyYW50UmVhZChncmFudGVlOiBJR3JhbnRhYmxlKTogR3JhbnQge1xuICAgIHJldHVybiB0aGlzLnRhYmxlLmdyYW50UmVhZERhdGEoZ3JhbnRlZSk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgd3JpdGUgcGVybWlzc2lvbnMgdG8gdGhlIGdyYW50ZWUuXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRXcml0ZShncmFudGVlOiBJR3JhbnRhYmxlKTogR3JhbnQge1xuICAgIHJldHVybiB0aGlzLnRhYmxlLmdyYW50V3JpdGVEYXRhKGdyYW50ZWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IHJlYWQgYW5kIHdyaXRlIHBlcm1pc3Npb25zIHRvIHRoZSBncmFudGVlLlxuICAgKi9cbiAgcHVibGljIGdyYW50UmVhZFdyaXRlKGdyYW50ZWU6IElHcmFudGFibGUpOiBHcmFudCB7XG4gICAgcmV0dXJuIHRoaXMudGFibGUuZ3JhbnRSZWFkV3JpdGVEYXRhKGdyYW50ZWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IGZ1bGwgYWNjZXNzIChyZWFkLCB3cml0ZSwgZGVsZXRlKSB0byB0aGUgZ3JhbnRlZS5cbiAgICovXG4gIHB1YmxpYyBncmFudEZ1bGxBY2Nlc3MoZ3JhbnRlZTogSUdyYW50YWJsZSk6IEdyYW50IHtcbiAgICByZXR1cm4gdGhpcy50YWJsZS5ncmFudEZ1bGxBY2Nlc3MoZ3JhbnRlZSk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgc3RyZWFtIHJlYWQgcGVybWlzc2lvbnMgdG8gdGhlIGdyYW50ZWUuXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRTdHJlYW1SZWFkKGdyYW50ZWU6IElHcmFudGFibGUpOiBHcmFudCB7XG4gICAgcmV0dXJuIHRoaXMudGFibGUuZ3JhbnRTdHJlYW1SZWFkKGdyYW50ZWUpO1xuICB9XG59XG4iXX0=
@@ -1,33 +0,0 @@
1
- import { Duration } from "aws-cdk-lib";
2
- import { Construct } from "constructs";
3
- import { CustomResource } from "../utilities/customResource";
4
- /**
5
- * RDS Deletion Waiter - Ensures RDS instance is stable before deletion
6
- *
7
- * Problem: When an RDS read replica is deleted, the primary database enters
8
- * a "modifying" state as it updates its replication configuration. If CloudFormation
9
- * immediately tries to delete the primary with a final snapshot, it fails because
10
- * snapshots require the instance to be in "available" state.
11
- *
12
- * Solution: This custom resource acts as a dependency gate. When CloudFormation
13
- * deletes resources in reverse dependency order:
14
- * 1. Read replica is deleted (triggers primary to enter "modifying" state)
15
- * 2. This waiter's onDelete is invoked - uses AWS SDK waiter until primary is "available"
16
- * 3. Primary database can now be safely deleted with a final snapshot
17
- *
18
- */
19
- interface RdsDeletionWaiterProps {
20
- /**
21
- * The RDS instance identifier to wait for during deletion
22
- */
23
- instanceIdentifier: string;
24
- /**
25
- * Maximum time to wait for the instance to become available (default: 10 minutes)
26
- */
27
- timeout?: Duration;
28
- }
29
- export declare class RdsDeletionWaiter extends Construct {
30
- readonly customResource: CustomResource;
31
- constructor(scope: Construct, id: string, props: RdsDeletionWaiterProps);
32
- }
33
- export {};
@@ -1,74 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RdsDeletionWaiter = void 0;
4
- const aws_cdk_lib_1 = require("aws-cdk-lib");
5
- const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
6
- const aws_iam_1 = require("aws-cdk-lib/aws-iam");
7
- const constructs_1 = require("constructs");
8
- const customResource_1 = require("../utilities/customResource");
9
- class RdsDeletionWaiter extends constructs_1.Construct {
10
- constructor(scope, id, props) {
11
- super(scope, id);
12
- const timeout = props.timeout ?? aws_cdk_lib_1.Duration.minutes(10);
13
- this.customResource = new customResource_1.CustomResource(this, "Resource", {
14
- runtime: aws_lambda_1.Runtime.NODEJS_18_X,
15
- timeout: timeout.plus(aws_cdk_lib_1.Duration.seconds(30)),
16
- lambdaDescription: "RDS deletion waiter handler",
17
- roleDescription: "RDS deletion waiter lambda role",
18
- inlineCode: `
19
- const { RDSClient } = require('@aws-sdk/client-rds');
20
- const { waitUntilDBInstanceAvailable } = require('@aws-sdk/client-rds');
21
-
22
- exports.handler = async (event) => {
23
- console.log('Event:', JSON.stringify(event, null, 2));
24
-
25
- const instanceId = event.ResourceProperties.InstanceIdentifier;
26
- const physicalResourceId = event.PhysicalResourceId || event.LogicalResourceId || 'rds-deletion-waiter';
27
-
28
- // Only wait on Delete - Create/Update return immediately
29
- if (event.RequestType === 'Delete') {
30
- console.log('Waiting for instance to be available:', instanceId);
31
- const client = new RDSClient({});
32
-
33
- try {
34
- await waitUntilDBInstanceAvailable(
35
- { client, maxWaitTime: ${timeout.toSeconds()}, minDelay: 10, maxDelay: 30 },
36
- { DBInstanceIdentifier: instanceId }
37
- );
38
- console.log('Instance is available, deletion can proceed');
39
- } catch (error) {
40
- // Instance not found is fine - it may already be deleted or never existed
41
- if (error.name === 'ResourceNotFoundError' ||
42
- error.message?.includes('DBInstanceNotFound') ||
43
- error.state === 'FAILURE') {
44
- console.log('Instance not found or waiter failed, proceeding with deletion');
45
- } else {
46
- console.error('Error waiting for instance:', error);
47
- throw error;
48
- }
49
- }
50
- }
51
-
52
- return { PhysicalResourceId: physicalResourceId };
53
- };
54
- `,
55
- inlinePolicy: {
56
- rdsDescribe: new aws_iam_1.PolicyDocument({
57
- statements: [
58
- new aws_iam_1.PolicyStatement({
59
- effect: aws_iam_1.Effect.ALLOW,
60
- actions: ["rds:DescribeDBInstances"],
61
- resources: ["*"]
62
- })
63
- ]
64
- })
65
- },
66
- properties: {
67
- InstanceIdentifier: props.instanceIdentifier,
68
- Version: "1.0.0"
69
- }
70
- });
71
- }
72
- }
73
- exports.RdsDeletionWaiter = RdsDeletionWaiter;
74
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmRzRGVsZXRpb25XYWl0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy9kYXRhYmFzZS9yZHNEZWxldGlvbldhaXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBdUM7QUFDdkMsdURBQWlEO0FBQ2pELGlEQUE4RTtBQUM5RSwyQ0FBdUM7QUFDdkMsZ0VBQTZEO0FBOEI3RCxNQUFhLGlCQUFrQixTQUFRLHNCQUFTO0lBRzlDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBNkI7UUFDckUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxJQUFJLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXRELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSwrQkFBYyxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7WUFDekQsT0FBTyxFQUFFLG9CQUFPLENBQUMsV0FBVztZQUM1QixPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMzQyxpQkFBaUIsRUFBRSw2QkFBNkI7WUFDaEQsZUFBZSxFQUFFLGlDQUFpQztZQUNsRCxVQUFVLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7O2lDQWlCZSxPQUFPLENBQUMsU0FBUyxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BbUI3QztZQUNELFlBQVksRUFBRTtnQkFDWixXQUFXLEVBQUUsSUFBSSx3QkFBYyxDQUFDO29CQUM5QixVQUFVLEVBQUU7d0JBQ1YsSUFBSSx5QkFBZSxDQUFDOzRCQUNsQixNQUFNLEVBQUUsZ0JBQU0sQ0FBQyxLQUFLOzRCQUNwQixPQUFPLEVBQUUsQ0FBQyx5QkFBeUIsQ0FBQzs0QkFDcEMsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDO3lCQUNqQixDQUFDO3FCQUNIO2lCQUNGLENBQUM7YUFDSDtZQUNELFVBQVUsRUFBRTtnQkFDVixrQkFBa0IsRUFBRSxLQUFLLENBQUMsa0JBQWtCO2dCQUM1QyxPQUFPLEVBQUUsT0FBTzthQUNqQjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQW5FRCw4Q0FtRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEdXJhdGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgUnVudGltZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCI7XG5pbXBvcnQgeyBQb2xpY3lEb2N1bWVudCwgUG9saWN5U3RhdGVtZW50LCBFZmZlY3QgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IEN1c3RvbVJlc291cmNlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jdXN0b21SZXNvdXJjZVwiO1xuXG4vKipcbiAqIFJEUyBEZWxldGlvbiBXYWl0ZXIgLSBFbnN1cmVzIFJEUyBpbnN0YW5jZSBpcyBzdGFibGUgYmVmb3JlIGRlbGV0aW9uXG4gKlxuICogUHJvYmxlbTogV2hlbiBhbiBSRFMgcmVhZCByZXBsaWNhIGlzIGRlbGV0ZWQsIHRoZSBwcmltYXJ5IGRhdGFiYXNlIGVudGVyc1xuICogYSBcIm1vZGlmeWluZ1wiIHN0YXRlIGFzIGl0IHVwZGF0ZXMgaXRzIHJlcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24uIElmIENsb3VkRm9ybWF0aW9uXG4gKiBpbW1lZGlhdGVseSB0cmllcyB0byBkZWxldGUgdGhlIHByaW1hcnkgd2l0aCBhIGZpbmFsIHNuYXBzaG90LCBpdCBmYWlscyBiZWNhdXNlXG4gKiBzbmFwc2hvdHMgcmVxdWlyZSB0aGUgaW5zdGFuY2UgdG8gYmUgaW4gXCJhdmFpbGFibGVcIiBzdGF0ZS5cbiAqXG4gKiBTb2x1dGlvbjogVGhpcyBjdXN0b20gcmVzb3VyY2UgYWN0cyBhcyBhIGRlcGVuZGVuY3kgZ2F0ZS4gV2hlbiBDbG91ZEZvcm1hdGlvblxuICogZGVsZXRlcyByZXNvdXJjZXMgaW4gcmV2ZXJzZSBkZXBlbmRlbmN5IG9yZGVyOlxuICogICAxLiBSZWFkIHJlcGxpY2EgaXMgZGVsZXRlZCAodHJpZ2dlcnMgcHJpbWFyeSB0byBlbnRlciBcIm1vZGlmeWluZ1wiIHN0YXRlKVxuICogICAyLiBUaGlzIHdhaXRlcidzIG9uRGVsZXRlIGlzIGludm9rZWQgLSB1c2VzIEFXUyBTREsgd2FpdGVyIHVudGlsIHByaW1hcnkgaXMgXCJhdmFpbGFibGVcIlxuICogICAzLiBQcmltYXJ5IGRhdGFiYXNlIGNhbiBub3cgYmUgc2FmZWx5IGRlbGV0ZWQgd2l0aCBhIGZpbmFsIHNuYXBzaG90XG4gKlxuICovXG5cbmludGVyZmFjZSBSZHNEZWxldGlvbldhaXRlclByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBSRFMgaW5zdGFuY2UgaWRlbnRpZmllciB0byB3YWl0IGZvciBkdXJpbmcgZGVsZXRpb25cbiAgICovXG4gIGluc3RhbmNlSWRlbnRpZmllcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBNYXhpbXVtIHRpbWUgdG8gd2FpdCBmb3IgdGhlIGluc3RhbmNlIHRvIGJlY29tZSBhdmFpbGFibGUgKGRlZmF1bHQ6IDEwIG1pbnV0ZXMpXG4gICAqL1xuICB0aW1lb3V0PzogRHVyYXRpb247XG59XG5cbmV4cG9ydCBjbGFzcyBSZHNEZWxldGlvbldhaXRlciBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBjdXN0b21SZXNvdXJjZTogQ3VzdG9tUmVzb3VyY2U7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJkc0RlbGV0aW9uV2FpdGVyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3QgdGltZW91dCA9IHByb3BzLnRpbWVvdXQgPz8gRHVyYXRpb24ubWludXRlcygxMCk7XG5cbiAgICB0aGlzLmN1c3RvbVJlc291cmNlID0gbmV3IEN1c3RvbVJlc291cmNlKHRoaXMsIFwiUmVzb3VyY2VcIiwge1xuICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMThfWCxcbiAgICAgIHRpbWVvdXQ6IHRpbWVvdXQucGx1cyhEdXJhdGlvbi5zZWNvbmRzKDMwKSksXG4gICAgICBsYW1iZGFEZXNjcmlwdGlvbjogXCJSRFMgZGVsZXRpb24gd2FpdGVyIGhhbmRsZXJcIixcbiAgICAgIHJvbGVEZXNjcmlwdGlvbjogXCJSRFMgZGVsZXRpb24gd2FpdGVyIGxhbWJkYSByb2xlXCIsXG4gICAgICBpbmxpbmVDb2RlOiBgXG5jb25zdCB7IFJEU0NsaWVudCB9ID0gcmVxdWlyZSgnQGF3cy1zZGsvY2xpZW50LXJkcycpO1xuY29uc3QgeyB3YWl0VW50aWxEQkluc3RhbmNlQXZhaWxhYmxlIH0gPSByZXF1aXJlKCdAYXdzLXNkay9jbGllbnQtcmRzJyk7XG5cbmV4cG9ydHMuaGFuZGxlciA9IGFzeW5jIChldmVudCkgPT4ge1xuICBjb25zb2xlLmxvZygnRXZlbnQ6JywgSlNPTi5zdHJpbmdpZnkoZXZlbnQsIG51bGwsIDIpKTtcblxuICBjb25zdCBpbnN0YW5jZUlkID0gZXZlbnQuUmVzb3VyY2VQcm9wZXJ0aWVzLkluc3RhbmNlSWRlbnRpZmllcjtcbiAgY29uc3QgcGh5c2ljYWxSZXNvdXJjZUlkID0gZXZlbnQuUGh5c2ljYWxSZXNvdXJjZUlkIHx8IGV2ZW50LkxvZ2ljYWxSZXNvdXJjZUlkIHx8ICdyZHMtZGVsZXRpb24td2FpdGVyJztcblxuICAvLyBPbmx5IHdhaXQgb24gRGVsZXRlIC0gQ3JlYXRlL1VwZGF0ZSByZXR1cm4gaW1tZWRpYXRlbHlcbiAgaWYgKGV2ZW50LlJlcXVlc3RUeXBlID09PSAnRGVsZXRlJykge1xuICAgIGNvbnNvbGUubG9nKCdXYWl0aW5nIGZvciBpbnN0YW5jZSB0byBiZSBhdmFpbGFibGU6JywgaW5zdGFuY2VJZCk7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IFJEU0NsaWVudCh7fSk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgd2FpdFVudGlsREJJbnN0YW5jZUF2YWlsYWJsZShcbiAgICAgICAgeyBjbGllbnQsIG1heFdhaXRUaW1lOiAke3RpbWVvdXQudG9TZWNvbmRzKCl9LCBtaW5EZWxheTogMTAsIG1heERlbGF5OiAzMCB9LFxuICAgICAgICB7IERCSW5zdGFuY2VJZGVudGlmaWVyOiBpbnN0YW5jZUlkIH1cbiAgICAgICk7XG4gICAgICBjb25zb2xlLmxvZygnSW5zdGFuY2UgaXMgYXZhaWxhYmxlLCBkZWxldGlvbiBjYW4gcHJvY2VlZCcpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBJbnN0YW5jZSBub3QgZm91bmQgaXMgZmluZSAtIGl0IG1heSBhbHJlYWR5IGJlIGRlbGV0ZWQgb3IgbmV2ZXIgZXhpc3RlZFxuICAgICAgaWYgKGVycm9yLm5hbWUgPT09ICdSZXNvdXJjZU5vdEZvdW5kRXJyb3InIHx8XG4gICAgICAgICAgZXJyb3IubWVzc2FnZT8uaW5jbHVkZXMoJ0RCSW5zdGFuY2VOb3RGb3VuZCcpIHx8XG4gICAgICAgICAgZXJyb3Iuc3RhdGUgPT09ICdGQUlMVVJFJykge1xuICAgICAgICBjb25zb2xlLmxvZygnSW5zdGFuY2Ugbm90IGZvdW5kIG9yIHdhaXRlciBmYWlsZWQsIHByb2NlZWRpbmcgd2l0aCBkZWxldGlvbicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igd2FpdGluZyBmb3IgaW5zdGFuY2U6JywgZXJyb3IpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4geyBQaHlzaWNhbFJlc291cmNlSWQ6IHBoeXNpY2FsUmVzb3VyY2VJZCB9O1xufTtcbiAgICAgIGAsXG4gICAgICBpbmxpbmVQb2xpY3k6IHtcbiAgICAgICAgcmRzRGVzY3JpYmU6IG5ldyBQb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICAgICAgICBhY3Rpb25zOiBbXCJyZHM6RGVzY3JpYmVEQkluc3RhbmNlc1wiXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF1cbiAgICAgICAgfSlcbiAgICAgIH0sXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIEluc3RhbmNlSWRlbnRpZmllcjogcHJvcHMuaW5zdGFuY2VJZGVudGlmaWVyLFxuICAgICAgICBWZXJzaW9uOiBcIjEuMC4wXCJcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -1 +0,0 @@
1
- export * from "./sqs";
@@ -1,18 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./sqs"), exports);
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy9tZXNzYWdpbmcvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHdDQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL3Nxc1wiO1xuIl19
@@ -1,65 +0,0 @@
1
- import { Construct } from "constructs";
2
- import { type IQueue } from "aws-cdk-lib/aws-sqs";
3
- import { type IGrantable, type Grant } from "aws-cdk-lib/aws-iam";
4
- export interface SQSQueueProps {
5
- queueName?: string;
6
- queueType?: "standard" | "fifo";
7
- visibilityTimeout?: number;
8
- messageRetentionPeriod?: number;
9
- receiveMessageWaitTime?: number;
10
- maxMessageSize?: number;
11
- deliveryDelay?: number;
12
- deadLetterQueue?: {
13
- enabled: boolean;
14
- maxReceiveCount?: number;
15
- queue?: IQueue;
16
- };
17
- encryption?: "SSE_SQS" | "SSE_KMS" | "NONE";
18
- kmsKeyArn?: string;
19
- contentBasedDeduplication?: boolean;
20
- fifoThroughputLimit?: "perQueue" | "perMessageGroupId";
21
- deduplicationScope?: "queue" | "messageGroup";
22
- removalPolicy?: "DESTROY" | "RETAIN";
23
- }
24
- export declare class SQSQueue extends Construct {
25
- readonly id: string;
26
- private queue;
27
- private dlq?;
28
- constructor(scope: Construct, id: string, props: SQSQueueProps);
29
- /**
30
- * Get the SQS queue URL.
31
- */
32
- getQueueUrl(): string;
33
- /**
34
- * Get the SQS queue ARN.
35
- */
36
- getQueueArn(): string;
37
- /**
38
- * Get the SQS queue name.
39
- */
40
- getQueueName(): string;
41
- /**
42
- * Get the underlying CDK Queue construct.
43
- */
44
- getQueue(): IQueue;
45
- /**
46
- * Get the dead letter queue if configured.
47
- */
48
- getDeadLetterQueue(): IQueue | undefined;
49
- /**
50
- * Grant send message permissions to the grantee.
51
- */
52
- grantSend(grantee: IGrantable): Grant;
53
- /**
54
- * Grant consume (receive and delete) message permissions to the grantee.
55
- */
56
- grantConsume(grantee: IGrantable): Grant;
57
- /**
58
- * Grant purge queue permissions to the grantee.
59
- */
60
- grantPurge(grantee: IGrantable): Grant;
61
- /**
62
- * Grant send and consume message permissions to the grantee.
63
- */
64
- grantSendAndConsume(grantee: IGrantable): Grant;
65
- }
@@ -1,195 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SQSQueue = void 0;
4
- const constructs_1 = require("constructs");
5
- const aws_cdk_lib_1 = require("aws-cdk-lib");
6
- const aws_sqs_1 = require("aws-cdk-lib/aws-sqs");
7
- function toRemovalPolicy(policy) {
8
- switch (policy) {
9
- case "RETAIN":
10
- return aws_cdk_lib_1.RemovalPolicy.RETAIN;
11
- case "DESTROY":
12
- default:
13
- return aws_cdk_lib_1.RemovalPolicy.DESTROY;
14
- }
15
- }
16
- function toEncryption(encryption) {
17
- switch (encryption) {
18
- case "SSE_KMS":
19
- return aws_sqs_1.QueueEncryption.KMS;
20
- case "NONE":
21
- return aws_sqs_1.QueueEncryption.UNENCRYPTED;
22
- case "SSE_SQS":
23
- default:
24
- return aws_sqs_1.QueueEncryption.SQS_MANAGED;
25
- }
26
- }
27
- function toFifoThroughputLimit(limit) {
28
- switch (limit) {
29
- case "perQueue":
30
- return aws_sqs_1.FifoThroughputLimit.PER_QUEUE;
31
- case "perMessageGroupId":
32
- return aws_sqs_1.FifoThroughputLimit.PER_MESSAGE_GROUP_ID;
33
- default:
34
- return undefined;
35
- }
36
- }
37
- function toDeduplicationScope(scope) {
38
- switch (scope) {
39
- case "queue":
40
- return aws_sqs_1.DeduplicationScope.QUEUE;
41
- case "messageGroup":
42
- return aws_sqs_1.DeduplicationScope.MESSAGE_GROUP;
43
- default:
44
- return undefined;
45
- }
46
- }
47
- class SQSQueue extends constructs_1.Construct {
48
- constructor(scope, id, props) {
49
- super(scope, id);
50
- this.id = id;
51
- const isFifo = props.queueType === "fifo";
52
- const queueName = props.queueName
53
- ? isFifo
54
- ? `${props.queueName}.fifo`
55
- : props.queueName
56
- : undefined;
57
- // Create Dead Letter Queue if enabled
58
- let deadLetterQueue;
59
- if (props.deadLetterQueue?.enabled) {
60
- if (props.deadLetterQueue.queue) {
61
- deadLetterQueue = {
62
- queue: props.deadLetterQueue.queue,
63
- maxReceiveCount: props.deadLetterQueue.maxReceiveCount ?? 3
64
- };
65
- }
66
- else {
67
- const dlqName = queueName
68
- ? isFifo
69
- ? `${props.queueName}-dlq.fifo`
70
- : `${props.queueName}-dlq`
71
- : undefined;
72
- this.dlq = new aws_sqs_1.Queue(this, `${id}DeadLetterQueue`, {
73
- queueName: dlqName,
74
- fifo: isFifo,
75
- encryption: toEncryption(props.encryption),
76
- retentionPeriod: aws_cdk_lib_1.Duration.days(14),
77
- removalPolicy: toRemovalPolicy(props.removalPolicy)
78
- });
79
- deadLetterQueue = {
80
- queue: this.dlq,
81
- maxReceiveCount: props.deadLetterQueue.maxReceiveCount ?? 3
82
- };
83
- new aws_cdk_lib_1.CfnOutput(this, `${id}DeadLetterQueueUrl`, {
84
- key: `${id}DeadLetterQueueUrl`,
85
- value: this.dlq.queueUrl,
86
- description: `Dead letter queue URL for ${id}`
87
- });
88
- new aws_cdk_lib_1.CfnOutput(this, `${id}DeadLetterQueueArn`, {
89
- key: `${id}DeadLetterQueueArn`,
90
- value: this.dlq.queueArn,
91
- description: `Dead letter queue ARN for ${id}`
92
- });
93
- }
94
- }
95
- this.queue = new aws_sqs_1.Queue(this, `${id}Queue`, {
96
- queueName,
97
- fifo: isFifo,
98
- visibilityTimeout: props.visibilityTimeout
99
- ? aws_cdk_lib_1.Duration.seconds(props.visibilityTimeout)
100
- : undefined,
101
- retentionPeriod: props.messageRetentionPeriod
102
- ? aws_cdk_lib_1.Duration.seconds(props.messageRetentionPeriod)
103
- : undefined,
104
- receiveMessageWaitTime: props.receiveMessageWaitTime
105
- ? aws_cdk_lib_1.Duration.seconds(props.receiveMessageWaitTime)
106
- : undefined,
107
- maxMessageSizeBytes: props.maxMessageSize,
108
- deliveryDelay: props.deliveryDelay
109
- ? aws_cdk_lib_1.Duration.seconds(props.deliveryDelay)
110
- : undefined,
111
- deadLetterQueue,
112
- encryption: toEncryption(props.encryption),
113
- contentBasedDeduplication: isFifo ? (props.contentBasedDeduplication ?? true) : undefined,
114
- fifoThroughputLimit: isFifo
115
- ? toFifoThroughputLimit(props.fifoThroughputLimit)
116
- : undefined,
117
- deduplicationScope: isFifo
118
- ? toDeduplicationScope(props.deduplicationScope)
119
- : undefined,
120
- removalPolicy: toRemovalPolicy(props.removalPolicy)
121
- });
122
- new aws_cdk_lib_1.CfnOutput(this, `${id}QueueUrl`, {
123
- key: `${id}QueueUrl`,
124
- value: this.queue.queueUrl,
125
- description: `SQS queue URL for ${id}`
126
- });
127
- new aws_cdk_lib_1.CfnOutput(this, `${id}QueueArn`, {
128
- key: `${id}QueueArn`,
129
- value: this.queue.queueArn,
130
- description: `SQS queue ARN for ${id}`
131
- });
132
- new aws_cdk_lib_1.CfnOutput(this, `${id}QueueName`, {
133
- key: `${id}QueueName`,
134
- value: this.queue.queueName,
135
- description: `SQS queue name for ${id}`
136
- });
137
- }
138
- /**
139
- * Get the SQS queue URL.
140
- */
141
- getQueueUrl() {
142
- return this.queue.queueUrl;
143
- }
144
- /**
145
- * Get the SQS queue ARN.
146
- */
147
- getQueueArn() {
148
- return this.queue.queueArn;
149
- }
150
- /**
151
- * Get the SQS queue name.
152
- */
153
- getQueueName() {
154
- return this.queue.queueName;
155
- }
156
- /**
157
- * Get the underlying CDK Queue construct.
158
- */
159
- getQueue() {
160
- return this.queue;
161
- }
162
- /**
163
- * Get the dead letter queue if configured.
164
- */
165
- getDeadLetterQueue() {
166
- return this.dlq;
167
- }
168
- /**
169
- * Grant send message permissions to the grantee.
170
- */
171
- grantSend(grantee) {
172
- return this.queue.grantSendMessages(grantee);
173
- }
174
- /**
175
- * Grant consume (receive and delete) message permissions to the grantee.
176
- */
177
- grantConsume(grantee) {
178
- return this.queue.grantConsumeMessages(grantee);
179
- }
180
- /**
181
- * Grant purge queue permissions to the grantee.
182
- */
183
- grantPurge(grantee) {
184
- return this.queue.grantPurge(grantee);
185
- }
186
- /**
187
- * Grant send and consume message permissions to the grantee.
188
- */
189
- grantSendAndConsume(grantee) {
190
- this.queue.grantSendMessages(grantee);
191
- return this.queue.grantConsumeMessages(grantee);
192
- }
193
- }
194
- exports.SQSQueue = SQSQueue;
195
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3FzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3MvbWVzc2FnaW5nL3Nxcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyQ0FBdUM7QUFDdkMsNkNBQWlFO0FBQ2pFLGlEQU82QjtBQXdCN0IsU0FBUyxlQUFlLENBQ3RCLE1BQTZCO0lBRTdCLFFBQVEsTUFBTSxFQUFFLENBQUM7UUFDZixLQUFLLFFBQVE7WUFDWCxPQUFPLDJCQUFhLENBQUMsTUFBTSxDQUFDO1FBQzlCLEtBQUssU0FBUyxDQUFDO1FBQ2Y7WUFDRSxPQUFPLDJCQUFhLENBQUMsT0FBTyxDQUFDO0lBQ2pDLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxZQUFZLENBQ25CLFVBQTJDO0lBRTNDLFFBQVEsVUFBVSxFQUFFLENBQUM7UUFDbkIsS0FBSyxTQUFTO1lBQ1osT0FBTyx5QkFBZSxDQUFDLEdBQUcsQ0FBQztRQUM3QixLQUFLLE1BQU07WUFDVCxPQUFPLHlCQUFlLENBQUMsV0FBVyxDQUFDO1FBQ3JDLEtBQUssU0FBUyxDQUFDO1FBQ2Y7WUFDRSxPQUFPLHlCQUFlLENBQUMsV0FBVyxDQUFDO0lBQ3ZDLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxxQkFBcUIsQ0FDNUIsS0FBd0M7SUFFeEMsUUFBUSxLQUFLLEVBQUUsQ0FBQztRQUNkLEtBQUssVUFBVTtZQUNiLE9BQU8sNkJBQW1CLENBQUMsU0FBUyxDQUFDO1FBQ3ZDLEtBQUssbUJBQW1CO1lBQ3RCLE9BQU8sNkJBQW1CLENBQUMsb0JBQW9CLENBQUM7UUFDbEQ7WUFDRSxPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsb0JBQW9CLENBQzNCLEtBQWdDO0lBRWhDLFFBQVEsS0FBSyxFQUFFLENBQUM7UUFDZCxLQUFLLE9BQU87WUFDVixPQUFPLDRCQUFrQixDQUFDLEtBQUssQ0FBQztRQUNsQyxLQUFLLGNBQWM7WUFD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SSxZQUFZLENBQUMsT0FBbUI7UUFDckMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRDs7T0FFRztJQUNJLFVBQVUsQ0FBQyxPQUFtQjtRQUNuQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7T0FFRztJQUNJLG1CQUFtQixDQUFDLE9BQW1CO1FBQzVDLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdEMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2xELENBQUM7Q0FDRjtBQXpLRCw0QkF5S0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgQ2ZuT3V0cHV0LCBEdXJhdGlvbiwgUmVtb3ZhbFBvbGljeSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHtcbiAgUXVldWUsXG4gIHR5cGUgSVF1ZXVlLFxuICBEZWFkTGV0dGVyUXVldWUsXG4gIFF1ZXVlRW5jcnlwdGlvbixcbiAgRmlmb1Rocm91Z2hwdXRMaW1pdCxcbiAgRGVkdXBsaWNhdGlvblNjb3BlXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc3FzXCI7XG5pbXBvcnQgeyB0eXBlIElHcmFudGFibGUsIHR5cGUgR3JhbnQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNRU1F1ZXVlUHJvcHMge1xuICBxdWV1ZU5hbWU/OiBzdHJpbmc7XG4gIHF1ZXVlVHlwZT86IFwic3RhbmRhcmRcIiB8IFwiZmlmb1wiO1xuICB2aXNpYmlsaXR5VGltZW91dD86IG51bWJlcjtcbiAgbWVzc2FnZVJldGVudGlvblBlcmlvZD86IG51bWJlcjtcbiAgcmVjZWl2ZU1lc3NhZ2VXYWl0VGltZT86IG51bWJlcjtcbiAgbWF4TWVzc2FnZVNpemU/OiBudW1iZXI7XG4gIGRlbGl2ZXJ5RGVsYXk/OiBudW1iZXI7XG4gIGRlYWRMZXR0ZXJRdWV1ZT86IHtcbiAgICBlbmFibGVkOiBib29sZWFuO1xuICAgIG1heFJlY2VpdmVDb3VudD86IG51bWJlcjtcbiAgICBxdWV1ZT86IElRdWV1ZTtcbiAgfTtcbiAgZW5jcnlwdGlvbj86IFwiU1NFX1NRU1wiIHwgXCJTU0VfS01TXCIgfCBcIk5PTkVcIjtcbiAga21zS2V5QXJuPzogc3RyaW5nO1xuICBjb250ZW50QmFzZWREZWR1cGxpY2F0aW9uPzogYm9vbGVhbjtcbiAgZmlmb1Rocm91Z2hwdXRMaW1pdD86IFwicGVyUXVldWVcIiB8IFwicGVyTWVzc2FnZUdyb3VwSWRcIjtcbiAgZGVkdXBsaWNhdGlvblNjb3BlPzogXCJxdWV1ZVwiIHwgXCJtZXNzYWdlR3JvdXBcIjtcbiAgcmVtb3ZhbFBvbGljeT86IFwiREVTVFJPWVwiIHwgXCJSRVRBSU5cIjtcbn1cblxuZnVuY3Rpb24gdG9SZW1vdmFsUG9saWN5KFxuICBwb2xpY3k/OiBcIkRFU1RST1lcIiB8IFwiUkVUQUlOXCJcbik6IFJlbW92YWxQb2xpY3kge1xuICBzd2l0Y2ggKHBvbGljeSkge1xuICAgIGNhc2UgXCJSRVRBSU5cIjpcbiAgICAgIHJldHVybiBSZW1vdmFsUG9saWN5LlJFVEFJTjtcbiAgICBjYXNlIFwiREVTVFJPWVwiOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gUmVtb3ZhbFBvbGljeS5ERVNUUk9ZO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvRW5jcnlwdGlvbihcbiAgZW5jcnlwdGlvbj86IFwiU1NFX1NRU1wiIHwgXCJTU0VfS01TXCIgfCBcIk5PTkVcIlxuKTogUXVldWVFbmNyeXB0aW9uIHtcbiAgc3dpdGNoIChlbmNyeXB0aW9uKSB7XG4gICAgY2FzZSBcIlNTRV9LTVNcIjpcbiAgICAgIHJldHVybiBRdWV1ZUVuY3J5cHRpb24uS01TO1xuICAgIGNhc2UgXCJOT05FXCI6XG4gICAgICByZXR1cm4gUXVldWVFbmNyeXB0aW9uLlVORU5DUllQVEVEO1xuICAgIGNhc2UgXCJTU0VfU1FTXCI6XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBRdWV1ZUVuY3J5cHRpb24uU1FTX01BTkFHRUQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gdG9GaWZvVGhyb3VnaHB1dExpbWl0KFxuICBsaW1pdD86IFwicGVyUXVldWVcIiB8IFwicGVyTWVzc2FnZUdyb3VwSWRcIlxuKTogRmlmb1Rocm91Z2hwdXRMaW1pdCB8IHVuZGVmaW5lZCB7XG4gIHN3aXRjaCAobGltaXQpIHtcbiAgICBjYXNlIFwicGVyUXVldWVcIjpcbiAgICAgIHJldHVybiBGaWZvVGhyb3VnaHB1dExpbWl0LlBFUl9RVUVVRTtcbiAgICBjYXNlIFwicGVyTWVzc2FnZUdyb3VwSWRcIjpcbiAgICAgIHJldHVybiBGaWZvVGhyb3VnaHB1dExpbWl0LlBFUl9NRVNTQUdFX0dST1VQX0lEO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvRGVkdXBsaWNhdGlvblNjb3BlKFxuICBzY29wZT86IFwicXVldWVcIiB8IFwibWVzc2FnZUdyb3VwXCJcbik6IERlZHVwbGljYXRpb25TY29wZSB8IHVuZGVmaW5lZCB7XG4gIHN3aXRjaCAoc2NvcGUpIHtcbiAgICBjYXNlIFwicXVldWVcIjpcbiAgICAgIHJldHVybiBEZWR1cGxpY2F0aW9uU2NvcGUuUVVFVUU7XG4gICAgY2FzZSBcIm1lc3NhZ2VHcm91cFwiOlxuICAgICAgcmV0dXJuIERlZHVwbGljYXRpb25TY29wZS5NRVNTQUdFX0dST1VQO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTUVNRdWV1ZSBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBpZDogc3RyaW5nO1xuICBwcml2YXRlIHF1ZXVlOiBRdWV1ZTtcbiAgcHJpdmF0ZSBkbHE/OiBRdWV1ZTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU1FTUXVldWVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgdGhpcy5pZCA9IGlkO1xuXG4gICAgY29uc3QgaXNGaWZvID0gcHJvcHMucXVldWVUeXBlID09PSBcImZpZm9cIjtcbiAgICBjb25zdCBxdWV1ZU5hbWUgPSBwcm9wcy5xdWV1ZU5hbWVcbiAgICAgID8gaXNGaWZvXG4gICAgICAgID8gYCR7cHJvcHMucXVldWVOYW1lfS5maWZvYFxuICAgICAgICA6IHByb3BzLnF1ZXVlTmFtZVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAvLyBDcmVhdGUgRGVhZCBMZXR0ZXIgUXVldWUgaWYgZW5hYmxlZFxuICAgIGxldCBkZWFkTGV0dGVyUXVldWU6IERlYWRMZXR0ZXJRdWV1ZSB8IHVuZGVmaW5lZDtcbiAgICBpZiAocHJvcHMuZGVhZExldHRlclF1ZXVlPy5lbmFibGVkKSB7XG4gICAgICBpZiAocHJvcHMuZGVhZExldHRlclF1ZXVlLnF1ZXVlKSB7XG4gICAgICAgIGRlYWRMZXR0ZXJRdWV1ZSA9IHtcbiAgICAgICAgICBxdWV1ZTogcHJvcHMuZGVhZExldHRlclF1ZXVlLnF1ZXVlLFxuICAgICAgICAgIG1heFJlY2VpdmVDb3VudDogcHJvcHMuZGVhZExldHRlclF1ZXVlLm1heFJlY2VpdmVDb3VudCA/PyAzXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBkbHFOYW1lID0gcXVldWVOYW1lXG4gICAgICAgICAgPyBpc0ZpZm9cbiAgICAgICAgICAgID8gYCR7cHJvcHMucXVldWVOYW1lfS1kbHEuZmlmb2BcbiAgICAgICAgICAgIDogYCR7cHJvcHMucXVldWVOYW1lfS1kbHFgXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgdGhpcy5kbHEgPSBuZXcgUXVldWUodGhpcywgYCR7aWR9RGVhZExldHRlclF1ZXVlYCwge1xuICAgICAgICAgIHF1ZXVlTmFtZTogZGxxTmFtZSxcbiAgICAgICAgICBmaWZvOiBpc0ZpZm8sXG4gICAgICAgICAgZW5jcnlwdGlvbjogdG9FbmNyeXB0aW9uKHByb3BzLmVuY3J5cHRpb24pLFxuICAgICAgICAgIHJldGVudGlvblBlcmlvZDogRHVyYXRpb24uZGF5cygxNCksXG4gICAgICAgICAgcmVtb3ZhbFBvbGljeTogdG9SZW1vdmFsUG9saWN5KHByb3BzLnJlbW92YWxQb2xpY3kpXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlYWRMZXR0ZXJRdWV1ZSA9IHtcbiAgICAgICAgICBxdWV1ZTogdGhpcy5kbHEsXG4gICAgICAgICAgbWF4UmVjZWl2ZUNvdW50OiBwcm9wcy5kZWFkTGV0dGVyUXVldWUubWF4UmVjZWl2ZUNvdW50ID8/IDNcbiAgICAgICAgfTtcblxuICAgICAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIGAke2lkfURlYWRMZXR0ZXJRdWV1ZVVybGAsIHtcbiAgICAgICAgICBrZXk6IGAke2lkfURlYWRMZXR0ZXJRdWV1ZVVybGAsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZGxxLnF1ZXVlVXJsLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBgRGVhZCBsZXR0ZXIgcXVldWUgVVJMIGZvciAke2lkfWBcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHtpZH1EZWFkTGV0dGVyUXVldWVBcm5gLCB7XG4gICAgICAgICAga2V5OiBgJHtpZH1EZWFkTGV0dGVyUXVldWVBcm5gLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmRscS5xdWV1ZUFybixcbiAgICAgICAgICBkZXNjcmlwdGlvbjogYERlYWQgbGV0dGVyIHF1ZXVlIEFSTiBmb3IgJHtpZH1gXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucXVldWUgPSBuZXcgUXVldWUodGhpcywgYCR7aWR9UXVldWVgLCB7XG4gICAgICBxdWV1ZU5hbWUsXG4gICAgICBmaWZvOiBpc0ZpZm8sXG4gICAgICB2aXNpYmlsaXR5VGltZW91dDogcHJvcHMudmlzaWJpbGl0eVRpbWVvdXRcbiAgICAgICAgPyBEdXJhdGlvbi5zZWNvbmRzKHByb3BzLnZpc2liaWxpdHlUaW1lb3V0KVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIHJldGVudGlvblBlcmlvZDogcHJvcHMubWVzc2FnZVJldGVudGlvblBlcmlvZFxuICAgICAgICA/IER1cmF0aW9uLnNlY29uZHMocHJvcHMubWVzc2FnZVJldGVudGlvblBlcmlvZClcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICByZWNlaXZlTWVzc2FnZVdhaXRUaW1lOiBwcm9wcy5yZWNlaXZlTWVzc2FnZVdhaXRUaW1lXG4gICAgICAgID8gRHVyYXRpb24uc2Vjb25kcyhwcm9wcy5yZWNlaXZlTWVzc2FnZVdhaXRUaW1lKVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIG1heE1lc3NhZ2VTaXplQnl0ZXM6IHByb3BzLm1heE1lc3NhZ2VTaXplLFxuICAgICAgZGVsaXZlcnlEZWxheTogcHJvcHMuZGVsaXZlcnlEZWxheVxuICAgICAgICA/IER1cmF0aW9uLnNlY29uZHMocHJvcHMuZGVsaXZlcnlEZWxheSlcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBkZWFkTGV0dGVyUXVldWUsXG4gICAgICBlbmNyeXB0aW9uOiB0b0VuY3J5cHRpb24ocHJvcHMuZW5jcnlwdGlvbiksXG4gICAgICBjb250ZW50QmFzZWREZWR1cGxpY2F0aW9uOlxuICAgICAgICBpc0ZpZm8gPyAocHJvcHMuY29udGVudEJhc2VkRGVkdXBsaWNhdGlvbiA/PyB0cnVlKSA6IHVuZGVmaW5lZCxcbiAgICAgIGZpZm9UaHJvdWdocHV0TGltaXQ6IGlzRmlmb1xuICAgICAgICA/IHRvRmlmb1Rocm91Z2hwdXRMaW1pdChwcm9wcy5maWZvVGhyb3VnaHB1dExpbWl0KVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIGRlZHVwbGljYXRpb25TY29wZTogaXNGaWZvXG4gICAgICAgID8gdG9EZWR1cGxpY2F0aW9uU2NvcGUocHJvcHMuZGVkdXBsaWNhdGlvblNjb3BlKVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIHJlbW92YWxQb2xpY3k6IHRvUmVtb3ZhbFBvbGljeShwcm9wcy5yZW1vdmFsUG9saWN5KVxuICAgIH0pO1xuXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHtpZH1RdWV1ZVVybGAsIHtcbiAgICAgIGtleTogYCR7aWR9UXVldWVVcmxgLFxuICAgICAgdmFsdWU6IHRoaXMucXVldWUucXVldWVVcmwsXG4gICAgICBkZXNjcmlwdGlvbjogYFNRUyBxdWV1ZSBVUkwgZm9yICR7aWR9YFxuICAgIH0pO1xuXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHtpZH1RdWV1ZUFybmAsIHtcbiAgICAgIGtleTogYCR7aWR9UXVldWVBcm5gLFxuICAgICAgdmFsdWU6IHRoaXMucXVldWUucXVldWVBcm4sXG4gICAgICBkZXNjcmlwdGlvbjogYFNRUyBxdWV1ZSBBUk4gZm9yICR7aWR9YFxuICAgIH0pO1xuXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHtpZH1RdWV1ZU5hbWVgLCB7XG4gICAgICBrZXk6IGAke2lkfVF1ZXVlTmFtZWAsXG4gICAgICB2YWx1ZTogdGhpcy5xdWV1ZS5xdWV1ZU5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogYFNRUyBxdWV1ZSBuYW1lIGZvciAke2lkfWBcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIFNRUyBxdWV1ZSBVUkwuXG4gICAqL1xuICBwdWJsaWMgZ2V0UXVldWVVcmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5xdWV1ZS5xdWV1ZVVybDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIFNRUyBxdWV1ZSBBUk4uXG4gICAqL1xuICBwdWJsaWMgZ2V0UXVldWVBcm4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5xdWV1ZS5xdWV1ZUFybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIFNRUyBxdWV1ZSBuYW1lLlxuICAgKi9cbiAgcHVibGljIGdldFF1ZXVlTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnF1ZXVlLnF1ZXVlTmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHVuZGVybHlpbmcgQ0RLIFF1ZXVlIGNvbnN0cnVjdC5cbiAgICovXG4gIHB1YmxpYyBnZXRRdWV1ZSgpOiBJUXVldWUge1xuICAgIHJldHVybiB0aGlzLnF1ZXVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZGVhZCBsZXR0ZXIgcXVldWUgaWYgY29uZmlndXJlZC5cbiAgICovXG4gIHB1YmxpYyBnZXREZWFkTGV0dGVyUXVldWUoKTogSVF1ZXVlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5kbHE7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgc2VuZCBtZXNzYWdlIHBlcm1pc3Npb25zIHRvIHRoZSBncmFudGVlLlxuICAgKi9cbiAgcHVibGljIGdyYW50U2VuZChncmFudGVlOiBJR3JhbnRhYmxlKTogR3JhbnQge1xuICAgIHJldHVybiB0aGlzLnF1ZXVlLmdyYW50U2VuZE1lc3NhZ2VzKGdyYW50ZWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IGNvbnN1bWUgKHJlY2VpdmUgYW5kIGRlbGV0ZSkgbWVzc2FnZSBwZXJtaXNzaW9ucyB0byB0aGUgZ3JhbnRlZS5cbiAgICovXG4gIHB1YmxpYyBncmFudENvbnN1bWUoZ3JhbnRlZTogSUdyYW50YWJsZSk6IEdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5xdWV1ZS5ncmFudENvbnN1bWVNZXNzYWdlcyhncmFudGVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCBwdXJnZSBxdWV1ZSBwZXJtaXNzaW9ucyB0byB0aGUgZ3JhbnRlZS5cbiAgICovXG4gIHB1YmxpYyBncmFudFB1cmdlKGdyYW50ZWU6IElHcmFudGFibGUpOiBHcmFudCB7XG4gICAgcmV0dXJuIHRoaXMucXVldWUuZ3JhbnRQdXJnZShncmFudGVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCBzZW5kIGFuZCBjb25zdW1lIG1lc3NhZ2UgcGVybWlzc2lvbnMgdG8gdGhlIGdyYW50ZWUuXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRTZW5kQW5kQ29uc3VtZShncmFudGVlOiBJR3JhbnRhYmxlKTogR3JhbnQge1xuICAgIHRoaXMucXVldWUuZ3JhbnRTZW5kTWVzc2FnZXMoZ3JhbnRlZSk7XG4gICAgcmV0dXJuIHRoaXMucXVldWUuZ3JhbnRDb25zdW1lTWVzc2FnZXMoZ3JhbnRlZSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,20 +0,0 @@
1
- import { Construct } from "constructs";
2
- import { Stack, type StackProps } from "aws-cdk-lib";
3
- import { type KeyValue } from "../../../types";
4
- interface VpcEndpointProps extends StackProps {
5
- vpcId: string;
6
- service: string;
7
- tags: KeyValue;
8
- }
9
- export declare class VpcEndpoint extends Construct {
10
- private vpc;
11
- private securityGroups;
12
- constructor(scope: Construct, id: string, props: VpcEndpointProps);
13
- addVpc(vpcId: string): void;
14
- addSecurityGroup(service: string): void;
15
- addEntrypoint(props: VpcEndpointProps): void;
16
- }
17
- export declare class VpcEndpointStack extends Stack {
18
- constructor(scope: Construct, id: string, props: VpcEndpointProps);
19
- }
20
- export {};