cdk-simplewebsite-deploy 2.1.10 → 2.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +5144 -264
- package/.tool-versions +3 -0
- package/API.md +34 -4
- package/README.md +114 -96
- package/lib/cdk-simplewebsite-deploy.d.ts +13 -0
- package/lib/cdk-simplewebsite-deploy.js +10 -4
- package/package.json +15 -13
package/.tool-versions
CHANGED
package/API.md
CHANGED
|
@@ -47,7 +47,7 @@ new CreateBasicSite(scope: Construct, id: string, props: BasicSiteConfiguration)
|
|
|
47
47
|
|
|
48
48
|
---
|
|
49
49
|
|
|
50
|
-
#####
|
|
50
|
+
##### ~~`toString`~~ <a name="toString" id="cdk-simplewebsite-deploy.CreateBasicSite.toString"></a>
|
|
51
51
|
|
|
52
52
|
```typescript
|
|
53
53
|
public toString(): string
|
|
@@ -55,7 +55,7 @@ public toString(): string
|
|
|
55
55
|
|
|
56
56
|
Returns a string representation of this construct.
|
|
57
57
|
|
|
58
|
-
#####
|
|
58
|
+
##### ~~`with`~~ <a name="with" id="cdk-simplewebsite-deploy.CreateBasicSite.with"></a>
|
|
59
59
|
|
|
60
60
|
```typescript
|
|
61
61
|
public with(mixins: ...IMixin[]): IConstruct
|
|
@@ -84,7 +84,7 @@ The mixins to apply.
|
|
|
84
84
|
|
|
85
85
|
---
|
|
86
86
|
|
|
87
|
-
#####
|
|
87
|
+
##### ~~`isConstruct`~~ <a name="isConstruct" id="cdk-simplewebsite-deploy.CreateBasicSite.isConstruct"></a>
|
|
88
88
|
|
|
89
89
|
```typescript
|
|
90
90
|
import { CreateBasicSite } from 'cdk-simplewebsite-deploy'
|
|
@@ -124,7 +124,9 @@ Any object.
|
|
|
124
124
|
|
|
125
125
|
---
|
|
126
126
|
|
|
127
|
-
#####
|
|
127
|
+
##### ~~`node`~~<sup>Required</sup> <a name="node" id="cdk-simplewebsite-deploy.CreateBasicSite.property.node"></a>
|
|
128
|
+
|
|
129
|
+
- *Deprecated:* Use CreateCloudfrontSite instead. CreateBasicSite configures a public S3 website endpoint.
|
|
128
130
|
|
|
129
131
|
```typescript
|
|
130
132
|
public readonly node: Node;
|
|
@@ -368,7 +370,9 @@ const cloudfrontSiteConfiguration: CloudfrontSiteConfiguration = { ... }
|
|
|
368
370
|
| <code><a href="#cdk-simplewebsite-deploy.CloudfrontSiteConfiguration.property.enableLogging">enableLogging</a></code> | <code>boolean</code> | Enable CloudFront access logging. |
|
|
369
371
|
| <code><a href="#cdk-simplewebsite-deploy.CloudfrontSiteConfiguration.property.enableSecurityHeaders">enableSecurityHeaders</a></code> | <code>boolean</code> | Enable response headers policy for security headers. |
|
|
370
372
|
| <code><a href="#cdk-simplewebsite-deploy.CloudfrontSiteConfiguration.property.errorDoc">errorDoc</a></code> | <code>string</code> | The error document of the website. |
|
|
373
|
+
| <code><a href="#cdk-simplewebsite-deploy.CloudfrontSiteConfiguration.property.functionAssociations">functionAssociations</a></code> | <code>aws-cdk-lib.aws_cloudfront.FunctionAssociation[]</code> | CloudFront Functions to associate with the default behavior. |
|
|
371
374
|
| <code><a href="#cdk-simplewebsite-deploy.CloudfrontSiteConfiguration.property.logsBucket">logsBucket</a></code> | <code>aws-cdk-lib.aws_s3.IBucket</code> | S3 bucket for CloudFront access logs. |
|
|
375
|
+
| <code><a href="#cdk-simplewebsite-deploy.CloudfrontSiteConfiguration.property.originAccessLevels">originAccessLevels</a></code> | <code>aws-cdk-lib.aws_cloudfront.AccessLevel[]</code> | Additional permissions granted to the CloudFront Origin Access Control for the website bucket. |
|
|
372
376
|
| <code><a href="#cdk-simplewebsite-deploy.CloudfrontSiteConfiguration.property.priceClass">priceClass</a></code> | <code>aws-cdk-lib.aws_cloudfront.PriceClass</code> | The price class determines how many edge locations CloudFront will use for your distribution. |
|
|
373
377
|
| <code><a href="#cdk-simplewebsite-deploy.CloudfrontSiteConfiguration.property.subDomain">subDomain</a></code> | <code>string</code> | The subdomain name you want to deploy. |
|
|
374
378
|
| <code><a href="#cdk-simplewebsite-deploy.CloudfrontSiteConfiguration.property.webAclId">webAclId</a></code> | <code>string</code> | Optional WAF Web ACL ARN for enhanced security. |
|
|
@@ -506,6 +510,19 @@ The error document of the website.
|
|
|
506
510
|
|
|
507
511
|
---
|
|
508
512
|
|
|
513
|
+
##### `functionAssociations`<sup>Optional</sup> <a name="functionAssociations" id="cdk-simplewebsite-deploy.CloudfrontSiteConfiguration.property.functionAssociations"></a>
|
|
514
|
+
|
|
515
|
+
```typescript
|
|
516
|
+
public readonly functionAssociations: FunctionAssociation[];
|
|
517
|
+
```
|
|
518
|
+
|
|
519
|
+
- *Type:* aws-cdk-lib.aws_cloudfront.FunctionAssociation[]
|
|
520
|
+
- *Default:* No CloudFront Function associations.
|
|
521
|
+
|
|
522
|
+
CloudFront Functions to associate with the default behavior.
|
|
523
|
+
|
|
524
|
+
---
|
|
525
|
+
|
|
509
526
|
##### `logsBucket`<sup>Optional</sup> <a name="logsBucket" id="cdk-simplewebsite-deploy.CloudfrontSiteConfiguration.property.logsBucket"></a>
|
|
510
527
|
|
|
511
528
|
```typescript
|
|
@@ -521,6 +538,19 @@ If not provided and logging is enabled, a new bucket will be created.
|
|
|
521
538
|
|
|
522
539
|
---
|
|
523
540
|
|
|
541
|
+
##### `originAccessLevels`<sup>Optional</sup> <a name="originAccessLevels" id="cdk-simplewebsite-deploy.CloudfrontSiteConfiguration.property.originAccessLevels"></a>
|
|
542
|
+
|
|
543
|
+
```typescript
|
|
544
|
+
public readonly originAccessLevels: AccessLevel[];
|
|
545
|
+
```
|
|
546
|
+
|
|
547
|
+
- *Type:* aws-cdk-lib.aws_cloudfront.AccessLevel[]
|
|
548
|
+
- *Default:* [cloudfront.AccessLevel.READ]
|
|
549
|
+
|
|
550
|
+
Additional permissions granted to the CloudFront Origin Access Control for the website bucket.
|
|
551
|
+
|
|
552
|
+
---
|
|
553
|
+
|
|
524
554
|
##### `priceClass`<sup>Optional</sup> <a name="priceClass" id="cdk-simplewebsite-deploy.CloudfrontSiteConfiguration.property.priceClass"></a>
|
|
525
555
|
|
|
526
556
|
```typescript
|
package/README.md
CHANGED
|
@@ -3,57 +3,34 @@
|
|
|
3
3
|

