@aws-solutions-constructs/aws-apigateway-dynamodb 2.85.2 → 2.85.4

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 CHANGED
@@ -8,7 +8,7 @@
8
8
  "url": "https://aws.amazon.com"
9
9
  },
10
10
  "dependencies": {
11
- "@aws-solutions-constructs/core": "2.85.2",
11
+ "@aws-solutions-constructs/core": "2.85.4",
12
12
  "aws-cdk-lib": "^2.193.0",
13
13
  "constructs": "^10.0.0"
14
14
  },
@@ -3993,7 +3993,7 @@
3993
3993
  },
3994
3994
  "name": "@aws-solutions-constructs/aws-apigateway-dynamodb",
3995
3995
  "readme": {
3996
- "markdown": "# aws-apigateway-dynamodb module\n<!--BEGIN STABILITY BANNER-->\n\n---\n\n![Stability: Experimental](https://img.shields.io/badge/stability-Experimental-important.svg?style=for-the-badge)\n\n> All classes are under active development and subject to non-backward compatible changes or removal in any\n> future version. These are not subject to the [Semantic Versioning](https://semver.org/) model.\n> This means that while you may use them, you may need to update your source code when upgrading to a newer version of this package.\n\n---\n<!--END STABILITY BANNER-->\n\n| **Reference Documentation**:| <span style=\"font-weight: normal\">https://docs.aws.amazon.com/solutions/latest/constructs/</span>|\n|:-------------|:-------------|\n<div style=\"height:8px\"></div>\n\n\n| **Language** | **Package** |\n|:-------------|-----------------|\n|![Python Logo](https://docs.aws.amazon.com/cdk/api/latest/img/python32.png) Python|`aws_solutions_constructs.aws_apigateway_dynamodb`|\n|![Typescript Logo](https://docs.aws.amazon.com/cdk/api/latest/img/typescript32.png) Typescript|`@aws-solutions-constructs/aws-apigateway-dynamodb`|\n|![Java Logo](https://docs.aws.amazon.com/cdk/api/latest/img/java32.png) Java|`software.amazon.awsconstructs.services.apigatewaydynamodb`|\n\n## Overview\nThis AWS Solutions Construct implements an Amazon API Gateway REST API connected to Amazon DynamoDB table.\n\nHere is a minimal deployable pattern definition in:\n\nTypescript\n``` typescript\nimport { Construct } from 'constructs';\nimport { Stack, StackProps } from 'aws-cdk-lib';\nimport { ApiGatewayToDynamoDBProps, ApiGatewayToDynamoDB } from \"@aws-solutions-constructs/aws-apigateway-dynamodb\";\n\nnew ApiGatewayToDynamoDB(this, 'test-api-gateway-dynamodb-default', {});\n```\n\nPython\n``` python\nfrom aws_solutions_constructs.aws_apigateway_dynamodb import ApiGatewayToDynamoDB\nfrom aws_cdk import Stack\nfrom constructs import Construct\n\nApiGatewayToDynamoDB(self, 'test-api-gateway-dynamodb-default')\n```\n\nJava\n``` java\nimport software.constructs.Construct;\n\nimport software.amazon.awscdk.Stack;\nimport software.amazon.awscdk.StackProps;\nimport software.amazon.awsconstructs.services.apigatewaydynamodb.*;\n\nnew ApiGatewayToDynamoDB(this, \"test-api-gateway-dynamodb-default\", new ApiGatewayToDynamoDBProps.Builder()\n .build());\n```\n\n## Pattern Construct Props\n\n| **Name** | **Type** | **Description** |\n|:-------------|:----------------|-----------------|\n|dynamoTableProps?|[`dynamodb.TableProps`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_dynamodb.TableProps.html)|Optional user provided props to override the default props for DynamoDB Table.|\n|existingTableObj?|[`dynamodb.Table`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_dynamodb.Table.html)|Existing instance of DynamoDB table object, providing both this and `dynamoTableProps` will cause an error.|\n|apiGatewayProps?|[`api.RestApiProps`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_apigateway.RestApiProps.html)|Optional user-provided props to override the default props for the API Gateway.|\n|createUsagePlan?|boolean|Whether to create a Usage Plan attached to the API. Must be true if apiGatewayProps.defaultMethodOptions.apiKeyRequired is true. @default - true (to match legacy behavior)|\n|resourceName?|`string`|Optional name of the resource on the API Gateway. Defaults to the table's partitionKeyName|\n|allowCreateOperation?|`boolean`|Whether to deploy an API Gateway Method for POST HTTP operations on the DynamoDB table (i.e. dynamodb:PutItem).|\n|createRequestTemplate?|`string`|API Gateway Request Template for the create method for the default `application/json` content-type. This property is required if the `allowCreateOperation` property is set to true.|\n|additionalCreateRequestTemplates?|`{ [contentType: string]: string; }`|Optional Create Request Templates for content-types other than `application/json`. Use the `createRequestTemplate` property to set the request template for the `application/json` content-type. This property can only be specified if the `allowCreateOperation` property is set to true.|\n|createIntegrationResponses?|[`api.IntegrationResponses[]`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_apigateway.IntegrationResponse.html)|Optional, custom API Gateway Integration Response for the create method. This property can only be specified if the `allowCreateOperation` property is set to true.|\n|createMethodResponses?|[`api.MethodResponses[]`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_apigateway.MethodResponse.html)| Optional, custom API Gateway Method Responses for the create action. default: [{ statusCode: \"200\", responseParameters: { \"method.response.header.Content-Type\": true }},{ statusCode: \"500\", responseParameters: { \"method.response.header.Content-Type\": true } } ]|\n|allowReadOperation?|`boolean`|Whether to deploy an API Gateway Method for GET HTTP operations on DynamoDB table (i.e. dynamodb:Query).|\n|readRequestTemplate?|`string`|API Gateway Request Template for the read method for the default `application/json` content-type. The default template only supports a partition key and not partition + sort keys.|\n|additionalReadRequestTemplates?|`{ [contentType: string]: string; }`|Optional Read Request Templates for content-types other than `application/json`. Use the `readRequestTemplate` property to set the request template for the `application/json` content-type.|\n|readIntegrationResponses?|[`api.IntegrationResponses[]`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_apigateway.IntegrationResponse.html)|Optional, custom API Gateway Integration Response for the read method.|\n|allowUpdateOperation?|`boolean`|Whether to deploy API Gateway Method for PUT HTTP operations on DynamoDB table (i.e. dynamodb:UpdateItem).|\n|readMethodResponses?|[`api.MethodResponses[]`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_apigateway.MethodResponse.html)| Optional, custom API Gateway Method Responses for the read action. default: [{ statusCode: \"200\", responseParameters: { \"method.response.header.Content-Type\": true }},{ statusCode: \"500\", responseParameters: { \"method.response.header.Content-Type\": true } } ]|\n|updateRequestTemplate?|`string`|API Gateway Request Template for the update method. This property is required if the `allowUpdateOperation` property is set to true.|\n|additionalUpdateRequestTemplates?|`{ [contentType: string]: string; }`|Optional Update Request Templates for content-types other than `application/json`. Use the `updateRequestTemplate` property to set the request template for the `application/json` content-type. This property can only be specified if the `allowUpdateOperation` property is set to true.|\n|updateIntegrationResponses?|[`api.IntegrationResponses[]`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_apigateway.IntegrationResponse.html)|Optional, custom API Gateway Integration Response for the update method. This property can only be specified if the `allowUpdateOperation` property is set to true.|\n|updateMethodResponses?|[`api.MethodResponses[]`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_apigateway.MethodResponse.html)| Optional, custom API Gateway Method Responses for the update action. default: [{ statusCode: \"200\", responseParameters: { \"method.response.header.Content-Type\": true }},{ statusCode: \"500\", responseParameters: { \"method.response.header.Content-Type\": true } } ]|\n|allowDeleteOperation?|`boolean`|Whether to deploy API Gateway Method for DELETE HTTP operations on DynamoDB table (i.e. dynamodb:DeleteItem).|\n|deleteRequestTemplate?|`string`|API Gateway Request Template for the delete method for the default `application/json` content-type. |\n|additionalDeleteRequestTemplates?|`{ [contentType: string]: string; }`|Optional Delete request templates for content-types other than `application/json`. Use the `deleteRequestTemplate` property to set the request template for the `application/json` content-type. This property can only be specified if the `allowDeleteOperation` property is set to true.|\n|deleteIntegrationResponses?|[`api.IntegrationResponses[]`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_apigateway.IntegrationResponse.html)|Optional, custom API Gateway Integration Response for the delete method. This property can only be specified if the `allowDeleteOperation` property is set to true.|\n|deleteMethodResponses?|[`api.MethodResponses[]`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_apigateway.MethodResponse.html)| Optional, custom API Gateway Method Responses for the delete action. default: [{ statusCode: \"200\", responseParameters: { \"method.response.header.Content-Type\": true }},{ statusCode: \"500\", responseParameters: { \"method.response.header.Content-Type\": true } } ]|\n|logGroupProps?|[`logs.LogGroupProps`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_logs.LogGroupProps.html)|User provided props to override the default props for for the CloudWatchLogs LogGroup.|\n\n## Pattern Properties\n\n| **Name** | **Type** | **Description** |\n|:-------------|:----------------|-----------------|\n|apiGateway|[`api.RestApi`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_apigateway.RestApi.html)|Returns an instance of the api.RestApi created by the construct.|\n|apiGatewayRole|[`iam.Role`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_iam.Role.html)|Returns an instance of the iam.Role created by the construct for API Gateway.|\n|dynamoTable|[`dynamodb.Table`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_dynamodb.Table.html)|Returns an instance of dynamodb.Table created by the construct.|\n|apiGatewayCloudWatchRole?|[`iam.Role`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_iam.Role.html)|Returns an instance of the iam.Role created by the construct for API Gateway for CloudWatch access.|\n|apiGatewayLogGroup|[`logs.LogGroup`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_logs.LogGroup.html)|Returns an instance of the LogGroup created by the construct for API Gateway access logging to CloudWatch.|\n\n## API Gateway Request/Response Template Properties Overview\nThis construct allows you to implement four DynamoDB API operations, CREATE/READ/UPDATE/DELETE (corresponding the HTTP POST/GET/PUT/DELETE requests respectively). They are completely independent and each follows the same pattern:\n* Setting `allowCreateOperation` to true will implement the `application/json` content-type with default request and response templates\n* The request template for `application/json` requests can be customized using the `createRequestTemplate` prop value\n* *Additional* request templates can be specified using the `additionalCreateRequestTemplates` prop value. Note - these DO NOT replace the `application/json` content-type\n* Customized integration responses can be specified for any content type in the `createIntegrationResponses` prop value.\n\nSupplying any of these values without setting allowCreateOperation to true will result in an error. This pattern is the same for all four API operations.\n\n## Default settings\n\nOut of the box implementation of the Construct without any override will set the following defaults:\n\n### Amazon API Gateway\n* Deploy an edge-optimized API endpoint\n* Enable CloudWatch logging for API Gateway\n* Configure least privilege access IAM role for API Gateway\n* Set the default authorizationType for all API methods to IAM\n* Enable X-Ray Tracing\n\n### Amazon DynamoDB Table\n* Set the billing mode for DynamoDB Table to On-Demand (Pay per request)\n* Enable server-side encryption for DynamoDB Table using AWS managed KMS Key\n* Creates a partition key called 'id' for DynamoDB Table\n* Retain the Table when deleting the CloudFormation stack\n* Enable continuous backups and point-in-time recovery\n\n## Architecture\n![Architecture Diagram](architecture.png)\n\n***\n&copy; Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n"
3996
+ "markdown": "Documentation for this pattern can be found [here](https://github.com/awslabs/aws-solutions-constructs/blob/main/source/patterns/%40aws-solutions-constructs/aws-apigateway-dynamodb/README.adoc)\n"
3997
3997
  },
3998
3998
  "repository": {
3999
3999
  "directory": "source/patterns/@aws-solutions-constructs/aws-apigateway-dynamodb",
@@ -4675,6 +4675,6 @@
4675
4675
  "symbolId": "lib/index:ApiGatewayToDynamoDBProps"
4676
4676
  }
