aws-secure-bucket 3.0.13 → 3.1.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/.jsii +7 -7
- package/README.md +51 -34
- package/lib/index.d.ts +5 -0
- package/lib/index.js +49 -3
- package/package.json +1 -1
package/.jsii
CHANGED
|
@@ -3973,7 +3973,7 @@
|
|
|
3973
3973
|
},
|
|
3974
3974
|
"name": "aws-secure-bucket",
|
|
3975
3975
|
"readme": {
|
|
3976
|
-
"markdown": "# AWS Secure Bucket\n\n[](https://github.com/gammarers-aws-cdk-resources/aws-secure-bucket/blob/main/LICENSE)\n[](https://www.npmjs.com/package/aws-secure-bucket)\n[](https://github.com/gammarers-aws-cdk-resources/aws-secure-bucket/actions/workflows/build.yml)\n[](https://github.com/gammarers-aws-cdk-resources/aws-secure-bucket/actions/workflows/release.yml)\n[](https://github.com/gammarers-aws-cdk-resources/aws-secure-bucket/releases)\n\nAn [AWS CDK](https://aws.amazon.com/cdk/) construct that defines an S3 bucket with security-focused defaults. It wraps the standard `s3.Bucket` and applies settings that follow AWS best practices, so you can create buckets without accidentally leaving them open or unencrypted. You can still override any option or use it as a drop-in replacement where a regular `s3.Bucket` is expected. For CDK pipeline artifact buckets or CloudFront origins, use the `bucketType` option so encryption and resource policies are set appropriately.\n\n
|
|
3976
|
+
"markdown": "# AWS Secure Bucket\n\n[](https://github.com/gammarers-aws-cdk-resources/aws-secure-bucket/blob/main/LICENSE)\n[](https://www.npmjs.com/package/aws-secure-bucket)\n[](https://github.com/gammarers-aws-cdk-resources/aws-secure-bucket/actions/workflows/build.yml)\n[](https://github.com/gammarers-aws-cdk-resources/aws-secure-bucket/actions/workflows/release.yml)\n[](https://github.com/gammarers-aws-cdk-resources/aws-secure-bucket/releases)\n\nAn [AWS CDK](https://aws.amazon.com/cdk/) construct that defines an S3 bucket with security-focused defaults. It wraps the standard `s3.Bucket` and applies settings that follow AWS best practices, so you can create buckets without accidentally leaving them open or unencrypted. You can still override any option or use it as a drop-in replacement where a regular `s3.Bucket` is expected. For CDK pipeline artifact buckets or CloudFront origins, use the `bucketType` option so encryption and resource policies are set appropriately.\n\n## Features\n\n- Security-focused defaults for S3 buckets (private, block public access, enforce SSL)\n- Encryption enabled by default\n- Versioning enabled by default\n- Object ownership enforced by default (`BucketOwnerEnforced`)\n- `RemovalPolicy.RETAIN` by default (prevent accidental deletion)\n- Bucket-type presets via `bucketType` for common production use cases\n - `DEPLOYMENT_PIPELINE_ARTIFACT_BUCKET`: CDK pipeline artifact buckets with custom qualifier support\n - `CLOUDFRONT_ORIGIN_BUCKET`: CloudFront origin buckets using S3-managed encryption\n - `ACCESS_LOG_BUCKET`: Centralized access log buckets with minimal log-delivery permissions\n\n## Installation\n\n**npm**\n\n```shell\nnpm install aws-secure-bucket\n```\n\n**yarn**\n\n```shell\nyarn add aws-secure-bucket\n```\n\n## Usage\n\n### Default secure bucket\n\n```typescript\nimport { SecureBucket } from 'aws-secure-bucket';\n\nconst bucket = new SecureBucket(stack, 'SecureBucket', {\n bucketName: 'example-secure-bucket',\n});\n```\n\n### Centralized access log bucket (ALB / CloudFront / S3)\n\n```typescript\nimport { SecureBucket, SecureBucketType } from 'aws-secure-bucket';\n\nconst accessLogBucket = new SecureBucket(stack, 'AccessLogBucket', {\n bucketType: SecureBucketType.ACCESS_LOG_BUCKET,\n});\n```\n\n## Options\n\nThe `SecureBucket` constructor accepts `SecureBucketProps`. Since it extends `s3.BucketProps`, you can also use standard S3 bucket options such as `bucketName`, `versioned`, and `encryption`.\n\n### SecureBucket-specific options\n\n| Property | Type | Default | Description |\n| --- | --- | --- | --- |\n| `bucketType` | `SecureBucketType` | `SecureBucketType.DEFAULT_BUCKET` | Determines encryption and resource policy behavior. |\n\n### SecureBucketType values\n\n| Constant | Use case |\n| --- | --- |\n| `SecureBucketType.DEFAULT_BUCKET` | Default bucket when not using a custom qualifier |\n| `SecureBucketType.ACCESS_LOG_BUCKET` | Centralized access log bucket for ALB / CloudFront / S3 (RETAIN + minimal log-delivery permissions) |\n| `SecureBucketType.DEPLOYMENT_PIPELINE_ARTIFACT_BUCKET` | CDK pipeline artifact bucket (when using a custom qualifier) |\n| `SecureBucketType.CLOUDFRONT_ORIGIN_BUCKET` | CloudFront origin bucket |\n\nSee [API.md](./API.md) for the full API reference.\n\n## Requirements\n\n- Node.js >= 20\n- AWS CDK v2 (`aws-cdk-lib`)\n\n## License\n\nThis project is licensed under the Apache-2.0 License.\n"
|
|
3977
3977
|
},
|
|
3978
3978
|
"repository": {
|
|
3979
3979
|
"type": "git",
|
|
@@ -4000,7 +4000,7 @@
|
|
|
4000
4000
|
},
|
|
4001
4001
|
"locationInModule": {
|
|
4002
4002
|
"filename": "src/index.ts",
|
|
4003
|
-
"line":
|
|
4003
|
+
"line": 49
|
|
4004
4004
|
},
|
|
4005
4005
|
"parameters": [
|
|
4006
4006
|
{
|
|
@@ -4027,7 +4027,7 @@
|
|
|
4027
4027
|
"kind": "class",
|
|
4028
4028
|
"locationInModule": {
|
|
4029
4029
|
"filename": "src/index.ts",
|
|
4030
|
-
"line":
|
|
4030
|
+
"line": 48
|
|
4031
4031
|
},
|
|
4032
4032
|
"name": "SecureBucket",
|
|
4033
4033
|
"symbolId": "src/index:SecureBucket"
|
|
@@ -4047,7 +4047,7 @@
|
|
|
4047
4047
|
"kind": "interface",
|
|
4048
4048
|
"locationInModule": {
|
|
4049
4049
|
"filename": "src/index.ts",
|
|
4050
|
-
"line":
|
|
4050
|
+
"line": 36
|
|
4051
4051
|
},
|
|
4052
4052
|
"name": "SecureBucketProps",
|
|
4053
4053
|
"properties": [
|
|
@@ -4062,7 +4062,7 @@
|
|
|
4062
4062
|
"immutable": true,
|
|
4063
4063
|
"locationInModule": {
|
|
4064
4064
|
"filename": "src/index.ts",
|
|
4065
|
-
"line":
|
|
4065
|
+
"line": 42
|
|
4066
4066
|
},
|
|
4067
4067
|
"name": "bucketType",
|
|
4068
4068
|
"optional": true,
|
|
@@ -4074,6 +4074,6 @@
|
|
|
4074
4074
|
"symbolId": "src/index:SecureBucketProps"
|
|
4075
4075
|
}
|
|
4076
4076
|
},
|
|
4077
|
-
"version": "3.0
|
|
4078
|
-
"fingerprint": "
|
|
4077
|
+
"version": "3.1.0",
|
|
4078
|
+
"fingerprint": "p4ZW6ZBZByQgG7QHuoKolvQ/ZcX/xy8HzUZZmM+Bl/s="
|
|
4079
4079
|
}
|
package/README.md
CHANGED
|
@@ -8,53 +8,35 @@
|
|
|
8
8
|
|
|
9
9
|
An [AWS CDK](https://aws.amazon.com/cdk/) construct that defines an S3 bucket with security-focused defaults. It wraps the standard `s3.Bucket` and applies settings that follow AWS best practices, so you can create buckets without accidentally leaving them open or unencrypted. You can still override any option or use it as a drop-in replacement where a regular `s3.Bucket` is expected. For CDK pipeline artifact buckets or CloudFront origins, use the `bucketType` option so encryption and resource policies are set appropriately.
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
## Features
|
|
12
12
|
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
-
|
|
13
|
+
- Security-focused defaults for S3 buckets (private, block public access, enforce SSL)
|
|
14
|
+
- Encryption enabled by default
|
|
15
|
+
- Versioning enabled by default
|
|
16
|
+
- Object ownership enforced by default (`BucketOwnerEnforced`)
|
|
17
|
+
- `RemovalPolicy.RETAIN` by default (prevent accidental deletion)
|
|
18
|
+
- Bucket-type presets via `bucketType` for common production use cases
|
|
19
|
+
- `DEPLOYMENT_PIPELINE_ARTIFACT_BUCKET`: CDK pipeline artifact buckets with custom qualifier support
|
|
20
|
+
- `CLOUDFRONT_ORIGIN_BUCKET`: CloudFront origin buckets using S3-managed encryption
|
|
21
|
+
- `ACCESS_LOG_BUCKET`: Centralized access log buckets with minimal log-delivery permissions
|
|
20
22
|
|
|
21
|
-
##
|
|
23
|
+
## Installation
|
|
22
24
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
### SecureBucket-specific options
|
|
26
|
-
|
|
27
|
-
| **Property** | **Type** | **Default** | **Description** |
|
|
28
|
-
| --- | --- | --- | --- |
|
|
29
|
-
| bucketType | SecureBucketType | SecureBucketType.DEFAULT_BUCKET | The bucket type. Determines encryption and resource policy behavior. |
|
|
30
|
-
|
|
31
|
-
**SecureBucketType values:**
|
|
32
|
-
|
|
33
|
-
| **Constant** | **Use case** |
|
|
34
|
-
| --- | --- |
|
|
35
|
-
| `SecureBucketType.DEFAULT_BUCKET` | Default bucket when not using a custom Qualifier |
|
|
36
|
-
| `SecureBucketType.DEPLOYMENT_PIPELINE_ARTIFACT_BUCKET` | CDK pipeline artifact bucket (when using a custom Qualifier) |
|
|
37
|
-
| `SecureBucketType.CLOUDFRONT_ORIGIN_BUCKET` | CloudFront origin bucket |
|
|
38
|
-
|
|
39
|
-
See [API.md](./API.md) for the full API reference.
|
|
40
|
-
|
|
41
|
-
## Install
|
|
42
|
-
|
|
43
|
-
### TypeScript
|
|
44
|
-
|
|
45
|
-
**npm:**
|
|
25
|
+
**npm**
|
|
46
26
|
|
|
47
27
|
```shell
|
|
48
28
|
npm install aws-secure-bucket
|
|
49
29
|
```
|
|
50
30
|
|
|
51
|
-
**yarn
|
|
31
|
+
**yarn**
|
|
52
32
|
|
|
53
33
|
```shell
|
|
54
34
|
yarn add aws-secure-bucket
|
|
55
35
|
```
|
|
56
36
|
|
|
57
|
-
##
|
|
37
|
+
## Usage
|
|
38
|
+
|
|
39
|
+
### Default secure bucket
|
|
58
40
|
|
|
59
41
|
```typescript
|
|
60
42
|
import { SecureBucket } from 'aws-secure-bucket';
|
|
@@ -62,9 +44,44 @@ import { SecureBucket } from 'aws-secure-bucket';
|
|
|
62
44
|
const bucket = new SecureBucket(stack, 'SecureBucket', {
|
|
63
45
|
bucketName: 'example-secure-bucket',
|
|
64
46
|
});
|
|
47
|
+
```
|
|
65
48
|
|
|
49
|
+
### Centralized access log bucket (ALB / CloudFront / S3)
|
|
50
|
+
|
|
51
|
+
```typescript
|
|
52
|
+
import { SecureBucket, SecureBucketType } from 'aws-secure-bucket';
|
|
53
|
+
|
|
54
|
+
const accessLogBucket = new SecureBucket(stack, 'AccessLogBucket', {
|
|
55
|
+
bucketType: SecureBucketType.ACCESS_LOG_BUCKET,
|
|
56
|
+
});
|
|
66
57
|
```
|
|
67
58
|
|
|
59
|
+
## Options
|
|
60
|
+
|
|
61
|
+
The `SecureBucket` constructor accepts `SecureBucketProps`. Since it extends `s3.BucketProps`, you can also use standard S3 bucket options such as `bucketName`, `versioned`, and `encryption`.
|
|
62
|
+
|
|
63
|
+
### SecureBucket-specific options
|
|
64
|
+
|
|
65
|
+
| Property | Type | Default | Description |
|
|
66
|
+
| --- | --- | --- | --- |
|
|
67
|
+
| `bucketType` | `SecureBucketType` | `SecureBucketType.DEFAULT_BUCKET` | Determines encryption and resource policy behavior. |
|
|
68
|
+
|
|
69
|
+
### SecureBucketType values
|
|
70
|
+
|
|
71
|
+
| Constant | Use case |
|
|
72
|
+
| --- | --- |
|
|
73
|
+
| `SecureBucketType.DEFAULT_BUCKET` | Default bucket when not using a custom qualifier |
|
|
74
|
+
| `SecureBucketType.ACCESS_LOG_BUCKET` | Centralized access log bucket for ALB / CloudFront / S3 (RETAIN + minimal log-delivery permissions) |
|
|
75
|
+
| `SecureBucketType.DEPLOYMENT_PIPELINE_ARTIFACT_BUCKET` | CDK pipeline artifact bucket (when using a custom qualifier) |
|
|
76
|
+
| `SecureBucketType.CLOUDFRONT_ORIGIN_BUCKET` | CloudFront origin bucket |
|
|
77
|
+
|
|
78
|
+
See [API.md](./API.md) for the full API reference.
|
|
79
|
+
|
|
80
|
+
## Requirements
|
|
81
|
+
|
|
82
|
+
- Node.js >= 20
|
|
83
|
+
- AWS CDK v2 (`aws-cdk-lib`)
|
|
84
|
+
|
|
68
85
|
## License
|
|
69
86
|
|
|
70
87
|
This project is licensed under the Apache-2.0 License.
|
package/lib/index.d.ts
CHANGED
|
@@ -17,6 +17,11 @@ export declare const SecureBucketType: {
|
|
|
17
17
|
* Select for the default bucket when not using a custom Qualifier.
|
|
18
18
|
*/
|
|
19
19
|
readonly DEFAULT_BUCKET: "DefaultBucket";
|
|
20
|
+
/**
|
|
21
|
+
* Select when using this bucket as a centralized access log bucket
|
|
22
|
+
* for ALB, CloudFront, S3 server access logging, and similar producers.
|
|
23
|
+
*/
|
|
24
|
+
readonly ACCESS_LOG_BUCKET: "AccessLogBucket";
|
|
20
25
|
};
|
|
21
26
|
/** Bucket type: one of the {@link SecureBucketType} constant values. */
|
|
22
27
|
export type SecureBucketType = typeof SecureBucketType[keyof typeof SecureBucketType];
|
package/lib/index.js
CHANGED
|
@@ -23,6 +23,11 @@ exports.SecureBucketType = {
|
|
|
23
23
|
* Select for the default bucket when not using a custom Qualifier.
|
|
24
24
|
*/
|
|
25
25
|
DEFAULT_BUCKET: 'DefaultBucket',
|
|
26
|
+
/**
|
|
27
|
+
* Select when using this bucket as a centralized access log bucket
|
|
28
|
+
* for ALB, CloudFront, S3 server access logging, and similar producers.
|
|
29
|
+
*/
|
|
30
|
+
ACCESS_LOG_BUCKET: 'AccessLogBucket',
|
|
26
31
|
};
|
|
27
32
|
/**
|
|
28
33
|
* An S3 bucket with secure defaults: private access, SSL enforced, public access blocked, and encryption required.
|
|
@@ -34,7 +39,7 @@ class SecureBucket extends s3.Bucket {
|
|
|
34
39
|
...props,
|
|
35
40
|
removalPolicy: aws_cdk_lib_1.RemovalPolicy.RETAIN,
|
|
36
41
|
encryption: (() => {
|
|
37
|
-
if (bucketType === exports.SecureBucketType.CLOUDFRONT_ORIGIN_BUCKET) {
|
|
42
|
+
if (bucketType === exports.SecureBucketType.CLOUDFRONT_ORIGIN_BUCKET || bucketType === exports.SecureBucketType.ACCESS_LOG_BUCKET) {
|
|
38
43
|
return s3.BucketEncryption.S3_MANAGED;
|
|
39
44
|
}
|
|
40
45
|
return props?.encryption || s3.BucketEncryption.KMS_MANAGED;
|
|
@@ -80,9 +85,50 @@ class SecureBucket extends s3.Bucket {
|
|
|
80
85
|
}));
|
|
81
86
|
}
|
|
82
87
|
}
|
|
88
|
+
if (bucketType === exports.SecureBucketType.ACCESS_LOG_BUCKET) {
|
|
89
|
+
// Allow ALB / NLB log delivery to put objects (no read or list)
|
|
90
|
+
this.addToResourcePolicy(new iam.PolicyStatement({
|
|
91
|
+
effect: iam.Effect.ALLOW,
|
|
92
|
+
principals: [
|
|
93
|
+
new iam.ServicePrincipal('logdelivery.elasticloadbalancing.amazonaws.com'),
|
|
94
|
+
],
|
|
95
|
+
actions: [
|
|
96
|
+
's3:PutObject',
|
|
97
|
+
],
|
|
98
|
+
resources: [
|
|
99
|
+
`${this.bucketArn}/AWSLogs/${account}/*`,
|
|
100
|
+
],
|
|
101
|
+
}));
|
|
102
|
+
// Allow CloudFront standard logging (v2) to write logs
|
|
103
|
+
this.addToResourcePolicy(new iam.PolicyStatement({
|
|
104
|
+
effect: iam.Effect.ALLOW,
|
|
105
|
+
principals: [
|
|
106
|
+
new iam.ServicePrincipal('delivery.logs.amazonaws.com'),
|
|
107
|
+
],
|
|
108
|
+
actions: [
|
|
109
|
+
's3:PutObject',
|
|
110
|
+
],
|
|
111
|
+
resources: [
|
|
112
|
+
`${this.bucketArn}/AWSLogs/${account}/*`,
|
|
113
|
+
],
|
|
114
|
+
}));
|
|
115
|
+
// Allow S3 server access logging to write logs when required by configuration
|
|
116
|
+
this.addToResourcePolicy(new iam.PolicyStatement({
|
|
117
|
+
effect: iam.Effect.ALLOW,
|
|
118
|
+
principals: [
|
|
119
|
+
new iam.ServicePrincipal('logging.s3.amazonaws.com'),
|
|
120
|
+
],
|
|
121
|
+
actions: [
|
|
122
|
+
's3:PutObject',
|
|
123
|
+
],
|
|
124
|
+
resources: [
|
|
125
|
+
`${this.bucketArn}/AWSLogs/${account}/*`,
|
|
126
|
+
],
|
|
127
|
+
}));
|
|
128
|
+
}
|
|
83
129
|
}
|
|
84
130
|
}
|
|
85
131
|
exports.SecureBucket = SecureBucket;
|
|
86
132
|
_a = JSII_RTTI_SYMBOL_1;
|
|
87
|
-
SecureBucket[_a] = { fqn: "aws-secure-bucket.SecureBucket", version: "3.0
|
|
88
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBNEU7QUFDNUUsMkNBQTJDO0FBQzNDLHlDQUF5QztBQUd6Qzs7R0FFRztBQUNVLFFBQUEsZ0JBQWdCLEdBQUc7SUFDOUI7OztPQUdHO0lBQ0gsbUNBQW1DLEVBQUUsa0NBQWtDO0lBQ3ZFOztPQUVHO0lBQ0gsd0JBQXdCLEVBQUUsd0JBQXdCO0lBQ2xEOztPQUVHO0lBQ0gsY0FBYyxFQUFFLGVBQWU7Q0FDdkIsQ0FBQztBQWlCWDs7R0FFRztBQUNILE1BQWEsWUFBYSxTQUFRLEVBQUUsQ0FBQyxNQUFNO0lBQ3pDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBeUI7UUFDakUsTUFBTSxVQUFVLEdBQUcsS0FBSyxFQUFFLFVBQVUsSUFBSSx3QkFBZ0IsQ0FBQyxjQUFjLENBQUM7UUFDeEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixHQUFHLEtBQUs7WUFDUixhQUFhLEVBQUUsMkJBQWEsQ0FBQyxNQUFNO1lBQ25DLFVBQVUsRUFBRSxDQUFDLEdBQUcsRUFBRTtnQkFDaEIsSUFBSSxVQUFVLEtBQUssd0JBQWdCLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztvQkFDN0QsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDO2dCQUN4QyxDQUFDO2dCQUNELE9BQU8sS0FBSyxFQUFFLFVBQVUsSUFBSSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDO1lBQzlELENBQUMsQ0FBQyxFQUFFO1lBQ0osYUFBYSxFQUFFLENBQUMsR0FBRyxFQUFFO2dCQUNuQixJQUFJLENBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRSxDQUFDO29CQUMxQixPQUFPLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUM7Z0JBQ3hDLENBQUM7Z0JBQ0QsT0FBTyxLQUFLLENBQUMsYUFBYSxDQUFDO1lBQzdCLENBQUMsQ0FBQyxFQUFFO1lBQ0osa0JBQWtCLEVBQUUsU0FBUztZQUM3QixnQkFBZ0IsRUFBRSxLQUFLO1lBQ3ZCLGlCQUFpQixFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTO1lBQ2pELFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSTtZQUNsRSxlQUFlLEVBQUUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3JCLElBQUksS0FBSyxFQUFFLGVBQWUsRUFBRSxDQUFDO29CQUMzQixPQUFPLEtBQUssQ0FBQyxlQUFlLENBQUM7Z0JBQy9CLENBQUM7Z0JBQ0QsT0FBTyxFQUFFLENBQUMsZUFBZSxDQUFDLHFCQUFxQixDQUFDO1lBQ2xELENBQUMsQ0FBQyxFQUFFO1NBQ0wsQ0FBQyxDQUFDO1FBRUgsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUE0QixDQUFDO1FBQ3pELElBQUksS0FBSyxFQUFFLGtCQUFrQixLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3ZDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyx1RUFBdUUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMvRyxDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ3ZDLE1BQU0sTUFBTSxHQUFHLG1CQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUVyQyxJQUFJLFVBQVUsS0FBSyx3QkFBZ0IsQ0FBQyxtQ0FBbUMsRUFBRSxDQUFDO1lBRXhFLE1BQU0sU0FBUyxHQUFHLG1CQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQztZQUVoRSxJQUFJLFNBQVMsSUFBSSxDQUFDLFNBQVMsSUFBSSxxQ0FBdUIsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUM7Z0JBQzFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUM7b0JBQy9DLE9BQU8sRUFBRTt3QkFDUCxNQUFNO3FCQUNQO29CQUNELFNBQVMsRUFBRTt3QkFDVCxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUU7d0JBQ25CLEdBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSTtxQkFDdEI7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLElBQUksR0FBRyxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsT0FBTyxhQUFhLFNBQVMsZ0JBQWdCLE9BQU8sSUFBSSxNQUFNLEVBQUUsQ0FBQztxQkFDdkc7aUJBQ0YsQ0FBQyxDQUFDLENBQUM7WUFDTixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7O0FBMURILG9DQTJEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlZmF1bHRTdGFja1N5bnRoZXNpemVyLCBSZW1vdmFsUG9saWN5LCBTdGFjayB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCAqIGFzIHMzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuLyoqXG4gKiBCdWNrZXQgdHlwZSBjb25zdGFudHMuIFVzZSB0aGVzZSB2YWx1ZXMgZm9yIHRoZSB7QGxpbmsgU2VjdXJlQnVja2V0UHJvcHMuYnVja2V0VHlwZX0gcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBjb25zdCBTZWN1cmVCdWNrZXRUeXBlID0ge1xuICAvKipcbiAgICogU2VsZWN0IHdoZW4gdXNpbmcgdGhpcyBidWNrZXQgYXMgdGhlIENESyBwaXBlbGluZSBhcnRpZmFjdCBidWNrZXQgd2l0aCBhIGN1c3RvbSBRdWFsaWZpZXJcbiAgICogKHNpbmdsZS1yZWdpb24gb3IgbXVsdGktcmVnaW9uIGRlcGxveW1lbnQpLlxuICAgKi9cbiAgREVQTE9ZTUVOVF9QSVBFTElORV9BUlRJRkFDVF9CVUNLRVQ6ICdEZXBsb3ltZW50UGlwZWxpbmVBcnRpZmFjdEJ1Y2tldCcsXG4gIC8qKlxuICAgKiBTZWxlY3Qgd2hlbiB1c2luZyB0aGlzIGJ1Y2tldCBhcyB0aGUgQ2xvdWRGcm9udCBvcmlnaW4uXG4gICAqL1xuICBDTE9VREZST05UX09SSUdJTl9CVUNLRVQ6ICdDbG91ZEZyb250T3JpZ2luQnVja2V0JyxcbiAgLyoqXG4gICAqIFNlbGVjdCBmb3IgdGhlIGRlZmF1bHQgYnVja2V0IHdoZW4gbm90IHVzaW5nIGEgY3VzdG9tIFF1YWxpZmllci5cbiAgICovXG4gIERFRkFVTFRfQlVDS0VUOiAnRGVmYXVsdEJ1Y2tldCcsXG59IGFzIGNvbnN0O1xuXG4vKiogQnVja2V0IHR5cGU6IG9uZSBvZiB0aGUge0BsaW5rIFNlY3VyZUJ1Y2tldFR5cGV9IGNvbnN0YW50IHZhbHVlcy4gKi9cbmV4cG9ydCB0eXBlIFNlY3VyZUJ1Y2tldFR5cGUgPSB0eXBlb2YgU2VjdXJlQnVja2V0VHlwZVtrZXlvZiB0eXBlb2YgU2VjdXJlQnVja2V0VHlwZV07XG5cbi8qKlxuICogUHJvcHMgZm9yIHtAbGluayBTZWN1cmVCdWNrZXR9LiBFeHRlbmRzIGBzMy5CdWNrZXRQcm9wc2Agd2l0aCBhIGJ1Y2tldCB0eXBlIGZvciBzZWN1cmUgZGVmYXVsdHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VjdXJlQnVja2V0UHJvcHMgZXh0ZW5kcyBzMy5CdWNrZXRQcm9wcyB7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBidWNrZXQuIERldGVybWluZXMgZW5jcnlwdGlvbiBhbmQgcmVzb3VyY2UgcG9saWN5IGJlaGF2aW9yLlxuICAgKiBAZGVmYXVsdCBTZWN1cmVCdWNrZXRUeXBlLkRFRkFVTFRfQlVDS0VUXG4gICAqL1xuICByZWFkb25seSBidWNrZXRUeXBlPzogU2VjdXJlQnVja2V0VHlwZTtcbn1cblxuLyoqXG4gKiBBbiBTMyBidWNrZXQgd2l0aCBzZWN1cmUgZGVmYXVsdHM6IHByaXZhdGUgYWNjZXNzLCBTU0wgZW5mb3JjZWQsIHB1YmxpYyBhY2Nlc3MgYmxvY2tlZCwgYW5kIGVuY3J5cHRpb24gcmVxdWlyZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBTZWN1cmVCdWNrZXQgZXh0ZW5kcyBzMy5CdWNrZXQge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wcz86IFNlY3VyZUJ1Y2tldFByb3BzKSB7XG4gICAgY29uc3QgYnVja2V0VHlwZSA9IHByb3BzPy5idWNrZXRUeXBlIHx8IFNlY3VyZUJ1Y2tldFR5cGUuREVGQVVMVF9CVUNLRVQ7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuUkVUQUlOLFxuICAgICAgZW5jcnlwdGlvbjogKCgpID0+IHtcbiAgICAgICAgaWYgKGJ1Y2tldFR5cGUgPT09IFNlY3VyZUJ1Y2tldFR5cGUuQ0xPVURGUk9OVF9PUklHSU5fQlVDS0VUKSB7XG4gICAgICAgICAgcmV0dXJuIHMzLkJ1Y2tldEVuY3J5cHRpb24uUzNfTUFOQUdFRDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvcHM/LmVuY3J5cHRpb24gfHwgczMuQnVja2V0RW5jcnlwdGlvbi5LTVNfTUFOQUdFRDtcbiAgICAgIH0pKCksXG4gICAgICBhY2Nlc3NDb250cm9sOiAoKCkgPT4ge1xuICAgICAgICBpZiAoIXByb3BzPy5hY2Nlc3NDb250cm9sKSB7XG4gICAgICAgICAgcmV0dXJuIHMzLkJ1Y2tldEFjY2Vzc0NvbnRyb2wuUFJJVkFURTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvcHMuYWNjZXNzQ29udHJvbDtcbiAgICAgIH0pKCksXG4gICAgICBldmVudEJyaWRnZUVuYWJsZWQ6IHVuZGVmaW5lZCxcbiAgICAgIHB1YmxpY1JlYWRBY2Nlc3M6IGZhbHNlLFxuICAgICAgYmxvY2tQdWJsaWNBY2Nlc3M6IHMzLkJsb2NrUHVibGljQWNjZXNzLkJMT0NLX0FMTCxcbiAgICAgIGVuZm9yY2VTU0w6IHRydWUsXG4gICAgICB2ZXJzaW9uZWQ6IHByb3BzPy52ZXJzaW9uZWQgIT09IHVuZGVmaW5lZCA/IHByb3BzLnZlcnNpb25lZCA6IHRydWUsXG4gICAgICBvYmplY3RPd25lcnNoaXA6ICgoKSA9PiB7XG4gICAgICAgIGlmIChwcm9wcz8ub2JqZWN0T3duZXJzaGlwKSB7XG4gICAgICAgICAgcmV0dXJuIHByb3BzLm9iamVjdE93bmVyc2hpcDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gczMuT2JqZWN0T3duZXJzaGlwLkJVQ0tFVF9PV05FUl9FTkZPUkNFRDtcbiAgICAgIH0pKCksXG4gICAgfSk7XG5cbiAgICBjb25zdCBjZm5CdWNrZXQgPSB0aGlzLm5vZGUuZGVmYXVsdENoaWxkIGFzIHMzLkNmbkJ1Y2tldDtcbiAgICBpZiAocHJvcHM/LmV2ZW50QnJpZGdlRW5hYmxlZCA9PT0gdHJ1ZSkge1xuICAgICAgY2ZuQnVja2V0LmFkZFByb3BlcnR5T3ZlcnJpZGUoJ05vdGlmaWNhdGlvbkNvbmZpZ3VyYXRpb24uRXZlbnRCcmlkZ2VDb25maWd1cmF0aW9uLkV2ZW50QnJpZGdlRW5hYmxlZCcsIHRydWUpO1xuICAgIH1cblxuICAgIGNvbnN0IGFjY291bnQgPSBTdGFjay5vZih0aGlzKS5hY2NvdW50O1xuICAgIGNvbnN0IHJlZ2lvbiA9IFN0YWNrLm9mKHRoaXMpLnJlZ2lvbjtcblxuICAgIGlmIChidWNrZXRUeXBlID09PSBTZWN1cmVCdWNrZXRUeXBlLkRFUExPWU1FTlRfUElQRUxJTkVfQVJUSUZBQ1RfQlVDS0VUKSB7XG5cbiAgICAgIGNvbnN0IHF1YWxpZmllciA9IFN0YWNrLm9mKHRoaXMpLnN5bnRoZXNpemVyLmJvb3RzdHJhcFF1YWxpZmllcjtcblxuICAgICAgaWYgKHF1YWxpZmllciAmJiAocXVhbGlmaWVyICE9IERlZmF1bHRTdGFja1N5bnRoZXNpemVyLkRFRkFVTFRfUVVBTElGSUVSKSkge1xuICAgICAgICB0aGlzLmFkZFRvUmVzb3VyY2VQb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICdzMzoqJyxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgYCR7dGhpcy5idWNrZXRBcm59YCxcbiAgICAgICAgICAgIGAke3RoaXMuYnVja2V0QXJufS8qYCxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHByaW5jaXBhbHM6IFtcbiAgICAgICAgICAgIG5ldyBpYW0uQXJuUHJpbmNpcGFsKGBhcm46YXdzOmlhbTo6JHthY2NvdW50fTpyb2xlL2Nkay0ke3F1YWxpZmllcn0tZGVwbG95LXJvbGUtJHthY2NvdW50fS0ke3JlZ2lvbn1gKSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59Il19
|
|
133
|
+
SecureBucket[_a] = { fqn: "aws-secure-bucket.SecureBucket", version: "3.1.0" };
|
|
134
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBNEU7QUFDNUUsMkNBQTJDO0FBQzNDLHlDQUF5QztBQUd6Qzs7R0FFRztBQUNVLFFBQUEsZ0JBQWdCLEdBQUc7SUFDOUI7OztPQUdHO0lBQ0gsbUNBQW1DLEVBQUUsa0NBQWtDO0lBQ3ZFOztPQUVHO0lBQ0gsd0JBQXdCLEVBQUUsd0JBQXdCO0lBQ2xEOztPQUVHO0lBQ0gsY0FBYyxFQUFFLGVBQWU7SUFDL0I7OztPQUdHO0lBQ0gsaUJBQWlCLEVBQUUsaUJBQWlCO0NBQzVCLENBQUM7QUFpQlg7O0dBRUc7QUFDSCxNQUFhLFlBQWEsU0FBUSxFQUFFLENBQUMsTUFBTTtJQUN6QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXlCO1FBQ2pFLE1BQU0sVUFBVSxHQUFHLEtBQUssRUFBRSxVQUFVLElBQUksd0JBQWdCLENBQUMsY0FBYyxDQUFDO1FBQ3hFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsR0FBRyxLQUFLO1lBQ1IsYUFBYSxFQUFFLDJCQUFhLENBQUMsTUFBTTtZQUNuQyxVQUFVLEVBQUUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2hCLElBQUksVUFBVSxLQUFLLHdCQUFnQixDQUFDLHdCQUF3QixJQUFJLFVBQVUsS0FBSyx3QkFBZ0IsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO29CQUNsSCxPQUFPLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUM7Z0JBQ3hDLENBQUM7Z0JBQ0QsT0FBTyxLQUFLLEVBQUUsVUFBVSxJQUFJLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUM7WUFDOUQsQ0FBQyxDQUFDLEVBQUU7WUFDSixhQUFhLEVBQUUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ25CLElBQUksQ0FBQyxLQUFLLEVBQUUsYUFBYSxFQUFFLENBQUM7b0JBQzFCLE9BQU8s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QWdCLENBQUMsNkJBQTZCLENBQUM7aUJBQ3hEO2dCQUNELE9BQU8sRUFBRTtvQkFDUCxjQUFjO2lCQUNmO2dCQUNELFNBQVMsRUFBRTtvQkFDVCxHQUFHLElBQUksQ0FBQyxTQUFTLFlBQVksT0FBTyxJQUFJO2lCQUN6QzthQUNGLENBQUMsQ0FBQyxDQUFDO1lBRUosOEVBQThFO1lBQzlFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUM7Z0JBQy9DLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUs7Z0JBQ3hCLFVBQVUsRUFBRTtvQkFDVixJQUFJLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQywwQkFBMEIsQ0FBQztpQkFDckQ7Z0JBQ0QsT0FBTyxFQUFFO29CQUNQLGNBQWM7aUJBQ2Y7Z0JBQ0QsU0FBUyxFQUFFO29CQUNULEdBQUcsSUFBSSxDQUFDLFNBQVMsWUFBWSxPQUFPLElBQUk7aUJBQ3pDO2FBQ0YsQ0FBQyxDQUFDLENBQUM7UUFDTixDQUFDO0lBQ0gsQ0FBQzs7QUF0R0gsb0NBdUdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVmYXVsdFN0YWNrU3ludGhlc2l6ZXIsIFJlbW92YWxQb2xpY3ksIFN0YWNrIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0ICogYXMgczMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG4vKipcbiAqIEJ1Y2tldCB0eXBlIGNvbnN0YW50cy4gVXNlIHRoZXNlIHZhbHVlcyBmb3IgdGhlIHtAbGluayBTZWN1cmVCdWNrZXRQcm9wcy5idWNrZXRUeXBlfSBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGNvbnN0IFNlY3VyZUJ1Y2tldFR5cGUgPSB7XG4gIC8qKlxuICAgKiBTZWxlY3Qgd2hlbiB1c2luZyB0aGlzIGJ1Y2tldCBhcyB0aGUgQ0RLIHBpcGVsaW5lIGFydGlmYWN0IGJ1Y2tldCB3aXRoIGEgY3VzdG9tIFF1YWxpZmllclxuICAgKiAoc2luZ2xlLXJlZ2lvbiBvciBtdWx0aS1yZWdpb24gZGVwbG95bWVudCkuXG4gICAqL1xuICBERVBMT1lNRU5UX1BJUEVMSU5FX0FSVElGQUNUX0JVQ0tFVDogJ0RlcGxveW1lbnRQaXBlbGluZUFydGlmYWN0QnVja2V0JyxcbiAgLyoqXG4gICAqIFNlbGVjdCB3aGVuIHVzaW5nIHRoaXMgYnVja2V0IGFzIHRoZSBDbG91ZEZyb250IG9yaWdpbi5cbiAgICovXG4gIENMT1VERlJPTlRfT1JJR0lOX0JVQ0tFVDogJ0Nsb3VkRnJvbnRPcmlnaW5CdWNrZXQnLFxuICAvKipcbiAgICogU2VsZWN0IGZvciB0aGUgZGVmYXVsdCBidWNrZXQgd2hlbiBub3QgdXNpbmcgYSBjdXN0b20gUXVhbGlmaWVyLlxuICAgKi9cbiAgREVGQVVMVF9CVUNLRVQ6ICdEZWZhdWx0QnVja2V0JyxcbiAgLyoqXG4gICAqIFNlbGVjdCB3aGVuIHVzaW5nIHRoaXMgYnVja2V0IGFzIGEgY2VudHJhbGl6ZWQgYWNjZXNzIGxvZyBidWNrZXRcbiAgICogZm9yIEFMQiwgQ2xvdWRGcm9udCwgUzMgc2VydmVyIGFjY2VzcyBsb2dnaW5nLCBhbmQgc2ltaWxhciBwcm9kdWNlcnMuXG4gICAqL1xuICBBQ0NFU1NfTE9HX0JVQ0tFVDogJ0FjY2Vzc0xvZ0J1Y2tldCcsXG59IGFzIGNvbnN0O1xuXG4vKiogQnVja2V0IHR5cGU6IG9uZSBvZiB0aGUge0BsaW5rIFNlY3VyZUJ1Y2tldFR5cGV9IGNvbnN0YW50IHZhbHVlcy4gKi9cbmV4cG9ydCB0eXBlIFNlY3VyZUJ1Y2tldFR5cGUgPSB0eXBlb2YgU2VjdXJlQnVja2V0VHlwZVtrZXlvZiB0eXBlb2YgU2VjdXJlQnVja2V0VHlwZV07XG5cbi8qKlxuICogUHJvcHMgZm9yIHtAbGluayBTZWN1cmVCdWNrZXR9LiBFeHRlbmRzIGBzMy5CdWNrZXRQcm9wc2Agd2l0aCBhIGJ1Y2tldCB0eXBlIGZvciBzZWN1cmUgZGVmYXVsdHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VjdXJlQnVja2V0UHJvcHMgZXh0ZW5kcyBzMy5CdWNrZXRQcm9wcyB7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBidWNrZXQuIERldGVybWluZXMgZW5jcnlwdGlvbiBhbmQgcmVzb3VyY2UgcG9saWN5IGJlaGF2aW9yLlxuICAgKiBAZGVmYXVsdCBTZWN1cmVCdWNrZXRUeXBlLkRFRkFVTFRfQlVDS0VUXG4gICAqL1xuICByZWFkb25seSBidWNrZXRUeXBlPzogU2VjdXJlQnVja2V0VHlwZTtcbn1cblxuLyoqXG4gKiBBbiBTMyBidWNrZXQgd2l0aCBzZWN1cmUgZGVmYXVsdHM6IHByaXZhdGUgYWNjZXNzLCBTU0wgZW5mb3JjZWQsIHB1YmxpYyBhY2Nlc3MgYmxvY2tlZCwgYW5kIGVuY3J5cHRpb24gcmVxdWlyZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBTZWN1cmVCdWNrZXQgZXh0ZW5kcyBzMy5CdWNrZXQge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wcz86IFNlY3VyZUJ1Y2tldFByb3BzKSB7XG4gICAgY29uc3QgYnVja2V0VHlwZSA9IHByb3BzPy5idWNrZXRUeXBlIHx8IFNlY3VyZUJ1Y2tldFR5cGUuREVGQVVMVF9CVUNLRVQ7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuUkVUQUlOLFxuICAgICAgZW5jcnlwdGlvbjogKCgpID0+IHtcbiAgICAgICAgaWYgKGJ1Y2tldFR5cGUgPT09IFNlY3VyZUJ1Y2tldFR5cGUuQ0xPVURGUk9OVF9PUklHSU5fQlVDS0VUIHx8IGJ1Y2tldFR5cGUgPT09IFNlY3VyZUJ1Y2tldFR5cGUuQUNDRVNTX0xPR19CVUNLRVQpIHtcbiAgICAgICAgICByZXR1cm4gczMuQnVja2V0RW5jcnlwdGlvbi5TM19NQU5BR0VEO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9wcz8uZW5jcnlwdGlvbiB8fCBzMy5CdWNrZXRFbmNyeXB0aW9uLktNU19NQU5BR0VEO1xuICAgICAgfSkoKSxcbiAgICAgIGFjY2Vzc0NvbnRyb2w6ICgoKSA9PiB7XG4gICAgICAgIGlmICghcHJvcHM/LmFjY2Vzc0NvbnRyb2wpIHtcbiAgICAgICAgICByZXR1cm4gczMuQnVja2V0QWNjZXNzQ29udHJvbC5QUklWQVRFO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9wcy5hY2Nlc3NDb250cm9sO1xuICAgICAgfSkoKSxcbiAgICAgIGV2ZW50QnJpZGdlRW5hYmxlZDogdW5kZWZpbmVkLFxuICAgICAgcHVibGljUmVhZEFjY2VzczogZmFsc2UsXG4gICAgICBibG9ja1B1YmxpY0FjY2VzczogczMuQmxvY2tQdWJsaWNBY2Nlc3MuQkxPQ0tfQUxMLFxuICAgICAgZW5mb3JjZVNTTDogdHJ1ZSxcbiAgICAgIHZlcnNpb25lZDogcHJvcHM/LnZlcnNpb25lZCAhPT0gdW5kZWZpbmVkID8gcHJvcHMudmVyc2lvbmVkIDogdHJ1ZSxcbiAgICAgIG9iamVjdE93bmVyc2hpcDogKCgpID0+IHtcbiAgICAgICAgaWYgKHByb3BzPy5vYmplY3RPd25lcnNoaXApIHtcbiAgICAgICAgICByZXR1cm4gcHJvcHMub2JqZWN0T3duZXJzaGlwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzMy5PYmplY3RPd25lcnNoaXAuQlVDS0VUX09XTkVSX0VORk9SQ0VEO1xuICAgICAgfSkoKSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGNmbkJ1Y2tldCA9IHRoaXMubm9kZS5kZWZhdWx0Q2hpbGQgYXMgczMuQ2ZuQnVja2V0O1xuICAgIGlmIChwcm9wcz8uZXZlbnRCcmlkZ2VFbmFibGVkID09PSB0cnVlKSB7XG4gICAgICBjZm5CdWNrZXQuYWRkUHJvcGVydHlPdmVycmlkZSgnTm90aWZpY2F0aW9uQ29uZmlndXJhdGlvbi5FdmVudEJyaWRnZUNvbmZpZ3VyYXRpb24uRXZlbnRCcmlkZ2VFbmFibGVkJywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgY29uc3QgYWNjb3VudCA9IFN0YWNrLm9mKHRoaXMpLmFjY291bnQ7XG4gICAgY29uc3QgcmVnaW9uID0gU3RhY2sub2YodGhpcykucmVnaW9uO1xuXG4gICAgaWYgKGJ1Y2tldFR5cGUgPT09IFNlY3VyZUJ1Y2tldFR5cGUuREVQTE9ZTUVOVF9QSVBFTElORV9BUlRJRkFDVF9CVUNLRVQpIHtcblxuICAgICAgY29uc3QgcXVhbGlmaWVyID0gU3RhY2sub2YodGhpcykuc3ludGhlc2l6ZXIuYm9vdHN0cmFwUXVhbGlmaWVyO1xuXG4gICAgICBpZiAocXVhbGlmaWVyICYmIChxdWFsaWZpZXIgIT0gRGVmYXVsdFN0YWNrU3ludGhlc2l6ZXIuREVGQVVMVF9RVUFMSUZJRVIpKSB7XG4gICAgICAgIHRoaXMuYWRkVG9SZXNvdXJjZVBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgJ3MzOionLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgICBgJHt0aGlzLmJ1Y2tldEFybn1gLFxuICAgICAgICAgICAgYCR7dGhpcy5idWNrZXRBcm59LypgLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcHJpbmNpcGFsczogW1xuICAgICAgICAgICAgbmV3IGlhbS5Bcm5QcmluY2lwYWwoYGFybjphd3M6aWFtOjoke2FjY291bnR9OnJvbGUvY2RrLSR7cXVhbGlmaWVyfS1kZXBsb3ktcm9sZS0ke2FjY291bnR9LSR7cmVnaW9ufWApLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYnVja2V0VHlwZSA9PT0gU2VjdXJlQnVja2V0VHlwZS5BQ0NFU1NfTE9HX0JVQ0tFVCkge1xuICAgICAgLy8gQWxsb3cgQUxCIC8gTkxCIGxvZyBkZWxpdmVyeSB0byBwdXQgb2JqZWN0cyAobm8gcmVhZCBvciBsaXN0KVxuICAgICAgdGhpcy5hZGRUb1Jlc291cmNlUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICBwcmluY2lwYWxzOiBbXG4gICAgICAgICAgbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdsb2dkZWxpdmVyeS5lbGFzdGljbG9hZGJhbGFuY2luZy5hbWF6b25hd3MuY29tJyksXG4gICAgICAgIF0sXG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAnczM6UHV0T2JqZWN0JyxcbiAgICAgICAgXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgYCR7dGhpcy5idWNrZXRBcm59L0FXU0xvZ3MvJHthY2NvdW50fS8qYCxcbiAgICAgICAgXSxcbiAgICAgIH0pKTtcblxuICAgICAgLy8gQWxsb3cgQ2xvdWRGcm9udCBzdGFuZGFyZCBsb2dnaW5nICh2MikgdG8gd3JpdGUgbG9nc1xuICAgICAgdGhpcy5hZGRUb1Jlc291cmNlUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICBwcmluY2lwYWxzOiBbXG4gICAgICAgICAgbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdkZWxpdmVyeS5sb2dzLmFtYXpvbmF3cy5jb20nKSxcbiAgICAgICAgXSxcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICdzMzpQdXRPYmplY3QnLFxuICAgICAgICBdLFxuICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICBgJHt0aGlzLmJ1Y2tldEFybn0vQVdTTG9ncy8ke2FjY291bnR9LypgLFxuICAgICAgICBdLFxuICAgICAgfSkpO1xuXG4gICAgICAvLyBBbGxvdyBTMyBzZXJ2ZXIgYWNjZXNzIGxvZ2dpbmcgdG8gd3JpdGUgbG9ncyB3aGVuIHJlcXVpcmVkIGJ5IGNvbmZpZ3VyYXRpb25cbiAgICAgIHRoaXMuYWRkVG9SZXNvdXJjZVBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgcHJpbmNpcGFsczogW1xuICAgICAgICAgIG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnbG9nZ2luZy5zMy5hbWF6b25hd3MuY29tJyksXG4gICAgICAgIF0sXG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAnczM6UHV0T2JqZWN0JyxcbiAgICAgICAgXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgYCR7dGhpcy5idWNrZXRBcm59L0FXU0xvZ3MvJHthY2NvdW50fS8qYCxcbiAgICAgICAgXSxcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1cbn0iXX0=
|