cdk-nuxt 2.19.0 → 2.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -0
- package/lib/stack/waf/CloudFrontWebAcl.js +10 -1
- package/lib/stack/waf/CloudFrontWebAcl.ts +10 -0
- package/lib/stack/waf/WafConfig.d.ts +28 -0
- package/lib/stack/waf/WafConfig.js +1 -1
- package/lib/stack/waf/WafConfig.ts +29 -0
- package/lib/templates/stack-index-server.ts +37 -27
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -116,6 +116,11 @@ First-time setup (once per AWS account/region):
|
|
|
116
116
|
cdk bootstrap aws://YOUR_ACCOUNT_ID/YOUR_REGION
|
|
117
117
|
```
|
|
118
118
|
|
|
119
|
+
> When using the [WAF via CloudFrontWafStack](docs/WAF.md) and using a different region than `us-east-1`, you also need to bootstrap `us-east-1` for the WAF resources:
|
|
120
|
+
> ```bash
|
|
121
|
+
> cdk bootstrap aws://YOUR_ACCOUNT_ID/us-east-1
|
|
122
|
+
> ```
|
|
123
|
+
|
|
119
124
|
Deploy your app:
|
|
120
125
|
```bash
|
|
121
126
|
node_modules/.bin/cdk-nuxt-deploy-server
|
|
@@ -184,6 +184,15 @@ class CloudFrontWebAcl extends constructs_1.Construct {
|
|
|
184
184
|
},
|
|
185
185
|
});
|
|
186
186
|
}
|
|
187
|
+
// Custom rules (added at the end with automatically assigned priorities)
|
|
188
|
+
if (config.customRules && config.customRules.length > 0) {
|
|
189
|
+
config.customRules.forEach((customRule) => {
|
|
190
|
+
rules.push({
|
|
191
|
+
...customRule,
|
|
192
|
+
priority: priority++,
|
|
193
|
+
});
|
|
194
|
+
});
|
|
195
|
+
}
|
|
187
196
|
// Create the Web ACL
|
|
188
197
|
this.webAcl = new aws_wafv2_1.CfnWebACL(this, 'WebAcl', {
|
|
189
198
|
name: props.name,
|
|
@@ -210,4 +219,4 @@ class CloudFrontWebAcl extends constructs_1.Construct {
|
|
|
210
219
|
}
|
|
211
220
|
}
|
|
212
221
|
exports.CloudFrontWebAcl = CloudFrontWebAcl;
|
|
213
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2xvdWRGcm9udFdlYkFjbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkNsb3VkRnJvbnRXZWJBY2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkNBQXFDO0FBQ3JDLHFEQUEwRDtBQUMxRCwyQ0FBb0U7QUFpQnBFOzs7R0FHRztBQUNILE1BQWEsZ0JBQWlCLFNBQVEsc0JBQVM7SUFNM0MsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUE0QjtRQUNsRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sTUFBTSxHQUFHLEVBQUMsR0FBRyxtQ0FBdUIsRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUMsQ0FBQztRQUM3RCxNQUFNLEtBQUssR0FBNkIsRUFBRSxDQUFDO1FBQzNDLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztRQUVqQiw2REFBNkQ7UUFDN0QsSUFBSSxNQUFNLENBQUMsa0JBQWtCLElBQUksTUFBTSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNwRSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksY0FBYyxFQUFFLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQzlGLEtBQUssQ0FBQyxJQUFJLENBQUM7Z0JBQ1AsSUFBSSxFQUFFLG9CQUFvQjtnQkFDMUIsUUFBUSxFQUFFLFFBQVEsRUFBRTtnQkFDcEIsU0FBUyxFQUFFO29CQUNQLHVCQUF1QixFQUFFO3dCQUNyQixHQUFHLEVBQUUsWUFBWSxDQUFDLE9BQU87cUJBQzVCO2lCQUNKO2dCQUNELE1BQU0sRUFBRSxFQUFDLEtBQUssRUFBRSxFQUFFLEVBQUM7Z0JBQ25CLGdCQUFnQixFQUFFO29CQUNkLHNCQUFzQixFQUFFLElBQUk7b0JBQzVCLHdCQUF3QixFQUFFLElBQUk7b0JBQzlCLFVBQVUsRUFBRSxHQUFHLE1BQU0sQ0FBQyxh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QUU7Z0JBQ2Qsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIsd0JBQXdCLEVBQUUsSUFBSTtnQkFDOUIsVUFBVSxFQUFFLEdBQUcsTUFBTSxDQUFDLGFBQWEsUUFBUTthQUM5QztTQUNKLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7T0FFRztJQUNLLFdBQVcsQ0FBQyxJQUFZLEVBQUUsU0FBbUI7UUFDakQsT0FBTyxJQUFJLG9CQUFRLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRTtZQUM1QixJQUFJO1lBQ0osS0FBSyxFQUFFLFlBQVk7WUFDbkIsZ0JBQWdCLEVBQUUsTUFBTTtZQUN4QixTQUFTO1NBQ1osQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNKO0FBek5ELDRDQXlOQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29uc3RydWN0fSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7Q2ZuV2ViQUNMLCBDZm5JUFNldH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXdhZnYyJztcbmltcG9ydCB7dHlwZSBXYWZDb25maWcsIERFRkFVTFRfTlVYVF9XQUZfQ09ORklHfSBmcm9tICcuL1dhZkNvbmZpZyc7XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgQ2xvdWRGcm9udFdlYkFjbCBjb25zdHJ1Y3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2xvdWRGcm9udFdlYkFjbFByb3BzIHtcbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBwcmVmaXggZm9yIHRoZSBXZWIgQUNMIGFuZCByZWxhdGVkIHJlc291cmNlcy5cbiAgICAgKi9cbiAgICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBXQUYgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGNvbmZpZzogV2FmQ29uZmlnO1xufVxuXG4vKipcbiAqIEEgY29uc3RydWN0IHRoYXQgY3JlYXRlcyBhbiBBV1MgV0FGIFdlYiBBQ0wgZm9yIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9ucy5cbiAqIFByb3ZpZGVzIHByb3RlY3Rpb24gYWdhaW5zdCBjb21tb24gd2ViIGV4cGxvaXRzLCBib3RzLCBhbmQgRERvUyBhdHRhY2tzLlxuICovXG5leHBvcnQgY2xhc3MgQ2xvdWRGcm9udFdlYkFjbCBleHRlbmRzIENvbnN0cnVjdCB7XG4gICAgLyoqXG4gICAgICogVGhlIFdlYiBBQ0wgcmVzb3VyY2UuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHdlYkFjbDogQ2ZuV2ViQUNMO1xuXG4gICAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IENsb3VkRnJvbnRXZWJBY2xQcm9wcykge1xuICAgICAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHsuLi5ERUZBVUxUX05VWFRfV0FGX0NPTkZJRywgLi4ucHJvcHMuY29uZmlnfTtcbiAgICAgICAgY29uc3QgcnVsZXM6IENmbldlYkFDTC5SdWxlUHJvcGVydHlbXSA9IFtdO1xuICAgICAgICBsZXQgcHJpb3JpdHkgPSAwO1xuXG4gICAgICAgIC8vIElQIGFsbG93bGlzdCAoaGlnaGVzdCBwcmlvcml0eSAtIGJ5cGFzc2VzIGFsbCBvdGhlciBydWxlcylcbiAgICAgICAgaWYgKGNvbmZpZy5hbGxvd2VkSXBBZGRyZXNzZXMgJiYgY29uZmlnLmFsbG93ZWRJcEFkZHJlc3Nlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBhbGxvd2VkSXBTZXQgPSB0aGlzLmNyZWF0ZUlwU2V0KGAke3Byb3BzLm5hbWV9LWFsbG93ZWQtaXBzYCwgY29uZmlnLmFsbG93ZWRJcEFkZHJlc3Nlcyk7XG4gICAgICAgICAgICBydWxlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnQWxsb3dlZElwQWRkcmVzc2VzJyxcbiAgICAgICAgICAgICAgICBwcmlvcml0eTogcHJpb3JpdHkrKyxcbiAgICAgICAgICAgICAgICBzdGF0ZW1lbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgaXBTZXRSZWZlcmVuY2VTdGF0ZW1lbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFybjogYWxsb3dlZElwU2V0LmF0dHJBcm4sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBhY3Rpb246IHthbGxvdzoge319LFxuICAgICAgICAgICAgICAgIHZpc2liaWxpdHlDb25maWc6IHtcbiAgICAgICAgICAgICAgICAgICAgc2FtcGxlZFJlcXVlc3RzRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgY2xvdWRXYXRjaE1ldHJpY3NFbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBtZXRyaWNOYW1lOiBgJHtjb25maWcubWV0cmljc1ByZWZpeH1BbGxvd2VkSXBzYCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJUCBibG9ja2xpc3RcbiAgICAgICAgaWYgKGNvbmZpZy5ibG9ja2VkSXBBZGRyZXNzZXMgJiYgY29uZmlnLmJsb2NrZWRJcEFkZHJlc3Nlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBibG9ja2VkSXBTZXQgPSB0aGlzLmNyZWF0ZUlwU2V0KGAke3Byb3BzLm5hbWV9LWJsb2NrZWQtaXBzYCwgY29uZmlnLmJsb2NrZWRJcEFkZHJlc3Nlcyk7XG4gICAgICAgICAgICBydWxlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnQmxvY2tlZElwQWRkcmVzc2VzJyxcbiAgICAgICAgICAgICAgICBwcmlvcml0eTogcHJpb3JpdHkrKyxcbiAgICAgICAgICAgICAgICBzdGF0ZW1lbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgaXBTZXRSZWZlcmVuY2VTdGF0ZW1lbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFybjogYmxvY2tlZElwU2V0LmF0dHJBcm4sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBhY3Rpb246IHtibG9jazoge319LFxuICAgICAgICAgICAgICAgIHZpc2liaWxpdHlDb25maWc6IHtcbiAgICAgICAgICAgICAgICAgICAgc2FtcGxlZFJlcXVlc3RzRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgY2xvdWRXYXRjaE1ldHJpY3NFbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBtZXRyaWNOYW1lOiBgJHtjb25maWcubWV0cmljc1ByZWZpeH1CbG9ja2VkSXBzYCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZW8tYmxvY2tpbmdcbiAgICAgICAgaWYgKGNvbmZpZy5ibG9ja2VkQ291bnRyaWVzICYmIGNvbmZpZy5ibG9ja2VkQ291bnRyaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJ1bGVzLnB1c2goe1xuICAgICAgICAgICAgICAgIG5hbWU6ICdHZW9CbG9ja2luZycsXG4gICAgICAgICAgICAgICAgcHJpb3JpdHk6IHByaW9yaXR5KyssXG4gICAgICAgICAgICAgICAgc3RhdGVtZW50OiB7XG4gICAgICAgICAgICAgICAgICAgIGdlb01hdGNoU3RhdGVtZW50OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb3VudHJ5Q29kZXM6IGNvbmZpZy5ibG9ja2VkQ291bnRyaWVzLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYWN0aW9uOiB7YmxvY2s6IHt9fSxcbiAgICAgICAgICAgICAgICB2aXNpYmlsaXR5Q29uZmlnOiB7XG4gICAgICAgICAgICAgICAgICAgIHNhbXBsZWRSZXF1ZXN0c0VuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGNsb3VkV2F0Y2hNZXRyaWNzRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgbWV0cmljTmFtZTogYCR7Y29uZmlnLm1ldHJpY3NQcmVmaXh9R2VvQmxvY2tpbmdgLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJhdGUgbGltaXRpbmcgKEREb1MgcHJvdGVjdGlvbilcbiAgICAgICAgaWYgKGNvbmZpZy5yYXRlTGltaXQpIHtcbiAgICAgICAgICAgIHJ1bGVzLnB1c2goe1xuICAgICAgICAgICAgICAgIG5hbWU6ICdSYXRlTGltaXRpbmcnLFxuICAgICAgICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSsrLFxuICAgICAgICAgICAgICAgIHN0YXRlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICByYXRlQmFzZWRTdGF0ZW1lbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbWl0OiBjb25maWcucmF0ZUxpbWl0LFxuICAgICAgICAgICAgICAgICAgICAgICAgYWdncmVnYXRlS2V5VHlwZTogJ0lQJyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGFjdGlvbjoge2Jsb2NrOiB7fX0sXG4gICAgICAgICAgICAgICAgdmlzaWJpbGl0eUNvbmZpZzoge1xuICAgICAgICAgICAgICAgICAgICBzYW1wbGVkUmVxdWVzdHNFbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBjbG91ZFdhdGNoTWV0cmljc0VuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIG1ldHJpY05hbWU6IGAke2NvbmZpZy5tZXRyaWNzUHJlZml4fVJhdGVMaW1pdGAsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQVdTIE1hbmFnZWQgUnVsZXMgLSBDb21tb24gUnVsZSBTZXRcbiAgICAgICAgaWYgKGNvbmZpZy5lbmFibGVDb21tb25SdWxlU2V0KSB7XG4gICAgICAgICAgICBydWxlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnQVdTTWFuYWdlZFJ1bGVzQ29tbW9uUnVsZVNldCcsXG4gICAgICAgICAgICAgICAgcHJpb3JpdHk6IHByaW9yaXR5KyssXG4gICAgICAgICAgICAgICAgc3RhdGVtZW50OiB7XG4gICAgICAgICAgICAgICAgICAgIG1hbmFnZWRSdWxlR3JvdXBTdGF0ZW1lbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZlbmRvck5hbWU6ICdBV1MnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0FXU01hbmFnZWRSdWxlc0NvbW1vblJ1bGVTZXQnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb3ZlcnJpZGVBY3Rpb246IHtub25lOiB7fX0sXG4gICAgICAgICAgICAgICAgdmlzaWJpbGl0eUNvbmZpZzoge1xuICAgICAgICAgICAgICAgICAgICBzYW1wbGVkUmVxdWVzdHNFbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBjbG91ZFdhdGNoTWV0cmljc0VuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIG1ldHJpY05hbWU6IGAke2NvbmZpZy5tZXRyaWNzUHJlZml4fUNvbW1vblJ1bGVTZXRgLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFXUyBNYW5hZ2VkIFJ1bGVzIC0gS25vd24gQmFkIElucHV0c1xuICAgICAgICBpZiAoY29uZmlnLmVuYWJsZUtub3duQmFkSW5wdXRzUnVsZVNldCkge1xuICAgICAgICAgICAgcnVsZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgbmFtZTogJ0FXU01hbmFnZWRSdWxlc0tub3duQmFkSW5wdXRzUnVsZVNldCcsXG4gICAgICAgICAgICAgICAgcHJpb3JpdHk6IHByaW9yaXR5KyssXG4gICAgICAgICAgICAgICAgc3RhdGVtZW50OiB7XG4gICAgICAgICAgICAgICAgICAgIG1hbmFnZWRSdWxlR3JvdXBTdGF0ZW1lbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZlbmRvck5hbWU6ICdBV1MnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0FXU01hbmFnZWRSdWxlc0tub3duQmFkSW5wdXRzUnVsZVNldCcsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvdmVycmlkZUFjdGlvbjoge25vbmU6IHt9fSxcbiAgICAgICAgICAgICAgICB2aXNpYmlsaXR5Q29uZmlnOiB7XG4gICAgICAgICAgICAgICAgICAgIHNhbXBsZWRSZXF1ZXN0c0VuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGNsb3VkV2F0Y2hNZXRyaWNzRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgbWV0cmljTmFtZTogYCR7Y29uZmlnLm1ldHJpY3NQcmVmaXh9S25vd25CYWRJbnB1dHNgLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFXUyBNYW5hZ2VkIFJ1bGVzIC0gQW5vbnltb3VzIElQIExpc3RcbiAgICAgICAgaWYgKGNvbmZpZy5lbmFibGVBbm9ueW1vdXNJcFJ1bGVTZXQpIHtcbiAgICAgICAgICAgIHJ1bGVzLnB1c2goe1xuICAgICAgICAgICAgICAgIG5hbWU6ICdBV1NNYW5hZ2VkUnVsZXNBbm9ueW1vdXNJcExpc3QnLFxuICAgICAgICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSsrLFxuICAgICAgICAgICAgICAgIHN0YXRlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICBtYW5hZ2VkUnVsZUdyb3VwU3RhdGVtZW50OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2ZW5kb3JOYW1lOiAnQVdTJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdBV1NNYW5hZ2VkUnVsZXNBbm9ueW1vdXNJcExpc3QnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb3ZlcnJpZGVBY3Rpb246IHtub25lOiB7fX0sXG4gICAgICAgICAgICAgICAgdmlzaWJpbGl0eUNvbmZpZzoge1xuICAgICAgICAgICAgICAgICAgICBzYW1wbGVkUmVxdWVzdHNFbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBjbG91ZFdhdGNoTWV0cmljc0VuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIG1ldHJpY05hbWU6IGAke2NvbmZpZy5tZXRyaWNzUHJlZml4fUFub255bW91c0lwTGlzdGAsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQVdTIE1hbmFnZWQgUnVsZXMgLSBBbWF6b24gSVAgUmVwdXRhdGlvbiBMaXN0XG4gICAgICAgIGlmIChjb25maWcuZW5hYmxlQW1hem9uSXBSZXB1dGF0aW9uUnVsZVNldCkge1xuICAgICAgICAgICAgcnVsZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgbmFtZTogJ0FXU01hbmFnZWRSdWxlc0FtYXpvbklwUmVwdXRhdGlvbkxpc3QnLFxuICAgICAgICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSsrLFxuICAgICAgICAgICAgICAgIHN0YXRlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICBtYW5hZ2VkUnVsZUdyb3VwU3RhdGVtZW50OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2ZW5kb3JOYW1lOiAnQVdTJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdBV1NNYW5hZ2VkUnVsZXNBbWF6b25JcFJlcHV0YXRpb25MaXN0JyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG92ZXJyaWRlQWN0aW9uOiB7bm9uZToge319LFxuICAgICAgICAgICAgICAgIHZpc2liaWxpdHlDb25maWc6IHtcbiAgICAgICAgICAgICAgICAgICAgc2FtcGxlZFJlcXVlc3RzRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgY2xvdWRXYXRjaE1ldHJpY3NFbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBtZXRyaWNOYW1lOiBgJHtjb25maWcubWV0cmljc1ByZWZpeH1BbWF6b25JcFJlcHV0YXRpb25gLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFXUyBNYW5hZ2VkIFJ1bGVzIC0gQm90IENvbnRyb2xcbiAgICAgICAgaWYgKGNvbmZpZy5lbmFibGVCb3RDb250cm9sUnVsZVNldCkge1xuICAgICAgICAgICAgcnVsZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgbmFtZTogJ0FXU01hbmFnZWRSdWxlc0JvdENvbnRyb2xSdWxlU2V0JyxcbiAgICAgICAgICAgICAgICBwcmlvcml0eTogcHJpb3JpdHkrKyxcbiAgICAgICAgICAgICAgICBzdGF0ZW1lbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgbWFuYWdlZFJ1bGVHcm91cFN0YXRlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmVuZG9yTmFtZTogJ0FXUycsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnQVdTTWFuYWdlZFJ1bGVzQm90Q29udHJvbFJ1bGVTZXQnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb3ZlcnJpZGVBY3Rpb246IHtub25lOiB7fX0sXG4gICAgICAgICAgICAgICAgdmlzaWJpbGl0eUNvbmZpZzoge1xuICAgICAgICAgICAgICAgICAgICBzYW1wbGVkUmVxdWVzdHNFbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBjbG91ZFdhdGNoTWV0cmljc0VuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIG1ldHJpY05hbWU6IGAke2NvbmZpZy5tZXRyaWNzUHJlZml4fUJvdENvbnRyb2xgLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENyZWF0ZSB0aGUgV2ViIEFDTFxuICAgICAgICB0aGlzLndlYkFjbCA9IG5ldyBDZm5XZWJBQ0wodGhpcywgJ1dlYkFjbCcsIHtcbiAgICAgICAgICAgIG5hbWU6IHByb3BzLm5hbWUsXG4gICAgICAgICAgICBzY29wZTogJ0NMT1VERlJPTlQnLFxuICAgICAgICAgICAgZGVmYXVsdEFjdGlvbjoge2FsbG93OiB7fX0sXG4gICAgICAgICAgICBydWxlcyxcbiAgICAgICAgICAgIHZpc2liaWxpdHlDb25maWc6IHtcbiAgICAgICAgICAgICAgICBzYW1wbGVkUmVxdWVzdHNFbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNsb3VkV2F0Y2hNZXRyaWNzRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBtZXRyaWNOYW1lOiBgJHtjb25maWcubWV0cmljc1ByZWZpeH1XZWJBY2xgLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBJUCBzZXQgZm9yIFdBRiBydWxlcy5cbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZUlwU2V0KG5hbWU6IHN0cmluZywgYWRkcmVzc2VzOiBzdHJpbmdbXSk6IENmbklQU2V0IHtcbiAgICAgICAgcmV0dXJuIG5ldyBDZm5JUFNldCh0aGlzLCBuYW1lLCB7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgc2NvcGU6ICdDTE9VREZST05UJyxcbiAgICAgICAgICAgIGlwQWRkcmVzc1ZlcnNpb246ICdJUFY0JyxcbiAgICAgICAgICAgIGFkZHJlc3NlcyxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG4iXX0=
|
|
222
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2xvdWRGcm9udFdlYkFjbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkNsb3VkRnJvbnRXZWJBY2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkNBQXFDO0FBQ3JDLHFEQUEwRDtBQUMxRCwyQ0FBb0U7QUFpQnBFOzs7R0FHRztBQUNILE1BQWEsZ0JBQWlCLFNBQVEsc0JBQVM7SUFNM0MsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUE0QjtRQUNsRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sTUFBTSxHQUFHLEVBQUMsR0FBRyxtQ0FBdUIsRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUMsQ0FBQztRQUM3RCxNQUFNLEtBQUssR0FBNkIsRUFBRSxDQUFDO1FBQzNDLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztRQUVqQiw2REFBNkQ7UUFDN0QsSUFBSSxNQUFNLENBQUMsa0JBQWtCLElBQUksTUFBTSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNwRSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksY0FBYyxFQUFFLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQzlGLEtBQUssQ0FBQyxJQUFJLENBQUM7Z0JBQ1AsSUFBSSxFQUFFLG9CQUFvQjtnQkFDMUIsUUFBUSxFQUFFLFFBQVEsRUFBRTtnQkFDcEIsU0FBUyxFQUFFO29CQUNQLHVCQUF1QixFQUFFO3dCQUNyQixHQUFHLEVBQUUsWUFBWSxDQUFDLE9BQU87cUJBQzVCO2lCQUNKO2dCQUNELE1BQU0sRUFBRSxFQUFDLEtBQUssRUFBRSxFQUFFLEVBQUM7Z0JBQ25CLGdCQUFnQixFQUFFO29CQUNkLHNCQUFzQixFQUFFLElBQUk7b0JBQzVCLHdCQUF3QixFQUFFLElBQUk7b0JBQzlCLFVBQVUsRUFBRSxHQUFHLE1BQU0sQ0FBQyxh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LFFBQVEsRUFBRSxRQUFRLEVBQUU7aUJBQ0csQ0FBQyxDQUFDO1lBQ2pDLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztRQUVELHFCQUFxQjtRQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUkscUJBQVMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFO1lBQ3hDLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtZQUNoQixLQUFLLEVBQUUsWUFBWTtZQUNuQixhQUFhLEVBQUUsRUFBQyxLQUFLLEVBQUUsRUFBRSxFQUFDO1lBQzFCLEtBQUs7WUFDTCxnQkFBZ0IsRUFBRTtnQkFDZCxzQkFBc0IsRUFBRSxJQUFJO2dCQUM1Qix3QkFBd0IsRUFBRSxJQUFJO2dCQUM5QixVQUFVLEVBQUUsR0FBRyxNQUFNLENBQUMsYUFBYSxRQUFRO2FBQzlDO1NBQ0osQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOztPQUVHO0lBQ0ssV0FBVyxDQUFDLElBQVksRUFBRSxTQUFtQjtRQUNqRCxPQUFPLElBQUksb0JBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFO1lBQzVCLElBQUk7WUFDSixLQUFLLEVBQUUsWUFBWTtZQUNuQixnQkFBZ0IsRUFBRSxNQUFNO1lBQ3hCLFNBQVM7U0FDWixDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0o7QUFuT0QsNENBbU9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb25zdHJ1Y3R9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHtDZm5XZWJBQ0wsIENmbklQU2V0fSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtd2FmdjInO1xuaW1wb3J0IHt0eXBlIFdhZkNvbmZpZywgREVGQVVMVF9OVVhUX1dBRl9DT05GSUd9IGZyb20gJy4vV2FmQ29uZmlnJztcblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBDbG91ZEZyb250V2ViQWNsIGNvbnN0cnVjdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbG91ZEZyb250V2ViQWNsUHJvcHMge1xuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lIHByZWZpeCBmb3IgdGhlIFdlYiBBQ0wgYW5kIHJlbGF0ZWQgcmVzb3VyY2VzLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFdBRiBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG4gICAgICovXG4gICAgcmVhZG9ubHkgY29uZmlnOiBXYWZDb25maWc7XG59XG5cbi8qKlxuICogQSBjb25zdHJ1Y3QgdGhhdCBjcmVhdGVzIGFuIEFXUyBXQUYgV2ViIEFDTCBmb3IgQ2xvdWRGcm9udCBkaXN0cmlidXRpb25zLlxuICogUHJvdmlkZXMgcHJvdGVjdGlvbiBhZ2FpbnN0IGNvbW1vbiB3ZWIgZXhwbG9pdHMsIGJvdHMsIGFuZCBERG9TIGF0dGFja3MuXG4gKi9cbmV4cG9ydCBjbGFzcyBDbG91ZEZyb250V2ViQWNsIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgICAvKipcbiAgICAgKiBUaGUgV2ViIEFDTCByZXNvdXJjZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgd2ViQWNsOiBDZm5XZWJBQ0w7XG5cbiAgICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQ2xvdWRGcm9udFdlYkFjbFByb3BzKSB7XG4gICAgICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICAgICAgY29uc3QgY29uZmlnID0gey4uLkRFRkFVTFRfTlVYVF9XQUZfQ09ORklHLCAuLi5wcm9wcy5jb25maWd9O1xuICAgICAgICBjb25zdCBydWxlczogQ2ZuV2ViQUNMLlJ1bGVQcm9wZXJ0eVtdID0gW107XG4gICAgICAgIGxldCBwcmlvcml0eSA9IDA7XG5cbiAgICAgICAgLy8gSVAgYWxsb3dsaXN0IChoaWdoZXN0IHByaW9yaXR5IC0gYnlwYXNzZXMgYWxsIG90aGVyIHJ1bGVzKVxuICAgICAgICBpZiAoY29uZmlnLmFsbG93ZWRJcEFkZHJlc3NlcyAmJiBjb25maWcuYWxsb3dlZElwQWRkcmVzc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGFsbG93ZWRJcFNldCA9IHRoaXMuY3JlYXRlSXBTZXQoYCR7cHJvcHMubmFtZX0tYWxsb3dlZC1pcHNgLCBjb25maWcuYWxsb3dlZElwQWRkcmVzc2VzKTtcbiAgICAgICAgICAgIHJ1bGVzLnB1c2goe1xuICAgICAgICAgICAgICAgIG5hbWU6ICdBbGxvd2VkSXBBZGRyZXNzZXMnLFxuICAgICAgICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSsrLFxuICAgICAgICAgICAgICAgIHN0YXRlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICBpcFNldFJlZmVyZW5jZVN0YXRlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJuOiBhbGxvd2VkSXBTZXQuYXR0ckFybixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGFjdGlvbjoge2FsbG93OiB7fX0sXG4gICAgICAgICAgICAgICAgdmlzaWJpbGl0eUNvbmZpZzoge1xuICAgICAgICAgICAgICAgICAgICBzYW1wbGVkUmVxdWVzdHNFbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBjbG91ZFdhdGNoTWV0cmljc0VuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIG1ldHJpY05hbWU6IGAke2NvbmZpZy5tZXRyaWNzUHJlZml4fUFsbG93ZWRJcHNgLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElQIGJsb2NrbGlzdFxuICAgICAgICBpZiAoY29uZmlnLmJsb2NrZWRJcEFkZHJlc3NlcyAmJiBjb25maWcuYmxvY2tlZElwQWRkcmVzc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGJsb2NrZWRJcFNldCA9IHRoaXMuY3JlYXRlSXBTZXQoYCR7cHJvcHMubmFtZX0tYmxvY2tlZC1pcHNgLCBjb25maWcuYmxvY2tlZElwQWRkcmVzc2VzKTtcbiAgICAgICAgICAgIHJ1bGVzLnB1c2goe1xuICAgICAgICAgICAgICAgIG5hbWU6ICdCbG9ja2VkSXBBZGRyZXNzZXMnLFxuICAgICAgICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSsrLFxuICAgICAgICAgICAgICAgIHN0YXRlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICBpcFNldFJlZmVyZW5jZVN0YXRlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJuOiBibG9ja2VkSXBTZXQuYXR0ckFybixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGFjdGlvbjoge2Jsb2NrOiB7fX0sXG4gICAgICAgICAgICAgICAgdmlzaWJpbGl0eUNvbmZpZzoge1xuICAgICAgICAgICAgICAgICAgICBzYW1wbGVkUmVxdWVzdHNFbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBjbG91ZFdhdGNoTWV0cmljc0VuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIG1ldHJpY05hbWU6IGAke2NvbmZpZy5tZXRyaWNzUHJlZml4fUJsb2NrZWRJcHNgLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEdlby1ibG9ja2luZ1xuICAgICAgICBpZiAoY29uZmlnLmJsb2NrZWRDb3VudHJpZXMgJiYgY29uZmlnLmJsb2NrZWRDb3VudHJpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcnVsZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgbmFtZTogJ0dlb0Jsb2NraW5nJyxcbiAgICAgICAgICAgICAgICBwcmlvcml0eTogcHJpb3JpdHkrKyxcbiAgICAgICAgICAgICAgICBzdGF0ZW1lbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgZ2VvTWF0Y2hTdGF0ZW1lbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50cnlDb2RlczogY29uZmlnLmJsb2NrZWRDb3VudHJpZXMsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBhY3Rpb246IHtibG9jazoge319LFxuICAgICAgICAgICAgICAgIHZpc2liaWxpdHlDb25maWc6IHtcbiAgICAgICAgICAgICAgICAgICAgc2FtcGxlZFJlcXVlc3RzRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgY2xvdWRXYXRjaE1ldHJpY3NFbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBtZXRyaWNOYW1lOiBgJHtjb25maWcubWV0cmljc1ByZWZpeH1HZW9CbG9ja2luZ2AsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmF0ZSBsaW1pdGluZyAoRERvUyBwcm90ZWN0aW9uKVxuICAgICAgICBpZiAoY29uZmlnLnJhdGVMaW1pdCkge1xuICAgICAgICAgICAgcnVsZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1JhdGVMaW1pdGluZycsXG4gICAgICAgICAgICAgICAgcHJpb3JpdHk6IHByaW9yaXR5KyssXG4gICAgICAgICAgICAgICAgc3RhdGVtZW50OiB7XG4gICAgICAgICAgICAgICAgICAgIHJhdGVCYXNlZFN0YXRlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGltaXQ6IGNvbmZpZy5yYXRlTGltaXQsXG4gICAgICAgICAgICAgICAgICAgICAgICBhZ2dyZWdhdGVLZXlUeXBlOiAnSVAnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYWN0aW9uOiB7YmxvY2s6IHt9fSxcbiAgICAgICAgICAgICAgICB2aXNpYmlsaXR5Q29uZmlnOiB7XG4gICAgICAgICAgICAgICAgICAgIHNhbXBsZWRSZXF1ZXN0c0VuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGNsb3VkV2F0Y2hNZXRyaWNzRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgbWV0cmljTmFtZTogYCR7Y29uZmlnLm1ldHJpY3NQcmVmaXh9UmF0ZUxpbWl0YCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBV1MgTWFuYWdlZCBSdWxlcyAtIENvbW1vbiBSdWxlIFNldFxuICAgICAgICBpZiAoY29uZmlnLmVuYWJsZUNvbW1vblJ1bGVTZXQpIHtcbiAgICAgICAgICAgIHJ1bGVzLnB1c2goe1xuICAgICAgICAgICAgICAgIG5hbWU6ICdBV1NNYW5hZ2VkUnVsZXNDb21tb25SdWxlU2V0JyxcbiAgICAgICAgICAgICAgICBwcmlvcml0eTogcHJpb3JpdHkrKyxcbiAgICAgICAgICAgICAgICBzdGF0ZW1lbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgbWFuYWdlZFJ1bGVHcm91cFN0YXRlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmVuZG9yTmFtZTogJ0FXUycsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnQVdTTWFuYWdlZFJ1bGVzQ29tbW9uUnVsZVNldCcsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvdmVycmlkZUFjdGlvbjoge25vbmU6IHt9fSxcbiAgICAgICAgICAgICAgICB2aXNpYmlsaXR5Q29uZmlnOiB7XG4gICAgICAgICAgICAgICAgICAgIHNhbXBsZWRSZXF1ZXN0c0VuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGNsb3VkV2F0Y2hNZXRyaWNzRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgbWV0cmljTmFtZTogYCR7Y29uZmlnLm1ldHJpY3NQcmVmaXh9Q29tbW9uUnVsZVNldGAsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQVdTIE1hbmFnZWQgUnVsZXMgLSBLbm93biBCYWQgSW5wdXRzXG4gICAgICAgIGlmIChjb25maWcuZW5hYmxlS25vd25CYWRJbnB1dHNSdWxlU2V0KSB7XG4gICAgICAgICAgICBydWxlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnQVdTTWFuYWdlZFJ1bGVzS25vd25CYWRJbnB1dHNSdWxlU2V0JyxcbiAgICAgICAgICAgICAgICBwcmlvcml0eTogcHJpb3JpdHkrKyxcbiAgICAgICAgICAgICAgICBzdGF0ZW1lbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgbWFuYWdlZFJ1bGVHcm91cFN0YXRlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmVuZG9yTmFtZTogJ0FXUycsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnQVdTTWFuYWdlZFJ1bGVzS25vd25CYWRJbnB1dHNSdWxlU2V0JyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG92ZXJyaWRlQWN0aW9uOiB7bm9uZToge319LFxuICAgICAgICAgICAgICAgIHZpc2liaWxpdHlDb25maWc6IHtcbiAgICAgICAgICAgICAgICAgICAgc2FtcGxlZFJlcXVlc3RzRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgY2xvdWRXYXRjaE1ldHJpY3NFbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBtZXRyaWNOYW1lOiBgJHtjb25maWcubWV0cmljc1ByZWZpeH1Lbm93bkJhZElucHV0c2AsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQVdTIE1hbmFnZWQgUnVsZXMgLSBBbm9ueW1vdXMgSVAgTGlzdFxuICAgICAgICBpZiAoY29uZmlnLmVuYWJsZUFub255bW91c0lwUnVsZVNldCkge1xuICAgICAgICAgICAgcnVsZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgbmFtZTogJ0FXU01hbmFnZWRSdWxlc0Fub255bW91c0lwTGlzdCcsXG4gICAgICAgICAgICAgICAgcHJpb3JpdHk6IHByaW9yaXR5KyssXG4gICAgICAgICAgICAgICAgc3RhdGVtZW50OiB7XG4gICAgICAgICAgICAgICAgICAgIG1hbmFnZWRSdWxlR3JvdXBTdGF0ZW1lbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZlbmRvck5hbWU6ICdBV1MnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0FXU01hbmFnZWRSdWxlc0Fub255bW91c0lwTGlzdCcsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvdmVycmlkZUFjdGlvbjoge25vbmU6IHt9fSxcbiAgICAgICAgICAgICAgICB2aXNpYmlsaXR5Q29uZmlnOiB7XG4gICAgICAgICAgICAgICAgICAgIHNhbXBsZWRSZXF1ZXN0c0VuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGNsb3VkV2F0Y2hNZXRyaWNzRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgbWV0cmljTmFtZTogYCR7Y29uZmlnLm1ldHJpY3NQcmVmaXh9QW5vbnltb3VzSXBMaXN0YCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBV1MgTWFuYWdlZCBSdWxlcyAtIEFtYXpvbiBJUCBSZXB1dGF0aW9uIExpc3RcbiAgICAgICAgaWYgKGNvbmZpZy5lbmFibGVBbWF6b25JcFJlcHV0YXRpb25SdWxlU2V0KSB7XG4gICAgICAgICAgICBydWxlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnQVdTTWFuYWdlZFJ1bGVzQW1hem9uSXBSZXB1dGF0aW9uTGlzdCcsXG4gICAgICAgICAgICAgICAgcHJpb3JpdHk6IHByaW9yaXR5KyssXG4gICAgICAgICAgICAgICAgc3RhdGVtZW50OiB7XG4gICAgICAgICAgICAgICAgICAgIG1hbmFnZWRSdWxlR3JvdXBTdGF0ZW1lbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZlbmRvck5hbWU6ICdBV1MnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0FXU01hbmFnZWRSdWxlc0FtYXpvbklwUmVwdXRhdGlvbkxpc3QnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb3ZlcnJpZGVBY3Rpb246IHtub25lOiB7fX0sXG4gICAgICAgICAgICAgICAgdmlzaWJpbGl0eUNvbmZpZzoge1xuICAgICAgICAgICAgICAgICAgICBzYW1wbGVkUmVxdWVzdHNFbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBjbG91ZFdhdGNoTWV0cmljc0VuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIG1ldHJpY05hbWU6IGAke2NvbmZpZy5tZXRyaWNzUHJlZml4fUFtYXpvbklwUmVwdXRhdGlvbmAsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQVdTIE1hbmFnZWQgUnVsZXMgLSBCb3QgQ29udHJvbFxuICAgICAgICBpZiAoY29uZmlnLmVuYWJsZUJvdENvbnRyb2xSdWxlU2V0KSB7XG4gICAgICAgICAgICBydWxlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnQVdTTWFuYWdlZFJ1bGVzQm90Q29udHJvbFJ1bGVTZXQnLFxuICAgICAgICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSsrLFxuICAgICAgICAgICAgICAgIHN0YXRlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICBtYW5hZ2VkUnVsZUdyb3VwU3RhdGVtZW50OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2ZW5kb3JOYW1lOiAnQVdTJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdBV1NNYW5hZ2VkUnVsZXNCb3RDb250cm9sUnVsZVNldCcsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvdmVycmlkZUFjdGlvbjoge25vbmU6IHt9fSxcbiAgICAgICAgICAgICAgICB2aXNpYmlsaXR5Q29uZmlnOiB7XG4gICAgICAgICAgICAgICAgICAgIHNhbXBsZWRSZXF1ZXN0c0VuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGNsb3VkV2F0Y2hNZXRyaWNzRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgbWV0cmljTmFtZTogYCR7Y29uZmlnLm1ldHJpY3NQcmVmaXh9Qm90Q29udHJvbGAsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ3VzdG9tIHJ1bGVzIChhZGRlZCBhdCB0aGUgZW5kIHdpdGggYXV0b21hdGljYWxseSBhc3NpZ25lZCBwcmlvcml0aWVzKVxuICAgICAgICBpZiAoY29uZmlnLmN1c3RvbVJ1bGVzICYmIGNvbmZpZy5jdXN0b21SdWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25maWcuY3VzdG9tUnVsZXMuZm9yRWFjaCgoY3VzdG9tUnVsZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJ1bGVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAuLi5jdXN0b21SdWxlLFxuICAgICAgICAgICAgICAgICAgICBwcmlvcml0eTogcHJpb3JpdHkrKyxcbiAgICAgICAgICAgICAgICB9IGFzIENmbldlYkFDTC5SdWxlUHJvcGVydHkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDcmVhdGUgdGhlIFdlYiBBQ0xcbiAgICAgICAgdGhpcy53ZWJBY2wgPSBuZXcgQ2ZuV2ViQUNMKHRoaXMsICdXZWJBY2wnLCB7XG4gICAgICAgICAgICBuYW1lOiBwcm9wcy5uYW1lLFxuICAgICAgICAgICAgc2NvcGU6ICdDTE9VREZST05UJyxcbiAgICAgICAgICAgIGRlZmF1bHRBY3Rpb246IHthbGxvdzoge319LFxuICAgICAgICAgICAgcnVsZXMsXG4gICAgICAgICAgICB2aXNpYmlsaXR5Q29uZmlnOiB7XG4gICAgICAgICAgICAgICAgc2FtcGxlZFJlcXVlc3RzRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjbG91ZFdhdGNoTWV0cmljc0VuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgbWV0cmljTmFtZTogYCR7Y29uZmlnLm1ldHJpY3NQcmVmaXh9V2ViQWNsYCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gSVAgc2V0IGZvciBXQUYgcnVsZXMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVJcFNldChuYW1lOiBzdHJpbmcsIGFkZHJlc3Nlczogc3RyaW5nW10pOiBDZm5JUFNldCB7XG4gICAgICAgIHJldHVybiBuZXcgQ2ZuSVBTZXQodGhpcywgbmFtZSwge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIHNjb3BlOiAnQ0xPVURGUk9OVCcsXG4gICAgICAgICAgICBpcEFkZHJlc3NWZXJzaW9uOiAnSVBWNCcsXG4gICAgICAgICAgICBhZGRyZXNzZXMsXG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuIl19
|
|
@@ -213,6 +213,16 @@ export class CloudFrontWebAcl extends Construct {
|
|
|
213
213
|
});
|
|
214
214
|
}
|
|
215
215
|
|
|
216
|
+
// Custom rules (added at the end with automatically assigned priorities)
|
|
217
|
+
if (config.customRules && config.customRules.length > 0) {
|
|
218
|
+
config.customRules.forEach((customRule) => {
|
|
219
|
+
rules.push({
|
|
220
|
+
...customRule,
|
|
221
|
+
priority: priority++,
|
|
222
|
+
} as CfnWebACL.RuleProperty);
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
|
|
216
226
|
// Create the Web ACL
|
|
217
227
|
this.webAcl = new CfnWebACL(this, 'WebAcl', {
|
|
218
228
|
name: props.name,
|
|
@@ -63,6 +63,34 @@ export interface WafConfig {
|
|
|
63
63
|
* @default 'WafMetrics'
|
|
64
64
|
*/
|
|
65
65
|
readonly metricsPrefix?: string;
|
|
66
|
+
/**
|
|
67
|
+
* Custom WAF rules to add at the end of the rule set.
|
|
68
|
+
* These rules will be appended after all built-in managed rules.
|
|
69
|
+
*
|
|
70
|
+
* Note: Do not set the `priority` field - it will be automatically assigned.
|
|
71
|
+
*
|
|
72
|
+
* Example:
|
|
73
|
+
* ```typescript
|
|
74
|
+
* customRules: [{
|
|
75
|
+
* name: 'BlockSpecificUserAgent',
|
|
76
|
+
* statement: {
|
|
77
|
+
* byteMatchStatement: {
|
|
78
|
+
* searchString: 'BadBot',
|
|
79
|
+
* fieldToMatch: { singleHeader: { name: 'user-agent' } },
|
|
80
|
+
* textTransformations: [{ priority: 0, type: 'LOWERCASE' }],
|
|
81
|
+
* positionalConstraint: 'CONTAINS'
|
|
82
|
+
* }
|
|
83
|
+
* },
|
|
84
|
+
* action: { block: {} },
|
|
85
|
+
* visibilityConfig: {
|
|
86
|
+
* sampledRequestsEnabled: true,
|
|
87
|
+
* cloudWatchMetricsEnabled: true,
|
|
88
|
+
* metricName: 'BlockSpecificUserAgent'
|
|
89
|
+
* }
|
|
90
|
+
* }]
|
|
91
|
+
* ```
|
|
92
|
+
*/
|
|
93
|
+
readonly customRules?: Omit<import('aws-cdk-lib/aws-wafv2').CfnWebACL.RuleProperty, 'priority'>[];
|
|
66
94
|
}
|
|
67
95
|
/**
|
|
68
96
|
* Default configuration for WAF optimized for Nuxt applications.
|
|
@@ -13,4 +13,4 @@ exports.DEFAULT_NUXT_WAF_CONFIG = {
|
|
|
13
13
|
rateLimit: 2000,
|
|
14
14
|
metricsPrefix: 'WafMetrics',
|
|
15
15
|
};
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV2FmQ29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiV2FmQ29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTBHQTs7R0FFRztBQUNVLFFBQUEsdUJBQXVCLEdBQXVCO0lBQ3ZELG1CQUFtQixFQUFFLElBQUk7SUFDekIsMkJBQTJCLEVBQUUsSUFBSTtJQUNqQyx3QkFBd0IsRUFBRSxLQUFLO0lBQy9CLCtCQUErQixFQUFFLElBQUk7SUFDckMsdUJBQXVCLEVBQUUsS0FBSztJQUM5QixTQUFTLEVBQUUsSUFBSTtJQUNmLGFBQWEsRUFBRSxZQUFZO0NBQzlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgQVdTIFdBRiBXZWIgQUNMLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdhZkNvbmZpZyB7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIGVuYWJsZSBBV1MgbWFuYWdlZCBydWxlIGZvciBjb21tb24gZXhwbG9pdHMgKFNRTCBpbmplY3Rpb24sIFhTUywgZXRjLikuXG4gICAgICogVGhpcyBydWxlIGdyb3VwIGNvbnRhaW5zIHJ1bGVzIHRoYXQgYmxvY2sgcmVxdWVzdCBwYXR0ZXJucyBhc3NvY2lhdGVkIHdpdGggZXhwbG9pdGF0aW9uXG4gICAgICogb2YgdnVsbmVyYWJpbGl0aWVzIHNwZWNpZmljIHRvIHdlYiBhcHBsaWNhdGlvbnMuXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHJlYWRvbmx5IGVuYWJsZUNvbW1vblJ1bGVTZXQ/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBlbmFibGUgQVdTIG1hbmFnZWQgcnVsZSBmb3Iga25vd24gYmFkIGlucHV0cy5cbiAgICAgKiBUaGlzIHJ1bGUgZ3JvdXAgY29udGFpbnMgcnVsZXMgdG8gYmxvY2sgcmVxdWVzdCBwYXR0ZXJucyBrbm93biB0byBiZSBpbnZhbGlkXG4gICAgICogYW5kIGFzc29jaWF0ZWQgd2l0aCBleHBsb2l0YXRpb24gb3IgZGlzY292ZXJ5IG9mIHZ1bG5lcmFiaWxpdGllcy5cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgcmVhZG9ubHkgZW5hYmxlS25vd25CYWRJbnB1dHNSdWxlU2V0PzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gZW5hYmxlIEFXUyBtYW5hZ2VkIHJ1bGUgZm9yIGFub255bW91cyBJUCBhZGRyZXNzZXMuXG4gICAgICogVGhpcyBydWxlIGdyb3VwIGNvbnRhaW5zIHJ1bGVzIHRvIGJsb2NrIHJlcXVlc3RzIGZyb20gc2VydmljZXMgdGhhdCBhbGxvd1xuICAgICAqIG9iZnVzY2F0aW9uIG9mIHZpZXdlciBpZGVudGl0eSAoVlBOcywgcHJveGllcywgVG9yIG5vZGVzLCBob3N0aW5nIHByb3ZpZGVycykuXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICByZWFkb25seSBlbmFibGVBbm9ueW1vdXNJcFJ1bGVTZXQ/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBlbmFibGUgQVdTIG1hbmFnZWQgcnVsZSBmb3IgQW1hem9uIElQIHJlcHV0YXRpb24gbGlzdC5cbiAgICAgKiBUaGlzIHJ1bGUgZ3JvdXAgY29udGFpbnMgcnVsZXMgYmFzZWQgb24gQW1hem9uIHRocmVhdCBpbnRlbGxpZ2VuY2UuXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHJlYWRvbmx5IGVuYWJsZUFtYXpvbklwUmVwdXRhdGlvblJ1bGVTZXQ/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBlbmFibGUgQVdTIG1hbmFnZWQgcnVsZSBmb3IgYm90IGNvbnRyb2wuXG4gICAgICogVGhpcyBydWxlIGdyb3VwIHByb3ZpZGVzIHByb3RlY3Rpb24gYWdhaW5zdCBhdXRvbWF0ZWQgYm90cy5cbiAgICAgKiBOb3RlOiBUaGlzIGlzIGEgcGFpZCBmZWF0dXJlIHdpdGggYWRkaXRpb25hbCBjb3N0cy5cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHJlYWRvbmx5IGVuYWJsZUJvdENvbnRyb2xSdWxlU2V0PzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiByZXF1ZXN0cyBhbGxvd2VkIGZyb20gYSBzaW5nbGUgSVAgd2l0aGluIGEgNS1taW51dGUgcGVyaW9kXG4gICAgICogdG8gcHJvdGVjdCBhZ2FpbnN0IEREb1MgYXR0YWNrcy5cbiAgICAgKiBDYW4gYmUgZGlzYWJsZWQgYnkgc2V0dGluZyBpdCB0byBgdW5kZWZpbmVkYC5cbiAgICAgKiBAZGVmYXVsdCAyMDAwXG4gICAgICovXG4gICAgcmVhZG9ubHkgcmF0ZUxpbWl0PzogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gICAgLyoqXG4gICAgICogQXJyYXkgb2YgY291bnRyeSBjb2RlcyAoSVNPIDMxNjYtMSBhbHBoYS0yKSB0byBibG9jay5cbiAgICAgKiBFeGFtcGxlOiBbJ0NOJywgJ1JVJywgJ0tQJ11cbiAgICAgKi9cbiAgICByZWFkb25seSBibG9ja2VkQ291bnRyaWVzPzogc3RyaW5nW107XG5cbiAgICAvKipcbiAgICAgKiBDdXN0b20gSVAgYWRkcmVzc2VzIG9yIENJRFIgcmFuZ2VzIHRvIGJsb2NrLlxuICAgICAqIEV4YW1wbGU6IFsnMTkyLjAuMi4wLzI0JywgJzE5OC41MS4xMDAuNDIvMzInXVxuICAgICAqL1xuICAgIHJlYWRvbmx5IGJsb2NrZWRJcEFkZHJlc3Nlcz86IHN0cmluZ1tdO1xuXG4gICAgLyoqXG4gICAgICogQ3VzdG9tIElQIGFkZHJlc3NlcyBvciBDSURSIHJhbmdlcyB0byBhbGxvdyAoYnlwYXNzIGFsbCBydWxlcykuXG4gICAgICogRXhhbXBsZTogWycyMDMuMC4xMTMuMC8yNCddXG4gICAgICovXG4gICAgcmVhZG9ubHkgYWxsb3dlZElwQWRkcmVzc2VzPzogc3RyaW5nW107XG5cbiAgICAvKipcbiAgICAgKiBDbG91ZFdhdGNoIG1ldHJpY3MgbmFtZSBwcmVmaXggZm9yIHRoZSBXQUYuXG4gICAgICogQGRlZmF1bHQgJ1dhZk1ldHJpY3MnXG4gICAgICovXG4gICAgcmVhZG9ubHkgbWV0cmljc1ByZWZpeD86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEN1c3RvbSBXQUYgcnVsZXMgdG8gYWRkIGF0IHRoZSBlbmQgb2YgdGhlIHJ1bGUgc2V0LlxuICAgICAqIFRoZXNlIHJ1bGVzIHdpbGwgYmUgYXBwZW5kZWQgYWZ0ZXIgYWxsIGJ1aWx0LWluIG1hbmFnZWQgcnVsZXMuXG4gICAgICpcbiAgICAgKiBOb3RlOiBEbyBub3Qgc2V0IHRoZSBgcHJpb3JpdHlgIGZpZWxkIC0gaXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGFzc2lnbmVkLlxuICAgICAqXG4gICAgICogRXhhbXBsZTpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY3VzdG9tUnVsZXM6IFt7XG4gICAgICogICBuYW1lOiAnQmxvY2tTcGVjaWZpY1VzZXJBZ2VudCcsXG4gICAgICogICBzdGF0ZW1lbnQ6IHtcbiAgICAgKiAgICAgYnl0ZU1hdGNoU3RhdGVtZW50OiB7XG4gICAgICogICAgICAgc2VhcmNoU3RyaW5nOiAnQmFkQm90JyxcbiAgICAgKiAgICAgICBmaWVsZFRvTWF0Y2g6IHsgc2luZ2xlSGVhZGVyOiB7IG5hbWU6ICd1c2VyLWFnZW50JyB9IH0sXG4gICAgICogICAgICAgdGV4dFRyYW5zZm9ybWF0aW9uczogW3sgcHJpb3JpdHk6IDAsIHR5cGU6ICdMT1dFUkNBU0UnIH1dLFxuICAgICAqICAgICAgIHBvc2l0aW9uYWxDb25zdHJhaW50OiAnQ09OVEFJTlMnXG4gICAgICogICAgIH1cbiAgICAgKiAgIH0sXG4gICAgICogICBhY3Rpb246IHsgYmxvY2s6IHt9IH0sXG4gICAgICogICB2aXNpYmlsaXR5Q29uZmlnOiB7XG4gICAgICogICAgIHNhbXBsZWRSZXF1ZXN0c0VuYWJsZWQ6IHRydWUsXG4gICAgICogICAgIGNsb3VkV2F0Y2hNZXRyaWNzRW5hYmxlZDogdHJ1ZSxcbiAgICAgKiAgICAgbWV0cmljTmFtZTogJ0Jsb2NrU3BlY2lmaWNVc2VyQWdlbnQnXG4gICAgICogICB9XG4gICAgICogfV1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICByZWFkb25seSBjdXN0b21SdWxlcz86IE9taXQ8aW1wb3J0KCdhd3MtY2RrLWxpYi9hd3Mtd2FmdjInKS5DZm5XZWJBQ0wuUnVsZVByb3BlcnR5LCAncHJpb3JpdHknPltdO1xufVxuXG4vKipcbiAqIERlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgV0FGIG9wdGltaXplZCBmb3IgTnV4dCBhcHBsaWNhdGlvbnMuXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX05VWFRfV0FGX0NPTkZJRzogUGFydGlhbDxXYWZDb25maWc+ID0ge1xuICAgIGVuYWJsZUNvbW1vblJ1bGVTZXQ6IHRydWUsXG4gICAgZW5hYmxlS25vd25CYWRJbnB1dHNSdWxlU2V0OiB0cnVlLFxuICAgIGVuYWJsZUFub255bW91c0lwUnVsZVNldDogZmFsc2UsXG4gICAgZW5hYmxlQW1hem9uSXBSZXB1dGF0aW9uUnVsZVNldDogdHJ1ZSxcbiAgICBlbmFibGVCb3RDb250cm9sUnVsZVNldDogZmFsc2UsXG4gICAgcmF0ZUxpbWl0OiAyMDAwLFxuICAgIG1ldHJpY3NQcmVmaXg6ICdXYWZNZXRyaWNzJyxcbn07XG5cbiJdfQ==
|
|
@@ -73,6 +73,35 @@ export interface WafConfig {
|
|
|
73
73
|
* @default 'WafMetrics'
|
|
74
74
|
*/
|
|
75
75
|
readonly metricsPrefix?: string;
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Custom WAF rules to add at the end of the rule set.
|
|
79
|
+
* These rules will be appended after all built-in managed rules.
|
|
80
|
+
*
|
|
81
|
+
* Note: Do not set the `priority` field - it will be automatically assigned.
|
|
82
|
+
*
|
|
83
|
+
* Example:
|
|
84
|
+
* ```typescript
|
|
85
|
+
* customRules: [{
|
|
86
|
+
* name: 'BlockSpecificUserAgent',
|
|
87
|
+
* statement: {
|
|
88
|
+
* byteMatchStatement: {
|
|
89
|
+
* searchString: 'BadBot',
|
|
90
|
+
* fieldToMatch: { singleHeader: { name: 'user-agent' } },
|
|
91
|
+
* textTransformations: [{ priority: 0, type: 'LOWERCASE' }],
|
|
92
|
+
* positionalConstraint: 'CONTAINS'
|
|
93
|
+
* }
|
|
94
|
+
* },
|
|
95
|
+
* action: { block: {} },
|
|
96
|
+
* visibilityConfig: {
|
|
97
|
+
* sampledRequestsEnabled: true,
|
|
98
|
+
* cloudWatchMetricsEnabled: true,
|
|
99
|
+
* metricName: 'BlockSpecificUserAgent'
|
|
100
|
+
* }
|
|
101
|
+
* }]
|
|
102
|
+
* ```
|
|
103
|
+
*/
|
|
104
|
+
readonly customRules?: Omit<import('aws-cdk-lib/aws-wafv2').CfnWebACL.RuleProperty, 'priority'>[];
|
|
76
105
|
}
|
|
77
106
|
|
|
78
107
|
/**
|
|
@@ -1,15 +1,44 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {NuxtServerAppStack, type NuxtServerAppStackProps, App, CloudFrontWafStack} from "cdk-nuxt";
|
|
3
3
|
|
|
4
|
+
const accountId = 'XXXXXXXX';
|
|
5
|
+
const project = 'my-project';
|
|
6
|
+
const service = 'nuxt-app';
|
|
7
|
+
const environment = 'dev';
|
|
8
|
+
|
|
9
|
+
// The tags to apply to all stack resources.
|
|
10
|
+
// Modify as needed for analytics and cost allocation.
|
|
11
|
+
const tags = {
|
|
12
|
+
project: project,
|
|
13
|
+
service: service,
|
|
14
|
+
environment: environment
|
|
15
|
+
};
|
|
16
|
+
|
|
4
17
|
const app = new App();
|
|
5
18
|
|
|
19
|
+
// Optional: Create a separate WAF stack in us-east-1 (required for CloudFront WAF)
|
|
20
|
+
// Uncomment the following lines to enable WAF protection:
|
|
21
|
+
/*
|
|
22
|
+
const wafStack = new CloudFrontWafStack(app, `${project}-${service}-${environment}-waf-stack`, {
|
|
23
|
+
name: `${project}-${service}-${environment}-waf`,
|
|
24
|
+
config: {
|
|
25
|
+
// Add WAF configuration as needed
|
|
26
|
+
// See https://github.com/ferdinandfrank/cdk-nuxt/blob/main/docs/WAF.md
|
|
27
|
+
},
|
|
28
|
+
env: {
|
|
29
|
+
account: accountId
|
|
30
|
+
},
|
|
31
|
+
tags: tags
|
|
32
|
+
});
|
|
33
|
+
*/
|
|
34
|
+
|
|
6
35
|
const appStackProps: NuxtServerAppStackProps = {
|
|
7
36
|
/**
|
|
8
37
|
* The AWS environment (account/region) where this stack will be deployed.
|
|
9
38
|
*/
|
|
10
39
|
env: {
|
|
11
40
|
// The ID of your AWS account on which to deploy the stack.
|
|
12
|
-
account:
|
|
41
|
+
account: accountId,
|
|
13
42
|
|
|
14
43
|
// The AWS region where to deploy the Nuxt app.
|
|
15
44
|
region: 'eu-central-1'
|
|
@@ -19,19 +48,19 @@ const appStackProps: NuxtServerAppStackProps = {
|
|
|
19
48
|
* A string identifier for the project the Nuxt app is part of.
|
|
20
49
|
* A project might have multiple different services.
|
|
21
50
|
*/
|
|
22
|
-
project:
|
|
51
|
+
project: project,
|
|
23
52
|
|
|
24
53
|
/**
|
|
25
54
|
* A string identifier for the project's service the Nuxt app is created for.
|
|
26
55
|
* This can be seen as the name of the Nuxt app.
|
|
27
56
|
*/
|
|
28
|
-
service:
|
|
57
|
+
service: service,
|
|
29
58
|
|
|
30
59
|
/**
|
|
31
60
|
* A string to identify the environment of the Nuxt app. This enables us
|
|
32
61
|
* to deploy multiple different environments of the same Nuxt app, e.g., production and development.
|
|
33
62
|
*/
|
|
34
|
-
environment:
|
|
63
|
+
environment: environment,
|
|
35
64
|
|
|
36
65
|
/**
|
|
37
66
|
* The domain (without the protocol) at which the Nuxt app shall be publicly available.
|
|
@@ -195,34 +224,15 @@ const appStackProps: NuxtServerAppStackProps = {
|
|
|
195
224
|
/**
|
|
196
225
|
* The ARN of an existing AWS WAF Web ACL to associate with the CloudFront distribution.
|
|
197
226
|
* This should be used with a separate CloudFrontWafStack deployed in us-east-1.
|
|
198
|
-
* If you want to use a preconfigured WAF, create a separate stack as shown
|
|
227
|
+
* If you want to use a preconfigured WAF, create a separate stack as shown above and pass its ARN here.
|
|
199
228
|
*/
|
|
200
229
|
webAclArn: undefined,
|
|
230
|
+
// webAclArn: wafStack.webAclArn, // Uncomment this line if using the WAF stack created above
|
|
201
231
|
|
|
202
232
|
/**
|
|
203
233
|
* Stack tags that will be applied to all the taggable resources and the stack itself.
|
|
204
234
|
*/
|
|
205
|
-
tags:
|
|
206
|
-
service: 'nuxt-app'
|
|
207
|
-
},
|
|
235
|
+
tags: tags
|
|
208
236
|
};
|
|
209
237
|
|
|
210
|
-
|
|
211
|
-
// Uncomment the following lines to enable WAF protection:
|
|
212
|
-
/*
|
|
213
|
-
const wafStack = new CloudFrontWafStack(app, `${appStackProps.project}-${appStackProps.service}-${appStackProps.environment}-waf-stack`, {
|
|
214
|
-
name: `${appStackProps.project}-${appStackProps.service}-${appStackProps.environment}-waf`,
|
|
215
|
-
config: {
|
|
216
|
-
// Add WAF configuration as needed
|
|
217
|
-
// See https://github.com/ferdinandfrank/cdk-nuxt/blob/main/docs/WAF.md
|
|
218
|
-
},
|
|
219
|
-
env: {
|
|
220
|
-
account: appStackProps.env.account,
|
|
221
|
-
},
|
|
222
|
-
});
|
|
223
|
-
|
|
224
|
-
// Attach the WAF Web ACL ARN to the app stack
|
|
225
|
-
appStackProps.webAclArn = wafStack.webAclArn;
|
|
226
|
-
*/
|
|
227
|
-
|
|
228
|
-
new NuxtServerAppStack(app, `${appStackProps.project}-${appStackProps.service}-${appStackProps.environment}-stack`, appStackProps);
|
|
238
|
+
new NuxtServerAppStack(app, `${project}-${service}-${environment}-stack`, appStackProps);
|