|
|
4
4
|
|
|
5
5
|
# cdk-simplewebsite-deploy
|
|
6
|
-
This is an AWS CDK
|
|
6
|
+
This is an AWS CDK v2 construct library for deploying a single-page website with S3, CloudFront, Route 53, and ACM. `CreateCloudfrontSite` is the recommended construct because it uses a private S3 origin with CloudFront Origin Access Control (OAC), while `CreateBasicSite` is deprecated because it creates a public S3 website endpoint.
|
|
7
7
|
|
|
8
8
|
## Installation and Usage
|
|
9
9
|
|
|
10
|
-
### [
|
|
11
|
-
#### Creates a
|
|
10
|
+
### [CreateCloudfrontSite](https://github.com/snappetal/cdk-simplewebsite-deploy/blob/main/API.md#cdk-cloudfront-deploy-createcloudfrontsite)
|
|
11
|
+
#### Creates a website using a private S3 bucket, a CloudFront distribution, and DNS records in Route 53.
|
|
12
12
|
##### Typescript
|
|
13
13
|
```console
|
|
14
14
|
yarn add cdk-simplewebsite-deploy
|
|
15
15
|
```
|
|
16
16
|
```typescript
|
|
17
17
|
import * as cdk from 'aws-cdk-lib';
|
|
18
|
-
import {
|
|
18
|
+
import { CreateCloudfrontSite } from 'cdk-simplewebsite-deploy';
|
|
19
19
|
import { Construct } from 'constructs';
|
|
20
20
|
|
|
21
21
|
export class PipelineStack extends cdk.Stack {
|
|
22
22
|
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
|
|
23
23
|
super(scope, id, props);
|
|
24
24
|
|
|
25
|
-
new
|
|
26
|
-
websiteFolder: './src/
|
|
25
|
+
new CreateCloudfrontSite(this, 'test-website', {
|
|
26
|
+
websiteFolder: './src/dist',
|
|
27
27
|
indexDoc: 'index.html',
|
|
28
28
|
hostedZone: 'example.com',
|
|
29
|
+
subDomain: 'www.example.com',
|
|
29
30
|
});
|
|
30
31
|
}
|
|
31
32
|
}
|
|
32
33
|
```
|
|
33
|
-
##### C#
|
|
34
|
-
```console
|
|
35
|
-
dotnet add package ThonBecker.CDK.SimpleWebsiteDeploy
|
|
36
|
-
```
|
|
37
|
-
```cs
|
|
38
|
-
using Amazon.CDK;
|
|
39
|
-
using ThonBecker.CDK.SimpleWebsiteDeploy;
|
|
40
|
-
|
|
41
|
-
namespace SimpleWebsiteDeploy
|
|
42
|
-
{
|
|
43
|
-
public class PipelineStack : Stack
|
|
44
|
-
{
|
|
45
|
-
internal PipelineStack(Construct scope, string id, IStackProps props = null) : base(scope, id, props)
|
|
46
|
-
{
|
|
47
|
-
new CreateBasicSite(scope, "test-website", new BasicSiteConfiguration()
|
|
48
|
-
{
|
|
49
|
-
WebsiteFolder = "./src/build",
|
|
50
|
-
IndexDoc = "index.html",
|
|
51
|
-
HostedZone = "example.com",
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
```
|
|
57
34
|
##### Java
|
|
58
35
|
```xml
|
|
59
36
|
<dependency>
|
|
@@ -65,10 +42,10 @@ namespace SimpleWebsiteDeploy
|
|
|
65
42
|
```java
|
|
66
43
|
package com.myorg;
|
|
67
44
|
|
|
68
|
-
import
|
|
69
|
-
import software.amazon.awscdk.
|
|
70
|
-
import software.amazon.awscdk.
|
|
71
|
-
import
|
|
45
|
+
import com.thonbecker.simplewebsitedeploy.CreateCloudfrontSite;
|
|
46
|
+
import software.amazon.awscdk.Stack;
|
|
47
|
+
import software.amazon.awscdk.StackProps;
|
|
48
|
+
import software.constructs.Construct;
|
|
72
49
|
|
|
73
50
|
public class MyProjectStack extends Stack {
|
|
74
51
|
public MyProjectStack(final Construct scope, final String id) {
|
|
@@ -77,11 +54,13 @@ public class MyProjectStack extends Stack {
|
|
|
77
54
|
|
|
78
55
|
public MyProjectStack(final Construct scope, final String id, final StackProps props) {
|
|
79
56
|
super(scope, id, props);
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
57
|
+
|
|
58
|
+
CreateCloudfrontSite.Builder.create(this, "test-website")
|
|
59
|
+
.websiteFolder("./src/build")
|
|
60
|
+
.indexDoc("index.html")
|
|
61
|
+
.hostedZone("example.com")
|
|
62
|
+
.subDomain("www.example.com")
|
|
63
|
+
.build();
|
|
85
64
|
}
|
|
86
65
|
}
|
|
87
66
|
```
|
|
@@ -91,67 +70,45 @@ pip install cdk-simplewebsite-deploy
|
|
|
91
70
|
```
|
|
92
71
|
```python
|
|
93
72
|
from aws_cdk import Stack
|
|
94
|
-
from cdk_simplewebsite_deploy import
|
|
73
|
+
from cdk_simplewebsite_deploy import CreateCloudfrontSite
|
|
95
74
|
from constructs import Construct
|
|
96
75
|
|
|
76
|
+
|
|
97
77
|
class MyProjectStack(Stack):
|
|
98
78
|
|
|
99
79
|
def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
|
|
100
80
|
super().__init__(scope, construct_id, **kwargs)
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
81
|
+
|
|
82
|
+
CreateCloudfrontSite(self, 'test-website', website_folder='./src/build',
|
|
83
|
+
index_doc='index.html',
|
|
84
|
+
hosted_zone='example.com',
|
|
85
|
+
sub_domain='www.example.com')
|
|
105
86
|
```
|
|
106
|
-
|
|
107
|
-
|
|
87
|
+
|
|
88
|
+
### [CreateBasicSite](https://github.com/snappetal/cdk-simplewebsite-deploy/blob/main/API.md#cdk-cloudfront-deploy-createbasicsite)
|
|
89
|
+
#### Deprecated. Creates a website using public S3 website endpoints with a domain hosted in Route 53.
|
|
90
|
+
Use `CreateCloudfrontSite` for new sites. `CreateBasicSite` configures public bucket access so Route 53 can alias directly to the S3 website endpoint.
|
|
108
91
|
##### Typescript
|
|
109
92
|
```console
|
|
110
93
|
yarn add cdk-simplewebsite-deploy
|
|
111
94
|
```
|
|
112
95
|
```typescript
|
|
113
96
|
import * as cdk from 'aws-cdk-lib';
|
|
114
|
-
import {
|
|
97
|
+
import { CreateBasicSite } from 'cdk-simplewebsite-deploy';
|
|
115
98
|
import { Construct } from 'constructs';
|
|
116
99
|
|
|
117
100
|
export class PipelineStack extends cdk.Stack {
|
|
118
101
|
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
|
|
119
102
|
super(scope, id, props);
|
|
120
103
|
|
|
121
|
-
new
|
|
122
|
-
websiteFolder: './src/
|
|
104
|
+
new CreateBasicSite(this, 'test-website', {
|
|
105
|
+
websiteFolder: './src/build',
|
|
123
106
|
indexDoc: 'index.html',
|
|
124
107
|
hostedZone: 'example.com',
|
|
125
|
-
subDomain: 'www.example.com',
|
|
126
108
|
});
|
|
127
109
|
}
|
|
128
110
|
}
|
|
129
111
|
```
|
|
130
|
-
##### C#
|
|
131
|
-
```console
|
|
132
|
-
dotnet add package ThonBecker.CDK.SimpleWebsiteDeploy
|
|
133
|
-
```
|
|
134
|
-
```cs
|
|
135
|
-
using Amazon.CDK;
|
|
136
|
-
using ThonBecker.CDK.SimpleWebsiteDeploy;
|
|
137
|
-
|
|
138
|
-
namespace SimpleWebsiteDeploy
|
|
139
|
-
{
|
|
140
|
-
public class PipelineStack : Stack
|
|
141
|
-
{
|
|
142
|
-
internal PipelineStack(Construct scope, string id, IStackProps props = null) : base(scope, id, props)
|
|
143
|
-
{
|
|
144
|
-
new CreateCloudfrontSite(scope, "test-website", new CloudfrontSiteConfiguration()
|
|
145
|
-
{
|
|
146
|
-
WebsiteFolder = "./src/build",
|
|
147
|
-
IndexDoc = "index.html",
|
|
148
|
-
HostedZone = "example.com",
|
|
149
|
-
SubDomain = "www.example.com",
|
|
150
|
-
});
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
```
|
|
155
112
|
##### Java
|
|
156
113
|
```xml
|
|
157
114
|
<dependency>
|
|
@@ -163,10 +120,10 @@ namespace SimpleWebsiteDeploy
|
|
|
163
120
|
```java
|
|
164
121
|
package com.myorg;
|
|
165
122
|
|
|
166
|
-
import
|
|
167
|
-
import software.amazon.awscdk.
|
|
168
|
-
import software.amazon.awscdk.
|
|
169
|
-
import
|
|
123
|
+
import com.thonbecker.simplewebsitedeploy.CreateBasicSite;
|
|
124
|
+
import software.amazon.awscdk.Stack;
|
|
125
|
+
import software.amazon.awscdk.StackProps;
|
|
126
|
+
import software.constructs.Construct;
|
|
170
127
|
|
|
171
128
|
public class MyProjectStack extends Stack {
|
|
172
129
|
public MyProjectStack(final Construct scope, final String id) {
|
|
@@ -175,12 +132,12 @@ public class MyProjectStack extends Stack {
|
|
|
175
132
|
|
|
176
133
|
public MyProjectStack(final Construct scope, final String id, final StackProps props) {
|
|
177
134
|
super(scope, id, props);
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
135
|
+
|
|
136
|
+
CreateBasicSite.Builder.create(this, "test-website")
|
|
137
|
+
.websiteFolder("./src/build")
|
|
138
|
+
.indexDoc("index.html")
|
|
139
|
+
.hostedZone("example.com")
|
|
140
|
+
.build();
|
|
184
141
|
}
|
|
185
142
|
}
|
|
186
143
|
```
|
|
@@ -189,24 +146,23 @@ public class MyProjectStack extends Stack {
|
|
|
189
146
|
pip install cdk-simplewebsite-deploy
|
|
190
147
|
```
|
|
191
148
|
```python
|
|
192
|
-
from aws_cdk import
|
|
193
|
-
from cdk_simplewebsite_deploy import
|
|
194
|
-
|
|
149
|
+
from aws_cdk import Stack
|
|
150
|
+
from cdk_simplewebsite_deploy import CreateBasicSite
|
|
151
|
+
from constructs import Construct
|
|
195
152
|
|
|
196
|
-
class MyProjectStack(
|
|
153
|
+
class MyProjectStack(Stack):
|
|
197
154
|
|
|
198
|
-
def __init__(self, scope:
|
|
155
|
+
def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
|
|
199
156
|
super().__init__(scope, construct_id, **kwargs)
|
|
200
157
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
sub_domain='www.example.com')
|
|
158
|
+
CreateBasicSite(self, 'test-website', website_folder='./src/build',
|
|
159
|
+
index_doc='index.html',
|
|
160
|
+
hosted_zone='example.com')
|
|
205
161
|
```
|
|
206
162
|
|
|
207
163
|
## 🚀 Enhanced Features
|
|
208
164
|
|
|
209
|
-
The `CreateCloudfrontSite` construct
|
|
165
|
+
The `CreateCloudfrontSite` construct includes optional advanced features for security, performance, and monitoring.
|
|
210
166
|
|
|
211
167
|
### Security Headers
|
|
212
168
|
Enable comprehensive security headers including HSTS, X-Frame-Options, Content-Type-Options, and XSS protection:
|
|
@@ -257,6 +213,48 @@ new CreateCloudfrontSite(this, 'waf-protected-website', {
|
|
|
257
213
|
});
|
|
258
214
|
```
|
|
259
215
|
|
|
216
|
+
### Origin Access Levels
|
|
217
|
+
Grant additional OAC permissions to the website bucket. This can be useful when you need CloudFront to distinguish missing objects from access-denied responses.
|
|
218
|
+
|
|
219
|
+
```typescript
|
|
220
|
+
import * as cloudfront from 'aws-cdk-lib/aws-cloudfront';
|
|
221
|
+
|
|
222
|
+
new CreateCloudfrontSite(this, 'website-with-list-access', {
|
|
223
|
+
websiteFolder: './src/dist',
|
|
224
|
+
indexDoc: 'index.html',
|
|
225
|
+
hostedZone: 'example.com',
|
|
226
|
+
originAccessLevels: [
|
|
227
|
+
cloudfront.AccessLevel.READ,
|
|
228
|
+
cloudfront.AccessLevel.LIST,
|
|
229
|
+
],
|
|
230
|
+
});
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
### CloudFront Function Associations
|
|
234
|
+
Attach CloudFront Functions to the default behavior for lightweight viewer request or viewer response logic.
|
|
235
|
+
|
|
236
|
+
```typescript
|
|
237
|
+
import * as cloudfront from 'aws-cdk-lib/aws-cloudfront';
|
|
238
|
+
|
|
239
|
+
const rewriteFunction = new cloudfront.Function(this, 'RewriteFunction', {
|
|
240
|
+
code: cloudfront.FunctionCode.fromInline(
|
|
241
|
+
'function handler(event) { return event.request; }',
|
|
242
|
+
),
|
|
243
|
+
});
|
|
244
|
+
|
|
245
|
+
new CreateCloudfrontSite(this, 'website-with-function', {
|
|
246
|
+
websiteFolder: './src/dist',
|
|
247
|
+
indexDoc: 'index.html',
|
|
248
|
+
hostedZone: 'example.com',
|
|
249
|
+
functionAssociations: [
|
|
250
|
+
{
|
|
251
|
+
eventType: cloudfront.FunctionEventType.VIEWER_REQUEST,
|
|
252
|
+
function: rewriteFunction,
|
|
253
|
+
},
|
|
254
|
+
],
|
|
255
|
+
});
|
|
256
|
+
```
|
|
257
|
+
|
|
260
258
|
### Custom Cache Behaviors
|
|
261
259
|
Add custom cache behaviors for different content types:
|
|
262
260
|
|
|
@@ -314,6 +312,12 @@ export class AdvancedWebsiteStack extends cdk.Stack {
|
|
|
314
312
|
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
|
|
315
313
|
super(scope, id, props);
|
|
316
314
|
|
|
315
|
+
const rewriteFunction = new cloudfront.Function(this, 'RewriteFunction', {
|
|
316
|
+
code: cloudfront.FunctionCode.fromInline(
|
|
317
|
+
'function handler(event) { return event.request; }',
|
|
318
|
+
),
|
|
319
|
+
});
|
|
320
|
+
|
|
317
321
|
new CreateCloudfrontSite(this, 'advanced-website', {
|
|
318
322
|
websiteFolder: './dist',
|
|
319
323
|
indexDoc: 'index.html',
|
|
@@ -325,6 +329,10 @@ export class AdvancedWebsiteStack extends cdk.Stack {
|
|
|
325
329
|
priceClass: cloudfront.PriceClass.PRICE_CLASS_ALL,
|
|
326
330
|
enableSecurityHeaders: true,
|
|
327
331
|
enableIpv6: true,
|
|
332
|
+
originAccessLevels: [
|
|
333
|
+
cloudfront.AccessLevel.READ,
|
|
334
|
+
cloudfront.AccessLevel.LIST,
|
|
335
|
+
],
|
|
328
336
|
|
|
329
337
|
// Monitoring & Protection
|
|
330
338
|
enableLogging: true,
|
|
@@ -337,6 +345,14 @@ export class AdvancedWebsiteStack extends cdk.Stack {
|
|
|
337
345
|
cachePolicy: cloudfront.CachePolicy.CACHING_DISABLED,
|
|
338
346
|
},
|
|
339
347
|
},
|
|
348
|
+
|
|
349
|
+
// Edge Logic
|
|
350
|
+
functionAssociations: [
|
|
351
|
+
{
|
|
352
|
+
eventType: cloudfront.FunctionEventType.VIEWER_REQUEST,
|
|
353
|
+
function: rewriteFunction,
|
|
354
|
+
},
|
|
355
|
+
],
|
|
340
356
|
|
|
341
357
|
// SPA Error Handling
|
|
342
358
|
customErrorResponses: [
|
|
@@ -357,12 +373,14 @@ export class AdvancedWebsiteStack extends cdk.Stack {
|
|
|
357
373
|
- **Security Headers**: Automatic HSTS, X-Frame-Options, Content-Type-Options, and XSS protection
|
|
358
374
|
- **WAF Integration**: Support for AWS WAF Web ACLs for advanced threat protection
|
|
359
375
|
- **Origin Access Control**: Modern S3 bucket protection (replaces deprecated OAI)
|
|
376
|
+
- **Configurable OAC Permissions**: Optional origin access levels for the website bucket
|
|
360
377
|
|
|
361
378
|
### ⚡ **Optimized Performance**
|
|
362
379
|
- **Smart Caching**: Optimized cache policies for better performance
|
|
363
380
|
- **HTTP/2 & HTTP/3**: Latest protocol support for faster loading
|
|
364
381
|
- **Global Edge Locations**: Configurable price classes for worldwide distribution
|
|
365
382
|
- **IPv6 Support**: Dual-stack networking for better connectivity
|
|
383
|
+
- **CloudFront Functions**: Optional viewer request and response function associations
|
|
366
384
|
|
|
367
385
|
### 📊 **Comprehensive Monitoring**
|
|
368
386
|
- **Access Logging**: CloudFront access logs for analytics
|
|
@@ -373,7 +391,7 @@ export class AdvancedWebsiteStack extends cdk.Stack {
|
|
|
373
391
|
- **Backward Compatible**: All existing configurations continue to work
|
|
374
392
|
- **Type Safe**: Full TypeScript support with comprehensive interfaces
|
|
375
393
|
- **CDK v2 Ready**: Built for the latest AWS CDK version
|
|
376
|
-
- **Multi-Language**: Support for TypeScript, Python,
|
|
394
|
+
- **Multi-Language**: Support for TypeScript, Python, and Java
|
|
377
395
|
|
|
378
396
|
## License
|
|
379
397
|
|
|
@@ -65,6 +65,16 @@ export interface CloudfrontSiteConfiguration {
|
|
|
65
65
|
* @default - No additional cache behaviors.
|
|
66
66
|
*/
|
|
67
67
|
readonly additionalBehaviors?: Record<string, cloudfront.BehaviorOptions>;
|
|
68
|
+
/**
|
|
69
|
+
* Additional permissions granted to the CloudFront Origin Access Control for the website bucket.
|
|
70
|
+
* @default [cloudfront.AccessLevel.READ]
|
|
71
|
+
*/
|
|
72
|
+
readonly originAccessLevels?: cloudfront.AccessLevel[];
|
|
73
|
+
/**
|
|
74
|
+
* CloudFront Functions to associate with the default behavior.
|
|
75
|
+
* @default - No CloudFront Function associations.
|
|
76
|
+
*/
|
|
77
|
+
readonly functionAssociations?: cloudfront.FunctionAssociation[];
|
|
68
78
|
/**
|
|
69
79
|
* Enable response headers policy for security headers.
|
|
70
80
|
* @default false - No security headers policy applied.
|
|
@@ -96,6 +106,9 @@ export interface CloudfrontSiteConfiguration {
|
|
|
96
106
|
*/
|
|
97
107
|
readonly webAclId?: string;
|
|
98
108
|
}
|
|
109
|
+
/**
|
|
110
|
+
* @deprecated Use CreateCloudfrontSite instead. CreateBasicSite configures a public S3 website endpoint.
|
|
111
|
+
*/
|
|
99
112
|
export declare class CreateBasicSite extends Construct {
|
|
100
113
|
constructor(scope: Construct, id: string, props: BasicSiteConfiguration);
|
|
101
114
|
}
|
|
@@ -12,6 +12,9 @@ const targets = require("aws-cdk-lib/aws-route53-targets");
|
|
|
12
12
|
const s3 = require("aws-cdk-lib/aws-s3");
|
|
13
13
|
const s3deploy = require("aws-cdk-lib/aws-s3-deployment");
|
|
14
14
|
const constructs_1 = require("constructs");
|
|
15
|
+
/**
|
|
16
|
+
* @deprecated Use CreateCloudfrontSite instead. CreateBasicSite configures a public S3 website endpoint.
|
|
17
|
+
*/
|
|
15
18
|
class CreateBasicSite extends constructs_1.Construct {
|
|
16
19
|
constructor(scope, id, props) {
|
|
17
20
|
super(scope, id);
|
|
@@ -60,7 +63,7 @@ class CreateBasicSite extends constructs_1.Construct {
|
|
|
60
63
|
}
|
|
61
64
|
exports.CreateBasicSite = CreateBasicSite;
|
|
62
65
|
_a = JSII_RTTI_SYMBOL_1;
|
|
63
|
-
CreateBasicSite[_a] = { fqn: "cdk-simplewebsite-deploy.CreateBasicSite", version: "2.1
|
|
66
|
+
CreateBasicSite[_a] = { fqn: "cdk-simplewebsite-deploy.CreateBasicSite", version: "2.2.1" };
|
|
64
67
|
class CreateCloudfrontSite extends constructs_1.Construct {
|
|
65
68
|
constructor(scope, id, props) {
|
|
66
69
|
super(scope, id);
|
|
@@ -147,12 +150,15 @@ class CreateCloudfrontSite extends constructs_1.Construct {
|
|
|
147
150
|
: undefined;
|
|
148
151
|
const websiteDist = new cloudfront.Distribution(scope, 'WebsiteDist', {
|
|
149
152
|
defaultBehavior: {
|
|
150
|
-
origin: origins.S3BucketOrigin.withOriginAccessControl(websiteBucket
|
|
153
|
+
origin: origins.S3BucketOrigin.withOriginAccessControl(websiteBucket, {
|
|
154
|
+
originAccessLevels: props.originAccessLevels,
|
|
155
|
+
}),
|
|
151
156
|
allowedMethods: cloudfront.AllowedMethods.ALLOW_GET_HEAD_OPTIONS,
|
|
152
157
|
viewerProtocolPolicy: cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
|
|
153
158
|
cachePolicy: cloudfront.CachePolicy.CACHING_OPTIMIZED,
|
|
154
159
|
originRequestPolicy: cloudfront.OriginRequestPolicy.CORS_S3_ORIGIN,
|
|
155
160
|
responseHeadersPolicy,
|
|
161
|
+
functionAssociations: props.functionAssociations,
|
|
156
162
|
},
|
|
157
163
|
additionalBehaviors: props.additionalBehaviors,
|
|
158
164
|
minimumProtocolVersion: cloudfront.SecurityPolicyProtocol.TLS_V1_2_2021,
|
|
@@ -203,5 +209,5 @@ class CreateCloudfrontSite extends constructs_1.Construct {
|
|
|
203
209
|
}
|
|
204
210
|
exports.CreateCloudfrontSite = CreateCloudfrontSite;
|
|
205
211
|
_b = JSII_RTTI_SYMBOL_1;
|
|
206
|
-
CreateCloudfrontSite[_b] = { fqn: "cdk-simplewebsite-deploy.CreateCloudfrontSite", version: "2.1
|
|
207
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXNpbXBsZXdlYnNpdGUtZGVwbG95LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Nkay1zaW1wbGV3ZWJzaXRlLWRlcGxveS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQUFzRDtBQUN0RCwwREFBMEQ7QUFDMUQseURBQXlEO0FBQ3pELDhEQUE4RDtBQUM5RCxtREFBbUQ7QUFDbkQsMkRBQTJEO0FBQzNELHlDQUF5QztBQUN6QywwREFBMEQ7QUFDMUQsMkNBQXVDO0FBbUd2QyxNQUFhLGVBQWdCLFNBQVEsc0JBQVM7SUFDNUMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUE2QjtRQUNyRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQ3BELElBQUksRUFDSixtQkFBbUIsRUFDbkI7WUFDRSxVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7U0FDN0IsQ0FDRixDQUFDO1FBRUYsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQ3pDLEtBQUssRUFDTCx1QkFBdUIsRUFDdkI7WUFDRSxVQUFVLEVBQUUsT0FBTyxLQUFLLENBQUMsVUFBVSxFQUFFO1lBQ3JDLGFBQWEsRUFBRSwyQkFBYSxDQUFDLE9BQU87WUFDcEMsaUJBQWlCLEVBQUUsSUFBSTtZQUN2QixlQUFlLEVBQUU7Z0JBQ2YsUUFBUSxFQUFFLEtBQUssQ0FBQyxVQUFVO2dCQUMxQixRQUFRLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUFDLElBQUk7YUFDbkM7U0FDRixDQUNGLENBQUM7UUFFRixNQUFNLGFBQWEsR0FBRyxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLGVBQWUsRUFBRTtZQUMxRCxVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7WUFDNUIsYUFBYSxFQUFFLDJCQUFhLENBQUMsT0FBTztZQUNw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QUFVLEVBQUUsQ0FBQztnQkFDckIsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSwyQkFBMkIsRUFBRTtvQkFDekQsSUFBSSxFQUFFLGdCQUFnQjtvQkFDdEIsVUFBVSxFQUFFLEtBQUssQ0FBQyxTQUFTO29CQUMzQixNQUFNLEVBQUUsT0FBTyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQ3BDLElBQUksT0FBTyxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUMxQztpQkFDRixDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7O0FBdktILG9EQXdLQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlbW92YWxQb2xpY3ksIER1cmF0aW9uIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgYWNtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1jZXJ0aWZpY2F0ZW1hbmFnZXInO1xuaW1wb3J0ICogYXMgY2xvdWRmcm9udCBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udCc7XG5pbXBvcnQgKiBhcyBvcmlnaW5zIGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZGZyb250LW9yaWdpbnMnO1xuaW1wb3J0ICogYXMgcm91dGU1MyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtcm91dGU1Myc7XG5pbXBvcnQgKiBhcyB0YXJnZXRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1yb3V0ZTUzLXRhcmdldHMnO1xuaW1wb3J0ICogYXMgczMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCAqIGFzIHMzZGVwbG95IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMy1kZXBsb3ltZW50JztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2ljU2l0ZUNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogTG9jYWwgcGF0aCB0byB0aGUgd2Vic2l0ZSBmb2xkZXIgeW91IHdhbnQgdG8gZGVwbG95IG9uIFMzLlxuICAgKi9cbiAgcmVhZG9ubHkgd2Vic2l0ZUZvbGRlcjogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGluZGV4IGRvY3VtZW50IG9mIHRoZSB3ZWJzaXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZXhEb2M6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBlcnJvciBkb2N1bWVudCBvZiB0aGUgd2Vic2l0ZS5cbiAgICogQGRlZmF1bHQgLSBObyBlcnJvciBkb2N1bWVudC5cbiAgICovXG4gIHJlYWRvbmx5IGVycm9yRG9jPzogc3RyaW5nO1xuICAvKipcbiAgICogSG9zdGVkIFpvbmUgdXNlZCB0byBjcmVhdGUgdGhlIEROUyByZWNvcmQgZm9yIHRoZSB3ZWJzaXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgaG9zdGVkWm9uZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENsb3VkZnJvbnRTaXRlQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBMb2NhbCBwYXRoIHRvIHRoZSB3ZWJzaXRlIGZvbGRlciB5b3Ugd2FudCB0byBkZXBsb3kgb24gUzMuXG4gICAqL1xuICByZWFkb25seSB3ZWJzaXRlRm9sZGVyOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgaW5kZXggZG9jdW1lbnQgb2YgdGhlIHdlYnNpdGUuXG4gICAqL1xuICByZWFkb25seSBpbmRleERvYzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGVycm9yIGRvY3VtZW50IG9mIHRoZSB3ZWJzaXRlLlxuICAgKiBAZGVmYXVsdCAtIE5vIGVycm9yIGRvY3VtZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgZXJyb3JEb2M/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBIb3N0ZWQgWm9uZSB1c2VkIHRvIGNyZWF0ZSB0aGUgRE5TIHJlY29yZCBmb3IgdGhlIHdlYnNpdGUuXG4gICAqL1xuICByZWFkb25seSBob3N0ZWRab25lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBVc2VkIHRvIGRlcGxveSBhIENsb3VkZnJvbnQgc2l0ZSB3aXRoIGEgc2luZ2xlIGRvbWFpbi4gZS5nLiBzYW1wbGUuZXhhbXBsZS5jb21cbiAgICogSWYgeW91IGluY2x1ZGUgYSB2YWx1ZSBmb3IgYm90aCBkb21haW4gYW5kIHN1YkRvbWFpbixcbiAgICogYW4gZXJyb3Igd2lsbCBiZSB0aHJvd24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gdmFsdWVcbiAgICovXG4gIHJlYWRvbmx5IGRvbWFpbj86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBzdWJkb21haW4gbmFtZSB5b3Ugd2FudCB0byBkZXBsb3kuIGUuZy4gd3d3LmV4YW1wbGUuY29tXG4gICAqIElmIHlvdSBpbmNsdWRlIGEgdmFsdWUgZm9yIGJvdGggZG9tYWluIGFuZCBzdWJEb21haW4sXG4gICAqIGFuIGVycm9yIHdpbGwgYmUgdGhyb3duLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHZhbHVlXG4gICAqL1xuICByZWFkb25seSBzdWJEb21haW4/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgcHJpY2UgY2xhc3MgZGV0ZXJtaW5lcyBob3cgbWFueSBlZGdlIGxvY2F0aW9ucyBDbG91ZEZyb250IHdpbGwgdXNlIGZvciB5b3VyIGRpc3RyaWJ1dGlvbi5cbiAgICogQGRlZmF1bHQgUHJpY2VDbGFzcy5QUklDRV9DTEFTU18xMDAuXG4gICAqIEBzZWUgaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9jbG91ZGZyb250L3ByaWNpbmcvLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJpY2VDbGFzcz86IGNsb3VkZnJvbnQuUHJpY2VDbGFzcztcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGNhY2hlIGJlaGF2aW9ycyBmb3IgZGlmZmVyZW50IHBhdGggcGF0dGVybnMuXG4gICAqIEBkZWZhdWx0IC0gTm8gYWRkaXRpb25hbCBjYWNoZSBiZWhhdmlvcnMuXG4gICAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsQmVoYXZpb3JzPzogUmVjb3JkPHN0cmluZywgY2xvdWRmcm9udC5CZWhhdmlvck9wdGlvbnM+O1xuICAvKipcbiAgICogRW5hYmxlIHJlc3BvbnNlIGhlYWRlcnMgcG9saWN5IGZvciBzZWN1cml0eSBoZWFkZXJzLlxuICAgKiBAZGVmYXVsdCBmYWxzZSAtIE5vIHNlY3VyaXR5IGhlYWRlcnMgcG9saWN5IGFwcGxpZWQuXG4gICAqL1xuICByZWFkb25seSBlbmFibGVTZWN1cml0eUhlYWRlcnM/OiBib29sZWFuO1xuICAvKipcbiAgICogRW5hYmxlIElQdjYgc3VwcG9ydCB3aXRoIEFBQUEgcmVjb3Jkcy5cbiAgICogQGRlZmF1bHQgZmFsc2UgLSBObyBJUHY2IHN1cHBvcnQuXG4gICAqL1xuICByZWFkb25seSBlbmFibGVJcHY2PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEN1c3RvbSBlcnJvciByZXNwb25zZXMgZm9yIGRpZmZlcmVudCBIVFRQIHN0YXR1cyBjb2Rlcy5cbiAgICogQGRlZmF1bHQgLSBEZWZhdWx0IGVycm9yIHJlc3BvbnNlcyBiYXNlZCBvbiBlcnJvckRvYyBzZXR0aW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgY3VzdG9tRXJyb3JSZXNwb25zZXM/OiBjbG91ZGZyb250LkVycm9yUmVzcG9uc2VbXTtcbiAgLyoqXG4gICAqIEVuYWJsZSBDbG91ZEZyb250IGFjY2VzcyBsb2dnaW5nLlxuICAgKiBAZGVmYXVsdCBmYWxzZSAtIE5vIGFjY2VzcyBsb2dnaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlTG9nZ2luZz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBTMyBidWNrZXQgZm9yIENsb3VkRnJvbnQgYWNjZXNzIGxvZ3MuIElmIG5vdCBwcm92aWRlZCBhbmQgbG9nZ2luZyBpcyBlbmFibGVkLCBhIG5ldyBidWNrZXQgd2lsbCBiZSBjcmVhdGVkLlxuICAgKiBAZGVmYXVsdCAtIE5ldyBidWNrZXQgY3JlYXRlZCBpZiBsb2dnaW5nIGlzIGVuYWJsZWQuXG4gICAqL1xuICByZWFkb25seSBsb2dzQnVja2V0PzogczMuSUJ1Y2tldDtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIFdBRiBXZWIgQUNMIEFSTiBmb3IgZW5oYW5jZWQgc2VjdXJpdHkuXG4gICAqIEBkZWZhdWx0IC0gTm8gV0FGIGludGVncmF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgd2ViQWNsSWQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBDcmVhdGVCYXNpY1NpdGUgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQmFzaWNTaXRlQ29uZmlndXJhdGlvbikge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBob3N0ZWRab25lTG9va3VwID0gcm91dGU1My5Ib3N0ZWRab25lLmZyb21Mb29rdXAoXG4gICAgICB0aGlzLFxuICAgICAgJ1dlYnNpdGVIb3N0ZWRab25lJyxcbiAgICAgIHtcbiAgICAgICAgZG9tYWluTmFtZTogcHJvcHMuaG9zdGVkWm9uZSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGNvbnN0IHdlYnNpdGVSZWRpcmVjdEJ1Y2tldCA9IG5ldyBzMy5CdWNrZXQoXG4gICAgICBzY29wZSxcbiAgICAgICdXZWJzaXRlUmVkaXJlY3RCdWNrZXQnLFxuICAgICAge1xuICAgICAgICBidWNrZXROYW1lOiBgd3d3LiR7cHJvcHMuaG9zdGVkWm9uZX1gLFxuICAgICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgICAgIGF1dG9EZWxldGVPYmplY3RzOiB0cnVlLFxuICAgICAgICB3ZWJzaXRlUmVkaXJlY3Q6IHtcbiAgICAgICAgICBob3N0TmFtZTogcHJvcHMuaG9zdGVkWm9uZSxcbiAgICAgICAgICBwcm90b2NvbDogczMuUmVkaXJlY3RQcm90b2NvbC5IVFRQLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgY29uc3Qgd2Vic2l0ZUJ1Y2tldCA9IG5ldyBzMy5CdWNrZXQoc2NvcGUsICdXZWJzaXRlQnVja2V0Jywge1xuICAgICAgYnVja2V0TmFtZTogcHJvcHMuaG9zdGVkWm9uZSxcbiAgICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICAgIGF1dG9EZWxldGVPYmplY3RzOiB0cnVlLFxuICAgICAgd2Vic2l0ZUluZGV4RG9jdW1lbnQ6IHByb3BzLmluZGV4RG9jLFxuICAgICAgd2Vic2l0ZUVycm9yRG9jdW1lbnQ6IHByb3BzLmVycm9yRG9jLFxuICAgICAgcHVibGljUmVhZEFjY2VzczogdHJ1ZSxcbiAgICAgIGJsb2NrUHVibGljQWNjZXNzOiB7XG4gICAgICAgIGJsb2NrUHVibGljUG9saWN5OiBmYWxzZSxcbiAgICAgICAgYmxvY2tQdWJsaWNBY2xzOiBmYWxzZSxcbiAgICAgICAgaWdub3JlUHVibGljQWNsczogZmFsc2UsXG4gICAgICAgIHJlc3RyaWN0UHVibGljQnVja2V0czogZmFsc2UsXG4gICAgICB9LFxuICAgICAgZW5jcnlwdGlvbjogczMuQnVja2V0RW5jcnlwdGlvbi5TM19NQU5BR0VELFxuICAgIH0pO1xuXG4gICAgbmV3IHMzZGVwbG95LkJ1Y2tldERlcGxveW1lbnQoc2NvcGUsICdXZWJzaXRlRGVwbG95Jywge1xuICAgICAgc291cmNlczogW3MzZGVwbG95LlNvdXJjZS5hc3NldChwcm9wcy53ZWJzaXRlRm9sZGVyKV0sXG4gICAgICBkZXN0aW5hdGlvbkJ1Y2tldDogd2Vic2l0ZUJ1Y2tldCxcbiAgICB9KTtcblxuICAgIG5ldyByb3V0ZTUzLkFSZWNvcmQoc2NvcGUsICdXZWJzaXRlQWxpYXMnLCB7XG4gICAgICB6b25lOiBob3N0ZWRab25lTG9va3VwLFxuICAgICAgcmVjb3JkTmFtZTogcHJvcHMuaG9zdGVkWm9uZSxcbiAgICAgIHRhcmdldDogcm91dGU1My5SZWNvcmRUYXJnZXQuZnJvbUFsaWFzKFxuICAgICAgICBuZXcgdGFyZ2V0cy5CdWNrZXRXZWJzaXRlVGFyZ2V0KHdlYnNpdGVCdWNrZXQpLFxuICAgICAgKSxcbiAgICB9KTtcblxuICAgIG5ldyByb3V0ZTUzLkFSZWNvcmQoc2NvcGUsICdXZWJzaXRlUmVkaXJlY3RBbGlhcycsIHtcbiAgICAgIHpvbmU6IGhvc3RlZFpvbmVMb29rdXAsXG4gICAgICByZWNvcmROYW1lOiBgd3d3LiR7cHJvcHMuaG9zdGVkWm9uZX1gLFxuICAgICAgdGFyZ2V0OiByb3V0ZTUzLlJlY29yZFRhcmdldC5mcm9tQWxpYXMoXG4gICAgICAgIG5ldyB0YXJnZXRzLkJ1Y2tldFdlYnNpdGVUYXJnZXQod2Vic2l0ZVJlZGlyZWN0QnVja2V0KSxcbiAgICAgICksXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENyZWF0ZUNsb3VkZnJvbnRTaXRlIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBDbG91ZGZyb250U2l0ZUNvbmZpZ3VyYXRpb24sXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBpZiAocHJvcHMuZG9tYWluICYmIHByb3BzLnN1YkRvbWFpbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnRG9tYWluIGFuZCBzdWIgZG9tYWluIHBhcmFtZXRlcnMgY2Fubm90IGJvdGggYmUgZGVmaW5lZCcsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGhvc3RlZFpvbmVMb29rdXAgPSByb3V0ZTUzLkhvc3RlZFpvbmUuZnJvbUxvb2t1cChcbiAgICAgIHRoaXMsXG4gICAgICAnV2Vic2l0ZUhvc3RlZFpvbmUnLFxuICAgICAge1xuICAgICAgICBkb21haW5OYW1lOiBwcm9wcy5ob3N0ZWRab25lLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgLy8gVXNlIGN1c3RvbSBlcnJvciByZXNwb25zZXMgaWYgcHJvdmlkZWQsIG90aGVyd2lzZSB1c2UgZGVmYXVsdCBsb2dpY1xuICAgIGNvbnN0IGVycm9yUmVzcG9uc2VzOiBjbG91ZGZyb250LkVycm9yUmVzcG9uc2VbXSA9IHByb3BzLmN1c3RvbUVycm9yUmVzcG9uc2VzIHx8IFtdO1xuICAgIGlmICghcHJvcHMuY3VzdG9tRXJyb3JSZXNwb25zZXMpIHtcbiAgICAgIGlmIChwcm9wcy5lcnJvckRvYykge1xuICAgICAgICBlcnJvclJlc3BvbnNlcy5wdXNoKHtcbiAgICAgICAgICBodHRwU3RhdHVzOiA0MDQsXG4gICAgICAgICAgcmVzcG9uc2VQYWdlUGF0aDogYC8ke3Byb3BzLmVycm9yRG9jfWAsXG4gICAgICAgIH0pO1xuICAgICAgICBlcnJvclJlc3BvbnNlcy5wdXNoKHtcbiAgICAgICAgICBodHRwU3RhdHVzOiA0MDMsXG4gICAgICAgICAgcmVzcG9uc2VQYWdlUGF0aDogYC8ke3Byb3BzLmVycm9yRG9jfWAsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3JSZXNwb25zZXMucHVzaCh7XG4gICAgICAgICAgaHR0cFN0YXR1czogNDA0LFxuICAgICAgICAgIHJlc3BvbnNlSHR0cFN0YXR1czogMjAwLFxuICAgICAgICAgIHJlc3BvbnNlUGFnZVBhdGg6IGAvJHtwcm9wcy5pbmRleERvY31gLFxuICAgICAgICB9KTtcbiAgICAgICAgZXJyb3JSZXNwb25zZXMucHVzaCh7XG4gICAgICAgICAgaHR0cFN0YXR1czogNDAzLFxuICAgICAgICAgIHJlc3BvbnNlSHR0cFN0YXR1czogMjAwLFxuICAgICAgICAgIHJlc3BvbnNlUGFnZVBhdGg6IGAvJHtwcm9wcy5pbmRleERvY31gLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzdWJqZWN0QWx0ZXJuYXRpdmVOYW1lczogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAocHJvcHMuZG9tYWluKSBzdWJqZWN0QWx0ZXJuYXRpdmVOYW1lcy5wdXNoKHByb3BzLmRvbWFpbik7XG4gICAgaWYgKHByb3BzLnN1YkRvbWFpbikgc3ViamVjdEFsdGVybmF0aXZlTmFtZXMucHVzaChwcm9wcy5zdWJEb21haW4pO1xuXG4gICAgY29uc3Qgd2Vic2l0ZUNlcnQgPSBuZXcgYWNtLkNlcnRpZmljYXRlKHRoaXMsICdXZWJzaXRlQ2VydCcsIHtcbiAgICAgIGRvbWFpbk5hbWU6IHByb3BzLmhvc3RlZFpvbmUsXG4gICAgICBzdWJqZWN0QWx0ZXJuYXRpdmVOYW1lcyxcbiAgICAgIHZhbGlkYXRpb246IGFjbS5DZXJ0aWZpY2F0ZVZhbGlkYXRpb24uZnJvbURucyhob3N0ZWRab25lTG9va3VwKSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHdlYnNpdGVCdWNrZXQgPSBuZXcgczMuQnVja2V0KHNjb3BlLCAnV2Vic2l0ZUJ1Y2tldCcsIHtcbiAgICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICAgIGF1dG9EZWxldGVPYmplY3RzOiB0cnVlLFxuICAgICAgZW5jcnlwdGlvbjogczMuQnVja2V0RW5jcnlwdGlvbi5TM19NQU5BR0VELFxuICAgIH0pO1xuXG4gICAgY29uc3QgZG9tYWluTmFtZXM6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKHByb3BzLmRvbWFpbikge1xuICAgICAgZG9tYWluTmFtZXMucHVzaChwcm9wcy5kb21haW4pO1xuICAgIH0gZWxzZSB7XG4gICAgICBkb21haW5OYW1lcy5wdXNoKHByb3BzLmhvc3RlZFpvbmUpO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5zdWJEb21haW4pIGRvbWFpbk5hbWVzLnB1c2gocHJvcHMuc3ViRG9tYWluKTtcblxuICAgIC8vIENyZWF0ZSBhY2Nlc3MgbG9ncyBidWNrZXQgaWYgbG9nZ2luZyBpcyBlbmFibGVkIGJ1dCBubyBidWNrZXQgcHJvdmlkZWRcbiAgICBjb25zdCBsb2dzQnVja2V0ID0gcHJvcHMuZW5hYmxlTG9nZ2luZ1xuICAgICAgPyAocHJvcHMubG9nc0J1Y2tldCB8fCBuZXcgczMuQnVja2V0KHRoaXMsICdBY2Nlc3NMb2dzQnVja2V0Jywge1xuICAgICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgICAgIGF1dG9EZWxldGVPYmplY3RzOiB0cnVlLFxuICAgICAgICBlbmNyeXB0aW9uOiBzMy5CdWNrZXRFbmNyeXB0aW9uLlMzX01BTkFHRUQsXG4gICAgICB9KSlcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgLy8gQ3JlYXRlIHNlY3VyaXR5IGhlYWRlcnMgcG9saWN5IGlmIGVuYWJsZWRcbiAgICBjb25zdCByZXNwb25zZUhlYWRlcnNQb2xpY3kgPSBwcm9wcy5lbmFibGVTZWN1cml0eUhlYWRlcnNcbiAgICAgID8gbmV3IGNsb3VkZnJvbnQuUmVzcG9uc2VIZWFkZXJzUG9saWN5KHRoaXMsICdTZWN1cml0eUhlYWRlcnNQb2xpY3knLCB7XG4gICAgICAgIHNlY3VyaXR5SGVhZGVyc0JlaGF2aW9yOiB7XG4gICAgICAgICAgY29udGVudFR5cGVPcHRpb25zOiB7IG92ZXJyaWRlOiB0cnVlIH0sXG4gICAgICAgICAgZnJhbWVPcHRpb25zOiB7IGZyYW1lT3B0aW9uOiBjbG91ZGZyb250LkhlYWRlcnNGcmFtZU9wdGlvbi5ERU5ZLCBvdmVycmlkZTogdHJ1ZSB9LFxuICAgICAgICAgIHJlZmVycmVyUG9saWN5OiB7IHJlZmVycmVyUG9saWN5OiBjbG91ZGZyb250LkhlYWRlcnNSZWZlcnJlclBvbGljeS5TVFJJQ1RfT1JJR0lOX1dIRU5fQ1JPU1NfT1JJR0lOLCBvdmVycmlkZTogdHJ1ZSB9LFxuICAgICAgICAgIHN0cmljdFRyYW5zcG9ydFNlY3VyaXR5OiB7XG4gICAgICAgICAgICBhY2Nlc3NDb250cm9sTWF4QWdlOiBEdXJhdGlvbi5zZWNvbmRzKDMxNTM2MDAwKSxcbiAgICAgICAgICAgIGluY2x1ZGVTdWJkb21haW5zOiB0cnVlLFxuICAgICAgICAgICAgcHJlbG9hZDogdHJ1ZSxcbiAgICAgICAgICAgIG92ZXJyaWRlOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgeHNzUHJvdGVjdGlvbjogeyBwcm90ZWN0aW9uOiB0cnVlLCBtb2RlQmxvY2s6IHRydWUsIG92ZXJyaWRlOiB0cnVlIH0sXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCB3ZWJzaXRlRGlzdCA9IG5ldyBjbG91ZGZyb250LkRpc3RyaWJ1dGlvbihzY29wZSwgJ1dlYnNpdGVEaXN0Jywge1xuICAgICAgZGVmYXVsdEJlaGF2aW9yOiB7XG4gICAgICAgIG9yaWdpbjogb3JpZ2lucy5TM0J1Y2tldE9yaWdpbi53aXRoT3JpZ2luQWNjZXNzQ29udHJvbCh3ZWJzaXRlQnVja2V0KSxcbiAgICAgICAgYWxsb3dlZE1ldGhvZHM6IGNsb3VkZnJvbnQuQWxsb3dlZE1ldGhvZHMuQUxMT1dfR0VUX0hFQURfT1BUSU9OUyxcbiAgICAgICAgdmlld2VyUHJvdG9jb2xQb2xpY3k6IGNsb3VkZnJvbnQuVmlld2VyUHJvdG9jb2xQb2xpY3kuUkVESVJFQ1RfVE9fSFRUUFMsXG4gICAgICAgIGNhY2hlUG9saWN5OiBjbG91ZGZyb250LkNhY2hlUG9saWN5LkNBQ0hJTkdfT1BUSU1JWkVELFxuICAgICAgICBvcmlnaW5SZXF1ZXN0UG9saWN5OiBjbG91ZGZyb250Lk9yaWdpblJlcXVlc3RQb2xpY3kuQ09SU19TM19PUklHSU4sXG4gICAgICAgIHJlc3BvbnNlSGVhZGVyc1BvbGljeSxcbiAgICAgIH0sXG4gICAgICBhZGRpdGlvbmFsQmVoYXZpb3JzOiBwcm9wcy5hZGRpdGlvbmFsQmVoYXZpb3JzLFxuICAgICAgbWluaW11bVByb3RvY29sVmVyc2lvbjogY2xvdWRmcm9udC5TZWN1cml0eVBvbGljeVByb3RvY29sLlRMU19WMV8yXzIwMjEsXG4gICAgICBodHRwVmVyc2lvbjogY2xvdWRmcm9udC5IdHRwVmVyc2lvbi5IVFRQMl9BTkRfMyxcbiAgICAgIHByaWNlQ2xhc3M6IHByb3BzLnByaWNlQ2xhc3MgPz8gY2xvdWRmcm9udC5QcmljZUNsYXNzLlBSSUNFX0NMQVNTXzEwMCxcbiAgICAgIGVycm9yUmVzcG9uc2VzLFxuICAgICAgZGVmYXVsdFJvb3RPYmplY3Q6IHByb3BzLmluZGV4RG9jLFxuICAgICAgZG9tYWluTmFtZXMsXG4gICAgICBjZXJ0aWZpY2F0ZTogd2Vic2l0ZUNlcnQsXG4gICAgICBsb2dCdWNrZXQ6IGxvZ3NCdWNrZXQsXG4gICAgICBsb2dJbmNsdWRlc0Nvb2tpZXM6IGZhbHNlLFxuICAgICAgd2ViQWNsSWQ6IHByb3BzLndlYkFjbElkLFxuICAgIH0pO1xuXG4gICAgbmV3IHMzZGVwbG95LkJ1Y2tldERlcGxveW1lbnQoc2NvcGUsICdXZWJzaXRlRGVwbG95Jywge1xuICAgICAgc291cmNlczogW3MzZGVwbG95LlNvdXJjZS5hc3NldChwcm9wcy53ZWJzaXRlRm9sZGVyKV0sXG4gICAgICBkZXN0aW5hdGlvbkJ1Y2tldDogd2Vic2l0ZUJ1Y2tldCxcbiAgICAgIGRpc3RyaWJ1dGlvbjogd2Vic2l0ZURpc3QsXG4gICAgfSk7XG5cbiAgICBuZXcgcm91dGU1My5BUmVjb3JkKHNjb3BlLCAnV2Vic2l0ZURvbWFpbkFsaWFzJywge1xuICAgICAgem9uZTogaG9zdGVkWm9uZUxvb2t1cCxcbiAgICAgIHJlY29yZE5hbWU6IHByb3BzLmRvbWFpbiA/IHByb3BzLmRvbWFpbiA6IHByb3BzLmhvc3RlZFpvbmUsXG4gICAgICB0YXJnZXQ6IHJvdXRlNTMuUmVjb3JkVGFyZ2V0LmZyb21BbGlhcyhcbiAgICAgICAgbmV3IHRhcmdldHMuQ2xvdWRGcm9udFRhcmdldCh3ZWJzaXRlRGlzdCksXG4gICAgICApLFxuICAgIH0pO1xuXG4gICAgLy8gQWRkIElQdjYgc3VwcG9ydCBpZiBlbmFibGVkXG4gICAgaWYgKHByb3BzLmVuYWJsZUlwdjYpIHtcbiAgICAgIG5ldyByb3V0ZTUzLkFhYWFSZWNvcmQoc2NvcGUsICdXZWJzaXRlRG9tYWluQWxpYXNJcHY2Jywge1xuICAgICAgICB6b25lOiBob3N0ZWRab25lTG9va3VwLFxuICAgICAgICByZWNvcmROYW1lOiBwcm9wcy5kb21haW4gPyBwcm9wcy5kb21haW4gOiBwcm9wcy5ob3N0ZWRab25lLFxuICAgICAgICB0YXJnZXQ6IHJvdXRlNTMuUmVjb3JkVGFyZ2V0LmZyb21BbGlhcyhcbiAgICAgICAgICBuZXcgdGFyZ2V0cy5DbG91ZEZyb250VGFyZ2V0KHdlYnNpdGVEaXN0KSxcbiAgICAgICAgKSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5zdWJEb21haW4pIHtcbiAgICAgIG5ldyByb3V0ZTUzLkFSZWNvcmQoc2NvcGUsICdXZWJzaXRlU3ViRG9tYWluQWxpYXMnLCB7XG4gICAgICAgIHpvbmU6IGhvc3RlZFpvbmVMb29rdXAsXG4gICAgICAgIHJlY29yZE5hbWU6IHByb3BzLnN1YkRvbWFpbixcbiAgICAgICAgdGFyZ2V0OiByb3V0ZTUzLlJlY29yZFRhcmdldC5mcm9tQWxpYXMoXG4gICAgICAgICAgbmV3IHRhcmdldHMuQ2xvdWRGcm9udFRhcmdldCh3ZWJzaXRlRGlzdCksXG4gICAgICAgICksXG4gICAgICB9KTtcblxuICAgICAgLy8gQWRkIElQdjYgc3VwcG9ydCBmb3Igc3ViZG9tYWluIGlmIGVuYWJsZWRcbiAgICAgIGlmIChwcm9wcy5lbmFibGVJcHY2KSB7XG4gICAgICAgIG5ldyByb3V0ZTUzLkFhYWFSZWNvcmQoc2NvcGUsICdXZWJzaXRlU3ViRG9tYWluQWxpYXNJcHY2Jywge1xuICAgICAgICAgIHpvbmU6IGhvc3RlZFpvbmVMb29rdXAsXG4gICAgICAgICAgcmVjb3JkTmFtZTogcHJvcHMuc3ViRG9tYWluLFxuICAgICAgICAgIHRhcmdldDogcm91dGU1My5SZWNvcmRUYXJnZXQuZnJvbUFsaWFzKFxuICAgICAgICAgICAgbmV3IHRhcmdldHMuQ2xvdWRGcm9udFRhcmdldCh3ZWJzaXRlRGlzdCksXG4gICAgICAgICAgKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
212
|
+
CreateCloudfrontSite[_b] = { fqn: "cdk-simplewebsite-deploy.CreateCloudfrontSite", version: "2.2.1" };
|
|
213
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXNpbXBsZXdlYnNpdGUtZGVwbG95LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Nkay1zaW1wbGV3ZWJzaXRlLWRlcGxveS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQUFzRDtBQUN0RCwwREFBMEQ7QUFDMUQseURBQXlEO0FBQ3pELDhEQUE4RDtBQUM5RCxtREFBbUQ7QUFDbkQsMkRBQTJEO0FBQzNELHlDQUF5QztBQUN6QywwREFBMEQ7QUFDMUQsMkNBQXVDO0FBNkd2Qzs7R0FFRztBQUNILE1BQWEsZUFBZ0IsU0FBUSxzQkFBUztJQUM1QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTZCO1FBQ3JFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FDcEQsSUFBSSxFQUNKLG1CQUFtQixFQUNuQjtZQUNFLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtTQUM3QixDQUNGLENBQUM7UUFFRixNQUFNLHFCQUFxQixHQUFHLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FDekMsS0FBSyxFQUNMLHVCQUF1QixFQUN2QjtZQUNFLFVBQVUsRUFBRSxPQUFPLEtBQUssQ0FBQyxVQUFVLEVBQUU7WUFDckMsYUFBYSxFQUFFLDJCQUFhLENBQUMsT0FBTztZQUNwQyxpQkFBaUIsRUFBRSxJQUFJO1lBQ3ZCLGVBQWUsRUFBRTtnQkFDZixRQUFRLEVBQUUsS0FBSyxDQUFDLFVBQVU7Z0JBQzFCLFFBQVEsRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsSUFBSTthQUNuQztTQUNGLENBQ0YsQ0FBQztRQUVGLE1BQU0sYUFBYSxHQUFHLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsZUFBZSxFQUFFO1lBQzFELFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtZQUM1QixhQUFhLEVBQUUsMkJBQWEsQ0FB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QyxJQUFJLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FDMUM7YUFDRixDQUFDLENBQUM7WUFFSCw0Q0FBNEM7WUFDNUMsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ3JCLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsMkJBQTJCLEVBQUU7b0JBQ3pELElBQUksRUFBRSxnQkFBZ0I7b0JBQ3RCLFVBQVUsRUFBRSxLQUFLLENBQUMsU0FBUztvQkFDM0IsTUFBTSxFQUFFLE9BQU8sQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUNwQyxJQUFJLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FDMUM7aUJBQ0YsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDOztBQTFLSCxvREEyS0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZW1vdmFsUG9saWN5LCBEdXJhdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGFjbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2VydGlmaWNhdGVtYW5hZ2VyJztcbmltcG9ydCAqIGFzIGNsb3VkZnJvbnQgZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnQnO1xuaW1wb3J0ICogYXMgb3JpZ2lucyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udC1vcmlnaW5zJztcbmltcG9ydCAqIGFzIHJvdXRlNTMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXJvdXRlNTMnO1xuaW1wb3J0ICogYXMgdGFyZ2V0cyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtcm91dGU1My10YXJnZXRzJztcbmltcG9ydCAqIGFzIHMzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQgKiBhcyBzM2RlcGxveSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMtZGVwbG95bWVudCc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuZXhwb3J0IGludGVyZmFjZSBCYXNpY1NpdGVDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIExvY2FsIHBhdGggdG8gdGhlIHdlYnNpdGUgZm9sZGVyIHlvdSB3YW50IHRvIGRlcGxveSBvbiBTMy5cbiAgICovXG4gIHJlYWRvbmx5IHdlYnNpdGVGb2xkZXI6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBpbmRleCBkb2N1bWVudCBvZiB0aGUgd2Vic2l0ZS5cbiAgICovXG4gIHJlYWRvbmx5IGluZGV4RG9jOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgZXJyb3IgZG9jdW1lbnQgb2YgdGhlIHdlYnNpdGUuXG4gICAqIEBkZWZhdWx0IC0gTm8gZXJyb3IgZG9jdW1lbnQuXG4gICAqL1xuICByZWFkb25seSBlcnJvckRvYz86IHN0cmluZztcbiAgLyoqXG4gICAqIEhvc3RlZCBab25lIHVzZWQgdG8gY3JlYXRlIHRoZSBETlMgcmVjb3JkIGZvciB0aGUgd2Vic2l0ZS5cbiAgICovXG4gIHJlYWRvbmx5IGhvc3RlZFpvbmU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDbG91ZGZyb250U2l0ZUNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogTG9jYWwgcGF0aCB0byB0aGUgd2Vic2l0ZSBmb2xkZXIgeW91IHdhbnQgdG8gZGVwbG95IG9uIFMzLlxuICAgKi9cbiAgcmVhZG9ubHkgd2Vic2l0ZUZvbGRlcjogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGluZGV4IGRvY3VtZW50IG9mIHRoZSB3ZWJzaXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZXhEb2M6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBlcnJvciBkb2N1bWVudCBvZiB0aGUgd2Vic2l0ZS5cbiAgICogQGRlZmF1bHQgLSBObyBlcnJvciBkb2N1bWVudC5cbiAgICovXG4gIHJlYWRvbmx5IGVycm9yRG9jPzogc3RyaW5nO1xuICAvKipcbiAgICogSG9zdGVkIFpvbmUgdXNlZCB0byBjcmVhdGUgdGhlIEROUyByZWNvcmQgZm9yIHRoZSB3ZWJzaXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgaG9zdGVkWm9uZTogc3RyaW5nO1xuICAvKipcbiAgICogVXNlZCB0byBkZXBsb3kgYSBDbG91ZGZyb250IHNpdGUgd2l0aCBhIHNpbmdsZSBkb21haW4uIGUuZy4gc2FtcGxlLmV4YW1wbGUuY29tXG4gICAqIElmIHlvdSBpbmNsdWRlIGEgdmFsdWUgZm9yIGJvdGggZG9tYWluIGFuZCBzdWJEb21haW4sXG4gICAqIGFuIGVycm9yIHdpbGwgYmUgdGhyb3duLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHZhbHVlXG4gICAqL1xuICByZWFkb25seSBkb21haW4/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgc3ViZG9tYWluIG5hbWUgeW91IHdhbnQgdG8gZGVwbG95LiBlLmcuIHd3dy5leGFtcGxlLmNvbVxuICAgKiBJZiB5b3UgaW5jbHVkZSBhIHZhbHVlIGZvciBib3RoIGRvbWFpbiBhbmQgc3ViRG9tYWluLFxuICAgKiBhbiBlcnJvciB3aWxsIGJlIHRocm93bi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyB2YWx1ZVxuICAgKi9cbiAgcmVhZG9ubHkgc3ViRG9tYWluPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHByaWNlIGNsYXNzIGRldGVybWluZXMgaG93IG1hbnkgZWRnZSBsb2NhdGlvbnMgQ2xvdWRGcm9udCB3aWxsIHVzZSBmb3IgeW91ciBkaXN0cmlidXRpb24uXG4gICAqIEBkZWZhdWx0IFByaWNlQ2xhc3MuUFJJQ0VfQ0xBU1NfMTAwLlxuICAgKiBAc2VlIGh0dHBzOi8vYXdzLmFtYXpvbi5jb20vY2xvdWRmcm9udC9wcmljaW5nLy5cbiAgICovXG4gIHJlYWRvbmx5IHByaWNlQ2xhc3M/OiBjbG91ZGZyb250LlByaWNlQ2xhc3M7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBjYWNoZSBiZWhhdmlvcnMgZm9yIGRpZmZlcmVudCBwYXRoIHBhdHRlcm5zLlxuICAgKiBAZGVmYXVsdCAtIE5vIGFkZGl0aW9uYWwgY2FjaGUgYmVoYXZpb3JzLlxuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbEJlaGF2aW9ycz86IFJlY29yZDxzdHJpbmcsIGNsb3VkZnJvbnQuQmVoYXZpb3JPcHRpb25zPjtcbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgcGVybWlzc2lvbnMgZ3JhbnRlZCB0byB0aGUgQ2xvdWRGcm9udCBPcmlnaW4gQWNjZXNzIENvbnRyb2wgZm9yIHRoZSB3ZWJzaXRlIGJ1Y2tldC5cbiAgICogQGRlZmF1bHQgW2Nsb3VkZnJvbnQuQWNjZXNzTGV2ZWwuUkVBRF1cbiAgICovXG4gIHJlYWRvbmx5IG9yaWdpbkFjY2Vzc0xldmVscz86IGNsb3VkZnJvbnQuQWNjZXNzTGV2ZWxbXTtcbiAgLyoqXG4gICAqIENsb3VkRnJvbnQgRnVuY3Rpb25zIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBkZWZhdWx0IGJlaGF2aW9yLlxuICAgKiBAZGVmYXVsdCAtIE5vIENsb3VkRnJvbnQgRnVuY3Rpb24gYXNzb2NpYXRpb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgZnVuY3Rpb25Bc3NvY2lhdGlvbnM/OiBjbG91ZGZyb250LkZ1bmN0aW9uQXNzb2NpYXRpb25bXTtcbiAgLyoqXG4gICAqIEVuYWJsZSByZXNwb25zZSBoZWFkZXJzIHBvbGljeSBmb3Igc2VjdXJpdHkgaGVhZGVycy5cbiAgICogQGRlZmF1bHQgZmFsc2UgLSBObyBzZWN1cml0eSBoZWFkZXJzIHBvbGljeSBhcHBsaWVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlU2VjdXJpdHlIZWFkZXJzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEVuYWJsZSBJUHY2IHN1cHBvcnQgd2l0aCBBQUFBIHJlY29yZHMuXG4gICAqIEBkZWZhdWx0IGZhbHNlIC0gTm8gSVB2NiBzdXBwb3J0LlxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlSXB2Nj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDdXN0b20gZXJyb3IgcmVzcG9uc2VzIGZvciBkaWZmZXJlbnQgSFRUUCBzdGF0dXMgY29kZXMuXG4gICAqIEBkZWZhdWx0IC0gRGVmYXVsdCBlcnJvciByZXNwb25zZXMgYmFzZWQgb24gZXJyb3JEb2Mgc2V0dGluZy5cbiAgICovXG4gIHJlYWRvbmx5IGN1c3RvbUVycm9yUmVzcG9uc2VzPzogY2xvdWRmcm9udC5FcnJvclJlc3BvbnNlW107XG4gIC8qKlxuICAgKiBFbmFibGUgQ2xvdWRGcm9udCBhY2Nlc3MgbG9nZ2luZy5cbiAgICogQGRlZmF1bHQgZmFsc2UgLSBObyBhY2Nlc3MgbG9nZ2luZy5cbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZUxvZ2dpbmc/OiBib29sZWFuO1xuICAvKipcbiAgICogUzMgYnVja2V0IGZvciBDbG91ZEZyb250IGFjY2VzcyBsb2dzLiBJZiBub3QgcHJvdmlkZWQgYW5kIGxvZ2dpbmcgaXMgZW5hYmxlZCwgYSBuZXcgYnVja2V0IHdpbGwgYmUgY3JlYXRlZC5cbiAgICogQGRlZmF1bHQgLSBOZXcgYnVja2V0IGNyZWF0ZWQgaWYgbG9nZ2luZyBpcyBlbmFibGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgbG9nc0J1Y2tldD86IHMzLklCdWNrZXQ7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBXQUYgV2ViIEFDTCBBUk4gZm9yIGVuaGFuY2VkIHNlY3VyaXR5LlxuICAgKiBAZGVmYXVsdCAtIE5vIFdBRiBpbnRlZ3JhdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IHdlYkFjbElkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBDcmVhdGVDbG91ZGZyb250U2l0ZSBpbnN0ZWFkLiBDcmVhdGVCYXNpY1NpdGUgY29uZmlndXJlcyBhIHB1YmxpYyBTMyB3ZWJzaXRlIGVuZHBvaW50LlxuICovXG5leHBvcnQgY2xhc3MgQ3JlYXRlQmFzaWNTaXRlIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEJhc2ljU2l0ZUNvbmZpZ3VyYXRpb24pIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3QgaG9zdGVkWm9uZUxvb2t1cCA9IHJvdXRlNTMuSG9zdGVkWm9uZS5mcm9tTG9va3VwKFxuICAgICAgdGhpcyxcbiAgICAgICdXZWJzaXRlSG9zdGVkWm9uZScsXG4gICAgICB7XG4gICAgICAgIGRvbWFpbk5hbWU6IHByb3BzLmhvc3RlZFpvbmUsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBjb25zdCB3ZWJzaXRlUmVkaXJlY3RCdWNrZXQgPSBuZXcgczMuQnVja2V0KFxuICAgICAgc2NvcGUsXG4gICAgICAnV2Vic2l0ZVJlZGlyZWN0QnVja2V0JyxcbiAgICAgIHtcbiAgICAgICAgYnVja2V0TmFtZTogYHd3dy4ke3Byb3BzLmhvc3RlZFpvbmV9YCxcbiAgICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgICAgICBhdXRvRGVsZXRlT2JqZWN0czogdHJ1ZSxcbiAgICAgICAgd2Vic2l0ZVJlZGlyZWN0OiB7XG4gICAgICAgICAgaG9zdE5hbWU6IHByb3BzLmhvc3RlZFpvbmUsXG4gICAgICAgICAgcHJvdG9jb2w6IHMzLlJlZGlyZWN0UHJvdG9jb2wuSFRUUCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGNvbnN0IHdlYnNpdGVCdWNrZXQgPSBuZXcgczMuQnVja2V0KHNjb3BlLCAnV2Vic2l0ZUJ1Y2tldCcsIHtcbiAgICAgIGJ1Y2tldE5hbWU6IHByb3BzLmhvc3RlZFpvbmUsXG4gICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgICBhdXRvRGVsZXRlT2JqZWN0czogdHJ1ZSxcbiAgICAgIHdlYnNpdGVJbmRleERvY3VtZW50OiBwcm9wcy5pbmRleERvYyxcbiAgICAgIHdlYnNpdGVFcnJvckRvY3VtZW50OiBwcm9wcy5lcnJvckRvYyxcbiAgICAgIHB1YmxpY1JlYWRBY2Nlc3M6IHRydWUsXG4gICAgICBibG9ja1B1YmxpY0FjY2Vzczoge1xuICAgICAgICBibG9ja1B1YmxpY1BvbGljeTogZmFsc2UsXG4gICAgICAgIGJsb2NrUHVibGljQWNsczogZmFsc2UsXG4gICAgICAgIGlnbm9yZVB1YmxpY0FjbHM6IGZhbHNlLFxuICAgICAgICByZXN0cmljdFB1YmxpY0J1Y2tldHM6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIGVuY3J5cHRpb246IHMzLkJ1Y2tldEVuY3J5cHRpb24uUzNfTUFOQUdFRCxcbiAgICB9KTtcblxuICAgIG5ldyBzM2RlcGxveS5CdWNrZXREZXBsb3ltZW50KHNjb3BlLCAnV2Vic2l0ZURlcGxveScsIHtcbiAgICAgIHNvdXJjZXM6IFtzM2RlcGxveS5Tb3VyY2UuYXNzZXQocHJvcHMud2Vic2l0ZUZvbGRlcildLFxuICAgICAgZGVzdGluYXRpb25CdWNrZXQ6IHdlYnNpdGVCdWNrZXQsXG4gICAgfSk7XG5cbiAgICBuZXcgcm91dGU1My5BUmVjb3JkKHNjb3BlLCAnV2Vic2l0ZUFsaWFzJywge1xuICAgICAgem9uZTogaG9zdGVkWm9uZUxvb2t1cCxcbiAgICAgIHJlY29yZE5hbWU6IHByb3BzLmhvc3RlZFpvbmUsXG4gICAgICB0YXJnZXQ6IHJvdXRlNTMuUmVjb3JkVGFyZ2V0LmZyb21BbGlhcyhcbiAgICAgICAgbmV3IHRhcmdldHMuQnVja2V0V2Vic2l0ZVRhcmdldCh3ZWJzaXRlQnVja2V0KSxcbiAgICAgICksXG4gICAgfSk7XG5cbiAgICBuZXcgcm91dGU1My5BUmVjb3JkKHNjb3BlLCAnV2Vic2l0ZVJlZGlyZWN0QWxpYXMnLCB7XG4gICAgICB6b25lOiBob3N0ZWRab25lTG9va3VwLFxuICAgICAgcmVjb3JkTmFtZTogYHd3dy4ke3Byb3BzLmhvc3RlZFpvbmV9YCxcbiAgICAgIHRhcmdldDogcm91dGU1My5SZWNvcmRUYXJnZXQuZnJvbUFsaWFzKFxuICAgICAgICBuZXcgdGFyZ2V0cy5CdWNrZXRXZWJzaXRlVGFyZ2V0KHdlYnNpdGVSZWRpcmVjdEJ1Y2tldCksXG4gICAgICApLFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDcmVhdGVDbG91ZGZyb250U2l0ZSBleHRlbmRzIENvbnN0cnVjdCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogQ2xvdWRmcm9udFNpdGVDb25maWd1cmF0aW9uLFxuICApIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgaWYgKHByb3BzLmRvbWFpbiAmJiBwcm9wcy5zdWJEb21haW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0RvbWFpbiBhbmQgc3ViIGRvbWFpbiBwYXJhbWV0ZXJzIGNhbm5vdCBib3RoIGJlIGRlZmluZWQnLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBob3N0ZWRab25lTG9va3VwID0gcm91dGU1My5Ib3N0ZWRab25lLmZyb21Mb29rdXAoXG4gICAgICB0aGlzLFxuICAgICAgJ1dlYnNpdGVIb3N0ZWRab25lJyxcbiAgICAgIHtcbiAgICAgICAgZG9tYWluTmFtZTogcHJvcHMuaG9zdGVkWm9uZSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIC8vIFVzZSBjdXN0b20gZXJyb3IgcmVzcG9uc2VzIGlmIHByb3ZpZGVkLCBvdGhlcndpc2UgdXNlIGRlZmF1bHQgbG9naWNcbiAgICBjb25zdCBlcnJvclJlc3BvbnNlczogY2xvdWRmcm9udC5FcnJvclJlc3BvbnNlW10gPSBwcm9wcy5jdXN0b21FcnJvclJlc3BvbnNlcyB8fCBbXTtcbiAgICBpZiAoIXByb3BzLmN1c3RvbUVycm9yUmVzcG9uc2VzKSB7XG4gICAgICBpZiAocHJvcHMuZXJyb3JEb2MpIHtcbiAgICAgICAgZXJyb3JSZXNwb25zZXMucHVzaCh7XG4gICAgICAgICAgaHR0cFN0YXR1czogNDA0LFxuICAgICAgICAgIHJlc3BvbnNlUGFnZVBhdGg6IGAvJHtwcm9wcy5lcnJvckRvY31gLFxuICAgICAgICB9KTtcbiAgICAgICAgZXJyb3JSZXNwb25zZXMucHVzaCh7XG4gICAgICAgICAgaHR0cFN0YXR1czogNDAzLFxuICAgICAgICAgIHJlc3BvbnNlUGFnZVBhdGg6IGAvJHtwcm9wcy5lcnJvckRvY31gLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yUmVzcG9uc2VzLnB1c2goe1xuICAgICAgICAgIGh0dHBTdGF0dXM6IDQwNCxcbiAgICAgICAgICByZXNwb25zZUh0dHBTdGF0dXM6IDIwMCxcbiAgICAgICAgICByZXNwb25zZVBhZ2VQYXRoOiBgLyR7cHJvcHMuaW5kZXhEb2N9YCxcbiAgICAgICAgfSk7XG4gICAgICAgIGVycm9yUmVzcG9uc2VzLnB1c2goe1xuICAgICAgICAgIGh0dHBTdGF0dXM6IDQwMyxcbiAgICAgICAgICByZXNwb25zZUh0dHBTdGF0dXM6IDIwMCxcbiAgICAgICAgICByZXNwb25zZVBhZ2VQYXRoOiBgLyR7cHJvcHMuaW5kZXhEb2N9YCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc3ViamVjdEFsdGVybmF0aXZlTmFtZXM6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKHByb3BzLmRvbWFpbikgc3ViamVjdEFsdGVybmF0aXZlTmFtZXMucHVzaChwcm9wcy5kb21haW4pO1xuICAgIGlmIChwcm9wcy5zdWJEb21haW4pIHN1YmplY3RBbHRlcm5hdGl2ZU5hbWVzLnB1c2gocHJvcHMuc3ViRG9tYWluKTtcblxuICAgIGNvbnN0IHdlYnNpdGVDZXJ0ID0gbmV3IGFjbS5DZXJ0aWZpY2F0ZSh0aGlzLCAnV2Vic2l0ZUNlcnQnLCB7XG4gICAgICBkb21haW5OYW1lOiBwcm9wcy5ob3N0ZWRab25lLFxuICAgICAgc3ViamVjdEFsdGVybmF0aXZlTmFtZXMsXG4gICAgICB2YWxpZGF0aW9uOiBhY20uQ2VydGlmaWNhdGVWYWxpZGF0aW9uLmZyb21EbnMoaG9zdGVkWm9uZUxvb2t1cCksXG4gICAgfSk7XG5cbiAgICBjb25zdCB3ZWJzaXRlQnVja2V0ID0gbmV3IHMzLkJ1Y2tldChzY29wZSwgJ1dlYnNpdGVCdWNrZXQnLCB7XG4gICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgICBhdXRvRGVsZXRlT2JqZWN0czogdHJ1ZSxcbiAgICAgIGVuY3J5cHRpb246IHMzLkJ1Y2tldEVuY3J5cHRpb24uUzNfTUFOQUdFRCxcbiAgICB9KTtcblxuICAgIGNvbnN0IGRvbWFpbk5hbWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmIChwcm9wcy5kb21haW4pIHtcbiAgICAgIGRvbWFpbk5hbWVzLnB1c2gocHJvcHMuZG9tYWluKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZG9tYWluTmFtZXMucHVzaChwcm9wcy5ob3N0ZWRab25lKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuc3ViRG9tYWluKSBkb21haW5OYW1lcy5wdXNoKHByb3BzLnN1YkRvbWFpbik7XG5cbiAgICAvLyBDcmVhdGUgYWNjZXNzIGxvZ3MgYnVja2V0IGlmIGxvZ2dpbmcgaXMgZW5hYmxlZCBidXQgbm8gYnVja2V0IHByb3ZpZGVkXG4gICAgY29uc3QgbG9nc0J1Y2tldCA9IHByb3BzLmVuYWJsZUxvZ2dpbmdcbiAgICAgID8gKHByb3BzLmxvZ3NCdWNrZXQgfHwgbmV3IHMzLkJ1Y2tldCh0aGlzLCAnQWNjZXNzTG9nc0J1Y2tldCcsIHtcbiAgICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgICAgICBhdXRvRGVsZXRlT2JqZWN0czogdHJ1ZSxcbiAgICAgICAgZW5jcnlwdGlvbjogczMuQnVja2V0RW5jcnlwdGlvbi5TM19NQU5BR0VELFxuICAgICAgfSkpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIC8vIENyZWF0ZSBzZWN1cml0eSBoZWFkZXJzIHBvbGljeSBpZiBlbmFibGVkXG4gICAgY29uc3QgcmVzcG9uc2VIZWFkZXJzUG9saWN5ID0gcHJvcHMuZW5hYmxlU2VjdXJpdHlIZWFkZXJzXG4gICAgICA/IG5ldyBjbG91ZGZyb250LlJlc3BvbnNlSGVhZGVyc1BvbGljeSh0aGlzLCAnU2VjdXJpdHlIZWFkZXJzUG9saWN5Jywge1xuICAgICAgICBzZWN1cml0eUhlYWRlcnNCZWhhdmlvcjoge1xuICAgICAgICAgIGNvbnRlbnRUeXBlT3B0aW9uczogeyBvdmVycmlkZTogdHJ1ZSB9LFxuICAgICAgICAgIGZyYW1lT3B0aW9uczogeyBmcmFtZU9wdGlvbjogY2xvdWRmcm9udC5IZWFkZXJzRnJhbWVPcHRpb24uREVOWSwgb3ZlcnJpZGU6IHRydWUgfSxcbiAgICAgICAgICByZWZlcnJlclBvbGljeTogeyByZWZlcnJlclBvbGljeTogY2xvdWRmcm9udC5IZWFkZXJzUmVmZXJyZXJQb2xpY3kuU1RSSUNUX09SSUdJTl9XSEVOX0NST1NTX09SSUdJTiwgb3ZlcnJpZGU6IHRydWUgfSxcbiAgICAgICAgICBzdHJpY3RUcmFuc3BvcnRTZWN1cml0eToge1xuICAgICAgICAgICAgYWNjZXNzQ29udHJvbE1heEFnZTogRHVyYXRpb24uc2Vjb25kcygzMTUzNjAwMCksXG4gICAgICAgICAgICBpbmNsdWRlU3ViZG9tYWluczogdHJ1ZSxcbiAgICAgICAgICAgIHByZWxvYWQ6IHRydWUsXG4gICAgICAgICAgICBvdmVycmlkZTogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHhzc1Byb3RlY3Rpb246IHsgcHJvdGVjdGlvbjogdHJ1ZSwgbW9kZUJsb2NrOiB0cnVlLCBvdmVycmlkZTogdHJ1ZSB9LFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3Qgd2Vic2l0ZURpc3QgPSBuZXcgY2xvdWRmcm9udC5EaXN0cmlidXRpb24oc2NvcGUsICdXZWJzaXRlRGlzdCcsIHtcbiAgICAgIGRlZmF1bHRCZWhhdmlvcjoge1xuICAgICAgICBvcmlnaW46IG9yaWdpbnMuUzNCdWNrZXRPcmlnaW4ud2l0aE9yaWdpbkFjY2Vzc0NvbnRyb2wod2Vic2l0ZUJ1Y2tldCwge1xuICAgICAgICAgIG9yaWdpbkFjY2Vzc0xldmVsczogcHJvcHMub3JpZ2luQWNjZXNzTGV2ZWxzLFxuICAgICAgICB9KSxcbiAgICAgICAgYWxsb3dlZE1ldGhvZHM6IGNsb3VkZnJvbnQuQWxsb3dlZE1ldGhvZHMuQUxMT1dfR0VUX0hFQURfT1BUSU9OUyxcbiAgICAgICAgdmlld2VyUHJvdG9jb2xQb2xpY3k6IGNsb3VkZnJvbnQuVmlld2VyUHJvdG9jb2xQb2xpY3kuUkVESVJFQ1RfVE9fSFRUUFMsXG4gICAgICAgIGNhY2hlUG9saWN5OiBjbG91ZGZyb250LkNhY2hlUG9saWN5LkNBQ0hJTkdfT1BUSU1JWkVELFxuICAgICAgICBvcmlnaW5SZXF1ZXN0UG9saWN5OiBjbG91ZGZyb250Lk9yaWdpblJlcXVlc3RQb2xpY3kuQ09SU19TM19PUklHSU4sXG4gICAgICAgIHJlc3BvbnNlSGVhZGVyc1BvbGljeSxcbiAgICAgICAgZnVuY3Rpb25Bc3NvY2lhdGlvbnM6IHByb3BzLmZ1bmN0aW9uQXNzb2NpYXRpb25zLFxuICAgICAgfSxcbiAgICAgIGFkZGl0aW9uYWxCZWhhdmlvcnM6IHByb3BzLmFkZGl0aW9uYWxCZWhhdmlvcnMsXG4gICAgICBtaW5pbXVtUHJvdG9jb2xWZXJzaW9uOiBjbG91ZGZyb250LlNlY3VyaXR5UG9saWN5UHJvdG9jb2wuVExTX1YxXzJfMjAyMSxcbiAgICAgIGh0dHBWZXJzaW9uOiBjbG91ZGZyb250Lkh0dHBWZXJzaW9uLkhUVFAyX0FORF8zLFxuICAgICAgcHJpY2VDbGFzczogcHJvcHMucHJpY2VDbGFzcyA/PyBjbG91ZGZyb250LlByaWNlQ2xhc3MuUFJJQ0VfQ0xBU1NfMTAwLFxuICAgICAgZXJyb3JSZXNwb25zZXMsXG4gICAgICBkZWZhdWx0Um9vdE9iamVjdDogcHJvcHMuaW5kZXhEb2MsXG4gICAgICBkb21haW5OYW1lcyxcbiAgICAgIGNlcnRpZmljYXRlOiB3ZWJzaXRlQ2VydCxcbiAgICAgIGxvZ0J1Y2tldDogbG9nc0J1Y2tldCxcbiAgICAgIGxvZ0luY2x1ZGVzQ29va2llczogZmFsc2UsXG4gICAgICB3ZWJBY2xJZDogcHJvcHMud2ViQWNsSWQsXG4gICAgfSk7XG5cbiAgICBuZXcgczNkZXBsb3kuQnVja2V0RGVwbG95bWVudChzY29wZSwgJ1dlYnNpdGVEZXBsb3knLCB7XG4gICAgICBzb3VyY2VzOiBbczNkZXBsb3kuU291cmNlLmFzc2V0KHByb3BzLndlYnNpdGVGb2xkZXIpXSxcbiAgICAgIGRlc3RpbmF0aW9uQnVja2V0OiB3ZWJzaXRlQnVja2V0LFxuICAgICAgZGlzdHJpYnV0aW9uOiB3ZWJzaXRlRGlzdCxcbiAgICB9KTtcblxuICAgIG5ldyByb3V0ZTUzLkFSZWNvcmQoc2NvcGUsICdXZWJzaXRlRG9tYWluQWxpYXMnLCB7XG4gICAgICB6b25lOiBob3N0ZWRab25lTG9va3VwLFxuICAgICAgcmVjb3JkTmFtZTogcHJvcHMuZG9tYWluID8gcHJvcHMuZG9tYWluIDogcHJvcHMuaG9zdGVkWm9uZSxcbiAgICAgIHRhcmdldDogcm91dGU1My5SZWNvcmRUYXJnZXQuZnJvbUFsaWFzKFxuICAgICAgICBuZXcgdGFyZ2V0cy5DbG91ZEZyb250VGFyZ2V0KHdlYnNpdGVEaXN0KSxcbiAgICAgICksXG4gICAgfSk7XG5cbiAgICAvLyBBZGQgSVB2NiBzdXBwb3J0IGlmIGVuYWJsZWRcbiAgICBpZiAocHJvcHMuZW5hYmxlSXB2Nikge1xuICAgICAgbmV3IHJvdXRlNTMuQWFhYVJlY29yZChzY29wZSwgJ1dlYnNpdGVEb21haW5BbGlhc0lwdjYnLCB7XG4gICAgICAgIHpvbmU6IGhvc3RlZFpvbmVMb29rdXAsXG4gICAgICAgIHJlY29yZE5hbWU6IHByb3BzLmRvbWFpbiA/IHByb3BzLmRvbWFpbiA6IHByb3BzLmhvc3RlZFpvbmUsXG4gICAgICAgIHRhcmdldDogcm91dGU1My5SZWNvcmRUYXJnZXQuZnJvbUFsaWFzKFxuICAgICAgICAgIG5ldyB0YXJnZXRzLkNsb3VkRnJvbnRUYXJnZXQod2Vic2l0ZURpc3QpLFxuICAgICAgICApLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLnN1YkRvbWFpbikge1xuICAgICAgbmV3IHJvdXRlNTMuQVJlY29yZChzY29wZSwgJ1dlYnNpdGVTdWJEb21haW5BbGlhcycsIHtcbiAgICAgICAgem9uZTogaG9zdGVkWm9uZUxvb2t1cCxcbiAgICAgICAgcmVjb3JkTmFtZTogcHJvcHMuc3ViRG9tYWluLFxuICAgICAgICB0YXJnZXQ6IHJvdXRlNTMuUmVjb3JkVGFyZ2V0LmZyb21BbGlhcyhcbiAgICAgICAgICBuZXcgdGFyZ2V0cy5DbG91ZEZyb250VGFyZ2V0KHdlYnNpdGVEaXN0KSxcbiAgICAgICAgKSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBBZGQgSVB2NiBzdXBwb3J0IGZvciBzdWJkb21haW4gaWYgZW5hYmxlZFxuICAgICAgaWYgKHByb3BzLmVuYWJsZUlwdjYpIHtcbiAgICAgICAgbmV3IHJvdXRlNTMuQWFhYVJlY29yZChzY29wZSwgJ1dlYnNpdGVTdWJEb21haW5BbGlhc0lwdjYnLCB7XG4gICAgICAgICAgem9uZTogaG9zdGVkWm9uZUxvb2t1cCxcbiAgICAgICAgICByZWNvcmROYW1lOiBwcm9wcy5zdWJEb21haW4sXG4gICAgICAgICAgdGFyZ2V0OiByb3V0ZTUzLlJlY29yZFRhcmdldC5mcm9tQWxpYXMoXG4gICAgICAgICAgICBuZXcgdGFyZ2V0cy5DbG91ZEZyb250VGFyZ2V0KHdlYnNpdGVEaXN0KSxcbiAgICAgICAgICApLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
|