@fjall/components-infrastructure 0.88.3 → 0.89.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 (152) hide show
  1. package/LICENSE +21 -0
  2. package/dist/lib/app.d.ts +33 -10
  3. package/dist/lib/app.js +79 -36
  4. package/dist/lib/aspects/index.d.ts +1 -0
  5. package/dist/lib/aspects/index.js +6 -0
  6. package/dist/lib/config/aws/accountAuditRole.d.ts +20 -0
  7. package/dist/lib/config/aws/accountAuditRole.js +38 -0
  8. package/dist/lib/config/aws/accountMonitoringRole.d.ts +22 -0
  9. package/dist/lib/config/aws/accountMonitoringRole.js +133 -0
  10. package/dist/lib/config/aws/cloudTrail.d.ts +0 -3
  11. package/dist/lib/config/aws/cloudTrail.js +2 -2
  12. package/dist/lib/config/aws/disasterRecovery.js +53 -20
  13. package/dist/lib/config/aws/ecrDefaultImage.js +4 -3
  14. package/dist/lib/config/aws/index.d.ts +4 -0
  15. package/dist/lib/config/aws/index.js +5 -1
  16. package/dist/lib/config/aws/oidcConnector.d.ts +8 -0
  17. package/dist/lib/config/aws/oidcConnector.js +46 -0
  18. package/dist/lib/config/aws/platform.d.ts +2 -0
  19. package/dist/lib/config/aws/platform.js +6 -0
  20. package/dist/lib/config/index.d.ts +2 -0
  21. package/dist/lib/config/index.js +21 -0
  22. package/dist/lib/patterns/aws/account.js +22 -10
  23. package/dist/lib/patterns/aws/cdn.d.ts +19 -40
  24. package/dist/lib/patterns/aws/cdn.js +21 -17
  25. package/dist/lib/patterns/aws/compute.d.ts +9 -720
  26. package/dist/lib/patterns/aws/compute.js +27 -432
  27. package/dist/lib/patterns/aws/computeEc2.d.ts +67 -0
  28. package/dist/lib/patterns/aws/computeEc2.js +46 -0
  29. package/dist/lib/patterns/aws/computeEcs.d.ts +446 -0
  30. package/dist/lib/patterns/aws/computeEcs.js +246 -0
  31. package/dist/lib/patterns/aws/computeLambda.d.ts +220 -0
  32. package/dist/lib/patterns/aws/computeLambda.js +147 -0
  33. package/dist/lib/patterns/aws/database.d.ts +7 -87
  34. package/dist/lib/patterns/aws/database.js +15 -38
  35. package/dist/lib/patterns/aws/domainDelegation.d.ts +8 -0
  36. package/dist/lib/patterns/aws/domainDelegation.js +54 -0
  37. package/dist/lib/patterns/aws/domainFactory.d.ts +8 -0
  38. package/dist/lib/patterns/aws/domainFactory.js +23 -0
  39. package/dist/lib/patterns/aws/index.d.ts +4 -1
  40. package/dist/lib/patterns/aws/index.js +6 -2
  41. package/dist/lib/patterns/aws/interfaces/cdn.d.ts +26 -0
  42. package/dist/lib/patterns/aws/interfaces/cdn.js +14 -0
  43. package/dist/lib/patterns/aws/interfaces/connector.d.ts +4 -181
  44. package/dist/lib/patterns/aws/interfaces/connector.js +16 -113
  45. package/dist/lib/patterns/aws/interfaces/domain.d.ts +2 -0
  46. package/dist/lib/patterns/aws/interfaces/domain.js +6 -0
  47. package/dist/lib/patterns/aws/interfaces/index.d.ts +2 -0
  48. package/dist/lib/patterns/aws/interfaces/index.js +5 -2
  49. package/dist/lib/patterns/aws/interfaces/pattern.d.ts +9 -6
  50. package/dist/lib/patterns/aws/interfaces/pattern.js +1 -1
  51. package/dist/lib/patterns/aws/network.js +6 -9
  52. package/dist/lib/patterns/aws/organisation.d.ts +4 -2
  53. package/dist/lib/patterns/aws/organisation.js +21 -8
  54. package/dist/lib/patterns/aws/payload.js +21 -12
  55. package/dist/lib/patterns/aws/storage.d.ts +3 -2
  56. package/dist/lib/patterns/aws/storage.js +1 -1
  57. package/dist/lib/resources/aws/audit/auditRole.js +4 -4
  58. package/dist/lib/resources/aws/audit/index.d.ts +1 -0
  59. package/dist/lib/resources/aws/audit/index.js +6 -0
  60. package/dist/lib/resources/aws/backup/backupPlan.js +3 -2
  61. package/dist/lib/resources/aws/backup/backupVault.js +5 -3
  62. package/dist/lib/resources/aws/base/awsStack.d.ts +4 -2
  63. package/dist/lib/resources/aws/base/awsStack.js +8 -2
  64. package/dist/lib/resources/aws/cdn/cloudFront.d.ts +14 -0
  65. package/dist/lib/resources/aws/cdn/cloudFront.js +52 -18
  66. package/dist/lib/resources/aws/compute/ec2.js +18 -22
  67. package/dist/lib/resources/aws/compute/ecs.d.ts +23 -10
  68. package/dist/lib/resources/aws/compute/ecs.js +121 -64
  69. package/dist/lib/resources/aws/compute/index.d.ts +1 -0
  70. package/dist/lib/resources/aws/compute/index.js +2 -1
  71. package/dist/lib/resources/aws/compute/lambda.d.ts +0 -2
  72. package/dist/lib/resources/aws/compute/lambda.js +12 -27
  73. package/dist/lib/resources/aws/database/dynamodb.js +3 -13
  74. package/dist/lib/resources/aws/database/index.d.ts +8 -2
  75. package/dist/lib/resources/aws/database/index.js +19 -3
  76. package/dist/lib/resources/aws/database/rdsAurora.d.ts +2 -3
  77. package/dist/lib/resources/aws/database/rdsAurora.js +32 -68
  78. package/dist/lib/resources/aws/database/rdsAuroraGlobal.d.ts +6 -6
  79. package/dist/lib/resources/aws/database/rdsAuroraGlobal.js +25 -29
  80. package/dist/lib/resources/aws/database/rdsDefaults.d.ts +11 -0
  81. package/dist/lib/resources/aws/database/rdsDefaults.js +15 -0
  82. package/dist/lib/resources/aws/database/rdsHelpers.d.ts +39 -0
  83. package/dist/lib/resources/aws/database/rdsHelpers.js +75 -0
  84. package/dist/lib/resources/aws/database/rdsInstance.d.ts +7 -8
  85. package/dist/lib/resources/aws/database/rdsInstance.js +40 -84
  86. package/dist/lib/resources/aws/database/rdsProxyOutput.d.ts +7 -0
  87. package/dist/lib/resources/aws/database/rdsProxyOutput.js +18 -0
  88. package/dist/lib/resources/aws/iam/index.d.ts +0 -1
  89. package/dist/lib/resources/aws/iam/index.js +1 -2
  90. package/dist/lib/resources/aws/index.d.ts +0 -1
  91. package/dist/lib/resources/aws/index.js +1 -2
  92. package/dist/lib/resources/aws/logging/cloudTrail.js +13 -3
  93. package/dist/lib/resources/aws/logging/index.d.ts +2 -0
  94. package/dist/lib/resources/aws/logging/index.js +19 -0
  95. package/dist/lib/resources/aws/messaging/index.d.ts +3 -2
  96. package/dist/lib/resources/aws/messaging/index.js +4 -3
  97. package/dist/lib/resources/aws/messaging/sqs.js +14 -11
  98. package/dist/lib/resources/aws/messaging/utils.d.ts +1 -2
  99. package/dist/lib/resources/aws/messaging/utils.js +3 -4
  100. package/dist/lib/resources/aws/monitoring/index.d.ts +0 -1
  101. package/dist/lib/resources/aws/monitoring/index.js +4 -17
  102. package/dist/lib/resources/aws/networking/domain.d.ts +13 -0
  103. package/dist/lib/resources/aws/networking/domain.js +102 -0
  104. package/dist/lib/resources/aws/networking/domainCertificate.d.ts +13 -0
  105. package/dist/lib/resources/aws/networking/domainCertificate.js +28 -0
  106. package/dist/lib/resources/aws/networking/hostedZone.d.ts +28 -0
  107. package/dist/lib/resources/aws/networking/hostedZone.js +150 -0
  108. package/dist/lib/resources/aws/networking/index.d.ts +4 -0
  109. package/dist/lib/resources/aws/networking/index.js +5 -1
  110. package/dist/lib/resources/aws/networking/ipamPool.js +57 -31
  111. package/dist/lib/resources/aws/networking/securityGroup.d.ts +5 -0
  112. package/dist/lib/resources/aws/networking/securityGroup.js +14 -0
  113. package/dist/lib/resources/aws/networking/vpc.js +9 -4
  114. package/dist/lib/resources/aws/organisation/costAllocationTagActivator.d.ts +17 -0
  115. package/dist/lib/resources/aws/organisation/costAllocationTagActivator.js +66 -0
  116. package/dist/lib/resources/aws/organisation/index.d.ts +1 -0
  117. package/dist/lib/resources/aws/organisation/index.js +4 -2
  118. package/dist/lib/resources/aws/secrets/index.d.ts +0 -1
  119. package/dist/lib/resources/aws/secrets/index.js +1 -2
  120. package/dist/lib/resources/aws/storage/ecr.d.ts +0 -1
  121. package/dist/lib/resources/aws/storage/ecr.js +5 -5
  122. package/dist/lib/resources/aws/storage/s3.d.ts +3 -3
  123. package/dist/lib/resources/aws/storage/s3.js +1 -1
  124. package/dist/lib/resources/aws/utilities/index.d.ts +5 -0
  125. package/dist/lib/resources/aws/utilities/index.js +22 -0
  126. package/dist/lib/utils/backupTierMapping.d.ts +11 -0
  127. package/dist/lib/utils/backupTierMapping.js +17 -0
  128. package/dist/lib/utils/capitaliseString.d.ts +1 -12
  129. package/dist/lib/utils/capitaliseString.js +8 -28
  130. package/dist/lib/utils/connections.d.ts +46 -0
  131. package/dist/lib/utils/connections.js +159 -0
  132. package/dist/lib/utils/connector.d.ts +183 -0
  133. package/dist/lib/utils/connector.js +117 -0
  134. package/dist/lib/utils/databaseTypes.d.ts +85 -0
  135. package/dist/lib/utils/databaseTypes.js +34 -0
  136. package/dist/lib/utils/dnsRecords.d.ts +4 -0
  137. package/dist/lib/utils/dnsRecords.js +108 -0
  138. package/dist/lib/utils/domainTypes.d.ts +37 -0
  139. package/dist/lib/utils/domainTypes.js +10 -0
  140. package/dist/lib/utils/env.d.ts +42 -0
  141. package/dist/lib/utils/env.js +122 -0
  142. package/dist/lib/utils/getConfig.d.ts +0 -5
  143. package/dist/lib/utils/getConfig.js +42 -19
  144. package/dist/lib/utils/index.d.ts +7 -0
  145. package/dist/lib/utils/index.js +8 -1
  146. package/dist/lib/utils/removalPolicy.d.ts +2 -0
  147. package/dist/lib/utils/removalPolicy.js +16 -0
  148. package/dist/lib/utils/standardTagsAspect.d.ts +4 -0
  149. package/dist/lib/utils/standardTagsAspect.js +8 -8
  150. package/dist/lib/utils/vpcUtils.d.ts +14 -0
  151. package/dist/lib/utils/vpcUtils.js +28 -0
  152. package/package.json +7 -6
