terraconstructs 0.0.11 → 0.0.12
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 +104486 -34582
- package/lib/aws/arn.js +1 -1
- package/lib/aws/aws-construct.d.ts +1 -1
- package/lib/aws/aws-construct.js +28 -2
- package/lib/aws/aws-stack.d.ts +2 -4
- package/lib/aws/aws-stack.js +21 -8
- package/lib/aws/aws-tags.d.ts +58 -0
- package/lib/aws/aws-tags.js +77 -0
- package/lib/aws/cloudwatch/actions/ec2.js +1 -1
- package/lib/aws/cloudwatch/actions/lambda.js +1 -1
- package/lib/aws/cloudwatch/alarm-base.js +1 -1
- package/lib/aws/cloudwatch/alarm-rule.js +1 -1
- package/lib/aws/cloudwatch/alarm-status-widget.js +1 -1
- package/lib/aws/cloudwatch/alarm.js +1 -1
- package/lib/aws/cloudwatch/composite-alarm.js +1 -1
- package/lib/aws/cloudwatch/dashboard.js +1 -1
- package/lib/aws/cloudwatch/data-protection-policy.js +3 -3
- package/lib/aws/cloudwatch/graph.js +8 -8
- package/lib/aws/cloudwatch/layout.js +3 -3
- package/lib/aws/cloudwatch/log-destinations/kinesis.js +1 -1
- package/lib/aws/cloudwatch/log-destinations/lambda.js +1 -1
- package/lib/aws/cloudwatch/log-group.js +1 -1
- package/lib/aws/cloudwatch/log-query.js +1 -1
- package/lib/aws/cloudwatch/log-stream.js +1 -1
- package/lib/aws/cloudwatch/metric-filter.d.ts +1 -1
- package/lib/aws/cloudwatch/metric-filter.js +4 -4
- package/lib/aws/cloudwatch/metric.js +2 -2
- package/lib/aws/cloudwatch/pattern.js +3 -3
- package/lib/aws/cloudwatch/policy.js +1 -1
- package/lib/aws/cloudwatch/private/env-tokens.js +5 -6
- package/lib/aws/cloudwatch/private/metric-util.js +4 -5
- package/lib/aws/cloudwatch/private/object.js +2 -3
- package/lib/aws/cloudwatch/private/rendering.js +3 -3
- package/lib/aws/cloudwatch/private/statistic.js +6 -7
- package/lib/aws/cloudwatch/query-definition.js +2 -2
- package/lib/aws/cloudwatch/stats.js +1 -1
- package/lib/aws/cloudwatch/subscription-filter.d.ts +1 -1
- package/lib/aws/cloudwatch/subscription-filter.js +4 -4
- package/lib/aws/cloudwatch/text.js +1 -1
- package/lib/aws/cloudwatch/variable.js +3 -3
- package/lib/aws/cloudwatch/widget.d.ts +1 -1
- package/lib/aws/cloudwatch/widget.js +4 -4
- package/lib/aws/compute/activity.js +3 -2
- package/lib/aws/compute/alb/application-listener-action.d.ts +334 -0
- package/lib/aws/compute/alb/application-listener-action.js +281 -0
- package/lib/aws/compute/alb/application-listener-certificate.d.ts +35 -0
- package/lib/aws/compute/alb/application-listener-certificate.js +35 -0
- package/lib/aws/compute/alb/application-listener-rule.d.ts +233 -0
- package/lib/aws/compute/alb/application-listener-rule.js +220 -0
- package/lib/aws/compute/alb/application-listener.d.ts +574 -0
- package/lib/aws/compute/alb/application-listener.js +538 -0
- package/lib/aws/compute/alb/application-load-balancer.d.ts +715 -0
- package/lib/aws/compute/alb/application-load-balancer.js +780 -0
- package/lib/aws/compute/alb/application-target-group.d.ts +339 -0
- package/lib/aws/compute/alb/application-target-group.js +427 -0
- package/lib/aws/compute/alb/conditions.d.ts +61 -0
- package/lib/aws/compute/alb/conditions.js +164 -0
- package/lib/aws/compute/alb/trust-store-revocation.d.ts +59 -0
- package/lib/aws/compute/alb/trust-store-revocation.js +46 -0
- package/lib/aws/compute/alb/trust-store.d.ts +86 -0
- package/lib/aws/compute/alb/trust-store.js +79 -0
- package/lib/aws/compute/architecture.js +1 -1
- package/lib/aws/compute/aspects/require-imdsv2-aspect.d.ts +75 -0
- package/lib/aws/compute/aspects/require-imdsv2-aspect.js +106 -0
- package/lib/aws/compute/bastion-host.d.ts +172 -0
- package/lib/aws/compute/bastion-host.js +114 -0
- package/lib/aws/compute/chain.js +1 -1
- package/lib/aws/compute/cidr-splits.d.ts +49 -0
- package/lib/aws/compute/cidr-splits.js +59 -0
- package/lib/aws/compute/client-vpn-authorization-rule.d.ts +43 -0
- package/lib/aws/compute/client-vpn-authorization-rule.js +30 -0
- package/lib/aws/compute/client-vpn-endpoint-types.d.ts +62 -0
- package/lib/aws/compute/client-vpn-endpoint-types.js +25 -0
- package/lib/aws/compute/client-vpn-endpoint.d.ts +239 -0
- package/lib/aws/compute/client-vpn-endpoint.js +259 -0
- package/lib/aws/compute/client-vpn-route.d.ts +67 -0
- package/lib/aws/compute/client-vpn-route.js +57 -0
- package/lib/aws/compute/condition.js +1 -1
- package/lib/aws/compute/connections.d.ts +137 -0
- package/lib/aws/compute/connections.js +208 -0
- package/lib/aws/compute/ec2-augmentations.generated.d.ts +53 -0
- package/lib/aws/compute/ec2-augmentations.generated.js +35 -0
- package/lib/aws/compute/ec2-canned-metrics.generated.d.ts +555 -0
- package/lib/aws/compute/ec2-canned-metrics.generated.js +681 -0
- package/lib/aws/compute/ec2-util-v2.d.ts +141 -0
- package/lib/aws/compute/ec2-util-v2.js +286 -0
- package/lib/aws/compute/ec2-util.d.ts +52 -0
- package/lib/aws/compute/ec2-util.js +138 -0
- package/lib/aws/compute/elasticloadbalancing-canned-metrics.generated.d.ts +176 -0
- package/lib/aws/compute/elasticloadbalancing-canned-metrics.generated.js +119 -0
- package/lib/aws/compute/elasticloadbalancingv2-canned-metrics.generated.d.ts +860 -0
- package/lib/aws/compute/elasticloadbalancingv2-canned-metrics.generated.js +597 -0
- package/lib/aws/compute/event-invoke-config.js +1 -1
- package/lib/aws/compute/event-source-filter.js +2 -2
- package/lib/aws/compute/event-source-mapping.js +1 -1
- package/lib/aws/compute/event-sources/s3-onfailure-destination.js +1 -1
- package/lib/aws/compute/event-sources/s3.js +1 -1
- package/lib/aws/compute/event-sources/sqs-dlq.js +1 -1
- package/lib/aws/compute/event-sources/sqs.js +1 -1
- package/lib/aws/compute/fields.js +4 -4
- package/lib/aws/compute/function-alias.js +1 -1
- package/lib/aws/compute/function-base.js +2 -2
- package/lib/aws/compute/function-destinations/event-bridge.js +1 -1
- package/lib/aws/compute/function-destinations/function.js +1 -1
- package/lib/aws/compute/function-destinations/sqs.js +1 -1
- package/lib/aws/compute/function-nodejs.js +1 -1
- package/lib/aws/compute/function-url.js +1 -1
- package/lib/aws/compute/function-vpc-config.generated.d.ts +3 -3
- package/lib/aws/compute/function-vpc-config.generated.js +1 -1
- package/lib/aws/compute/function.d.ts +1 -1
- package/lib/aws/compute/function.js +5 -5
- package/lib/aws/compute/index-alpha.d.ts +5 -0
- package/lib/aws/compute/index-alpha.js +22 -0
- package/lib/aws/compute/index.d.ts +60 -0
- package/lib/aws/compute/index.js +70 -2
- package/lib/aws/compute/instance-types.d.ts +1354 -0
- package/lib/aws/compute/instance-types.js +1683 -0
- package/lib/aws/compute/instance.d.ts +436 -0
- package/lib/aws/compute/instance.js +262 -0
- package/lib/aws/compute/ip-addresses.d.ts +249 -0
- package/lib/aws/compute/ip-addresses.js +248 -0
- package/lib/aws/compute/ipam.d.ts +309 -0
- package/lib/aws/compute/ipam.js +306 -0
- package/lib/aws/compute/key-pair.d.ts +178 -0
- package/lib/aws/compute/key-pair.js +194 -0
- package/lib/aws/compute/lambda-augmentations.generated.d.ts +65 -0
- package/lib/aws/compute/lambda-augmentations.generated.js +41 -0
- package/lib/aws/compute/lambda-canned-metrics.generated.d.ts +316 -0
- package/lib/aws/compute/lambda-canned-metrics.generated.js +119 -0
- package/lib/aws/compute/launch-template.d.ts +540 -0
- package/lib/aws/compute/launch-template.js +468 -0
- package/lib/aws/compute/lb-shared/access-logs-accounts.d.ts +7 -0
- package/lib/aws/compute/lb-shared/access-logs-accounts.js +46 -0
- package/lib/aws/compute/lb-shared/base-listener.d.ts +113 -0
- package/lib/aws/compute/lb-shared/base-listener.js +181 -0
- package/lib/aws/compute/lb-shared/base-load-balancer.d.ts +212 -0
- package/lib/aws/compute/lb-shared/base-load-balancer.js +290 -0
- package/lib/aws/compute/lb-shared/base-target-group.d.ts +382 -0
- package/lib/aws/compute/lb-shared/base-target-group.js +364 -0
- package/lib/aws/compute/lb-shared/enums.d.ts +282 -0
- package/lib/aws/compute/lb-shared/enums.js +301 -0
- package/lib/aws/compute/lb-shared/grid-lookup-types.d.ts +42 -0
- package/lib/aws/compute/lb-shared/grid-lookup-types.js +53 -0
- package/lib/aws/compute/lb-shared/imported.d.ts +24 -0
- package/lib/aws/compute/lb-shared/imported.js +27 -0
- package/lib/aws/compute/lb-shared/lb-listener-config.generated.d.ts +194 -0
- package/lib/aws/compute/lb-shared/lb-listener-config.generated.js +3 -0
- package/lib/aws/compute/lb-shared/lb-target-group-attachment-config.generated.d.ts +56 -0
- package/lib/aws/compute/lb-shared/lb-target-group-attachment-config.generated.js +3 -0
- package/lib/aws/compute/lb-shared/listener-action.d.ts +14 -0
- package/lib/aws/compute/lb-shared/listener-action.js +4 -0
- package/lib/aws/compute/lb-shared/listener-certificate.d.ts +28 -0
- package/lib/aws/compute/lb-shared/listener-certificate.js +29 -0
- package/lib/aws/compute/lb-shared/load-balancer-targets.d.ts +93 -0
- package/lib/aws/compute/lb-shared/load-balancer-targets.js +127 -0
- package/lib/aws/compute/lb-shared/util.d.ts +113 -0
- package/lib/aws/compute/lb-shared/util.js +264 -0
- package/lib/aws/compute/lb-targets/alb-target.d.ts +67 -0
- package/lib/aws/compute/lb-targets/alb-target.js +100 -0
- package/lib/aws/compute/lb-targets/index.d.ts +4 -0
- package/lib/aws/compute/lb-targets/index.js +22 -0
- package/lib/aws/compute/lb-targets/instance-target.d.ts +42 -0
- package/lib/aws/compute/lb-targets/instance-target.js +67 -0
- package/lib/aws/compute/lb-targets/ip-target.d.ts +55 -0
- package/lib/aws/compute/lb-targets/ip-target.js +79 -0
- package/lib/aws/compute/lb-targets/lambda-target.d.ts +25 -0
- package/lib/aws/compute/lb-targets/lambda-target.js +50 -0
- package/lib/aws/compute/load-balancer.d.ts +336 -0
- package/lib/aws/compute/load-balancer.js +287 -0
- package/lib/aws/compute/machine-image/amazon-linux-2022.d.ts +63 -0
- package/lib/aws/compute/machine-image/amazon-linux-2022.js +84 -0
- package/lib/aws/compute/machine-image/amazon-linux-2023.d.ts +63 -0
- package/lib/aws/compute/machine-image/amazon-linux-2023.js +84 -0
- package/lib/aws/compute/machine-image/amazon-linux2.d.ts +76 -0
- package/lib/aws/compute/machine-image/amazon-linux2.js +87 -0
- package/lib/aws/compute/machine-image/common.d.ts +181 -0
- package/lib/aws/compute/machine-image/common.js +122 -0
- package/lib/aws/compute/machine-image/index.d.ts +5 -0
- package/lib/aws/compute/machine-image/index.js +22 -0
- package/lib/aws/compute/machine-image/machine-image.d.ts +463 -0
- package/lib/aws/compute/machine-image/machine-image.js +566 -0
- package/lib/aws/compute/machine-image/utils.d.ts +2 -0
- package/lib/aws/compute/machine-image/utils.js +17 -0
- package/lib/aws/compute/nat.d.ts +325 -0
- package/lib/aws/compute/nat.js +455 -0
- package/lib/aws/compute/network-acl-types.d.ts +152 -0
- package/lib/aws/compute/network-acl-types.js +156 -0
- package/lib/aws/compute/network-acl.d.ts +285 -0
- package/lib/aws/compute/network-acl.js +207 -0
- package/lib/aws/compute/network-util.d.ts +116 -0
- package/lib/aws/compute/network-util.js +241 -0
- package/lib/aws/compute/nlb/network-listener-action.d.ts +92 -0
- package/lib/aws/compute/nlb/network-listener-action.js +146 -0
- package/lib/aws/compute/nlb/network-listener-certificate.d.ts +24 -0
- package/lib/aws/compute/nlb/network-listener-certificate.js +25 -0
- package/lib/aws/compute/nlb/network-listener.d.ts +248 -0
- package/lib/aws/compute/nlb/network-listener.js +217 -0
- package/lib/aws/compute/nlb/network-load-balancer.d.ts +315 -0
- package/lib/aws/compute/nlb/network-load-balancer.js +360 -0
- package/lib/aws/compute/nlb/network-target-group.d.ts +153 -0
- package/lib/aws/compute/nlb/network-target-group.js +223 -0
- package/lib/aws/compute/peer.d.ts +64 -0
- package/lib/aws/compute/peer.js +235 -0
- package/lib/aws/compute/placement-group.d.ts +161 -0
- package/lib/aws/compute/placement-group.js +133 -0
- package/lib/aws/compute/port.d.ts +287 -0
- package/lib/aws/compute/port.js +390 -0
- package/lib/aws/compute/prefix-list.d.ts +131 -0
- package/lib/aws/compute/prefix-list.js +114 -0
- package/lib/aws/compute/private/context-stub.d.ts +7 -0
- package/lib/aws/compute/private/context-stub.js +43 -0
- package/lib/aws/compute/private/ebs-util.d.ts +14 -0
- package/lib/aws/compute/private/ebs-util.js +145 -0
- package/lib/aws/compute/private/intrinstics.js +2 -1
- package/lib/aws/compute/private/json-path.js +8 -8
- package/lib/aws/compute/private/util.js +2 -3
- package/lib/aws/compute/route.d.ts +547 -0
- package/lib/aws/compute/route.js +469 -0
- package/lib/aws/compute/security-group.d.ts +414 -0
- package/lib/aws/compute/security-group.js +538 -0
- package/lib/aws/compute/state-graph.js +1 -1
- package/lib/aws/compute/state-machine-fragment.js +1 -1
- package/lib/aws/compute/state-machine.d.ts +2 -2
- package/lib/aws/compute/state-machine.js +14 -12
- package/lib/aws/compute/states/choice.js +1 -1
- package/lib/aws/compute/states/custom-state.js +1 -1
- package/lib/aws/compute/states/distributed-map/item-batcher.js +1 -1
- package/lib/aws/compute/states/distributed-map/item-reader.js +5 -5
- package/lib/aws/compute/states/distributed-map/result-writer.js +1 -1
- package/lib/aws/compute/states/distributed-map.js +1 -1
- package/lib/aws/compute/states/fail.js +1 -1
- package/lib/aws/compute/states/map-base.js +1 -1
- package/lib/aws/compute/states/map.js +1 -1
- package/lib/aws/compute/states/parallel.js +1 -1
- package/lib/aws/compute/states/pass.js +2 -2
- package/lib/aws/compute/states/state.js +5 -5
- package/lib/aws/compute/states/succeed.js +1 -1
- package/lib/aws/compute/states/task-base.js +2 -2
- package/lib/aws/compute/states/task.js +1 -1
- package/lib/aws/compute/states/wait.js +2 -2
- package/lib/aws/compute/stepfunctions-canned-metrics.generated.d.ts +83 -0
- package/lib/aws/compute/stepfunctions-canned-metrics.generated.js +127 -0
- package/lib/aws/compute/subnet-v2.d.ts +213 -0
- package/lib/aws/compute/subnet-v2.js +405 -0
- package/lib/aws/compute/subnet.d.ts +37 -0
- package/lib/aws/compute/subnet.js +181 -0
- package/lib/aws/compute/task-credentials.js +1 -1
- package/lib/aws/compute/task-input.js +1 -1
- package/lib/aws/compute/tasks/aws-sdk/call-aws-service.js +1 -1
- package/lib/aws/compute/tasks/eventbridge/put-events.js +1 -1
- package/lib/aws/compute/tasks/http/invoke.js +1 -1
- package/lib/aws/compute/tasks/lambda/invoke.js +1 -1
- package/lib/aws/compute/tasks/private/task-utils.js +3 -4
- package/lib/aws/compute/tasks/resource-arn-suffix.js +2 -3
- package/lib/aws/compute/tasks/sqs/send-message.js +1 -1
- package/lib/aws/compute/tasks/stepfunctions/invoke-activity.js +1 -1
- package/lib/aws/compute/tasks/stepfunctions/start-execution.js +1 -1
- package/lib/aws/compute/types.js +2 -2
- package/lib/aws/compute/user-data.d.ts +270 -0
- package/lib/aws/compute/user-data.js +487 -0
- package/lib/aws/compute/util.d.ts +1 -1
- package/lib/aws/compute/util.js +4 -5
- package/lib/aws/compute/volume.d.ts +480 -0
- package/lib/aws/compute/volume.js +426 -0
- package/lib/aws/compute/vpc-endpoint-service.d.ts +149 -0
- package/lib/aws/compute/vpc-endpoint-service.js +90 -0
- package/lib/aws/compute/vpc-endpoint.d.ts +742 -0
- package/lib/aws/compute/vpc-endpoint.js +811 -0
- package/lib/aws/compute/vpc-flow-logs.d.ts +551 -0
- package/lib/aws/compute/vpc-flow-logs.js +693 -0
- package/lib/aws/compute/vpc-lookup.d.ts +73 -0
- package/lib/aws/compute/vpc-lookup.js +3 -0
- package/lib/aws/compute/vpc-v2-base.d.ts +353 -0
- package/lib/aws/compute/vpc-v2-base.js +493 -0
- package/lib/aws/compute/vpc-v2.d.ts +385 -0
- package/lib/aws/compute/vpc-v2.js +408 -0
- package/lib/aws/compute/vpc.d.ts +1448 -0
- package/lib/aws/compute/vpc.js +1495 -0
- package/lib/aws/compute/vpn.d.ts +443 -0
- package/lib/aws/compute/vpn.js +397 -0
- package/lib/aws/compute/windows-versions.d.ts +418 -0
- package/lib/aws/compute/windows-versions.js +426 -0
- package/lib/aws/edge/certificate-base.d.ts +20 -0
- package/lib/aws/edge/certificate-base.js +28 -0
- package/lib/aws/edge/certificate.d.ts +23 -2
- package/lib/aws/edge/certificate.js +54 -4
- package/lib/aws/edge/distribution.js +3 -3
- package/lib/aws/edge/dns-alias-record-targets.js +2 -2
- package/lib/aws/edge/dns-record.js +16 -16
- package/lib/aws/edge/dns-zone.d.ts +20 -2
- package/lib/aws/edge/dns-zone.js +25 -10
- package/lib/aws/edge/function.js +2 -2
- package/lib/aws/edge/index.d.ts +1 -0
- package/lib/aws/edge/index.js +2 -1
- package/lib/aws/edge/key-value-store.js +4 -4
- package/lib/aws/edge/origin.js +7 -5
- package/lib/aws/edge/response-headers-policy.js +1 -1
- package/lib/aws/encryption/alias.js +1 -1
- package/lib/aws/encryption/key.js +1 -1
- package/lib/aws/encryption/via-service-principal.js +1 -1
- package/lib/aws/iam/grant.js +2 -2
- package/lib/aws/iam/index.d.ts +1 -0
- package/lib/aws/iam/index.js +2 -1
- package/lib/aws/iam/instance-profile.d.ts +155 -0
- package/lib/aws/iam/instance-profile.js +124 -0
- package/lib/aws/iam/managed-policy.js +1 -1
- package/lib/aws/iam/oidc-provider.js +1 -1
- package/lib/aws/iam/policy-document-config.generated.d.ts +8 -8
- package/lib/aws/iam/policy-document-config.generated.js +1 -1
- package/lib/aws/iam/policy-document.js +1 -1
- package/lib/aws/iam/policy-statement-props.generated.d.ts +8 -8
- package/lib/aws/iam/policy-statement-props.generated.js +1 -1
- package/lib/aws/iam/policy-statement.js +9 -9
- package/lib/aws/iam/policy.js +1 -1
- package/lib/aws/iam/principals.js +26 -26
- package/lib/aws/iam/private/assume-role-policy.js +2 -3
- package/lib/aws/iam/private/comparable-principal.js +2 -3
- package/lib/aws/iam/private/immutable-role.d.ts +2 -1
- package/lib/aws/iam/private/immutable-role.js +3 -3
- package/lib/aws/iam/private/imported-role.d.ts +1 -1
- package/lib/aws/iam/private/imported-role.js +3 -3
- package/lib/aws/iam/private/merge-statements.js +2 -3
- package/lib/aws/iam/private/util.js +4 -4
- package/lib/aws/iam/role.js +1 -1
- package/lib/aws/iam/saml-provider.d.ts +1 -1
- package/lib/aws/iam/saml-provider.js +6 -6
- package/lib/aws/iam/unknown-principal.js +1 -1
- package/lib/aws/iam/utils.js +2 -3
- package/lib/aws/index.d.ts +1 -0
- package/lib/aws/index.js +4 -1
- package/lib/aws/network/simple-ipv4-vpc.js +5 -5
- package/lib/aws/network/subnet-group.js +3 -3
- package/lib/aws/network/subnet.d.ts +1 -1
- package/lib/aws/network/subnet.js +7 -7
- package/lib/aws/notify/archive.js +3 -2
- package/lib/aws/notify/connection.js +5 -4
- package/lib/aws/notify/event-bus.js +5 -4
- package/lib/aws/notify/event-pattern.js +3 -3
- package/lib/aws/notify/index.js +3 -1
- package/lib/aws/notify/input.js +4 -3
- package/lib/aws/notify/kinesis-stream.js +3 -2
- package/lib/aws/notify/on-event-options.js +2 -1
- package/lib/aws/notify/queue-config.generated.d.ts +18 -11
- package/lib/aws/notify/queue-config.generated.js +1 -1
- package/lib/aws/notify/queue-policy.js +1 -1
- package/lib/aws/notify/queue.js +1 -1
- package/lib/aws/notify/resource-policy.js +1 -1
- package/lib/aws/notify/rule.js +3 -2
- package/lib/aws/notify/schedule.js +2 -2
- package/lib/aws/notify/sqs-augmentations.generated.d.ts +125 -0
- package/lib/aws/notify/sqs-augmentations.generated.js +74 -0
- package/lib/aws/notify/target.js +2 -1
- package/lib/aws/notify/targets/event-bus.js +1 -1
- package/lib/aws/notify/targets/function.js +1 -1
- package/lib/aws/notify/targets/log-group.js +2 -2
- package/lib/aws/notify/targets/sqs.js +1 -1
- package/lib/aws/notify/targets/state-machine.js +1 -1
- package/lib/aws/notify/targets/util.d.ts +1 -1
- package/lib/aws/notify/targets/util.js +10 -11
- package/lib/aws/notify/util.js +4 -4
- package/lib/aws/provider-config.generated.d.ts +33 -33
- package/lib/aws/provider-config.generated.js +1 -1
- package/lib/aws/storage/bucket-notifications.js +1 -1
- package/lib/aws/storage/bucket-policy.js +1 -1
- package/lib/aws/storage/bucket-source.js +1 -1
- package/lib/aws/storage/bucket.d.ts +298 -65
- package/lib/aws/storage/bucket.js +548 -225
- package/lib/aws/storage/cors-config.generated.d.ts +3 -3
- package/lib/aws/storage/cors-config.generated.js +1 -1
- package/lib/aws/storage/cors-rule-config.generated.d.ts +5 -5
- package/lib/aws/storage/cors-rule-config.generated.js +1 -1
- package/lib/aws/storage/index.d.ts +1 -0
- package/lib/aws/storage/index.js +2 -1
- package/lib/aws/storage/lifecycle-config.generated.d.ts +11 -11
- package/lib/aws/storage/lifecycle-config.generated.js +1 -1
- package/lib/aws/storage/notification-targets/function.js +6 -6
- package/lib/aws/storage/notification-targets/queue.js +1 -1
- package/lib/aws/storage/origin-access-identity.d.ts +1 -1
- package/lib/aws/storage/origin-access-identity.js +5 -4
- package/lib/aws/storage/parameter-util.d.ts +12 -0
- package/lib/aws/storage/parameter-util.js +65 -0
- package/lib/aws/storage/parameter.d.ts +526 -0
- package/lib/aws/storage/parameter.js +606 -0
- package/lib/aws/storage/s3-canned-metrics.generated.d.ts +22 -0
- package/lib/aws/storage/s3-canned-metrics.generated.js +23 -0
- package/lib/aws/storage/util.d.ts +25 -3
- package/lib/aws/storage/util.js +84 -17
- package/lib/aws/storage/website-config.generated.d.ts +5 -5
- package/lib/aws/storage/website-config.generated.js +1 -1
- package/lib/aws/util.js +2 -3
- package/lib/construct-base.d.ts +10 -1
- package/lib/construct-base.js +9 -6
- package/lib/duration.js +1 -1
- package/lib/expiration.d.ts +48 -0
- package/lib/expiration.js +68 -0
- package/lib/helpers-internal/index.d.ts +1 -0
- package/lib/helpers-internal/index.js +7 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.js +3 -1
- package/lib/private/md5.d.ts +4 -0
- package/lib/private/md5.js +14 -0
- package/lib/private/unique-resource-name.js +3 -4
- package/lib/size.js +2 -2
- package/lib/stack-base.d.ts +4 -23
- package/lib/stack-base.js +9 -30
- package/lib/terra-func.d.ts +103 -0
- package/lib/terra-func.js +170 -0
- package/lib/token.js +5 -5
- package/package.json +15 -8
- package/bun.lockb +0 -0
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a, _b;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.ClientVpnEndpoint = exports.ClientVpnUserBasedAuthentication = exports.ClientVpnSessionTimeout = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
// https://github.com/aws/aws-cdk/blob/v2.175.1/packages/aws-cdk-lib/aws-ec2/lib/client-vpn-endpoint.ts
|
|
7
|
+
const provider_aws_1 = require("@cdktf/provider-aws");
|
|
8
|
+
const cdktf_1 = require("cdktf");
|
|
9
|
+
const constructs_1 = require("constructs");
|
|
10
|
+
const client_vpn_authorization_rule_1 = require("./client-vpn-authorization-rule");
|
|
11
|
+
const client_vpn_route_1 = require("./client-vpn-route");
|
|
12
|
+
const connections_1 = require("./connections");
|
|
13
|
+
const network_util_1 = require("./network-util");
|
|
14
|
+
const security_group_1 = require("./security-group");
|
|
15
|
+
const aws_construct_1 = require("../aws-construct");
|
|
16
|
+
const logs = require("../cloudwatch");
|
|
17
|
+
/**
|
|
18
|
+
* Maximum VPN session duration time
|
|
19
|
+
*/
|
|
20
|
+
var ClientVpnSessionTimeout;
|
|
21
|
+
(function (ClientVpnSessionTimeout) {
|
|
22
|
+
/** 8 hours */
|
|
23
|
+
ClientVpnSessionTimeout[ClientVpnSessionTimeout["EIGHT_HOURS"] = 8] = "EIGHT_HOURS";
|
|
24
|
+
/** 10 hours */
|
|
25
|
+
ClientVpnSessionTimeout[ClientVpnSessionTimeout["TEN_HOURS"] = 10] = "TEN_HOURS";
|
|
26
|
+
/** 12 hours */
|
|
27
|
+
ClientVpnSessionTimeout[ClientVpnSessionTimeout["TWELVE_HOURS"] = 12] = "TWELVE_HOURS";
|
|
28
|
+
/** 24 hours */
|
|
29
|
+
ClientVpnSessionTimeout[ClientVpnSessionTimeout["TWENTY_FOUR_HOURS"] = 24] = "TWENTY_FOUR_HOURS";
|
|
30
|
+
})(ClientVpnSessionTimeout || (exports.ClientVpnSessionTimeout = ClientVpnSessionTimeout = {}));
|
|
31
|
+
/**
|
|
32
|
+
* User-based authentication for a client VPN endpoint
|
|
33
|
+
*/
|
|
34
|
+
class ClientVpnUserBasedAuthentication {
|
|
35
|
+
/**
|
|
36
|
+
* Active Directory authentication
|
|
37
|
+
*/
|
|
38
|
+
static activeDirectory(directoryId) {
|
|
39
|
+
return new ActiveDirectoryAuthentication(directoryId);
|
|
40
|
+
}
|
|
41
|
+
/** Federated authentication */
|
|
42
|
+
static federated(samlProvider, selfServiceSamlProvider) {
|
|
43
|
+
return new FederatedAuthentication(samlProvider, selfServiceSamlProvider);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
exports.ClientVpnUserBasedAuthentication = ClientVpnUserBasedAuthentication;
|
|
47
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
48
|
+
ClientVpnUserBasedAuthentication[_a] = { fqn: "terraconstructs.aws.compute.ClientVpnUserBasedAuthentication", version: "0.0.12" };
|
|
49
|
+
/**
|
|
50
|
+
* Active Directory authentication
|
|
51
|
+
*/
|
|
52
|
+
class ActiveDirectoryAuthentication extends ClientVpnUserBasedAuthentication {
|
|
53
|
+
constructor(directoryId) {
|
|
54
|
+
super();
|
|
55
|
+
this.directoryId = directoryId;
|
|
56
|
+
}
|
|
57
|
+
render() {
|
|
58
|
+
return {
|
|
59
|
+
type: "directory-service-authentication",
|
|
60
|
+
activeDirectoryId: this.directoryId,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Federated authentication
|
|
66
|
+
*/
|
|
67
|
+
class FederatedAuthentication extends ClientVpnUserBasedAuthentication {
|
|
68
|
+
constructor(samlProvider, selfServiceSamlProvider) {
|
|
69
|
+
super();
|
|
70
|
+
this.samlProvider = samlProvider;
|
|
71
|
+
this.selfServiceSamlProvider = selfServiceSamlProvider;
|
|
72
|
+
}
|
|
73
|
+
render() {
|
|
74
|
+
return {
|
|
75
|
+
type: "federated-authentication",
|
|
76
|
+
samlProviderArn: this.samlProvider.samlProviderArn,
|
|
77
|
+
selfServiceSamlProviderArn: this.selfServiceSamlProvider?.samlProviderArn,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* A client VPN connnection
|
|
83
|
+
*/
|
|
84
|
+
class ClientVpnEndpoint extends aws_construct_1.AwsConstructBase {
|
|
85
|
+
/**
|
|
86
|
+
* Import an existing client VPN endpoint
|
|
87
|
+
*/
|
|
88
|
+
static fromEndpointAttributes(scope, id, attrs) {
|
|
89
|
+
class Import extends aws_construct_1.AwsConstructBase {
|
|
90
|
+
constructor() {
|
|
91
|
+
super(...arguments);
|
|
92
|
+
this.endpointId = attrs.endpointId;
|
|
93
|
+
this.connections = new connections_1.Connections({
|
|
94
|
+
securityGroups: attrs.securityGroups,
|
|
95
|
+
});
|
|
96
|
+
this.targetNetworksAssociated = new constructs_1.DependencyGroup();
|
|
97
|
+
}
|
|
98
|
+
get clientVpnOutputs() {
|
|
99
|
+
return {
|
|
100
|
+
clientVpnEndpointId: this.endpointId,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
get outputs() {
|
|
104
|
+
return this.clientVpnOutputs;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return new Import(scope, id);
|
|
108
|
+
}
|
|
109
|
+
get clientVpnOutputs() {
|
|
110
|
+
return {
|
|
111
|
+
clientVpnEndpointId: this.endpointId,
|
|
112
|
+
selfServicePortalUrl: this.selfServicePortalUrl,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
get outputs() {
|
|
116
|
+
return this.clientVpnOutputs;
|
|
117
|
+
}
|
|
118
|
+
constructor(scope, id, props) {
|
|
119
|
+
super(scope, id, props);
|
|
120
|
+
this._targetNetworksAssociated = new constructs_1.DependencyGroup();
|
|
121
|
+
if (!cdktf_1.Token.isUnresolved(props.vpc.vpcCidrBlock)) {
|
|
122
|
+
const clientCidr = new network_util_1.CidrBlock(props.cidr);
|
|
123
|
+
const vpcCidr = new network_util_1.CidrBlock(props.vpc.vpcCidrBlock);
|
|
124
|
+
if (vpcCidr.containsCidr(clientCidr)) {
|
|
125
|
+
throw new Error("The client CIDR cannot overlap with the local CIDR of the VPC");
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
if (props.dnsServers && props.dnsServers.length > 2) {
|
|
129
|
+
throw new Error("A client VPN endpoint can have up to two DNS servers");
|
|
130
|
+
}
|
|
131
|
+
if (props.logging == false && (props.logGroup || props.logStream)) {
|
|
132
|
+
throw new Error("Cannot specify `logGroup` or `logStream` when logging is disabled");
|
|
133
|
+
}
|
|
134
|
+
if (props.clientConnectionHandler &&
|
|
135
|
+
!cdktf_1.Token.isUnresolved(props.clientConnectionHandler.functionName) &&
|
|
136
|
+
!props.clientConnectionHandler.functionName.startsWith("AWSClientVPN-")) {
|
|
137
|
+
throw new Error("The name of the Lambda function must begin with the `AWSClientVPN-` prefix");
|
|
138
|
+
}
|
|
139
|
+
if (props.clientLoginBanner &&
|
|
140
|
+
!cdktf_1.Token.isUnresolved(props.clientLoginBanner) &&
|
|
141
|
+
props.clientLoginBanner.length > 1400) {
|
|
142
|
+
throw new Error(`The maximum length for the client login banner is 1400, got ${props.clientLoginBanner.length}`);
|
|
143
|
+
}
|
|
144
|
+
const logging = props.logging ?? true;
|
|
145
|
+
const logGroup = logging
|
|
146
|
+
? (props.logGroup ?? new logs.LogGroup(this, "LogGroup"))
|
|
147
|
+
: undefined;
|
|
148
|
+
const securityGroups = props.securityGroups ?? [
|
|
149
|
+
new security_group_1.SecurityGroup(this, "SecurityGroup", {
|
|
150
|
+
vpc: props.vpc,
|
|
151
|
+
}),
|
|
152
|
+
];
|
|
153
|
+
this.connections = new connections_1.Connections({ securityGroups });
|
|
154
|
+
this.resource = new provider_aws_1.ec2ClientVpnEndpoint.Ec2ClientVpnEndpoint(this, "Resource", {
|
|
155
|
+
authenticationOptions: renderAuthenticationOptions(props.clientCertificateArn, props.userBasedAuthentication),
|
|
156
|
+
clientCidrBlock: props.cidr,
|
|
157
|
+
clientConnectOptions: props.clientConnectionHandler
|
|
158
|
+
? {
|
|
159
|
+
enabled: true,
|
|
160
|
+
lambdaFunctionArn: props.clientConnectionHandler.functionArn,
|
|
161
|
+
}
|
|
162
|
+
: undefined,
|
|
163
|
+
connectionLogOptions: {
|
|
164
|
+
enabled: logging,
|
|
165
|
+
cloudwatchLogGroup: logGroup?.logGroupName,
|
|
166
|
+
cloudwatchLogStream: props.logStream?.logStreamName,
|
|
167
|
+
},
|
|
168
|
+
description: props.description,
|
|
169
|
+
dnsServers: props.dnsServers,
|
|
170
|
+
securityGroupIds: securityGroups.map((s) => s.securityGroupId),
|
|
171
|
+
selfServicePortal: booleanToEnabledDisabled(props.selfServicePortal),
|
|
172
|
+
serverCertificateArn: props.serverCertificateArn,
|
|
173
|
+
splitTunnel: props.splitTunnel,
|
|
174
|
+
transportProtocol: props.transportProtocol,
|
|
175
|
+
vpcId: props.vpc.vpcId,
|
|
176
|
+
vpnPort: props.port,
|
|
177
|
+
sessionTimeoutHours: props.sessionTimeout,
|
|
178
|
+
clientLoginBannerOptions: props.clientLoginBanner
|
|
179
|
+
? {
|
|
180
|
+
enabled: true,
|
|
181
|
+
bannerText: props.clientLoginBanner,
|
|
182
|
+
}
|
|
183
|
+
: undefined,
|
|
184
|
+
});
|
|
185
|
+
this.endpointId = this.resource.id;
|
|
186
|
+
if (props.userBasedAuthentication && (props.selfServicePortal ?? true)) {
|
|
187
|
+
// Output self-service portal URL
|
|
188
|
+
this.selfServicePortalUrl = this.resource.selfServicePortalUrl;
|
|
189
|
+
// new TerraformOutput(this, "SelfServicePortalUrl", {
|
|
190
|
+
// value: `https://self-service.clientvpn.amazonaws.com/endpoints/${this.endpointId}`,
|
|
191
|
+
// });
|
|
192
|
+
}
|
|
193
|
+
// Associate subnets
|
|
194
|
+
const subnetIds = props.vpc.selectSubnets(props.vpcSubnets).subnetIds;
|
|
195
|
+
if (cdktf_1.Token.isUnresolved(subnetIds)) {
|
|
196
|
+
throw new Error("Cannot associate subnets when VPC are imported from parameters or exports containing lists of subnet IDs.");
|
|
197
|
+
}
|
|
198
|
+
for (const [idx, subnetId] of Object.entries(subnetIds)) {
|
|
199
|
+
this._targetNetworksAssociated.add(new provider_aws_1.ec2ClientVpnNetworkAssociation.Ec2ClientVpnNetworkAssociation(this, `Association${idx}`, {
|
|
200
|
+
clientVpnEndpointId: this.endpointId,
|
|
201
|
+
subnetId,
|
|
202
|
+
}));
|
|
203
|
+
}
|
|
204
|
+
this.targetNetworksAssociated = this._targetNetworksAssociated;
|
|
205
|
+
if (props.authorizeAllUsersToVpcCidr ?? true) {
|
|
206
|
+
this.addAuthorizationRule("AuthorizeAll", {
|
|
207
|
+
cidr: props.vpc.vpcCidrBlock,
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Adds an authorization rule to this endpoint
|
|
213
|
+
*/
|
|
214
|
+
addAuthorizationRule(id, props) {
|
|
215
|
+
return new client_vpn_authorization_rule_1.ClientVpnAuthorizationRule(this, id, {
|
|
216
|
+
...props,
|
|
217
|
+
clientVpnEndpoint: this,
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Adds a route to this endpoint
|
|
222
|
+
*/
|
|
223
|
+
addRoute(id, props) {
|
|
224
|
+
return new client_vpn_route_1.ClientVpnRoute(this, id, {
|
|
225
|
+
...props,
|
|
226
|
+
clientVpnEndpoint: this,
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
exports.ClientVpnEndpoint = ClientVpnEndpoint;
|
|
231
|
+
_b = JSII_RTTI_SYMBOL_1;
|
|
232
|
+
ClientVpnEndpoint[_b] = { fqn: "terraconstructs.aws.compute.ClientVpnEndpoint", version: "0.0.12" };
|
|
233
|
+
function renderAuthenticationOptions(clientCertificateArn, userBasedAuthentication) {
|
|
234
|
+
const authenticationOptions = [];
|
|
235
|
+
if (clientCertificateArn) {
|
|
236
|
+
authenticationOptions.push({
|
|
237
|
+
type: "certificate-authentication",
|
|
238
|
+
rootCertificateChainArn: clientCertificateArn,
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
if (userBasedAuthentication) {
|
|
242
|
+
authenticationOptions.push(userBasedAuthentication.render());
|
|
243
|
+
}
|
|
244
|
+
if (authenticationOptions.length === 0) {
|
|
245
|
+
throw new Error("A client VPN endpoint must use at least one authentication option");
|
|
246
|
+
}
|
|
247
|
+
return authenticationOptions;
|
|
248
|
+
}
|
|
249
|
+
function booleanToEnabledDisabled(val) {
|
|
250
|
+
switch (val) {
|
|
251
|
+
case undefined:
|
|
252
|
+
return undefined;
|
|
253
|
+
case true:
|
|
254
|
+
return "enabled";
|
|
255
|
+
case false:
|
|
256
|
+
return "disabled";
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LXZwbi1lbmRwb2ludC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hd3MvY29tcHV0ZS9jbGllbnQtdnBuLWVuZHBvaW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsdUdBQXVHO0FBRXZHLHNEQUc2QjtBQUM3QixpQ0FBOEI7QUFDOUIsMkNBQXFFO0FBQ3JFLG1GQUd5QztBQVF6Qyx5REFBMkU7QUFDM0UsK0NBQTRDO0FBQzVDLGlEQUEyQztBQUMzQyxxREFBaUU7QUFHakUsb0RBQXVFO0FBQ3ZFLHNDQUFzQztBQTZLdEM7O0dBRUc7QUFDSCxJQUFZLHVCQVNYO0FBVEQsV0FBWSx1QkFBdUI7SUFDakMsY0FBYztJQUNkLG1GQUFlLENBQUE7SUFDZixlQUFlO0lBQ2YsZ0ZBQWMsQ0FBQTtJQUNkLGVBQWU7SUFDZixzRkFBaUIsQ0FBQTtJQUNqQixlQUFlO0lBQ2YsZ0dBQXNCLENBQUE7QUFDeEIsQ0FBQyxFQVRXLHVCQUF1Qix1Q0FBdkIsdUJBQXVCLFFBU2xDO0FBRUQ7O0dBRUc7QUFDSCxNQUFzQixnQ0FBZ0M7SUFDcEQ7O09BRUc7SUFDSSxNQUFNLENBQUMsZUFBZSxDQUMzQixXQUFtQjtRQUVuQixPQUFPLElBQUksNkJBQTZCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELCtCQUErQjtJQUN4QixNQUFNLENBQUMsU0FBUyxDQUNyQixZQUEyQixFQUMzQix1QkFBdUM7UUFFdkMsT0FBTyxJQUFJLHVCQUF1QixDQUFDLFlBQVksRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO0lBQzVFLENBQUM7O0FBaEJILDRFQW9CQzs7O0FBRUQ7O0dBRUc7QUFDSCxNQUFNLDZCQUE4QixTQUFRLGdDQUFnQztJQUMxRSxZQUE2QixXQUFtQjtRQUM5QyxLQUFLLEVBQUUsQ0FBQztRQURtQixnQkFBVyxHQUFYLFdBQVcsQ0FBUTtJQUVoRCxDQUFDO0lBRUQsTUFBTTtRQUNKLE9BQU87WUFDTCxJ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QUNaLEtBQUssU0FBUztZQUNaLE9BQU8sU0FBUyxDQUFDO1FBQ25CLEtBQUssSUFBSTtZQUNQLE9BQU8sU0FBUyxDQUFDO1FBQ25CLEtBQUssS0FBSztZQUNSLE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTc1LjEvcGFja2FnZXMvYXdzLWNkay1saWIvYXdzLWVjMi9saWIvY2xpZW50LXZwbi1lbmRwb2ludC50c1xuXG5pbXBvcnQge1xuICBlYzJDbGllbnRWcG5FbmRwb2ludCxcbiAgZWMyQ2xpZW50VnBuTmV0d29ya0Fzc29jaWF0aW9uLFxufSBmcm9tIFwiQGNka3RmL3Byb3ZpZGVyLWF3c1wiO1xuaW1wb3J0IHsgVG9rZW4gfSBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IENvbnN0cnVjdCwgRGVwZW5kZW5jeUdyb3VwLCBJRGVwZW5kYWJsZSB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQge1xuICBDbGllbnRWcG5BdXRob3JpemF0aW9uUnVsZSxcbiAgQ2xpZW50VnBuQXV0aG9yaXphdGlvblJ1bGVPcHRpb25zLFxufSBmcm9tIFwiLi9jbGllbnQtdnBuLWF1dGhvcml6YXRpb24tcnVsZVwiO1xuaW1wb3J0IHtcbiAgSUNsaWVudFZwbkNvbm5lY3Rpb25IYW5kbGVyLFxuICBJQ2xpZW50VnBuRW5kcG9pbnQsXG4gIENsaWVudFZwbk91dHB1dHMsXG4gIFRyYW5zcG9ydFByb3RvY29sLFxuICBWcG5Qb3J0LFxufSBmcm9tIFwiLi9jbGllbnQtdnBuLWVuZHBvaW50LXR5cGVzXCI7XG5pbXBvcnQgeyBDbGllbnRWcG5Sb3V0ZSwgQ2xpZW50VnBuUm91dGVPcHRpb25zIH0gZnJvbSBcIi4vY2xpZW50LXZwbi1yb3V0ZVwiO1xuaW1wb3J0IHsgQ29ubmVjdGlvbnMgfSBmcm9tIFwiLi9jb25uZWN0aW9uc1wiO1xuaW1wb3J0IHsgQ2lkckJsb2NrIH0gZnJvbSBcIi4vbmV0d29yay11dGlsXCI7XG5pbXBvcnQgeyBJU2VjdXJpdHlHcm91cCwgU2VjdXJpdHlHcm91cCB9IGZyb20gXCIuL3NlY3VyaXR5LWdyb3VwXCI7XG5pbXBvcnQgeyBJU2FtbFByb3ZpZGVyIH0gZnJvbSBcIi4uL2lhbVwiO1xuaW1wb3J0IHsgSVZwYywgU3VibmV0U2VsZWN0aW9uIH0gZnJvbSBcIi4vdnBjXCI7XG5pbXBvcnQgeyBBd3NDb25zdHJ1Y3RCYXNlLCBBd3NDb25zdHJ1Y3RQcm9wcyB9IGZyb20gXCIuLi9hd3MtY29uc3RydWN0XCI7XG5pbXBvcnQgKiBhcyBsb2dzIGZyb20gXCIuLi9jbG91ZHdhdGNoXCI7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYSBjbGllbnQgVlBOIGVuZHBvaW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2xpZW50VnBuRW5kcG9pbnRPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBJUHY0IGFkZHJlc3MgcmFuZ2UsIGluIENJRFIgbm90YXRpb24sIGZyb20gd2hpY2ggdG8gYXNzaWduIGNsaWVudCBJUFxuICAgKiBhZGRyZXNzZXMuIFRoZSBhZGRyZXNzIHJhbmdlIGNhbm5vdCBvdmVybGFwIHdpdGggdGhlIGxvY2FsIENJRFIgb2YgdGhlIFZQQ1xuICAgKiBpbiB3aGljaCB0aGUgYXNzb2NpYXRlZCBzdWJuZXQgaXMgbG9jYXRlZCwgb3IgdGhlIHJvdXRlcyB0aGF0IHlvdSBhZGQgbWFudWFsbHkuXG4gICAqXG4gICAqIENoYW5naW5nIHRoZSBhZGRyZXNzIHJhbmdlIHdpbGwgcmVwbGFjZSB0aGUgQ2xpZW50IFZQTiBlbmRwb2ludC5cbiAgICpcbiAgICogVGhlIENJRFIgYmxvY2sgc2hvdWxkIGJlIC8yMiBvciBncmVhdGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgY2lkcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBjbGllbnQgY2VydGlmaWNhdGUgZm9yIG11dHVhbCBhdXRoZW50aWNhdGlvbi5cbiAgICpcbiAgICogVGhlIGNlcnRpZmljYXRlIG11c3QgYmUgc2lnbmVkIGJ5IGEgY2VydGlmaWNhdGUgYXV0aG9yaXR5IChDQSkgYW5kIGl0IG11c3RcbiAgICogYmUgcHJvdmlzaW9uZWQgaW4gQVdTIENlcnRpZmljYXRlIE1hbmFnZXIgKEFDTSkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdXNlIHVzZXItYmFzZWQgYXV0aGVudGljYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGNsaWVudENlcnRpZmljYXRlQXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB1c2VyLWJhc2VkIGF1dGhlbnRpY2F0aW9uIHRvIHVzZS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vdnBuL2xhdGVzdC9jbGllbnR2cG4tYWRtaW4vY2xpZW50LWF1dGhlbnRpY2F0aW9uLmh0bWxcbiAgICpcbiAgICogQGRlZmF1bHQgLSB1c2UgbXV0dWFsIGF1dGhlbnRpY2F0aW9uXG4gICAqL1xuICByZWFkb25seSB1c2VyQmFzZWRBdXRoZW50aWNhdGlvbj86IENsaWVudFZwblVzZXJCYXNlZEF1dGhlbnRpY2F0aW9uO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGVuYWJsZSBjb25uZWN0aW9ucyBsb2dnaW5nXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGxvZ2dpbmc/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBIENsb3VkV2F0Y2ggTG9ncyBsb2cgZ3JvdXAgZm9yIGNvbm5lY3Rpb24gbG9nZ2luZ1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIGEgbmV3IGdyb3VwIGlzIGNyZWF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IGxvZ0dyb3VwPzogbG9ncy5JTG9nR3JvdXA7XG5cbiAgLyoqXG4gICAqIEEgQ2xvdWRXYXRjaCBMb2dzIGxvZyBzdHJlYW0gZm9yIGNvbm5lY3Rpb24gbG9nZ2luZ1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIGEgbmV3IHN0cmVhbSBpcyBjcmVhdGVkXG4gICAqL1xuICByZWFkb25seSBsb2dTdHJlYW0/OiBsb2dzLklMb2dTdHJlYW07XG5cbiAgLyoqXG4gICAqIFRoZSBBV1MgTGFtYmRhIGZ1bmN0aW9uIHVzZWQgZm9yIGNvbm5lY3Rpb24gYXV0aG9yaXphdGlvblxuICAgKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgTGFtYmRhIGZ1bmN0aW9uIG11c3QgYmVnaW4gd2l0aCB0aGUgYEFXU0NsaWVudFZQTi1gIHByZWZpeFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGNvbm5lY3Rpb24gaGFuZGxlclxuICAgKi9cbiAgcmVhZG9ubHkgY2xpZW50Q29ubmVjdGlvbkhhbmRsZXI/OiBJQ2xpZW50VnBuQ29ubmVjdGlvbkhhbmRsZXI7XG5cbiAgLyoqXG4gICAqIEEgYnJpZWYgZGVzY3JpcHRpb24gb2YgdGhlIENsaWVudCBWUE4gZW5kcG9pbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gZGVzY3JpcHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc2VjdXJpdHkgZ3JvdXBzIHRvIGFwcGx5IHRvIHRoZSB0YXJnZXQgbmV0d29yay5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhIG5ldyBzZWN1cml0eSBncm91cCBpcyBjcmVhdGVkXG4gICAqL1xuICByZWFkb25seSBzZWN1cml0eUdyb3Vwcz86IElTZWN1cml0eUdyb3VwW107XG5cbiAgLyoqXG4gICAqIFNwZWNpZnkgd2hldGhlciB0byBlbmFibGUgdGhlIHNlbGYtc2VydmljZSBwb3J0YWwgZm9yIHRoZSBDbGllbnQgVlBOIGVuZHBvaW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBzZWxmU2VydmljZVBvcnRhbD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIHNlcnZlciBjZXJ0aWZpY2F0ZVxuICAgKi9cbiAgcmVhZG9ubHkgc2VydmVyQ2VydGlmaWNhdGVBcm46IHN0cmluZztcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgc3BsaXQtdHVubmVsIGlzIGVuYWJsZWQgb24gdGhlIEFXUyBDbGllbnQgVlBOIGVuZHBvaW50LlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS92cG4vbGF0ZXN0L2NsaWVudHZwbi1hZG1pbi9zcGxpdC10dW5uZWwtdnBuLmh0bWxcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHNwbGl0VHVubmVsPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHRyYW5zcG9ydCBwcm90b2NvbCB0byBiZSB1c2VkIGJ5IHRoZSBWUE4gc2Vzc2lvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgVHJhbnNwb3J0UHJvdG9jb2wuVURQXG4gICAqL1xuICByZWFkb25seSB0cmFuc3BvcnRQcm90b2NvbD86IFRyYW5zcG9ydFByb3RvY29sO1xuXG4gIC8qKlxuICAgKiBUaGUgcG9ydCBudW1iZXIgdG8gYXNzaWduIHRvIHRoZSBDbGllbnQgVlBOIGVuZHBvaW50IGZvciBUQ1AgYW5kIFVEUFxuICAgKiB0cmFmZmljLlxuICAgKlxuICAgKiBAZGVmYXVsdCBWcG5Qb3J0LkhUVFBTXG4gICAqL1xuICByZWFkb25seSBwb3J0PzogVnBuUG9ydDtcblxuICAvKipcbiAgICogSW5mb3JtYXRpb24gYWJvdXQgdGhlIEROUyBzZXJ2ZXJzIHRvIGJlIHVzZWQgZm9yIEROUyByZXNvbHV0aW9uLlxuICAgKlxuICAgKiBBIENsaWVudCBWUE4gZW5kcG9pbnQgY2FuIGhhdmUgdXAgdG8gdHdvIEROUyBzZXJ2ZXJzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHVzZSB0aGUgRE5TIGFkZHJlc3MgY29uZmlndXJlZCBvbiB0aGUgZGV2aWNlXG4gICAqL1xuICByZWFkb25seSBkbnNTZXJ2ZXJzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFN1Ym5ldHMgdG8gYXNzb2NpYXRlIHRvIHRoZSBjbGllbnQgVlBOIGVuZHBvaW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBWUEMgZGVmYXVsdCBzdHJhdGVneVxuICAgKi9cbiAgcmVhZG9ubHkgdnBjU3VibmV0cz86IFN1Ym5ldFNlbGVjdGlvbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBhdXRob3JpemUgYWxsIHVzZXJzIHRvIHRoZSBWUEMgQ0lEUlxuICAgKlxuICAgKiBUaGlzIGF1dG9tYXRpY2FsbHkgY3JlYXRlcyBhbiBhdXRob3JpemF0aW9uIHJ1bGUuIFNldCB0aGlzIHRvIGBmYWxzZWAgYW5kXG4gICAqIHVzZSBgYWRkQXV0aG9yaXphdGlvblJ1bGUoKWAgdG8gY3JlYXRlIHlvdXIgb3duIHJ1bGVzIGluc3RlYWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGF1dGhvcml6ZUFsbFVzZXJzVG9WcGNDaWRyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIG1heGltdW0gVlBOIHNlc3Npb24gZHVyYXRpb24gdGltZS5cbiAgICpcbiAgICogQGRlZmF1bHQgQ2xpZW50VnBuU2Vzc2lvblRpbWVvdXQuVFdFTlRZX0ZPVVJfSE9VUlNcbiAgICovXG4gIHJlYWRvbmx5IHNlc3Npb25UaW1lb3V0PzogQ2xpZW50VnBuU2Vzc2lvblRpbWVvdXQ7XG5cbiAgLyoqXG4gICAqIEN1c3RvbWl6YWJsZSB0ZXh0IHRoYXQgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gYSBiYW5uZXIgb24gQVdTIHByb3ZpZGVkIGNsaWVudHNcbiAgICogd2hlbiBhIFZQTiBzZXNzaW9uIGlzIGVzdGFibGlzaGVkLlxuICAgKlxuICAgKiBVVEYtOCBlbmNvZGVkIGNoYXJhY3RlcnMgb25seS4gTWF4aW11bSBvZiAxNDAwIGNoYXJhY3RlcnMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gYmFubmVyIGlzIHByZXNlbnRlZCB0byB0aGUgY2xpZW50XG4gICAqL1xuICByZWFkb25seSBjbGllbnRMb2dpbkJhbm5lcj86IHN0cmluZztcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmVnaXN0ZXIgVGVycmFmb3JtIG91dHB1dHMgZm9yIHRoaXMgVGVycmFDb25zdHJ1Y3RcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lzdGVyT3V0cHV0cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIG92ZXJyaWRlIGZvciB0aGUgb3V0cHV0cyBuYW1lXG4gICAqXG4gICAqIEBkZWZhdWx0IGlkXG4gICAqL1xuICByZWFkb25seSBvdXRwdXROYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE1heGltdW0gVlBOIHNlc3Npb24gZHVyYXRpb24gdGltZVxuICovXG5leHBvcnQgZW51bSBDbGllbnRWcG5TZXNzaW9uVGltZW91dCB7XG4gIC8qKiA4IGhvdXJzICovXG4gIEVJR0hUX0hPVVJTID0gOCxcbiAgLyoqIDEwIGhvdXJzICovXG4gIFRFTl9IT1VSUyA9IDEwLFxuICAvKiogMTIgaG91cnMgKi9cbiAgVFdFTFZFX0hPVVJTID0gMTIsXG4gIC8qKiAyNCBob3VycyAqL1xuICBUV0VOVFlfRk9VUl9IT1VSUyA9IDI0LFxufVxuXG4vKipcbiAqIFVzZXItYmFzZWQgYXV0aGVudGljYXRpb24gZm9yIGEgY2xpZW50IFZQTiBlbmRwb2ludFxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ2xpZW50VnBuVXNlckJhc2VkQXV0aGVudGljYXRpb24ge1xuICAvKipcbiAgICogQWN0aXZlIERpcmVjdG9yeSBhdXRoZW50aWNhdGlvblxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBhY3RpdmVEaXJlY3RvcnkoXG4gICAgZGlyZWN0b3J5SWQ6IHN0cmluZyxcbiAgKTogQ2xpZW50VnBuVXNlckJhc2VkQXV0aGVudGljYXRpb24ge1xuICAgIHJldHVybiBuZXcgQWN0aXZlRGlyZWN0b3J5QXV0aGVudGljYXRpb24oZGlyZWN0b3J5SWQpO1xuICB9XG5cbiAgLyoqIEZlZGVyYXRlZCBhdXRoZW50aWNhdGlvbiAqL1xuICBwdWJsaWMgc3RhdGljIGZlZGVyYXRlZChcbiAgICBzYW1sUHJvdmlkZXI6IElTYW1sUHJvdmlkZXIsXG4gICAgc2VsZlNlcnZpY2VTYW1sUHJvdmlkZXI/OiBJU2FtbFByb3ZpZGVyLFxuICApOiBDbGllbnRWcG5Vc2VyQmFzZWRBdXRoZW50aWNhdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBGZWRlcmF0ZWRBdXRoZW50aWNhdGlvbihzYW1sUHJvdmlkZXIsIHNlbGZTZXJ2aWNlU2FtbFByb3ZpZGVyKTtcbiAgfVxuXG4gIC8qKiBSZW5kZXJzIHRoZSB1c2VyIGJhc2VkIGF1dGhlbnRpY2F0aW9uICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZW5kZXIoKTogYW55O1xufVxuXG4vKipcbiAqIEFjdGl2ZSBEaXJlY3RvcnkgYXV0aGVudGljYXRpb25cbiAqL1xuY2xhc3MgQWN0aXZlRGlyZWN0b3J5QXV0aGVudGljYXRpb24gZXh0ZW5kcyBDbGllbnRWcG5Vc2VyQmFzZWRBdXRoZW50aWNhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZGlyZWN0b3J5SWQ6IHN0cmluZykge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICByZW5kZXIoKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJkaXJlY3Rvcnktc2VydmljZS1hdXRoZW50aWNhdGlvblwiLFxuICAgICAgYWN0aXZlRGlyZWN0b3J5SWQ6IHRoaXMuZGlyZWN0b3J5SWQsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEZlZGVyYXRlZCBhdXRoZW50aWNhdGlvblxuICovXG5jbGFzcyBGZWRlcmF0ZWRBdXRoZW50aWNhdGlvbiBleHRlbmRzIENsaWVudFZwblVzZXJCYXNlZEF1dGhlbnRpY2F0aW9uIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBzYW1sUHJvdmlkZXI6IElTYW1sUHJvdmlkZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzZWxmU2VydmljZVNhbWxQcm92aWRlcj86IElTYW1sUHJvdmlkZXIsXG4gICkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICByZW5kZXIoKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJmZWRlcmF0ZWQtYXV0aGVudGljYXRpb25cIixcbiAgICAgIHNhbWxQcm92aWRlckFybjogdGhpcy5zYW1sUHJvdmlkZXIuc2FtbFByb3ZpZGVyQXJuLFxuICAgICAgc2VsZlNlcnZpY2VTYW1sUHJvdmlkZXJBcm46IHRoaXMuc2VsZlNlcnZpY2VTYW1sUHJvdmlkZXI/LnNhbWxQcm92aWRlckFybixcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgYSBjbGllbnQgVlBOIGVuZHBvaW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2xpZW50VnBuRW5kcG9pbnRQcm9wc1xuICBleHRlbmRzIENsaWVudFZwbkVuZHBvaW50T3B0aW9ucyxcbiAgICBBd3NDb25zdHJ1Y3RQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgVlBDIHRvIGNvbm5lY3QgdG8uXG4gICAqL1xuICByZWFkb25seSB2cGM6IElWcGM7XG59XG5cbi8qKlxuICogQXR0cmlidXRlcyB3aGVuIGltcG9ydGluZyBhbiBleGlzdGluZyBjbGllbnQgVlBOIGVuZHBvaW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2xpZW50VnBuRW5kcG9pbnRBdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAqIFRoZSBlbmRwb2ludCBJRFxuICAgKi9cbiAgcmVhZG9ubHkgZW5kcG9pbnRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc2VjdXJpdHkgZ3JvdXBzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZW5kcG9pbnRcbiAgICovXG4gIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXBzOiBJU2VjdXJpdHlHcm91cFtdO1xufVxuXG4vKipcbiAqIEEgY2xpZW50IFZQTiBjb25ubmVjdGlvblxuICovXG5leHBvcnQgY2xhc3MgQ2xpZW50VnBuRW5kcG9pbnRcbiAgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RCYXNlXG4gIGltcGxlbWVudHMgSUNsaWVudFZwbkVuZHBvaW50XG57XG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgY2xpZW50IFZQTiBlbmRwb2ludFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tRW5kcG9pbnRBdHRyaWJ1dGVzKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBhdHRyczogQ2xpZW50VnBuRW5kcG9pbnRBdHRyaWJ1dGVzLFxuICApOiBJQ2xpZW50VnBuRW5kcG9pbnQge1xuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIEF3c0NvbnN0cnVjdEJhc2UgaW1wbGVtZW50cyBJQ2xpZW50VnBuRW5kcG9pbnQge1xuICAgICAgcHVibGljIHJlYWRvbmx5IGVuZHBvaW50SWQgPSBhdHRycy5lbmRwb2ludElkO1xuICAgICAgcHVibGljIGdldCBjbGllbnRWcG5PdXRwdXRzKCk6IENsaWVudFZwbk91dHB1dHMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNsaWVudFZwbkVuZHBvaW50SWQ6IHRoaXMuZW5kcG9pbnRJZCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHB1YmxpYyBnZXQgb3V0cHV0cygpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50VnBuT3V0cHV0cztcbiAgICAgIH1cbiAgICAgIHB1YmxpYyByZWFkb25seSBjb25uZWN0aW9ucyA9IG5ldyBDb25uZWN0aW9ucyh7XG4gICAgICAgIHNlY3VyaXR5R3JvdXBzOiBhdHRycy5zZWN1cml0eUdyb3VwcyxcbiAgICAgIH0pO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHRhcmdldE5ldHdvcmtzQXNzb2NpYXRlZDogSURlcGVuZGFibGUgPVxuICAgICAgICBuZXcgRGVwZW5kZW5jeUdyb3VwKCk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgSW1wb3J0KHNjb3BlLCBpZCk7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgZW5kcG9pbnRJZDogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgc2VsZlNlcnZpY2VQb3J0YWxVcmw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFsbG93cyBzcGVjaWZ5IHNlY3VyaXR5IGdyb3VwIGNvbm5lY3Rpb25zIGZvciB0aGUgZW5kcG9pbnQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY29ubmVjdGlvbnM6IENvbm5lY3Rpb25zO1xuXG4gIHB1YmxpYyByZWFkb25seSB0YXJnZXROZXR3b3Jrc0Fzc29jaWF0ZWQ6IElEZXBlbmRhYmxlO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3RhcmdldE5ldHdvcmtzQXNzb2NpYXRlZCA9IG5ldyBEZXBlbmRlbmN5R3JvdXAoKTtcblxuICBwdWJsaWMgZ2V0IGNsaWVudFZwbk91dHB1dHMoKTogQ2xpZW50VnBuT3V0cHV0cyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNsaWVudFZwbkVuZHBvaW50SWQ6IHRoaXMuZW5kcG9pbnRJZCxcbiAgICAgIHNlbGZTZXJ2aWNlUG9ydGFsVXJsOiB0aGlzLnNlbGZTZXJ2aWNlUG9ydGFsVXJsLFxuICAgIH07XG4gIH1cbiAgcHVibGljIGdldCBvdXRwdXRzKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIHJldHVybiB0aGlzLmNsaWVudFZwbk91dHB1dHM7XG4gIH1cbiAgcHVibGljIHJlc291cmNlOiBlYzJDbGllbnRWcG5FbmRwb2ludC5FYzJDbGllbnRWcG5FbmRwb2ludDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQ2xpZW50VnBuRW5kcG9pbnRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgaWYgKCFUb2tlbi5pc1VucmVzb2x2ZWQocHJvcHMudnBjLnZwY0NpZHJCbG9jaykpIHtcbiAgICAgIGNvbnN0IGNsaWVudENpZHIgPSBuZXcgQ2lkckJsb2NrKHByb3BzLmNpZHIpO1xuICAgICAgY29uc3QgdnBjQ2lkciA9IG5ldyBDaWRyQmxvY2socHJvcHMudnBjLnZwY0NpZHJCbG9jayk7XG4gICAgICBpZiAodnBjQ2lkci5jb250YWluc0NpZHIoY2xpZW50Q2lkcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiVGhlIGNsaWVudCBDSURSIGNhbm5vdCBvdmVybGFwIHdpdGggdGhlIGxvY2FsIENJRFIgb2YgdGhlIFZQQ1wiLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwcm9wcy5kbnNTZXJ2ZXJzICYmIHByb3BzLmRuc1NlcnZlcnMubGVuZ3RoID4gMikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQSBjbGllbnQgVlBOIGVuZHBvaW50IGNhbiBoYXZlIHVwIHRvIHR3byBETlMgc2VydmVyc1wiKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMubG9nZ2luZyA9PSBmYWxzZSAmJiAocHJvcHMubG9nR3JvdXAgfHwgcHJvcHMubG9nU3RyZWFtKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkNhbm5vdCBzcGVjaWZ5IGBsb2dHcm91cGAgb3IgYGxvZ1N0cmVhbWAgd2hlbiBsb2dnaW5nIGlzIGRpc2FibGVkXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHByb3BzLmNsaWVudENvbm5lY3Rpb25IYW5kbGVyICYmXG4gICAgICAhVG9rZW4uaXNVbnJlc29sdmVkKHByb3BzLmNsaWVudENvbm5lY3Rpb25IYW5kbGVyLmZ1bmN0aW9uTmFtZSkgJiZcbiAgICAgICFwcm9wcy5jbGllbnRDb25uZWN0aW9uSGFuZGxlci5mdW5jdGlvbk5hbWUuc3RhcnRzV2l0aChcIkFXU0NsaWVudFZQTi1cIilcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJUaGUgbmFtZSBvZiB0aGUgTGFtYmRhIGZ1bmN0aW9uIG11c3QgYmVnaW4gd2l0aCB0aGUgYEFXU0NsaWVudFZQTi1gIHByZWZpeFwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBwcm9wcy5jbGllbnRMb2dpbkJhbm5lciAmJlxuICAgICAgIVRva2VuLmlzVW5yZXNvbHZlZChwcm9wcy5jbGllbnRMb2dpbkJhbm5lcikgJiZcbiAgICAgIHByb3BzLmNsaWVudExvZ2luQmFubmVyLmxlbmd0aCA+IDE0MDBcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRoZSBtYXhpbXVtIGxlbmd0aCBmb3IgdGhlIGNsaWVudCBsb2dpbiBiYW5uZXIgaXMgMTQwMCwgZ290ICR7cHJvcHMuY2xpZW50TG9naW5CYW5uZXIubGVuZ3RofWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGxvZ2dpbmcgPSBwcm9wcy5sb2dnaW5nID8/IHRydWU7XG4gICAgY29uc3QgbG9nR3JvdXAgPSBsb2dnaW5nXG4gICAgICA/IChwcm9wcy5sb2dHcm91cCA/PyBuZXcgbG9ncy5Mb2dHcm91cCh0aGlzLCBcIkxvZ0dyb3VwXCIpKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBzZWN1cml0eUdyb3VwcyA9IHByb3BzLnNlY3VyaXR5R3JvdXBzID8/IFtcbiAgICAgIG5ldyBTZWN1cml0eUdyb3VwKHRoaXMsIFwiU2VjdXJpdHlHcm91cFwiLCB7XG4gICAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgfSksXG4gICAgXTtcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gbmV3IENvbm5lY3Rpb25zKHsgc2VjdXJpdHlHcm91cHMgfSk7XG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IGVjMkNsaWVudFZwbkVuZHBvaW50LkVjMkNsaWVudFZwbkVuZHBvaW50KFxuICAgICAgdGhpcyxcbiAgICAgIFwiUmVzb3VyY2VcIixcbiAgICAgIHtcbiAgICAgICAgYXV0aGVudGljYXRpb25PcHRpb25zOiByZW5kZXJBdXRoZW50aWNhdGlvbk9wdGlvbnMoXG4gICAgICAgICAgcHJvcHMuY2xpZW50Q2VydGlmaWNhdGVBcm4sXG4gICAgICAgICAgcHJvcHMudXNlckJhc2VkQXV0aGVudGljYXRpb24sXG4gICAgICAgICksXG4gICAgICAgIGNsaWVudENpZHJCbG9jazogcHJvcHMuY2lkcixcbiAgICAgICAgY2xpZW50Q29ubmVjdE9wdGlvbnM6IHByb3BzLmNsaWVudENvbm5lY3Rpb25IYW5kbGVyXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICAgIGxhbWJkYUZ1bmN0aW9uQXJuOiBwcm9wcy5jbGllbnRDb25uZWN0aW9uSGFuZGxlci5mdW5jdGlvbkFybixcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgY29ubmVjdGlvbkxvZ09wdGlvbnM6IHtcbiAgICAgICAgICBlbmFibGVkOiBsb2dnaW5nLFxuICAgICAgICAgIGNsb3Vkd2F0Y2hMb2dHcm91cDogbG9nR3JvdXA/LmxvZ0dyb3VwTmFtZSxcbiAgICAgICAgICBjbG91ZHdhdGNoTG9nU3RyZWFtOiBwcm9wcy5sb2dTdHJlYW0/LmxvZ1N0cmVhbU5hbWUsXG4gICAgICAgIH0sXG4gICAgICAgIGRlc2NyaXB0aW9uOiBwcm9wcy5kZXNjcmlwdGlvbixcbiAgICAgICAgZG5zU2VydmVyczogcHJvcHMuZG5zU2VydmVycyxcbiAgICAgICAgc2VjdXJpdHlHcm91cElkczogc2VjdXJpdHlHcm91cHMubWFwKChzKSA9PiBzLnNlY3VyaXR5R3JvdXBJZCksXG4gICAgICAgIHNlbGZTZXJ2aWNlUG9ydGFsOiBib29sZWFuVG9FbmFibGVkRGlzYWJsZWQocHJvcHMuc2VsZlNlcnZpY2VQb3J0YWwpLFxuICAgICAgICBzZXJ2ZXJDZXJ0aWZpY2F0ZUFybjogcHJvcHMuc2VydmVyQ2VydGlmaWNhdGVBcm4sXG4gICAgICAgIHNwbGl0VHVubmVsOiBwcm9wcy5zcGxpdFR1bm5lbCxcbiAgICAgICAgdHJhbnNwb3J0UHJvdG9jb2w6IHByb3BzLnRyYW5zcG9ydFByb3RvY29sLFxuICAgICAgICB2cGNJZDogcHJvcHMudnBjLnZwY0lkLFxuICAgICAgICB2cG5Qb3J0OiBwcm9wcy5wb3J0LFxuICAgICAgICBzZXNzaW9uVGltZW91dEhvdXJzOiBwcm9wcy5zZXNzaW9uVGltZW91dCxcbiAgICAgICAgY2xpZW50TG9naW5CYW5uZXJPcHRpb25zOiBwcm9wcy5jbGllbnRMb2dpbkJhbm5lclxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgICBiYW5uZXJUZXh0OiBwcm9wcy5jbGllbnRMb2dpbkJhbm5lcixcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIHRoaXMuZW5kcG9pbnRJZCA9IHRoaXMucmVzb3VyY2UuaWQ7XG5cbiAgICBpZiAocHJvcHMudXNlckJhc2VkQXV0aGVudGljYXRpb24gJiYgKHByb3BzLnNlbGZTZXJ2aWNlUG9ydGFsID8/IHRydWUpKSB7XG4gICAgICAvLyBPdXRwdXQgc2VsZi1zZXJ2aWNlIHBvcnRhbCBVUkxcbiAgICAgIHRoaXMuc2VsZlNlcnZpY2VQb3J0YWxVcmwgPSB0aGlzLnJlc291cmNlLnNlbGZTZXJ2aWNlUG9ydGFsVXJsO1xuICAgICAgLy8gbmV3IFRlcnJhZm9ybU91dHB1dCh0aGlzLCBcIlNlbGZTZXJ2aWNlUG9ydGFsVXJsXCIsIHtcbiAgICAgIC8vICAgdmFsdWU6IGBodHRwczovL3NlbGYtc2VydmljZS5jbGllbnR2cG4uYW1hem9uYXdzLmNvbS9lbmRwb2ludHMvJHt0aGlzLmVuZHBvaW50SWR9YCxcbiAgICAgIC8vIH0pO1xuICAgIH1cblxuICAgIC8vIEFzc29jaWF0ZSBzdWJuZXRzXG4gICAgY29uc3Qgc3VibmV0SWRzID0gcHJvcHMudnBjLnNlbGVjdFN1Ym5ldHMocHJvcHMudnBjU3VibmV0cykuc3VibmV0SWRzO1xuXG4gICAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZChzdWJuZXRJZHMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiQ2Fubm90IGFzc29jaWF0ZSBzdWJuZXRzIHdoZW4gVlBDIGFyZSBpbXBvcnRlZCBmcm9tIHBhcmFtZXRlcnMgb3IgZXhwb3J0cyBjb250YWluaW5nIGxpc3RzIG9mIHN1Ym5ldCBJRHMuXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgW2lkeCwgc3VibmV0SWRdIG9mIE9iamVjdC5lbnRyaWVzKHN1Ym5ldElkcykpIHtcbiAgICAgIHRoaXMuX3RhcmdldE5ldHdvcmtzQXNzb2NpYXRlZC5hZGQoXG4gICAgICAgIG5ldyBlYzJDbGllbnRWcG5OZXR3b3JrQXNzb2NpYXRpb24uRWMyQ2xpZW50VnBuTmV0d29ya0Fzc29jaWF0aW9uKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgYEFzc29jaWF0aW9uJHtpZHh9YCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGllbnRWcG5FbmRwb2ludElkOiB0aGlzLmVuZHBvaW50SWQsXG4gICAgICAgICAgICBzdWJuZXRJZCxcbiAgICAgICAgICB9LFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy50YXJnZXROZXR3b3Jrc0Fzc29jaWF0ZWQgPSB0aGlzLl90YXJnZXROZXR3b3Jrc0Fzc29jaWF0ZWQ7XG5cbiAgICBpZiAocHJvcHMuYXV0aG9yaXplQWxsVXNlcnNUb1ZwY0NpZHIgPz8gdHJ1ZSkge1xuICAgICAgdGhpcy5hZGRBdXRob3JpemF0aW9uUnVsZShcIkF1dGhvcml6ZUFsbFwiLCB7XG4gICAgICAgIGNpZHI6IHByb3BzLnZwYy52cGNDaWRyQmxvY2ssXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhbiBhdXRob3JpemF0aW9uIHJ1bGUgdG8gdGhpcyBlbmRwb2ludFxuICAgKi9cbiAgcHVibGljIGFkZEF1dGhvcml6YXRpb25SdWxlKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IENsaWVudFZwbkF1dGhvcml6YXRpb25SdWxlT3B0aW9ucyxcbiAgKTogQ2xpZW50VnBuQXV0aG9yaXphdGlvblJ1bGUge1xuICAgIHJldHVybiBuZXcgQ2xpZW50VnBuQXV0aG9yaXphdGlvblJ1bGUodGhpcywgaWQsIHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgY2xpZW50VnBuRW5kcG9pbnQ6IHRoaXMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHJvdXRlIHRvIHRoaXMgZW5kcG9pbnRcbiAgICovXG4gIHB1YmxpYyBhZGRSb3V0ZShpZDogc3RyaW5nLCBwcm9wczogQ2xpZW50VnBuUm91dGVPcHRpb25zKTogQ2xpZW50VnBuUm91dGUge1xuICAgIHJldHVybiBuZXcgQ2xpZW50VnBuUm91dGUodGhpcywgaWQsIHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgY2xpZW50VnBuRW5kcG9pbnQ6IHRoaXMsXG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyQXV0aGVudGljYXRpb25PcHRpb25zKFxuICBjbGllbnRDZXJ0aWZpY2F0ZUFybj86IHN0cmluZyxcbiAgdXNlckJhc2VkQXV0aGVudGljYXRpb24/OiBDbGllbnRWcG5Vc2VyQmFzZWRBdXRoZW50aWNhdGlvbixcbik6IGVjMkNsaWVudFZwbkVuZHBvaW50LkVjMkNsaWVudFZwbkVuZHBvaW50QXV0aGVudGljYXRpb25PcHRpb25zW10ge1xuICBjb25zdCBhdXRoZW50aWNhdGlvbk9wdGlvbnM6IGVjMkNsaWVudFZwbkVuZHBvaW50LkVjMkNsaWVudFZwbkVuZHBvaW50QXV0aGVudGljYXRpb25PcHRpb25zW10gPVxuICAgIFtdO1xuXG4gIGlmIChjbGllbnRDZXJ0aWZpY2F0ZUFybikge1xuICAgIGF1dGhlbnRpY2F0aW9uT3B0aW9ucy5wdXNoKHtcbiAgICAgIHR5cGU6IFwiY2VydGlmaWNhdGUtYXV0aGVudGljYXRpb25cIixcbiAgICAgIHJvb3RDZXJ0aWZpY2F0ZUNoYWluQXJuOiBjbGllbnRDZXJ0aWZpY2F0ZUFybixcbiAgICB9KTtcbiAgfVxuXG4gIGlmICh1c2VyQmFzZWRBdXRoZW50aWNhdGlvbikge1xuICAgIGF1dGhlbnRpY2F0aW9uT3B0aW9ucy5wdXNoKHVzZXJCYXNlZEF1dGhlbnRpY2F0aW9uLnJlbmRlcigpKTtcbiAgfVxuXG4gIGlmIChhdXRoZW50aWNhdGlvbk9wdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJBIGNsaWVudCBWUE4gZW5kcG9pbnQgbXVzdCB1c2UgYXQgbGVhc3Qgb25lIGF1dGhlbnRpY2F0aW9uIG9wdGlvblwiLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGF1dGhlbnRpY2F0aW9uT3B0aW9ucztcbn1cblxuZnVuY3Rpb24gYm9vbGVhblRvRW5hYmxlZERpc2FibGVkKFxuICB2YWw/OiBib29sZWFuLFxuKTogXCJlbmFibGVkXCIgfCBcImRpc2FibGVkXCIgfCB1bmRlZmluZWQge1xuICBzd2l0Y2ggKHZhbCkge1xuICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjYXNlIHRydWU6XG4gICAgICByZXR1cm4gXCJlbmFibGVkXCI7XG4gICAgY2FzZSBmYWxzZTpcbiAgICAgIHJldHVybiBcImRpc2FibGVkXCI7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { ec2ClientVpnRoute } from "@cdktf/provider-aws";
|
|
2
|
+
import { Construct } from "constructs";
|
|
3
|
+
import { IClientVpnEndpoint } from "./client-vpn-endpoint-types";
|
|
4
|
+
import { ISubnet } from "./vpc";
|
|
5
|
+
import { AwsConstructBase, AwsConstructProps } from "../aws-construct";
|
|
6
|
+
/**
|
|
7
|
+
* Options for a ClientVpnRoute
|
|
8
|
+
*/
|
|
9
|
+
export interface ClientVpnRouteOptions {
|
|
10
|
+
/**
|
|
11
|
+
* The IPv4 address range, in CIDR notation, of the route destination.
|
|
12
|
+
*
|
|
13
|
+
* For example:
|
|
14
|
+
* - To add a route for Internet access, enter 0.0.0.0/0
|
|
15
|
+
* - To add a route for a peered VPC, enter the peered VPC's IPv4 CIDR range
|
|
16
|
+
* - To add a route for an on-premises network, enter the AWS Site-to-Site VPN
|
|
17
|
+
* connection's IPv4 CIDR range
|
|
18
|
+
* - To add a route for the local network, enter the client CIDR range
|
|
19
|
+
*/
|
|
20
|
+
readonly cidr: string;
|
|
21
|
+
/**
|
|
22
|
+
* A brief description of the authorization rule.
|
|
23
|
+
*
|
|
24
|
+
* @default - no description
|
|
25
|
+
*/
|
|
26
|
+
readonly description?: string;
|
|
27
|
+
/**
|
|
28
|
+
* The target for the route
|
|
29
|
+
*/
|
|
30
|
+
readonly target: ClientVpnRouteTarget;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Target for a client VPN route
|
|
34
|
+
*/
|
|
35
|
+
export declare abstract class ClientVpnRouteTarget {
|
|
36
|
+
/**
|
|
37
|
+
* Subnet
|
|
38
|
+
*
|
|
39
|
+
* The specified subnet must be an existing target network of the client VPN
|
|
40
|
+
* endpoint.
|
|
41
|
+
*/
|
|
42
|
+
static subnet(subnet: ISubnet): ClientVpnRouteTarget;
|
|
43
|
+
/**
|
|
44
|
+
* Local network
|
|
45
|
+
*/
|
|
46
|
+
static local(): ClientVpnRouteTarget;
|
|
47
|
+
/** The subnet ID */
|
|
48
|
+
abstract readonly subnetId: string;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Properties for a ClientVpnRoute
|
|
52
|
+
*/
|
|
53
|
+
export interface ClientVpnRouteProps extends ClientVpnRouteOptions, AwsConstructProps {
|
|
54
|
+
/**
|
|
55
|
+
* The client VPN endpoint to which to add the route.
|
|
56
|
+
* @default clientVpnEndpoint is required
|
|
57
|
+
*/
|
|
58
|
+
readonly clientVpnEndpoint: IClientVpnEndpoint;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* A client VPN route
|
|
62
|
+
*/
|
|
63
|
+
export declare class ClientVpnRoute extends AwsConstructBase {
|
|
64
|
+
resource: ec2ClientVpnRoute.Ec2ClientVpnRoute;
|
|
65
|
+
get outputs(): Record<string, any>;
|
|
66
|
+
constructor(scope: Construct, id: string, props: ClientVpnRouteProps);
|
|
67
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a, _b;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.ClientVpnRoute = exports.ClientVpnRouteTarget = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
// https://github.com/aws/aws-cdk/blob/v2.175.1/packages/aws-cdk-lib/aws-ec2/lib/client-vpn-route.ts
|
|
7
|
+
const provider_aws_1 = require("@cdktf/provider-aws");
|
|
8
|
+
const aws_construct_1 = require("../aws-construct");
|
|
9
|
+
/**
|
|
10
|
+
* Target for a client VPN route
|
|
11
|
+
*/
|
|
12
|
+
class ClientVpnRouteTarget {
|
|
13
|
+
/**
|
|
14
|
+
* Subnet
|
|
15
|
+
*
|
|
16
|
+
* The specified subnet must be an existing target network of the client VPN
|
|
17
|
+
* endpoint.
|
|
18
|
+
*/
|
|
19
|
+
static subnet(subnet) {
|
|
20
|
+
return { subnetId: subnet.subnetId };
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Local network
|
|
24
|
+
*/
|
|
25
|
+
static local() {
|
|
26
|
+
return { subnetId: "local" };
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
exports.ClientVpnRouteTarget = ClientVpnRouteTarget;
|
|
30
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
31
|
+
ClientVpnRouteTarget[_a] = { fqn: "terraconstructs.aws.compute.ClientVpnRouteTarget", version: "0.0.12" };
|
|
32
|
+
/**
|
|
33
|
+
* A client VPN route
|
|
34
|
+
*/
|
|
35
|
+
class ClientVpnRoute extends aws_construct_1.AwsConstructBase {
|
|
36
|
+
get outputs() {
|
|
37
|
+
return {
|
|
38
|
+
// is this the ID of the Client VPN endpoint or the VPN route?
|
|
39
|
+
clientVpnRouteId: this.resource.id,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
constructor(scope, id, props) {
|
|
43
|
+
super(scope, id, props);
|
|
44
|
+
this.resource = new provider_aws_1.ec2ClientVpnRoute.Ec2ClientVpnRoute(this, "Resource", {
|
|
45
|
+
clientVpnEndpointId: props.clientVpnEndpoint.endpointId,
|
|
46
|
+
description: props.description,
|
|
47
|
+
destinationCidrBlock: props.cidr,
|
|
48
|
+
targetVpcSubnetId: props.target.subnetId,
|
|
49
|
+
});
|
|
50
|
+
// See https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-clientvpnroute.html
|
|
51
|
+
this.resource.node.addDependency(props.clientVpnEndpoint.targetNetworksAssociated);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
exports.ClientVpnRoute = ClientVpnRoute;
|
|
55
|
+
_b = JSII_RTTI_SYMBOL_1;
|
|
56
|
+
ClientVpnRoute[_b] = { fqn: "terraconstructs.aws.compute.ClientVpnRoute", version: "0.0.12" };
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LXZwbi1yb3V0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hd3MvY29tcHV0ZS9jbGllbnQtdnBuLXJvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0dBQW9HO0FBRXBHLHNEQUF3RDtBQUl4RCxvREFBdUU7QUErQnZFOztHQUVHO0FBQ0gsTUFBc0Isb0JBQW9CO0lBQ3hDOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFlO1FBQ2xDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxLQUFLO1FBQ2pCLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUM7SUFDL0IsQ0FBQzs7QUFoQkgsb0RBb0JDOzs7QUFlRDs7R0FFRztBQUNILE1BQWEsY0FBZSxTQUFRLGdDQUFnQjtJQUVsRCxJQUFXLE9BQU87UUFDaEIsT0FBTztZQUNMLDhEQUE4RDtZQUM5RCxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUU7U0FDbkMsQ0FBQztJQUNKLENBQUM7SUFDRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTBCO1FBQ2xFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxnQ0FBaUIsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQ3hFLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVO1lBQ3ZELFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztZQUM5QixvQkFBb0IsRUFBRSxLQUFLLENBQUMsSUFBSTtZQUNoQyxpQkFBaUIsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVE7U0FDekMsQ0FBQyxDQUFDO1FBRUgsMEdBQTBHO1FBQzFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FDOUIsS0FBSyxDQUFDLGlCQUFpQixDQUFDLHdCQUF3QixDQUNqRCxDQUFDO0lBQ0osQ0FBQzs7QUFyQkgsd0NBc0JDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTc1LjEvcGFja2FnZXMvYXdzLWNkay1saWIvYXdzLWVjMi9saWIvY2xpZW50LXZwbi1yb3V0ZS50c1xuXG5pbXBvcnQgeyBlYzJDbGllbnRWcG5Sb3V0ZSB9IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItYXdzXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgSUNsaWVudFZwbkVuZHBvaW50IH0gZnJvbSBcIi4vY2xpZW50LXZwbi1lbmRwb2ludC10eXBlc1wiO1xuaW1wb3J0IHsgSVN1Ym5ldCB9IGZyb20gXCIuL3ZwY1wiO1xuaW1wb3J0IHsgQXdzQ29uc3RydWN0QmFzZSwgQXdzQ29uc3RydWN0UHJvcHMgfSBmcm9tIFwiLi4vYXdzLWNvbnN0cnVjdFwiO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGEgQ2xpZW50VnBuUm91dGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbGllbnRWcG5Sb3V0ZU9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIElQdjQgYWRkcmVzcyByYW5nZSwgaW4gQ0lEUiBub3RhdGlvbiwgb2YgdGhlIHJvdXRlIGRlc3RpbmF0aW9uLlxuICAgKlxuICAgKiBGb3IgZXhhbXBsZTpcbiAgICogICAtIFRvIGFkZCBhIHJvdXRlIGZvciBJbnRlcm5ldCBhY2Nlc3MsIGVudGVyIDAuMC4wLjAvMFxuICAgKiAgIC0gVG8gYWRkIGEgcm91dGUgZm9yIGEgcGVlcmVkIFZQQywgZW50ZXIgdGhlIHBlZXJlZCBWUEMncyBJUHY0IENJRFIgcmFuZ2VcbiAgICogICAtIFRvIGFkZCBhIHJvdXRlIGZvciBhbiBvbi1wcmVtaXNlcyBuZXR3b3JrLCBlbnRlciB0aGUgQVdTIFNpdGUtdG8tU2l0ZSBWUE5cbiAgICogICAgIGNvbm5lY3Rpb24ncyBJUHY0IENJRFIgcmFuZ2VcbiAgICogICAtIFRvIGFkZCBhIHJvdXRlIGZvciB0aGUgbG9jYWwgbmV0d29yaywgZW50ZXIgdGhlIGNsaWVudCBDSURSIHJhbmdlXG4gICAqL1xuICByZWFkb25seSBjaWRyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgYnJpZWYgZGVzY3JpcHRpb24gb2YgdGhlIGF1dGhvcml6YXRpb24gcnVsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBkZXNjcmlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0YXJnZXQgZm9yIHRoZSByb3V0ZVxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0OiBDbGllbnRWcG5Sb3V0ZVRhcmdldDtcbn1cblxuLyoqXG4gKiBUYXJnZXQgZm9yIGEgY2xpZW50IFZQTiByb3V0ZVxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ2xpZW50VnBuUm91dGVUYXJnZXQge1xuICAvKipcbiAgICogU3VibmV0XG4gICAqXG4gICAqIFRoZSBzcGVjaWZpZWQgc3VibmV0IG11c3QgYmUgYW4gZXhpc3RpbmcgdGFyZ2V0IG5ldHdvcmsgb2YgdGhlIGNsaWVudCBWUE5cbiAgICogZW5kcG9pbnQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHN1Ym5ldChzdWJuZXQ6IElTdWJuZXQpOiBDbGllbnRWcG5Sb3V0ZVRhcmdldCB7XG4gICAgcmV0dXJuIHsgc3VibmV0SWQ6IHN1Ym5ldC5zdWJuZXRJZCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIExvY2FsIG5ldHdvcmtcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbG9jYWwoKTogQ2xpZW50VnBuUm91dGVUYXJnZXQge1xuICAgIHJldHVybiB7IHN1Ym5ldElkOiBcImxvY2FsXCIgfTtcbiAgfVxuXG4gIC8qKiBUaGUgc3VibmV0IElEICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBzdWJuZXRJZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGEgQ2xpZW50VnBuUm91dGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbGllbnRWcG5Sb3V0ZVByb3BzXG4gIGV4dGVuZHMgQ2xpZW50VnBuUm91dGVPcHRpb25zLFxuICAgIEF3c0NvbnN0cnVjdFByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBjbGllbnQgVlBOIGVuZHBvaW50IHRvIHdoaWNoIHRvIGFkZCB0aGUgcm91dGUuXG4gICAqIEBkZWZhdWx0IGNsaWVudFZwbkVuZHBvaW50IGlzIHJlcXVpcmVkXG4gICAqL1xuICByZWFkb25seSBjbGllbnRWcG5FbmRwb2ludDogSUNsaWVudFZwbkVuZHBvaW50O1xufVxuXG4vKipcbiAqIEEgY2xpZW50IFZQTiByb3V0ZVxuICovXG5leHBvcnQgY2xhc3MgQ2xpZW50VnBuUm91dGUgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RCYXNlIHtcbiAgcHVibGljIHJlc291cmNlOiBlYzJDbGllbnRWcG5Sb3V0ZS5FYzJDbGllbnRWcG5Sb3V0ZTtcbiAgcHVibGljIGdldCBvdXRwdXRzKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBpcyB0aGlzIHRoZSBJRCBvZiB0aGUgQ2xpZW50IFZQTiBlbmRwb2ludCBvciB0aGUgVlBOIHJvdXRlP1xuICAgICAgY2xpZW50VnBuUm91dGVJZDogdGhpcy5yZXNvdXJjZS5pZCxcbiAgICB9O1xuICB9XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBDbGllbnRWcG5Sb3V0ZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyBlYzJDbGllbnRWcG5Sb3V0ZS5FYzJDbGllbnRWcG5Sb3V0ZSh0aGlzLCBcIlJlc291cmNlXCIsIHtcbiAgICAgIGNsaWVudFZwbkVuZHBvaW50SWQ6IHByb3BzLmNsaWVudFZwbkVuZHBvaW50LmVuZHBvaW50SWQsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICBkZXN0aW5hdGlvbkNpZHJCbG9jazogcHJvcHMuY2lkcixcbiAgICAgIHRhcmdldFZwY1N1Ym5ldElkOiBwcm9wcy50YXJnZXQuc3VibmV0SWQsXG4gICAgfSk7XG5cbiAgICAvLyBTZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi1jbGllbnR2cG5yb3V0ZS5odG1sXG4gICAgdGhpcy5yZXNvdXJjZS5ub2RlLmFkZERlcGVuZGVuY3koXG4gICAgICBwcm9wcy5jbGllbnRWcG5FbmRwb2ludC50YXJnZXROZXR3b3Jrc0Fzc29jaWF0ZWQsXG4gICAgKTtcbiAgfVxufVxuIl19
|
|
@@ -300,7 +300,7 @@ class Condition {
|
|
|
300
300
|
}
|
|
301
301
|
exports.Condition = Condition;
|
|
302
302
|
_a = JSII_RTTI_SYMBOL_1;
|
|
303
|
-
Condition[_a] = { fqn: "terraconstructs.aws.compute.Condition", version: "0.0.
|
|
303
|
+
Condition[_a] = { fqn: "terraconstructs.aws.compute.Condition", version: "0.0.12" };
|
|
304
304
|
/**
|
|
305
305
|
* Comparison Operator types
|
|
306
306
|
*/
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { IPeer } from "./peer";
|
|
2
|
+
import { Port } from "./port";
|
|
3
|
+
import { ISecurityGroup } from "./security-group";
|
|
4
|
+
/**
|
|
5
|
+
* The goal of this module is to make possible to write statements like this:
|
|
6
|
+
*
|
|
7
|
+
* ```ts
|
|
8
|
+
* database.connections.allowFrom(fleet);
|
|
9
|
+
* fleet.connections.allowTo(database);
|
|
10
|
+
* rdgw.connections.allowFromCidrIp('0.3.1.5/86');
|
|
11
|
+
* rgdw.connections.allowTrafficTo(fleet, new AllPorts());
|
|
12
|
+
* ```
|
|
13
|
+
*
|
|
14
|
+
* The insight here is that some connecting peers have information on what ports should
|
|
15
|
+
* be involved in the connection, and some don't.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* An object that has a Connections object
|
|
19
|
+
*/
|
|
20
|
+
export interface IConnectable {
|
|
21
|
+
/**
|
|
22
|
+
* The network connections associated with this resource.
|
|
23
|
+
*/
|
|
24
|
+
readonly connections: Connections;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Properties to intialize a new Connections object
|
|
28
|
+
*/
|
|
29
|
+
export interface ConnectionsProps {
|
|
30
|
+
/**
|
|
31
|
+
* Class that represents the rule by which others can connect to this connectable
|
|
32
|
+
*
|
|
33
|
+
* This object is required, but will be derived from securityGroup if that is passed.
|
|
34
|
+
*
|
|
35
|
+
* @default Derived from securityGroup if set.
|
|
36
|
+
*/
|
|
37
|
+
readonly peer?: IPeer;
|
|
38
|
+
/**
|
|
39
|
+
* What securityGroup(s) this object is managing connections for
|
|
40
|
+
*
|
|
41
|
+
* @default No security groups
|
|
42
|
+
*/
|
|
43
|
+
readonly securityGroups?: ISecurityGroup[];
|
|
44
|
+
/**
|
|
45
|
+
* Default port range for initiating connections to and from this object
|
|
46
|
+
*
|
|
47
|
+
* @default - No default port
|
|
48
|
+
*/
|
|
49
|
+
readonly defaultPort?: Port;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Manage the allowed network connections for constructs with Security Groups.
|
|
53
|
+
*
|
|
54
|
+
* Security Groups can be thought of as a firewall for network-connected
|
|
55
|
+
* devices. This class makes it easy to allow network connections to and
|
|
56
|
+
* from security groups, and between security groups individually. When
|
|
57
|
+
* establishing connectivity between security groups, it will automatically
|
|
58
|
+
* add rules in both security groups
|
|
59
|
+
*
|
|
60
|
+
* This object can manage one or more security groups.
|
|
61
|
+
*/
|
|
62
|
+
export declare class Connections implements IConnectable {
|
|
63
|
+
readonly connections: Connections;
|
|
64
|
+
/**
|
|
65
|
+
* The default port configured for this connection peer, if available
|
|
66
|
+
*/
|
|
67
|
+
readonly defaultPort?: Port;
|
|
68
|
+
/**
|
|
69
|
+
* Underlying securityGroup for this Connections object, if present
|
|
70
|
+
*
|
|
71
|
+
* May be empty if this Connections object is not managing a SecurityGroup,
|
|
72
|
+
* but simply representing a Connectable peer.
|
|
73
|
+
*/
|
|
74
|
+
private readonly _securityGroups;
|
|
75
|
+
/**
|
|
76
|
+
* The rule that defines how to represent this peer in a security group
|
|
77
|
+
*/
|
|
78
|
+
private readonly _securityGroupRules;
|
|
79
|
+
/**
|
|
80
|
+
* When doing bidirectional grants between Connections, make sure we don't recursive infinitely
|
|
81
|
+
*/
|
|
82
|
+
private skip;
|
|
83
|
+
/**
|
|
84
|
+
* When doing bidirectional grants between Security Groups in different stacks, put the rule on the other SG
|
|
85
|
+
*/
|
|
86
|
+
private remoteRule;
|
|
87
|
+
constructor(props?: ConnectionsProps);
|
|
88
|
+
get securityGroups(): ISecurityGroup[];
|
|
89
|
+
/**
|
|
90
|
+
* Add a security group to the list of security groups managed by this object
|
|
91
|
+
*/
|
|
92
|
+
addSecurityGroup(...securityGroups: ISecurityGroup[]): void;
|
|
93
|
+
/**
|
|
94
|
+
* Allow connections to the peer on the given port
|
|
95
|
+
*/
|
|
96
|
+
allowTo(other: IConnectable, portRange: Port, description?: string): void;
|
|
97
|
+
/**
|
|
98
|
+
* Allow connections from the peer on the given port
|
|
99
|
+
*/
|
|
100
|
+
allowFrom(other: IConnectable, portRange: Port, description?: string): void;
|
|
101
|
+
/**
|
|
102
|
+
* Allow hosts inside the security group to connect to each other on the given port
|
|
103
|
+
*/
|
|
104
|
+
allowInternally(portRange: Port, description?: string): void;
|
|
105
|
+
/**
|
|
106
|
+
* Allow to all IPv4 ranges
|
|
107
|
+
*/
|
|
108
|
+
allowToAnyIpv4(portRange: Port, description?: string): void;
|
|
109
|
+
/**
|
|
110
|
+
* Allow from any IPv4 ranges
|
|
111
|
+
*/
|
|
112
|
+
allowFromAnyIpv4(portRange: Port, description?: string): void;
|
|
113
|
+
/**
|
|
114
|
+
* Allow connections from the peer on our default port
|
|
115
|
+
*
|
|
116
|
+
* Even if the peer has a default port, we will always use our default port.
|
|
117
|
+
*/
|
|
118
|
+
allowDefaultPortFrom(other: IConnectable, description?: string): void;
|
|
119
|
+
/**
|
|
120
|
+
* Allow hosts inside the security group to connect to each other
|
|
121
|
+
*/
|
|
122
|
+
allowDefaultPortInternally(description?: string): void;
|
|
123
|
+
/**
|
|
124
|
+
* Allow default connections from all IPv4 ranges
|
|
125
|
+
*/
|
|
126
|
+
allowDefaultPortFromAnyIpv4(description?: string): void;
|
|
127
|
+
/**
|
|
128
|
+
* Allow connections to the security group on their default port
|
|
129
|
+
*/
|
|
130
|
+
allowToDefaultPort(other: IConnectable, description?: string): void;
|
|
131
|
+
/**
|
|
132
|
+
* Allow connections from the peer on our default port
|
|
133
|
+
*
|
|
134
|
+
* Even if the peer has a default port, we will always use our default port.
|
|
135
|
+
*/
|
|
136
|
+
allowDefaultPortTo(other: IConnectable, description?: string): void;
|
|
137
|
+
}
|