@btc-embedded/cdk-extensions 0.20.9 → 0.20.11
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 +405 -34
- package/API.md +424 -16
- package/CHANGELOG.md +14 -0
- package/assets/constructs/api-keys/lambdas/pre-token.lambda/index.js +16 -13
- package/lib/constructs/EventPipe.js +1 -1
- package/lib/constructs/ExportedService.js +1 -1
- package/lib/constructs/S3Bucket.js +1 -1
- package/lib/constructs/SecureRestApi.js +1 -1
- package/lib/constructs/SecureRestApiV2.js +1 -1
- package/lib/constructs/api-keys/ApiKeyClientAuthorization.js +1 -1
- package/lib/constructs/api-keys/ApiKeyManagement.js +1 -1
- package/lib/constructs/api-keys/ApiKeyPreTokenHandler.js +1 -1
- package/lib/constructs/api-keys/ApiKeyStore.js +1 -1
- package/lib/constructs/api-keys/lambdas/pre-token.lambda.js +16 -17
- package/lib/extensions/ApiGatewayExtension.js +1 -1
- package/lib/extensions/ApplicationLoadBalancerExtension.js +1 -1
- package/lib/extensions/ApplicationLoadBalancerExtensionV2.js +1 -1
- package/lib/extensions/CloudMapExtension.js +1 -1
- package/lib/extensions/DeactivatableServiceExtension.js +1 -1
- package/lib/extensions/DeploymentConfigExtension.js +1 -1
- package/lib/extensions/DocumentDbAccessExtension.js +1 -1
- package/lib/extensions/DomainEventMessagingExtension.js +1 -1
- package/lib/extensions/EfsMountExtension.js +1 -1
- package/lib/extensions/ExtraContainerExtension.js +1 -1
- package/lib/extensions/HTTPApiExtension.d.ts +4 -2
- package/lib/extensions/HTTPApiExtension.js +14 -10
- package/lib/extensions/LogExtension.js +1 -1
- package/lib/extensions/ModifyContainerDefinitionExtension.js +1 -1
- package/lib/extensions/ModifyTaskDefinitionExtension.js +1 -1
- package/lib/extensions/OpenIdExtension.js +1 -1
- package/lib/extensions/OpenTelemetryExtension.js +1 -1
- package/lib/extensions/PostgresDbAccessExtension.js +1 -1
- package/lib/extensions/SharedVolumeExtension.js +1 -1
- package/lib/extensions/TcpKeepAliveExtension.js +1 -1
- package/lib/platform/ApiGateway.js +1 -1
- package/lib/platform/ApiGatewayVpcLink.js +2 -2
- package/lib/platform/ApplicationLoadBalancer.js +1 -1
- package/lib/platform/ApplicationLoadBalancerV2.js +2 -2
- package/lib/platform/BTCLogGroup.js +1 -1
- package/lib/platform/CognitoUserPool.js +2 -2
- package/lib/platform/DefaultUserPoolClients.js +1 -1
- package/lib/platform/DocumentDB.js +2 -2
- package/lib/platform/EcsCluster.js +1 -1
- package/lib/platform/EfsFileSystem.js +1 -1
- package/lib/platform/HostedZone.d.ts +103 -0
- package/lib/platform/HostedZone.js +105 -0
- package/lib/platform/PrivateDnsNamespace.js +1 -1
- package/lib/platform/ResourceServer.js +1 -1
- package/lib/platform/Vpc.js +1 -1
- package/lib/platform/VpcV2.d.ts +10 -1
- package/lib/platform/VpcV2.js +8 -4
- package/lib/platform/index.d.ts +1 -0
- package/lib/platform/index.js +2 -1
- package/lib/utils/StackParameter.js +1 -1
- package/package.json +1 -1
package/API.md
CHANGED
|
@@ -3798,6 +3798,175 @@ The security group of the exported ECS service.
|
|
|
3798
3798
|
---
|
|
3799
3799
|
|
|
3800
3800
|
|
|
3801
|
+
### HostedZone <a name="HostedZone" id="@btc-embedded/cdk-extensions.HostedZone"></a>
|
|
3802
|
+
|
|
3803
|
+
- *Implements:* <a href="#@btc-embedded/cdk-extensions.IHostedZone">IHostedZone</a>
|
|
3804
|
+
|
|
3805
|
+
A CDK construct that creates or looks up a Route53 hosted zone.
|
|
3806
|
+
|
|
3807
|
+
*Example*
|
|
3808
|
+
|
|
3809
|
+
```typescript
|
|
3810
|
+
// Import from base platform
|
|
3811
|
+
const zone = HostedZone.fromBasePlatform(this, 'Zone', {
|
|
3812
|
+
stackName: 'my-platform'
|
|
3813
|
+
});
|
|
3814
|
+
```
|
|
3815
|
+
|
|
3816
|
+
|
|
3817
|
+
#### Initializers <a name="Initializers" id="@btc-embedded/cdk-extensions.HostedZone.Initializer"></a>
|
|
3818
|
+
|
|
3819
|
+
```typescript
|
|
3820
|
+
import { HostedZone } from '@btc-embedded/cdk-extensions'
|
|
3821
|
+
|
|
3822
|
+
new HostedZone(scope: Construct, id: string, props: HostedZoneProps)
|
|
3823
|
+
```
|
|
3824
|
+
|
|
3825
|
+
| **Name** | **Type** | **Description** |
|
|
3826
|
+
| --- | --- | --- |
|
|
3827
|
+
| <code><a href="#@btc-embedded/cdk-extensions.HostedZone.Initializer.parameter.scope">scope</a></code> | <code>constructs.Construct</code> | *No description.* |
|
|
3828
|
+
| <code><a href="#@btc-embedded/cdk-extensions.HostedZone.Initializer.parameter.id">id</a></code> | <code>string</code> | *No description.* |
|
|
3829
|
+
| <code><a href="#@btc-embedded/cdk-extensions.HostedZone.Initializer.parameter.props">props</a></code> | <code><a href="#@btc-embedded/cdk-extensions.HostedZoneProps">HostedZoneProps</a></code> | *No description.* |
|
|
3830
|
+
|
|
3831
|
+
---
|
|
3832
|
+
|
|
3833
|
+
##### `scope`<sup>Required</sup> <a name="scope" id="@btc-embedded/cdk-extensions.HostedZone.Initializer.parameter.scope"></a>
|
|
3834
|
+
|
|
3835
|
+
- *Type:* constructs.Construct
|
|
3836
|
+
|
|
3837
|
+
---
|
|
3838
|
+
|
|
3839
|
+
##### `id`<sup>Required</sup> <a name="id" id="@btc-embedded/cdk-extensions.HostedZone.Initializer.parameter.id"></a>
|
|
3840
|
+
|
|
3841
|
+
- *Type:* string
|
|
3842
|
+
|
|
3843
|
+
---
|
|
3844
|
+
|
|
3845
|
+
##### `props`<sup>Required</sup> <a name="props" id="@btc-embedded/cdk-extensions.HostedZone.Initializer.parameter.props"></a>
|
|
3846
|
+
|
|
3847
|
+
- *Type:* <a href="#@btc-embedded/cdk-extensions.HostedZoneProps">HostedZoneProps</a>
|
|
3848
|
+
|
|
3849
|
+
---
|
|
3850
|
+
|
|
3851
|
+
#### Methods <a name="Methods" id="Methods"></a>
|
|
3852
|
+
|
|
3853
|
+
| **Name** | **Description** |
|
|
3854
|
+
| --- | --- |
|
|
3855
|
+
| <code><a href="#@btc-embedded/cdk-extensions.HostedZone.toString">toString</a></code> | Returns a string representation of this construct. |
|
|
3856
|
+
|
|
3857
|
+
---
|
|
3858
|
+
|
|
3859
|
+
##### `toString` <a name="toString" id="@btc-embedded/cdk-extensions.HostedZone.toString"></a>
|
|
3860
|
+
|
|
3861
|
+
```typescript
|
|
3862
|
+
public toString(): string
|
|
3863
|
+
```
|
|
3864
|
+
|
|
3865
|
+
Returns a string representation of this construct.
|
|
3866
|
+
|
|
3867
|
+
#### Static Functions <a name="Static Functions" id="Static Functions"></a>
|
|
3868
|
+
|
|
3869
|
+
| **Name** | **Description** |
|
|
3870
|
+
| --- | --- |
|
|
3871
|
+
| <code><a href="#@btc-embedded/cdk-extensions.HostedZone.isConstruct">isConstruct</a></code> | Checks if `x` is a construct. |
|
|
3872
|
+
| <code><a href="#@btc-embedded/cdk-extensions.HostedZone.fromBasePlatform">fromBasePlatform</a></code> | Import a hosted zone from a base platform stack. |
|
|
3873
|
+
|
|
3874
|
+
---
|
|
3875
|
+
|
|
3876
|
+
##### `isConstruct` <a name="isConstruct" id="@btc-embedded/cdk-extensions.HostedZone.isConstruct"></a>
|
|
3877
|
+
|
|
3878
|
+
```typescript
|
|
3879
|
+
import { HostedZone } from '@btc-embedded/cdk-extensions'
|
|
3880
|
+
|
|
3881
|
+
HostedZone.isConstruct(x: any)
|
|
3882
|
+
```
|
|
3883
|
+
|
|
3884
|
+
Checks if `x` is a construct.
|
|
3885
|
+
|
|
3886
|
+
Use this method instead of `instanceof` to properly detect `Construct`
|
|
3887
|
+
instances, even when the construct library is symlinked.
|
|
3888
|
+
|
|
3889
|
+
Explanation: in JavaScript, multiple copies of the `constructs` library on
|
|
3890
|
+
disk are seen as independent, completely different libraries. As a
|
|
3891
|
+
consequence, the class `Construct` in each copy of the `constructs` library
|
|
3892
|
+
is seen as a different class, and an instance of one class will not test as
|
|
3893
|
+
`instanceof` the other class. `npm install` will not create installations
|
|
3894
|
+
like this, but users may manually symlink construct libraries together or
|
|
3895
|
+
use a monorepo tool: in those cases, multiple copies of the `constructs`
|
|
3896
|
+
library can be accidentally installed, and `instanceof` will behave
|
|
3897
|
+
unpredictably. It is safest to avoid using `instanceof`, and using
|
|
3898
|
+
this type-testing method instead.
|
|
3899
|
+
|
|
3900
|
+
###### `x`<sup>Required</sup> <a name="x" id="@btc-embedded/cdk-extensions.HostedZone.isConstruct.parameter.x"></a>
|
|
3901
|
+
|
|
3902
|
+
- *Type:* any
|
|
3903
|
+
|
|
3904
|
+
Any object.
|
|
3905
|
+
|
|
3906
|
+
---
|
|
3907
|
+
|
|
3908
|
+
##### `fromBasePlatform` <a name="fromBasePlatform" id="@btc-embedded/cdk-extensions.HostedZone.fromBasePlatform"></a>
|
|
3909
|
+
|
|
3910
|
+
```typescript
|
|
3911
|
+
import { HostedZone } from '@btc-embedded/cdk-extensions'
|
|
3912
|
+
|
|
3913
|
+
HostedZone.fromBasePlatform(scope: Construct, id: string, attrs: HostedZoneAttributes)
|
|
3914
|
+
```
|
|
3915
|
+
|
|
3916
|
+
Import a hosted zone from a base platform stack.
|
|
3917
|
+
|
|
3918
|
+
###### `scope`<sup>Required</sup> <a name="scope" id="@btc-embedded/cdk-extensions.HostedZone.fromBasePlatform.parameter.scope"></a>
|
|
3919
|
+
|
|
3920
|
+
- *Type:* constructs.Construct
|
|
3921
|
+
|
|
3922
|
+
---
|
|
3923
|
+
|
|
3924
|
+
###### `id`<sup>Required</sup> <a name="id" id="@btc-embedded/cdk-extensions.HostedZone.fromBasePlatform.parameter.id"></a>
|
|
3925
|
+
|
|
3926
|
+
- *Type:* string
|
|
3927
|
+
|
|
3928
|
+
---
|
|
3929
|
+
|
|
3930
|
+
###### `attrs`<sup>Required</sup> <a name="attrs" id="@btc-embedded/cdk-extensions.HostedZone.fromBasePlatform.parameter.attrs"></a>
|
|
3931
|
+
|
|
3932
|
+
- *Type:* <a href="#@btc-embedded/cdk-extensions.HostedZoneAttributes">HostedZoneAttributes</a>
|
|
3933
|
+
|
|
3934
|
+
---
|
|
3935
|
+
|
|
3936
|
+
#### Properties <a name="Properties" id="Properties"></a>
|
|
3937
|
+
|
|
3938
|
+
| **Name** | **Type** | **Description** |
|
|
3939
|
+
| --- | --- | --- |
|
|
3940
|
+
| <code><a href="#@btc-embedded/cdk-extensions.HostedZone.property.node">node</a></code> | <code>constructs.Node</code> | The tree node. |
|
|
3941
|
+
| <code><a href="#@btc-embedded/cdk-extensions.HostedZone.property.zone">zone</a></code> | <code>aws-cdk-lib.aws_route53.IHostedZone</code> | The AWS Route53 HostedZone instance. |
|
|
3942
|
+
|
|
3943
|
+
---
|
|
3944
|
+
|
|
3945
|
+
##### `node`<sup>Required</sup> <a name="node" id="@btc-embedded/cdk-extensions.HostedZone.property.node"></a>
|
|
3946
|
+
|
|
3947
|
+
```typescript
|
|
3948
|
+
public readonly node: Node;
|
|
3949
|
+
```
|
|
3950
|
+
|
|
3951
|
+
- *Type:* constructs.Node
|
|
3952
|
+
|
|
3953
|
+
The tree node.
|
|
3954
|
+
|
|
3955
|
+
---
|
|
3956
|
+
|
|
3957
|
+
##### `zone`<sup>Required</sup> <a name="zone" id="@btc-embedded/cdk-extensions.HostedZone.property.zone"></a>
|
|
3958
|
+
|
|
3959
|
+
```typescript
|
|
3960
|
+
public readonly zone: IHostedZone;
|
|
3961
|
+
```
|
|
3962
|
+
|
|
3963
|
+
- *Type:* aws-cdk-lib.aws_route53.IHostedZone
|
|
3964
|
+
|
|
3965
|
+
The AWS Route53 HostedZone instance.
|
|
3966
|
+
|
|
3967
|
+
---
|
|
3968
|
+
|
|
3969
|
+
|
|
3801
3970
|
### PrivateDnsNamespace <a name="PrivateDnsNamespace" id="@btc-embedded/cdk-extensions.PrivateDnsNamespace"></a>
|
|
3802
3971
|
|
|
3803
3972
|
- *Implements:* <a href="#@btc-embedded/cdk-extensions.IPrivateDnsNamespace">IPrivateDnsNamespace</a>
|
|
@@ -5897,6 +6066,9 @@ A construct that creates or imports an existing VPC.
|
|
|
5897
6066
|
|
|
5898
6067
|
Supports importing by VPC ID, VPC name, or creating a new VPC with a specified CIDR block.
|
|
5899
6068
|
|
|
6069
|
+
When using fromBasePlatform() to import a VPC from another stack, provide the vpcId
|
|
6070
|
+
parameter as a string to avoid CloudFormation token issues with VPC lookups.
|
|
6071
|
+
|
|
5900
6072
|
#### Initializers <a name="Initializers" id="@btc-embedded/cdk-extensions.VpcV2.Initializer"></a>
|
|
5901
6073
|
|
|
5902
6074
|
```typescript
|
|
@@ -5993,7 +6165,7 @@ Any object.
|
|
|
5993
6165
|
```typescript
|
|
5994
6166
|
import { VpcV2 } from '@btc-embedded/cdk-extensions'
|
|
5995
6167
|
|
|
5996
|
-
VpcV2.fromBasePlatform(scope: Construct, id: string,
|
|
6168
|
+
VpcV2.fromBasePlatform(scope: Construct, id: string, attrs: VpcV2Attributes)
|
|
5997
6169
|
```
|
|
5998
6170
|
|
|
5999
6171
|
###### `scope`<sup>Required</sup> <a name="scope" id="@btc-embedded/cdk-extensions.VpcV2.fromBasePlatform.parameter.scope"></a>
|
|
@@ -6008,9 +6180,9 @@ VpcV2.fromBasePlatform(scope: Construct, id: string, stackName: string)
|
|
|
6008
6180
|
|
|
6009
6181
|
---
|
|
6010
6182
|
|
|
6011
|
-
###### `
|
|
6183
|
+
###### `attrs`<sup>Required</sup> <a name="attrs" id="@btc-embedded/cdk-extensions.VpcV2.fromBasePlatform.parameter.attrs"></a>
|
|
6012
6184
|
|
|
6013
|
-
- *Type:*
|
|
6185
|
+
- *Type:* <a href="#@btc-embedded/cdk-extensions.VpcV2Attributes">VpcV2Attributes</a>
|
|
6014
6186
|
|
|
6015
6187
|
---
|
|
6016
6188
|
|
|
@@ -9847,6 +10019,150 @@ const filterEqualsIgnoreCase: FilterEqualsIgnoreCase = { ... }
|
|
|
9847
10019
|
```
|
|
9848
10020
|
|
|
9849
10021
|
|
|
10022
|
+
### HostedZoneAttributes <a name="HostedZoneAttributes" id="@btc-embedded/cdk-extensions.HostedZoneAttributes"></a>
|
|
10023
|
+
|
|
10024
|
+
Attributes required to import an existing hosted zone from another stack.
|
|
10025
|
+
|
|
10026
|
+
#### Initializer <a name="Initializer" id="@btc-embedded/cdk-extensions.HostedZoneAttributes.Initializer"></a>
|
|
10027
|
+
|
|
10028
|
+
```typescript
|
|
10029
|
+
import { HostedZoneAttributes } from '@btc-embedded/cdk-extensions'
|
|
10030
|
+
|
|
10031
|
+
const hostedZoneAttributes: HostedZoneAttributes = { ... }
|
|
10032
|
+
```
|
|
10033
|
+
|
|
10034
|
+
#### Properties <a name="Properties" id="Properties"></a>
|
|
10035
|
+
|
|
10036
|
+
| **Name** | **Type** | **Description** |
|
|
10037
|
+
| --- | --- | --- |
|
|
10038
|
+
| <code><a href="#@btc-embedded/cdk-extensions.HostedZoneAttributes.property.stackName">stackName</a></code> | <code>string</code> | The name of the stack where the hosted zone is defined. |
|
|
10039
|
+
|
|
10040
|
+
---
|
|
10041
|
+
|
|
10042
|
+
##### `stackName`<sup>Required</sup> <a name="stackName" id="@btc-embedded/cdk-extensions.HostedZoneAttributes.property.stackName"></a>
|
|
10043
|
+
|
|
10044
|
+
```typescript
|
|
10045
|
+
public readonly stackName: string;
|
|
10046
|
+
```
|
|
10047
|
+
|
|
10048
|
+
- *Type:* string
|
|
10049
|
+
|
|
10050
|
+
The name of the stack where the hosted zone is defined.
|
|
10051
|
+
|
|
10052
|
+
This is usually the base platform stack.
|
|
10053
|
+
|
|
10054
|
+
---
|
|
10055
|
+
|
|
10056
|
+
### HostedZoneProps <a name="HostedZoneProps" id="@btc-embedded/cdk-extensions.HostedZoneProps"></a>
|
|
10057
|
+
|
|
10058
|
+
Properties for creating or looking up a hosted zone.
|
|
10059
|
+
|
|
10060
|
+
#### Initializer <a name="Initializer" id="@btc-embedded/cdk-extensions.HostedZoneProps.Initializer"></a>
|
|
10061
|
+
|
|
10062
|
+
```typescript
|
|
10063
|
+
import { HostedZoneProps } from '@btc-embedded/cdk-extensions'
|
|
10064
|
+
|
|
10065
|
+
const hostedZoneProps: HostedZoneProps = { ... }
|
|
10066
|
+
```
|
|
10067
|
+
|
|
10068
|
+
#### Properties <a name="Properties" id="Properties"></a>
|
|
10069
|
+
|
|
10070
|
+
| **Name** | **Type** | **Description** |
|
|
10071
|
+
| --- | --- | --- |
|
|
10072
|
+
| <code><a href="#@btc-embedded/cdk-extensions.HostedZoneProps.property.domainName">domainName</a></code> | <code>string</code> | The domain name of the hosted zone (e.g., "example.com"). |
|
|
10073
|
+
| <code><a href="#@btc-embedded/cdk-extensions.HostedZoneProps.property.addTrailingDot">addTrailingDot</a></code> | <code>boolean</code> | Whether to add a trailing dot to the zone name. |
|
|
10074
|
+
| <code><a href="#@btc-embedded/cdk-extensions.HostedZoneProps.property.caaAmazon">caaAmazon</a></code> | <code>boolean</code> | Restrict certificate authorities to Amazon only. |
|
|
10075
|
+
| <code><a href="#@btc-embedded/cdk-extensions.HostedZoneProps.property.comment">comment</a></code> | <code>string</code> | Comments about the hosted zone. |
|
|
10076
|
+
| <code><a href="#@btc-embedded/cdk-extensions.HostedZoneProps.property.mode">mode</a></code> | <code><a href="#@btc-embedded/cdk-extensions.HostedZoneMode">HostedZoneMode</a></code> | Whether to create a new zone or look up an existing one. |
|
|
10077
|
+
| <code><a href="#@btc-embedded/cdk-extensions.HostedZoneProps.property.queryLogsLogGroupArn">queryLogsLogGroupArn</a></code> | <code>string</code> | ARN of the CloudWatch log group for query logs. |
|
|
10078
|
+
|
|
10079
|
+
---
|
|
10080
|
+
|
|
10081
|
+
##### `domainName`<sup>Required</sup> <a name="domainName" id="@btc-embedded/cdk-extensions.HostedZoneProps.property.domainName"></a>
|
|
10082
|
+
|
|
10083
|
+
```typescript
|
|
10084
|
+
public readonly domainName: string;
|
|
10085
|
+
```
|
|
10086
|
+
|
|
10087
|
+
- *Type:* string
|
|
10088
|
+
|
|
10089
|
+
The domain name of the hosted zone (e.g., "example.com").
|
|
10090
|
+
|
|
10091
|
+
---
|
|
10092
|
+
|
|
10093
|
+
##### `addTrailingDot`<sup>Optional</sup> <a name="addTrailingDot" id="@btc-embedded/cdk-extensions.HostedZoneProps.property.addTrailingDot"></a>
|
|
10094
|
+
|
|
10095
|
+
```typescript
|
|
10096
|
+
public readonly addTrailingDot: boolean;
|
|
10097
|
+
```
|
|
10098
|
+
|
|
10099
|
+
- *Type:* boolean
|
|
10100
|
+
- *Default:* true
|
|
10101
|
+
|
|
10102
|
+
Whether to add a trailing dot to the zone name.
|
|
10103
|
+
|
|
10104
|
+
Only applies when mode is CREATE.
|
|
10105
|
+
|
|
10106
|
+
---
|
|
10107
|
+
|
|
10108
|
+
##### `caaAmazon`<sup>Optional</sup> <a name="caaAmazon" id="@btc-embedded/cdk-extensions.HostedZoneProps.property.caaAmazon"></a>
|
|
10109
|
+
|
|
10110
|
+
```typescript
|
|
10111
|
+
public readonly caaAmazon: boolean;
|
|
10112
|
+
```
|
|
10113
|
+
|
|
10114
|
+
- *Type:* boolean
|
|
10115
|
+
- *Default:* false
|
|
10116
|
+
|
|
10117
|
+
Restrict certificate authorities to Amazon only.
|
|
10118
|
+
|
|
10119
|
+
Only applies when mode is CREATE.
|
|
10120
|
+
|
|
10121
|
+
---
|
|
10122
|
+
|
|
10123
|
+
##### `comment`<sup>Optional</sup> <a name="comment" id="@btc-embedded/cdk-extensions.HostedZoneProps.property.comment"></a>
|
|
10124
|
+
|
|
10125
|
+
```typescript
|
|
10126
|
+
public readonly comment: string;
|
|
10127
|
+
```
|
|
10128
|
+
|
|
10129
|
+
- *Type:* string
|
|
10130
|
+
- *Default:* none
|
|
10131
|
+
|
|
10132
|
+
Comments about the hosted zone.
|
|
10133
|
+
|
|
10134
|
+
Only applies when mode is CREATE.
|
|
10135
|
+
|
|
10136
|
+
---
|
|
10137
|
+
|
|
10138
|
+
##### `mode`<sup>Optional</sup> <a name="mode" id="@btc-embedded/cdk-extensions.HostedZoneProps.property.mode"></a>
|
|
10139
|
+
|
|
10140
|
+
```typescript
|
|
10141
|
+
public readonly mode: HostedZoneMode;
|
|
10142
|
+
```
|
|
10143
|
+
|
|
10144
|
+
- *Type:* <a href="#@btc-embedded/cdk-extensions.HostedZoneMode">HostedZoneMode</a>
|
|
10145
|
+
- *Default:* HostedZoneMode.LOOKUP
|
|
10146
|
+
|
|
10147
|
+
Whether to create a new zone or look up an existing one.
|
|
10148
|
+
|
|
10149
|
+
---
|
|
10150
|
+
|
|
10151
|
+
##### `queryLogsLogGroupArn`<sup>Optional</sup> <a name="queryLogsLogGroupArn" id="@btc-embedded/cdk-extensions.HostedZoneProps.property.queryLogsLogGroupArn"></a>
|
|
10152
|
+
|
|
10153
|
+
```typescript
|
|
10154
|
+
public readonly queryLogsLogGroupArn: string;
|
|
10155
|
+
```
|
|
10156
|
+
|
|
10157
|
+
- *Type:* string
|
|
10158
|
+
- *Default:* disabled
|
|
10159
|
+
|
|
10160
|
+
ARN of the CloudWatch log group for query logs.
|
|
10161
|
+
|
|
10162
|
+
Only applies when mode is CREATE.
|
|
10163
|
+
|
|
10164
|
+
---
|
|
10165
|
+
|
|
9850
10166
|
### HTTPApiExtensionProps <a name="HTTPApiExtensionProps" id="@btc-embedded/cdk-extensions.HTTPApiExtensionProps"></a>
|
|
9851
10167
|
|
|
9852
10168
|
#### Initializer <a name="Initializer" id="@btc-embedded/cdk-extensions.HTTPApiExtensionProps.Initializer"></a>
|
|
@@ -9861,24 +10177,12 @@ const hTTPApiExtensionProps: HTTPApiExtensionProps = { ... }
|
|
|
9861
10177
|
|
|
9862
10178
|
| **Name** | **Type** | **Description** |
|
|
9863
10179
|
| --- | --- | --- |
|
|
9864
|
-
| <code><a href="#@btc-embedded/cdk-extensions.HTTPApiExtensionProps.property.hostedZone">hostedZone</a></code> | <code>aws-cdk-lib.aws_route53.IHostedZone</code> | Hosted Zone to create the gateway domain A record. |
|
|
9865
10180
|
| <code><a href="#@btc-embedded/cdk-extensions.HTTPApiExtensionProps.property.platformStackName">platformStackName</a></code> | <code>string</code> | The name of the base platform stack. |
|
|
9866
10181
|
| <code><a href="#@btc-embedded/cdk-extensions.HTTPApiExtensionProps.property.domainPrefix">domainPrefix</a></code> | <code>string</code> | Domain prefix for the API Gateway endpoint. |
|
|
9867
10182
|
| <code><a href="#@btc-embedded/cdk-extensions.HTTPApiExtensionProps.property.enableAccessLogs">enableAccessLogs</a></code> | <code>boolean</code> | Enable access logs for the API Gateway. |
|
|
9868
10183
|
| <code><a href="#@btc-embedded/cdk-extensions.HTTPApiExtensionProps.property.endpointPrefix">endpointPrefix</a></code> | <code>string</code> | The prefix for the API Gateway endpoint. |
|
|
9869
10184
|
| <code><a href="#@btc-embedded/cdk-extensions.HTTPApiExtensionProps.property.extraHttpApiAttributes">extraHttpApiAttributes</a></code> | <code>aws-cdk-lib.aws_apigatewayv2.HttpApiAttributes</code> | Specify additional HTTP API Attributes. |
|
|
9870
|
-
|
|
9871
|
-
---
|
|
9872
|
-
|
|
9873
|
-
##### `hostedZone`<sup>Required</sup> <a name="hostedZone" id="@btc-embedded/cdk-extensions.HTTPApiExtensionProps.property.hostedZone"></a>
|
|
9874
|
-
|
|
9875
|
-
```typescript
|
|
9876
|
-
public readonly hostedZone: IHostedZone;
|
|
9877
|
-
```
|
|
9878
|
-
|
|
9879
|
-
- *Type:* aws-cdk-lib.aws_route53.IHostedZone
|
|
9880
|
-
|
|
9881
|
-
Hosted Zone to create the gateway domain A record.
|
|
10185
|
+
| <code><a href="#@btc-embedded/cdk-extensions.HTTPApiExtensionProps.property.hostedZone">hostedZone</a></code> | <code>aws-cdk-lib.aws_route53.IHostedZone</code> | Hosted Zone to create the gateway domain A record. |
|
|
9882
10186
|
|
|
9883
10187
|
---
|
|
9884
10188
|
|
|
@@ -9944,6 +10248,21 @@ Specify additional HTTP API Attributes.
|
|
|
9944
10248
|
|
|
9945
10249
|
---
|
|
9946
10250
|
|
|
10251
|
+
##### ~~`hostedZone`~~<sup>Optional</sup> <a name="hostedZone" id="@btc-embedded/cdk-extensions.HTTPApiExtensionProps.property.hostedZone"></a>
|
|
10252
|
+
|
|
10253
|
+
- *Deprecated:* Provide only platformStackName. The hosted zone will be imported automatically.
|
|
10254
|
+
|
|
10255
|
+
```typescript
|
|
10256
|
+
public readonly hostedZone: IHostedZone;
|
|
10257
|
+
```
|
|
10258
|
+
|
|
10259
|
+
- *Type:* aws-cdk-lib.aws_route53.IHostedZone
|
|
10260
|
+
- *Default:* Imported from base platform using HostedZone.fromBasePlatform()
|
|
10261
|
+
|
|
10262
|
+
Hosted Zone to create the gateway domain A record.
|
|
10263
|
+
|
|
10264
|
+
---
|
|
10265
|
+
|
|
9947
10266
|
### ImportLogGroupOption <a name="ImportLogGroupOption" id="@btc-embedded/cdk-extensions.ImportLogGroupOption"></a>
|
|
9948
10267
|
|
|
9949
10268
|
#### Initializer <a name="Initializer" id="@btc-embedded/cdk-extensions.ImportLogGroupOption.Initializer"></a>
|
|
@@ -10960,6 +11279,38 @@ public readonly vpcCidr: IIpAddresses;
|
|
|
10960
11279
|
|
|
10961
11280
|
---
|
|
10962
11281
|
|
|
11282
|
+
### VpcV2Attributes <a name="VpcV2Attributes" id="@btc-embedded/cdk-extensions.VpcV2Attributes"></a>
|
|
11283
|
+
|
|
11284
|
+
#### Initializer <a name="Initializer" id="@btc-embedded/cdk-extensions.VpcV2Attributes.Initializer"></a>
|
|
11285
|
+
|
|
11286
|
+
```typescript
|
|
11287
|
+
import { VpcV2Attributes } from '@btc-embedded/cdk-extensions'
|
|
11288
|
+
|
|
11289
|
+
const vpcV2Attributes: VpcV2Attributes = { ... }
|
|
11290
|
+
```
|
|
11291
|
+
|
|
11292
|
+
#### Properties <a name="Properties" id="Properties"></a>
|
|
11293
|
+
|
|
11294
|
+
| **Name** | **Type** | **Description** |
|
|
11295
|
+
| --- | --- | --- |
|
|
11296
|
+
| <code><a href="#@btc-embedded/cdk-extensions.VpcV2Attributes.property.vpcId">vpcId</a></code> | <code>string</code> | The VPC ID to import. |
|
|
11297
|
+
|
|
11298
|
+
---
|
|
11299
|
+
|
|
11300
|
+
##### `vpcId`<sup>Required</sup> <a name="vpcId" id="@btc-embedded/cdk-extensions.VpcV2Attributes.property.vpcId"></a>
|
|
11301
|
+
|
|
11302
|
+
```typescript
|
|
11303
|
+
public readonly vpcId: string;
|
|
11304
|
+
```
|
|
11305
|
+
|
|
11306
|
+
- *Type:* string
|
|
11307
|
+
|
|
11308
|
+
The VPC ID to import.
|
|
11309
|
+
|
|
11310
|
+
This should be a concrete value, not a token.
|
|
11311
|
+
|
|
11312
|
+
---
|
|
11313
|
+
|
|
10963
11314
|
### VpcV2Props <a name="VpcV2Props" id="@btc-embedded/cdk-extensions.VpcV2Props"></a>
|
|
10964
11315
|
|
|
10965
11316
|
#### Initializer <a name="Initializer" id="@btc-embedded/cdk-extensions.VpcV2Props.Initializer"></a>
|
|
@@ -16419,6 +16770,33 @@ The security group of the exported ECS service.
|
|
|
16419
16770
|
|
|
16420
16771
|
---
|
|
16421
16772
|
|
|
16773
|
+
### IHostedZone <a name="IHostedZone" id="@btc-embedded/cdk-extensions.IHostedZone"></a>
|
|
16774
|
+
|
|
16775
|
+
- *Implemented By:* <a href="#@btc-embedded/cdk-extensions.HostedZone">HostedZone</a>, <a href="#@btc-embedded/cdk-extensions.IHostedZone">IHostedZone</a>
|
|
16776
|
+
|
|
16777
|
+
Interface for a HostedZone construct.
|
|
16778
|
+
|
|
16779
|
+
|
|
16780
|
+
#### Properties <a name="Properties" id="Properties"></a>
|
|
16781
|
+
|
|
16782
|
+
| **Name** | **Type** | **Description** |
|
|
16783
|
+
| --- | --- | --- |
|
|
16784
|
+
| <code><a href="#@btc-embedded/cdk-extensions.IHostedZone.property.zone">zone</a></code> | <code>aws-cdk-lib.aws_route53.IHostedZone</code> | The AWS Route53 HostedZone instance. |
|
|
16785
|
+
|
|
16786
|
+
---
|
|
16787
|
+
|
|
16788
|
+
##### `zone`<sup>Required</sup> <a name="zone" id="@btc-embedded/cdk-extensions.IHostedZone.property.zone"></a>
|
|
16789
|
+
|
|
16790
|
+
```typescript
|
|
16791
|
+
public readonly zone: IHostedZone;
|
|
16792
|
+
```
|
|
16793
|
+
|
|
16794
|
+
- *Type:* aws-cdk-lib.aws_route53.IHostedZone
|
|
16795
|
+
|
|
16796
|
+
The AWS Route53 HostedZone instance.
|
|
16797
|
+
|
|
16798
|
+
---
|
|
16799
|
+
|
|
16422
16800
|
### IPrivateDnsNamespace <a name="IPrivateDnsNamespace" id="@btc-embedded/cdk-extensions.IPrivateDnsNamespace"></a>
|
|
16423
16801
|
|
|
16424
16802
|
- *Implemented By:* <a href="#@btc-embedded/cdk-extensions.PrivateDnsNamespace">PrivateDnsNamespace</a>, <a href="#@btc-embedded/cdk-extensions.IPrivateDnsNamespace">IPrivateDnsNamespace</a>
|
|
@@ -16536,6 +16914,36 @@ Root access is granted (includes read-write access).
|
|
|
16536
16914
|
---
|
|
16537
16915
|
|
|
16538
16916
|
|
|
16917
|
+
### HostedZoneMode <a name="HostedZoneMode" id="@btc-embedded/cdk-extensions.HostedZoneMode"></a>
|
|
16918
|
+
|
|
16919
|
+
Mode for hosted zone creation or lookup.
|
|
16920
|
+
|
|
16921
|
+
#### Members <a name="Members" id="Members"></a>
|
|
16922
|
+
|
|
16923
|
+
| **Name** | **Description** |
|
|
16924
|
+
| --- | --- |
|
|
16925
|
+
| <code><a href="#@btc-embedded/cdk-extensions.HostedZoneMode.CREATE">CREATE</a></code> | Create a new hosted zone. |
|
|
16926
|
+
| <code><a href="#@btc-embedded/cdk-extensions.HostedZoneMode.LOOKUP">LOOKUP</a></code> | Look up an existing hosted zone. |
|
|
16927
|
+
|
|
16928
|
+
---
|
|
16929
|
+
|
|
16930
|
+
##### `CREATE` <a name="CREATE" id="@btc-embedded/cdk-extensions.HostedZoneMode.CREATE"></a>
|
|
16931
|
+
|
|
16932
|
+
Create a new hosted zone.
|
|
16933
|
+
|
|
16934
|
+
---
|
|
16935
|
+
|
|
16936
|
+
|
|
16937
|
+
##### `LOOKUP` <a name="LOOKUP" id="@btc-embedded/cdk-extensions.HostedZoneMode.LOOKUP"></a>
|
|
16938
|
+
|
|
16939
|
+
Look up an existing hosted zone.
|
|
16940
|
+
|
|
16941
|
+
Requires AWS credentials during synthesis.
|
|
16942
|
+
The result is cached in cdk.context.json.
|
|
16943
|
+
|
|
16944
|
+
---
|
|
16945
|
+
|
|
16946
|
+
|
|
16539
16947
|
### InvocationType <a name="InvocationType" id="@btc-embedded/cdk-extensions.InvocationType"></a>
|
|
16540
16948
|
|
|
16541
16949
|
The invocation type of the step function.
|
package/CHANGELOG.md
CHANGED
|
@@ -1,4 +1,18 @@
|
|
|
1
1
|
|
|
2
|
+
## [0.20.10](https://github.com/btc-embedded/cdk-extensions/compare/v0.20.9...v0.20.10) (2026-01-23)
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
* add HostedZone construct ([b62ff58](https://github.com/btc-embedded/cdk-extensions/commit/b62ff582857b6c05ce5cd0a2b29ccf5b957351e2))
|
|
8
|
+
|
|
9
|
+
## [0.20.9](https://github.com/btc-embedded/cdk-extensions/compare/v0.20.8...v0.20.9) (2026-01-22)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
### Features
|
|
13
|
+
|
|
14
|
+
* export api client scope and secret ([f67c3a9](https://github.com/btc-embedded/cdk-extensions/commit/f67c3a9b5b1e465e3feed1a3acd7c8c9f86520c8))
|
|
15
|
+
|
|
2
16
|
## [0.20.8](https://github.com/btc-embedded/cdk-extensions/compare/v0.20.7...v0.20.8) (2026-01-22)
|
|
3
17
|
|
|
4
18
|
|
|
@@ -6184,10 +6184,10 @@ var attributesSchema = zod_default.object({
|
|
|
6184
6184
|
});
|
|
6185
6185
|
var handler = async (event) => {
|
|
6186
6186
|
try {
|
|
6187
|
-
|
|
6188
|
-
|
|
6189
|
-
|
|
6190
|
-
|
|
6187
|
+
const clientRequest = event.userName === "ClientCredentials";
|
|
6188
|
+
logger.info(
|
|
6189
|
+
`Triggering pre-token lambda for ${clientRequest ? "m2m" : "user"}.`
|
|
6190
|
+
);
|
|
6191
6191
|
if (!process.env.DYNAMODB_TABLE_NAME) {
|
|
6192
6192
|
throw new Error("DYNAMODB_TABLE_NAME environment variable is not set");
|
|
6193
6193
|
}
|
|
@@ -6201,8 +6201,7 @@ var handler = async (event) => {
|
|
|
6201
6201
|
throw new Error("ATTRIBUTES environment variable contains invalid JSON");
|
|
6202
6202
|
}
|
|
6203
6203
|
const { attributes } = result.data;
|
|
6204
|
-
const
|
|
6205
|
-
const claims = clientId ? await generateApiClientClaims(clientId, attributes) : generateUserClaims(event, attributes);
|
|
6204
|
+
const claims = clientRequest ? await generateApiClientClaims(event, attributes) : generateUserClaims(event, attributes);
|
|
6206
6205
|
logger.debug("Claims to overwrite:", {
|
|
6207
6206
|
...claims
|
|
6208
6207
|
});
|
|
@@ -6227,20 +6226,24 @@ var handler = async (event) => {
|
|
|
6227
6226
|
throw error;
|
|
6228
6227
|
}
|
|
6229
6228
|
};
|
|
6230
|
-
async function generateApiClientClaims(
|
|
6231
|
-
const
|
|
6229
|
+
async function generateApiClientClaims(event, attributes) {
|
|
6230
|
+
const apiKey = retrieveApiKey(event);
|
|
6232
6231
|
const tableName = process.env.DYNAMODB_TABLE_NAME;
|
|
6233
|
-
logger.debug("
|
|
6232
|
+
logger.debug("API key:", apiKey ?? "none");
|
|
6233
|
+
if (!apiKey) {
|
|
6234
|
+
throw new Error("No API key has been provided.");
|
|
6235
|
+
}
|
|
6234
6236
|
const getCommand = new import_lib_dynamodb.GetCommand({
|
|
6235
6237
|
TableName: tableName,
|
|
6236
6238
|
Key: {
|
|
6237
|
-
id:
|
|
6239
|
+
id: apiKey
|
|
6238
6240
|
}
|
|
6239
6241
|
});
|
|
6240
6242
|
const response = await docClient.send(getCommand);
|
|
6241
6243
|
if (!response.Item) {
|
|
6242
|
-
throw new Error(`
|
|
6244
|
+
throw new Error(`Api key ${apiKey} is invalid`);
|
|
6243
6245
|
}
|
|
6246
|
+
const user = API_CLIENT_PREFIX + apiKey;
|
|
6244
6247
|
return attributes.reduce(
|
|
6245
6248
|
(prev, cur) => ({
|
|
6246
6249
|
...prev,
|
|
@@ -6250,7 +6253,7 @@ async function generateApiClientClaims(clientId, attributes) {
|
|
|
6250
6253
|
);
|
|
6251
6254
|
}
|
|
6252
6255
|
function generateUserClaims(event, attributes) {
|
|
6253
|
-
const user = event.request.userAttributes["cognito:username"];
|
|
6256
|
+
const user = event.request.userAttributes["cognito:username"] ?? event.userName;
|
|
6254
6257
|
logger.debug("User:", user);
|
|
6255
6258
|
return attributes.reduce(
|
|
6256
6259
|
(prev, cur) => ({
|
|
@@ -6260,7 +6263,7 @@ function generateUserClaims(event, attributes) {
|
|
|
6260
6263
|
{ user }
|
|
6261
6264
|
);
|
|
6262
6265
|
}
|
|
6263
|
-
function
|
|
6266
|
+
function retrieveApiKey(event) {
|
|
6264
6267
|
const clientId = event.request.clientMetadata?.["api-key"];
|
|
6265
6268
|
return clientId?.startsWith(API_CLIENT_PREFIX) ? clientId.substring(API_CLIENT_PREFIX.length) : clientId;
|
|
6266
6269
|
}
|
|
@@ -145,5 +145,5 @@ class EventPipe extends construct_1.Construct {
|
|
|
145
145
|
}
|
|
146
146
|
exports.EventPipe = EventPipe;
|
|
147
147
|
_a = JSII_RTTI_SYMBOL_1;
|
|
148
|
-
EventPipe[_a] = { fqn: "@btc-embedded/cdk-extensions.EventPipe", version: "0.20.
|
|
148
|
+
EventPipe[_a] = { fqn: "@btc-embedded/cdk-extensions.EventPipe", version: "0.20.11" };
|
|
149
149
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXZlbnRQaXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnN0cnVjdHMvRXZlbnRQaXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNkNBQTBDO0FBQzFDLGlEQUE2RDtBQUU3RCxxREFBZ0Q7QUFHaEQsd0RBQXFEO0FBQ3JELDBDQUEwQztBQUMxQyx3RUFBdUU7QUFzQ3ZFLElBQVksUUFpQlg7QUFqQkQsV0FBWSxRQUFRO0lBQ2xCOztPQUVHO0lBQ0gsdUJBQVcsQ0FBQTtJQUNYOztPQUVHO0lBQ0gsMkJBQWUsQ0FBQTtJQUNmOztPQUVHO0lBQ0gseUJBQWEsQ0FBQTtJQUNiOztPQUVHO0lBQ0gsMkJBQWUsQ0FBQTtBQUNqQixDQUFDLEVBakJXLFFBQVEsd0JBQVIsUUFBUSxRQWlCbkI7QUFFRDs7R0FFRztBQUNILElBQVksY0FjWDtBQWRELFdBQVksY0FBYztJQUN4Qjs7Ozs7T0FLRztJQUNILDJFQUFnQixDQUFBO0lBQ2hCOzs7O09BSUc7SUFDSCx5RUFBZSxDQUFBO0FBQ2pCLENBQUMsRUFkVyxjQUFjLDhCQUFkLGNBQWMsUUFjekI7QUEyRkQ7O0dBRUc7QUFDSCxNQUFhLFNBQVUsU0FBUSxxQkFBUztJQUd0QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXFCO1FBQzdELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxrQkFBa0IsR0FDcEIsY0FBYyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDekUsSUFBSSw0QkFBNEIsR0FDOUIsWUFBWSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFFckUsSUFBSSxXQUFXLEdBQUcsT0FBTyxJ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QUUsQ0FBQztRQUVQLElBQUksbUJBQU8sQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO1lBQzdCLEdBQUcsaUJBQWlCO1lBQ3BCLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87WUFDMUIsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUTtZQUM3QixNQUFNLEVBQUUsU0FBUztZQUNqQixnQkFBZ0IsRUFBRSxnQkFBZ0I7WUFDbEMsZ0JBQWdCLEVBQUUsZ0JBQWdCO1lBQ2xDLFlBQVksRUFBRSxZQUFZO1NBQzNCLENBQUMsQ0FBQztRQUVILEtBQUssQ0FBQyxNQUFNLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdDLFdBQVcsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUMsa0JBQWtCLEVBQUUsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25ELFFBQVEsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFTyxjQUFjLENBQUMsS0FBcUI7UUFDMUMsT0FBTyxLQUFLLENBQUMsUUFBUSxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxHQUFHLENBQUM7SUFDekUsQ0FBQzs7QUE5R0gsOEJBK0dDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQW5ub3RhdGlvbnMgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IFJvbGUsIFNlcnZpY2VQcmluY2lwYWwgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHsgSUxvZ0dyb3VwIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sb2dzXCI7XG5pbXBvcnQgeyBDZm5QaXBlIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1waXBlc1wiO1xuaW1wb3J0IHsgSVF1ZXVlIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zcXNcIjtcbmltcG9ydCB7IElTdGF0ZU1hY2hpbmUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXN0ZXBmdW5jdGlvbnNcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzL2xpYi9jb25zdHJ1Y3RcIjtcbmltcG9ydCB7IEJUQ0xvZ0dyb3VwIH0gZnJvbSBcIi4uL3BsYXRmb3JtXCI7XG5pbXBvcnQgeyBpc0RlYWN0aXZhdGVkQ29uc3RydWN0IH0gZnJvbSBcIi4uL3V0aWxzL2RlYWN0aXZhdGVkQ29uc3RydWN0XCI7XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgcGlwZSBjb25zdHJ1Y3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRQaXBlUHJvcHMge1xuICAvKipcbiAgICogVGhlIHNvdXJjZSBTUVMgcXVldWUuIE5vIG90aGVyIHNvdXJjZSB0eXBlcyBhcmUgc3VwcG9ydGVkIGF0IHRoZSBtb21lbnQuXG4gICAqL1xuICByZWFkb25seSBzb3VyY2U6IElRdWV1ZTtcblxuICAvKipcbiAgICogVGhlIHRhcmdldCBTUVMgcXVldWUgb3IgdGFyZ2V0IHN0ZXAgZnVuY3Rpb24uXG4gICAqL1xuICByZWFkb25seSB0YXJnZXQ6IFRhcmdldFF1ZXVlIHwgVGFyZ2V0U3RlcEZ1bmN0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgcm9sZSB1c2VkIGJ5IHRoZSBldmVudCBwaXBlLiBJZiBvbWl0dGVkLCBhIG5ldyByb2xlIGlzIGNyZWF0ZWQuXG4gICAqL1xuICByZWFkb25seSByb2xlPzogUm9sZTtcblxuICAvKipcbiAgICogQW4gb3B0aW9uYWwgZmlsdGVyIGZvciB0aGUgcGlwZS5cbiAgICovXG4gIHJlYWRvbmx5IGZpbHRlcj86IFBpcGVGaWx0ZXI7XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgbG9nIGxldmVsIGZvciB0aGUgcGlwZS4gQ3JlYXRlcyBhIG5ldyBsb2cgZ3JvdXAsIGlmIGVuYWJsZWQuXG4gICAqIERlZmF1bHQ6IERpc2FibGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgbG9nTGV2ZWw/OiBMb2dMZXZlbDtcblxuICAvKipcbiAgICogVXNlIGFuIGV4aXN0aW5nIGxvZyBncm91cC4gSWYgbm9uZSBpcyBnaXZlbiBhbmQgbG9nZ2luZyBpcyBlbmFibGVkLCBhIG5ldyBsb2cgZ3JvdXAgd2lsbCBiZSBjcmVhdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgbG9nR3JvdXA/OiBJTG9nR3JvdXA7XG59XG5cbmV4cG9ydCBlbnVtIExvZ0xldmVsIHtcbiAgLyoqXG4gICAqIERlYWN0aXZhdGUgbG9nZ2luZy4gTm8gbG9nIGdyb3VwIHdpbGwgYmUgY3JlYXRlZC5cbiAgICovXG4gIE9GRiA9IFwiT0ZGXCIsXG4gIC8qKlxuICAgKiBPbmx5IGxvZyBlcnJvcnMuXG4gICAqL1xuICBFUlJPUiA9IFwiRVJST1JcIixcbiAgLyoqXG4gICAqIExvZyBlcnJvcnMgYW5kIGluZm9ybWF0aW9uYWwgbWVzc2FnZXMuXG4gICAqL1xuICBJTkZPID0gXCJJTkZPXCIsXG4gIC8qKlxuICAgKiBMb2cgdmVyeSB2ZXJib3NlLlxuICAgKi9cbiAgVFJBQ0UgPSBcIlRSQUNFXCIsXG59XG5cbi8qKlxuICogVGhlIGludm9jYXRpb24gdHlwZSBvZiB0aGUgc3RlcCBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGVudW0gSW52b2NhdGlvblR5cGUge1xuICAvKipcbiAgICogKGRlZmF1bHQpIC0gSW52b2tlIHN5bmNocm9ub3VzbHkuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWVcbiAgICogW1N0YXJ0U3luY0V4ZWN1dGlvbl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3N0ZXAtZnVuY3Rpb25zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX1N0YXJ0U3luY0V4ZWN1dGlvbi5odG1sKVxuICAgKiBpbiB0aGUgKkFXUyBTdGVwIEZ1bmN0aW9ucyBBUEkgUmVmZXJlbmNlKi5cbiAgICogPiBgUkVRVUVTVF9SRVNQT05TRWAgaXMgbm90IHN1cHBvcnRlZCBmb3IgYFNUQU5EQVJEYCBzdGF0ZSBtYWNoaW5lIHdvcmtmbG93cy5cbiAgICovXG4gIFJFUVVFU1RfUkVTUE9OU0UsXG4gIC8qKlxuICAgKiBJbnZva2UgYXN5bmNocm9ub3VzbHkuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWVcbiAgICogW1N0YXJ0RXhlY3V0aW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc3RlcC1mdW5jdGlvbnMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfU3RhcnRFeGVjdXRpb24uaHRtbClcbiAgICogaW4gdGhlICpBV1MgU3RlcCBGdW5jdGlvbnMgQVBJIFJlZmVyZW5jZSouXG4gICAqL1xuICBGSVJFX0FORF9GT1JHRVQsXG59XG5cbi8qKlxuICogVGhlIGlucHV0IHRlbXBsYXRlLlxuICogTm90ZSB0aGF0IHNvbWUgdmFsdWVzIGluIHRoZSByZXN1bHRpbmcgY29kZSBzaG91bGQgbm90IGhhdmUgcXVvdGVzIGFyb3VuZCB0aGUgdmFsdWUsIGUuZy4gaWYgYW4gb2JqZWN0XG4gKiBzaGFsbCBiZSBhZGRlZC4gVG8gcmVmbGVjdCB0aGlzLCBhZGQgY3VybHkgYnJhY2tldHMgYXJvdW5kIHRoZSB2YWx1ZSwgZS5nLiBge3s8JC5ib2R5Pn19YC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnB1dFRlbXBsYXRlIHtcbiAgLyoqXG4gICAqIEBqc2lpIGlnbm9yZVxuICAgKi9cbiAgcmVhZG9ubHkgW2tleTogc3RyaW5nXTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNRUyBxdWV1ZSBhcyBwaXBlIHRhcmdldC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYXJnZXRRdWV1ZSB7XG4gIHJlYWRvbmx5IHF1ZXVlOiBJUXVldWU7XG59XG5cbi8qKlxuICogU3RlcEZ1bmN0aW9uIGFzIHBpcGUgdGFyZ2V0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhcmdldFN0ZXBGdW5jdGlvbiB7XG4gIHJlYWRvbmx5IHN0ZXBGdW5jdGlvbjogSVN0YXRlTWFjaGluZTtcbiAgcmVhZG9ubHkgcGFyYW1ldGVycz86IFRhcmdldFN0ZXBGdW5jdGlvblBhcmFtZXRlcnM7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgYSBzdGVwIGZ1bmN0aW9uIHRhcmdldC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYXJnZXRTdGVwRnVuY3Rpb25QYXJhbWV0ZXJzIHtcbiAgcmVhZG9ubHkgaW5wdXRUZW1wbGF0ZT86IElucHV0VGVtcGxhdGU7XG4gIHJlYWRvbmx5IGludm9jYXRpb25UeXBlPzogSW52b2NhdGlvblR5cGU7XG59XG5cbi8qKlxuICogQmFzZSB0eXBlIGZvciBmaWx0ZXIgcnVsZXMuIE5vdCBhbGwgYXZhaWxhYmxlIHJ1bGVzIGFyZSBjdXJyZW50bHkgaW1wbGVtZW50ZWQuXG4gKi9cbmV4cG9ydCB0eXBlIEZpbHRlclJ1bGUgPVxuICB8IFByZWZpeEZpbHRlclJ1bGVcbiAgfCBTdWZmaXhGaWx0ZXJSdWxlXG4gIHwgQW55dGhpbmdCdXRGaWx0ZXJSdWxlXG4gIHwgRmlsdGVyRXF1YWxzSWdub3JlQ2FzZTtcblxuLyoqXG4gKiBSdWxlIHRoYXQgYSBwcm9wZXJ0eSBoYXMgdG8gc3RhcnQgd2l0aCBhIHByZWZpeC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcmVmaXhGaWx0ZXJSdWxlIHtcbiAgcmVhZG9ubHkgcHJlZml4OiBzdHJpbmcgfCBGaWx0ZXJFcXVhbHNJZ25vcmVDYXNlO1xufVxuXG4vKipcbiAqIFJ1bGUgdGhhdCBhIHByb3BlcnR5IGhhcyB0byBlbmQgd2l0aCBhIHN1ZmZpeC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdWZmaXhGaWx0ZXJSdWxlIHtcbiAgcmVhZG9ubHkgc3VmZml4OiBzdHJpbmcgfCBGaWx0ZXJFcXVhbHNJZ25vcmVDYXNlO1xufVxuXG4vKipcbiAqIFJ1bGUgdGhhdCBhbGxvd3MgYWxsIHZhbHVlcyBleGNlcHQgdGhlIGdpdmVuIG9uZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQW55dGhpbmdCdXRGaWx0ZXJSdWxlIHtcbiAgLyoqXG4gICAqIEBqc2lpIGlnbm9yZVxuICAgKi9cbiAgcmVhZG9ubHkgXCJhbnl0aGluZy1idXRcIjogc3RyaW5nW10gfCBGaWx0ZXJSdWxlO1xufVxuXG4vKipcbiAqIFJ1bGUgdGhhdCBtYXRjaGVzIGEgc3RyaW5nLCBpZ25vcmluZyB0aGUgY2FzZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJFcXVhbHNJZ25vcmVDYXNlIHtcbiAgLyoqXG4gICAqIEBqc2lpIGlnbm9yZVxuICAgKi9cbiAgcmVhZG9ubHkgXCJlcXVhbHMtaWdub3JlLWNhc2VcIjogc3RyaW5nIHwgc3RyaW5nW107XG59XG5cbi8qKlxuICogQSBmaWx0ZXIgZm9yIG1lc3NhZ2VzIGluIHRoZSBwaXBlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBpcGVGaWx0ZXIge1xuICAvKipcbiAgICogVGhlIHJ1bGVzIGZvciBlYWNoIGF0dHJpYnV0ZSBvZiB0aGUgYm9keS5cbiAgICogQGpzaWkgaWdub3JlXG4gICAqL1xuICByZWFkb25seSBba2V5OiBzdHJpbmddOiBGaWx0ZXJSdWxlW107XG59XG5cbi8qKlxuICogQSB3cmFwcGVyIGZvciB0aGUgTDEgZXZlbnQgcGlwZSB3aXRoIHRoZSBhYmlsaXR5IHRvIGRlYWN0aXZhdGUgaXQgd2l0aGluIHRoZSBzdGFjay5cbiAqL1xuZXhwb3J0IGNsYXNzIEV2ZW50UGlwZSBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSByb2xlOiBSb2xlO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBFdmVudFBpcGVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBsZXQgdGFyZ2V0U3RlcEZ1bmN0aW9uID1cbiAgICAgIFwic3RlcEZ1bmN0aW9uXCIgaW4gcHJvcHMudGFyZ2V0ID8gcHJvcHMudGFyZ2V0LnN0ZXBGdW5jdGlvbiA6IHVuZGVmaW5lZDtcbiAgICBsZXQgdGFyZ2V0U3RlcEZ1bmN0aW9uUGFyYW1ldGVycyA9XG4gICAgICBcInBhcmFtZXRlcnNcIiBpbiBwcm9wcy50YXJnZXQgPyBwcm9wcy50YXJnZXQucGFyYW1ldGVycyA6IHVuZGVmaW5lZDtcblxuICAgIGxldCB0YXJnZXRRdWV1ZSA9IFwicXVldWVcIiBpbiBwcm9wcy50YXJnZXQgPyBwcm9wcy50YXJnZXQucXVldWUgOiB1bmRlZmluZWQ7XG5cbiAgICBsZXQgc3FzVGFyZ2V0ID0gdGFyZ2V0UXVldWUgIT09IHVuZGVmaW5lZDtcblxuICAgIGxldCB0YXJnZXRBcm4gPSBzcXNUYXJnZXRcbiAgICAgID8gdGFyZ2V0UXVldWUhLnF1ZXVlQXJuXG4gICAgICA6IHRhcmdldFN0ZXBGdW5jdGlvbiEuc3RhdGVNYWNoaW5lQXJuO1xuXG4gICAgbGV0IGRlc2lyZWRTdGF0ZSA9IFwiUlVOTklOR1wiO1xuICAgIGlmIChpc0RlYWN0aXZhdGVkQ29uc3RydWN0KGlkKSkge1xuICAgICAgQW5ub3RhdGlvbnMub2YodGhpcykuYWRkSW5mbyhgJHtpZH0gaXMgc2V0IGRvIGJlIGRlYWN0aXZhdGVkLmApO1xuICAgICAgZGVzaXJlZFN0YXRlID0gXCJTVE9QUEVEXCI7XG4gICAgfVxuXG4gICAgdGhpcy5yb2xlID1cbiAgICAgIHByb3BzLnJvbGUgfHxcbiAgICAgIG5ldyBSb2xlKHRoaXMsIFwiRXZlbnRQaXBlUm9sZVwiLCB7XG4gICAgICAgIGFzc3VtZWRCeTogbmV3IFNlcnZpY2VQcmluY2lwYWwoXCJwaXBlcy5hbWF6b25hd3MuY29tXCIpLFxuICAgICAgfSk7XG5cbiAgICBsZXQgZmlsdGVyQ3JpdGVyaWEgPSBwcm9wcy5maWx0ZXJcbiAgICAgID8ge1xuICAgICAgICAgIGZpbHRlcnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcGF0dGVybjogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgIGJvZHk6IHtcbiAgICAgICAgICAgICAgICAgIC4uLnByb3BzLmZpbHRlcixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBsZXQgdGFyZ2V0UGFyYW1ldGVyczogQ2ZuUGlwZS5QaXBlVGFyZ2V0UGFyYW1ldGVyc1Byb3BlcnR5ID0ge307XG4gICAgaWYgKHRhcmdldFF1ZXVlKSB7XG4gICAgICB0YXJnZXRQYXJhbWV0ZXJzID0ge1xuICAgICAgICBzcXNRdWV1ZVBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBtZXNzYWdlR3JvdXBJZDogXCJkZWZhdWx0XCIsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0YXJnZXRQYXJhbWV0ZXJzID0ge1xuICAgICAgICBzdGVwRnVuY3Rpb25TdGF0ZU1hY2hpbmVQYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgaW52b2NhdGlvblR5cGU6IHRhcmdldFN0ZXBGdW5jdGlvblBhcmFtZXRlcnM/Lmludm9jYXRpb25UeXBlXG4gICAgICAgICAgICA/IEludm9jYXRpb25UeXBlW3RhcmdldFN0ZXBGdW5jdGlvblBhcmFtZXRlcnMuaW52b2NhdGlvblR5cGVdXG4gICAgICAgICAgICA6IEludm9jYXRpb25UeXBlW0ludm9jYXRpb25UeXBlLlJFUVVFU1RfUkVTUE9OU0VdLFxuICAgICAgICB9LFxuICAgICAgICAuLi4odGFyZ2V0U3RlcEZ1bmN0aW9uUGFyYW1ldGVycz8uaW5wdXRUZW1wbGF0ZSAmJiB7XG4gICAgICAgICAgaW5wdXRUZW1wbGF0ZTogSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICB0YXJnZXRTdGVwRnVuY3Rpb25QYXJhbWV0ZXJzLmlucHV0VGVtcGxhdGUsXG4gICAgICAgICAgKS5yZXBsYWNlKC9cIlxce1xceyguKz8pXFx9XFx9XCIvLCBcIiQxXCIpLFxuICAgICAgICB9KSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgbGV0IHNvdXJjZVBhcmFtZXRlcnMgPSB7XG4gICAgICBzcXNRdWV1ZVBhcmFtZXRlcnM6IHtcbiAgICAgICAgYmF0Y2hTaXplOiAxLFxuICAgICAgfSxcbiAgICAgIC4uLihmaWx0ZXJDcml0ZXJpYSAmJiB7IGZpbHRlckNyaXRlcmlhOiBmaWx0ZXJDcml0ZXJpYSB9KSxcbiAgICB9O1xuXG4gICAgY29uc3QgbG9nR3JvdXAgPSB0aGlzLmxvZ2dpbmdFbmFibGVkKHByb3BzKVxuICAgICAgPyAocHJvcHMubG9nR3JvdXAgPz9cbiAgICAgICAgbmV3IEJUQ0xvZ0dyb3VwKHRoaXMsIFwiRXZlbnRQaXBlTG9nR3JvdXBcIiwge1xuICAgICAgICAgIGxvZ1R5cGU6IFwiZXZlbnQtcGlwZVwiLFxuICAgICAgICB9KSlcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgcGlwZUNvbmZpZ3VyYXRpb24gPSB0aGlzLmxvZ2dpbmdFbmFibGVkKHByb3BzKVxuICAgICAgPyB7XG4gICAgICAgICAgbG9nQ29uZmlndXJhdGlvbjoge1xuICAgICAgICAgICAgY2xvdWR3YXRjaExvZ3NMb2dEZXN0aW5hdGlvbjoge1xuICAgICAgICAgICAgICBsb2dHcm91cEFybjogbG9nR3JvdXAhLmxvZ0dyb3VwQXJuLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxldmVsOiBwcm9wcy5sb2dMZXZlbCxcbiAgICAgICAgICB9LFxuICAgICAgICB9XG4gICAgICA6IHt9O1xuXG4gICAgbmV3IENmblBpcGUodGhpcywgXCJFdmVudFBpcGVcIiwge1xuICAgICAgLi4ucGlwZUNvbmZpZ3VyYXRpb24sXG4gICAgICByb2xlQXJuOiB0aGlzLnJvbGUucm9sZUFybixcbiAgICAgIHNvdXJjZTogcHJvcHMuc291cmNlLnF1ZXVlQXJuLFxuICAgICAgdGFyZ2V0OiB0YXJnZXRBcm4sXG4gICAgICBzb3VyY2VQYXJhbWV0ZXJzOiBzb3VyY2VQYXJhbWV0ZXJzLFxuICAgICAgdGFyZ2V0UGFyYW1ldGVyczogdGFyZ2V0UGFyYW1ldGVycyxcbiAgICAgIGRlc2lyZWRTdGF0ZTogZGVzaXJlZFN0YXRlLFxuICAgIH0pO1xuXG4gICAgcHJvcHMuc291cmNlLmdyYW50Q29uc3VtZU1lc3NhZ2VzKHRoaXMucm9sZSk7XG4gICAgdGFyZ2V0UXVldWU/LmdyYW50U2VuZE1lc3NhZ2VzKHRoaXMucm9sZSk7XG4gICAgdGFyZ2V0U3RlcEZ1bmN0aW9uPy5ncmFudFN0YXJ0RXhlY3V0aW9uKHRoaXMucm9sZSk7XG4gICAgbG9nR3JvdXA/LmdyYW50V3JpdGUodGhpcy5yb2xlKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9nZ2luZ0VuYWJsZWQocHJvcHM6IEV2ZW50UGlwZVByb3BzKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHByb3BzLmxvZ0xldmVsICE9PSB1bmRlZmluZWQgJiYgcHJvcHMubG9nTGV2ZWwgIT09IExvZ0xldmVsLk9GRjtcbiAgfVxufVxuIl19
|