4677
4677
  },
4678
- "version": "2.85.2",
4679
- "fingerprint": "TxBPPxM15db75/R6/uq1Zc9+v4Z37wU4G8YQTKevD+o="
4678
+ "version": "2.85.4",
4679
+ "fingerprint": "EXDUXfbdqg6hVPa/owC5PAvIFIS2vmdh3hgkLmPObI8="
4680
4680
  }
package/README.adoc ADDED
@@ -0,0 +1,306 @@
1
+ //!!NODE_ROOT <section>
2
+ //== aws-apigateway-dynamodb module
3
+
4
+ [.topic]
5
+ = aws-apigateway-dynamodb
6
+ :info_doctype: section
7
+ :info_title: aws-apigateway-dynamodb
8
+
9
+
10
+ image:https://img.shields.io/badge/stability-Experimental-important.svg?style=for-the-badge[Stability:Experimental]
11
+
12
+ ____
13
+ All classes are under active development and subject to non-backward
14
+ compatible changes or removal in any future version. These are not
15
+ subject to the https://semver.org/[Semantic Versioning] model. This
16
+ means that while you may use them, you may need to update your source
17
+ code when upgrading to a newer version of this package.
18
+ ____
19
+
20
+ [width="100%",cols="<50%,<50%",options="header",]
21
+ |===
22
+ |*Reference Documentation*:
23
+ |https://docs.aws.amazon.com/solutions/latest/constructs/
24
+ |===
25
+
26
+ [width="100%",cols="<46%,54%",options="header",]
27
+ |===
28
+ |*Language* |*Package*
29
+ |image:https://docs.aws.amazon.com/cdk/api/latest/img/python32.png[Python
30
+ Logo] Python
31
+ |`aws_solutions_constructs.aws_apigateway_dynamodb`
32
+
33
+ |image:https://docs.aws.amazon.com/cdk/api/latest/img/typescript32.png[Typescript
34
+ Logo] Typescript |`@aws-solutions-constructs/aws-apigateway-dynamodb`
35
+
36
+ |image:https://docs.aws.amazon.com/cdk/api/latest/img/java32.png[Java
37
+ Logo] Java |`software.amazon.awsconstructs.services.apigatewaydynamodb`
38
+ |===
39
+
40
+ == Overview
41
+
42
+ This AWS Solutions Construct implements an Amazon API Gateway REST API
43
+ connected to Amazon DynamoDB table.
44
+
45
+ Here is a minimal deployable pattern definition in:
46
+
47
+ ====
48
+ [role="tablist"]
49
+ Typescript::
50
+ +
51
+ [source,typescript]
52
+ ----
53
+ import { Construct } from 'constructs';
54
+ import { Stack, StackProps } from 'aws-cdk-lib';
55
+ import { ApiGatewayToDynamoDBProps, ApiGatewayToDynamoDB } from "@aws-solutions-constructs/aws-apigateway-dynamodb";
56
+
57
+ new ApiGatewayToDynamoDB(this, 'test-api-gateway-dynamodb-default', {});
58
+ ----
59
+
60
+ Python::
61
+ +
62
+ [source,python]
63
+ ----
64
+ from aws_solutions_constructs.aws_apigateway_dynamodb import ApiGatewayToDynamoDB
65
+ from aws_cdk import Stack
66
+ from constructs import Construct
67
+
68
+ ApiGatewayToDynamoDB(self, 'test-api-gateway-dynamodb-default')
69
+ ----
70
+
71
+ Java::
72
+ +
73
+ [source,java]
74
+ ----
75
+ import software.constructs.Construct;
76
+
77
+ import software.amazon.awscdk.Stack;
78
+ import software.amazon.awscdk.StackProps;
79
+ import software.amazon.awsconstructs.services.apigatewaydynamodb.*;
80
+
81
+ new ApiGatewayToDynamoDB(this, "test-api-gateway-dynamodb-default", new ApiGatewayToDynamoDBProps.Builder()
82
+ .build());
83
+ ----
84
+ ====
85
+
86
+ == Pattern Construct Props
87
+
88
+ [width="100%",cols="<30%,<35%,35%",options="header",]
89
+ |===
90
+ |*Name* |*Type* |*Description*
91
+ |dynamoTableProps?
92
+ |https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_dynamodb.TableProps.html[`dynamodb.TableProps`]
93
+ |Optional user provided props to override the default props for DynamoDB
94
+ Table.
95
+
96
+ |existingTableObj?
97
+ |https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_dynamodb.Table.html[`dynamodb.Table`]
98
+ |Existing instance of DynamoDB table object, providing both this and
99
+ `dynamoTableProps` will cause an error.
100
+
101
+ |apiGatewayProps?
102
+ |https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_apigateway.RestApiProps.html[`api.RestApiProps`]
103
+ |Optional user-provided props to override the default props for the API
104
+ Gateway.
105
+
106
+ |createUsagePlan? |boolean |Whether to create a Usage Plan attached to
107
+ the API. Must be true if
108
+ apiGatewayProps.defaultMethodOptions.apiKeyRequired is true. @default -
109
+ true (to match legacy behavior)
110
+
111
+ |resourceName? |`string` |Optional name of the resource on the API
112
+ Gateway. Defaults to the table’s partitionKeyName
113
+
114
+ |allowCreateOperation? |`boolean` |Whether to deploy an API Gateway
115
+ Method for POST HTTP operations on the DynamoDB table
116
+ (i.e. dynamodb:PutItem).
117
+
118
+ |createRequestTemplate? |`string` |API Gateway Request Template for the
119
+ create method for the default `application/json` content-type. This
120
+ property is required if the `allowCreateOperation` property is set to
121
+ true.
122
+
123
+ |additionalCreateRequestTemplates?
124
+ |`{ [contentType: string]: string; }` |Optional Create
125
+ Request Templates for content-types other than `application/json`. Use
126
+ the `createRequestTemplate` property to set the request template for the
127
+ `application/json` content-type. This property can only be specified if
128
+ the `allowCreateOperation` property is set to true.
129
+
130
+ |createIntegrationResponses?
131
+ |https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_apigateway.IntegrationResponse.html[`api.IntegrationResponses[\]`]
132
+ |Optional, custom API Gateway Integration Response for the create
133
+ method. This property can only be specified if the
134
+ `allowCreateOperation` property is set to true.
135
+
136
+ |createMethodResponses?
137
+ |https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_apigateway.MethodResponse.html[`api.MethodResponses[\]`]
138
+ |Optional, custom API Gateway Method Responses for the create action.
139
+ default: [{ statusCode: "`200`", responseParameters: {
140
+ "`method.response.header.Content-Type`": true }},{ statusCode:
141
+ "`500`", responseParameters: {
142
+ "`method.response.header.Content-Type`": true } } ]
143
+
144
+ |allowReadOperation? |`boolean` |Whether to deploy an API Gateway Method
145
+ for GET HTTP operations on DynamoDB table (i.e. dynamodb:Query).
146
+
147
+ |readRequestTemplate? |`string` |API Gateway Request Template for the
148
+ read method for the default `application/json` content-type. The default
149
+ template only supports a partition key and not partition {plus} sort
150
+ keys.
151
+
152
+ |additionalReadRequestTemplates?
153
+ |`{ [contentType: string]: string; }` |Optional Read Request
154
+ Templates for content-types other than `application/json`. Use the
155
+ `readRequestTemplate` property to set the request template for the
156
+ `application/json` content-type.
157
+
158
+ |readIntegrationResponses?
159
+ |https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_apigateway.IntegrationResponse.html[`api.IntegrationResponses[\]`]
160
+ |Optional, custom API Gateway Integration Response for the read method.
161
+
162
+ |allowUpdateOperation? |`boolean` |Whether to deploy API Gateway Method
163
+ for PUT HTTP operations on DynamoDB table (i.e. dynamodb:UpdateItem).
164
+
165
+ |readMethodResponses?
166
+ |https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_apigateway.MethodResponse.html[`api.MethodResponses[\]`]
167
+ |Optional, custom API Gateway Method Responses for the read action.
168
+ default: [{ statusCode: "`200`", responseParameters: {
169
+ "`method.response.header.Content-Type`": true }},{ statusCode:
170
+ "`500`", responseParameters: {
171
+ "`method.response.header.Content-Type`": true } } ]
172
+
173
+ |updateRequestTemplate? |`string` |API Gateway Request Template for the
174
+ update method. This property is required if the `allowUpdateOperation`
175
+ property is set to true.
176
+
177
+ |additionalUpdateRequestTemplates?
178
+ |`{ [contentType: string]: string; }` |Optional Update
179
+ Request Templates for content-types other than `application/json`. Use
180
+ the `updateRequestTemplate` property to set the request template for the
181
+ `application/json` content-type. This property can only be specified if
182
+ the `allowUpdateOperation` property is set to true.
183
+
184
+ |updateIntegrationResponses?
185
+ |https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_apigateway.IntegrationResponse.html[`api.IntegrationResponses[\]`]
186
+ |Optional, custom API Gateway Integration Response for the update
187
+ method. This property can only be specified if the
188
+ `allowUpdateOperation` property is set to true.
189
+
190
+ |updateMethodResponses?
191
+ |https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_apigateway.MethodResponse.html[`api.MethodResponses[\]`]
192
+ |Optional, custom API Gateway Method Responses for the update action.
193
+ default: [{ statusCode: "`200`", responseParameters: {
194
+ "`method.response.header.Content-Type`": true }},{ statusCode:
195
+ "`500`", responseParameters: {
196
+ "`method.response.header.Content-Type`": true } } ]
197
+
198
+ |allowDeleteOperation? |`boolean` |Whether to deploy API Gateway Method
199
+ for DELETE HTTP operations on DynamoDB table (i.e. dynamodb:DeleteItem).
200
+
201
+ |deleteRequestTemplate? |`string` |API Gateway Request Template for the
202
+ delete method for the default `application/json` content-type.
203
+
204
+ |additionalDeleteRequestTemplates?
205
+ |`{ [contentType: string]: string; }` |Optional Delete
206
+ request templates for content-types other than `application/json`. Use
207
+ the `deleteRequestTemplate` property to set the request template for the
208
+ `application/json` content-type. This property can only be specified if
209
+ the `allowDeleteOperation` property is set to true.
210
+
211
+ |deleteIntegrationResponses?
212
+ |https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_apigateway.IntegrationResponse.html[`api.IntegrationResponses[\]`]
213
+ |Optional, custom API Gateway Integration Response for the delete
214
+ method. This property can only be specified if the
215
+ `allowDeleteOperation` property is set to true.
216
+
217
+ |deleteMethodResponses?
218
+ |https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_apigateway.MethodResponse.html[`api.MethodResponses[\]`]
219
+ |Optional, custom API Gateway Method Responses for the delete action.
220
+ default: [{ statusCode: "`200`", responseParameters: {
221
+ "`method.response.header.Content-Type`": true }},{ statusCode:
222
+ "`500`", responseParameters: {
223
+ "`method.response.header.Content-Type`": true } } ]
224
+
225
+ |logGroupProps?
226
+ |https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_logs.LogGroupProps.html[`logs.LogGroupProps`]
227
+ |User provided props to override the default props for for the
228
+ CloudWatchLogs LogGroup.
229
+ |===
230
+
231
+ == Pattern Properties
232
+
233
+ [width="100%",cols="<30%,<35%,35%",options="header",]
234
+ |===
235
+ |*Name* |*Type* |*Description*
236
+ |apiGateway
237
+ |https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_apigateway.RestApi.html[`api.RestApi`]
238
+ |Returns an instance of the api.RestApi created by the construct.
239
+
240
+ |apiGatewayRole
241
+ |https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_iam.Role.html[`iam.Role`]
242
+ |Returns an instance of the iam.Role created by the construct for API
243
+ Gateway.
244
+
245
+ |dynamoTable
246
+ |https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_dynamodb.Table.html[`dynamodb.Table`]
247
+ |Returns an instance of dynamodb.Table created by the construct.
248
+
249
+ |apiGatewayCloudWatchRole?
250
+ |https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_iam.Role.html[`iam.Role`]
251
+ |Returns an instance of the iam.Role created by the construct for API
252
+ Gateway for CloudWatch access.
253
+
254
+ |apiGatewayLogGroup
255
+ |https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_logs.LogGroup.html[`logs.LogGroup`]
256
+ |Returns an instance of the LogGroup created by the construct for API
257
+ Gateway access logging to CloudWatch.
258
+ |===
259
+
260
+ == API Gateway Request/Response Template Properties Overview
261
+
262
+ This construct allows you to implement four DynamoDB API operations,
263
+ CREATE/READ/UPDATE/DELETE (corresponding the HTTP POST/GET/PUT/DELETE
264
+ requests respectively). They are completely independent and each follows
265
+ the same pattern:
266
+ * Setting `allowCreateOperation` to true will implement the `application/json` content-type with default request and response templates
267
+ * The request template for `application/json` requests can be customized using the `createRequestTemplate` prop values
268
+ * _Additional_ request templates can be specified using the `additionalCreateRequestTemplates` prop value. Note - these DO NOT replace the `application/json` content-type
269
+ * Customized integration responses can be specified for any content type in the `createIntegrationResponses` prop value.
270
+
271
+ Supplying any of these values without setting allowCreateOperation to
272
+ true will result in an error. This pattern is the same for all four API
273
+ operations.
274
+
275
+ == Default settings
276
+
277
+ Out of the box implementation of the Construct without any override will
278
+ set the following defaults:
279
+
280
+ === Amazon API Gateway
281
+
282
+ * Deploy an edge-optimized API endpoint
283
+ * Enable CloudWatch logging for API Gateway
284
+ * Configure least privilege access IAM role for API Gateway
285
+ * Set the default authorizationType for all API methods to IAM
286
+ * Enable X-Ray Tracing
287
+
288
+ === Amazon DynamoDB Table
289
+
290
+ * Set the billing mode for DynamoDB Table to On-Demand (Pay per request)
291
+ * Enable server-side encryption for DynamoDB Table using AWS managed KMS
292
+ Key
293
+ * Creates a partition key called '`id`' for DynamoDB Table
294
+ * Retain the Table when deleting the CloudFormation stack
295
+ * Enable continuous backups and point-in-time recovery
296
+
297
+ == Architecture
298
+
299
+
300
+ image::aws-apigateway-dynamodb.png["Diagram showing data flow from code to database, with security and cloud search components.",scaledwidth=100%]
301
+
302
+ // github block
303
+
304
+ '''''
305
+
306
+ © Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
package/README.md CHANGED
@@ -1,133 +1 @@
1
- # aws-apigateway-dynamodb module
2
- <!--BEGIN STABILITY BANNER-->
3
-
4
- ---
5
-
6
- ![Stability: Experimental](https://img.shields.io/badge/stability-Experimental-important.svg?style=for-the-badge)
7
-
8
- > All classes are under active development and subject to non-backward compatible changes or removal in any
9
- > future version. These are not subject to the [Semantic Versioning](https://semver.org/) model.
10
- > This means that while you may use them, you may need to update your source code when upgrading to a newer version of this package.
11
-
12
- ---
13
- <!--END STABILITY BANNER-->
14
-
15
- | **Reference Documentation**:| <span style="font-weight: normal">https://docs.aws.amazon.com/solutions/latest/constructs/</span>|
16
- |:-------------|:-------------|
17
- <div style="height:8px"></div>
18
-
19
-
20
- | **Language** | **Package** |
21
- |:-------------|-----------------|
22
- |![Python Logo](https://docs.aws.amazon.com/cdk/api/latest/img/python32.png) Python|`aws_solutions_constructs.aws_apigateway_dynamodb`|
23
- |![Typescript Logo](https://docs.aws.amazon.com/cdk/api/latest/img/typescript32.png) Typescript|`@aws-solutions-constructs/aws-apigateway-dynamodb`|
24
- |![Java Logo](https://docs.aws.amazon.com/cdk/api/latest/img/java32.png) Java|`software.amazon.awsconstructs.services.apigatewaydynamodb`|
25
-
26
- ## Overview
27
- This AWS Solutions Construct implements an Amazon API Gateway REST API connected to Amazon DynamoDB table.
28
-
29
- Here is a minimal deployable pattern definition in:
30
-
31
- Typescript
32
- ``` typescript
33
- import { Construct } from 'constructs';
34
- import { Stack, StackProps } from 'aws-cdk-lib';
35
- import { ApiGatewayToDynamoDBProps, ApiGatewayToDynamoDB } from "@aws-solutions-constructs/aws-apigateway-dynamodb";
36
-
37
- new ApiGatewayToDynamoDB(this, 'test-api-gateway-dynamodb-default', {});
38
- ```
39
-
40
- Python
41
- ``` python
42
- from aws_solutions_constructs.aws_apigateway_dynamodb import ApiGatewayToDynamoDB
43
- from aws_cdk import Stack
44
- from constructs import Construct
45
-
46
- ApiGatewayToDynamoDB(self, 'test-api-gateway-dynamodb-default')
47
- ```
48
-
49
- Java
50
- ``` java
51
- import software.constructs.Construct;
52
-
53
- import software.amazon.awscdk.Stack;
54
- import software.amazon.awscdk.StackProps;
55
- import software.amazon.awsconstructs.services.apigatewaydynamodb.*;
56
-
57
- new ApiGatewayToDynamoDB(this, "test-api-gateway-dynamodb-default", new ApiGatewayToDynamoDBProps.Builder()
58
- .build());
59
- ```
60
-
61
- ## Pattern Construct Props
62
-
63
- | **Name** | **Type** | **Description** |
64
- |:-------------|:----------------|-----------------|
65
- |dynamoTableProps?|[`dynamodb.TableProps`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_dynamodb.TableProps.html)|Optional user provided props to override the default props for DynamoDB Table.|
66
- |existingTableObj?|[`dynamodb.Table`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_dynamodb.Table.html)|Existing instance of DynamoDB table object, providing both this and `dynamoTableProps` will cause an error.|
67
- |apiGatewayProps?|[`api.RestApiProps`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_apigateway.RestApiProps.html)|Optional user-provided props to override the default props for the API Gateway.|
68
- |createUsagePlan?|boolean|Whether to create a Usage Plan attached to the API. Must be true if apiGatewayProps.defaultMethodOptions.apiKeyRequired is true. @default - true (to match legacy behavior)|
69
- |resourceName?|`string`|Optional name of the resource on the API Gateway. Defaults to the table's partitionKeyName|
70
- |allowCreateOperation?|`boolean`|Whether to deploy an API Gateway Method for POST HTTP operations on the DynamoDB table (i.e. dynamodb:PutItem).|
71
- |createRequestTemplate?|`string`|API Gateway Request Template for the create method for the default `application/json` content-type. This property is required if the `allowCreateOperation` property is set to true.|
72
- |additionalCreateRequestTemplates?|`{ [contentType: string]: string; }`|Optional Create Request Templates for content-types other than `application/json`. Use the `createRequestTemplate` property to set the request template for the `application/json` content-type. This property can only be specified if the `allowCreateOperation` property is set to true.|
73
- |createIntegrationResponses?|[`api.IntegrationResponses[]`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_apigateway.IntegrationResponse.html)|Optional, custom API Gateway Integration Response for the create method. This property can only be specified if the `allowCreateOperation` property is set to true.|
74
- |createMethodResponses?|[`api.MethodResponses[]`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_apigateway.MethodResponse.html)| Optional, custom API Gateway Method Responses for the create action. default: [{ statusCode: "200", responseParameters: { "method.response.header.Content-Type": true }},{ statusCode: "500", responseParameters: { "method.response.header.Content-Type": true } } ]|
75
- |allowReadOperation?|`boolean`|Whether to deploy an API Gateway Method for GET HTTP operations on DynamoDB table (i.e. dynamodb:Query).|
76
- |readRequestTemplate?|`string`|API Gateway Request Template for the read method for the default `application/json` content-type. The default template only supports a partition key and not partition + sort keys.|
77
- |additionalReadRequestTemplates?|`{ [contentType: string]: string; }`|Optional Read Request Templates for content-types other than `application/json`. Use the `readRequestTemplate` property to set the request template for the `application/json` content-type.|
78
- |readIntegrationResponses?|[`api.IntegrationResponses[]`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_apigateway.IntegrationResponse.html)|Optional, custom API Gateway Integration Response for the read method.|
79
- |allowUpdateOperation?|`boolean`|Whether to deploy API Gateway Method for PUT HTTP operations on DynamoDB table (i.e. dynamodb:UpdateItem).|
80
- |readMethodResponses?|[`api.MethodResponses[]`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_apigateway.MethodResponse.html)| Optional, custom API Gateway Method Responses for the read action. default: [{ statusCode: "200", responseParameters: { "method.response.header.Content-Type": true }},{ statusCode: "500", responseParameters: { "method.response.header.Content-Type": true } } ]|
81
- |updateRequestTemplate?|`string`|API Gateway Request Template for the update method. This property is required if the `allowUpdateOperation` property is set to true.|
82
- |additionalUpdateRequestTemplates?|`{ [contentType: string]: string; }`|Optional Update Request Templates for content-types other than `application/json`. Use the `updateRequestTemplate` property to set the request template for the `application/json` content-type. This property can only be specified if the `allowUpdateOperation` property is set to true.|
83
- |updateIntegrationResponses?|[`api.IntegrationResponses[]`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_apigateway.IntegrationResponse.html)|Optional, custom API Gateway Integration Response for the update method. This property can only be specified if the `allowUpdateOperation` property is set to true.|
84
- |updateMethodResponses?|[`api.MethodResponses[]`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_apigateway.MethodResponse.html)| Optional, custom API Gateway Method Responses for the update action. default: [{ statusCode: "200", responseParameters: { "method.response.header.Content-Type": true }},{ statusCode: "500", responseParameters: { "method.response.header.Content-Type": true } } ]|
85
- |allowDeleteOperation?|`boolean`|Whether to deploy API Gateway Method for DELETE HTTP operations on DynamoDB table (i.e. dynamodb:DeleteItem).|
86
- |deleteRequestTemplate?|`string`|API Gateway Request Template for the delete method for the default `application/json` content-type. |
87
- |additionalDeleteRequestTemplates?|`{ [contentType: string]: string; }`|Optional Delete request templates for content-types other than `application/json`. Use the `deleteRequestTemplate` property to set the request template for the `application/json` content-type. This property can only be specified if the `allowDeleteOperation` property is set to true.|
88
- |deleteIntegrationResponses?|[`api.IntegrationResponses[]`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_apigateway.IntegrationResponse.html)|Optional, custom API Gateway Integration Response for the delete method. This property can only be specified if the `allowDeleteOperation` property is set to true.|
89
- |deleteMethodResponses?|[`api.MethodResponses[]`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_apigateway.MethodResponse.html)| Optional, custom API Gateway Method Responses for the delete action. default: [{ statusCode: "200", responseParameters: { "method.response.header.Content-Type": true }},{ statusCode: "500", responseParameters: { "method.response.header.Content-Type": true } } ]|
90
- |logGroupProps?|[`logs.LogGroupProps`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_logs.LogGroupProps.html)|User provided props to override the default props for for the CloudWatchLogs LogGroup.|
91
-
92
- ## Pattern Properties
93
-
94
- | **Name** | **Type** | **Description** |
95
- |:-------------|:----------------|-----------------|
96
- |apiGateway|[`api.RestApi`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_apigateway.RestApi.html)|Returns an instance of the api.RestApi created by the construct.|
97
- |apiGatewayRole|[`iam.Role`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_iam.Role.html)|Returns an instance of the iam.Role created by the construct for API Gateway.|
98
- |dynamoTable|[`dynamodb.Table`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_dynamodb.Table.html)|Returns an instance of dynamodb.Table created by the construct.|
99
- |apiGatewayCloudWatchRole?|[`iam.Role`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_iam.Role.html)|Returns an instance of the iam.Role created by the construct for API Gateway for CloudWatch access.|
100
- |apiGatewayLogGroup|[`logs.LogGroup`](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_logs.LogGroup.html)|Returns an instance of the LogGroup created by the construct for API Gateway access logging to CloudWatch.|
101
-
102
- ## API Gateway Request/Response Template Properties Overview
103
- This construct allows you to implement four DynamoDB API operations, CREATE/READ/UPDATE/DELETE (corresponding the HTTP POST/GET/PUT/DELETE requests respectively). They are completely independent and each follows the same pattern:
104
- * Setting `allowCreateOperation` to true will implement the `application/json` content-type with default request and response templates
105
- * The request template for `application/json` requests can be customized using the `createRequestTemplate` prop value
106
- * *Additional* request templates can be specified using the `additionalCreateRequestTemplates` prop value. Note - these DO NOT replace the `application/json` content-type
107
- * Customized integration responses can be specified for any content type in the `createIntegrationResponses` prop value.
108
-
109
- Supplying any of these values without setting allowCreateOperation to true will result in an error. This pattern is the same for all four API operations.
110
-
111
- ## Default settings
112
-
113
- Out of the box implementation of the Construct without any override will set the following defaults:
114
-
115
- ### Amazon API Gateway
116
- * Deploy an edge-optimized API endpoint
117
- * Enable CloudWatch logging for API Gateway
118
- * Configure least privilege access IAM role for API Gateway
119
- * Set the default authorizationType for all API methods to IAM
120
- * Enable X-Ray Tracing
121
-
122
- ### Amazon DynamoDB Table
123
- * Set the billing mode for DynamoDB Table to On-Demand (Pay per request)
124
- * Enable server-side encryption for DynamoDB Table using AWS managed KMS Key
125
- * Creates a partition key called 'id' for DynamoDB Table
126
- * Retain the Table when deleting the CloudFormation stack
127
- * Enable continuous backups and point-in-time recovery
128
-
129
- ## Architecture
130
- ![Architecture Diagram](architecture.png)
131
-
132
- ***
133
- &copy; Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
1
+ Documentation for this pattern can be found [here](https://github.com/awslabs/aws-solutions-constructs/blob/main/source/patterns/%40aws-solutions-constructs/aws-apigateway-dynamodb/README.adoc)
package/lib/index.js CHANGED
@@ -219,5 +219,5 @@ class ApiGatewayToDynamoDB extends constructs_1.Construct {
219
219
  }
220
220
  exports.ApiGatewayToDynamoDB = ApiGatewayToDynamoDB;
221
221
  _a = JSII_RTTI_SYMBOL_1;
222
- ApiGatewayToDynamoDB[_a] = { fqn: "@aws-solutions-constructs/aws-apigateway-dynamodb.ApiGatewayToDynamoDB", version: "2.85.2" };
222
+ ApiGatewayToDynamoDB[_a] = { fqn: "@aws-solutions-constructs/aws-apigateway-dynamodb.ApiGatewayToDynamoDB", version: "2.85.4" };
223
223
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQWNBLDJDQUEyQztBQUMzQywyREFBMkQ7QUFDM0Qsd0ZBQXdGO0FBQ3hGLDJDQUF1QztBQUV2Qyx5REFBOEU7QUEwUDlFOztHQUVHO0FBQ0gsTUFBYSxvQkFBcUIsU0FBUSxzQkFBUztJQU1qRDs7Ozs7OztPQU9HO0lBQ0gsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFnQztRQUN4RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTlCLElBQUksSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDeEMsTUFBTSxJQUFJLEtBQUssQ0FBQyw2RkFBNkY7Z0JBQzNHLDJGQUEyRixDQUFDLENBQUM7UUFDakcsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdEMsTUFBTSxJQUFJLEtBQUssQ0FBQyx3R0FBd0c7Z0JBQ3RILHFGQUFxRixDQUFDLENBQUM7UUFDM0YsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDeEMsTUFBTSxJQUFJLEtBQUssQ0FBQyw2RkFBNkY7Z0JBQzNHLDJGQUEyRixDQUFDLENBQUM7UUFDakcsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDeEMsTUFBTSxJQUFJLEtBQUssQ0FBQyw2RkFBNkY7Z0JBQzNHLDJGQUEyRixDQUFDLENBQUM7UUFDakcsQ0FBQztRQUVELDJDQUEyQztRQUMzQyxNQUFNLGdCQUFnQixHQUF3QixR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c09DIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiAgQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIikuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqICB3aXRoIHRoZSBMaWNlbnNlLiBBIGNvcHkgb2YgdGhlIExpY2Vuc2UgaXMgbG9jYXRlZCBhdFxuICpcbiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogIG9yIGluIHRoZSAnbGljZW5zZScgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBmaWxlLiBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gJ0FTIElTJyBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTXG4gKiAgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcbiAqICBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0ICogYXMgYXBpIGZyb20gJ2F3cy1jZGstbGliL2F3cy1hcGlnYXRld2F5JztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCAqIGFzIGRlZmF1bHRzIGZyb20gJ0Bhd3Mtc29sdXRpb25zLWNvbnN0cnVjdHMvY29yZSc7XG4vLyBOb3RlOiBUbyBlbnN1cmUgQ0RLdjIgY29tcGF0aWJpbGl0eSwga2VlcCB0aGUgaW1wb3J0IHN0YXRlbWVudCBmb3IgQ29uc3RydWN0IHNlcGFyYXRlXG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCAqIGFzIGR5bmFtb2RiIGZyb20gJ2F3cy1jZGstbGliL2F3cy1keW5hbW9kYic7XG5pbXBvcnQgeyBnZXRQYXJ0aXRpb25LZXlOYW1lRnJvbVRhYmxlIH0gZnJvbSAnQGF3cy1zb2x1dGlvbnMtY29uc3RydWN0cy9jb3JlJztcbmltcG9ydCAqIGFzIGxvZ3MgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuXG4vKipcbiAqIEBzdW1tYXJ5IFRoZSBwcm9wZXJ0aWVzIGZvciB0aGUgQXBpR2F0ZXdheVRvRHluYW1vREIgY2xhc3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBpR2F0ZXdheVRvRHluYW1vREJQcm9wcyB7XG4gIC8qKlxuICAgKiBPcHRpb25hbCB1c2VyIHByb3ZpZGVkIHByb3BzIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHByb3BzXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRGVmYXVsdCBwcm9wcyBhcmUgdXNlZFxuICAgKi9cbiAgcmVhZG9ubHkgZHluYW1vVGFibGVQcm9wcz86IGR5bmFtb2RiLlRhYmxlUHJvcHM7XG4gIC8qKlxuICAgKiBFeGlzdGluZyBpbnN0YW5jZSBvZiBEeW5hbW9EQiB0YWJsZSBvYmplY3QsIHByb3ZpZGluZyBib3RoIHRoaXMgYW5kIGBkeW5hbW9UYWJsZVByb3BzYCB3aWxsIGNhdXNlIGFuIGVycm9yLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGV4aXN0aW5nVGFibGVPYmo/OiBkeW5hbW9kYi5UYWJsZTtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIHVzZXItcHJvdmlkZWQgcHJvcHMgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcHJvcHMgZm9yIHRoZSBBUEkgR2F0ZXdheS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBEZWZhdWx0IHByb3BlcnRpZXMgYXJlIHVzZWQuXG4gICAqL1xuICByZWFkb25seSBhcGlHYXRld2F5UHJvcHM/OiBhcGkuUmVzdEFwaVByb3BzO1xuICAvKipcbiAgICogV2hldGhlciB0byBjcmVhdGUgYSBVc2FnZSBQbGFuIGF0dGFjaGVkIHRvIHRoZSBBUEkuIE11c3QgYmUgdHJ1ZSBpZlxuICAgKiBhcGlHYXRld2F5UHJvcHMuZGVmYXVsdE1ldGhvZE9wdGlvbnMuYXBpS2V5UmVxdWlyZWQgaXMgdHJ1ZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRydWUgKHRvIG1hdGNoIGxlZ2FjeSBiZWhhdmlvcilcbiAgICovXG4gIHJlYWRvbmx5IGNyZWF0ZVVzYWdlUGxhbj86IGJvb2xlYW5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIHJlc291cmNlIG5hbWUgb24gdGhlIEFQSVxuICAgKiBUaGlzIHByb3BlcnR5IGlzIHVzZWZ1bCBpZiB5b3VyIGludGVncmF0aW9uIGRvZXMgbm90IGRpcmVjdGx5IHVzZSB0aGUgcGFydGl0aW9uIGtleSBuYW1lXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcGFydGl0aW9uIGtleSBuYW1lLCByZXRyaWV2ZWQgZnJvbSB0aGUgRHluYW1vREIgdGFibGUgb2JqZWN0XG4gICAqL1xuICByZWFkb25seSByZXNvdXJjZU5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGRlcGxveSBhbiBBUEkgR2F0ZXdheSBNZXRob2QgZm9yIFBPU1QgSFRUUCBvcGVyYXRpb25zIG9uIHRoZSBEeW5hbW9EQiB0YWJsZSAoaS5lLiBkeW5hbW9kYjpQdXRJdGVtKS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dDcmVhdGVPcGVyYXRpb24/OiBib29sZWFuO1xuICAvKipcbiAgICogQVBJIEdhdGV3YXkgUmVxdWVzdCBUZW1wbGF0ZSBmb3IgdGhlIGNyZWF0ZSBtZXRob2QgZm9yIHRoZSBkZWZhdWx0IGBhcHBsaWNhdGlvbi9qc29uYCBjb250ZW50LXR5cGUuXG4gICAqIFRoaXMgcHJvcGVydHkgaXMgcmVxdWlyZWQgaWYgdGhlIGBhbGxvd0NyZWF0ZU9wZXJhdGlvbmAgcHJvcGVydHkgaXMgc2V0IHRvIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgY3JlYXRlUmVxdWVzdFRlbXBsYXRlPzogc3RyaW5nO1xuICAvKipcbiAgICogT3B0aW9uYWwgQ3JlYXRlIFJlcXVlc3QgVGVtcGxhdGVzIGZvciBjb250ZW50LXR5cGVzIG90aGVyIHRoYW4gYGFwcGxpY2F0aW9uL2pzb25gLlxuICAgKiBVc2UgdGhlIGBjcmVhdGVSZXF1ZXN0VGVtcGxhdGVgIHByb3BlcnR5IHRvIHNldCB0aGUgcmVxdWVzdCB0ZW1wbGF0ZSBmb3IgdGhlIGBhcHBsaWNhdGlvbi9qc29uYCBjb250ZW50LXR5cGUuXG4gICAqIFRoaXMgcHJvcGVydHkgY2FuIG9ubHkgYmUgc3BlY2lmaWVkIGlmIHRoZSBgYWxsb3dDcmVhdGVPcGVyYXRpb25gIHByb3BlcnR5IGlzIHNldCB0byB0cnVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxDcmVhdGVSZXF1ZXN0VGVtcGxhdGVzPzogeyBbY29udGVudFR5cGU6IHN0cmluZ106IHN0cmluZzsgfTtcbiAgLyoqXG4gICAqIE9wdGlvbmFsLCBjdXN0b20gQVBJIEdhdGV3YXkgSW50ZWdyYXRpb24gUmVzcG9uc2UgZm9yIHRoZSBjcmVhdGUgbWV0aG9kLlxuICAgKiBUaGlzIHByb3BlcnR5IGNhbiBvbmx5IGJlIHNwZWNpZmllZCBpZiB0aGUgYGFsbG93Q3JlYXRlT3BlcmF0aW9uYCBwcm9wZXJ0eSBpcyBzZXQgdG8gdHJ1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBbe3N0YXR1c0NvZGU6XCIyMDBcIn0se3N0YXR1c0NvZGU6XCI1MDBcIixyZXNwb25zZVRlbXBsYXRlczp7XCJ0ZXh0L2h0bWxcIjpcIkVycm9yXCJ9LHNlbGVjdGlvblBhdHRlcm46XCI1MDBcIn1dXG4gICAqL1xuICByZWFkb25seSBjcmVhdGVJbnRlZ3JhdGlvblJlc3BvbnNlcz86IGFwaS5JbnRlZ3JhdGlvblJlc3BvbnNlW107XG4gIC8qKlxuICAgKiBPcHRpb25hbCwgY3VzdG9tIEFQSSBHYXRld2F5IE1ldGhvZCBSZXNwb25zZXMgZm9yIHRoZSBjcmVhdGUgYWN0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFtcbiAgICogICB7XG4gICAqICAgICBzdGF0dXNDb2RlOiBcIjIwMFwiLFxuICAgKiAgICAgcmVzcG9uc2VQYXJhbWV0ZXJzOiB7XG4gICAqICAgICAgIFwibWV0aG9kLnJlc3BvbnNlLmhlYWRlci5Db250ZW50LVR5cGVcIjogdHJ1ZVxuICAgKiAgICAgfVxuICAgKiAgIH0sXG4gICAqICAge1xuICAgKiAgICAgc3RhdHVzQ29kZTogXCI1MDBcIixcbiAgICogICAgIHJlc3BvbnNlUGFyYW1ldGVyczoge1xuICAgKiAgICAgICBcIm1ldGhvZC5yZXNwb25zZS5oZWFkZXIuQ29udGVudC1UeXBlXCI6IHRydWVcbiAgICogICAgIH0sXG4gICAqICAgfVxuICAgKiBdXG4gICAqL1xuICByZWFkb25seSBjcmVhdGVNZXRob2RSZXNwb25zZXM/OiBhcGkuTWV0aG9kUmVzcG9uc2VbXTtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGVwbG95IGFuIEFQSSBHYXRld2F5IE1ldGhvZCBmb3IgR0VUIEhUVFAgb3BlcmF0aW9ucyBvbiBEeW5hbW9EQiB0YWJsZSAoaS5lLiBkeW5hbW9kYjpRdWVyeSkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dSZWFkT3BlcmF0aW9uPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEFQSSBHYXRld2F5IFJlcXVlc3QgVGVtcGxhdGUgZm9yIHRoZSByZWFkIG1ldGhvZCBmb3IgdGhlIGRlZmF1bHQgYGFwcGxpY2F0aW9uL2pzb25gIGNvbnRlbnQtdHlwZS5cbiAgICpcbiAgICogVGhlIGRlZmF1bHQgdGVtcGxhdGUgb25seSBzdXBwb3J0cyBhIHBhcnRpdGlvbiBrZXkgYW5kIG5vdCBwYXJ0aXRpb24gKyBzb3J0IGtleXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYHsgXFxcbiAgICogICAgICAgXCJUYWJsZU5hbWVcIjogXCJEWU5BTU9EQl9UQUJMRV9OQU1FXCIsIFxcXG4gICAqICAgICAgIFwiS2V5Q29uZGl0aW9uRXhwcmVzc2lvblwiOiBcIlBBUlRJVElPTl9LRVlfTkFNRSA9IDp2MVwiLCBcXFxuICAgKiAgICAgICBcIkV4cHJlc3Npb25BdHRyaWJ1dGVWYWx1ZXNcIjogeyBcXFxuICAgKiAgICAgICAgIFwiOnYxXCI6IHsgXFxcbiAgICogICAgICAgICAgIFwiU1wiOiBcIiRpbnB1dC5wYXJhbXMoJ1BBUlRJVElPTl9LRVlfTkFNRScpXCIgXFxcbiAgICogICAgICAgICB9IFxcXG4gICAqICAgICAgIH0gXFxcbiAgICogICAgIH1gXG4gICAqL1xuICByZWFkb25seSByZWFkUmVxdWVzdFRlbXBsYXRlPzogc3RyaW5nO1xuICAvKipcbiAgICogT3B0aW9uYWwgUmVhZCBSZXF1ZXN0IFRlbXBsYXRlcyBmb3IgY29udGVudC10eXBlcyBvdGhlciB0aGFuIGBhcHBsaWNhdGlvbi9qc29uYC5cbiAgICogVXNlIHRoZSBgcmVhZFJlcXVlc3RUZW1wbGF0ZWAgcHJvcGVydHkgdG8gc2V0IHRoZSByZXF1ZXN0IHRlbXBsYXRlIGZvciB0aGUgYGFwcGxpY2F0aW9uL2pzb25gIGNvbnRlbnQtdHlwZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBOb25lXG4gICAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsUmVhZFJlcXVlc3RUZW1wbGF0ZXM/OiB7IFtjb250ZW50VHlwZTogc3RyaW5nXTogc3RyaW5nOyB9O1xuICAvKipcbiAgICogT3B0aW9uYWwsIGN1c3RvbSBBUEkgR2F0ZXdheSBJbnRlZ3JhdGlvbiBSZXNwb25zZSBmb3IgdGhlIHJlYWQgbWV0aG9kLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFt7c3RhdHVzQ29kZTpcIjIwMFwifSx7c3RhdHVzQ29kZTpcIjUwMFwiLHJlc3BvbnNlVGVtcGxhdGVzOntcInRleHQvaHRtbFwiOlwiRXJyb3JcIn0sc2VsZWN0aW9uUGF0dGVybjpcIjUwMFwifV1cbiAgICovXG4gIHJlYWRvbmx5IHJlYWRJbnRlZ3JhdGlvblJlc3BvbnNlcz86IGFwaS5JbnRlZ3JhdGlvblJlc3BvbnNlW107XG4gIC8qKlxuICAgKiBPcHRpb25hbCwgY3VzdG9tIEFQSSBHYXRld2F5IE1ldGhvZCBSZXNwb25zZXMgZm9yIHRoZSByZWFkIGFjdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBbXG4gICAqICAge1xuICAgKiAgICAgc3RhdHVzQ29kZTogXCIyMDBcIixcbiAgICogICAgIHJlc3BvbnNlUGFyYW1ldGVyczoge1xuICAgKiAgICAgICBcIm1ldGhvZC5yZXNwb25zZS5oZWFkZXIuQ29udGVudC1UeXBlXCI6IHRydWVcbiAgICogICAgIH1cbiAgICogICB9LFxuICAgKiAgIHtcbiAgICogICAgIHN0YXR1c0NvZGU6IFwiNTAwXCIsXG4gICAqICAgICByZXNwb25zZVBhcmFtZXRlcnM6IHtcbiAgICogICAgICAgXCJtZXRob2QucmVzcG9uc2UuaGVhZGVyLkNvbnRlbnQtVHlwZVwiOiB0cnVlXG4gICAqICAgICB9LFxuICAgKiAgIH1cbiAgICogXVxuICAgKi9cbiAgcmVhZG9ubHkgcmVhZE1ldGhvZFJlc3BvbnNlcz86IGFwaS5NZXRob2RSZXNwb25zZVtdO1xuICAvKipcbiAgICogV2hldGhlciB0byBkZXBsb3kgQVBJIEdhdGV3YXkgTWV0aG9kIGZvciBQVVQgSFRUUCBvcGVyYXRpb25zIG9uIER5bmFtb0RCIHRhYmxlIChpLmUuIGR5bmFtb2RiOlVwZGF0ZUl0ZW0pLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlXG4gICAqL1xuICByZWFkb25seSBhbGxvd1VwZGF0ZU9wZXJhdGlvbj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBBUEkgR2F0ZXdheSBSZXF1ZXN0IFRlbXBsYXRlIGZvciB0aGUgdXBkYXRlIG1ldGhvZC5cbiAgICogVGhpcyBwcm9wZXJ0eSBpcyByZXF1aXJlZCBpZiB0aGUgYGFsbG93VXBkYXRlT3BlcmF0aW9uYCBwcm9wZXJ0eSBpcyBzZXQgdG8gdHJ1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBOb25lXG4gICAqL1xuICByZWFkb25seSB1cGRhdGVSZXF1ZXN0VGVtcGxhdGU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBVcGRhdGUgUmVxdWVzdCBUZW1wbGF0ZXMgZm9yIGNvbnRlbnQtdHlwZXMgb3RoZXIgdGhhbiBgYXBwbGljYXRpb24vanNvbmAuXG4gICAqIFVzZSB0aGUgYHVwZGF0ZVJlcXVlc3RUZW1wbGF0ZWAgcHJvcGVydHkgdG8gc2V0IHRoZSByZXF1ZXN0IHRlbXBsYXRlIGZvciB0aGUgYGFwcGxpY2F0aW9uL2pzb25gIGNvbnRlbnQtdHlwZS5cbiAgICogVGhpcyBwcm9wZXJ0eSBjYW4gb25seSBiZSBzcGVjaWZpZWQgaWYgdGhlIGBhbGxvd1VwZGF0ZU9wZXJhdGlvbmAgcHJvcGVydHkgaXMgc2V0IHRvIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbFVwZGF0ZVJlcXVlc3RUZW1wbGF0ZXM/OiB7IFtjb250ZW50VHlwZTogc3RyaW5nXTogc3RyaW5nOyB9O1xuICAvKipcbiAgICogT3B0aW9uYWwsIGN1c3RvbSBBUEkgR2F0ZXdheSBJbnRlZ3JhdGlvbiBSZXNwb25zZSBmb3IgdGhlIHVwZGF0ZSBtZXRob2QuXG4gICAqIFRoaXMgcHJvcGVydHkgY2FuIG9ubHkgYmUgc3BlY2lmaWVkIGlmIHRoZSBgYWxsb3dVcGRhdGVPcGVyYXRpb25gIHByb3BlcnR5IGlzIHNldCB0byB0cnVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFt7c3RhdHVzQ29kZTpcIjIwMFwifSx7c3RhdHVzQ29kZTpcIjUwMFwiLHJlc3BvbnNlVGVtcGxhdGVzOntcInRleHQvaHRtbFwiOlwiRXJyb3JcIn0sc2VsZWN0aW9uUGF0dGVybjpcIjUwMFwifV1cbiAgICovXG4gIHJlYWRvbmx5IHVwZGF0ZUludGVncmF0aW9uUmVzcG9uc2VzPzogYXBpLkludGVncmF0aW9uUmVzcG9uc2VbXTtcbiAgLyoqXG4gICAqIE9wdGlvbmFsLCBjdXN0b20gQVBJIEdhdGV3YXkgTWV0aG9kIFJlc3BvbnNlcyBmb3IgdGhlIHVwZGF0ZSBhY3Rpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gW1xuICAgKiAgIHtcbiAgICogICAgIHN0YXR1c0NvZGU6IFwiMjAwXCIsXG4gICAqICAgICByZXNwb25zZVBhcmFtZXRlcnM6IHtcbiAgICogICAgICAgXCJtZXRob2QucmVzcG9uc2UuaGVhZGVyLkNvbnRlbnQtVHlwZVwiOiB0cnVlXG4gICAqICAgICB9XG4gICAqICAgfSxcbiAgICogICB7XG4gICAqICAgICBzdGF0dXNDb2RlOiBcIjUwMFwiLFxuICAgKiAgICAgcmVzcG9uc2VQYXJhbWV0ZXJzOiB7XG4gICAqICAgICAgIFwibWV0aG9kLnJlc3BvbnNlLmhlYWRlci5Db250ZW50LVR5cGVcIjogdHJ1ZVxuICAgKiAgICAgfSxcbiAgICogICB9XG4gICAqIF1cbiAgICovXG4gIHJlYWRvbmx5IHVwZGF0ZU1ldGhvZFJlc3BvbnNlcz86IGFwaS5NZXRob2RSZXNwb25zZVtdO1xuICAvKipcbiAgICogV2hldGhlciB0byBkZXBsb3kgQVBJIEdhdGV3YXkgTWV0aG9kIGZvciBERUxFVEUgSFRUUCBvcGVyYXRpb25zIG9uIER5bmFtb0RCIHRhYmxlIChpLmUuIGR5bmFtb2RiOkRlbGV0ZUl0ZW0pLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlXG4gICAqL1xuICByZWFkb25seSBhbGxvd0RlbGV0ZU9wZXJhdGlvbj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBBUEkgR2F0ZXdheSBSZXF1ZXN0IFRlbXBsYXRlIGZvciB0aGUgZGVsZXRlIG1ldGhvZCBmb3IgdGhlIGRlZmF1bHQgYGFwcGxpY2F0aW9uL2pzb25gIGNvbnRlbnQtdHlwZS5cbiAgICogVGhpcyBwcm9wZXJ0eSBjYW4gb25seSBiZSBzcGVjaWZpZWQgaWYgdGhlIGBhbGxvd0RlbGV0ZU9wZXJhdGlvbmAgcHJvcGVydHkgaXMgc2V0IHRvIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYHsgXFxcbiAgICogICAgICAgXCJUYWJsZU5hbWVcIjogXCJEWU5BTU9EQl9UQUJMRV9OQU1FXCIsIFxcXG4gICAqICAgICAgIFwiS2V5XCI6IHsgXFxcbiAgICogICAgICAgICBcIiR7cGFydGl0aW9uS2V5TmFtZX1cIjogeyBcXFxuICAgKiAgICAgICAgICAgXCJTXCI6IFwiJGlucHV0LnBhcmFtcygnUEFSVElUSU9OX0tFWV9OQU1FJylcIiBcXFxuICAgKiAgICAgICAgICAgfSBcXFxuICAgKiAgICAgICAgIH0sIFxcXG4gICAqICAgICAgIFwiUmV0dXJuVmFsdWVzXCI6IFwiQUxMX09MRFwiIFxcXG4gICAqICAgICB9YFxuICAgKi9cbiAgcmVhZG9ubHkgZGVsZXRlUmVxdWVzdFRlbXBsYXRlPzogc3RyaW5nO1xuICAvKipcbiAgICogT3B0aW9uYWwgRGVsZXRlIHJlcXVlc3QgdGVtcGxhdGVzIGZvciBjb250ZW50LXR5cGVzIG90aGVyIHRoYW4gYGFwcGxpY2F0aW9uL2pzb25gLlxuICAgKiBVc2UgdGhlIGBkZWxldGVSZXF1ZXN0VGVtcGxhdGVgIHByb3BlcnR5IHRvIHNldCB0aGUgcmVxdWVzdCB0ZW1wbGF0ZSBmb3IgdGhlIGBhcHBsaWNhdGlvbi9qc29uYCBjb250ZW50LXR5cGUuXG4gICAqIFRoaXMgcHJvcGVydHkgY2FuIG9ubHkgYmUgc3BlY2lmaWVkIGlmIHRoZSBgYWxsb3dEZWxldGVPcGVyYXRpb25gIHByb3BlcnR5IGlzIHNldCB0byB0cnVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxEZWxldGVSZXF1ZXN0VGVtcGxhdGVzPzogeyBbY29udGVudFR5cGU6IHN0cmluZ106IHN0cmluZzsgfTtcbiAgLyoqXG4gICAqIE9wdGlvbmFsLCBjdXN0b20gQVBJIEdhdGV3YXkgSW50ZWdyYXRpb24gUmVzcG9uc2UgZm9yIHRoZSBkZWxldGUgbWV0aG9kLlxuICAgKiBUaGlzIHByb3BlcnR5IGNhbiBvbmx5IGJlIHNwZWNpZmllZCBpZiB0aGUgYGFsbG93RGVsZXRlT3BlcmF0aW9uYCBwcm9wZXJ0eSBpcyBzZXQgdG8gdHJ1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBbe3N0YXR1c0NvZGU6XCIyMDBcIn0se3N0YXR1c0NvZGU6XCI1MDBcIixyZXNwb25zZVRlbXBsYXRlczp7XCJ0ZXh0L2h0bWxcIjpcIkVycm9yXCJ9LHNlbGVjdGlvblBhdHRlcm46XCI1MDBcIn1dXG4gICAqL1xuICByZWFkb25seSBkZWxldGVJbnRlZ3JhdGlvblJlc3BvbnNlcz86IGFwaS5JbnRlZ3JhdGlvblJlc3BvbnNlW107XG4gIC8qKlxuICAgKiBPcHRpb25hbCwgY3VzdG9tIEFQSSBHYXRld2F5IE1ldGhvZCBSZXNwb25zZXMgZm9yIHRoZSBkZWxldGUgYWN0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFtcbiAgICogICB7XG4gICAqICAgICBzdGF0dXNDb2RlOiBcIjIwMFwiLFxuICAgKiAgICAgcmVzcG9uc2VQYXJhbWV0ZXJzOiB7XG4gICAqICAgICAgIFwibWV0aG9kLnJlc3BvbnNlLmhlYWRlci5Db250ZW50LVR5cGVcIjogdHJ1ZVxuICAgKiAgICAgfVxuICAgKiAgIH0sXG4gICAqICAge1xuICAgKiAgICAgc3RhdHVzQ29kZTogXCI1MDBcIixcbiAgICogICAgIHJlc3BvbnNlUGFyYW1ldGVyczoge1xuICAgKiAgICAgICBcIm1ldGhvZC5yZXNwb25zZS5oZWFkZXIuQ29udGVudC1UeXBlXCI6IHRydWVcbiAgICogICAgIH0sXG4gICAqICAgfVxuICAgKiBdXG4gICAqL1xuICByZWFkb25seSBkZWxldGVNZXRob2RSZXNwb25zZXM/OiBhcGkuTWV0aG9kUmVzcG9uc2VbXTtcbiAgLyoqXG4gICAqIFVzZXIgcHJvdmlkZWQgcHJvcHMgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcHJvcHMgZm9yIHRoZSBDbG91ZFdhdGNoTG9ncyBMb2dHcm91cC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBEZWZhdWx0IHByb3BzIGFyZSB1c2VkXG4gICAqL1xuICByZWFkb25seSBsb2dHcm91cFByb3BzPzogbG9ncy5Mb2dHcm91cFByb3BzO1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IFRoZSBBcGlHYXRld2F5VG9EeW5hbW9EQiBjbGFzcy5cbiAqL1xuZXhwb3J0IGNsYXNzIEFwaUdhdGV3YXlUb0R5bmFtb0RCIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IGR5bmFtb1RhYmxlOiBkeW5hbW9kYi5UYWJsZTtcbiAgcHVibGljIHJlYWRvbmx5IGFwaUdhdGV3YXlSb2xlOiBpYW0uUm9sZTtcbiAgcHVibGljIHJlYWRvbmx5IGFwaUdhdGV3YXk6IGFwaS5SZXN0QXBpO1xuICBwdWJsaWMgcmVhZG9ubHkgYXBpR2F0ZXdheUNsb3VkV2F0Y2hSb2xlPzogaWFtLlJvbGU7XG4gIHB1YmxpYyByZWFkb25seSBhcGlHYXRld2F5TG9nR3JvdXA6IGxvZ3MuTG9nR3JvdXA7XG4gIC8qKlxuICAgKiBAc3VtbWFyeSBDb25zdHJ1Y3RzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBBcGlHYXRld2F5VG9EeW5hbW9EQiBjbGFzcy5cbiAgICogQHBhcmFtIHtjZGsuQXBwfSBzY29wZSAtIHJlcHJlc2VudHMgdGhlIHNjb3BlIGZvciBhbGwgdGhlIHJlc291cmNlcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkIC0gdGhpcyBpcyBhIGEgc2NvcGUtdW5pcXVlIGlkLlxuICAgKiBAcGFyYW0ge0Nsb3VkRnJvbnRUb0FwaUdhdGV3YXlUb0xhbWJkYVByb3BzfSBwcm9wcyAtIHVzZXIgcHJvdmlkZWQgcHJvcHMgZm9yIHRoZSBjb25zdHJ1Y3QuXG4gICAqIEBzaW5jZSAwLjguMFxuICAgKiBAYWNjZXNzIHB1YmxpY1xuICAgKi9cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEFwaUdhdGV3YXlUb0R5bmFtb0RCUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIGRlZmF1bHRzLkNoZWNrRHluYW1vREJQcm9wcyhwcm9wcyk7XG4gICAgZGVmYXVsdHMuQ2hlY2tBcGlQcm9wcyhwcm9wcyk7XG5cbiAgICBpZiAodGhpcy5DaGVja0NyZWF0ZVJlcXVlc3RQcm9wcyhwcm9wcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlICdhbGxvd0NyZWF0ZU9wZXJhdGlvbicgcHJvcGVydHkgbXVzdCBiZSBzZXQgdG8gdHJ1ZSB3aGVuIHNldHRpbmcgYW55IG9mIHRoZSBmb2xsb3dpbmc6IGAgK1xuICAgICAgICBgJ2NyZWF0ZVJlcXVlc3RUZW1wbGF0ZScsICdhZGRpdGlvbmFsQ3JlYXRlUmVxdWVzdFRlbXBsYXRlcycsICdjcmVhdGVJbnRlZ3JhdGlvblJlc3BvbnNlcydgKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuQ2hlY2tSZWFkUmVxdWVzdFByb3BzKHByb3BzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgJ2FsbG93UmVhZE9wZXJhdGlvbicgcHJvcGVydHkgbXVzdCBiZSBzZXQgdG8gdHJ1ZSBvciB1bmRlZmluZWQgd2hlbiBzZXR0aW5nIGFueSBvZiB0aGUgZm9sbG93aW5nOiBgICtcbiAgICAgICAgYCdyZWFkUmVxdWVzdFRlbXBsYXRlJywgJ2FkZGl0aW9uYWxSZWFkUmVxdWVzdFRlbXBsYXRlcycsICdyZWFkSW50ZWdyYXRpb25SZXNwb25zZXMnYCk7XG4gICAgfVxuICAgIGlmICh0aGlzLkNoZWNrVXBkYXRlUmVxdWVzdFByb3BzKHByb3BzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgJ2FsbG93VXBkYXRlT3BlcmF0aW9uJyBwcm9wZXJ0eSBtdXN0IGJlIHNldCB0byB0cnVlIHdoZW4gc2V0dGluZyBhbnkgb2YgdGhlIGZvbGxvd2luZzogYCArXG4gICAgICAgIGAndXBkYXRlUmVxdWVzdFRlbXBsYXRlJywgJ2FkZGl0aW9uYWxVcGRhdGVSZXF1ZXN0VGVtcGxhdGVzJywgJ3VwZGF0ZUludGVncmF0aW9uUmVzcG9uc2VzJ2ApO1xuICAgIH1cbiAgICBpZiAodGhpcy5DaGVja0RlbGV0ZVJlcXVlc3RQcm9wcyhwcm9wcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlICdhbGxvd0RlbGV0ZU9wZXJhdGlvbicgcHJvcGVydHkgbXVzdCBiZSBzZXQgdG8gdHJ1ZSB3aGVuIHNldHRpbmcgYW55IG9mIHRoZSBmb2xsb3dpbmc6IGAgK1xuICAgICAgICBgJ2RlbGV0ZVJlcXVlc3RUZW1wbGF0ZScsICdhZGRpdGlvbmFsRGVsZXRlUmVxdWVzdFRlbXBsYXRlcycsICdkZWxldGVJbnRlZ3JhdGlvblJlc3BvbnNlcydgKTtcbiAgICB9XG5cbiAgICAvLyBTZXQgdGhlIGRlZmF1bHQgcHJvcHMgZm9yIER5bmFtb0RCIHRhYmxlXG4gICAgY29uc3QgZHluYW1vVGFibGVQcm9wczogZHluYW1vZGIuVGFibGVQcm9wcyA9IGRlZmF1bHRzLmNvbnNvbGlkYXRlUHJvcHMoXG4gICAgICBkZWZhdWx0cy5HZXREZWZhdWx0VGFibGVQcm9wcyhwcm9wcy5keW5hbW9UYWJsZVByb3BzKSxcbiAgICAgIHByb3BzLmR5bmFtb1RhYmxlUHJvcHMpO1xuICAgIGxldCBwYXJ0aXRpb25LZXlOYW1lID0gZHluYW1vVGFibGVQcm9wcy5wYXJ0aXRpb25LZXkubmFtZTtcblxuICAgIGlmIChwcm9wcy5leGlzdGluZ1RhYmxlT2JqKSB7XG4gICAgICBwYXJ0aXRpb25LZXlOYW1lID0gZ2V0UGFydGl0aW9uS2V5TmFtZUZyb21UYWJsZShwcm9wcy5leGlzdGluZ1RhYmxlT2JqKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNvdXJjZU5hbWUgPSBwcm9wcy5yZXNvdXJjZU5hbWUgPz8gcGFydGl0aW9uS2V5TmFtZTtcblxuICAgIC8vIFNpbmNlIHdlIGFyZSBvbmx5IGludm9raW5nIHRoaXMgZnVuY3Rpb24gd2l0aCBhbiBleGlzdGluZyBUYWJsZSBvciB0YWJsZVByb3BzLFxuICAgIC8vIChub3QgYSB0YWJsZSBpbnRlcmZhY2UpLCB3ZSBrbm93IHRoYXQgdGhlIGltcGxlbWVudGF0aW9uIHdpbGwgYWx3YXlzIHJldHVyblxuICAgIC8vIGEgVGFibGUgb2JqZWN0IGFuZCB3ZSBjYW4gZm9yY2UgYXNzaWdubWVudCB0byB0aGUgZHluYW1vVGFibGUgcHJvcGVydHkuXG4gICAgY29uc3QgYnVpbGREeW5hbW9EQlRhYmxlUmVzcG9uc2UgPSBkZWZhdWx0cy5idWlsZER5bmFtb0RCVGFibGUodGhpcywge1xuICAgICAgZXhpc3RpbmdUYWJsZU9iajogcHJvcHMuZXhpc3RpbmdUYWJsZU9iaixcbiAgICAgIGR5bmFtb1RhYmxlUHJvcHM6IHByb3BzLmR5bmFtb1RhYmxlUHJvcHNcbiAgICB9KTtcbiAgICB0aGlzLmR5bmFtb1RhYmxlID0gYnVpbGREeW5hbW9EQlRhYmxlUmVzcG9uc2UudGFibGVPYmplY3QhO1xuXG4gICAgLy8gU2V0dXAgdGhlIEFQSSBHYXRld2F5XG4gICAgY29uc3QgZ2xvYmFsUmVzdEFwaVJlc3BvbnNlID0gZGVmYXVsdHMuR2xvYmFsUmVzdEFwaSh0aGlzLCBwcm9wcy5hcGlHYXRld2F5UHJvcHMsIHByb3BzLmxvZ0dyb3VwUHJvcHMsIHByb3BzLmNyZWF0ZVVzYWdlUGxhbik7XG4gICAgdGhpcy5hcGlHYXRld2F5ID0gZ2xvYmFsUmVzdEFwaVJlc3BvbnNlLmFwaTtcbiAgICB0aGlzLmFwaUdhdGV3YXlDbG91ZFdhdGNoUm9sZSA9IGdsb2JhbFJlc3RBcGlSZXNwb25zZS5yb2xlO1xuICAgIHRoaXMuYXBpR2F0ZXdheUxvZ0dyb3VwID0gZ2xvYmFsUmVzdEFwaVJlc3BvbnNlLmxvZ0dyb3VwO1xuXG4gICAgLy8gU2V0dXAgdGhlIEFQSSBHYXRld2F5IHJvbGVcbiAgICB0aGlzLmFwaUdhdGV3YXlSb2xlID0gbmV3IGlhbS5Sb2xlKHRoaXMsICdhcGktZ2F0ZXdheS1yb2xlJywge1xuICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoJ2FwaWdhdGV3YXkuYW1hem9uYXdzLmNvbScpXG4gICAgfSk7XG5cbiAgICAvLyBTZXR1cCB0aGUgQVBJIEdhdGV3YXkgUmVzb3VyY2VcbiAgICBjb25zdCBhcGlHYXRld2F5UmVzb3VyY2U6IGFwaS5SZXNvdXJjZSA9IHRoaXMuYXBpR2F0ZXdheS5yb290LmFkZFJlc291cmNlKFwie1wiICsgcmVzb3VyY2VOYW1lICsgXCJ9XCIpO1xuXG4gICAgLy8gU2V0dXAgQVBJIEdhdGV3YXkgTWV0aG9kXG4gICAgLy8gQ3JlYXRlXG4gICAgaWYgKHRoaXMuSW1wbGVtZW50Q3JlYXRlT3BlcmF0aW9uKHByb3BzKSkge1xuICAgICAgLy8gSW1wbGVtZW50Q3JlYXRlT3BlcmF0aW9uIGhhcyBjb25maXJtZWQgdGhhdCBjcmVhdGVSZXF1ZXN0VGVtcGxhdGUgZXhpc3RzKVxuICAgICAgY29uc3QgY3JlYXRlUmVxdWVzdFRlbXBsYXRlID0gcHJvcHMuY3JlYXRlUmVxdWVzdFRlbXBsYXRlIS5yZXBsYWNlKFwiJHtUYWJsZX1cIiwgdGhpcy5keW5hbW9UYWJsZS50YWJsZU5hbWUpO1xuICAgICAgdGhpcy5hZGRBY3Rpb25Ub1BvbGljeShcImR5bmFtb2RiOlB1dEl0ZW1cIik7XG4gICAgICBjb25zdCBjcmVhdGVNZXRob2RPcHRpb25zOiBhcGkuTWV0aG9kT3B0aW9ucyA9IHByb3BzLmNyZWF0ZU1ldGhvZFJlc3BvbnNlcyA/IHsgbWV0aG9kUmVzcG9uc2VzOiBwcm9wcy5jcmVhdGVNZXRob2RSZXNwb25zZXMgfSA6IHt9O1xuICAgICAgZGVmYXVsdHMuYWRkUHJveHlNZXRob2RUb0FwaVJlc291cmNlKHtcbiAgICAgICAgc2VydmljZTogXCJkeW5hbW9kYlwiLFxuICAgICAgICBhY3Rpb246IFwiUHV0SXRlbVwiLFxuICAgICAgICBhcGlHYXRld2F5Um9sZTogdGhpcy5hcGlHYXRld2F5Um9sZSxcbiAgICAgICAgYXBpTWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgYXBpUmVzb3VyY2U6IHRoaXMuYXBpR2F0ZXdheS5yb290LFxuICAgICAgICByZXF1ZXN0VGVtcGxhdGU6IGNyZWF0ZVJlcXVlc3RUZW1wbGF0ZSxcbiAgICAgICAgYWRkaXRpb25hbFJlcXVlc3RUZW1wbGF0ZXM6IHByb3BzLmFkZGl0aW9uYWxDcmVhdGVSZXF1ZXN0VGVtcGxhdGVzLFxuICAgICAgICBpbnRlZ3JhdGlvblJlc3BvbnNlczogcHJvcHMuY3JlYXRlSW50ZWdyYXRpb25SZXNwb25zZXMsXG4gICAgICAgIG1ldGhvZE9wdGlvbnM6IGNyZWF0ZU1ldGhvZE9wdGlvbnNcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBSZWFkXG4gICAgaWYgKHRoaXMuSW1wbGVtZW50UmVhT3BlcmF0aW9uKHByb3BzKSkge1xuICAgICAgY29uc3QgcmVhZFJlcXVlc3RUZW1wbGF0ZSA9IHByb3BzLnJlYWRSZXF1ZXN0VGVtcGxhdGUgPz9cbiAgICAgICAgYHsgXFxcbiAgICAgICAgICBcIlRhYmxlTmFtZVwiOiBcIiR7dGhpcy5keW5hbW9UYWJsZS50YWJsZU5hbWV9XCIsIFxcXG4gICAgICAgICAgXCJLZXlDb25kaXRpb25FeHByZXNzaW9uXCI6IFwiJHtwYXJ0aXRpb25LZXlOYW1lfSA9IDp2MVwiLCBcXFxuICAgICAgICAgIFwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlc1wiOiB7IFxcXG4gICAgICAgICAgICBcIjp2MVwiOiB7IFxcXG4gICAgICAgICAgICAgIFwiU1wiOiBcIiRpbnB1dC5wYXJhbXMoJyR7cmVzb3VyY2VOYW1lfScpXCIgXFxcbiAgICAgICAgICAgIH0gXFxcbiAgICAgICAgICB9IFxcXG4gICAgICAgIH1gO1xuXG4gICAgICB0aGlzLmFkZEFjdGlvblRvUG9saWN5KFwiZHluYW1vZGI6UXVlcnlcIik7XG4gICAgICBjb25zdCByZWFkTWV0aG9kT3B0aW9uczogYXBpLk1ldGhvZE9wdGlvbnMgPSBwcm9wcy5yZWFkTWV0aG9kUmVzcG9uc2VzID8geyBtZXRob2RSZXNwb25zZXM6IHByb3BzLnJlYWRNZXRob2RSZXNwb25zZXMgfSA6IHt9O1xuICAgICAgZGVmYXVsdHMuYWRkUHJveHlNZXRob2RUb0FwaVJlc291cmNlKHtcbiAgICAgICAgc2VydmljZTogXCJkeW5hbW9kYlwiLFxuICAgICAgICBhY3Rpb246IFwiUXVlcnlcIixcbiAgICAgICAgYXBpR2F0ZXdheVJvbGU6IHRoaXMuYXBpR2F0ZXdheVJvbGUsXG4gICAgICAgIGFwaU1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgYXBpUmVzb3VyY2U6IGFwaUdhdGV3YXlSZXNvdXJjZSxcbiAgICAgICAgcmVxdWVzdFRlbXBsYXRlOiByZWFkUmVxdWVzdFRlbXBsYXRlLFxuICAgICAgICBhZGRpdGlvbmFsUmVxdWVzdFRlbXBsYXRlczogcHJvcHMuYWRkaXRpb25hbFJlYWRSZXF1ZXN0VGVtcGxhdGVzLFxuICAgICAgICBpbnRlZ3JhdGlvblJlc3BvbnNlczogcHJvcHMucmVhZEludGVncmF0aW9uUmVzcG9uc2VzLFxuICAgICAgICBtZXRob2RPcHRpb25zOiByZWFkTWV0aG9kT3B0aW9uc1xuICAgICAgfSk7XG4gICAgfVxuICAgIC8vIFVwZGF0ZVxuICAgIGlmICh0aGlzLkltcGxlbWVudFVwZGF0ZU9wZXJhdGlvbihwcm9wcykpIHtcbiAgICAgIC8vIEltcGxlbWVudFVwZGF0ZU9wZXJhdGlvbiBjb25maXJtZWQgdGhlIGV4aXN0ZW5jZSBvZiB1cGRhdGVSZXF1ZXN0VGVtcGxhdGVcbiAgICAgIGNvbnN0IHVwZGF0ZVJlcXVlc3RUZW1wbGF0ZSA9IHByb3BzLnVwZGF0ZVJlcXVlc3RUZW1wbGF0ZSEucmVwbGFjZShcIiR7VGFibGV9XCIsIHRoaXMuZHluYW1vVGFibGUudGFibGVOYW1lKTtcbiAgICAgIHRoaXMuYWRkQWN0aW9uVG9Qb2xpY3koXCJkeW5hbW9kYjpVcGRhdGVJdGVtXCIpO1xuICAgICAgY29uc3QgdXBkYXRlTWV0aG9kT3B0aW9uczogYXBpLk1ldGhvZE9wdGlvbnMgPSBwcm9wcy51cGRhdGVNZXRob2RSZXNwb25zZXMgPyB7IG1ldGhvZFJlc3BvbnNlczogcHJvcHMudXBkYXRlTWV0aG9kUmVzcG9uc2VzIH0gOiB7fTtcbiAgICAgIGRlZmF1bHRzLmFkZFByb3h5TWV0aG9kVG9BcGlSZXNvdXJjZSh7XG4gICAgICAgIHNlcnZpY2U6IFwiZHluYW1vZGJcIixcbiAgICAgICAgYWN0aW9uOiBcIlVwZGF0ZUl0ZW1cIixcbiAgICAgICAgYXBpR2F0ZXdheVJvbGU6IHRoaXMuYXBpR2F0ZXdheVJvbGUsXG4gICAgICAgIGFwaU1ldGhvZDogXCJQVVRcIixcbiAgICAgICAgYXBpUmVzb3VyY2U6IGFwaUdhdGV3YXlSZXNvdXJjZSxcbiAgICAgICAgcmVxdWVzdFRlbXBsYXRlOiB1cGRhdGVSZXF1ZXN0VGVtcGxhdGUsXG4gICAgICAgIGFkZGl0aW9uYWxSZXF1ZXN0VGVtcGxhdGVzOiBwcm9wcy5hZGRpdGlvbmFsVXBkYXRlUmVxdWVzdFRlbXBsYXRlcyxcbiAgICAgICAgaW50ZWdyYXRpb25SZXNwb25zZXM6IHByb3BzLnVwZGF0ZUludGVncmF0aW9uUmVzcG9uc2VzLFxuICAgICAgICBtZXRob2RPcHRpb25zOiB1cGRhdGVNZXRob2RPcHRpb25zXG4gICAgICB9KTtcbiAgICB9XG4gICAgLy8gRGVsZXRlXG4gICAgaWYgKHRoaXMuSW1wbGVtZW50RGVsZXRlT3BlcmF0aW9uKHByb3BzKSkge1xuICAgICAgY29uc3QgZGVsZXRlUmVxdWVzdFRlbXBsYXRlID0gcHJvcHMuZGVsZXRlUmVxdWVzdFRlbXBsYXRlID8/XG4gICAgICAgIGB7IFxcXG4gICAgICAgICAgXCJUYWJsZU5hbWVcIjogXCIke3RoaXMuZHluYW1vVGFibGUudGFibGVOYW1lfVwiLCBcXFxuICAgICAgICAgIFwiS2V5XCI6IHsgXFxcbiAgICAgICAgICAgIFwiJHtwYXJ0aXRpb25LZXlOYW1lfVwiOiB7IFxcXG4gICAgICAgICAgICAgIFwiU1wiOiBcIiRpbnB1dC5wYXJhbXMoJyR7cmVzb3VyY2VOYW1lfScpXCIgXFxcbiAgICAgICAgICAgICAgfSBcXFxuICAgICAgICAgICAgfSwgXFxcbiAgICAgICAgICBcIlJldHVyblZhbHVlc1wiOiBcIkFMTF9PTERcIiBcXFxuICAgICAgICB9YDtcblxuICAgICAgdGhpcy5hZGRBY3Rpb25Ub1BvbGljeShcImR5bmFtb2RiOkRlbGV0ZUl0ZW1cIik7XG4gICAgICBjb25zdCBkZWxldGVNZXRob2RPcHRpb25zOiBhcGkuTWV0aG9kT3B0aW9ucyA9IHByb3BzLmRlbGV0ZU1ldGhvZFJlc3BvbnNlcyA/IHsgbWV0aG9kUmVzcG9uc2VzOiBwcm9wcy5kZWxldGVNZXRob2RSZXNwb25zZXMgfSA6IHt9O1xuICAgICAgZGVmYXVsdHMuYWRkUHJveHlNZXRob2RUb0FwaVJlc291cmNlKHtcbiAgICAgICAgc2VydmljZTogXCJkeW5hbW9kYlwiLFxuICAgICAgICBhY3Rpb246IFwiRGVsZXRlSXRlbVwiLFxuICAgICAgICBhcGlHYXRld2F5Um9sZTogdGhpcy5hcGlHYXRld2F5Um9sZSxcbiAgICAgICAgYXBpTWV0aG9kOiBcIkRFTEVURVwiLFxuICAgICAgICBhcGlSZXNvdXJjZTogYXBpR2F0ZXdheVJlc291cmNlLFxuICAgICAgICByZXF1ZXN0VGVtcGxhdGU6IGRlbGV0ZVJlcXVlc3RUZW1wbGF0ZSxcbiAgICAgICAgYWRkaXRpb25hbFJlcXVlc3RUZW1wbGF0ZXM6IHByb3BzLmFkZGl0aW9uYWxEZWxldGVSZXF1ZXN0VGVtcGxhdGVzLFxuICAgICAgICBpbnRlZ3JhdGlvblJlc3BvbnNlczogcHJvcHMuZGVsZXRlSW50ZWdyYXRpb25SZXNwb25zZXMsXG4gICAgICAgIG1ldGhvZE9wdGlvbnM6IGRlbGV0ZU1ldGhvZE9wdGlvbnNcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgQ2hlY2tSZWFkUmVxdWVzdFByb3BzKHByb3BzOiBBcGlHYXRld2F5VG9EeW5hbW9EQlByb3BzKTogYm9vbGVhbiB7XG4gICAgaWYgKChwcm9wcy5yZWFkUmVxdWVzdFRlbXBsYXRlIHx8IHByb3BzLmFkZGl0aW9uYWxSZWFkUmVxdWVzdFRlbXBsYXRlcyB8fCBwcm9wcy5yZWFkSW50ZWdyYXRpb25SZXNwb25zZXMpXG4gICAgICAgICYmIHByb3BzLmFsbG93UmVhZE9wZXJhdGlvbiA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHJpdmF0ZSBDaGVja1VwZGF0ZVJlcXVlc3RQcm9wcyhwcm9wczogQXBpR2F0ZXdheVRvRHluYW1vREJQcm9wcyk6IGJvb2xlYW4ge1xuICAgIGlmICgocHJvcHMudXBkYXRlUmVxdWVzdFRlbXBsYXRlIHx8IHByb3BzLmFkZGl0aW9uYWxVcGRhdGVSZXF1ZXN0VGVtcGxhdGVzIHx8IHByb3BzLnVwZGF0ZUludGVncmF0aW9uUmVzcG9uc2VzKVxuICAgICAgICAmJiBwcm9wcy5hbGxvd1VwZGF0ZU9wZXJhdGlvbiAhPT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwcml2YXRlIENoZWNrRGVsZXRlUmVxdWVzdFByb3BzKHByb3BzOiBBcGlHYXRld2F5VG9EeW5hbW9EQlByb3BzKTogYm9vbGVhbiB7XG4gICAgaWYgKChwcm9wcy5kZWxldGVSZXF1ZXN0VGVtcGxhdGUgfHwgcHJvcHMuYWRkaXRpb25hbERlbGV0ZVJlcXVlc3RUZW1wbGF0ZXMgfHwgcHJvcHMuZGVsZXRlSW50ZWdyYXRpb25SZXNwb25zZXMpXG4gICAgICAgICYmIHByb3BzLmFsbG93RGVsZXRlT3BlcmF0aW9uICE9PSB0cnVlKSAge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgQ2hlY2tDcmVhdGVSZXF1ZXN0UHJvcHMocHJvcHM6IEFwaUdhdGV3YXlUb0R5bmFtb0RCUHJvcHMpOiBib29sZWFuIHtcbiAgICBpZiAoKHByb3BzLmNyZWF0ZVJlcXVlc3RUZW1wbGF0ZSB8fCBwcm9wcy5hZGRpdGlvbmFsQ3JlYXRlUmVxdWVzdFRlbXBsYXRlcyB8fCBwcm9wcy5jcmVhdGVJbnRlZ3JhdGlvblJlc3BvbnNlcylcbiAgICAgICAgJiYgcHJvcHMuYWxsb3dDcmVhdGVPcGVyYXRpb24gIT09IHRydWUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIEltcGxlbWVudENyZWF0ZU9wZXJhdGlvbihwcm9wczogQXBpR2F0ZXdheVRvRHluYW1vREJQcm9wcyk6IGJvb2xlYW4ge1xuICAgIGlmIChwcm9wcy5hbGxvd0NyZWF0ZU9wZXJhdGlvbiAmJiBwcm9wcy5hbGxvd0NyZWF0ZU9wZXJhdGlvbiA9PT0gdHJ1ZSAmJiBwcm9wcy5jcmVhdGVSZXF1ZXN0VGVtcGxhdGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIEltcGxlbWVudFJlYU9wZXJhdGlvbihwcm9wczogQXBpR2F0ZXdheVRvRHluYW1vREJQcm9wcyk6IGJvb2xlYW4ge1xuICAgIGlmIChwcm9wcy5hbGxvd1JlYWRPcGVyYXRpb24gPT09IHVuZGVmaW5lZCB8fCBwcm9wcy5hbGxvd1JlYWRPcGVyYXRpb24gPT09IHRydWUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIEltcGxlbWVudFVwZGF0ZU9wZXJhdGlvbihwcm9wczogQXBpR2F0ZXdheVRvRHluYW1vREJQcm9wcyk6IGJvb2xlYW4ge1xuICAgIGlmIChwcm9wcy5hbGxvd1VwZGF0ZU9wZXJhdGlvbiAmJiBwcm9wcy5hbGxvd1VwZGF0ZU9wZXJhdGlvbiA9PT0gdHJ1ZSAmJiBwcm9wcy51cGRhdGVSZXF1ZXN0VGVtcGxhdGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIEltcGxlbWVudERlbGV0ZU9wZXJhdGlvbihwcm9wczogQXBpR2F0ZXdheVRvRHluYW1vREJQcm9wcyk6IGJvb2xlYW4ge1xuICAgIGlmIChwcm9wcy5hbGxvd0RlbGV0ZU9wZXJhdGlvbiAmJiBwcm9wcy5hbGxvd0RlbGV0ZU9wZXJhdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkQWN0aW9uVG9Qb2xpY3koYWN0aW9uOiBzdHJpbmcpIHtcbiAgICB0aGlzLmFwaUdhdGV3YXlSb2xlLmFkZFRvUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIHJlc291cmNlczogW1xuICAgICAgICB0aGlzLmR5bmFtb1RhYmxlLnRhYmxlQXJuXG4gICAgICBdLFxuICAgICAgYWN0aW9uczogW2Ake2FjdGlvbn1gXVxuICAgIH0pKTtcbiAgfVxufSJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aws-solutions-constructs/aws-apigateway-dynamodb",
3
- "version": "2.85.2",
3
+ "version": "2.85.4",
4
4
  "description": "CDK Constructs for AWS API Gateway and Amazon DynamoDB integration.",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",
@@ -22,12 +22,13 @@
22
22
  "test": "jest --coverage",
23
23
  "clean": "tsc -b --clean",
24
24
  "watch": "tsc -b -w",
25
+ "asciidoc": "asciidoctor --failure-level WARNING -o /dev/null README.adoc",
25
26
  "integ": "integ-runner --update-on-failed",
26
27
  "integ-no-clean": "integ-runner --update-on-failed --no-clean",
27
28
  "integ-assert": "integ-runner",
28
29
  "jsii": "jsii",
29
30
  "jsii-pacmak": "jsii-pacmak",
30
- "build+lint+test": "npm run jsii && npm run lint && npm test && npm run integ-assert",
31
+ "build+lint+test": "npm run jsii && npm run lint && npm run asciidoc && npm test && npm run integ-assert",
31
32
  "blt": "npm run build+lint+test",
32
33
  "snapshot-update": "npm run jsii && npm test -- -u && npm run integ-assert"
33
34
  },
@@ -54,7 +55,7 @@
54
55
  }
55
56
  },
56
57
  "dependencies": {
57
- "@aws-solutions-constructs/core": "2.85.2",
58
+ "@aws-solutions-constructs/core": "2.85.4",
58
59
  "constructs": "^10.0.0"
59
60
  },
60
61
  "devDependencies": {
@@ -79,7 +80,7 @@
79
80
  ]
80
81
  },
81
82
  "peerDependencies": {
82
- "@aws-solutions-constructs/core": "2.85.2",
83
+ "@aws-solutions-constructs/core": "2.85.4",
83
84
  "constructs": "^10.0.0",
84
85
  "aws-cdk-lib": "^2.193.0"
85
86
  },