@@ -0,0 +1,147 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LambdaCompute = exports.InvokeMode = exports.HttpMethod = exports.Architecture = void 0;
4
+ exports.resolveLambdaDeployment = resolveLambdaDeployment;
5
+ const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
6
+ const aws_ec2_1 = require("aws-cdk-lib/aws-ec2");
7
+ const aws_ecr_1 = require("aws-cdk-lib/aws-ecr");
8
+ const constructs_1 = require("constructs");
9
+ const connections_js_1 = require("../../utils/connections.js");
10
+ const lambda_1 = require("../../resources/aws/compute/lambda");
11
+ const compute_js_1 = require("./compute.js");
12
+ // Re-export Lambda types from CDK for user convenience
13
+ var aws_lambda_2 = require("aws-cdk-lib/aws-lambda");
14
+ Object.defineProperty(exports, "Architecture", { enumerable: true, get: function () { return aws_lambda_2.Architecture; } });
15
+ Object.defineProperty(exports, "HttpMethod", { enumerable: true, get: function () { return aws_lambda_2.HttpMethod; } });
16
+ Object.defineProperty(exports, "InvokeMode", { enumerable: true, get: function () { return aws_lambda_2.InvokeMode; } });
17
+ /**
18
+ * Resolve Lambda deployment configuration from props.
19
+ * Handles container vs code deployment types.
20
+ */
21
+ function resolveLambdaDeployment(props) {
22
+ if (props.deployment === "container") {
23
+ if (!(props.ecrRepository instanceof aws_ecr_1.Repository)) {
24
+ throw new Error("ecrRepository must be a Repository instance for Lambda compute type");
25
+ }
26
+ return {
27
+ code: aws_lambda_1.Code.fromEcrImage(props.ecrRepository, {
28
+ tagOrDigest: compute_js_1.COMPUTE_DEFAULTS.ECS.IMAGE_TAG
29
+ }),
30
+ handler: aws_lambda_1.Handler.FROM_IMAGE,
31
+ runtime: aws_lambda_1.Runtime.FROM_IMAGE
32
+ };
33
+ }
34
+ return {
35
+ code: props.code,
36
+ handler: props.handler || compute_js_1.COMPUTE_DEFAULTS.LAMBDA.HANDLER,
37
+ runtime: props.runtime || compute_js_1.COMPUTE_DEFAULTS.LAMBDA.RUNTIME
38
+ };
39
+ }
40
+ /**
41
+ * Lambda compute wrapper implementing ILambdaCompute.
42
+ * Provides type-safe access to Lambda-specific resources.
43
+ */
44
+ class LambdaCompute extends constructs_1.Construct {
45
+ constructor(scope, id, props) {
46
+ super(scope, id);
47
+ this.computeType = "lambda";
48
+ const { code, handler, runtime } = resolveLambdaDeployment(props);
49
+ // Convert presence-based functionUrl config to legacy boolean format
50
+ const functionUrlConfig = props.functionUrl;
51
+ const enableFunctionUrl = functionUrlConfig !== undefined && functionUrlConfig !== false;
52
+ const functionUrlAuthType = enableFunctionUrl && typeof functionUrlConfig === "object"
53
+ ? functionUrlConfig.authType
54
+ : undefined;
55
+ const functionUrlCors = enableFunctionUrl && typeof functionUrlConfig === "object"
56
+ ? functionUrlConfig.cors
57
+ : undefined;
58
+ const functionUrlInvokeMode = enableFunctionUrl && typeof functionUrlConfig === "object"
59
+ ? functionUrlConfig.invokeMode
60
+ : undefined;
61
+ const lambdaProps = {
62
+ code,
63
+ vpc: props.vpc,
64
+ handler,
65
+ runtime,
66
+ architecture: props.architecture ?? compute_js_1.COMPUTE_DEFAULTS.LAMBDA.ARCHITECTURE,
67
+ timeout: props.timeout,
68
+ memorySize: props.memorySize,
69
+ lambdaDescription: props.description,
70
+ roleDescription: props.roleDescription,
71
+ inlinePolicy: props.inlinePolicy || [],
72
+ enableFunctionUrl,
73
+ functionUrlAuthType,
74
+ functionUrlCors,
75
+ functionUrlInvokeMode,
76
+ scheduleExpression: props.scheduleExpression,
77
+ ephemeralStorageSize: props.ephemeralStorageSize,
78
+ secrets: props.secrets,
79
+ ssmSecretsPath: props.ssmSecretsPath,
80
+ secretsImport: props.secretsImport,
81
+ environment: props.environment,
82
+ appName: props.appName,
83
+ functionName: id
84
+ };
85
+ this.lambdaFunction = new lambda_1.LambdaFunction(scope, `${id}Lambda`, lambdaProps);
86
+ // CDK's Function.connections getter throws for non-VPC Lambdas, so only
87
+ // access it when a VPC is configured. Non-VPC Lambdas get an empty
88
+ // Connections object to satisfy the IConnectable interface.
89
+ this.connections = props.vpc
90
+ ? this.lambdaFunction.connections
91
+ : new aws_ec2_1.Connections();
92
+ // Process connections using the unified connector interface
93
+ if (props.connections && props.connections.length > 0) {
94
+ if (!props.vpc) {
95
+ throw new Error(`Lambda '${id}' has connections configured but no VPC. ` +
96
+ "A VPC is required for security group connections.");
97
+ }
98
+ try {
99
+ (0, connections_js_1.processConnections)(props.connections, this.lambdaFunction, // IGrantable (execution role)
100
+ this.lambdaFunction // IConnectable (security group)
101
+ );
102
+ }
103
+ catch (error) {
104
+ throw new Error(`Failed to process connections for Lambda '${id}': ${error instanceof Error ? error.message : String(error)}`);
105
+ }
106
+ }
107
+ }
108
+ /**
109
+ * Get a Lambda function by name.
110
+ * Since we only have one function, name is ignored.
111
+ */
112
+ getFunction(_name) {
113
+ return this.lambdaFunction;
114
+ }
115
+ /** Get all Lambda functions. */
116
+ getAllFunctions() {
117
+ return [this.lambdaFunction];
118
+ }
119
+ /**
120
+ * Get the function URL for a Lambda function.
121
+ */
122
+ getFunctionUrl(_name) {
123
+ return this.lambdaFunction.getFunctionUrl();
124
+ }
125
+ /**
126
+ * Grant invoke permissions to a grantee.
127
+ */
128
+ grantInvoke(grantee, _functionName) {
129
+ return this.lambdaFunction.grantInvoke(grantee);
130
+ }
131
+ /**
132
+ * Get the security group for VPC-enabled Lambda functions.
133
+ * Returns undefined if the Lambda is not VPC-enabled.
134
+ */
135
+ getSecurityGroup() {
136
+ const securityGroups = this.connections.securityGroups;
137
+ return securityGroups.length > 0 ? securityGroups[0] : undefined;
138
+ }
139
+ /**
140
+ * Get the underlying Lambda function construct.
141
+ */
142
+ getLambdaFunction() {
143
+ return this.lambdaFunction;
144
+ }
145
+ }
146
+ exports.LambdaCompute = LambdaCompute;
147
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHV0ZUxhbWJkYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3MvY29tcHV0ZUxhbWJkYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFzT0EsMERBc0JDO0FBNVBELHVEQVNnQztBQU1oQyxpREFJNkI7QUFDN0IsaURBQWlEO0FBR2pELDJDQUF1QztBQUl2QywrREFBZ0U7QUFFaEUsK0RBQW9FO0FBR3BFLDZDQUFnRDtBQUVoRCx1REFBdUQ7QUFDdkQscURBS2dDO0FBSjlCLDBHQUFBLFlBQVksT0FBQTtBQUNaLHdHQUFBLFVBQVUsT0FBQTtBQUNWLHdHQUFBLFVBQVUsT0FBQTtBQTRMWjs7O0dBR0c7QUFDSCxTQUFnQix1QkFBdUIsQ0FDckMsS0FBeUI7SUFFekIsSUFBSSxLQUFLLENBQUMsVUFBVSxLQUFLLFdBQVcsRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLFlBQVksb0JBQVUsQ0FBQyxFQUFFLENBQUM7WUFDakQsTUFBTSxJQUFJLEtBQUssQ0FDYixxRUFBcUUsQ0FDdEUsQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPO1lBQ0wsSUFBSSxFQUFFLGlCQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUU7Z0JBQzNDLFdBQVcsRUFBRSw2QkFBZ0IsQ0FBQyxHQUFHLENBQUMsU0FBUzthQUM1QyxDQUFDO1lBQ0YsT0FBTyxFQUFFLG9CQUFPLENBQUMsVUFBVTtZQUMzQixPQUFPLEVBQUUsb0JBQU8sQ0FBQyxVQUFVO1NBQzVCLENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTztRQUNMLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtRQUNoQixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sSUFBSSw2QkFBZ0IsQ0FBQyxNQUFNLENBQUMsT0FBTztRQUN6RCxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sSUFBSSw2QkFBZ0IsQ0FBQyxNQUFNLENBQUMsT0FBTztLQUMxRCxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQWEsYUFBYyxTQUFRLHNCQUFTO0lBTTFDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBeUI7UUFDakUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQU5ILGdCQUFXLEdBQUcsUUFBaUIsQ0FBQztRQVE5QyxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVsRSxxRUFBcUU7UUFDckUsTUFBTSxpQkFBaUIsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO1FBQzVDLE1BQU0saUJBQWlCLEdBQ3JCLGlCQUFpQixLQUFLLFNBQVMsSUFBSSxpQkFBaUIsS0FBSyxLQUFLLENBQUM7UUFDakUsTUFBTSxtQkFBbUIsR0FDdkIsaUJBQWlCLElBQUksT0FBTyxpQkFBaUIsS0FBSyxRQUFRO1lBQ3hELENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRO1lBQzVCLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDaEIsTUFBTSxlQUFlLEdBQ25CLGlCQUFpQixJQUFJLE9BQU8saUJBQWlCLEtBQUssUUFBUTtZQUN4RCxDQUFDLENBQUMsaUJBQWlCLENBQUMsSUFBSTtZQUN4QixDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2hCLE1BQU0scUJBQXFCLEdBQ3pCLGlCQUFpQixJQUFJLE9BQU8saUJBQWlCLEtBQUssUUFBUTtZQUN4RCxDQUFDLENBQUMsaUJBQWlCLENBQUMsVUFBVTtZQUM5QixDQUFDLENBQUMsU0FBUyxDQUFDO1FBRWhCLE1BQU0sV0FBVyxHQUFHO1lBQ2xCLElBQUk7WUFDSixHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUc7WUFDZCxPQUFPO1lBQ1AsT0FBTztZQUNQLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWSxJQUFJLDZCQUFnQixDQUFDLE1BQU0sQ0FBQyxZQUFZO1lBQ3hFLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztZQUN0QixVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7WUFDNUIsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLFdBQVc7WUFDcEMsZUFBZSxFQUFFLEtBQUssQ0FBQyxlQUFlO1lBQ3RDLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWSxJQUFJLEVBQUU7WUFDdEMsaUJBQWlCO1lBQ2pCLG1CQUFtQjtZQUNuQixlQUFlO1lBQ2YscUJBQXFCO1lBQ3JCLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxrQkFBa0I7WUFDNUMsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLG9CQUFvQjtZQUNoRCxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87WUFDdEIsY0FBYyxFQUFFLEtBQUssQ0FBQyxjQUFjO1lBQ3BDLGFBQWEsRUFBRSxLQUFLLENBQUMsYUFBYTtZQUNsQyxXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7WUFDOUIsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO1lBQ3RCLFlBQVksRUFBRSxFQUFFO1NBQ2pCLENBQUM7UUFFRixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksdUJBQWMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUU1RSx3RUFBd0U7UUFDeEUsbUVBQW1FO1FBQ25FLDREQUE0RDtRQUM1RCxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxHQUFHO1lBQzFCLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVc7WUFDakMsQ0FBQyxDQUFDLElBQUkscUJBQVcsRUFBRSxDQUFDO1FBRXRCLDREQUE0RDtRQUM1RCxJQUFJLEtBQUssQ0FBQyxXQUFXLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDZixNQUFNLElBQUksS0FBSyxDQUNiLFdBQVcsRUFBRSwyQ0FBMkM7b0JBQ3RELG1EQUFtRCxDQUN0RCxDQUFDO1lBQ0osQ0FBQztZQUNELElBQUksQ0FBQztnQkFDSCxJQUFBLG1DQUFrQixFQUNoQixLQUFLLENBQUMsV0FBVyxFQUNqQixJQUFJLENBQUMsY0FBYyxFQUFFLDhCQUE4QjtnQkFDbkQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQ0FBZ0M7aUJBQ3JELENBQUM7WUFDSixDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZixNQUFNLElBQUksS0FBSyxDQUNiLDZDQUE2QyxFQUFFLE1BQzdDLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQ3ZELEVBQUUsQ0FDSCxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsV0FBVyxDQUFDLEtBQWM7UUFDeEIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7SUFFRCxnQ0FBZ0M7SUFDaEMsZUFBZTtRQUNiLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsY0FBYyxDQUFDLEtBQWM7UUFDM0IsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzlDLENBQUM7SUFFRDs7T0FFRztJQUNILFdBQVcsQ0FBQyxPQUFtQixFQUFFLGFBQXNCO1FBQ3JELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVEOzs7T0FHRztJQUNILGdCQUFnQjtRQUNkLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDO1FBQ3ZELE9BQU8sY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ25FLENBQUM7SUFFRDs7T0FFRztJQUNILGlCQUFpQjtRQUNmLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDO0NBQ0Y7QUFoSUQsc0NBZ0lDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29kZSxcbiAgUnVudGltZSxcbiAgSGFuZGxlcixcbiAgdHlwZSBBcmNoaXRlY3R1cmUsXG4gIHR5cGUgRnVuY3Rpb25VcmxBdXRoVHlwZSxcbiAgdHlwZSBGdW5jdGlvblVybENvcnNPcHRpb25zLFxuICB0eXBlIElGdW5jdGlvbixcbiAgdHlwZSBJbnZva2VNb2RlXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCI7XG5pbXBvcnQge1xuICB0eXBlIFBvbGljeVN0YXRlbWVudCxcbiAgdHlwZSBJR3JhbnRhYmxlLFxuICB0eXBlIEdyYW50XG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQge1xuICBDb25uZWN0aW9ucyxcbiAgdHlwZSBJVnBjLFxuICB0eXBlIElTZWN1cml0eUdyb3VwXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5pbXBvcnQgeyBSZXBvc2l0b3J5IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lY3JcIjtcbmltcG9ydCB7IHR5cGUgUmVwb3NpdG9yeUltYWdlIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lY3NcIjtcblxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuaW1wb3J0IHsgdHlwZSBJTGFtYmRhQ29tcHV0ZSB9IGZyb20gXCIuL2ludGVyZmFjZXMvY29tcHV0ZS5qc1wiO1xuaW1wb3J0IHsgdHlwZSBDb25uZWN0aW9uU3BlYyB9IGZyb20gXCIuL2ludGVyZmFjZXMvY29ubmVjdG9yLmpzXCI7XG5pbXBvcnQgeyBwcm9jZXNzQ29ubmVjdGlvbnMgfSBmcm9tIFwiLi4vLi4vdXRpbHMvY29ubmVjdGlvbnMuanNcIjtcblxuaW1wb3J0IHsgTGFtYmRhRnVuY3Rpb24gfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9jb21wdXRlL2xhbWJkYVwiO1xuaW1wb3J0IHsgdHlwZSBTZWNyZXRJbXBvcnQgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9zZWNyZXRzXCI7XG5cbmltcG9ydCB7IENPTVBVVEVfREVGQVVMVFMgfSBmcm9tIFwiLi9jb21wdXRlLmpzXCI7XG5cbi8vIFJlLWV4cG9ydCBMYW1iZGEgdHlwZXMgZnJvbSBDREsgZm9yIHVzZXIgY29udmVuaWVuY2VcbmV4cG9ydCB7XG4gIEFyY2hpdGVjdHVyZSxcbiAgSHR0cE1ldGhvZCxcbiAgSW52b2tlTW9kZSxcbiAgdHlwZSBGdW5jdGlvblVybENvcnNPcHRpb25zXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCI7XG5cbi8qKlxuICogTGFtYmRhIGZ1bmN0aW9uIFVSTCBjb25maWd1cmF0aW9uLlxuICogLSBPbWl0OiBkaXNhYmxlZCAoZGVmYXVsdClcbiAqIC0gYHt9YDogZW5hYmxlZCB3aXRoIElBTSBhdXRoXG4gKiAtIGB7IGF1dGhUeXBlOiBcIk5PTkVcIiwgY29yczogey4uLn0gfWA6IHB1YmxpYyB3aXRoIENPUlNcbiAqIC0gYGZhbHNlYDogZXhwbGljaXRseSBkaXNhYmxlZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZ1bmN0aW9uVXJsQ29uZmlnIHtcbiAgLyoqIEF1dGhlbnRpY2F0aW9uIHR5cGUuIERlZmF1bHQ6IEFXU19JQU0gKi9cbiAgYXV0aFR5cGU/OiBGdW5jdGlvblVybEF1dGhUeXBlO1xuICAvKiogQ09SUyBjb25maWd1cmF0aW9uICovXG4gIGNvcnM/OiBGdW5jdGlvblVybENvcnNPcHRpb25zO1xuICAvKiogSW52b2tlIG1vZGUuIFVzZSBSRVNQT05TRV9TVFJFQU0gZm9yIExhbWJkYSBzdHJlYW1pbmcuIERlZmF1bHQ6IEJVRkZFUkVEICovXG4gIGludm9rZU1vZGU/OiBJbnZva2VNb2RlO1xufVxuXG4vKipcbiAqIEJhc2UgTGFtYmRhIGNvbmZpZ3VyYXRpb24gc2hhcmVkIGJ5IGJvdGggY29udGFpbmVyIGFuZCBjb2RlIGRlcGxveW1lbnRzLlxuICovXG5pbnRlcmZhY2UgQmFzZUxhbWJkYVByb3BzIHtcbiAgdHlwZTogXCJsYW1iZGFcIjtcbiAgdnBjPzogSVZwYztcbiAgLyoqIFRpbWVvdXQgaW4gc2Vjb25kcy4gRGVmYXVsdDogMyAqL1xuICB0aW1lb3V0PzogbnVtYmVyO1xuICAvKiogTWVtb3J5IHNpemUgaW4gTUIuIERlZmF1bHQ6IDEyOCAqL1xuICBtZW1vcnlTaXplPzogbnVtYmVyO1xuICBlcGhlbWVyYWxTdG9yYWdlU2l6ZT86IG51bWJlcjtcbiAgLyoqIENQVSBhcmNoaXRlY3R1cmUuIERlZmF1bHQ6IHg4Nl82NC4gVXNlIEFyY2hpdGVjdHVyZS5BUk1fNjQgZm9yIEdyYXZpdG9uMi4gKi9cbiAgYXJjaGl0ZWN0dXJlPzogQXJjaGl0ZWN0dXJlO1xuICAvKiogTGFtYmRhIGZ1bmN0aW9uIGRlc2NyaXB0aW9uICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAvKiogSUFNIHJvbGUgZGVzY3JpcHRpb24gKi9cbiAgcm9sZURlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8vIElubGluZSBwb2xpY2llcyAtIHJvdXRlZCB0byBleGVjdXRpb24gcm9sZSBmb3IgRUNTLCB0YXNrIHJvbGUgZm9yIExhbWJkYVxuICAvKiogSW5saW5lIElBTSBwb2xpY3kgc3RhdGVtZW50cyAqL1xuICBpbmxpbmVQb2xpY3k/OiBQb2xpY3lTdGF0ZW1lbnRbXTtcbiAgLyoqXG4gICAqIEZ1bmN0aW9uIFVSTCBjb25maWd1cmF0aW9uLlxuICAgKiAtIE9taXQ6IGRpc2FibGVkIChkZWZhdWx0KVxuICAgKiAtIGB7fWA6IGVuYWJsZWQgd2l0aCBJQU0gYXV0aFxuICAgKiAtIGB7IGF1dGhUeXBlOiBcIk5PTkVcIiB9YDogcHVibGljIGFjY2Vzc1xuICAgKiAtIGBmYWxzZWA6IGV4cGxpY2l0bHkgZGlzYWJsZWRcbiAgICovXG4gIGZ1bmN0aW9uVXJsPzogRnVuY3Rpb25VcmxDb25maWcgfCBmYWxzZTtcbiAgLyoqIEVudmlyb25tZW50IHZhcmlhYmxlcyAqL1xuICBlbnZpcm9ubWVudD86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFNlY3JldHMgZnJvbSBBV1MgU1NNIFBhcmFtZXRlciBTdG9yZS5cbiAgICogQXJyYXkgb2Ygc2VjcmV0IG5hbWVzIHRoYXQgd2lsbCBiZSBmZXRjaGVkIGZyb20gdGhlIExhbWJkYSdzIFNTTSBuYW1lc3BhY2UuXG4gICAqIFRoZSBuYW1lc3BhY2UgcGF0aCBpcyBhdXRvLWRldGVybWluZWQgYXM6IC88YXBwTmFtZT4vbGFtYmRhLzxmdW5jdGlvbk5hbWU+XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHNlY3JldHM6IFtcIkFQSV9LRVlcIiwgXCJTVFJJUEVfU0VDUkVUXCJdXG4gICAqL1xuICBzZWNyZXRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFNTTSBQYXJhbWV0ZXIgU3RvcmUgcGF0aCBmb3Igc2VjcmV0cy5cbiAgICogSWYgc2VjcmV0cyBhcmUgZGVmaW5lZCwgdGhpcyBwYXRoIGlzIHVzZWQgYXMgdGhlIGJhc2UgcGF0aC5cbiAgICogSWYgbm90IHNwZWNpZmllZCwgdXNlczogLzxhcHBOYW1lPi9sYW1iZGEvPGZ1bmN0aW9uTmFtZT5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogc3NtU2VjcmV0c1BhdGg6IFwiL215YXBwL2N1c3RvbS9wYXRoXCJcbiAgICovXG4gIHNzbVNlY3JldHNQYXRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTZWNyZXRzIGltcG9ydGVkIGZyb20gb3RoZXIgQ0RLIHJlc291cmNlcyAoQVdTIFNlY3JldHMgTWFuYWdlcikuXG4gICAqIFVzZWQgZm9yIENESy1tYW5hZ2VkIHNlY3JldHMgbGlrZSBkYXRhYmFzZSBjcmVkZW50aWFscy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogc2VjcmV0c0ltcG9ydDoge1xuICAgKiAgIERBVEFCQVNFX1VTRVJOQU1FOiBkYXRhYmFzZS5nZXRDcmVkZW50aWFscygpLmdldEltcG9ydChcInVzZXJuYW1lXCIpLFxuICAgKiAgIERBVEFCQVNFX1BBU1NXT1JEOiBkYXRhYmFzZS5nZXRDcmVkZW50aWFscygpLmdldEltcG9ydChcInBhc3N3b3JkXCIpXG4gICAqIH1cbiAgICovXG4gIHNlY3JldHNJbXBvcnQ/OiBSZWNvcmQ8c3RyaW5nLCBTZWNyZXRJbXBvcnQ+O1xuXG4gIC8qKlxuICAgKiBBcHBsaWNhdGlvbiBuYW1lIGZvciBTU00gc2VjcmV0cyBwYXRoIGRlcml2YXRpb24uXG4gICAqIEF1dG8tZGVyaXZlZCBmcm9tIEFwcCBpbnN0YW5jZSB3aGVuIHVzaW5nIENvbXB1dGVGYWN0b3J5LlxuICAgKiBPbmx5IHNwZWNpZnkgZm9yIGFkdmFuY2VkIHVzZSBjYXNlcy5cbiAgICovXG4gIGFwcE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlc291cmNlcyB0aGlzIExhbWJkYSBuZWVkcyB0byBjb25uZWN0IHRvIChlLmcuLCBkYXRhYmFzZXMsIFMzIGJ1Y2tldHMsIFNRUyBxdWV1ZXMpLlxuICAgKiBDcmVhdGVzIHNlY3VyaXR5IGdyb3VwIHJ1bGVzIGZvciBJQ29ubmVjdGFibGUgcmVzb3VyY2VzIGFuZCBJQU0gZ3JhbnRzIGZvciBJQU0gcmVzb3VyY2VzLlxuICAgKlxuICAgKiBTdXBwb3J0czpcbiAgICogLSBJQ29ubmVjdGFibGU6IFNlY3VyaXR5IGdyb3VwIHJlc291cmNlcyAoUkRTLCBFQ1MsIGV0Yy4pXG4gICAqIC0gSVN0b3JhZ2VDb25uZWN0b3I6IFMzIGJ1Y2tldHMgKElBTSBncmFudHMpXG4gICAqIC0gSUR5bmFtb0RCQ29ubmVjdG9yOiBEeW5hbW9EQiB0YWJsZXMgKElBTSBncmFudHMpXG4gICAqIC0gSVF1ZXVlQ29ubmVjdG9yOiBTUVMgcXVldWVzIChJQU0gZ3JhbnRzKVxuICAgKiAtIENvbm5lY3Rpb25Db25maWc6IEV4cGxpY2l0IGFjY2VzcyBsZXZlbCBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbm5lY3Rpb25zOiBbXG4gICAqICAgZGF0YWJhc2UsXG4gICAqICAgeyByZXNvdXJjZTogcXVldWUsIGFjY2VzczogXCJzZW5kXCIgfVxuICAgKiBdXG4gICAqL1xuICBjb25uZWN0aW9ucz86IENvbm5lY3Rpb25TcGVjW107XG5cbiAgLyoqXG4gICAqIEV2ZW50QnJpZGdlIHNjaGVkdWxlIGV4cHJlc3Npb24gZm9yIHNjaGVkdWxlZCBMYW1iZGEgaW52b2NhdGlvbnMuXG4gICAqIFVzZXMgY3JvbiBvciByYXRlIHN5bnRheDogXCJyYXRlKDEgaG91cilcIiBvciBcImNyb24oMCAxMiAqICogPyAqKVwiLlxuICAgKi9cbiAgc2NoZWR1bGVFeHByZXNzaW9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbnRhaW5lci1iYXNlZCBMYW1iZGEgdXNpbmcgRUNSIGltYWdlLlxuICpcbiAqIFVzZXMgRG9ja2VyIGltYWdlIGZyb20gRUNSIHJlcG9zaXRvcnkuIEhhbmRsZXIgYW5kIHJ1bnRpbWUgYXJlXG4gKiBhdXRvbWF0aWNhbGx5IHNldCB0byBGUk9NX0lNQUdFLlxuICpcbiAqIEBleGFtcGxlXG4gKiBhcHAuYWRkQ29tcHV0ZShDb21wdXRlRmFjdG9yeS5idWlsZChcIkltYWdlTGFtYmRhXCIsIHtcbiAqICAgdHlwZTogXCJsYW1iZGFcIixcbiAqICAgZGVwbG95bWVudDogXCJjb250YWluZXJcIixcbiAqICAgZWNyUmVwb3NpdG9yeTogYXBwLmdldERlZmF1bHRDb250YWluZXJSZWdpc3RyeSgpXG4gKiB9KSk7XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGFpbmVyTGFtYmRhUHJvcHMgZXh0ZW5kcyBCYXNlTGFtYmRhUHJvcHMge1xuICAvKiogQ29udGFpbmVyLWJhc2VkIGRlcGxveW1lbnQgdXNpbmcgRUNSIGltYWdlICovXG4gIGRlcGxveW1lbnQ6IFwiY29udGFpbmVyXCI7XG4gIC8qKiBFQ1IgcmVwb3NpdG9yeSBjb250YWluaW5nIHRoZSBMYW1iZGEgY29udGFpbmVyIGltYWdlICovXG4gIGVjclJlcG9zaXRvcnk6IFJlcG9zaXRvcnkgfCBSZXBvc2l0b3J5SW1hZ2U7XG59XG5cbi8qKlxuICogQ29kZS1iYXNlZCBMYW1iZGEgdXNpbmcgaW5saW5lIGNvZGUgb3IgUzMuXG4gKlxuICogVXNlcyB0cmFkaXRpb25hbCBMYW1iZGEgZGVwbG95bWVudCB3aXRoIGNvZGUsIGhhbmRsZXIsIGFuZCBydW50aW1lLlxuICpcbiAqIEBleGFtcGxlXG4gKiBhcHAuYWRkQ29tcHV0ZShDb21wdXRlRmFjdG9yeS5idWlsZChcIkNvZGVMYW1iZGFcIiwge1xuICogICB0eXBlOiBcImxhbWJkYVwiLFxuICogICBkZXBsb3ltZW50OiBcImNvZGVcIixcbiAqICAgY29kZTogQ29kZS5mcm9tQXNzZXQoXCIuL2xhbWJkYVwiKSxcbiAqICAgaGFuZGxlcjogXCJpbmRleC5oYW5kbGVyXCIsXG4gKiAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTXzIwX1hcbiAqIH0pKTtcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb2RlTGFtYmRhUHJvcHMgZXh0ZW5kcyBCYXNlTGFtYmRhUHJvcHMge1xuICAvKiogQ29kZS1iYXNlZCBkZXBsb3ltZW50ICovXG4gIGRlcGxveW1lbnQ6IFwiY29kZVwiO1xuICAvKiogTGFtYmRhIGNvZGUgKGZyb20gYXNzZXQsIFMzLCBvciBpbmxpbmUpICovXG4gIGNvZGU6IENvZGU7XG4gIC8qKiBIYW5kbGVyIGZ1bmN0aW9uLiBEZWZhdWx0OiBcImluZGV4LmhhbmRsZXJcIiAqL1xuICBoYW5kbGVyPzogc3RyaW5nO1xuICAvKiogTGFtYmRhIHJ1bnRpbWUuIERlZmF1bHQ6IE5PREVKU18yMl9YICovXG4gIHJ1bnRpbWU/OiBSdW50aW1lO1xufVxuXG4vKipcbiAqIExhbWJkYSBjb21wdXRlIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogRGlzY3JpbWluYXRlZCB1bmlvbiBlbnN1cmluZyB0eXBlLXNhZmUgTGFtYmRhIGNvbmZpZ3VyYXRpb246XG4gKiAtIGBkZXBsb3ltZW50OiBcImNvbnRhaW5lclwiYCByZXF1aXJlcyBgZWNyUmVwb3NpdG9yeWBcbiAqIC0gYGRlcGxveW1lbnQ6IFwiY29kZVwiYCByZXF1aXJlcyBgY29kZWAgYW5kIGFsbG93cyBgaGFuZGxlcmAvYHJ1bnRpbWVgXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnRhaW5lci1iYXNlZCBMYW1iZGFcbiAqIHsgdHlwZTogXCJsYW1iZGFcIiwgZGVwbG95bWVudDogXCJjb250YWluZXJcIiwgZWNyUmVwb3NpdG9yeTogZWNyIH1cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ29kZS1iYXNlZCBMYW1iZGFcbiAqIHsgdHlwZTogXCJsYW1iZGFcIiwgZGVwbG95bWVudDogXCJjb2RlXCIsIGNvZGU6IENvZGUuZnJvbUFzc2V0KFwiLi9sYW1iZGFcIikgfVxuICovXG5leHBvcnQgdHlwZSBMYW1iZGFDb21wdXRlUHJvcHMgPSBDb250YWluZXJMYW1iZGFQcm9wcyB8IENvZGVMYW1iZGFQcm9wcztcblxuLyoqXG4gKiBSZXNvbHZlZCBMYW1iZGEgZGVwbG95bWVudCBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVkTGFtYmRhRGVwbG95bWVudCB7XG4gIGNvZGU6IENvZGU7XG4gIGhhbmRsZXI6IHN0cmluZztcbiAgcnVudGltZTogUnVudGltZTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIExhbWJkYSBkZXBsb3ltZW50IGNvbmZpZ3VyYXRpb24gZnJvbSBwcm9wcy5cbiAqIEhhbmRsZXMgY29udGFpbmVyIHZzIGNvZGUgZGVwbG95bWVudCB0eXBlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVMYW1iZGFEZXBsb3ltZW50KFxuICBwcm9wczogTGFtYmRhQ29tcHV0ZVByb3BzXG4pOiBSZXNvbHZlZExhbWJkYURlcGxveW1lbnQge1xuICBpZiAocHJvcHMuZGVwbG95bWVudCA9PT0gXCJjb250YWluZXJcIikge1xuICAgIGlmICghKHByb3BzLmVjclJlcG9zaXRvcnkgaW5zdGFuY2VvZiBSZXBvc2l0b3J5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcImVjclJlcG9zaXRvcnkgbXVzdCBiZSBhIFJlcG9zaXRvcnkgaW5zdGFuY2UgZm9yIExhbWJkYSBjb21wdXRlIHR5cGVcIlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvZGU6IENvZGUuZnJvbUVjckltYWdlKHByb3BzLmVjclJlcG9zaXRvcnksIHtcbiAgICAgICAgdGFnT3JEaWdlc3Q6IENPTVBVVEVfREVGQVVMVFMuRUNTLklNQUdFX1RBR1xuICAgICAgfSksXG4gICAgICBoYW5kbGVyOiBIYW5kbGVyLkZST01fSU1BR0UsXG4gICAgICBydW50aW1lOiBSdW50aW1lLkZST01fSU1BR0VcbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgY29kZTogcHJvcHMuY29kZSxcbiAgICBoYW5kbGVyOiBwcm9wcy5oYW5kbGVyIHx8IENPTVBVVEVfREVGQVVMVFMuTEFNQkRBLkhBTkRMRVIsXG4gICAgcnVudGltZTogcHJvcHMucnVudGltZSB8fCBDT01QVVRFX0RFRkFVTFRTLkxBTUJEQS5SVU5USU1FXG4gIH07XG59XG5cbi8qKlxuICogTGFtYmRhIGNvbXB1dGUgd3JhcHBlciBpbXBsZW1lbnRpbmcgSUxhbWJkYUNvbXB1dGUuXG4gKiBQcm92aWRlcyB0eXBlLXNhZmUgYWNjZXNzIHRvIExhbWJkYS1zcGVjaWZpYyByZXNvdXJjZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBMYW1iZGFDb21wdXRlIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSUxhbWJkYUNvbXB1dGUge1xuICBwdWJsaWMgcmVhZG9ubHkgY29tcHV0ZVR5cGUgPSBcImxhbWJkYVwiIGFzIGNvbnN0O1xuICBwdWJsaWMgcmVhZG9ubHkgY29ubmVjdGlvbnM6IENvbm5lY3Rpb25zO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbGFtYmRhRnVuY3Rpb246IExhbWJkYUZ1bmN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBMYW1iZGFDb21wdXRlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3QgeyBjb2RlLCBoYW5kbGVyLCBydW50aW1lIH0gPSByZXNvbHZlTGFtYmRhRGVwbG95bWVudChwcm9wcyk7XG5cbiAgICAvLyBDb252ZXJ0IHByZXNlbmNlLWJhc2VkIGZ1bmN0aW9uVXJsIGNvbmZpZyB0byBsZWdhY3kgYm9vbGVhbiBmb3JtYXRcbiAgICBjb25zdCBmdW5jdGlvblVybENvbmZpZyA9IHByb3BzLmZ1bmN0aW9uVXJsO1xuICAgIGNvbnN0IGVuYWJsZUZ1bmN0aW9uVXJsID1cbiAgICAgIGZ1bmN0aW9uVXJsQ29uZmlnICE9PSB1bmRlZmluZWQgJiYgZnVuY3Rpb25VcmxDb25maWcgIT09IGZhbHNlO1xuICAgIGNvbnN0IGZ1bmN0aW9uVXJsQXV0aFR5cGUgPVxuICAgICAgZW5hYmxlRnVuY3Rpb25VcmwgJiYgdHlwZW9mIGZ1bmN0aW9uVXJsQ29uZmlnID09PSBcIm9iamVjdFwiXG4gICAgICAgID8gZnVuY3Rpb25VcmxDb25maWcuYXV0aFR5cGVcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgZnVuY3Rpb25VcmxDb3JzID1cbiAgICAgIGVuYWJsZUZ1bmN0aW9uVXJsICYmIHR5cGVvZiBmdW5jdGlvblVybENvbmZpZyA9PT0gXCJvYmplY3RcIlxuICAgICAgICA/IGZ1bmN0aW9uVXJsQ29uZmlnLmNvcnNcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgZnVuY3Rpb25VcmxJbnZva2VNb2RlID1cbiAgICAgIGVuYWJsZUZ1bmN0aW9uVXJsICYmIHR5cGVvZiBmdW5jdGlvblVybENvbmZpZyA9PT0gXCJvYmplY3RcIlxuICAgICAgICA/IGZ1bmN0aW9uVXJsQ29uZmlnLmludm9rZU1vZGVcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBsYW1iZGFQcm9wcyA9IHtcbiAgICAgIGNvZGUsXG4gICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgIGhhbmRsZXIsXG4gICAgICBydW50aW1lLFxuICAgICAgYXJjaGl0ZWN0dXJlOiBwcm9wcy5hcmNoaXRlY3R1cmUgPz8gQ09NUFVURV9ERUZBVUxUUy5MQU1CREEuQVJDSElURUNUVVJFLFxuICAgICAgdGltZW91dDogcHJvcHMudGltZW91dCxcbiAgICAgIG1lbW9yeVNpemU6IHByb3BzLm1lbW9yeVNpemUsXG4gICAgICBsYW1iZGFEZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICByb2xlRGVzY3JpcHRpb246IHByb3BzLnJvbGVEZXNjcmlwdGlvbixcbiAgICAgIGlubGluZVBvbGljeTogcHJvcHMuaW5saW5lUG9saWN5IHx8IFtdLFxuICAgICAgZW5hYmxlRnVuY3Rpb25VcmwsXG4gICAgICBmdW5jdGlvblVybEF1dGhUeXBlLFxuICAgICAgZnVuY3Rpb25VcmxDb3JzLFxuICAgICAgZnVuY3Rpb25VcmxJbnZva2VNb2RlLFxuICAgICAgc2NoZWR1bGVFeHByZXNzaW9uOiBwcm9wcy5zY2hlZHVsZUV4cHJlc3Npb24sXG4gICAgICBlcGhlbWVyYWxTdG9yYWdlU2l6ZTogcHJvcHMuZXBoZW1lcmFsU3RvcmFnZVNpemUsXG4gICAgICBzZWNyZXRzOiBwcm9wcy5zZWNyZXRzLFxuICAgICAgc3NtU2VjcmV0c1BhdGg6IHByb3BzLnNzbVNlY3JldHNQYXRoLFxuICAgICAgc2VjcmV0c0ltcG9ydDogcHJvcHMuc2VjcmV0c0ltcG9ydCxcbiAgICAgIGVudmlyb25tZW50OiBwcm9wcy5lbnZpcm9ubWVudCxcbiAgICAgIGFwcE5hbWU6IHByb3BzLmFwcE5hbWUsXG4gICAgICBmdW5jdGlvbk5hbWU6IGlkXG4gICAgfTtcblxuICAgIHRoaXMubGFtYmRhRnVuY3Rpb24gPSBuZXcgTGFtYmRhRnVuY3Rpb24oc2NvcGUsIGAke2lkfUxhbWJkYWAsIGxhbWJkYVByb3BzKTtcblxuICAgIC8vIENESydzIEZ1bmN0aW9uLmNvbm5lY3Rpb25zIGdldHRlciB0aHJvd3MgZm9yIG5vbi1WUEMgTGFtYmRhcywgc28gb25seVxuICAgIC8vIGFjY2VzcyBpdCB3aGVuIGEgVlBDIGlzIGNvbmZpZ3VyZWQuIE5vbi1WUEMgTGFtYmRhcyBnZXQgYW4gZW1wdHlcbiAgICAvLyBDb25uZWN0aW9ucyBvYmplY3QgdG8gc2F0aXNmeSB0aGUgSUNvbm5lY3RhYmxlIGludGVyZmFjZS5cbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gcHJvcHMudnBjXG4gICAgICA/IHRoaXMubGFtYmRhRnVuY3Rpb24uY29ubmVjdGlvbnNcbiAgICAgIDogbmV3IENvbm5lY3Rpb25zKCk7XG5cbiAgICAvLyBQcm9jZXNzIGNvbm5lY3Rpb25zIHVzaW5nIHRoZSB1bmlmaWVkIGNvbm5lY3RvciBpbnRlcmZhY2VcbiAgICBpZiAocHJvcHMuY29ubmVjdGlvbnMgJiYgcHJvcHMuY29ubmVjdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKCFwcm9wcy52cGMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBMYW1iZGEgJyR7aWR9JyBoYXMgY29ubmVjdGlvbnMgY29uZmlndXJlZCBidXQgbm8gVlBDLiBgICtcbiAgICAgICAgICAgIFwiQSBWUEMgaXMgcmVxdWlyZWQgZm9yIHNlY3VyaXR5IGdyb3VwIGNvbm5lY3Rpb25zLlwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBwcm9jZXNzQ29ubmVjdGlvbnMoXG4gICAgICAgICAgcHJvcHMuY29ubmVjdGlvbnMsXG4gICAgICAgICAgdGhpcy5sYW1iZGFGdW5jdGlvbiwgLy8gSUdyYW50YWJsZSAoZXhlY3V0aW9uIHJvbGUpXG4gICAgICAgICAgdGhpcy5sYW1iZGFGdW5jdGlvbiAvLyBJQ29ubmVjdGFibGUgKHNlY3VyaXR5IGdyb3VwKVxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBGYWlsZWQgdG8gcHJvY2VzcyBjb25uZWN0aW9ucyBmb3IgTGFtYmRhICcke2lkfSc6ICR7XG4gICAgICAgICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcilcbiAgICAgICAgICB9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSBMYW1iZGEgZnVuY3Rpb24gYnkgbmFtZS5cbiAgICogU2luY2Ugd2Ugb25seSBoYXZlIG9uZSBmdW5jdGlvbiwgbmFtZSBpcyBpZ25vcmVkLlxuICAgKi9cbiAgZ2V0RnVuY3Rpb24oX25hbWU/OiBzdHJpbmcpOiBJRnVuY3Rpb24gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmxhbWJkYUZ1bmN0aW9uO1xuICB9XG5cbiAgLyoqIEdldCBhbGwgTGFtYmRhIGZ1bmN0aW9ucy4gKi9cbiAgZ2V0QWxsRnVuY3Rpb25zKCk6IElGdW5jdGlvbltdIHtcbiAgICByZXR1cm4gW3RoaXMubGFtYmRhRnVuY3Rpb25dO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZnVuY3Rpb24gVVJMIGZvciBhIExhbWJkYSBmdW5jdGlvbi5cbiAgICovXG4gIGdldEZ1bmN0aW9uVXJsKF9uYW1lPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5sYW1iZGFGdW5jdGlvbi5nZXRGdW5jdGlvblVybCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IGludm9rZSBwZXJtaXNzaW9ucyB0byBhIGdyYW50ZWUuXG4gICAqL1xuICBncmFudEludm9rZShncmFudGVlOiBJR3JhbnRhYmxlLCBfZnVuY3Rpb25OYW1lPzogc3RyaW5nKTogR3JhbnQge1xuICAgIHJldHVybiB0aGlzLmxhbWJkYUZ1bmN0aW9uLmdyYW50SW52b2tlKGdyYW50ZWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc2VjdXJpdHkgZ3JvdXAgZm9yIFZQQy1lbmFibGVkIExhbWJkYSBmdW5jdGlvbnMuXG4gICAqIFJldHVybnMgdW5kZWZpbmVkIGlmIHRoZSBMYW1iZGEgaXMgbm90IFZQQy1lbmFibGVkLlxuICAgKi9cbiAgZ2V0U2VjdXJpdHlHcm91cCgpOiBJU2VjdXJpdHlHcm91cCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc2VjdXJpdHlHcm91cHMgPSB0aGlzLmNvbm5lY3Rpb25zLnNlY3VyaXR5R3JvdXBzO1xuICAgIHJldHVybiBzZWN1cml0eUdyb3Vwcy5sZW5ndGggPiAwID8gc2VjdXJpdHlHcm91cHNbMF0gOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB1bmRlcmx5aW5nIExhbWJkYSBmdW5jdGlvbiBjb25zdHJ1Y3QuXG4gICAqL1xuICBnZXRMYW1iZGFGdW5jdGlvbigpOiBMYW1iZGFGdW5jdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMubGFtYmRhRnVuY3Rpb247XG4gIH1cbn1cbiJdfQ==
@@ -1,7 +1,7 @@
1
1
  import { Construct } from "constructs";
