terraconstructs 0.0.10 → 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 +8 -6
- 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,281 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.UnauthenticatedAction = exports.ListenerAction = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
const cdktf_1 = require("cdktf");
|
|
7
|
+
const port_1 = require("../port");
|
|
8
|
+
/**
|
|
9
|
+
* What to do when a client makes a request to a listener
|
|
10
|
+
*
|
|
11
|
+
* Some actions can be combined with other ones (specifically,
|
|
12
|
+
* you can perform authentication before serving the request).
|
|
13
|
+
*
|
|
14
|
+
* Multiple actions form a linked chain; the chain must always terminate in a
|
|
15
|
+
* *(weighted)forward*, *fixedResponse* or *redirect* action.
|
|
16
|
+
*
|
|
17
|
+
* If an action supports chaining, the next action can be indicated
|
|
18
|
+
* by passing it in the `next` property.
|
|
19
|
+
*
|
|
20
|
+
* (Called `ListenerAction` instead of the more strictly correct
|
|
21
|
+
* `ListenerAction` because this is the class most users interact
|
|
22
|
+
* with, and we want to make it not too visually overwhelming).
|
|
23
|
+
*/
|
|
24
|
+
class ListenerAction {
|
|
25
|
+
/**
|
|
26
|
+
* Authenticate using an identity provider (IdP) that is compliant with OpenID Connect (OIDC)
|
|
27
|
+
*
|
|
28
|
+
* @see https://docs.aws.amazon.com/elasticloadbalancing/latest/application/listener-authenticate-users.html#oidc-requirements
|
|
29
|
+
*/
|
|
30
|
+
static authenticateOidc(options) {
|
|
31
|
+
return new AuthenticateOidcAction(options);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Forward to one or more Target Groups
|
|
35
|
+
*
|
|
36
|
+
* @see https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html#forward-actions
|
|
37
|
+
*/
|
|
38
|
+
static forward(targetGroups, options = {}) {
|
|
39
|
+
if (targetGroups.length === 0) {
|
|
40
|
+
throw new Error("Need at least one targetGroup in a ListenerAction.forward()");
|
|
41
|
+
}
|
|
42
|
+
if (targetGroups.length === 1 && options.stickinessDuration === undefined) {
|
|
43
|
+
// Render a "simple" action for backwards compatibility with old templates
|
|
44
|
+
return new TargetGroupListenerAction(targetGroups, {
|
|
45
|
+
type: "forward",
|
|
46
|
+
targetGroupArn: targetGroups[0].targetGroupArn,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
return ListenerAction.weightedForward(targetGroups.map((g) => ({ targetGroup: g, weight: 1 })), options);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Forward to one or more Target Groups which are weighted differently
|
|
53
|
+
*
|
|
54
|
+
* @see https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html#forward-actions
|
|
55
|
+
*/
|
|
56
|
+
static weightedForward(targetGroups, options = {}) {
|
|
57
|
+
if (targetGroups.length === 0) {
|
|
58
|
+
throw new Error("Need at least one targetGroup in a ListenerAction.weightedForward()");
|
|
59
|
+
}
|
|
60
|
+
return new TargetGroupListenerAction(targetGroups.map((g) => g.targetGroup), {
|
|
61
|
+
type: "forward",
|
|
62
|
+
forward: {
|
|
63
|
+
targetGroup: targetGroups.map((g) => ({
|
|
64
|
+
arn: g.targetGroup.targetGroupArn,
|
|
65
|
+
weight: g.weight,
|
|
66
|
+
})),
|
|
67
|
+
stickiness: options.stickinessDuration
|
|
68
|
+
? {
|
|
69
|
+
duration: options.stickinessDuration.toSeconds(),
|
|
70
|
+
enabled: true,
|
|
71
|
+
}
|
|
72
|
+
: undefined,
|
|
73
|
+
},
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Return a fixed response
|
|
78
|
+
*
|
|
79
|
+
* @see https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html#fixed-response-actions
|
|
80
|
+
*/
|
|
81
|
+
static fixedResponse(statusCode, options = {}) {
|
|
82
|
+
return new ListenerAction({
|
|
83
|
+
type: "fixed-response",
|
|
84
|
+
fixedResponse: {
|
|
85
|
+
statusCode: cdktf_1.Tokenization.stringifyNumber(statusCode),
|
|
86
|
+
contentType: options.contentType ?? "text/plain",
|
|
87
|
+
messageBody: options.messageBody,
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Redirect to a different URI
|
|
93
|
+
*
|
|
94
|
+
* A URI consists of the following components:
|
|
95
|
+
* protocol://hostname:port/path?query. You must modify at least one of the
|
|
96
|
+
* following components to avoid a redirect loop: protocol, hostname, port, or
|
|
97
|
+
* path. Any components that you do not modify retain their original values.
|
|
98
|
+
*
|
|
99
|
+
* You can reuse URI components using the following reserved keywords:
|
|
100
|
+
*
|
|
101
|
+
* - `#{protocol}`
|
|
102
|
+
* - `#{host}`
|
|
103
|
+
* - `#{port}`
|
|
104
|
+
* - `#{path}` (the leading "/" is removed)
|
|
105
|
+
* - `#{query}`
|
|
106
|
+
*
|
|
107
|
+
* For example, you can change the path to "/new/#{path}", the hostname to
|
|
108
|
+
* "example.#{host}", or the query to "#{query}&value=xyz".
|
|
109
|
+
*
|
|
110
|
+
* @see https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html#redirect-actions
|
|
111
|
+
*/
|
|
112
|
+
static redirect(options) {
|
|
113
|
+
if ([
|
|
114
|
+
options.host,
|
|
115
|
+
options.path,
|
|
116
|
+
options.port,
|
|
117
|
+
options.protocol,
|
|
118
|
+
options.query,
|
|
119
|
+
].findIndex((x) => x !== undefined) === -1) {
|
|
120
|
+
throw new Error("To prevent redirect loops, set at least one of 'protocol', 'host', 'port', 'path', or 'query'.");
|
|
121
|
+
}
|
|
122
|
+
if (options.path &&
|
|
123
|
+
!cdktf_1.Token.isUnresolved(options.path) &&
|
|
124
|
+
!options.path.startsWith("/")) {
|
|
125
|
+
throw new Error(`Redirect path must start with a \'/\', got: ${options.path}`);
|
|
126
|
+
}
|
|
127
|
+
return new ListenerAction({
|
|
128
|
+
type: "redirect",
|
|
129
|
+
redirect: {
|
|
130
|
+
statusCode: options.permanent ? "HTTP_301" : "HTTP_302",
|
|
131
|
+
host: options.host,
|
|
132
|
+
path: options.path,
|
|
133
|
+
port: options.port,
|
|
134
|
+
protocol: options.protocol,
|
|
135
|
+
query: options.query,
|
|
136
|
+
},
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Create an instance of ListenerAction
|
|
141
|
+
*
|
|
142
|
+
* The default class should be good enough for most cases and
|
|
143
|
+
* should be created by using one of the static factory functions,
|
|
144
|
+
* but allow overriding to make sure we allow flexibility for the future.
|
|
145
|
+
*/
|
|
146
|
+
constructor(defaultActionJson, next) {
|
|
147
|
+
this.defaultActionJson = defaultActionJson;
|
|
148
|
+
this.next = next;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Render the listener rule actions in this chain
|
|
152
|
+
*/
|
|
153
|
+
renderRuleActions() {
|
|
154
|
+
const actionJson = this._actionJson ??
|
|
155
|
+
this.defaultActionJson;
|
|
156
|
+
return this._renumber([
|
|
157
|
+
actionJson,
|
|
158
|
+
...(this.next?.renderRuleActions() ?? []),
|
|
159
|
+
]);
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Render the listener default actions in this chain
|
|
163
|
+
*/
|
|
164
|
+
renderActions() {
|
|
165
|
+
return this._renumber([
|
|
166
|
+
this.defaultActionJson,
|
|
167
|
+
...(this.next?.renderActions() ?? []),
|
|
168
|
+
]);
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Called when the action is being used in a listener
|
|
172
|
+
*/
|
|
173
|
+
bind(scope, listener, associatingConstruct) {
|
|
174
|
+
this.next?.bind(scope, listener, associatingConstruct);
|
|
175
|
+
}
|
|
176
|
+
_renumber(actions) {
|
|
177
|
+
if (actions.length < 2) {
|
|
178
|
+
return actions;
|
|
179
|
+
}
|
|
180
|
+
return actions.map((action, i) => ({ ...action, order: i + 1 }));
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Renumber the "order" fields in the actions array.
|
|
184
|
+
*
|
|
185
|
+
* We don't number for 0 or 1 elements, but otherwise number them 1...#actions
|
|
186
|
+
* so ELB knows about the right order.
|
|
187
|
+
*
|
|
188
|
+
* Do this in `ListenerAction` instead of in `Listener` so that we give
|
|
189
|
+
* users the opportunity to override by subclassing and overriding `renderActions`.
|
|
190
|
+
*/
|
|
191
|
+
renumber(actions) {
|
|
192
|
+
return this._renumber(actions);
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Sets the Action for the `ListenerRule`.
|
|
196
|
+
* This method is required to set a dedicated Action to a `ListenerRule`
|
|
197
|
+
* when the Action for the `CfnListener` and the Action for the `CfnListenerRule`
|
|
198
|
+
* have different structures. (e.g. `AuthenticateOidcConfig`)
|
|
199
|
+
* @param actionJson Action for `ListenerRule`
|
|
200
|
+
*/
|
|
201
|
+
addRuleAction(actionJson) {
|
|
202
|
+
if (this._actionJson) {
|
|
203
|
+
throw new Error("rule action is already set");
|
|
204
|
+
}
|
|
205
|
+
this._actionJson = actionJson;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
exports.ListenerAction = ListenerAction;
|
|
209
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
210
|
+
ListenerAction[_a] = { fqn: "terraconstructs.aws.compute.ListenerAction", version: "0.0.12" };
|
|
211
|
+
/**
|
|
212
|
+
* What to do with unauthenticated requests
|
|
213
|
+
*/
|
|
214
|
+
var UnauthenticatedAction;
|
|
215
|
+
(function (UnauthenticatedAction) {
|
|
216
|
+
/**
|
|
217
|
+
* Return an HTTP 401 Unauthorized error.
|
|
218
|
+
*/
|
|
219
|
+
UnauthenticatedAction["DENY"] = "deny";
|
|
220
|
+
/**
|
|
221
|
+
* Allow the request to be forwarded to the target.
|
|
222
|
+
*/
|
|
223
|
+
UnauthenticatedAction["ALLOW"] = "allow";
|
|
224
|
+
/**
|
|
225
|
+
* Redirect the request to the IdP authorization endpoint.
|
|
226
|
+
*/
|
|
227
|
+
UnauthenticatedAction["AUTHENTICATE"] = "authenticate";
|
|
228
|
+
})(UnauthenticatedAction || (exports.UnauthenticatedAction = UnauthenticatedAction = {}));
|
|
229
|
+
/**
|
|
230
|
+
* Listener Action that calls "registerListener" on TargetGroups
|
|
231
|
+
*/
|
|
232
|
+
class TargetGroupListenerAction extends ListenerAction {
|
|
233
|
+
constructor(targetGroups, defaultActionJson) {
|
|
234
|
+
super(defaultActionJson);
|
|
235
|
+
this.targetGroups = targetGroups;
|
|
236
|
+
}
|
|
237
|
+
bind(_scope, listener, associatingConstruct) {
|
|
238
|
+
for (const tg of this.targetGroups) {
|
|
239
|
+
tg.registerListener(listener, associatingConstruct);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* A Listener Action to authenticate with OIDC
|
|
245
|
+
*/
|
|
246
|
+
class AuthenticateOidcAction extends ListenerAction {
|
|
247
|
+
constructor(options) {
|
|
248
|
+
const defaultActionConfig = {
|
|
249
|
+
authorizationEndpoint: options.authorizationEndpoint,
|
|
250
|
+
clientId: options.clientId,
|
|
251
|
+
clientSecret: options.clientSecret, //.unsafeUnwrap(), // Safe usage
|
|
252
|
+
issuer: options.issuer,
|
|
253
|
+
tokenEndpoint: options.tokenEndpoint,
|
|
254
|
+
userInfoEndpoint: options.userInfoEndpoint,
|
|
255
|
+
authenticationRequestExtraParams: options.authenticationRequestExtraParams,
|
|
256
|
+
onUnauthenticatedRequest: options.onUnauthenticatedRequest,
|
|
257
|
+
scope: options.scope,
|
|
258
|
+
sessionCookieName: options.sessionCookieName,
|
|
259
|
+
sessionTimeout: options.sessionTimeout?.toSeconds(),
|
|
260
|
+
};
|
|
261
|
+
super({
|
|
262
|
+
type: "authenticate-oidc",
|
|
263
|
+
authenticateOidc: defaultActionConfig,
|
|
264
|
+
}, options.next);
|
|
265
|
+
this.allowHttpsOutbound = options.allowHttpsOutbound ?? true;
|
|
266
|
+
this.addRuleAction({
|
|
267
|
+
type: "authenticate-oidc",
|
|
268
|
+
authenticateOidc: {
|
|
269
|
+
...defaultActionConfig,
|
|
270
|
+
sessionTimeout: options.sessionTimeout?.toSeconds(),
|
|
271
|
+
},
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
bind(scope, listener, associatingConstruct) {
|
|
275
|
+
super.bind(scope, listener, associatingConstruct);
|
|
276
|
+
if (!this.allowHttpsOutbound)
|
|
277
|
+
return;
|
|
278
|
+
listener.connections.allowToAnyIpv4(port_1.Port.tcp(443), "Allow to IdP endpoint");
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24tbGlzdGVuZXItYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2F3cy9jb21wdXRlL2FsYi9hcHBsaWNhdGlvbi1saXN0ZW5lci1hY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFNQSxpQ0FJZTtBQU1mLGtDQUErQjtBQUUvQjs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxNQUFhLGNBQWM7SUFDekI7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FDNUIsT0FBZ0M7UUFFaEMsT0FBTyxJQUFJLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLE9BQU8sQ0FDbkIsWUFBdUMsRUFDdkMsVUFBMEIsRUFBRTtRQUU1QixJQUFJLFlBQVksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDOUIsTUFBTSxJQUFJLEtBQUssQ0FDYiw2REFBNkQsQ0FDOUQsQ0FBQztRQUNKLENBQUM7UUFDRCxJQUFJLFlBQVksQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLE9BQU8sQ0FBQyxrQkFBa0IsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUMxRSwwRUFBMEU7WUFDMUUsT0FBTyxJQUFJLHlCQUF5QixDQUFDLFlBQVksRUFBRTtnQkFDakQsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsY0FBYyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjO2FBQy9DLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxPQUFPLGNBQWMsQ0FBQyxlQUFlLENBQ25DLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQ3hELE9BQU8sQ0FDUixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7O09B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d3MvYXdzLWNkay9ibG9iL3YyLjE3NS4xL3BhY2thZ2VzL2F3cy1jZGstbGliL2F3cy1lbGFzdGljbG9hZGJhbGFuY2luZ3YyL2xpYi9hbGIvYXBwbGljYXRpb24tbGlzdGVuZXItYWN0aW9uLnRzXG5cbmltcG9ydCB7XG4gIGxiTGlzdGVuZXIgYXMgdGZMaXN0ZW5lcixcbiAgbGJMaXN0ZW5lclJ1bGUgYXMgdGZMaXN0ZW5lclJ1bGUsXG59IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItYXdzXCI7XG5pbXBvcnQge1xuICAvL1NlY3JldFZhbHVlLFxuICBUb2tlbixcbiAgVG9rZW5pemF0aW9uLFxufSBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IENvbnN0cnVjdCwgSUNvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBJQXBwbGljYXRpb25MaXN0ZW5lciB9IGZyb20gXCIuL2FwcGxpY2F0aW9uLWxpc3RlbmVyXCI7XG5pbXBvcnQgeyBJQXBwbGljYXRpb25UYXJnZXRHcm91cCB9IGZyb20gXCIuL2FwcGxpY2F0aW9uLXRhcmdldC1ncm91cFwiO1xuaW1wb3J0IHsgRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vZHVyYXRpb25cIjtcbmltcG9ydCB7IElMaXN0ZW5lckFjdGlvbiB9IGZyb20gXCIuLi9sYi1zaGFyZWQvbGlzdGVuZXItYWN0aW9uXCI7XG5pbXBvcnQgeyBQb3J0IH0gZnJvbSBcIi4uL3BvcnRcIjtcblxuLyoqXG4gKiBXaGF0IHRvIGRvIHdoZW4gYSBjbGllbnQgbWFrZXMgYSByZXF1ZXN0IHRvIGEgbGlzdGVuZXJcbiAqXG4gKiBTb21lIGFjdGlvbnMgY2FuIGJlIGNvbWJpbmVkIHdpdGggb3RoZXIgb25lcyAoc3BlY2lmaWNhbGx5LFxuICogeW91IGNhbiBwZXJmb3JtIGF1dGhlbnRpY2F0aW9uIGJlZm9yZSBzZXJ2aW5nIHRoZSByZXF1ZXN0KS5cbiAqXG4gKiBNdWx0aXBsZSBhY3Rpb25zIGZvcm0gYSBsaW5rZWQgY2hhaW47IHRoZSBjaGFpbiBtdXN0IGFsd2F5cyB0ZXJtaW5hdGUgaW4gYVxuICogKih3ZWlnaHRlZClmb3J3YXJkKiwgKmZpeGVkUmVzcG9uc2UqIG9yICpyZWRpcmVjdCogYWN0aW9uLlxuICpcbiAqIElmIGFuIGFjdGlvbiBzdXBwb3J0cyBjaGFpbmluZywgdGhlIG5leHQgYWN0aW9uIGNhbiBiZSBpbmRpY2F0ZWRcbiAqIGJ5IHBhc3NpbmcgaXQgaW4gdGhlIGBuZXh0YCBwcm9wZXJ0eS5cbiAqXG4gKiAoQ2FsbGVkIGBMaXN0ZW5lckFjdGlvbmAgaW5zdGVhZCBvZiB0aGUgbW9yZSBzdHJpY3RseSBjb3JyZWN0XG4gKiBgTGlzdGVuZXJBY3Rpb25gIGJlY2F1c2UgdGhpcyBpcyB0aGUgY2xhc3MgbW9zdCB1c2VycyBpbnRlcmFjdFxuICogd2l0aCwgYW5kIHdlIHdhbnQgdG8gbWFrZSBpdCBub3QgdG9vIHZpc3VhbGx5IG92ZXJ3aGVsbWluZykuXG4gKi9cbmV4cG9ydCBjbGFzcyBMaXN0ZW5lckFjdGlvbiBpbXBsZW1lbnRzIElMaXN0ZW5lckFjdGlvbiB7XG4gIC8qKlxuICAgKiBBdXRoZW50aWNhdGUgdXNpbmcgYW4gaWRlbnRpdHkgcHJvdmlkZXIgKElkUCkgdGhhdCBpcyBjb21wbGlhbnQgd2l0aCBPcGVuSUQgQ29ubmVjdCAoT0lEQylcbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L2FwcGxpY2F0aW9uL2xpc3RlbmVyLWF1dGhlbnRpY2F0ZS11c2Vycy5odG1sI29pZGMtcmVxdWlyZW1lbnRzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGF1dGhlbnRpY2F0ZU9pZGMoXG4gICAgb3B0aW9uczogQXV0aGVudGljYXRlT2lkY09wdGlvbnMsXG4gICk6IExpc3RlbmVyQWN0aW9uIHtcbiAgICByZXR1cm4gbmV3IEF1dGhlbnRpY2F0ZU9pZGNBY3Rpb24ob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogRm9yd2FyZCB0byBvbmUgb3IgbW9yZSBUYXJnZXQgR3JvdXBzXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VsYXN0aWNsb2FkYmFsYW5jaW5nL2xhdGVzdC9hcHBsaWNhdGlvbi9sb2FkLWJhbGFuY2VyLWxpc3RlbmVycy5odG1sI2ZvcndhcmQtYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmb3J3YXJkKFxuICAgIHRhcmdldEdyb3VwczogSUFwcGxpY2F0aW9uVGFyZ2V0R3JvdXBbXSxcbiAgICBvcHRpb25zOiBGb3J3YXJkT3B0aW9ucyA9IHt9LFxuICApOiBMaXN0ZW5lckFjdGlvbiB7XG4gICAgaWYgKHRhcmdldEdyb3Vwcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJOZWVkIGF0IGxlYXN0IG9uZSB0YXJnZXRHcm91cCBpbiBhIExpc3RlbmVyQWN0aW9uLmZvcndhcmQoKVwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHRhcmdldEdyb3Vwcy5sZW5ndGggPT09IDEgJiYgb3B0aW9ucy5zdGlja2luZXNzRHVyYXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gUmVuZGVyIGEgXCJzaW1wbGVcIiBhY3Rpb24gZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggb2xkIHRlbXBsYXRlc1xuICAgICAgcmV0dXJuIG5ldyBUYXJnZXRHcm91cExpc3RlbmVyQWN0aW9uKHRhcmdldEdyb3Vwcywge1xuICAgICAgICB0eXBlOiBcImZvcndhcmRcIixcbiAgICAgICAgdGFyZ2V0R3JvdXBBcm46IHRhcmdldEdyb3Vwc1swXS50YXJnZXRHcm91cEFybixcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBMaXN0ZW5lckFjdGlvbi53ZWlnaHRlZEZvcndhcmQoXG4gICAgICB0YXJnZXRHcm91cHMubWFwKChnKSA9PiAoeyB0YXJnZXRHcm91cDogZywgd2VpZ2h0OiAxIH0pKSxcbiAgICAgIG9wdGlvbnMsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3J3YXJkIHRvIG9uZSBvciBtb3JlIFRhcmdldCBHcm91cHMgd2hpY2ggYXJlIHdlaWdodGVkIGRpZmZlcmVudGx5XG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VsYXN0aWNsb2FkYmFsYW5jaW5nL2xhdGVzdC9hcHBsaWNhdGlvbi9sb2FkLWJhbGFuY2VyLWxpc3RlbmVycy5odG1sI2ZvcndhcmQtYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyB3ZWlnaHRlZEZvcndhcmQoXG4gICAgdGFyZ2V0R3JvdXBzOiBXZWlnaHRlZFRhcmdldEdyb3VwW10sXG4gICAgb3B0aW9uczogRm9yd2FyZE9wdGlvbnMgPSB7fSxcbiAgKTogTGlzdGVuZXJBY3Rpb24ge1xuICAgIGlmICh0YXJnZXRHcm91cHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiTmVlZCBhdCBsZWFzdCBvbmUgdGFyZ2V0R3JvdXAgaW4gYSBMaXN0ZW5lckFjdGlvbi53ZWlnaHRlZEZvcndhcmQoKVwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFRhcmdldEdyb3VwTGlzdGVuZXJBY3Rpb24oXG4gICAgICB0YXJnZXRHcm91cHMubWFwKChnKSA9PiBnLnRhcmdldEdyb3VwKSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJmb3J3YXJkXCIsXG4gICAgICAgIGZvcndhcmQ6IHtcbiAgICAgICAgICB0YXJnZXRHcm91cDogdGFyZ2V0R3JvdXBzLm1hcCgoZykgPT4gKHtcbiAgICAgICAgICAgIGFybjogZy50YXJnZXRHcm91cC50YXJnZXRHcm91cEFybixcbiAgICAgICAgICAgIHdlaWdodDogZy53ZWlnaHQsXG4gICAgICAgICAgfSkpLFxuICAgICAgICAgIHN0aWNraW5lc3M6IG9wdGlvbnMuc3RpY2tpbmVzc0R1cmF0aW9uXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogb3B0aW9ucy5zdGlja2luZXNzRHVyYXRpb24udG9TZWNvbmRzKCksXG4gICAgICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgZml4ZWQgcmVzcG9uc2VcbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L2FwcGxpY2F0aW9uL2xvYWQtYmFsYW5jZXItbGlzdGVuZXJzLmh0bWwjZml4ZWQtcmVzcG9uc2UtYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmaXhlZFJlc3BvbnNlKFxuICAgIHN0YXR1c0NvZGU6IG51bWJlcixcbiAgICBvcHRpb25zOiBGaXhlZFJlc3BvbnNlT3B0aW9ucyA9IHt9LFxuICApOiBMaXN0ZW5lckFjdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBMaXN0ZW5lckFjdGlvbih7XG4gICAgICB0eXBlOiBcImZpeGVkLXJlc3BvbnNlXCIsXG4gICAgICBmaXhlZFJlc3BvbnNlOiB7XG4gICAgICAgIHN0YXR1c0NvZGU6IFRva2VuaXphdGlvbi5zdHJpbmdpZnlOdW1iZXIoc3RhdHVzQ29kZSksXG4gICAgICAgIGNvbnRlbnRUeXBlOiBvcHRpb25zLmNvbnRlbnRUeXBlID8/IFwidGV4dC9wbGFpblwiLFxuICAgICAgICBtZXNzYWdlQm9keTogb3B0aW9ucy5tZXNzYWdlQm9keSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVkaXJlY3QgdG8gYSBkaWZmZXJlbnQgVVJJXG4gICAqXG4gICAqIEEgVVJJIGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czpcbiAgICogcHJvdG9jb2w6Ly9ob3N0bmFtZTpwb3J0L3BhdGg/cXVlcnkuIFlvdSBtdXN0IG1vZGlmeSBhdCBsZWFzdCBvbmUgb2YgdGhlXG4gICAqIGZvbGxvd2luZyBjb21wb25lbnRzIHRvIGF2b2lkIGEgcmVkaXJlY3QgbG9vcDogcHJvdG9jb2wsIGhvc3RuYW1lLCBwb3J0LCBvclxuICAgKiBwYXRoLiBBbnkgY29tcG9uZW50cyB0aGF0IHlvdSBkbyBub3QgbW9kaWZ5IHJldGFpbiB0aGVpciBvcmlnaW5hbCB2YWx1ZXMuXG4gICAqXG4gICAqIFlvdSBjYW4gcmV1c2UgVVJJIGNvbXBvbmVudHMgdXNpbmcgdGhlIGZvbGxvd2luZyByZXNlcnZlZCBrZXl3b3JkczpcbiAgICpcbiAgICogLSBgI3twcm90b2NvbH1gXG4gICAqIC0gYCN7aG9zdH1gXG4gICAqIC0gYCN7cG9ydH1gXG4gICAqIC0gYCN7cGF0aH1gICh0aGUgbGVhZGluZyBcIi9cIiBpcyByZW1vdmVkKVxuICAgKiAtIGAje3F1ZXJ5fWBcbiAgICpcbiAgICogRm9yIGV4YW1wbGUsIHlvdSBjYW4gY2hhbmdlIHRoZSBwYXRoIHRvIFwiL25ldy8je3BhdGh9XCIsIHRoZSBob3N0bmFtZSB0b1xuICAgKiBcImV4YW1wbGUuI3tob3N0fVwiLCBvciB0aGUgcXVlcnkgdG8gXCIje3F1ZXJ5fSZ2YWx1ZT14eXpcIi5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L2FwcGxpY2F0aW9uL2xvYWQtYmFsYW5jZXItbGlzdGVuZXJzLmh0bWwjcmVkaXJlY3QtYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWRpcmVjdChvcHRpb25zOiBSZWRpcmVjdE9wdGlvbnMpOiBMaXN0ZW5lckFjdGlvbiB7XG4gICAgaWYgKFxuICAgICAgW1xuICAgICAgICBvcHRpb25zLmhvc3QsXG4gICAgICAgIG9wdGlvbnMucGF0aCxcbiAgICAgICAgb3B0aW9ucy5wb3J0LFxuICAgICAgICBvcHRpb25zLnByb3RvY29sLFxuICAgICAgICBvcHRpb25zLnF1ZXJ5LFxuICAgICAgXS5maW5kSW5kZXgoKHgpID0+IHggIT09IHVuZGVmaW5lZCkgPT09IC0xXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiVG8gcHJldmVudCByZWRpcmVjdCBsb29wcywgc2V0IGF0IGxlYXN0IG9uZSBvZiAncHJvdG9jb2wnLCAnaG9zdCcsICdwb3J0JywgJ3BhdGgnLCBvciAncXVlcnknLlwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgb3B0aW9ucy5wYXRoICYmXG4gICAgICAhVG9rZW4uaXNVbnJlc29sdmVkKG9wdGlvbnMucGF0aCkgJiZcbiAgICAgICFvcHRpb25zLnBhdGguc3RhcnRzV2l0aChcIi9cIilcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFJlZGlyZWN0IHBhdGggbXVzdCBzdGFydCB3aXRoIGEgXFwnL1xcJywgZ290OiAke29wdGlvbnMucGF0aH1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IExpc3RlbmVyQWN0aW9uKHtcbiAgICAgIHR5cGU6IFwicmVkaXJlY3RcIixcbiAgICAgIHJlZGlyZWN0OiB7XG4gICAgICAgIHN0YXR1c0NvZGU6IG9wdGlvbnMucGVybWFuZW50ID8gXCJIVFRQXzMwMVwiIDogXCJIVFRQXzMwMlwiLFxuICAgICAgICBob3N0OiBvcHRpb25zLmhvc3QsXG4gICAgICAgIHBhdGg6IG9wdGlvbnMucGF0aCxcbiAgICAgICAgcG9ydDogb3B0aW9ucy5wb3J0LFxuICAgICAgICBwcm90b2NvbDogb3B0aW9ucy5wcm90b2NvbCxcbiAgICAgICAgcXVlcnk6IG9wdGlvbnMucXVlcnksXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIHNldCwgaXQgaXMgcHJlZmVycmVkIGFzIEFjdGlvbiBmb3IgdGhlIGBMaXN0ZW5lclJ1bGVgLlxuICAgKiBUaGlzIGlzIG5lY2Vzc2FyeSBpZiBgQ2ZuTGlzdGVuZXIuQWN0aW9uUHJvcGVydHlgIGFuZCBgQ2ZuTGlzdGVuZXJSdWxlLkFjdGlvblByb3BlcnR5YFxuICAgKiBoYXZlIGRpZmZlcmVudCBzdHJ1Y3R1cmVzLlxuICAgKi9cbiAgcHJpdmF0ZSBfYWN0aW9uSnNvbj86IHRmTGlzdGVuZXJSdWxlLkxiTGlzdGVuZXJSdWxlQWN0aW9uO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgTGlzdGVuZXJBY3Rpb25cbiAgICpcbiAgICogVGhlIGRlZmF1bHQgY2xhc3Mgc2hvdWxkIGJlIGdvb2QgZW5vdWdoIGZvciBtb3N0IGNhc2VzIGFuZFxuICAgKiBzaG91bGQgYmUgY3JlYXRlZCBieSB1c2luZyBvbmUgb2YgdGhlIHN0YXRpYyBmYWN0b3J5IGZ1bmN0aW9ucyxcbiAgICogYnV0IGFsbG93IG92ZXJyaWRpbmcgdG8gbWFrZSBzdXJlIHdlIGFsbG93IGZsZXhpYmlsaXR5IGZvciB0aGUgZnV0dXJlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdEFjdGlvbkpzb246IHRmTGlzdGVuZXIuTGJMaXN0ZW5lckRlZmF1bHRBY3Rpb24sXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IG5leHQ/OiBMaXN0ZW5lckFjdGlvbixcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgdGhlIGxpc3RlbmVyIHJ1bGUgYWN0aW9ucyBpbiB0aGlzIGNoYWluXG4gICAqL1xuICBwdWJsaWMgcmVuZGVyUnVsZUFjdGlvbnMoKTogdGZMaXN0ZW5lclJ1bGUuTGJMaXN0ZW5lclJ1bGVBY3Rpb25bXSB7XG4gICAgY29uc3QgYWN0aW9uSnNvbiA9XG4gICAgICB0aGlzLl9hY3Rpb25Kc29uID8/XG4gICAgICAodGhpcy5kZWZhdWx0QWN0aW9uSnNvbiBhcyB0Zkxpc3RlbmVyUnVsZS5MYkxpc3RlbmVyUnVsZUFjdGlvbik7XG4gICAgcmV0dXJuIHRoaXMuX3JlbnVtYmVyKFtcbiAgICAgIGFjdGlvbkpzb24sXG4gICAgICAuLi4odGhpcy5uZXh0Py5yZW5kZXJSdWxlQWN0aW9ucygpID8/IFtdKSxcbiAgICBdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgdGhlIGxpc3RlbmVyIGRlZmF1bHQgYWN0aW9ucyBpbiB0aGlzIGNoYWluXG4gICAqL1xuICBwdWJsaWMgcmVuZGVyQWN0aW9ucygpOiB0Zkxpc3RlbmVyLkxiTGlzdGVuZXJEZWZhdWx0QWN0aW9uW10ge1xuICAgIHJldHVybiB0aGlzLl9yZW51bWJlcihbXG4gICAgICB0aGlzLmRlZmF1bHRBY3Rpb25Kc29uLFxuICAgICAgLi4uKHRoaXMubmV4dD8ucmVuZGVyQWN0aW9ucygpID8/IFtdKSxcbiAgICBdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgYWN0aW9uIGlzIGJlaW5nIHVzZWQgaW4gYSBsaXN0ZW5lclxuICAgKi9cbiAgcHVibGljIGJpbmQoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBsaXN0ZW5lcjogSUFwcGxpY2F0aW9uTGlzdGVuZXIsXG4gICAgYXNzb2NpYXRpbmdDb25zdHJ1Y3Q/OiBJQ29uc3RydWN0LFxuICApIHtcbiAgICB0aGlzLm5leHQ/LmJpbmQoc2NvcGUsIGxpc3RlbmVyLCBhc3NvY2lhdGluZ0NvbnN0cnVjdCk7XG4gIH1cblxuICBwcml2YXRlIF9yZW51bWJlcjxcbiAgICBBY3Rpb25Qcm9wZXJ0eSBleHRlbmRzXG4gICAgICB8IHRmTGlzdGVuZXIuTGJMaXN0ZW5lckRlZmF1bHRBY3Rpb25cbiAgICAgIHwgdGZMaXN0ZW5lclJ1bGUuTGJMaXN0ZW5lclJ1bGVBY3Rpb24gPSB0Zkxpc3RlbmVyLkxiTGlzdGVuZXJEZWZhdWx0QWN0aW9uLFxuICA+KGFjdGlvbnM6IEFjdGlvblByb3BlcnR5W10pOiBBY3Rpb25Qcm9wZXJ0eVtdIHtcbiAgICBpZiAoYWN0aW9ucy5sZW5ndGggPCAyKSB7XG4gICAgICByZXR1cm4gYWN0aW9ucztcbiAgICB9XG5cbiAgICByZXR1cm4gYWN0aW9ucy5tYXAoKGFjdGlvbiwgaSkgPT4gKHsgLi4uYWN0aW9uLCBvcmRlcjogaSArIDEgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbnVtYmVyIHRoZSBcIm9yZGVyXCIgZmllbGRzIGluIHRoZSBhY3Rpb25zIGFycmF5LlxuICAgKlxuICAgKiBXZSBkb24ndCBudW1iZXIgZm9yIDAgb3IgMSBlbGVtZW50cywgYnV0IG90aGVyd2lzZSBudW1iZXIgdGhlbSAxLi4uI2FjdGlvbnNcbiAgICogc28gRUxCIGtub3dzIGFib3V0IHRoZSByaWdodCBvcmRlci5cbiAgICpcbiAgICogRG8gdGhpcyBpbiBgTGlzdGVuZXJBY3Rpb25gIGluc3RlYWQgb2YgaW4gYExpc3RlbmVyYCBzbyB0aGF0IHdlIGdpdmVcbiAgICogdXNlcnMgdGhlIG9wcG9ydHVuaXR5IHRvIG92ZXJyaWRlIGJ5IHN1YmNsYXNzaW5nIGFuZCBvdmVycmlkaW5nIGByZW5kZXJBY3Rpb25zYC5cbiAgICovXG4gIHByb3RlY3RlZCByZW51bWJlcihcbiAgICBhY3Rpb25zOiB0Zkxpc3RlbmVyLkxiTGlzdGVuZXJEZWZhdWx0QWN0aW9uW10sXG4gICk6IHRmTGlzdGVuZXIuTGJMaXN0ZW5lckRlZmF1bHRBY3Rpb25bXSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlbnVtYmVyKGFjdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIEFjdGlvbiBmb3IgdGhlIGBMaXN0ZW5lclJ1bGVgLlxuICAgKiBUaGlzIG1ldGhvZCBpcyByZXF1aXJlZCB0byBzZXQgYSBkZWRpY2F0ZWQgQWN0aW9uIHRvIGEgYExpc3RlbmVyUnVsZWBcbiAgICogd2hlbiB0aGUgQWN0aW9uIGZvciB0aGUgYENmbkxpc3RlbmVyYCBhbmQgdGhlIEFjdGlvbiBmb3IgdGhlIGBDZm5MaXN0ZW5lclJ1bGVgXG4gICAqIGhhdmUgZGlmZmVyZW50IHN0cnVjdHVyZXMuIChlLmcuIGBBdXRoZW50aWNhdGVPaWRjQ29uZmlnYClcbiAgICogQHBhcmFtIGFjdGlvbkpzb24gQWN0aW9uIGZvciBgTGlzdGVuZXJSdWxlYFxuICAgKi9cbiAgcHJvdGVjdGVkIGFkZFJ1bGVBY3Rpb24oYWN0aW9uSnNvbjogdGZMaXN0ZW5lclJ1bGUuTGJMaXN0ZW5lclJ1bGVBY3Rpb24pIHtcbiAgICBpZiAodGhpcy5fYWN0aW9uSnNvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwicnVsZSBhY3Rpb24gaXMgYWxyZWFkeSBzZXRcIik7XG4gICAgfVxuICAgIHRoaXMuX2FjdGlvbkpzb24gPSBhY3Rpb25Kc29uO1xuICB9XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYExpc3RlbmVyQWN0aW9uLmZvcndhcmQoKWBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3J3YXJkT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBGb3IgaG93IGxvbmcgY2xpZW50cyBzaG91bGQgYmUgZGlyZWN0ZWQgdG8gdGhlIHNhbWUgdGFyZ2V0IGdyb3VwXG4gICAqXG4gICAqIFJhbmdlIGJldHdlZW4gMSBzZWNvbmQgYW5kIDcgZGF5cy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBzdGlja2luZXNzXG4gICAqL1xuICByZWFkb25seSBzdGlja2luZXNzRHVyYXRpb24/OiBEdXJhdGlvbjtcbn1cblxuLyoqXG4gKiBBIFRhcmdldCBHcm91cCBhbmQgd2VpZ2h0IGNvbWJpbmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2VpZ2h0ZWRUYXJnZXRHcm91cCB7XG4gIC8qKlxuICAgKiBUaGUgdGFyZ2V0IGdyb3VwXG4gICAqL1xuICByZWFkb25seSB0YXJnZXRHcm91cDogSUFwcGxpY2F0aW9uVGFyZ2V0R3JvdXA7XG5cbiAgLyoqXG4gICAqIFRoZSB0YXJnZXQgZ3JvdXAncyB3ZWlnaHRcbiAgICpcbiAgICogUmFuZ2UgaXMgWzAuLjEwMDApLlxuICAgKlxuICAgKiBAZGVmYXVsdCAxXG4gICAqL1xuICByZWFkb25seSB3ZWlnaHQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYExpc3RlbmVyQWN0aW9uLmZpeGVkUmVzcG9uc2UoKWBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXhlZFJlc3BvbnNlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBDb250ZW50IFR5cGUgb2YgdGhlIHJlc3BvbnNlXG4gICAqXG4gICAqIFZhbGlkIFZhbHVlczogdGV4dC9wbGFpbiB8IHRleHQvY3NzIHwgdGV4dC9odG1sIHwgYXBwbGljYXRpb24vamF2YXNjcmlwdCB8IGFwcGxpY2F0aW9uL2pzb25cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRlbnRUeXBlPzogc3RyaW5nO1xuXG4gIC8vIFRPRE86IEF1dG9tYXRpY2FsbHkgZGV0ZXJtaW5lIGNvbnRlbnQgdHlwZT9cbiAgLy8gKiBAZGVmYXVsdCAtIEF1dG9tYXRpY2FsbHkgZGV0ZXJtaW5lZFxuICAvLyBSZXF1aXJlZCBpbiBlbGJ2MiAtIENyZWF0ZVJ1bGUgLSBBUEkgQ2FsbFxuICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfRml4ZWRSZXNwb25zZUFjdGlvbkNvbmZpZy5odG1sXG4gIC8vIE9wdGlvbmFsIGluIENsb3VkRm9ybWF0aW9uIHJlc291cmNlXG4gIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWVsYXN0aWNsb2FkYmFsYW5jaW5ndjItbGlzdGVuZXItZml4ZWRyZXNwb25zZWNvbmZpZy5odG1sI2Nmbi1lbGFzdGljbG9hZGJhbGFuY2luZ3YyLWxpc3RlbmVyLWZpeGVkcmVzcG9uc2Vjb25maWctY29udGVudHR5cGVcblxuICAvKipcbiAgICogVGhlIHJlc3BvbnNlIGJvZHlcbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBib2R5XG4gICAqL1xuICByZWFkb25seSBtZXNzYWdlQm9keT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBgTGlzdGVuZXJBY3Rpb24ucmVkaXJlY3QoKWBcbiAqXG4gKiBBIFVSSSBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6XG4gKiBwcm90b2NvbDovL2hvc3RuYW1lOnBvcnQvcGF0aD9xdWVyeS4gWW91IG11c3QgbW9kaWZ5IGF0IGxlYXN0IG9uZSBvZiB0aGVcbiAqIGZvbGxvd2luZyBjb21wb25lbnRzIHRvIGF2b2lkIGEgcmVkaXJlY3QgbG9vcDogcHJvdG9jb2wsIGhvc3RuYW1lLCBwb3J0LCBvclxuICogcGF0aC4gQW55IGNvbXBvbmVudHMgdGhhdCB5b3UgZG8gbm90IG1vZGlmeSByZXRhaW4gdGhlaXIgb3JpZ2luYWwgdmFsdWVzLlxuICpcbiAqIFlvdSBjYW4gcmV1c2UgVVJJIGNvbXBvbmVudHMgdXNpbmcgdGhlIGZvbGxvd2luZyByZXNlcnZlZCBrZXl3b3JkczpcbiAqXG4gKiAtIGAje3Byb3RvY29sfWBcbiAqIC0gYCN7aG9zdH1gXG4gKiAtIGAje3BvcnR9YFxuICogLSBgI3twYXRofWAgKHRoZSBsZWFkaW5nIFwiL1wiIGlzIHJlbW92ZWQpXG4gKiAtIGAje3F1ZXJ5fWBcbiAqXG4gKiBGb3IgZXhhbXBsZSwgeW91IGNhbiBjaGFuZ2UgdGhlIHBhdGggdG8gXCIvbmV3LyN7cGF0aH1cIiwgdGhlIGhvc3RuYW1lIHRvXG4gKiBcImV4YW1wbGUuI3tob3N0fVwiLCBvciB0aGUgcXVlcnkgdG8gXCIje3F1ZXJ5fSZ2YWx1ZT14eXpcIi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWRpcmVjdE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGhvc3RuYW1lLlxuICAgKlxuICAgKiBUaGlzIGNvbXBvbmVudCBpcyBub3QgcGVyY2VudC1lbmNvZGVkLiBUaGUgaG9zdG5hbWUgY2FuIGNvbnRhaW4gI3tob3N0fS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBjaGFuZ2VcbiAgICovXG4gIHJlYWRvbmx5IGhvc3Q/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBhYnNvbHV0ZSBwYXRoLCBzdGFydGluZyB3aXRoIHRoZSBsZWFkaW5nIFwiL1wiLlxuICAgKlxuICAgKiBUaGlzIGNvbXBvbmVudCBpcyBub3QgcGVyY2VudC1lbmNvZGVkLiBUaGUgcGF0aCBjYW4gY29udGFpbiAje2hvc3R9LCAje3BhdGh9LCBhbmQgI3twb3J0fS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBjaGFuZ2VcbiAgICovXG4gIHJlYWRvbmx5IHBhdGg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwb3J0LlxuICAgKlxuICAgKiBZb3UgY2FuIHNwZWNpZnkgYSB2YWx1ZSBmcm9tIDEgdG8gNjU1MzUgb3IgI3twb3J0fS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBjaGFuZ2VcbiAgICovXG4gIHJlYWRvbmx5IHBvcnQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwcm90b2NvbC5cbiAgICpcbiAgICogWW91IGNhbiBzcGVjaWZ5IEhUVFAsIEhUVFBTLCBvciAje3Byb3RvY29sfS4gWW91IGNhbiByZWRpcmVjdCBIVFRQIHRvIEhUVFAsIEhUVFAgdG8gSFRUUFMsIGFuZCBIVFRQUyB0byBIVFRQUy4gWW91IGNhbm5vdCByZWRpcmVjdCBIVFRQUyB0byBIVFRQLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGNoYW5nZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvdG9jb2w/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBxdWVyeSBwYXJhbWV0ZXJzLCBVUkwtZW5jb2RlZCB3aGVuIG5lY2Vzc2FyeSwgYnV0IG5vdCBwZXJjZW50LWVuY29kZWQuXG4gICAqXG4gICAqIERvIG5vdCBpbmNsdWRlIHRoZSBsZWFkaW5nIFwiP1wiLCBhcyBpdCBpcyBhdXRvbWF0aWNhbGx5IGFkZGVkLiBZb3UgY2FuIHNwZWNpZnkgYW55IG9mIHRoZSByZXNlcnZlZCBrZXl3b3Jkcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBjaGFuZ2VcbiAgICovXG4gIHJlYWRvbmx5IHF1ZXJ5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSFRUUCByZWRpcmVjdCBjb2RlLlxuICAgKlxuICAgKiBUaGUgcmVkaXJlY3QgaXMgZWl0aGVyIHBlcm1hbmVudCAoSFRUUCAzMDEpIG9yIHRlbXBvcmFyeSAoSFRUUCAzMDIpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcGVybWFuZW50PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBgTGlzdGVuZXJBY3Rpb24uYXV0aGVuY2lhdGVPaWRjKClgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aGVudGljYXRlT2lkY09wdGlvbnMge1xuICAvKipcbiAgICogV2hhdCBhY3Rpb24gdG8gZXhlY3V0ZSBuZXh0XG4gICAqL1xuICByZWFkb25seSBuZXh0OiBMaXN0ZW5lckFjdGlvbjtcblxuICAvKipcbiAgICogVGhlIHF1ZXJ5IHBhcmFtZXRlcnMgKHVwIHRvIDEwKSB0byBpbmNsdWRlIGluIHRoZSByZWRpcmVjdCByZXF1ZXN0IHRvIHRoZSBhdXRob3JpemF0aW9uIGVuZHBvaW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGV4dHJhIHBhcmFtZXRlcnNcbiAgICovXG4gIHJlYWRvbmx5IGF1dGhlbnRpY2F0aW9uUmVxdWVzdEV4dHJhUGFyYW1zPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuICAvKipcbiAgICogVGhlIGF1dGhvcml6YXRpb24gZW5kcG9pbnQgb2YgdGhlIElkUC5cbiAgICpcbiAgICogVGhpcyBtdXN0IGJlIGEgZnVsbCBVUkwsIGluY2x1ZGluZyB0aGUgSFRUUFMgcHJvdG9jb2wsIHRoZSBkb21haW4sIGFuZCB0aGUgcGF0aC5cbiAgICovXG4gIHJlYWRvbmx5IGF1dGhvcml6YXRpb25FbmRwb2ludDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgT0F1dGggMi4wIGNsaWVudCBpZGVudGlmaWVyLlxuICAgKi9cbiAgcmVhZG9ubHkgY2xpZW50SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIE9BdXRoIDIuMCBjbGllbnQgc2VjcmV0LlxuICAgKi9cbiAgcmVhZG9ubHkgY2xpZW50U2VjcmV0OiBzdHJpbmc7IC8vU2VjcmV0VmFsdWU7XG5cbiAgLyoqXG4gICAqIFRoZSBPSURDIGlzc3VlciBpZGVudGlmaWVyIG9mIHRoZSBJZFAuXG4gICAqXG4gICAqIFRoaXMgbXVzdCBiZSBhIGZ1bGwgVVJMLCBpbmNsdWRpbmcgdGhlIEhUVFBTIHByb3RvY29sLCB0aGUgZG9tYWluLCBhbmQgdGhlIHBhdGguXG4gICAqL1xuICByZWFkb25seSBpc3N1ZXI6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGJlaGF2aW9yIGlmIHRoZSB1c2VyIGlzIG5vdCBhdXRoZW50aWNhdGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBVbmF1dGhlbnRpY2F0ZWRBY3Rpb24uQVVUSEVOVElDQVRFXG4gICAqL1xuICByZWFkb25seSBvblVuYXV0aGVudGljYXRlZFJlcXVlc3Q/OiBVbmF1dGhlbnRpY2F0ZWRBY3Rpb247XG5cbiAgLyoqXG4gICAqIFRoZSBzZXQgb2YgdXNlciBjbGFpbXMgdG8gYmUgcmVxdWVzdGVkIGZyb20gdGhlIElkUC5cbiAgICpcbiAgICogVG8gdmVyaWZ5IHdoaWNoIHNjb3BlIHZhbHVlcyB5b3VyIElkUCBzdXBwb3J0cyBhbmQgaG93IHRvIHNlcGFyYXRlIG11bHRpcGxlIHZhbHVlcywgc2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB5b3VyIElkUC5cbiAgICpcbiAgICogQGRlZmF1bHQgXCJvcGVuaWRcIlxuICAgKi9cbiAgcmVhZG9ubHkgc2NvcGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBjb29raWUgdXNlZCB0byBtYWludGFpbiBzZXNzaW9uIGluZm9ybWF0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCBcIkFXU0VMQkF1dGhTZXNzaW9uQ29va2llXCJcbiAgICovXG4gIHJlYWRvbmx5IHNlc3Npb25Db29raWVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBkdXJhdGlvbiBvZiB0aGUgYXV0aGVudGljYXRpb24gc2Vzc2lvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgRHVyYXRpb24uZGF5cyg3KVxuICAgKi9cbiAgcmVhZG9ubHkgc2Vzc2lvblRpbWVvdXQ/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIHRva2VuIGVuZHBvaW50IG9mIHRoZSBJZFAuXG4gICAqXG4gICAqIFRoaXMgbXVzdCBiZSBhIGZ1bGwgVVJMLCBpbmNsdWRpbmcgdGhlIEhUVFBTIHByb3RvY29sLCB0aGUgZG9tYWluLCBhbmQgdGhlIHBhdGguXG4gICAqL1xuICByZWFkb25seSB0b2tlbkVuZHBvaW50OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB1c2VyIGluZm8gZW5kcG9pbnQgb2YgdGhlIElkUC5cbiAgICpcbiAgICogVGhpcyBtdXN0IGJlIGEgZnVsbCBVUkwsIGluY2x1ZGluZyB0aGUgSFRUUFMgcHJvdG9jb2wsIHRoZSBkb21haW4sIGFuZCB0aGUgcGF0aC5cbiAgICovXG4gIHJlYWRvbmx5IHVzZXJJbmZvRW5kcG9pbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogQWxsb3cgSFRUUFMgb3V0Ym91bmQgdHJhZmZpYyB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBJZFAuXG4gICAqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIGZhbHNlIGlmIHRoZSBJUCBhZGRyZXNzIHVzZWQgZm9yIHRoZSBJZFAgZW5kcG9pbnQgaXMgaWRlbnRpZmlhYmxlXG4gICAqIGFuZCB5b3Ugd2FudCB0byBjb250cm9sIG91dGJvdW5kIHRyYWZmaWMuXG4gICAqIFRoZW4gYWxsb3cgSFRUUFMgb3V0Ym91bmQgdHJhZmZpYyB0byB0aGUgSWRQJ3MgSVAgYWRkcmVzcyB1c2luZyB0aGUgbGlzdGVuZXIncyBgY29ubmVjdGlvbnNgIHByb3BlcnR5LlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqIEBzZWUgaHR0cHM6Ly9yZXBvc3QuYXdzL2tub3dsZWRnZS1jZW50ZXIvZWxiLWNvbmZpZ3VyZS1hdXRoZW50aWNhdGlvbi1hbGJcbiAgICovXG4gIHJlYWRvbmx5IGFsbG93SHR0cHNPdXRib3VuZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogV2hhdCB0byBkbyB3aXRoIHVuYXV0aGVudGljYXRlZCByZXF1ZXN0c1xuICovXG5leHBvcnQgZW51bSBVbmF1dGhlbnRpY2F0ZWRBY3Rpb24ge1xuICAvKipcbiAgICogUmV0dXJuIGFuIEhUVFAgNDAxIFVuYXV0aG9yaXplZCBlcnJvci5cbiAgICovXG4gIERFTlkgPSBcImRlbnlcIixcblxuICAvKipcbiAgICogQWxsb3cgdGhlIHJlcXVlc3QgdG8gYmUgZm9yd2FyZGVkIHRvIHRoZSB0YXJnZXQuXG4gICAqL1xuICBBTExPVyA9IFwiYWxsb3dcIixcblxuICAvKipcbiAgICogUmVkaXJlY3QgdGhlIHJlcXVlc3QgdG8gdGhlIElkUCBhdXRob3JpemF0aW9uIGVuZHBvaW50LlxuICAgKi9cbiAgQVVUSEVOVElDQVRFID0gXCJhdXRoZW50aWNhdGVcIixcbn1cblxuLyoqXG4gKiBMaXN0ZW5lciBBY3Rpb24gdGhhdCBjYWxscyBcInJlZ2lzdGVyTGlzdGVuZXJcIiBvbiBUYXJnZXRHcm91cHNcbiAqL1xuY2xhc3MgVGFyZ2V0R3JvdXBMaXN0ZW5lckFjdGlvbiBleHRlbmRzIExpc3RlbmVyQWN0aW9uIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSB0YXJnZXRHcm91cHM6IElBcHBsaWNhdGlvblRhcmdldEdyb3VwW10sXG4gICAgZGVmYXVsdEFjdGlvbkpzb246IHRmTGlzdGVuZXIuTGJMaXN0ZW5lckRlZmF1bHRBY3Rpb24sXG4gICkge1xuICAgIHN1cGVyKGRlZmF1bHRBY3Rpb25Kc29uKTtcbiAgfVxuXG4gIHB1YmxpYyBiaW5kKFxuICAgIF9zY29wZTogQ29uc3RydWN0LFxuICAgIGxpc3RlbmVyOiBJQXBwbGljYXRpb25MaXN0ZW5lcixcbiAgICBhc3NvY2lhdGluZ0NvbnN0cnVjdD86IElDb25zdHJ1Y3QsXG4gICkge1xuICAgIGZvciAoY29uc3QgdGcgb2YgdGhpcy50YXJnZXRHcm91cHMpIHtcbiAgICAgIHRnLnJlZ2lzdGVyTGlzdGVuZXIobGlzdGVuZXIsIGFzc29jaWF0aW5nQ29uc3RydWN0KTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBIExpc3RlbmVyIEFjdGlvbiB0byBhdXRoZW50aWNhdGUgd2l0aCBPSURDXG4gKi9cbmNsYXNzIEF1dGhlbnRpY2F0ZU9pZGNBY3Rpb24gZXh0ZW5kcyBMaXN0ZW5lckFjdGlvbiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYWxsb3dIdHRwc091dGJvdW5kOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEF1dGhlbnRpY2F0ZU9pZGNPcHRpb25zKSB7XG4gICAgY29uc3QgZGVmYXVsdEFjdGlvbkNvbmZpZzogdGZMaXN0ZW5lci5MYkxpc3RlbmVyRGVmYXVsdEFjdGlvbkF1dGhlbnRpY2F0ZU9pZGMgPVxuICAgICAge1xuICAgICAgICBhdXRob3JpemF0aW9uRW5kcG9pbnQ6IG9wdGlvbnMuYXV0aG9yaXphdGlvbkVuZHBvaW50LFxuICAgICAgICBjbGllbnRJZDogb3B0aW9ucy5jbGllbnRJZCxcbiAgICAgICAgY2xpZW50U2VjcmV0OiBvcHRpb25zLmNsaWVudFNlY3JldCwgLy8udW5zYWZlVW53cmFwKCksIC8vIFNhZmUgdXNhZ2VcbiAgICAgICAgaXNzdWVyOiBvcHRpb25zLmlzc3VlcixcbiAgICAgICAgdG9rZW5FbmRwb2ludDogb3B0aW9ucy50b2tlbkVuZHBvaW50LFxuICAgICAgICB1c2VySW5mb0VuZHBvaW50OiBvcHRpb25zLnVzZXJJbmZvRW5kcG9pbnQsXG4gICAgICAgIGF1dGhlbnRpY2F0aW9uUmVxdWVzdEV4dHJhUGFyYW1zOlxuICAgICAgICAgIG9wdGlvbnMuYXV0aGVudGljYXRpb25SZXF1ZXN0RXh0cmFQYXJhbXMsXG4gICAgICAgIG9uVW5hdXRoZW50aWNhdGVkUmVxdWVzdDogb3B0aW9ucy5vblVuYXV0aGVudGljYXRlZFJlcXVlc3QsXG4gICAgICAgIHNjb3BlOiBvcHRpb25zLnNjb3BlLFxuICAgICAgICBzZXNzaW9uQ29va2llTmFtZTogb3B0aW9ucy5zZXNzaW9uQ29va2llTmFtZSxcbiAgICAgICAgc2Vzc2lvblRpbWVvdXQ6IG9wdGlvbnMuc2Vzc2lvblRpbWVvdXQ/LnRvU2Vjb25kcygpLFxuICAgICAgfTtcbiAgICBzdXBlcihcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJhdXRoZW50aWNhdGUtb2lkY1wiLFxuICAgICAgICBhdXRoZW50aWNhdGVPaWRjOiBkZWZhdWx0QWN0aW9uQ29uZmlnLFxuICAgICAgfSxcbiAgICAgIG9wdGlvbnMubmV4dCxcbiAgICApO1xuXG4gICAgdGhpcy5hbGxvd0h0dHBzT3V0Ym91bmQgPSBvcHRpb25zLmFsbG93SHR0cHNPdXRib3VuZCA/PyB0cnVlO1xuICAgIHRoaXMuYWRkUnVsZUFjdGlvbih7XG4gICAgICB0eXBlOiBcImF1dGhlbnRpY2F0ZS1vaWRjXCIsXG4gICAgICBhdXRoZW50aWNhdGVPaWRjOiB7XG4gICAgICAgIC4uLmRlZmF1bHRBY3Rpb25Db25maWcsXG4gICAgICAgIHNlc3Npb25UaW1lb3V0OiBvcHRpb25zLnNlc3Npb25UaW1lb3V0Py50b1NlY29uZHMoKSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbiAgcHVibGljIGJpbmQoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBsaXN0ZW5lcjogSUFwcGxpY2F0aW9uTGlzdGVuZXIsXG4gICAgYXNzb2NpYXRpbmdDb25zdHJ1Y3Q/OiBJQ29uc3RydWN0IHwgdW5kZWZpbmVkLFxuICApOiB2b2lkIHtcbiAgICBzdXBlci5iaW5kKHNjb3BlLCBsaXN0ZW5lciwgYXNzb2NpYXRpbmdDb25zdHJ1Y3QpO1xuXG4gICAgaWYgKCF0aGlzLmFsbG93SHR0cHNPdXRib3VuZCkgcmV0dXJuO1xuICAgIGxpc3RlbmVyLmNvbm5lY3Rpb25zLmFsbG93VG9BbnlJcHY0KFBvcnQudGNwKDQ0MyksIFwiQWxsb3cgdG8gSWRQIGVuZHBvaW50XCIpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Construct } from "constructs";
|
|
2
|
+
import { IApplicationListener } from "./application-listener";
|
|
3
|
+
import { IListenerCertificate } from "../lb-shared/listener-certificate";
|
|
4
|
+
/**
|
|
5
|
+
* Properties for adding a set of certificates to a listener
|
|
6
|
+
*/
|
|
7
|
+
export interface ApplicationListenerCertificateProps {
|
|
8
|
+
/**
|
|
9
|
+
* The listener to attach the rule to
|
|
10
|
+
*/
|
|
11
|
+
readonly listener: IApplicationListener;
|
|
12
|
+
/**
|
|
13
|
+
* ARNs of certificates to attach
|
|
14
|
+
*
|
|
15
|
+
* Duplicates are not allowed.
|
|
16
|
+
*
|
|
17
|
+
* @deprecated Use `certificates` instead.
|
|
18
|
+
* @default - One of 'certificates' and 'certificateArns' is required.
|
|
19
|
+
*/
|
|
20
|
+
readonly certificateArns?: string[];
|
|
21
|
+
/**
|
|
22
|
+
* Certificates to attach
|
|
23
|
+
*
|
|
24
|
+
* Duplicates are not allowed.
|
|
25
|
+
*
|
|
26
|
+
* @default - One of 'certificates' and 'certificateArns' is required.
|
|
27
|
+
*/
|
|
28
|
+
readonly certificates?: IListenerCertificate[];
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Add certificates to a listener
|
|
32
|
+
*/
|
|
33
|
+
export declare class ApplicationListenerCertificate extends Construct {
|
|
34
|
+
constructor(scope: Construct, id: string, props: ApplicationListenerCertificateProps);
|
|
35
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.ApplicationListenerCertificate = 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-elasticloadbalancingv2/lib/alb/application-listener-certificate.ts
|
|
7
|
+
const provider_aws_1 = require("@cdktf/provider-aws");
|
|
8
|
+
const constructs_1 = require("constructs");
|
|
9
|
+
/**
|
|
10
|
+
* Add certificates to a listener
|
|
11
|
+
*/
|
|
12
|
+
class ApplicationListenerCertificate extends constructs_1.Construct {
|
|
13
|
+
constructor(scope, id, props) {
|
|
14
|
+
super(scope, id);
|
|
15
|
+
if (!props.certificateArns && !props.certificates) {
|
|
16
|
+
throw new Error("At least one of 'certificateArns' or 'certificates' is required");
|
|
17
|
+
}
|
|
18
|
+
const certificates = [
|
|
19
|
+
...(props.certificates || []).map((c) => ({
|
|
20
|
+
certificateArn: c.certificateArn,
|
|
21
|
+
})),
|
|
22
|
+
...(props.certificateArns || []).map((certificateArn) => ({
|
|
23
|
+
certificateArn,
|
|
24
|
+
})),
|
|
25
|
+
];
|
|
26
|
+
new provider_aws_1.lbListenerCertificate.LbListenerCertificate(this, "Resource", {
|
|
27
|
+
listenerArn: props.listener.listenerArn,
|
|
28
|
+
certificateArn: certificates[0].certificateArn,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
exports.ApplicationListenerCertificate = ApplicationListenerCertificate;
|
|
33
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
34
|
+
ApplicationListenerCertificate[_a] = { fqn: "terraconstructs.aws.compute.ApplicationListenerCertificate", version: "0.0.12" };
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24tbGlzdGVuZXItY2VydGlmaWNhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXdzL2NvbXB1dGUvYWxiL2FwcGxpY2F0aW9uLWxpc3RlbmVyLWNlcnRpZmljYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsMklBQTJJO0FBRTNJLHNEQUFxRjtBQUNyRiwyQ0FBdUM7QUFpQ3ZDOztHQUVHO0FBQ0gsTUFBYSw4QkFBK0IsU0FBUSxzQkFBUztJQUMzRCxZQUNFLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixLQUEwQztRQUUxQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ2xELE1BQU0sSUFBSSxLQUFLLENBQ2IsaUVBQWlFLENBQ2xFLENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxZQUFZLEdBQUc7WUFDbkIsR0FBRyxDQUFDLEtBQUssQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN4QyxjQUFjLEVBQUUsQ0FBQyxDQUFDLGNBQWM7YUFDakMsQ0FBQyxDQUFDO1lBQ0gsR0FBRyxDQUFDLEtBQUssQ0FBQyxlQUFlLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN4RCxjQUFjO2FBQ2YsQ0FBQyxDQUFDO1NBQ0osQ0FBQztRQUVGLElBQUksb0NBQXFCLENBQUMscUJBQXFCLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRTtZQUNoRSxXQUFXLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXO1lBQ3ZDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYztTQUMvQyxDQUFDLENBQUM7SUFDTCxDQUFDOztBQTNCSCx3RUE0QkMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi92Mi4xNzUuMS9wYWNrYWdlcy9hd3MtY2RrLWxpYi9hd3MtZWxhc3RpY2xvYWRiYWxhbmNpbmd2Mi9saWIvYWxiL2FwcGxpY2F0aW9uLWxpc3RlbmVyLWNlcnRpZmljYXRlLnRzXG5cbmltcG9ydCB7IGxiTGlzdGVuZXJDZXJ0aWZpY2F0ZSBhcyB0Zkxpc3RlbmVyQ2VydGlmaWNhdGUgfSBmcm9tIFwiQGNka3RmL3Byb3ZpZGVyLWF3c1wiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IElBcHBsaWNhdGlvbkxpc3RlbmVyIH0gZnJvbSBcIi4vYXBwbGljYXRpb24tbGlzdGVuZXJcIjtcbmltcG9ydCB7IElMaXN0ZW5lckNlcnRpZmljYXRlIH0gZnJvbSBcIi4uL2xiLXNoYXJlZC9saXN0ZW5lci1jZXJ0aWZpY2F0ZVwiO1xuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGFkZGluZyBhIHNldCBvZiBjZXJ0aWZpY2F0ZXMgdG8gYSBsaXN0ZW5lclxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxpY2F0aW9uTGlzdGVuZXJDZXJ0aWZpY2F0ZVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBsaXN0ZW5lciB0byBhdHRhY2ggdGhlIHJ1bGUgdG9cbiAgICovXG4gIHJlYWRvbmx5IGxpc3RlbmVyOiBJQXBwbGljYXRpb25MaXN0ZW5lcjtcblxuICAvKipcbiAgICogQVJOcyBvZiBjZXJ0aWZpY2F0ZXMgdG8gYXR0YWNoXG4gICAqXG4gICAqIER1cGxpY2F0ZXMgYXJlIG5vdCBhbGxvd2VkLlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYGNlcnRpZmljYXRlc2AgaW5zdGVhZC5cbiAgICogQGRlZmF1bHQgLSBPbmUgb2YgJ2NlcnRpZmljYXRlcycgYW5kICdjZXJ0aWZpY2F0ZUFybnMnIGlzIHJlcXVpcmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgY2VydGlmaWNhdGVBcm5zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIENlcnRpZmljYXRlcyB0byBhdHRhY2hcbiAgICpcbiAgICogRHVwbGljYXRlcyBhcmUgbm90IGFsbG93ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gT25lIG9mICdjZXJ0aWZpY2F0ZXMnIGFuZCAnY2VydGlmaWNhdGVBcm5zJyBpcyByZXF1aXJlZC5cbiAgICovXG4gIHJlYWRvbmx5IGNlcnRpZmljYXRlcz86IElMaXN0ZW5lckNlcnRpZmljYXRlW107XG59XG5cbi8qKlxuICogQWRkIGNlcnRpZmljYXRlcyB0byBhIGxpc3RlbmVyXG4gKi9cbmV4cG9ydCBjbGFzcyBBcHBsaWNhdGlvbkxpc3RlbmVyQ2VydGlmaWNhdGUgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IEFwcGxpY2F0aW9uTGlzdGVuZXJDZXJ0aWZpY2F0ZVByb3BzLFxuICApIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgaWYgKCFwcm9wcy5jZXJ0aWZpY2F0ZUFybnMgJiYgIXByb3BzLmNlcnRpZmljYXRlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkF0IGxlYXN0IG9uZSBvZiAnY2VydGlmaWNhdGVBcm5zJyBvciAnY2VydGlmaWNhdGVzJyBpcyByZXF1aXJlZFwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBjZXJ0aWZpY2F0ZXMgPSBbXG4gICAgICAuLi4ocHJvcHMuY2VydGlmaWNhdGVzIHx8IFtdKS5tYXAoKGMpID0+ICh7XG4gICAgICAgIGNlcnRpZmljYXRlQXJuOiBjLmNlcnRpZmljYXRlQXJuLFxuICAgICAgfSkpLFxuICAgICAgLi4uKHByb3BzLmNlcnRpZmljYXRlQXJucyB8fCBbXSkubWFwKChjZXJ0aWZpY2F0ZUFybikgPT4gKHtcbiAgICAgICAgY2VydGlmaWNhdGVBcm4sXG4gICAgICB9KSksXG4gICAgXTtcblxuICAgIG5ldyB0Zkxpc3RlbmVyQ2VydGlmaWNhdGUuTGJMaXN0ZW5lckNlcnRpZmljYXRlKHRoaXMsIFwiUmVzb3VyY2VcIiwge1xuICAgICAgbGlzdGVuZXJBcm46IHByb3BzLmxpc3RlbmVyLmxpc3RlbmVyQXJuLFxuICAgICAgY2VydGlmaWNhdGVBcm46IGNlcnRpZmljYXRlc1swXS5jZXJ0aWZpY2F0ZUFybixcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
import { Construct } from "constructs";
|
|
2
|
+
import { IApplicationListener } from "./application-listener";
|
|
3
|
+
import { ListenerAction } from "./application-listener-action";
|
|
4
|
+
import { IApplicationTargetGroup } from "./application-target-group";
|
|
5
|
+
import { ListenerCondition } from "./conditions";
|
|
6
|
+
/**
|
|
7
|
+
* Basic properties for defining a rule on a listener
|
|
8
|
+
*/
|
|
9
|
+
export interface BaseApplicationListenerRuleProps {
|
|
10
|
+
/**
|
|
11
|
+
* Priority of the rule
|
|
12
|
+
*
|
|
13
|
+
* The rule with the lowest priority will be used for every request.
|
|
14
|
+
*
|
|
15
|
+
* Priorities must be unique.
|
|
16
|
+
*/
|
|
17
|
+
readonly priority: number;
|
|
18
|
+
/**
|
|
19
|
+
* Target groups to forward requests to.
|
|
20
|
+
*
|
|
21
|
+
* Only one of `action`, `fixedResponse`, `redirectResponse` or `targetGroups` can be specified.
|
|
22
|
+
*
|
|
23
|
+
* Implies a `forward` action.
|
|
24
|
+
*
|
|
25
|
+
* @default - No target groups.
|
|
26
|
+
*/
|
|
27
|
+
readonly targetGroups?: IApplicationTargetGroup[];
|
|
28
|
+
/**
|
|
29
|
+
* Action to perform when requests are received
|
|
30
|
+
*
|
|
31
|
+
* Only one of `action`, `fixedResponse`, `redirectResponse` or `targetGroups` can be specified.
|
|
32
|
+
*
|
|
33
|
+
* @default - No action
|
|
34
|
+
*/
|
|
35
|
+
readonly action?: ListenerAction;
|
|
36
|
+
/**
|
|
37
|
+
* Fixed response to return.
|
|
38
|
+
*
|
|
39
|
+
* Only one of `action`, `fixedResponse`, `redirectResponse` or `targetGroups` can be specified.
|
|
40
|
+
*
|
|
41
|
+
* @default - No fixed response.
|
|
42
|
+
* @deprecated Use `action` instead.
|
|
43
|
+
*/
|
|
44
|
+
readonly fixedResponse?: FixedResponse;
|
|
45
|
+
/**
|
|
46
|
+
* Redirect response to return.
|
|
47
|
+
*
|
|
48
|
+
* Only one of `action`, `fixedResponse`, `redirectResponse` or `targetGroups` can be specified.
|
|
49
|
+
*
|
|
50
|
+
* @default - No redirect response.
|
|
51
|
+
* @deprecated Use `action` instead.
|
|
52
|
+
*/
|
|
53
|
+
readonly redirectResponse?: RedirectResponse;
|
|
54
|
+
/**
|
|
55
|
+
* Rule applies if matches the conditions.
|
|
56
|
+
*
|
|
57
|
+
* @see https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html
|
|
58
|
+
*
|
|
59
|
+
* @default - No conditions.
|
|
60
|
+
*/
|
|
61
|
+
readonly conditions?: ListenerCondition[];
|
|
62
|
+
/**
|
|
63
|
+
* Rule applies if the requested host matches the indicated host
|
|
64
|
+
*
|
|
65
|
+
* May contain up to three '*' wildcards.
|
|
66
|
+
*
|
|
67
|
+
* @see https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html#host-conditions
|
|
68
|
+
*
|
|
69
|
+
* @default - No host condition.
|
|
70
|
+
* @deprecated Use `conditions` instead.
|
|
71
|
+
*/
|
|
72
|
+
readonly hostHeader?: string;
|
|
73
|
+
/**
|
|
74
|
+
* Rule applies if the requested path matches the given path pattern
|
|
75
|
+
*
|
|
76
|
+
* @see https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html#path-conditions
|
|
77
|
+
* @default - No path condition.
|
|
78
|
+
* @deprecated Use `conditions` instead.
|
|
79
|
+
*/
|
|
80
|
+
readonly pathPattern?: string;
|
|
81
|
+
/**
|
|
82
|
+
* Rule applies if the requested path matches any of the given patterns.
|
|
83
|
+
*
|
|
84
|
+
* Paths may contain up to three '*' wildcards.
|
|
85
|
+
*
|
|
86
|
+
* @see https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html#path-conditions
|
|
87
|
+
* @default - No path conditions.
|
|
88
|
+
* @deprecated Use `conditions` instead.
|
|
89
|
+
*/
|
|
90
|
+
readonly pathPatterns?: string[];
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Properties for defining a listener rule
|
|
94
|
+
*/
|
|
95
|
+
export interface ApplicationListenerRuleProps extends BaseApplicationListenerRuleProps {
|
|
96
|
+
/**
|
|
97
|
+
* The listener to attach the rule to
|
|
98
|
+
*/
|
|
99
|
+
readonly listener: IApplicationListener;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* The content type for a fixed response
|
|
103
|
+
* @deprecated superseded by `FixedResponseOptions`.
|
|
104
|
+
*/
|
|
105
|
+
export declare enum ContentType {
|
|
106
|
+
TEXT_PLAIN = "text/plain",
|
|
107
|
+
TEXT_CSS = "text/css",
|
|
108
|
+
TEXT_HTML = "text/html",
|
|
109
|
+
APPLICATION_JAVASCRIPT = "application/javascript",
|
|
110
|
+
APPLICATION_JSON = "application/json"
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* A fixed response
|
|
114
|
+
* @deprecated superseded by `ListenerAction.fixedResponse()`.
|
|
115
|
+
*/
|
|
116
|
+
export interface FixedResponse {
|
|
117
|
+
/**
|
|
118
|
+
* The HTTP response code (2XX, 4XX or 5XX)
|
|
119
|
+
*/
|
|
120
|
+
readonly statusCode: string;
|
|
121
|
+
/**
|
|
122
|
+
* The content type
|
|
123
|
+
*
|
|
124
|
+
* @default text/plain
|
|
125
|
+
*/
|
|
126
|
+
readonly contentType?: ContentType;
|
|
127
|
+
/**
|
|
128
|
+
* The message
|
|
129
|
+
*
|
|
130
|
+
* @default no message
|
|
131
|
+
*/
|
|
132
|
+
readonly messageBody?: string;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* A redirect response
|
|
136
|
+
* @deprecated superseded by `ListenerAction.redirect()`.
|
|
137
|
+
*/
|
|
138
|
+
export interface RedirectResponse {
|
|
139
|
+
/**
|
|
140
|
+
* The hostname. This component is not percent-encoded. The hostname can contain #{host}.
|
|
141
|
+
*
|
|
142
|
+
* @default origin host of request
|
|
143
|
+
*/
|
|
144
|
+
readonly host?: string;
|
|
145
|
+
/**
|
|
146
|
+
* The absolute path, starting with the leading "/". This component is not percent-encoded.
|
|
147
|
+
* The path can contain #{host}, #{path}, and #{port}.
|
|
148
|
+
*
|
|
149
|
+
* @default origin path of request
|
|
150
|
+
*/
|
|
151
|
+
readonly path?: string;
|
|
152
|
+
/**
|
|
153
|
+
* The port. You can specify a value from 1 to 65535 or #{port}.
|
|
154
|
+
*
|
|
155
|
+
* @default origin port of request
|
|
156
|
+
*/
|
|
157
|
+
readonly port?: string;
|
|
158
|
+
/**
|
|
159
|
+
* The protocol. You can specify HTTP, HTTPS, or #{protocol}. You can redirect HTTP to HTTP,
|
|
160
|
+
* HTTP to HTTPS, and HTTPS to HTTPS. You cannot redirect HTTPS to HTTP.
|
|
161
|
+
*
|
|
162
|
+
* @default origin protocol of request
|
|
163
|
+
*/
|
|
164
|
+
readonly protocol?: string;
|
|
165
|
+
/**
|
|
166
|
+
* The query parameters, URL-encoded when necessary, but not percent-encoded.
|
|
167
|
+
* Do not include the leading "?", as it is automatically added.
|
|
168
|
+
* You can specify any of the reserved keywords.
|
|
169
|
+
*
|
|
170
|
+
* @default origin query string of request
|
|
171
|
+
*/
|
|
172
|
+
readonly query?: string;
|
|
173
|
+
/**
|
|
174
|
+
* The HTTP redirect code (HTTP_301 or HTTP_302)
|
|
175
|
+
*/
|
|
176
|
+
readonly statusCode: string;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Define a new listener rule
|
|
180
|
+
*/
|
|
181
|
+
export declare class ApplicationListenerRule extends Construct {
|
|
182
|
+
/**
|
|
183
|
+
* The ARN of this rule
|
|
184
|
+
*/
|
|
185
|
+
readonly listenerRuleArn: string;
|
|
186
|
+
private readonly conditions;
|
|
187
|
+
private readonly legacyConditions;
|
|
188
|
+
private readonly listener;
|
|
189
|
+
private action?;
|
|
190
|
+
constructor(scope: Construct, id: string, props: ApplicationListenerRuleProps);
|
|
191
|
+
/**
|
|
192
|
+
* Add a non-standard condition to this rule
|
|
193
|
+
*
|
|
194
|
+
* If the condition conflicts with an already set condition, it will be overwritten by the one you specified.
|
|
195
|
+
*
|
|
196
|
+
* @deprecated use `addCondition` instead.
|
|
197
|
+
*/
|
|
198
|
+
setCondition(field: string, values: string[] | undefined): void;
|
|
199
|
+
/**
|
|
200
|
+
* Add a non-standard condition to this rule
|
|
201
|
+
*/
|
|
202
|
+
addCondition(condition: ListenerCondition): void;
|
|
203
|
+
/**
|
|
204
|
+
* Configure the action to perform for this rule
|
|
205
|
+
*/
|
|
206
|
+
configureAction(action: ListenerAction): void;
|
|
207
|
+
/**
|
|
208
|
+
* Add a TargetGroup to load balance to
|
|
209
|
+
*
|
|
210
|
+
* @deprecated Use configureAction instead
|
|
211
|
+
*/
|
|
212
|
+
addTargetGroup(targetGroup: IApplicationTargetGroup): void;
|
|
213
|
+
/**
|
|
214
|
+
* Add a fixed response
|
|
215
|
+
*
|
|
216
|
+
* @deprecated Use configureAction instead
|
|
217
|
+
*/
|
|
218
|
+
addFixedResponse(fixedResponse: FixedResponse): void;
|
|
219
|
+
/**
|
|
220
|
+
* Add a redirect response
|
|
221
|
+
*
|
|
222
|
+
* @deprecated Use configureAction instead
|
|
223
|
+
*/
|
|
224
|
+
addRedirectResponse(redirectResponse: RedirectResponse): void;
|
|
225
|
+
/**
|
|
226
|
+
* Validate the rule
|
|
227
|
+
*/
|
|
228
|
+
private validateListenerRule;
|
|
229
|
+
/**
|
|
230
|
+
* Render the conditions for this rule
|
|
231
|
+
*/
|
|
232
|
+
private renderConditions;
|
|
233
|
+
}
|