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,427 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.ApplicationTargetGroup = 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-target-group.ts
|
|
7
|
+
const cdktf_1 = require("cdktf");
|
|
8
|
+
const cloudwatch = require("../../cloudwatch");
|
|
9
|
+
const elasticloadbalancingv2_canned_metrics_generated_1 = require("../elasticloadbalancingv2-canned-metrics.generated");
|
|
10
|
+
const base_target_group_1 = require("../lb-shared/base-target-group");
|
|
11
|
+
const enums_1 = require("../lb-shared/enums");
|
|
12
|
+
const imported_1 = require("../lb-shared/imported");
|
|
13
|
+
const util_1 = require("../lb-shared/util");
|
|
14
|
+
const port_1 = require("../port");
|
|
15
|
+
/**
|
|
16
|
+
* The metrics for a Application Load Balancer.
|
|
17
|
+
*/
|
|
18
|
+
class ApplicationTargetGroupMetrics {
|
|
19
|
+
constructor(scope, targetGroupFullName, loadBalancerFullName) {
|
|
20
|
+
this.scope = scope;
|
|
21
|
+
this.targetGroupFullName = targetGroupFullName;
|
|
22
|
+
this.loadBalancerFullName = loadBalancerFullName;
|
|
23
|
+
}
|
|
24
|
+
custom(metricName, props) {
|
|
25
|
+
return new cloudwatch.Metric({
|
|
26
|
+
namespace: "AWS/ApplicationELB",
|
|
27
|
+
metricName,
|
|
28
|
+
dimensionsMap: {
|
|
29
|
+
TargetGroup: this.targetGroupFullName,
|
|
30
|
+
LoadBalancer: this.loadBalancerFullName,
|
|
31
|
+
},
|
|
32
|
+
...props,
|
|
33
|
+
}).attachTo(this.scope);
|
|
34
|
+
}
|
|
35
|
+
ipv6RequestCount(props) {
|
|
36
|
+
return this.cannedMetric(elasticloadbalancingv2_canned_metrics_generated_1.ApplicationELBMetrics.iPv6RequestCountSum, props);
|
|
37
|
+
}
|
|
38
|
+
requestCount(props) {
|
|
39
|
+
return this.cannedMetric(elasticloadbalancingv2_canned_metrics_generated_1.ApplicationELBMetrics.requestCountSum, props);
|
|
40
|
+
}
|
|
41
|
+
healthyHostCount(props) {
|
|
42
|
+
return this.custom("HealthyHostCount", {
|
|
43
|
+
statistic: "Average",
|
|
44
|
+
...props,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
unhealthyHostCount(props) {
|
|
48
|
+
return this.custom("UnHealthyHostCount", {
|
|
49
|
+
statistic: "Average",
|
|
50
|
+
...props,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
httpCodeTarget(code, props) {
|
|
54
|
+
return this.custom(code, {
|
|
55
|
+
statistic: "Sum",
|
|
56
|
+
...props,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
requestCountPerTarget(props) {
|
|
60
|
+
return this.custom("RequestCountPerTarget", {
|
|
61
|
+
statistic: "Sum",
|
|
62
|
+
...props,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
targetConnectionErrorCount(props) {
|
|
66
|
+
return this.custom("TargetConnectionErrorCount", {
|
|
67
|
+
statistic: "Sum",
|
|
68
|
+
...props,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
targetResponseTime(props) {
|
|
72
|
+
return this.custom("TargetResponseTime", {
|
|
73
|
+
statistic: "Average",
|
|
74
|
+
...props,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
targetTLSNegotiationErrorCount(props) {
|
|
78
|
+
return this.custom("TargetTLSNegotiationErrorCount", {
|
|
79
|
+
statistic: "Sum",
|
|
80
|
+
...props,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
cannedMetric(fn, props) {
|
|
84
|
+
return new cloudwatch.Metric({
|
|
85
|
+
...fn({
|
|
86
|
+
LoadBalancer: this.loadBalancerFullName,
|
|
87
|
+
TargetGroup: this.targetGroupFullName,
|
|
88
|
+
}),
|
|
89
|
+
...props,
|
|
90
|
+
}).attachTo(this.scope);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Define an Application Target Group
|
|
95
|
+
*/
|
|
96
|
+
class ApplicationTargetGroup extends base_target_group_1.TargetGroupBase {
|
|
97
|
+
/**
|
|
98
|
+
* Import an existing target group
|
|
99
|
+
*/
|
|
100
|
+
static fromTargetGroupAttributes(scope, id, attrs) {
|
|
101
|
+
return new ImportedApplicationTargetGroup(scope, id, attrs);
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Import an existing target group
|
|
105
|
+
*
|
|
106
|
+
* @deprecated Use `fromTargetGroupAttributes` instead
|
|
107
|
+
*/
|
|
108
|
+
static import(scope, id, props) {
|
|
109
|
+
return ApplicationTargetGroup.fromTargetGroupAttributes(scope, id, props);
|
|
110
|
+
}
|
|
111
|
+
constructor(scope, id, props = {}) {
|
|
112
|
+
const [protocol, port] = (0, util_1.determineProtocolAndPort)(props.protocol, props.port);
|
|
113
|
+
const { protocolVersion } = props;
|
|
114
|
+
super(scope, id, { ...props }, {
|
|
115
|
+
protocol,
|
|
116
|
+
protocolVersion,
|
|
117
|
+
port,
|
|
118
|
+
});
|
|
119
|
+
this.protocol = protocol;
|
|
120
|
+
this.port = port;
|
|
121
|
+
// this.targetType is lazy
|
|
122
|
+
this.node.addValidation({
|
|
123
|
+
validate: () => {
|
|
124
|
+
if (this.targetType === enums_1.TargetType.LAMBDA &&
|
|
125
|
+
(this.port || this.protocol)) {
|
|
126
|
+
return ["port/protocol should not be specified for Lambda targets"];
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
return [];
|
|
130
|
+
}
|
|
131
|
+
},
|
|
132
|
+
});
|
|
133
|
+
this.connectableMembers = [];
|
|
134
|
+
this.listeners = [];
|
|
135
|
+
if (props) {
|
|
136
|
+
const isWeightedRandomAlgorithm = !cdktf_1.Token.isUnresolved(props.loadBalancingAlgorithmType) &&
|
|
137
|
+
props.loadBalancingAlgorithmType ===
|
|
138
|
+
enums_1.TargetGroupLoadBalancingAlgorithmType.WEIGHTED_RANDOM;
|
|
139
|
+
if (props.slowStart !== undefined) {
|
|
140
|
+
// 0 is allowed and disables slow start
|
|
141
|
+
if ((props.slowStart.toSeconds() < 30 &&
|
|
142
|
+
props.slowStart.toSeconds() !== 0) ||
|
|
143
|
+
props.slowStart.toSeconds() > 900) {
|
|
144
|
+
throw new Error("Slow start duration value must be between 30 and 900 seconds, or 0 to disable slow start.");
|
|
145
|
+
}
|
|
146
|
+
this.setAttribute("slow_start.duration_seconds", props.slowStart.toSeconds().toString());
|
|
147
|
+
if (isWeightedRandomAlgorithm) {
|
|
148
|
+
throw new Error("The weighted random routing algorithm can not be used with slow start mode.");
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
if (props.stickinessCookieDuration) {
|
|
152
|
+
this.enableCookieStickiness(props.stickinessCookieDuration, props.stickinessCookieName);
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
this.setAttribute("stickiness.enabled", "false");
|
|
156
|
+
}
|
|
157
|
+
if (props.loadBalancingAlgorithmType) {
|
|
158
|
+
this.setAttribute("load_balancing.algorithm.type", props.loadBalancingAlgorithmType);
|
|
159
|
+
}
|
|
160
|
+
this.addTarget(...(props.targets || []));
|
|
161
|
+
if (props.enableAnomalyMitigation !== undefined) {
|
|
162
|
+
if (props.enableAnomalyMitigation && !isWeightedRandomAlgorithm) {
|
|
163
|
+
throw new Error("Anomaly mitigation is only available when `loadBalancingAlgorithmType` is `TargetGroupLoadBalancingAlgorithmType.WEIGHTED_RANDOM`.");
|
|
164
|
+
}
|
|
165
|
+
this.setAttribute("load_balancing.algorithm.anomaly_mitigation", props.enableAnomalyMitigation ? "on" : "off");
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
get metrics() {
|
|
170
|
+
if (!this._metrics) {
|
|
171
|
+
this._metrics = new ApplicationTargetGroupMetrics(this, this.targetGroupFullName, this.firstLoadBalancerFullName);
|
|
172
|
+
}
|
|
173
|
+
return this._metrics;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Add a load balancing target to this target group
|
|
177
|
+
*/
|
|
178
|
+
addTarget(...targets) {
|
|
179
|
+
for (const target of targets) {
|
|
180
|
+
const result = target.attachToApplicationTargetGroup(this);
|
|
181
|
+
this.addLoadBalancerTarget(result);
|
|
182
|
+
}
|
|
183
|
+
if (this.targetType === enums_1.TargetType.LAMBDA) {
|
|
184
|
+
this.setAttribute("stickiness.enabled", undefined);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Enable sticky routing via a cookie to members of this target group.
|
|
189
|
+
*
|
|
190
|
+
* Note: If the `cookieName` parameter is set, application-based stickiness will be applied,
|
|
191
|
+
* otherwise it defaults to duration-based stickiness attributes (`lb_cookie`).
|
|
192
|
+
*
|
|
193
|
+
* @see https://docs.aws.amazon.com/elasticloadbalancing/latest/application/sticky-sessions.html
|
|
194
|
+
*/
|
|
195
|
+
enableCookieStickiness(duration, cookieName) {
|
|
196
|
+
if (duration.toSeconds() < 1 || duration.toSeconds() > 604800) {
|
|
197
|
+
throw new Error("Stickiness cookie duration value must be between 1 second and 7 days (604800 seconds).");
|
|
198
|
+
}
|
|
199
|
+
if (cookieName !== undefined) {
|
|
200
|
+
if (!cdktf_1.Token.isUnresolved(cookieName) &&
|
|
201
|
+
(cookieName.startsWith("AWSALB") ||
|
|
202
|
+
cookieName.startsWith("AWSALBAPP") ||
|
|
203
|
+
cookieName.startsWith("AWSALBTG"))) {
|
|
204
|
+
throw new Error("App cookie names that start with the following prefixes are not allowed: AWSALB, AWSALBAPP, and AWSALBTG; they're reserved for use by the load balancer.");
|
|
205
|
+
}
|
|
206
|
+
if (cookieName === "") {
|
|
207
|
+
throw new Error("App cookie name cannot be an empty string.");
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
this.setAttribute("stickiness.enabled", "true");
|
|
211
|
+
if (cookieName) {
|
|
212
|
+
this.setAttribute("stickiness.type", "app_cookie");
|
|
213
|
+
this.setAttribute("stickiness.app_cookie.cookie_name", cookieName);
|
|
214
|
+
this.setAttribute("stickiness.app_cookie.duration_seconds", duration.toSeconds().toString());
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
this.setAttribute("stickiness.type", "lb_cookie");
|
|
218
|
+
this.setAttribute("stickiness.lb_cookie.duration_seconds", duration.toSeconds().toString());
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Register a connectable as a member of this target group.
|
|
223
|
+
*
|
|
224
|
+
* Don't call this directly. It will be called by load balancing targets.
|
|
225
|
+
*/
|
|
226
|
+
registerConnectable(connectable, portRange) {
|
|
227
|
+
portRange = portRange || port_1.Port.tcp(this.defaultPort);
|
|
228
|
+
// Notify all listeners that we already know about of this new connectable.
|
|
229
|
+
// Then remember for new listeners that might get added later.
|
|
230
|
+
this.connectableMembers.push({ connectable, portRange });
|
|
231
|
+
for (const listener of this.listeners) {
|
|
232
|
+
listener.registerConnectable(connectable, portRange);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Register a listener that is load balancing to this target group.
|
|
237
|
+
*
|
|
238
|
+
* Don't call this directly. It will be called by listeners.
|
|
239
|
+
*/
|
|
240
|
+
registerListener(listener, associatingConstruct) {
|
|
241
|
+
// Notify this listener of all connectables that we know about.
|
|
242
|
+
// Then remember for new connectables that might get added later.
|
|
243
|
+
for (const member of this.connectableMembers) {
|
|
244
|
+
listener.registerConnectable(member.connectable, member.portRange);
|
|
245
|
+
}
|
|
246
|
+
this.listeners.push(listener);
|
|
247
|
+
this.loadBalancerAttachedDependencies.add(associatingConstruct ?? listener);
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Full name of first load balancer
|
|
251
|
+
*/
|
|
252
|
+
get firstLoadBalancerFullName() {
|
|
253
|
+
if (this.listeners.length === 0) {
|
|
254
|
+
throw new Error("The TargetGroup needs to be attached to a LoadBalancer before you can call this method");
|
|
255
|
+
}
|
|
256
|
+
return (0, base_target_group_1.loadBalancerNameFromListenerArn)(this.listeners[0].listenerArn);
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Return the given named metric for this Application Load Balancer Target Group
|
|
260
|
+
*
|
|
261
|
+
* Returns the metric for this target group from the point of view of the first
|
|
262
|
+
* load balancer load balancing to it. If you have multiple load balancers load
|
|
263
|
+
* sending traffic to the same target group, you will have to override the dimensions
|
|
264
|
+
* on this metric.
|
|
265
|
+
*
|
|
266
|
+
* @default Average over 5 minutes
|
|
267
|
+
*/
|
|
268
|
+
metric(metricName, props) {
|
|
269
|
+
return this.metrics.custom(metricName, props);
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* The number of IPv6 requests received by the target group
|
|
273
|
+
*
|
|
274
|
+
* @default Sum over 5 minutes
|
|
275
|
+
* @deprecated Use ``ApplicationTargetGroup.metrics.ipv6RequestCount`` instead
|
|
276
|
+
*/
|
|
277
|
+
metricIpv6RequestCount(props) {
|
|
278
|
+
return this.metrics.ipv6RequestCount(props);
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* The number of requests processed over IPv4 and IPv6.
|
|
282
|
+
*
|
|
283
|
+
* This count includes only the requests with a response generated by a target of the load balancer.
|
|
284
|
+
*
|
|
285
|
+
* @default Sum over 5 minutes
|
|
286
|
+
* @deprecated Use ``ApplicationTargetGroup.metrics.requestCount`` instead
|
|
287
|
+
*/
|
|
288
|
+
metricRequestCount(props) {
|
|
289
|
+
return this.metrics.requestCount(props);
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* The number of healthy hosts in the target group
|
|
293
|
+
*
|
|
294
|
+
* @default Average over 5 minutes
|
|
295
|
+
* @deprecated Use ``ApplicationTargetGroup.metrics.healthyHostCount`` instead
|
|
296
|
+
*/
|
|
297
|
+
metricHealthyHostCount(props) {
|
|
298
|
+
return this.metrics.healthyHostCount(props);
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* The number of unhealthy hosts in the target group
|
|
302
|
+
*
|
|
303
|
+
* @default Average over 5 minutes
|
|
304
|
+
* @deprecated Use ``ApplicationTargetGroup.metrics.unhealthyHostCount`` instead
|
|
305
|
+
*/
|
|
306
|
+
metricUnhealthyHostCount(props) {
|
|
307
|
+
return this.metrics.unhealthyHostCount(props);
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* The number of HTTP 2xx/3xx/4xx/5xx response codes generated by all targets in this target group.
|
|
311
|
+
*
|
|
312
|
+
* This does not include any response codes generated by the load balancer.
|
|
313
|
+
*
|
|
314
|
+
* @default Sum over 5 minutes
|
|
315
|
+
* @deprecated Use ``ApplicationTargetGroup.metrics.httpCodeTarget`` instead
|
|
316
|
+
*/
|
|
317
|
+
metricHttpCodeTarget(code, props) {
|
|
318
|
+
return this.metrics.httpCodeTarget(code, props);
|
|
319
|
+
}
|
|
320
|
+
/**
|
|
321
|
+
* The average number of requests received by each target in a target group.
|
|
322
|
+
*
|
|
323
|
+
* The only valid statistic is Sum. Note that this represents the average not the sum.
|
|
324
|
+
*
|
|
325
|
+
* @default Sum over 5 minutes
|
|
326
|
+
* @deprecated Use `ApplicationTargetGroup.metrics.requestCountPerTarget` instead
|
|
327
|
+
*/
|
|
328
|
+
metricRequestCountPerTarget(props) {
|
|
329
|
+
return this.metrics.requestCountPerTarget(props);
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* The number of connections that were not successfully established between the load balancer and target.
|
|
333
|
+
*
|
|
334
|
+
* @default Sum over 5 minutes
|
|
335
|
+
* @deprecated Use ``ApplicationTargetGroup.metrics.targetConnectionErrorCount`` instead
|
|
336
|
+
*/
|
|
337
|
+
metricTargetConnectionErrorCount(props) {
|
|
338
|
+
return this.metrics.targetConnectionErrorCount(props);
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* The time elapsed, in seconds, after the request leaves the load balancer until a response from the target is received.
|
|
342
|
+
*
|
|
343
|
+
* @default Average over 5 minutes
|
|
344
|
+
* @deprecated Use ``ApplicationTargetGroup.metrics.targetResponseTime`` instead
|
|
345
|
+
*/
|
|
346
|
+
metricTargetResponseTime(props) {
|
|
347
|
+
return this.metrics.targetResponseTime(props);
|
|
348
|
+
}
|
|
349
|
+
/**
|
|
350
|
+
* The number of TLS connections initiated by the load balancer that did not establish a session with the target.
|
|
351
|
+
*
|
|
352
|
+
* Possible causes include a mismatch of ciphers or protocols.
|
|
353
|
+
*
|
|
354
|
+
* @default Sum over 5 minutes
|
|
355
|
+
* @deprecated Use ``ApplicationTargetGroup.metrics.tlsNegotiationErrorCount`` instead
|
|
356
|
+
*/
|
|
357
|
+
metricTargetTLSNegotiationErrorCount(props) {
|
|
358
|
+
return this.metrics.targetTLSNegotiationErrorCount(props);
|
|
359
|
+
}
|
|
360
|
+
validateTargetGroup() {
|
|
361
|
+
const ret = super.validateTargetGroup();
|
|
362
|
+
if (this.targetType !== undefined &&
|
|
363
|
+
this.targetType !== enums_1.TargetType.LAMBDA &&
|
|
364
|
+
(this.protocol === undefined || this.port === undefined)) {
|
|
365
|
+
ret.push("At least one of 'port' or 'protocol' is required for a non-Lambda TargetGroup");
|
|
366
|
+
}
|
|
367
|
+
if (this.healthCheck) {
|
|
368
|
+
if (this.healthCheck.interval &&
|
|
369
|
+
this.healthCheck.timeout &&
|
|
370
|
+
this.healthCheck.interval.toMilliseconds() <=
|
|
371
|
+
this.healthCheck.timeout.toMilliseconds()) {
|
|
372
|
+
ret.push(`Healthcheck interval ${this.healthCheck.interval.toHumanString()} must be greater than the timeout ${this.healthCheck.timeout.toHumanString()}`);
|
|
373
|
+
}
|
|
374
|
+
if (this.healthCheck.protocol) {
|
|
375
|
+
if (!ALB_HEALTH_CHECK_PROTOCOLS.includes(this.healthCheck.protocol)) {
|
|
376
|
+
ret.push([
|
|
377
|
+
`Health check protocol '${this.healthCheck.protocol}' is not supported. `,
|
|
378
|
+
`Must be one of [${ALB_HEALTH_CHECK_PROTOCOLS.join(", ")}]`,
|
|
379
|
+
].join(""));
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
return ret;
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
exports.ApplicationTargetGroup = ApplicationTargetGroup;
|
|
387
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
388
|
+
ApplicationTargetGroup[_a] = { fqn: "terraconstructs.aws.compute.ApplicationTargetGroup", version: "0.0.12" };
|
|
389
|
+
/**
|
|
390
|
+
* An imported application target group
|
|
391
|
+
*/
|
|
392
|
+
class ImportedApplicationTargetGroup extends imported_1.ImportedTargetGroupBase {
|
|
393
|
+
constructor(scope, id, props) {
|
|
394
|
+
super(scope, id, props);
|
|
395
|
+
if (this.loadBalancerArns != util_1.NO_LOADBALANCER_ARNS) {
|
|
396
|
+
const targetGroupFullName = (0, util_1.parseTargetGroupFullName)(this.targetGroupArn);
|
|
397
|
+
const firstLoadBalancerFullName = (0, util_1.parseLoadBalancerFullName)(this.loadBalancerArns);
|
|
398
|
+
this._metrics = new ApplicationTargetGroupMetrics(this, targetGroupFullName, firstLoadBalancerFullName);
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
registerListener(_listener, _associatingConstruct) {
|
|
402
|
+
// Nothing to do, we know nothing of our members
|
|
403
|
+
// "@aws-cdk/aws-elbv2:albTargetGroupCannotRegisterListener",
|
|
404
|
+
cdktf_1.Annotations.of(this).addWarning("Cannot register listener on imported target group -- security groups might need to be updated manually");
|
|
405
|
+
}
|
|
406
|
+
registerConnectable(_connectable, _portRange) {
|
|
407
|
+
// "@aws-cdk/aws-elbv2:albTargetGroupCannotRegisterConnectable",
|
|
408
|
+
cdktf_1.Annotations.of(this).addWarning("Cannot register connectable on imported target group -- security groups might need to be updated manually");
|
|
409
|
+
}
|
|
410
|
+
addTarget(...targets) {
|
|
411
|
+
for (const target of targets) {
|
|
412
|
+
const result = target.attachToApplicationTargetGroup(this);
|
|
413
|
+
if (result.targetJson !== undefined) {
|
|
414
|
+
throw new Error("Cannot add a non-self registering target to an imported TargetGroup. Create a new TargetGroup instead.");
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
get metrics() {
|
|
419
|
+
if (!this._metrics) {
|
|
420
|
+
throw new Error("The imported ApplicationTargetGroup needs the associated ApplicationBalancer to be able to provide metrics. " +
|
|
421
|
+
"Please specify the ARN value when importing it.");
|
|
422
|
+
}
|
|
423
|
+
return this._metrics;
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
const ALB_HEALTH_CHECK_PROTOCOLS = [enums_1.LbProtocol.HTTP, enums_1.LbProtocol.HTTPS];
|
|
427
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24tdGFyZ2V0LWdyb3VwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2F3cy9jb21wdXRlL2FsYi9hcHBsaWNhdGlvbi10YXJnZXQtZ3JvdXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxtSUFBbUk7QUFFbkksaUNBQTJDO0FBSzNDLCtDQUErQztBQUUvQyx3SEFBMkY7QUFDM0Ysc0VBUXdDO0FBQ3hDLDhDQU00QjtBQUM1QixvREFBZ0U7QUFDaEUsNENBSzJCO0FBQzNCLGtDQUErQjtBQThML0I7O0dBRUc7QUFDSCxNQUFNLDZCQUE2QjtJQUtqQyxZQUNFLEtBQWdCLEVBQ2hCLG1CQUEyQixFQUMzQixvQkFBNEI7UUFFNUIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLG1CQUFtQixDQUFDO1FBQy9DLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxvQkFBb0IsQ0FBQztJQUNuRCxDQUFDO0lBRU0sTUFBTSxDQUNYLFVBQWtCLEVBQ2xCLEtBQWdDO1FBRWhDLE9BQU8sSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDO1lBQzNCLFNBQVMsRUFBRSxvQkFBb0I7WUFDL0IsVUFBVTtZQUNWLGFBQWEsRUFBRTtnQkFDYixXQUFXLEVBQUUsSUFBSSxDQUFDLG1CQUFtQjtnQkFDckMsWUFBWSxFQUFFLElBQUksQ0FBQyxvQkFBb0I7YUFDeEM7WUFDRCxHQUFHLEtBQUs7U0FDVCxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRU0sZ0JBQWdCLENBQUMsS0FBZ0M7UUFDdEQsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLHVFQUFxQixDQUFDLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFTSxZQUFZLENBQUMsS0FBZ0M7UUFDbEQsT0FBTyxJQUFJLENBQUMsWUFB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TSxJQUFJLEtBQUssQ0FDYix3R0FBd0csQ0FDekcsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQVcsT0FBTztRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ25CLE1BQU0sSUFBSSxLQUFLLENBQ2IsOEdBQThHO2dCQUM1RyxpREFBaUQsQ0FDcEQsQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztDQUNGO0FBaUJELE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxrQkFBVSxDQUFDLElBQUksRUFBRSxrQkFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTc1LjEvcGFja2FnZXMvYXdzLWNkay1saWIvYXdzLWVsYXN0aWNsb2FkYmFsYW5jaW5ndjIvbGliL2FsYi9hcHBsaWNhdGlvbi10YXJnZXQtZ3JvdXAudHNcblxuaW1wb3J0IHsgQW5ub3RhdGlvbnMsIFRva2VuIH0gZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBJQ29uc3RydWN0LCBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgSUFwcGxpY2F0aW9uTGlzdGVuZXIgfSBmcm9tIFwiLi9hcHBsaWNhdGlvbi1saXN0ZW5lclwiO1xuaW1wb3J0IHsgSHR0cENvZGVUYXJnZXQgfSBmcm9tIFwiLi9hcHBsaWNhdGlvbi1sb2FkLWJhbGFuY2VyXCI7XG5pbXBvcnQgeyBEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9kdXJhdGlvblwiO1xuaW1wb3J0ICogYXMgY2xvdWR3YXRjaCBmcm9tIFwiLi4vLi4vY2xvdWR3YXRjaFwiO1xuaW1wb3J0IHsgSUNvbm5lY3RhYmxlIH0gZnJvbSBcIi4uL2Nvbm5lY3Rpb25zXCI7XG5pbXBvcnQgeyBBcHBsaWNhdGlvbkVMQk1ldHJpY3MgfSBmcm9tIFwiLi4vZWxhc3RpY2xvYWRiYWxhbmNpbmd2Mi1jYW5uZWQtbWV0cmljcy5nZW5lcmF0ZWRcIjtcbmltcG9ydCB7XG4gIEJhc2VUYXJnZXRHcm91cFByb3BzLFxuICBJVGFyZ2V0R3JvdXAsXG4gIGxvYWRCYWxhbmNlck5hbWVGcm9tTGlzdGVuZXJBcm4sXG4gIExvYWRCYWxhbmNlclRhcmdldFByb3BzLFxuICBUYXJnZXRHcm91cEF0dHJpYnV0ZXMsXG4gIFRhcmdldEdyb3VwQmFzZSxcbiAgVGFyZ2V0R3JvdXBJbXBvcnRQcm9wcyxcbn0gZnJvbSBcIi4uL2xiLXNoYXJlZC9iYXNlLXRhcmdldC1ncm91cFwiO1xuaW1wb3J0IHtcbiAgQXBwbGljYXRpb25Qcm90b2NvbCxcbiAgQXBwbGljYXRpb25Qcm90b2NvbFZlcnNpb24sXG4gIExiUHJvdG9jb2wsXG4gIFRhcmdldFR5cGUsXG4gIFRhcmdldEdyb3VwTG9hZEJhbGFuY2luZ0FsZ29yaXRobVR5cGUsXG59IGZyb20gXCIuLi9sYi1zaGFyZWQvZW51bXNcIjtcbmltcG9ydCB7IEltcG9ydGVkVGFyZ2V0R3JvdXBCYXNlIH0gZnJvbSBcIi4uL2xiLXNoYXJlZC9pbXBvcnRlZFwiO1xuaW1wb3J0IHtcbiAgZGV0ZXJtaW5lUHJvdG9jb2xBbmRQb3J0LFxuICBwYXJzZUxvYWRCYWxhbmNlckZ1bGxOYW1lLFxuICBwYXJzZVRhcmdldEdyb3VwRnVsbE5hbWUsXG4gIE5PX0xPQURCQUxBTkNFUl9BUk5TLFxufSBmcm9tIFwiLi4vbGItc2hhcmVkL3V0aWxcIjtcbmltcG9ydCB7IFBvcnQgfSBmcm9tIFwiLi4vcG9ydFwiO1xuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGRlZmluaW5nIGFuIEFwcGxpY2F0aW9uIFRhcmdldCBHcm91cFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxpY2F0aW9uVGFyZ2V0R3JvdXBQcm9wcyBleHRlbmRzIEJhc2VUYXJnZXRHcm91cFByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBwcm90b2NvbCB1c2VkIGZvciBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHRhcmdldC5cbiAgICpcbiAgICogVGhpcyBpcyBub3QgYXBwbGljYWJsZSBmb3IgTGFtYmRhIHRhcmdldHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRGV0ZXJtaW5lZCBmcm9tIHBvcnQgaWYga25vd25cbiAgICovXG4gIHJlYWRvbmx5IHByb3RvY29sPzogQXBwbGljYXRpb25Qcm90b2NvbDtcblxuICAvKipcbiAgICogVGhlIHByb3RvY29sIHZlcnNpb24gdG8gdXNlXG4gICAqXG4gICAqIEBkZWZhdWx0IEFwcGxpY2F0aW9uUHJvdG9jb2xWZXJzaW9uLkhUVFAxXG4gICAqL1xuICByZWFkb25seSBwcm90b2NvbFZlcnNpb24/OiBBcHBsaWNhdGlvblByb3RvY29sVmVyc2lvbjtcblxuICAvKipcbiAgICogVGhlIHBvcnQgb24gd2hpY2ggdGhlIHRhcmdldCByZWNlaXZlcyB0cmFmZmljLlxuICAgKlxuICAgKiBUaGlzIGlzIG5vdCBhcHBsaWNhYmxlIGZvciBMYW1iZGEgdGFyZ2V0cy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBEZXRlcm1pbmVkIGZyb20gcHJvdG9jb2wgaWYga25vd25cbiAgICovXG4gIHJlYWRvbmx5IHBvcnQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB0aW1lIHBlcmlvZCBkdXJpbmcgd2hpY2ggdGhlIGxvYWQgYmFsYW5jZXIgc2VuZHMgYSBuZXdseSByZWdpc3RlcmVkXG4gICAqIHRhcmdldCBhIGxpbmVhcmx5IGluY3JlYXNpbmcgc2hhcmUgb2YgdGhlIHRyYWZmaWMgdG8gdGhlIHRhcmdldCBncm91cC5cbiAgICpcbiAgICogVGhlIHJhbmdlIGlzIDMwLTkwMCBzZWNvbmRzICgxNSBtaW51dGVzKS5cbiAgICpcbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgcmVhZG9ubHkgc2xvd1N0YXJ0PzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBzdGlja2luZXNzIGNvb2tpZSBleHBpcmF0aW9uIHBlcmlvZC5cbiAgICpcbiAgICogU2V0dGluZyB0aGlzIHZhbHVlIGVuYWJsZXMgbG9hZCBiYWxhbmNlciBzdGlja2luZXNzLlxuICAgKlxuICAgKiBBZnRlciB0aGlzIHBlcmlvZCwgdGhlIGNvb2tpZSBpcyBjb25zaWRlcmVkIHN0YWxlLiBUaGUgbWluaW11bSB2YWx1ZSBpc1xuICAgKiAxIHNlY29uZCBhbmQgdGhlIG1heGltdW0gdmFsdWUgaXMgNyBkYXlzICg2MDQ4MDAgc2Vjb25kcykuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gU3RpY2tpbmVzcyBpcyBkaXNhYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgc3RpY2tpbmVzc0Nvb2tpZUR1cmF0aW9uPzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIGFuIGFwcGxpY2F0aW9uLWJhc2VkIHN0aWNraW5lc3MgY29va2llLlxuICAgKlxuICAgKiBOYW1lcyB0aGF0IHN0YXJ0IHdpdGggdGhlIGZvbGxvd2luZyBwcmVmaXhlcyBhcmUgbm90IGFsbG93ZWQ6IEFXU0FMQiwgQVdTQUxCQVBQLFxuICAgKiBhbmQgQVdTQUxCVEc7IHRoZXkncmUgcmVzZXJ2ZWQgZm9yIHVzZSBieSB0aGUgbG9hZCBiYWxhbmNlci5cbiAgICpcbiAgICogTm90ZTogYHN0aWNraW5lc3NDb29raWVOYW1lYCBwYXJhbWV0ZXIgZGVwZW5kcyBvbiB0aGUgcHJlc2VuY2Ugb2YgYHN0aWNraW5lc3NDb29raWVEdXJhdGlvbmAgcGFyYW1ldGVyLlxuICAgKiBJZiBgc3RpY2tpbmVzc0Nvb2tpZUR1cmF0aW9uYCBpcyBub3Qgc2V0LCBgc3RpY2tpbmVzc0Nvb2tpZU5hbWVgIHdpbGwgYmUgb21pdHRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBJZiBgc3RpY2tpbmVzc0Nvb2tpZUR1cmF0aW9uYCBpcyBzZXQsIGEgbG9hZC1iYWxhbmNlciBnZW5lcmF0ZWQgY29va2llIGlzIHVzZWQuIE90aGVyd2lzZSwgbm8gc3RpY2tpbmVzcyBpcyBkZWZpbmVkLlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbGFzdGljbG9hZGJhbGFuY2luZy9sYXRlc3QvYXBwbGljYXRpb24vc3RpY2t5LXNlc3Npb25zLmh0bWxcbiAgICovXG4gIHJlYWRvbmx5IHN0aWNraW5lc3NDb29raWVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbG9hZCBiYWxhbmNpbmcgYWxnb3JpdGhtIHRvIHNlbGVjdCB0YXJnZXRzIGZvciByb3V0aW5nIHJlcXVlc3RzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBUYXJnZXRHcm91cExvYWRCYWxhbmNpbmdBbGdvcml0aG1UeXBlLlJPVU5EX1JPQklOXG4gICAqL1xuICByZWFkb25seSBsb2FkQmFsYW5jaW5nQWxnb3JpdGhtVHlwZT86IFRhcmdldEdyb3VwTG9hZEJhbGFuY2luZ0FsZ29yaXRobVR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSB0YXJnZXRzIHRvIGFkZCB0byB0aGlzIHRhcmdldCBncm91cC5cbiAgICpcbiAgICogQ2FuIGJlIGBJbnN0YW5jZWAsIGBJUEFkZHJlc3NgLCBvciBhbnkgc2VsZi1yZWdpc3RlcmluZyBsb2FkIGJhbGFuY2luZ1xuICAgKiB0YXJnZXQuIElmIHlvdSB1c2UgZWl0aGVyIGBJbnN0YW5jZWAgb3IgYElQQWRkcmVzc2AgYXMgdGFyZ2V0cywgYWxsXG4gICAqIHRhcmdldCBtdXN0IGJlIG9mIHRoZSBzYW1lIHR5cGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gdGFyZ2V0cy5cbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldHM/OiBJQXBwbGljYXRpb25Mb2FkQmFsYW5jZXJUYXJnZXRbXTtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgYW5vbWFseSBtaXRpZ2F0aW9uIGlzIGVuYWJsZWQuXG4gICAqXG4gICAqIE9ubHkgYXZhaWxhYmxlIHdoZW4gYGxvYWRCYWxhbmNpbmdBbGdvcml0aG1UeXBlYCBpcyBgVGFyZ2V0R3JvdXBMb2FkQmFsYW5jaW5nQWxnb3JpdGhtVHlwZS5XRUlHSFRFRF9SQU5ET01gXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VsYXN0aWNsb2FkYmFsYW5jaW5nL2xhdGVzdC9hcHBsaWNhdGlvbi9sb2FkLWJhbGFuY2VyLXRhcmdldC1ncm91cHMuaHRtbCNhdXRvbWF0aWMtdGFyZ2V0LXdlaWdodHNcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZUFub21hbHlNaXRpZ2F0aW9uPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb250YWlucyBhbGwgbWV0cmljcyBmb3IgYSBUYXJnZXQgR3JvdXAgb2YgYSBBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElBcHBsaWNhdGlvblRhcmdldEdyb3VwTWV0cmljcyB7XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGdpdmVuIG5hbWVkIG1ldHJpYyBmb3IgdGhpcyBOZXR3b3JrIFRhcmdldCBHcm91cFxuICAgKlxuICAgKiBAZGVmYXVsdCBBdmVyYWdlIG92ZXIgNSBtaW51dGVzXG4gICAqL1xuICBjdXN0b20oXG4gICAgbWV0cmljTmFtZTogc3RyaW5nLFxuICAgIHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zLFxuICApOiBjbG91ZHdhdGNoLk1ldHJpYztcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBJUHY2IHJlcXVlc3RzIHJlY2VpdmVkIGJ5IHRoZSB0YXJnZXQgZ3JvdXBcbiAgICpcbiAgICogQGRlZmF1bHQgU3VtIG92ZXIgNSBtaW51dGVzXG4gICAqL1xuICBpcHY2UmVxdWVzdENvdW50KHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWM7XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgcmVxdWVzdHMgcHJvY2Vzc2VkIG92ZXIgSVB2NCBhbmQgSVB2Ni5cbiAgICpcbiAgICogVGhpcyBjb3VudCBpbmNsdWRlcyBvbmx5IHRoZSByZXF1ZXN0cyB3aXRoIGEgcmVzcG9uc2UgZ2VuZXJhdGVkIGJ5IGEgdGFyZ2V0IG9mIHRoZSBsb2FkIGJhbGFuY2VyLlxuICAgKlxuICAgKiBAZGVmYXVsdCBTdW0gb3ZlciA1IG1pbnV0ZXNcbiAgICovXG4gIHJlcXVlc3RDb3VudChwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyk6IGNsb3Vkd2F0Y2guTWV0cmljO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIGhlYWx0aHkgaG9zdHMgaW4gdGhlIHRhcmdldCBncm91cFxuICAgKlxuICAgKiBAZGVmYXVsdCBBdmVyYWdlIG92ZXIgNSBtaW51dGVzXG4gICAqL1xuICBoZWFsdGh5SG9zdENvdW50KHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWM7XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgdW5oZWFsdGh5IGhvc3RzIGluIHRoZSB0YXJnZXQgZ3JvdXBcbiAgICpcbiAgICogQGRlZmF1bHQgQXZlcmFnZSBvdmVyIDUgbWludXRlc1xuICAgKi9cbiAgdW5oZWFsdGh5SG9zdENvdW50KHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWM7XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgSFRUUCAyeHgvM3h4LzR4eC81eHggcmVzcG9uc2UgY29kZXMgZ2VuZXJhdGVkIGJ5IGFsbCB0YXJnZXRzIGluIHRoaXMgdGFyZ2V0IGdyb3VwLlxuICAgKlxuICAgKiBUaGlzIGRvZXMgbm90IGluY2x1ZGUgYW55IHJlc3BvbnNlIGNvZGVzIGdlbmVyYXRlZCBieSB0aGUgbG9hZCBiYWxhbmNlci5cbiAgICpcbiAgICogQGRlZmF1bHQgU3VtIG92ZXIgNSBtaW51dGVzXG4gICAqL1xuICBodHRwQ29kZVRhcmdldChcbiAgICBjb2RlOiBIdHRwQ29kZVRhcmdldCxcbiAgICBwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyxcbiAgKTogY2xvdWR3YXRjaC5NZXRyaWM7XG5cbiAgLyoqXG4gICAqIFRoZSBhdmVyYWdlIG51bWJlciBvZiByZXF1ZXN0cyByZWNlaXZlZCBieSBlYWNoIHRhcmdldCBpbiBhIHRhcmdldCBncm91cC5cbiAgICpcbiAgICogVGhlIG9ubHkgdmFsaWQgc3RhdGlzdGljIGlzIFN1bS4gTm90ZSB0aGF0IHRoaXMgcmVwcmVzZW50cyB0aGUgYXZlcmFnZSBub3QgdGhlIHN1bS5cbiAgICpcbiAgICogQGRlZmF1bHQgU3VtIG92ZXIgNSBtaW51dGVzXG4gICAqL1xuICByZXF1ZXN0Q291bnRQZXJUYXJnZXQocHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpOiBjbG91ZHdhdGNoLk1ldHJpYztcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBjb25uZWN0aW9ucyB0aGF0IHdlcmUgbm90IHN1Y2Nlc3NmdWxseSBlc3RhYmxpc2hlZCBiZXR3ZWVuIHRoZSBsb2FkIGJhbGFuY2VyIGFuZCB0YXJnZXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IFN1bSBvdmVyIDUgbWludXRlc1xuICAgKi9cbiAgdGFyZ2V0Q29ubmVjdGlvbkVycm9yQ291bnQoXG4gICAgcHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMsXG4gICk6IGNsb3Vkd2F0Y2guTWV0cmljO1xuXG4gIC8qKlxuICAgKiBUaGUgdGltZSBlbGFwc2VkLCBpbiBzZWNvbmRzLCBhZnRlciB0aGUgcmVxdWVzdCBsZWF2ZXMgdGhlIGxvYWQgYmFsYW5jZXIgdW50aWwgYSByZXNwb25zZSBmcm9tIHRoZSB0YXJnZXQgaXMgcmVjZWl2ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IEF2ZXJhZ2Ugb3ZlciA1IG1pbnV0ZXNcbiAgICovXG4gIHRhcmdldFJlc3BvbnNlVGltZShwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyk6IGNsb3Vkd2F0Y2guTWV0cmljO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIFRMUyBjb25uZWN0aW9ucyBpbml0aWF0ZWQgYnkgdGhlIGxvYWQgYmFsYW5jZXIgdGhhdCBkaWQgbm90IGVzdGFibGlzaCBhIHNlc3Npb24gd2l0aCB0aGUgdGFyZ2V0LlxuICAgKlxuICAgKiBQb3NzaWJsZSBjYXVzZXMgaW5jbHVkZSBhIG1pc21hdGNoIG9mIGNpcGhlcnMgb3IgcHJvdG9jb2xzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBTdW0gb3ZlciA1IG1pbnV0ZXNcbiAgICovXG4gIHRhcmdldFRMU05lZ290aWF0aW9uRXJyb3JDb3VudChcbiAgICBwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyxcbiAgKTogY2xvdWR3YXRjaC5NZXRyaWM7XG59XG5cbi8qKlxuICogVGhlIG1ldHJpY3MgZm9yIGEgQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlci5cbiAqL1xuY2xhc3MgQXBwbGljYXRpb25UYXJnZXRHcm91cE1ldHJpY3MgaW1wbGVtZW50cyBJQXBwbGljYXRpb25UYXJnZXRHcm91cE1ldHJpY3Mge1xuICBwcml2YXRlIHJlYWRvbmx5IHNjb3BlOiBDb25zdHJ1Y3Q7XG4gIHByaXZhdGUgcmVhZG9ubHkgbG9hZEJhbGFuY2VyRnVsbE5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSB0YXJnZXRHcm91cEZ1bGxOYW1lOiBzdHJpbmc7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgdGFyZ2V0R3JvdXBGdWxsTmFtZTogc3RyaW5nLFxuICAgIGxvYWRCYWxhbmNlckZ1bGxOYW1lOiBzdHJpbmcsXG4gICkge1xuICAgIHRoaXMuc2NvcGUgPSBzY29wZTtcbiAgICB0aGlzLnRhcmdldEdyb3VwRnVsbE5hbWUgPSB0YXJnZXRHcm91cEZ1bGxOYW1lO1xuICAgIHRoaXMubG9hZEJhbGFuY2VyRnVsbE5hbWUgPSBsb2FkQmFsYW5jZXJGdWxsTmFtZTtcbiAgfVxuXG4gIHB1YmxpYyBjdXN0b20oXG4gICAgbWV0cmljTmFtZTogc3RyaW5nLFxuICAgIHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zLFxuICApOiBjbG91ZHdhdGNoLk1ldHJpYyB7XG4gICAgcmV0dXJuIG5ldyBjbG91ZHdhdGNoLk1ldHJpYyh7XG4gICAgICBuYW1lc3BhY2U6IFwiQVdTL0FwcGxpY2F0aW9uRUxCXCIsXG4gICAgICBtZXRyaWNOYW1lLFxuICAgICAgZGltZW5zaW9uc01hcDoge1xuICAgICAgICBUYXJnZXRHcm91cDogdGhpcy50YXJnZXRHcm91cEZ1bGxOYW1lLFxuICAgICAgICBMb2FkQmFsYW5jZXI6IHRoaXMubG9hZEJhbGFuY2VyRnVsbE5hbWUsXG4gICAgICB9LFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSkuYXR0YWNoVG8odGhpcy5zY29wZSk7XG4gIH1cblxuICBwdWJsaWMgaXB2NlJlcXVlc3RDb3VudChwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmNhbm5lZE1ldHJpYyhBcHBsaWNhdGlvbkVMQk1ldHJpY3MuaVB2NlJlcXVlc3RDb3VudFN1bSwgcHJvcHMpO1xuICB9XG5cbiAgcHVibGljIHJlcXVlc3RDb3VudChwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmNhbm5lZE1ldHJpYyhBcHBsaWNhdGlvbkVMQk1ldHJpY3MucmVxdWVzdENvdW50U3VtLCBwcm9wcyk7XG4gIH1cblxuICBwdWJsaWMgaGVhbHRoeUhvc3RDb3VudChwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmN1c3RvbShcIkhlYWx0aHlIb3N0Q291bnRcIiwge1xuICAgICAgc3RhdGlzdGljOiBcIkF2ZXJhZ2VcIixcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHVuaGVhbHRoeUhvc3RDb3VudChwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmN1c3RvbShcIlVuSGVhbHRoeUhvc3RDb3VudFwiLCB7XG4gICAgICBzdGF0aXN0aWM6IFwiQXZlcmFnZVwiLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgaHR0cENvZGVUYXJnZXQoXG4gICAgY29kZTogSHR0cENvZGVUYXJnZXQsXG4gICAgcHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMsXG4gICkge1xuICAgIHJldHVybiB0aGlzLmN1c3RvbShjb2RlLCB7XG4gICAgICBzdGF0aXN0aWM6IFwiU3VtXCIsXG4gICAgICAuLi5wcm9wcyxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyByZXF1ZXN0Q291bnRQZXJUYXJnZXQocHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5jdXN0b20oXCJSZXF1ZXN0Q291bnRQZXJUYXJnZXRcIiwge1xuICAgICAgc3RhdGlzdGljOiBcIlN1bVwiLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgdGFyZ2V0Q29ubmVjdGlvbkVycm9yQ291bnQocHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5jdXN0b20oXCJUYXJnZXRDb25uZWN0aW9uRXJyb3JDb3VudFwiLCB7XG4gICAgICBzdGF0aXN0aWM6IFwiU3VtXCIsXG4gICAgICAuLi5wcm9wcyxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyB0YXJnZXRSZXNwb25zZVRpbWUocHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5jdXN0b20oXCJUYXJnZXRSZXNwb25zZVRpbWVcIiwge1xuICAgICAgc3RhdGlzdGljOiBcIkF2ZXJhZ2VcIixcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHRhcmdldFRMU05lZ290aWF0aW9uRXJyb3JDb3VudChwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmN1c3RvbShcIlRhcmdldFRMU05lZ290aWF0aW9uRXJyb3JDb3VudFwiLCB7XG4gICAgICBzdGF0aXN0aWM6IFwiU3VtXCIsXG4gICAgICAuLi5wcm9wcyxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2FubmVkTWV0cmljKFxuICAgIGZuOiAoZGltczoge1xuICAgICAgTG9hZEJhbGFuY2VyOiBzdHJpbmc7XG4gICAgICBUYXJnZXRHcm91cDogc3RyaW5nO1xuICAgIH0pID0+IGNsb3Vkd2F0Y2guTWV0cmljUHJvcHMsXG4gICAgcHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMsXG4gICk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgICByZXR1cm4gbmV3IGNsb3Vkd2F0Y2guTWV0cmljKHtcbiAgICAgIC4uLmZuKHtcbiAgICAgICAgTG9hZEJhbGFuY2VyOiB0aGlzLmxvYWRCYWxhbmNlckZ1bGxOYW1lLFxuICAgICAgICBUYXJnZXRHcm91cDogdGhpcy50YXJnZXRHcm91cEZ1bGxOYW1lLFxuICAgICAgfSksXG4gICAgICAuLi5wcm9wcyxcbiAgICB9KS5hdHRhY2hUbyh0aGlzLnNjb3BlKTtcbiAgfVxufVxuXG4vKipcbiAqIERlZmluZSBhbiBBcHBsaWNhdGlvbiBUYXJnZXQgR3JvdXBcbiAqL1xuZXhwb3J0IGNsYXNzIEFwcGxpY2F0aW9uVGFyZ2V0R3JvdXBcbiAgZXh0ZW5kcyBUYXJnZXRHcm91cEJhc2VcbiAgaW1wbGVtZW50cyBJQXBwbGljYXRpb25UYXJnZXRHcm91cFxue1xuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIHRhcmdldCBncm91cFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tVGFyZ2V0R3JvdXBBdHRyaWJ1dGVzKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBhdHRyczogVGFyZ2V0R3JvdXBBdHRyaWJ1dGVzLFxuICApOiBJQXBwbGljYXRpb25UYXJnZXRHcm91cCB7XG4gICAgcmV0dXJuIG5ldyBJbXBvcnRlZEFwcGxpY2F0aW9uVGFyZ2V0R3JvdXAoc2NvcGUsIGlkLCBhdHRycyk7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIHRhcmdldCBncm91cFxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYGZyb21UYXJnZXRHcm91cEF0dHJpYnV0ZXNgIGluc3RlYWRcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaW1wb3J0KFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogVGFyZ2V0R3JvdXBJbXBvcnRQcm9wcyxcbiAgKTogSUFwcGxpY2F0aW9uVGFyZ2V0R3JvdXAge1xuICAgIHJldHVybiBBcHBsaWNhdGlvblRhcmdldEdyb3VwLmZyb21UYXJnZXRHcm91cEF0dHJpYnV0ZXMoc2NvcGUsIGlkLCBwcm9wcyk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IGNvbm5lY3RhYmxlTWVtYmVyczogQ29ubmVjdGFibGVNZW1iZXJbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBsaXN0ZW5lcnM6IElBcHBsaWNhdGlvbkxpc3RlbmVyW107XG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvdG9jb2w/OiBBcHBsaWNhdGlvblByb3RvY29sO1xuICBwcml2YXRlIHJlYWRvbmx5IHBvcnQ/OiBudW1iZXI7XG4gIHByaXZhdGUgX21ldHJpY3M/OiBJQXBwbGljYXRpb25UYXJnZXRHcm91cE1ldHJpY3M7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBBcHBsaWNhdGlvblRhcmdldEdyb3VwUHJvcHMgPSB7fSxcbiAgKSB7XG4gICAgY29uc3QgW3Byb3RvY29sLCBwb3J0XSA9IGRldGVybWluZVByb3RvY29sQW5kUG9ydChcbiAgICAgIHByb3BzLnByb3RvY29sLFxuICAgICAgcHJvcHMucG9ydCxcbiAgICApO1xuICAgIGNvbnN0IHsgcHJvdG9jb2xWZXJzaW9uIH0gPSBwcm9wcztcbiAgICBzdXBlcihcbiAgICAgIHNjb3BlLFxuICAgICAgaWQsXG4gICAgICB7IC4uLnByb3BzIH0sXG4gICAgICB7XG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICBwcm90b2NvbFZlcnNpb24sXG4gICAgICAgIHBvcnQsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICB0aGlzLnByb3RvY29sID0gcHJvdG9jb2w7XG4gICAgdGhpcy5wb3J0ID0gcG9ydDtcblxuICAgIC8vIHRoaXMudGFyZ2V0VHlwZSBpcyBsYXp5XG4gICAgdGhpcy5ub2RlLmFkZFZhbGlkYXRpb24oe1xuICAgICAgdmFsaWRhdGU6ICgpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMudGFyZ2V0VHlwZSA9PT0gVGFyZ2V0VHlwZS5MQU1CREEgJiZcbiAgICAgICAgICAodGhpcy5wb3J0IHx8IHRoaXMucHJvdG9jb2wpXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBbXCJwb3J0L3Byb3RvY29sIHNob3VsZCBub3QgYmUgc3BlY2lmaWVkIGZvciBMYW1iZGEgdGFyZ2V0c1wiXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0aGlzLmNvbm5lY3RhYmxlTWVtYmVycyA9IFtdO1xuICAgIHRoaXMubGlzdGVuZXJzID0gW107XG5cbiAgICBpZiAocHJvcHMpIHtcbiAgICAgIGNvbnN0IGlzV2VpZ2h0ZWRSYW5kb21BbGdvcml0aG0gPVxuICAgICAgICAhVG9rZW4uaXNVbnJlc29sdmVkKHByb3BzLmxvYWRCYWxhbmNpbmdBbGdvcml0aG1UeXBlKSAmJlxuICAgICAgICBwcm9wcy5sb2FkQmFsYW5jaW5nQWxnb3JpdGhtVHlwZSA9PT1cbiAgICAgICAgICBUYXJnZXRHcm91cExvYWRCYWxhbmNpbmdBbGdvcml0aG1UeXBlLldFSUdIVEVEX1JBTkRPTTtcblxuICAgICAgaWYgKHByb3BzLnNsb3dTdGFydCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIDAgaXMgYWxsb3dlZCBhbmQgZGlzYWJsZXMgc2xvdyBzdGFydFxuICAgICAgICBpZiAoXG4gICAgICAgICAgKHByb3BzLnNsb3dTdGFydC50b1NlY29uZHMoKSA8IDMwICYmXG4gICAgICAgICAgICBwcm9wcy5zbG93U3RhcnQudG9TZWNvbmRzKCkgIT09IDApIHx8XG4gICAgICAgICAgcHJvcHMuc2xvd1N0YXJ0LnRvU2Vjb25kcygpID4gOTAwXG4gICAgICAgICkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIFwiU2xvdyBzdGFydCBkdXJhdGlvbiB2YWx1ZSBtdXN0IGJlIGJldHdlZW4gMzAgYW5kIDkwMCBzZWNvbmRzLCBvciAwIHRvIGRpc2FibGUgc2xvdyBzdGFydC5cIixcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwic2xvd19zdGFydC5kdXJhdGlvbl9zZWNvbmRzXCIsXG4gICAgICAgICAgcHJvcHMuc2xvd1N0YXJ0LnRvU2Vjb25kcygpLnRvU3RyaW5nKCksXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGlzV2VpZ2h0ZWRSYW5kb21BbGdvcml0aG0pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBcIlRoZSB3ZWlnaHRlZCByYW5kb20gcm91dGluZyBhbGdvcml0aG0gY2FuIG5vdCBiZSB1c2VkIHdpdGggc2xvdyBzdGFydCBtb2RlLlwiLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BzLnN0aWNraW5lc3NDb29raWVEdXJhdGlvbikge1xuICAgICAgICB0aGlzLmVuYWJsZUNvb2tpZVN0aWNraW5lc3MoXG4gICAgICAgICAgcHJvcHMuc3RpY2tpbmVzc0Nvb2tpZUR1cmF0aW9uLFxuICAgICAgICAgIHByb3BzLnN0aWNraW5lc3NDb29raWVOYW1lLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJzdGlja2luZXNzLmVuYWJsZWRcIiwgXCJmYWxzZVwiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BzLmxvYWRCYWxhbmNpbmdBbGdvcml0aG1UeXBlKSB7XG4gICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwibG9hZF9iYWxhbmNpbmcuYWxnb3JpdGhtLnR5cGVcIixcbiAgICAgICAgICBwcm9wcy5sb2FkQmFsYW5jaW5nQWxnb3JpdGhtVHlwZSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYWRkVGFyZ2V0KC4uLihwcm9wcy50YXJnZXRzIHx8IFtdKSk7XG5cbiAgICAgIGlmIChwcm9wcy5lbmFibGVBbm9tYWx5TWl0aWdhdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChwcm9wcy5lbmFibGVBbm9tYWx5TWl0aWdhdGlvbiAmJiAhaXNXZWlnaHRlZFJhbmRvbUFsZ29yaXRobSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIFwiQW5vbWFseSBtaXRpZ2F0aW9uIGlzIG9ubHkgYXZhaWxhYmxlIHdoZW4gYGxvYWRCYWxhbmNpbmdBbGdvcml0aG1UeXBlYCBpcyBgVGFyZ2V0R3JvdXBMb2FkQmFsYW5jaW5nQWxnb3JpdGhtVHlwZS5XRUlHSFRFRF9SQU5ET01gLlwiLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJsb2FkX2JhbGFuY2luZy5hbGdvcml0aG0uYW5vbWFseV9taXRpZ2F0aW9uXCIsXG4gICAgICAgICAgcHJvcHMuZW5hYmxlQW5vbWFseU1pdGlnYXRpb24gPyBcIm9uXCIgOiBcIm9mZlwiLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgbWV0cmljcygpOiBJQXBwbGljYXRpb25UYXJnZXRHcm91cE1ldHJpY3Mge1xuICAgIGlmICghdGhpcy5fbWV0cmljcykge1xuICAgICAgdGhpcy5fbWV0cmljcyA9IG5ldyBBcHBsaWNhdGlvblRhcmdldEdyb3VwTWV0cmljcyhcbiAgICAgICAgdGhpcyxcbiAgICAgICAgdGhpcy50YXJnZXRHcm91cEZ1bGxOYW1lLFxuICAgICAgICB0aGlzLmZpcnN0TG9hZEJhbGFuY2VyRnVsbE5hbWUsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fbWV0cmljcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBsb2FkIGJhbGFuY2luZyB0YXJnZXQgdG8gdGhpcyB0YXJnZXQgZ3JvdXBcbiAgICovXG4gIHB1YmxpYyBhZGRUYXJnZXQoLi4udGFyZ2V0czogSUFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyVGFyZ2V0W10pIHtcbiAgICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSB0YXJnZXQuYXR0YWNoVG9BcHBsaWNhdGlvblRhcmdldEdyb3VwKHRoaXMpO1xuICAgICAgdGhpcy5hZGRMb2FkQmFsYW5jZXJUYXJnZXQocmVzdWx0KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50YXJnZXRUeXBlID09PSBUYXJnZXRUeXBlLkxBTUJEQSkge1xuICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJzdGlja2luZXNzLmVuYWJsZWRcIiwgdW5kZWZpbmVkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlIHN0aWNreSByb3V0aW5nIHZpYSBhIGNvb2tpZSB0byBtZW1iZXJzIG9mIHRoaXMgdGFyZ2V0IGdyb3VwLlxuICAgKlxuICAgKiBOb3RlOiBJZiB0aGUgYGNvb2tpZU5hbWVgIHBhcmFtZXRlciBpcyBzZXQsIGFwcGxpY2F0aW9uLWJhc2VkIHN0aWNraW5lc3Mgd2lsbCBiZSBhcHBsaWVkLFxuICAgKiBvdGhlcndpc2UgaXQgZGVmYXVsdHMgdG8gZHVyYXRpb24tYmFzZWQgc3RpY2tpbmVzcyBhdHRyaWJ1dGVzIChgbGJfY29va2llYCkuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VsYXN0aWNsb2FkYmFsYW5jaW5nL2xhdGVzdC9hcHBsaWNhdGlvbi9zdGlja3ktc2Vzc2lvbnMuaHRtbFxuICAgKi9cbiAgcHVibGljIGVuYWJsZUNvb2tpZVN0aWNraW5lc3MoZHVyYXRpb246IER1cmF0aW9uLCBjb29raWVOYW1lPzogc3RyaW5nKSB7XG4gICAgaWYgKGR1cmF0aW9uLnRvU2Vjb25kcygpIDwgMSB8fCBkdXJhdGlvbi50b1NlY29uZHMoKSA+IDYwNDgwMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIlN0aWNraW5lc3MgY29va2llIGR1cmF0aW9uIHZhbHVlIG11c3QgYmUgYmV0d2VlbiAxIHNlY29uZCBhbmQgNyBkYXlzICg2MDQ4MDAgc2Vjb25kcykuXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoY29va2llTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoXG4gICAgICAgICFUb2tlbi5pc1VucmVzb2x2ZWQoY29va2llTmFtZSkgJiZcbiAgICAgICAgKGNvb2tpZU5hbWUuc3RhcnRzV2l0aChcIkFXU0FMQlwiKSB8fFxuICAgICAgICAgIGNvb2tpZU5hbWUuc3RhcnRzV2l0aChcIkFXU0FMQkFQUFwiKSB8fFxuICAgICAgICAgIGNvb2tpZU5hbWUuc3RhcnRzV2l0aChcIkFXU0FMQlRHXCIpKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIkFwcCBjb29raWUgbmFtZXMgdGhhdCBzdGFydCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJlZml4ZXMgYXJlIG5vdCBhbGxvd2VkOiBBV1NBTEIsIEFXU0FMQkFQUCwgYW5kIEFXU0FMQlRHOyB0aGV5J3JlIHJlc2VydmVkIGZvciB1c2UgYnkgdGhlIGxvYWQgYmFsYW5jZXIuXCIsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoY29va2llTmFtZSA9PT0gXCJcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBcHAgY29va2llIG5hbWUgY2Fubm90IGJlIGFuIGVtcHR5IHN0cmluZy5cIik7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwic3RpY2tpbmVzcy5lbmFibGVkXCIsIFwidHJ1ZVwiKTtcbiAgICBpZiAoY29va2llTmFtZSkge1xuICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJzdGlja2luZXNzLnR5cGVcIiwgXCJhcHBfY29va2llXCIpO1xuICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJzdGlja2luZXNzLmFwcF9jb29raWUuY29va2llX25hbWVcIiwgY29va2llTmFtZSk7XG4gICAgICB0aGlzLnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJzdGlja2luZXNzLmFwcF9jb29raWUuZHVyYXRpb25fc2Vjb25kc1wiLFxuICAgICAgICBkdXJhdGlvbi50b1NlY29uZHMoKS50b1N0cmluZygpLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJzdGlja2luZXNzLnR5cGVcIiwgXCJsYl9jb29raWVcIik7XG4gICAgICB0aGlzLnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJzdGlja2luZXNzLmxiX2Nvb2tpZS5kdXJhdGlvbl9zZWNvbmRzXCIsXG4gICAgICAgIGR1cmF0aW9uLnRvU2Vjb25kcygpLnRvU3RyaW5nKCksXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIGNvbm5lY3RhYmxlIGFzIGEgbWVtYmVyIG9mIHRoaXMgdGFyZ2V0IGdyb3VwLlxuICAgKlxuICAgKiBEb24ndCBjYWxsIHRoaXMgZGlyZWN0bHkuIEl0IHdpbGwgYmUgY2FsbGVkIGJ5IGxvYWQgYmFsYW5jaW5nIHRhcmdldHMuXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJDb25uZWN0YWJsZShjb25uZWN0YWJsZTogSUNvbm5lY3RhYmxlLCBwb3J0UmFuZ2U/OiBQb3J0KSB7XG4gICAgcG9ydFJhbmdlID0gcG9ydFJhbmdlIHx8IFBvcnQudGNwKHRoaXMuZGVmYXVsdFBvcnQpO1xuXG4gICAgLy8gTm90aWZ5IGFsbCBsaXN0ZW5lcnMgdGhhdCB3ZSBhbHJlYWR5IGtub3cgYWJvdXQgb2YgdGhpcyBuZXcgY29ubmVjdGFibGUuXG4gICAgLy8gVGhlbiByZW1lbWJlciBmb3IgbmV3IGxpc3RlbmVycyB0aGF0IG1pZ2h0IGdldCBhZGRlZCBsYXRlci5cbiAgICB0aGlzLmNvbm5lY3RhYmxlTWVtYmVycy5wdXNoKHsgY29ubmVjdGFibGUsIHBvcnRSYW5nZSB9KTtcbiAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIHRoaXMubGlzdGVuZXJzKSB7XG4gICAgICBsaXN0ZW5lci5yZWdpc3RlckNvbm5lY3RhYmxlKGNvbm5lY3RhYmxlLCBwb3J0UmFuZ2UpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIGxpc3RlbmVyIHRoYXQgaXMgbG9hZCBiYWxhbmNpbmcgdG8gdGhpcyB0YXJnZXQgZ3JvdXAuXG4gICAqXG4gICAqIERvbid0IGNhbGwgdGhpcyBkaXJlY3RseS4gSXQgd2lsbCBiZSBjYWxsZWQgYnkgbGlzdGVuZXJzLlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyTGlzdGVuZXIoXG4gICAgbGlzdGVuZXI6IElBcHBsaWNhdGlvbkxpc3RlbmVyLFxuICAgIGFzc29jaWF0aW5nQ29uc3RydWN0PzogSUNvbnN0cnVjdCxcbiAgKSB7XG4gICAgLy8gTm90aWZ5IHRoaXMgbGlzdGVuZXIgb2YgYWxsIGNvbm5lY3RhYmxlcyB0aGF0IHdlIGtub3cgYWJvdXQuXG4gICAgLy8gVGhlbiByZW1lbWJlciBmb3IgbmV3IGNvbm5lY3RhYmxlcyB0aGF0IG1pZ2h0IGdldCBhZGRlZCBsYXRlci5cbiAgICBmb3IgKGNvbnN0IG1lbWJlciBvZiB0aGlzLmNvbm5lY3RhYmxlTWVtYmVycykge1xuICAgICAgbGlzdGVuZXIucmVnaXN0ZXJDb25uZWN0YWJsZShtZW1iZXIuY29ubmVjdGFibGUsIG1lbWJlci5wb3J0UmFuZ2UpO1xuICAgIH1cbiAgICB0aGlzLmxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICB0aGlzLmxvYWRCYWxhbmNlckF0dGFjaGVkRGVwZW5kZW5jaWVzLmFkZChhc3NvY2lhdGluZ0NvbnN0cnVjdCA/PyBsaXN0ZW5lcik7XG4gIH1cblxuICAvKipcbiAgICogRnVsbCBuYW1lIG9mIGZpcnN0IGxvYWQgYmFsYW5jZXJcbiAgICovXG4gIHB1YmxpYyBnZXQgZmlyc3RMb2FkQmFsYW5jZXJGdWxsTmFtZSgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmxpc3RlbmVycy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJUaGUgVGFyZ2V0R3JvdXAgbmVlZHMgdG8gYmUgYXR0YWNoZWQgdG8gYSBMb2FkQmFsYW5jZXIgYmVmb3JlIHlvdSBjYW4gY2FsbCB0aGlzIG1ldGhvZFwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvYWRCYWxhbmNlck5hbWVGcm9tTGlzdGVuZXJBcm4odGhpcy5saXN0ZW5lcnNbMF0ubGlzdGVuZXJBcm4pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgZ2l2ZW4gbmFtZWQgbWV0cmljIGZvciB0aGlzIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXIgVGFyZ2V0IEdyb3VwXG4gICAqXG4gICAqIFJldHVybnMgdGhlIG1ldHJpYyBmb3IgdGhpcyB0YXJnZXQgZ3JvdXAgZnJvbSB0aGUgcG9pbnQgb2YgdmlldyBvZiB0aGUgZmlyc3RcbiAgICogbG9hZCBiYWxhbmNlciBsb2FkIGJhbGFuY2luZyB0byBpdC4gSWYgeW91IGhhdmUgbXVsdGlwbGUgbG9hZCBiYWxhbmNlcnMgbG9hZFxuICAgKiBzZW5kaW5nIHRyYWZmaWMgdG8gdGhlIHNhbWUgdGFyZ2V0IGdyb3VwLCB5b3Ugd2lsbCBoYXZlIHRvIG92ZXJyaWRlIHRoZSBkaW1lbnNpb25zXG4gICAqIG9uIHRoaXMgbWV0cmljLlxuICAgKlxuICAgKiBAZGVmYXVsdCBBdmVyYWdlIG92ZXIgNSBtaW51dGVzXG4gICAqL1xuICBwdWJsaWMgbWV0cmljKFxuICAgIG1ldHJpY05hbWU6IHN0cmluZyxcbiAgICBwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyxcbiAgKTogY2xvdWR3YXRjaC5NZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY3MuY3VzdG9tKG1ldHJpY05hbWUsIHByb3BzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIElQdjYgcmVxdWVzdHMgcmVjZWl2ZWQgYnkgdGhlIHRhcmdldCBncm91cFxuICAgKlxuICAgKiBAZGVmYXVsdCBTdW0gb3ZlciA1IG1pbnV0ZXNcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBgQXBwbGljYXRpb25UYXJnZXRHcm91cC5tZXRyaWNzLmlwdjZSZXF1ZXN0Q291bnRgYCBpbnN0ZWFkXG4gICAqL1xuICBwdWJsaWMgbWV0cmljSXB2NlJlcXVlc3RDb3VudChwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY3MuaXB2NlJlcXVlc3RDb3VudChwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiByZXF1ZXN0cyBwcm9jZXNzZWQgb3ZlciBJUHY0IGFuZCBJUHY2LlxuICAgKlxuICAgKiBUaGlzIGNvdW50IGluY2x1ZGVzIG9ubHkgdGhlIHJlcXVlc3RzIHdpdGggYSByZXNwb25zZSBnZW5lcmF0ZWQgYnkgYSB0YXJnZXQgb2YgdGhlIGxvYWQgYmFsYW5jZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0IFN1bSBvdmVyIDUgbWludXRlc1xuICAgKiBAZGVwcmVjYXRlZCBVc2UgYGBBcHBsaWNhdGlvblRhcmdldEdyb3VwLm1ldHJpY3MucmVxdWVzdENvdW50YGAgaW5zdGVhZFxuICAgKi9cbiAgcHVibGljIG1ldHJpY1JlcXVlc3RDb3VudChwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY3MucmVxdWVzdENvdW50KHByb3BzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIGhlYWx0aHkgaG9zdHMgaW4gdGhlIHRhcmdldCBncm91cFxuICAgKlxuICAgKiBAZGVmYXVsdCBBdmVyYWdlIG92ZXIgNSBtaW51dGVzXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgYEFwcGxpY2F0aW9uVGFyZ2V0R3JvdXAubWV0cmljcy5oZWFsdGh5SG9zdENvdW50YGAgaW5zdGVhZFxuICAgKi9cbiAgcHVibGljIG1ldHJpY0hlYWx0aHlIb3N0Q291bnQocHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNzLmhlYWx0aHlIb3N0Q291bnQocHJvcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgdW5oZWFsdGh5IGhvc3RzIGluIHRoZSB0YXJnZXQgZ3JvdXBcbiAgICpcbiAgICogQGRlZmF1bHQgQXZlcmFnZSBvdmVyIDUgbWludXRlc1xuICAgKiBAZGVwcmVjYXRlZCBVc2UgYGBBcHBsaWNhdGlvblRhcmdldEdyb3VwLm1ldHJpY3MudW5oZWFsdGh5SG9zdENvdW50YGAgaW5zdGVhZFxuICAgKi9cbiAgcHVibGljIG1ldHJpY1VuaGVhbHRoeUhvc3RDb3VudChwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY3MudW5oZWFsdGh5SG9zdENvdW50KHByb3BzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIEhUVFAgMnh4LzN4eC80eHgvNXh4IHJlc3BvbnNlIGNvZGVzIGdlbmVyYXRlZCBieSBhbGwgdGFyZ2V0cyBpbiB0aGlzIHRhcmdldCBncm91cC5cbiAgICpcbiAgICogVGhpcyBkb2VzIG5vdCBpbmNsdWRlIGFueSByZXNwb25zZSBjb2RlcyBnZW5lcmF0ZWQgYnkgdGhlIGxvYWQgYmFsYW5jZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0IFN1bSBvdmVyIDUgbWludXRlc1xuICAgKiBAZGVwcmVjYXRlZCBVc2UgYGBBcHBsaWNhdGlvblRhcmdldEdyb3VwLm1ldHJpY3MuaHR0cENvZGVUYXJnZXRgYCBpbnN0ZWFkXG4gICAqL1xuICBwdWJsaWMgbWV0cmljSHR0cENvZGVUYXJnZXQoXG4gICAgY29kZTogSHR0cENvZGVUYXJnZXQsXG4gICAgcHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMsXG4gICkge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY3MuaHR0cENvZGVUYXJnZXQoY29kZSwgcHJvcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBhdmVyYWdlIG51bWJlciBvZiByZXF1ZXN0cyByZWNlaXZlZCBieSBlYWNoIHRhcmdldCBpbiBhIHRhcmdldCBncm91cC5cbiAgICpcbiAgICogVGhlIG9ubHkgdmFsaWQgc3RhdGlzdGljIGlzIFN1bS4gTm90ZSB0aGF0IHRoaXMgcmVwcmVzZW50cyB0aGUgYXZlcmFnZSBub3QgdGhlIHN1bS5cbiAgICpcbiAgICogQGRlZmF1bHQgU3VtIG92ZXIgNSBtaW51dGVzXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgQXBwbGljYXRpb25UYXJnZXRHcm91cC5tZXRyaWNzLnJlcXVlc3RDb3VudFBlclRhcmdldGAgaW5zdGVhZFxuICAgKi9cbiAgcHVibGljIG1ldHJpY1JlcXVlc3RDb3VudFBlclRhcmdldChwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY3MucmVxdWVzdENvdW50UGVyVGFyZ2V0KHByb3BzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIGNvbm5lY3Rpb25zIHRoYXQgd2VyZSBub3Qgc3VjY2Vzc2Z1bGx5IGVzdGFibGlzaGVkIGJldHdlZW4gdGhlIGxvYWQgYmFsYW5jZXIgYW5kIHRhcmdldC5cbiAgICpcbiAgICogQGRlZmF1bHQgU3VtIG92ZXIgNSBtaW51dGVzXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgYEFwcGxpY2F0aW9uVGFyZ2V0R3JvdXAubWV0cmljcy50YXJnZXRDb25uZWN0aW9uRXJyb3JDb3VudGBgIGluc3RlYWRcbiAgICovXG4gIHB1YmxpYyBtZXRyaWNUYXJnZXRDb25uZWN0aW9uRXJyb3JDb3VudChwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY3MudGFyZ2V0Q29ubmVjdGlvbkVycm9yQ291bnQocHJvcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB0aW1lIGVsYXBzZWQsIGluIHNlY29uZHMsIGFmdGVyIHRoZSByZXF1ZXN0IGxlYXZlcyB0aGUgbG9hZCBiYWxhbmNlciB1bnRpbCBhIHJlc3BvbnNlIGZyb20gdGhlIHRhcmdldCBpcyByZWNlaXZlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgQXZlcmFnZSBvdmVyIDUgbWludXRlc1xuICAgKiBAZGVwcmVjYXRlZCBVc2UgYGBBcHBsaWNhdGlvblRhcmdldEdyb3VwLm1ldHJpY3MudGFyZ2V0UmVzcG9uc2VUaW1lYGAgaW5zdGVhZFxuICAgKi9cbiAgcHVibGljIG1ldHJpY1RhcmdldFJlc3BvbnNlVGltZShwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY3MudGFyZ2V0UmVzcG9uc2VUaW1lKHByb3BzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIFRMUyBjb25uZWN0aW9ucyBpbml0aWF0ZWQgYnkgdGhlIGxvYWQgYmFsYW5jZXIgdGhhdCBkaWQgbm90IGVzdGFibGlzaCBhIHNlc3Npb24gd2l0aCB0aGUgdGFyZ2V0LlxuICAgKlxuICAgKiBQb3NzaWJsZSBjYXVzZXMgaW5jbHVkZSBhIG1pc21hdGNoIG9mIGNpcGhlcnMgb3IgcHJvdG9jb2xzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBTdW0gb3ZlciA1IG1pbnV0ZXNcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBgQXBwbGljYXRpb25UYXJnZXRHcm91cC5tZXRyaWNzLnRsc05lZ290aWF0aW9uRXJyb3JDb3VudGBgIGluc3RlYWRcbiAgICovXG4gIHB1YmxpYyBtZXRyaWNUYXJnZXRUTFNOZWdvdGlhdGlvbkVycm9yQ291bnQoXG4gICAgcHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMsXG4gICkge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY3MudGFyZ2V0VExTTmVnb3RpYXRpb25FcnJvckNvdW50KHByb3BzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB2YWxpZGF0ZVRhcmdldEdyb3VwKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCByZXQgPSBzdXBlci52YWxpZGF0ZVRhcmdldEdyb3VwKCk7XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnRhcmdldFR5cGUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy50YXJnZXRUeXBlICE9PSBUYXJnZXRUeXBlLkxBTUJEQSAmJlxuICAgICAgKHRoaXMucHJvdG9jb2wgPT09IHVuZGVmaW5lZCB8fCB0aGlzLnBvcnQgPT09IHVuZGVmaW5lZClcbiAgICApIHtcbiAgICAgIHJldC5wdXNoKFxuICAgICAgICBcIkF0IGxlYXN0IG9uZSBvZiAncG9ydCcgb3IgJ3Byb3RvY29sJyBpcyByZXF1aXJlZCBmb3IgYSBub24tTGFtYmRhIFRhcmdldEdyb3VwXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmhlYWx0aENoZWNrKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuaGVhbHRoQ2hlY2suaW50ZXJ2YWwgJiZcbiAgICAgICAgdGhpcy5oZWFsdGhDaGVjay50aW1lb3V0ICYmXG4gICAgICAgIHRoaXMuaGVhbHRoQ2hlY2suaW50ZXJ2YWwudG9NaWxsaXNlY29uZHMoKSA8PVxuICAgICAgICAgIHRoaXMuaGVhbHRoQ2hlY2sudGltZW91dC50b01pbGxpc2Vjb25kcygpXG4gICAgICApIHtcbiAgICAgICAgcmV0LnB1c2goXG4gICAgICAgICAgYEhlYWx0aGNoZWNrIGludGVydmFsICR7dGhpcy5oZWFsdGhDaGVjay5pbnRlcnZhbC50b0h1bWFuU3RyaW5nKCl9IG11c3QgYmUgZ3JlYXRlciB0aGFuIHRoZSB0aW1lb3V0ICR7dGhpcy5oZWFsdGhDaGVjay50aW1lb3V0LnRvSHVtYW5TdHJpbmcoKX1gLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5oZWFsdGhDaGVjay5wcm90b2NvbCkge1xuICAgICAgICBpZiAoIUFMQl9IRUFMVEhfQ0hFQ0tfUFJPVE9DT0xTLmluY2x1ZGVzKHRoaXMuaGVhbHRoQ2hlY2sucHJvdG9jb2wpKSB7XG4gICAgICAgICAgcmV0LnB1c2goXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIGBIZWFsdGggY2hlY2sgcHJvdG9jb2wgJyR7dGhpcy5oZWFsdGhDaGVjay5wcm90b2NvbH0nIGlzIG5vdCBzdXBwb3J0ZWQuIGAsXG4gICAgICAgICAgICAgIGBNdXN0IGJlIG9uZSBvZiBbJHtBTEJfSEVBTFRIX0NIRUNLX1BST1RPQ09MUy5qb2luKFwiLCBcIil9XWAsXG4gICAgICAgICAgICBdLmpvaW4oXCJcIiksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH1cbn1cblxuLyoqXG4gKiBBIGNvbm5lY3RhYmxlIG1lbWJlciBvZiBhIHRhcmdldCBncm91cFxuICovXG5pbnRlcmZhY2UgQ29ubmVjdGFibGVNZW1iZXIge1xuICAvKipcbiAgICogVGhlIGNvbm5lY3RhYmxlIG1lbWJlclxuICAgKi9cbiAgY29ubmVjdGFibGU6IElDb25uZWN0YWJsZTtcblxuICAvKipcbiAgICogVGhlIHBvcnQgKHJhbmdlKSB0aGUgbWVtYmVyIGlzIGxpc3RlbmluZyBvblxuICAgKi9cbiAgcG9ydFJhbmdlOiBQb3J0O1xufVxuXG4vKipcbiAqIEEgVGFyZ2V0IEdyb3VwIGZvciBBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2Vyc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIElBcHBsaWNhdGlvblRhcmdldEdyb3VwIGV4dGVuZHMgSVRhcmdldEdyb3VwIHtcbiAgLyoqXG4gICAqIEFsbCBtZXRyaWNzIGF2YWlsYWJsZSBmb3IgdGhpcyB0YXJnZXQgZ3JvdXAuXG4gICAqL1xuICByZWFkb25seSBtZXRyaWNzOiBJQXBwbGljYXRpb25UYXJnZXRHcm91cE1ldHJpY3M7XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGEgbGlzdGVuZXIgdGhhdCBpcyBsb2FkIGJhbGFuY2luZyB0byB0aGlzIHRhcmdldCBncm91cC5cbiAgICpcbiAgICogRG9uJ3QgY2FsbCB0aGlzIGRpcmVjdGx5LiBJdCB3aWxsIGJlIGNhbGxlZCBieSBsaXN0ZW5lcnMuXG4gICAqL1xuICByZWdpc3Rlckxpc3RlbmVyKFxuICAgIGxpc3RlbmVyOiBJQXBwbGljYXRpb25MaXN0ZW5lcixcbiAgICBhc3NvY2lhdGluZ0NvbnN0cnVjdD86IElDb25zdHJ1Y3QsXG4gICk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGEgY29ubmVjdGFibGUgYXMgYSBtZW1iZXIgb2YgdGhpcyB0YXJnZXQgZ3JvdXAuXG4gICAqXG4gICAqIERvbid0IGNhbGwgdGhpcyBkaXJlY3RseS4gSXQgd2lsbCBiZSBjYWxsZWQgYnkgbG9hZCBiYWxhbmNpbmcgdGFyZ2V0cy5cbiAgICovXG4gIHJlZ2lzdGVyQ29ubmVjdGFibGUoY29ubmVjdGFibGU6IElDb25uZWN0YWJsZSwgcG9ydFJhbmdlPzogUG9ydCk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEFkZCBhIGxvYWQgYmFsYW5jaW5nIHRhcmdldCB0byB0aGlzIHRhcmdldCBncm91cFxuICAgKi9cbiAgYWRkVGFyZ2V0KC4uLnRhcmdldHM6IElBcHBsaWNhdGlvbkxvYWRCYWxhbmNlclRhcmdldFtdKTogdm9pZDtcbn1cblxuLyoqXG4gKiBBbiBpbXBvcnRlZCBhcHBsaWNhdGlvbiB0YXJnZXQgZ3JvdXBcbiAqL1xuY2xhc3MgSW1wb3J0ZWRBcHBsaWNhdGlvblRhcmdldEdyb3VwXG4gIGV4dGVuZHMgSW1wb3J0ZWRUYXJnZXRHcm91cEJhc2VcbiAgaW1wbGVtZW50cyBJQXBwbGljYXRpb25UYXJnZXRHcm91cFxue1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRyaWNzPzogSUFwcGxpY2F0aW9uVGFyZ2V0R3JvdXBNZXRyaWNzO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IFRhcmdldEdyb3VwQXR0cmlidXRlcyxcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG4gICAgaWYgKHRoaXMubG9hZEJhbGFuY2VyQXJucyAhPSBOT19MT0FEQkFMQU5DRVJfQVJOUykge1xuICAgICAgY29uc3QgdGFyZ2V0R3JvdXBGdWxsTmFtZSA9IHBhcnNlVGFyZ2V0R3JvdXBGdWxsTmFtZSh0aGlzLnRhcmdldEdyb3VwQXJuKTtcbiAgICAgIGNvbnN0IGZpcnN0TG9hZEJhbGFuY2VyRnVsbE5hbWUgPSBwYXJzZUxvYWRCYWxhbmNlckZ1bGxOYW1lKFxuICAgICAgICB0aGlzLmxvYWRCYWxhbmNlckFybnMsXG4gICAgICApO1xuICAgICAgdGhpcy5fbWV0cmljcyA9IG5ldyBBcHBsaWNhdGlvblRhcmdldEdyb3VwTWV0cmljcyhcbiAgICAgICAgdGhpcyxcbiAgICAgICAgdGFyZ2V0R3JvdXBGdWxsTmFtZSxcbiAgICAgICAgZmlyc3RMb2FkQmFsYW5jZXJGdWxsTmFtZSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyTGlzdGVuZXIoXG4gICAgX2xpc3RlbmVyOiBJQXBwbGljYXRpb25MaXN0ZW5lcixcbiAgICBfYXNzb2NpYXRpbmdDb25zdHJ1Y3Q/OiBJQ29uc3RydWN0LFxuICApIHtcbiAgICAvLyBOb3RoaW5nIHRvIGRvLCB3ZSBrbm93IG5vdGhpbmcgb2Ygb3VyIG1lbWJlcnNcbiAgICAvLyBcIkBhd3MtY2RrL2F3cy1lbGJ2MjphbGJUYXJnZXRHcm91cENhbm5vdFJlZ2lzdGVyTGlzdGVuZXJcIixcbiAgICBBbm5vdGF0aW9ucy5vZih0aGlzKS5hZGRXYXJuaW5nKFxuICAgICAgXCJDYW5ub3QgcmVnaXN0ZXIgbGlzdGVuZXIgb24gaW1wb3J0ZWQgdGFyZ2V0IGdyb3VwIC0tIHNlY3VyaXR5IGdyb3VwcyBtaWdodCBuZWVkIHRvIGJlIHVwZGF0ZWQgbWFudWFsbHlcIixcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyQ29ubmVjdGFibGUoXG4gICAgX2Nvbm5lY3RhYmxlOiBJQ29ubmVjdGFibGUsXG4gICAgX3BvcnRSYW5nZT86IFBvcnQgfCB1bmRlZmluZWQsXG4gICk6IHZvaWQge1xuICAgIC8vIFwiQGF3cy1jZGsvYXdzLWVsYnYyOmFsYlRhcmdldEdyb3VwQ2Fubm90UmVnaXN0ZXJDb25uZWN0YWJsZVwiLFxuICAgIEFubm90YXRpb25zLm9mKHRoaXMpLmFkZFdhcm5pbmcoXG4gICAgICBcIkNhbm5vdCByZWdpc3RlciBjb25uZWN0YWJsZSBvbiBpbXBvcnRlZCB0YXJnZXQgZ3JvdXAgLS0gc2VjdXJpdHkgZ3JvdXBzIG1pZ2h0IG5lZWQgdG8gYmUgdXBkYXRlZCBtYW51YWxseVwiLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgYWRkVGFyZ2V0KC4uLnRhcmdldHM6IElBcHBsaWNhdGlvbkxvYWRCYWxhbmNlclRhcmdldFtdKSB7XG4gICAgZm9yIChjb25zdCB0YXJnZXQgb2YgdGFyZ2V0cykge1xuICAgICAgY29uc3QgcmVzdWx0ID0gdGFyZ2V0LmF0dGFjaFRvQXBwbGljYXRpb25UYXJnZXRHcm91cCh0aGlzKTtcblxuICAgICAgaWYgKHJlc3VsdC50YXJnZXRKc29uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiQ2Fubm90IGFkZCBhIG5vbi1zZWxmIHJlZ2lzdGVyaW5nIHRhcmdldCB0byBhbiBpbXBvcnRlZCBUYXJnZXRHcm91cC4gQ3JlYXRlIGEgbmV3IFRhcmdldEdyb3VwIGluc3RlYWQuXCIsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBtZXRyaWNzKCk6IElBcHBsaWNhdGlvblRhcmdldEdyb3VwTWV0cmljcyB7XG4gICAgaWYgKCF0aGlzLl9tZXRyaWNzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiVGhlIGltcG9ydGVkIEFwcGxpY2F0aW9uVGFyZ2V0R3JvdXAgbmVlZHMgdGhlIGFzc29jaWF0ZWQgQXBwbGljYXRpb25CYWxhbmNlciB0byBiZSBhYmxlIHRvIHByb3ZpZGUgbWV0cmljcy4gXCIgK1xuICAgICAgICAgIFwiUGxlYXNlIHNwZWNpZnkgdGhlIEFSTiB2YWx1ZSB3aGVuIGltcG9ydGluZyBpdC5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9tZXRyaWNzO1xuICB9XG59XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBjb25zdHJ1Y3RzIHRoYXQgY2FuIGJlIHRhcmdldHMgb2YgYW4gYXBwbGljYXRpb24gbG9hZCBiYWxhbmNlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIElBcHBsaWNhdGlvbkxvYWRCYWxhbmNlclRhcmdldCB7XG4gIC8qKlxuICAgKiBBdHRhY2ggbG9hZC1iYWxhbmNlZCB0YXJnZXQgdG8gYSBUYXJnZXRHcm91cFxuICAgKlxuICAgKiBNYXkgcmV0dXJuIEpTT04gdG8gZGlyZWN0bHkgYWRkIHRvIHRoZSBbVGFyZ2V0c10gbGlzdCwgb3IgcmV0dXJuIHVuZGVmaW5lZFxuICAgKiBpZiB0aGUgdGFyZ2V0IHdpbGwgcmVnaXN0ZXIgaXRzZWxmIHdpdGggdGhlIGxvYWQgYmFsYW5jZXIuXG4gICAqL1xuICBhdHRhY2hUb0FwcGxpY2F0aW9uVGFyZ2V0R3JvdXAoXG4gICAgdGFyZ2V0R3JvdXA6IElBcHBsaWNhdGlvblRhcmdldEdyb3VwLFxuICApOiBMb2FkQmFsYW5jZXJUYXJnZXRQcm9wcztcbn1cblxuY29uc3QgQUxCX0hFQUxUSF9DSEVDS19QUk9UT0NPTFMgPSBbTGJQcm90b2NvbC5IVFRQLCBMYlByb3RvY29sLkhUVFBTXTtcbiJdfQ==
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ListenerCondition providers definition.
|
|
3
|
+
*/
|
|
4
|
+
export declare abstract class ListenerCondition {
|
|
5
|
+
/**
|
|
6
|
+
* Create a host-header listener rule condition
|
|
7
|
+
*
|
|
8
|
+
* @param values Hosts for host headers
|
|
9
|
+
*/
|
|
10
|
+
static hostHeaders(values: string[]): ListenerCondition;
|
|
11
|
+
/**
|
|
12
|
+
* Create a http-header listener rule condition
|
|
13
|
+
*
|
|
14
|
+
* @param name HTTP header name
|
|
15
|
+
* @param values HTTP header values
|
|
16
|
+
*/
|
|
17
|
+
static httpHeader(name: string, values: string[]): ListenerCondition;
|
|
18
|
+
/**
|
|
19
|
+
* Create a http-request-method listener rule condition
|
|
20
|
+
*
|
|
21
|
+
* @param values HTTP request methods
|
|
22
|
+
*/
|
|
23
|
+
static httpRequestMethods(values: string[]): ListenerCondition;
|
|
24
|
+
/**
|
|
25
|
+
* Create a path-pattern listener rule condition
|
|
26
|
+
*
|
|
27
|
+
* @param values Path patterns
|
|
28
|
+
*/
|
|
29
|
+
static pathPatterns(values: string[]): ListenerCondition;
|
|
30
|
+
/**
|
|
31
|
+
* Create a query-string listener rule condition
|
|
32
|
+
*
|
|
33
|
+
* @param values Query string key/value pairs
|
|
34
|
+
*/
|
|
35
|
+
static queryStrings(values: QueryStringCondition[]): ListenerCondition;
|
|
36
|
+
/**
|
|
37
|
+
* Create a source-ip listener rule condition
|
|
38
|
+
*
|
|
39
|
+
* @param values Source ips
|
|
40
|
+
*/
|
|
41
|
+
static sourceIps(values: string[]): ListenerCondition;
|
|
42
|
+
/**
|
|
43
|
+
* Render the raw Cfn listener rule condition object.
|
|
44
|
+
*/
|
|
45
|
+
abstract renderRawCondition(): any;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Properties for the key/value pair of the query string
|
|
49
|
+
*/
|
|
50
|
+
export interface QueryStringCondition {
|
|
51
|
+
/**
|
|
52
|
+
* The query string key for the condition
|
|
53
|
+
*
|
|
54
|
+
* @default - Any key can be matched.
|
|
55
|
+
*/
|
|
56
|
+
readonly key?: string;
|
|
57
|
+
/**
|
|
58
|
+
* The query string value for the condition
|
|
59
|
+
*/
|
|
60
|
+
readonly value: string;
|
|
61
|
+
}
|