2
2
  import type App from "../../app";
3
3
  import { type DynamoDBKeySchema, type DynamoDBGlobalSecondaryIndex } from "../../resources/aws/database/dynamodb";
4
- import { type Connections, type IConnectable, type IVpc, type SubnetSelection } from "aws-cdk-lib/aws-ec2";
4
+ import { type Connections, type IConnectable, type IVpc } from "aws-cdk-lib/aws-ec2";
5
5
  import { type ITable } from "aws-cdk-lib/aws-dynamodb";
6
6
  import { type Secret } from "../../resources/aws/secrets";
7
7
  import { type IGrantable, type Grant } from "aws-cdk-lib/aws-iam";
@@ -9,13 +9,9 @@ import { type IRelationalDatabase, type IDynamoDBDatabase, type RelationalDataba
9
9
  import { type IDynamoDBConnector, type ISecurityGroupConnector } from "./interfaces/connector.js";
10
10
  import { type IInstanceEngine, type IClusterEngine } from "aws-cdk-lib/aws-rds";
11
11
  import { Duration } from "aws-cdk-lib";
12
- import { type IKey } from "aws-cdk-lib/aws-kms";
13
- export type DatabaseEngine = "postgresql" | "mysql";
14
- export interface EngineConfig {
15
- defaultUsername: string;
16
- sslParameters: Record<string, string>;
17
- rotationAppName: string;
18
- }
12
+ import { type DatabaseEngine, type EngineConfig, type ProxyConfig, type ReadReplicaConfig, type CredentialsConfig, type EncryptionConfig, type DatabaseInsightsConfig, type AuroraEncryptionConfig, type AuroraWriterConfig, type AuroraReadersConfig } from "../../utils/databaseTypes";
13
+ export type { DatabaseEngine, EngineConfig } from "../../utils/databaseTypes";
14
+ export { type ProxyConfig, type ReadReplicaConfig, type CredentialsConfig, type SecretRotationConfig, type EncryptionConfig, type DatabaseInsightsConfig, type AwsManagedKey, type CustomerManagedKeyMarker, type EncryptionKeySpec, type AuroraEncryptionConfig, type AuroraReaderConfig, type AuroraWriterConfig, type AuroraReadersConfig, isAwsManagedKey, isCMKRequested, AWS_MANAGED, USE_CMK } from "../../utils/databaseTypes";
19
15
  export declare const DATABASE_ENGINE_CONFIG: Record<DatabaseEngine, {
20
16
  aurora: {
21
17
  version: string;
@@ -32,82 +28,6 @@ export declare const DATABASE_ENGINE_CONFIG: Record<DatabaseEngine, {
32
28
  export declare function getAuroraClusterEngine(engine: DatabaseEngine): IClusterEngine;
33
29
  export declare function getInstanceEngine(engine: DatabaseEngine): IInstanceEngine;
34
30
  export declare function getEngineConfig(engine: DatabaseEngine): EngineConfig;
35
- export interface ProxyConfig {
36
- maxConnections?: number;
37
- maxIdleConnections?: number;
38
- connectionBorrowTimeout?: number;
39
- requireTLS?: boolean;
40
- vpcSubnets?: SubnetSelection;
41
- }
42
- export interface ReadReplicaConfig {
43
- instanceType?: string;
44
- availabilityZone?: string;
45
- }
46
- export interface CredentialsConfig {
47
- username?: string;
48
- secretRotation?: SecretRotationConfig | false;
49
- }
50
- export interface SecretRotationConfig {
51
- automaticallyAfter?: Duration;
52
- }
53
- export interface EncryptionConfig {
54
- storageKey?: EncryptionKeySpec;
55
- }
56
- export type PerformanceInsightsRetentionPeriod = 7 | 31 | 93 | 186 | 372;
57
- export interface PerformanceInsightsConfig {
58
- encryptionKey?: EncryptionKeySpec;
59
- /** Retention period in days. Default: 31 (1 month). */
60
- retentionPeriod?: PerformanceInsightsRetentionPeriod;
61
- }
62
- export interface AwsManagedKey {
63
- readonly awsManaged: true;
64
- }
65
- export interface CustomerManagedKeyMarker {
66
- readonly useCMK: true;
67
- }
68
- export type EncryptionKeySpec = IKey | AwsManagedKey | CustomerManagedKeyMarker;
69
- export declare function isAwsManagedKey(spec: EncryptionKeySpec | undefined): spec is AwsManagedKey;
70
- /**
71
- * Type guard to check if CMK is explicitly requested.
72
- */
73
- export declare function isCMKRequested(spec: EncryptionKeySpec | undefined): spec is CustomerManagedKeyMarker;
74
- /**
75
- * Convenience constant for specifying AWS managed encryption (the default).
76
- * @example
77
- * encryption: { storageKey: AWS_MANAGED }
78
- */
79
- export declare const AWS_MANAGED: AwsManagedKey;
80
- /**
81
- * Convenience constant for explicitly requesting CMK.
82
- * @example
83
- * encryption: { storageKey: USE_CMK }
84
- */
85
- export declare const USE_CMK: CustomerManagedKeyMarker;
86
- /**
87
- * **DESTRUCTIVE**: Changing `storageKey` after cluster creation causes cluster REPLACEMENT.
88
- */
89
- export interface AuroraEncryptionConfig {
90
- /** DESTRUCTIVE: Changing after creation causes cluster replacement */
91
- storageKey?: EncryptionKeySpec;
92
- }
93
- export interface AuroraReaderConfig {
94
- scaleWithWriter?: boolean;
95
- enablePerformanceInsights?: boolean;
96
- identifierSuffix?: string;
97
- availabilityZone?: string;
98
- }
99
- export interface AuroraWriterConfig {
100
- enablePerformanceInsights?: boolean;
101
- identifierSuffix?: string;
102
- availabilityZone?: string;
103
- }
104
- export interface AuroraReadersConfig {
105
- /** Mutually exclusive with instances */
106
- count?: number;
107
- /** Mutually exclusive with count */
108
- instances?: AuroraReaderConfig[];
109
- defaultEnablePerformanceInsights?: boolean;
110
- }
111
31
  /**
112
32
  * Base props for database configuration.
113
33
  */
@@ -132,7 +52,7 @@ export interface AuroraDatabaseProps extends BaseDatabaseProps {
132
52
  monitoringInterval?: Duration;
133
53
  preferredMaintenanceWindow?: string;
134
54
  port?: number;
135
- performanceInsights?: PerformanceInsightsConfig | false;
55
+ databaseInsights?: DatabaseInsightsConfig | false;
136
56
  /** ARN or identifier of DB cluster snapshot to restore from */
137
57
  snapshotIdentifier?: string;
138
58
  /** Username from the snapshot (required when restoring from snapshot to reset password) */
@@ -172,7 +92,7 @@ export interface GlobalAuroraDatabaseProps extends BaseDatabaseProps {
172
92
  monitoringInterval?: Duration;
173
93
  preferredMaintenanceWindow?: string;
174
94
  port?: number;
175
- performanceInsights?: PerformanceInsightsConfig | false;
95
+ databaseInsights?: DatabaseInsightsConfig | false;
176
96
  /** ARN or identifier of DB cluster snapshot to restore from */
177
97
  snapshotIdentifier?: string;
178
98
  /** Username from the snapshot (required when restoring from snapshot to reset password) */
@@ -187,7 +107,7 @@ export interface InstanceDatabaseProps extends BaseDatabaseProps {
187
107
  port?: number;
188
108
  multiAz?: boolean;
189
109
  backupRetention?: number;
190
- performanceInsights?: PerformanceInsightsConfig | false;
110
+ databaseInsights?: DatabaseInsightsConfig | false;
191
111
  proxy?: ProxyConfig | false;
192
112
  readReplica?: ReadReplicaConfig | false;
193
113
  credentials?: CredentialsConfig;