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,306 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.Ipam = exports.IpamScopeType = exports.AwsServiceName = exports.IpamPoolPublicIpSource = exports.AddressFamily = 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/aws-ec2-alpha/lib/ipam.ts
|
|
7
|
+
const provider_aws_1 = require("@cdktf/provider-aws");
|
|
8
|
+
const cdktf_1 = require("cdktf");
|
|
9
|
+
const aws_construct_1 = require("../aws-construct");
|
|
10
|
+
// TODO: Use TagManager and tag-aspect instead
|
|
11
|
+
const aws_tags_1 = require("../aws-tags");
|
|
12
|
+
// import { Tags } from "../tag-aspect";
|
|
13
|
+
/**
|
|
14
|
+
* Represents the address family for IP addresses in an IPAM pool.
|
|
15
|
+
* IP_V4 - Represents the IPv4 address family.
|
|
16
|
+
* IP_V6 - Represents the IPv6 address family.
|
|
17
|
+
* @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipampool.html#cfn-ec2-ipampool-addressfamily
|
|
18
|
+
*/
|
|
19
|
+
var AddressFamily;
|
|
20
|
+
(function (AddressFamily) {
|
|
21
|
+
/**
|
|
22
|
+
* Represents the IPv4 address family.
|
|
23
|
+
* Allowed under public and private pool.
|
|
24
|
+
*/
|
|
25
|
+
AddressFamily["IP_V4"] = "ipv4";
|
|
26
|
+
/**
|
|
27
|
+
* Represents the IPv6 address family.
|
|
28
|
+
* Only allowed under public pool.
|
|
29
|
+
*/
|
|
30
|
+
AddressFamily["IP_V6"] = "ipv6";
|
|
31
|
+
})(AddressFamily || (exports.AddressFamily = AddressFamily = {}));
|
|
32
|
+
/**
|
|
33
|
+
* The IP address source for pools in the public scope.
|
|
34
|
+
* Only used for provisioning IP address CIDRs to pools in the public scope.
|
|
35
|
+
* @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipampool.html#cfn-ec2-ipampool-publicipsource
|
|
36
|
+
*/
|
|
37
|
+
var IpamPoolPublicIpSource;
|
|
38
|
+
(function (IpamPoolPublicIpSource) {
|
|
39
|
+
/**
|
|
40
|
+
* BYOIP Ipv6 to be registered under IPAM
|
|
41
|
+
*/
|
|
42
|
+
IpamPoolPublicIpSource["BYOIP"] = "byoip";
|
|
43
|
+
/**
|
|
44
|
+
* Amazon Provided Ipv6 range
|
|
45
|
+
*/
|
|
46
|
+
IpamPoolPublicIpSource["AMAZON"] = "amazon";
|
|
47
|
+
})(IpamPoolPublicIpSource || (exports.IpamPoolPublicIpSource = IpamPoolPublicIpSource = {}));
|
|
48
|
+
/**
|
|
49
|
+
* Limits which service in AWS that the pool can be used in
|
|
50
|
+
*/
|
|
51
|
+
var AwsServiceName;
|
|
52
|
+
(function (AwsServiceName) {
|
|
53
|
+
/**
|
|
54
|
+
* Allows users to use space for Elastic IP addresses and VPCs
|
|
55
|
+
*/
|
|
56
|
+
AwsServiceName["EC2"] = "ec2";
|
|
57
|
+
})(AwsServiceName || (exports.AwsServiceName = AwsServiceName = {}));
|
|
58
|
+
/**
|
|
59
|
+
* Refers to two possible scope types under IPAM
|
|
60
|
+
*/
|
|
61
|
+
var IpamScopeType;
|
|
62
|
+
(function (IpamScopeType) {
|
|
63
|
+
/**
|
|
64
|
+
* Default scopes created by IPAM
|
|
65
|
+
*/
|
|
66
|
+
IpamScopeType["DEFAULT"] = "default";
|
|
67
|
+
/**
|
|
68
|
+
* Custom scope created using method
|
|
69
|
+
*/
|
|
70
|
+
IpamScopeType["CUSTOM"] = "custom";
|
|
71
|
+
})(IpamScopeType || (exports.IpamScopeType = IpamScopeType = {}));
|
|
72
|
+
const NAME_TAG = "Name";
|
|
73
|
+
/**
|
|
74
|
+
* Creates new IPAM Pool
|
|
75
|
+
* Pools enable you to organize your IP addresses according to your routing and security needs
|
|
76
|
+
* @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipampool.html
|
|
77
|
+
* @see https://registry.terraform.io/providers/hashicorp/aws/5.68.0/docs/resources/vpc_ipam_pool
|
|
78
|
+
* @resource aws_vpc_ipam_pool
|
|
79
|
+
* @internal
|
|
80
|
+
*/
|
|
81
|
+
class IpamPool extends aws_construct_1.AwsConstructBase {
|
|
82
|
+
get ipamPoolOutputs() {
|
|
83
|
+
return {
|
|
84
|
+
ipamPoolId: this.ipamPoolId,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
get outputs() {
|
|
88
|
+
return this.ipamPoolOutputs;
|
|
89
|
+
}
|
|
90
|
+
constructor(scope, id, props) {
|
|
91
|
+
super(scope, id, props);
|
|
92
|
+
/**
|
|
93
|
+
* Pool CIDR for IPv6 to be provisioned with Public IP source set to 'Amazon'
|
|
94
|
+
*/
|
|
95
|
+
this.ipamCidrs = [];
|
|
96
|
+
/**
|
|
97
|
+
* Pool CIDR for IPv4 to be provisioned using IPAM
|
|
98
|
+
* Required to check for subnet IP range is within the VPC range
|
|
99
|
+
*/
|
|
100
|
+
this.ipamIpv4Cidrs = [];
|
|
101
|
+
const ipamPoolName = props.ipamPoolName ??
|
|
102
|
+
cdktf_1.Lazy.stringValue({
|
|
103
|
+
produce: () => this.stack.uniqueResourceName(this, {
|
|
104
|
+
maxLength: 128,
|
|
105
|
+
allowedSpecialCharacters: "_",
|
|
106
|
+
}),
|
|
107
|
+
});
|
|
108
|
+
if (props.addressFamily === AddressFamily.IP_V6 && !props.awsService) {
|
|
109
|
+
throw new Error("awsService is required when addressFamily is set to ipv6");
|
|
110
|
+
}
|
|
111
|
+
//Add tags to the IPAM Pool if name is provided
|
|
112
|
+
if (ipamPoolName) {
|
|
113
|
+
aws_tags_1.Tags.of(this).add(NAME_TAG, ipamPoolName);
|
|
114
|
+
}
|
|
115
|
+
this._ipamPool = new provider_aws_1.vpcIpamPool.VpcIpamPool(this, "Resource", {
|
|
116
|
+
addressFamily: props.addressFamily,
|
|
117
|
+
locale: props.locale,
|
|
118
|
+
ipamScopeId: props.ipamScopeId,
|
|
119
|
+
publicIpSource: props.publicIpSource,
|
|
120
|
+
awsService: props.awsService,
|
|
121
|
+
allocationResourceTags: props.allocationResourceTags,
|
|
122
|
+
});
|
|
123
|
+
this.ipamPoolId = this._ipamPool.id;
|
|
124
|
+
// provisionedCidrs: props.ipv4ProvisionedCidrs?.map((cidr) => ({ cidr })),
|
|
125
|
+
// Populating to check for subnet range against all IPv4 ranges assigned to VPC including IPAM
|
|
126
|
+
props.ipv4ProvisionedCidrs?.forEach((cidr) => {
|
|
127
|
+
this.ipamIpv4Cidrs.push(cidr);
|
|
128
|
+
// Terraform VpcIpamPool does not support inline "ProvisionedCidrs" property
|
|
129
|
+
// https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipampool.html#cfn-ec2-ipampool-provisionedcidrs
|
|
130
|
+
this.provisionCidr("ProvisionedCidr", { cidr });
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* A CIDR provisioned to an IPAM pool.
|
|
135
|
+
* @see https://registry.terraform.io/providers/hashicorp/aws/5.68.0/docs/resources/vpc_ipam_pool_cidr
|
|
136
|
+
* @param id Name of Resource
|
|
137
|
+
* @param options Either a CIDR or netmask length must be provided
|
|
138
|
+
* @returns aws_vpc_ipam_pool_cidr
|
|
139
|
+
*/
|
|
140
|
+
provisionCidr(id, options) {
|
|
141
|
+
// TODO: Error if neither or both cidr and netmask length are provided
|
|
142
|
+
const cidr = new provider_aws_1.vpcIpamPoolCidr.VpcIpamPoolCidr(this, id, {
|
|
143
|
+
...options,
|
|
144
|
+
ipamPoolId: this.ipamPoolId,
|
|
145
|
+
});
|
|
146
|
+
this.ipamCidrs.push(cidr);
|
|
147
|
+
return cidr;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Creates custom Ipam Scope, custom IPAM scopes can only be private
|
|
152
|
+
* (can be used for adding custom scopes to an existing IPAM)
|
|
153
|
+
* @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipamscope.html
|
|
154
|
+
* @see https://registry.terraform.io/providers/hashicorp/aws/5.68.0/docs/resources/vpc_ipam_scope
|
|
155
|
+
* @resource aws_vpc_ipam_scope
|
|
156
|
+
*/
|
|
157
|
+
class IpamScope extends aws_construct_1.AwsConstructBase {
|
|
158
|
+
get ipamScopeOutputs() {
|
|
159
|
+
return {
|
|
160
|
+
ipamScopeId: this.scopeId,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
get outputs() {
|
|
164
|
+
return this.ipamScopeOutputs;
|
|
165
|
+
}
|
|
166
|
+
constructor(scope, id, props) {
|
|
167
|
+
super(scope, id);
|
|
168
|
+
this._ipamScope = new provider_aws_1.vpcIpamScope.VpcIpamScope(scope, "Resource", {
|
|
169
|
+
ipamId: props.ipamId,
|
|
170
|
+
});
|
|
171
|
+
aws_tags_1.Tags.of(this._ipamScope).add(NAME_TAG, props.ipamScopeName ?? "CustomIpamScope");
|
|
172
|
+
this.scopeId = this._ipamScope.id;
|
|
173
|
+
this.scopeType = IpamScopeType.CUSTOM;
|
|
174
|
+
this.scope = scope;
|
|
175
|
+
this.props = props;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Adds a pool to the IPAM scope.
|
|
179
|
+
* @external
|
|
180
|
+
*/
|
|
181
|
+
addPool(id, options) {
|
|
182
|
+
return createIpamPool(this.scope, id, this.props, options, this.scopeId);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Base class for IPAM default scopes.
|
|
187
|
+
*/
|
|
188
|
+
class IpamScopeBase {
|
|
189
|
+
get ipamScopeOutputs() {
|
|
190
|
+
return {
|
|
191
|
+
ipamScopeId: this.scopeId,
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
get outputs() {
|
|
195
|
+
return this.ipamScopeOutputs;
|
|
196
|
+
}
|
|
197
|
+
constructor(scope, scopeId, props, scopeType) {
|
|
198
|
+
this.scope = scope;
|
|
199
|
+
this.scopeId = scopeId;
|
|
200
|
+
this.props = props;
|
|
201
|
+
this.scopeType = scopeType;
|
|
202
|
+
this.scopeType = IpamScopeType.DEFAULT;
|
|
203
|
+
if (!props.ipamScopeId) {
|
|
204
|
+
throw new Error("ipamScopeId is required");
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
this.scopeId = props.ipamScopeId;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Adds a pool to the IPAM scope.
|
|
212
|
+
* @external
|
|
213
|
+
*/
|
|
214
|
+
addPool(id, options) {
|
|
215
|
+
return createIpamPool(this.scope, id, this.props, options, this.scopeId);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Creates new IPAM with default public and private scope
|
|
220
|
+
* @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipamscope.html
|
|
221
|
+
* @see https://registry.terraform.io/providers/hashicorp/aws/5.68.0/docs/resources/vpc_ipam
|
|
222
|
+
* @resource aws_vpc_ipam
|
|
223
|
+
*/
|
|
224
|
+
class Ipam extends aws_construct_1.AwsConstructBase {
|
|
225
|
+
get ipamOutputs() {
|
|
226
|
+
return {
|
|
227
|
+
ipamId: this.ipamId,
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
get outputs() {
|
|
231
|
+
return this.ipamOutputs;
|
|
232
|
+
}
|
|
233
|
+
constructor(scope, id, props) {
|
|
234
|
+
super(scope, id);
|
|
235
|
+
/**
|
|
236
|
+
* List of scopes created under this IPAM
|
|
237
|
+
*/
|
|
238
|
+
this.scopes = [];
|
|
239
|
+
if (props?.ipamName) {
|
|
240
|
+
aws_tags_1.Tags.of(this).add(NAME_TAG, props.ipamName);
|
|
241
|
+
}
|
|
242
|
+
if (!props?.operatingRegion && !this.env.region) {
|
|
243
|
+
throw new Error("Please provide at least one operating region");
|
|
244
|
+
}
|
|
245
|
+
this.operatingRegions = props?.operatingRegion ?? [this.env.region];
|
|
246
|
+
this.ipamName = props?.ipamName;
|
|
247
|
+
this._ipam = new provider_aws_1.vpcIpam.VpcIpam(this, "Ipam", {
|
|
248
|
+
operatingRegions: this.operatingRegions
|
|
249
|
+
? this.operatingRegions.map((region) => ({ regionName: region }))
|
|
250
|
+
: [],
|
|
251
|
+
});
|
|
252
|
+
this.node.defaultChild = this._ipam;
|
|
253
|
+
this.ipamId = this._ipam.id;
|
|
254
|
+
this.publicScope = new IpamScopeBase(this, "DefaultPublicScope", {
|
|
255
|
+
ipamOperatingRegions: this.operatingRegions,
|
|
256
|
+
ipamId: this._ipam.id,
|
|
257
|
+
ipamScopeId: this._ipam.publicDefaultScopeId,
|
|
258
|
+
});
|
|
259
|
+
this.privateScope = new IpamScopeBase(this, "DefaultPrivateScope", {
|
|
260
|
+
ipamOperatingRegions: this.operatingRegions,
|
|
261
|
+
ipamId: this._ipam.id,
|
|
262
|
+
ipamScopeId: this._ipam.privateDefaultScopeId,
|
|
263
|
+
});
|
|
264
|
+
this.scopes.push(this.publicScope, this.privateScope);
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Function to add custom scope to an existing IPAM
|
|
268
|
+
* Custom scopes can only be private
|
|
269
|
+
*/
|
|
270
|
+
addScope(scope, id, options) {
|
|
271
|
+
const ipamScope = new IpamScope(scope, id, {
|
|
272
|
+
...options,
|
|
273
|
+
ipamId: this.ipamId,
|
|
274
|
+
ipamOperatingRegions: this.operatingRegions,
|
|
275
|
+
});
|
|
276
|
+
this.scopes.push(ipamScope);
|
|
277
|
+
return ipamScope;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
exports.Ipam = Ipam;
|
|
281
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
282
|
+
Ipam[_a] = { fqn: "terraconstructs.aws.compute.alpha.Ipam", version: "0.0.12" };
|
|
283
|
+
/**
|
|
284
|
+
* Function to create IpamPool under scope
|
|
285
|
+
* @internal
|
|
286
|
+
*/
|
|
287
|
+
function createIpamPool(scope, id, scopeOptions, poolOptions, scopeId) {
|
|
288
|
+
const isLocaleInOperatingRegions = scopeOptions.ipamOperatingRegions
|
|
289
|
+
? scopeOptions.ipamOperatingRegions
|
|
290
|
+
.map((region) => ({ regionName: region }))
|
|
291
|
+
.some((region) => region.regionName === poolOptions.locale)
|
|
292
|
+
: false;
|
|
293
|
+
if (!isLocaleInOperatingRegions) {
|
|
294
|
+
throw new Error(`The provided locale '${poolOptions.locale}' is not in the operating regions.`);
|
|
295
|
+
}
|
|
296
|
+
return new IpamPool(scope, id, {
|
|
297
|
+
ipamPoolName: poolOptions.ipamPoolName,
|
|
298
|
+
addressFamily: poolOptions.addressFamily,
|
|
299
|
+
ipv4ProvisionedCidrs: poolOptions.ipv4ProvisionedCidrs,
|
|
300
|
+
ipamScopeId: scopeId,
|
|
301
|
+
locale: poolOptions.locale,
|
|
302
|
+
publicIpSource: poolOptions.publicIpSource,
|
|
303
|
+
awsService: poolOptions.awsService,
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXBhbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hd3MvY29tcHV0ZS9pcGFtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsMkZBQTJGO0FBRTNGLHNEQUs2QjtBQUM3QixpQ0FBNkI7QUFFN0Isb0RBSTBCO0FBQzFCLDhDQUE4QztBQUM5QywwQ0FBbUM7QUFDbkMsd0NBQXdDO0FBRXhDOzs7OztHQUtHO0FBQ0gsSUFBWSxhQVlYO0FBWkQsV0FBWSxhQUFhO0lBQ3ZCOzs7T0FHRztJQUNILCtCQUFjLENBQUE7SUFFZDs7O09BR0c7SUFDSCwrQkFBYyxDQUFBO0FBQ2hCLENBQUMsRUFaVyxhQUFhLDZCQUFiLGFBQWEsUUFZeEI7QUFFRDs7OztHQUlHO0FBQ0gsSUFBWSxzQkFVWDtBQVZELFdBQVksc0JBQXNCO0lBQ2hDOztPQUVHO0lBQ0gseUNBQWUsQ0FBQTtJQUVmOztPQUVHO0lBQ0gsMkNBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQVZXLHNCQUFzQixzQ0FBdEIsc0JBQXNCLFFBVWpDO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLGNBS1g7QUFMRCxXQUFZLGNBQWM7SUFDeEI7O09BRUc7SUFDSCw2QkFBVyxDQUFBO0FBQ2IsQ0FBQyxFQUxXLGNBQWMsOEJBQWQsY0FBYyxRQUt6QjtBQXdCRDs7R0FFRztBQUNILElBQVksYUFVWDtBQVZELFdBQVksYUFBYTtJQUN2Qjs7T0FFRztJQUNILG9DQUFtQixDQUFBO0lBRW5COztPQUVHO0lBQ0gsa0NBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQVZXLGFBQWEsNkJBQWIsYUFBYSxRQVV4QjtBQTJERCxNQUFNLFFBQVEsR0FBVyxNQUFNLENBQUM7QUFtTWhDOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFFBQVMsU0FBUSxnQ0FBZ0I7SUFDckMsSUFBVyxlQUFlO1FBQ3hCLE9BQU87WUFDTCxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7U0FDNUIsQ0FBQztJQUNKLENBQUM7SUFDRCxJ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SSxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtRQUM3QixZQUFZLEVBQUUsV0FBVyxDQUFDLFlBQVk7UUFDdEMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxhQUFhO1FBQ3hDLG9CQUFvQixFQUFFLFdBQVcsQ0FBQyxvQkFBb0I7UUFDdEQsV0FBVyxFQUFFLE9BQU87UUFDcEIsTUFBTSxFQUFFLFdBQVcsQ0FBQyxNQUFNO1FBQzFCLGNBQWMsRUFBRSxXQUFXLENBQUMsY0FBYztRQUMxQyxVQUFVLEVBQUUsV0FBVyxDQUFDLFVBQVU7S0FDbkMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE3NS4xL3BhY2thZ2VzL0Bhd3MtY2RrL2F3cy1lYzItYWxwaGEvbGliL2lwYW0udHNcblxuaW1wb3J0IHtcbiAgdnBjSXBhbSBhcyB0ZklwYW0sXG4gIHZwY0lwYW1Qb29sIGFzIHRmSXBhbVBvb2wsXG4gIHZwY0lwYW1Qb29sQ2lkciBhcyB0ZklwYW1Qb29sQ2lkcixcbiAgdnBjSXBhbVNjb3BlIGFzIHRmSXBhbVNjb3BlLFxufSBmcm9tIFwiQGNka3RmL3Byb3ZpZGVyLWF3c1wiO1xuaW1wb3J0IHsgTGF6eSB9IGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7XG4gIElBd3NDb25zdHJ1Y3QsXG4gIEF3c0NvbnN0cnVjdEJhc2UsXG4gIEF3c0NvbnN0cnVjdFByb3BzLFxufSBmcm9tIFwiLi4vYXdzLWNvbnN0cnVjdFwiO1xuLy8gVE9ETzogVXNlIFRhZ01hbmFnZXIgYW5kIHRhZy1hc3BlY3QgaW5zdGVhZFxuaW1wb3J0IHsgVGFncyB9IGZyb20gXCIuLi9hd3MtdGFnc1wiO1xuLy8gaW1wb3J0IHsgVGFncyB9IGZyb20gXCIuLi90YWctYXNwZWN0XCI7XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgYWRkcmVzcyBmYW1pbHkgZm9yIElQIGFkZHJlc3NlcyBpbiBhbiBJUEFNIHBvb2wuXG4gKiBJUF9WNCAtIFJlcHJlc2VudHMgdGhlIElQdjQgYWRkcmVzcyBmYW1pbHkuXG4gKiBJUF9WNiAtIFJlcHJlc2VudHMgdGhlIElQdjYgYWRkcmVzcyBmYW1pbHkuXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItaXBhbXBvb2wuaHRtbCNjZm4tZWMyLWlwYW1wb29sLWFkZHJlc3NmYW1pbHlcbiAqL1xuZXhwb3J0IGVudW0gQWRkcmVzc0ZhbWlseSB7XG4gIC8qKlxuICAgKiBSZXByZXNlbnRzIHRoZSBJUHY0IGFkZHJlc3MgZmFtaWx5LlxuICAgKiBBbGxvd2VkIHVuZGVyIHB1YmxpYyBhbmQgcHJpdmF0ZSBwb29sLlxuICAgKi9cbiAgSVBfVjQgPSBcImlwdjRcIixcblxuICAvKipcbiAgICogUmVwcmVzZW50cyB0aGUgSVB2NiBhZGRyZXNzIGZhbWlseS5cbiAgICogT25seSBhbGxvd2VkIHVuZGVyIHB1YmxpYyBwb29sLlxuICAgKi9cbiAgSVBfVjYgPSBcImlwdjZcIixcbn1cblxuLyoqXG4gKiBUaGUgSVAgYWRkcmVzcyBzb3VyY2UgZm9yIHBvb2xzIGluIHRoZSBwdWJsaWMgc2NvcGUuXG4gKiBPbmx5IHVzZWQgZm9yIHByb3Zpc2lvbmluZyBJUCBhZGRyZXNzIENJRFJzIHRvIHBvb2xzIGluIHRoZSBwdWJsaWMgc2NvcGUuXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItaXBhbXBvb2wuaHRtbCNjZm4tZWMyLWlwYW1wb29sLXB1YmxpY2lwc291cmNlXG4gKi9cbmV4cG9ydCBlbnVtIElwYW1Qb29sUHVibGljSXBTb3VyY2Uge1xuICAvKipcbiAgICogQllPSVAgSXB2NiB0byBiZSByZWdpc3RlcmVkIHVuZGVyIElQQU1cbiAgICovXG4gIEJZT0lQID0gXCJieW9pcFwiLFxuXG4gIC8qKlxuICAgKiBBbWF6b24gUHJvdmlkZWQgSXB2NiByYW5nZVxuICAgKi9cbiAgQU1BWk9OID0gXCJhbWF6b25cIixcbn1cblxuLyoqXG4gKiBMaW1pdHMgd2hpY2ggc2VydmljZSBpbiBBV1MgdGhhdCB0aGUgcG9vbCBjYW4gYmUgdXNlZCBpblxuICovXG5leHBvcnQgZW51bSBBd3NTZXJ2aWNlTmFtZSB7XG4gIC8qKlxuICAgKiAgQWxsb3dzIHVzZXJzIHRvIHVzZSBzcGFjZSBmb3IgRWxhc3RpYyBJUCBhZGRyZXNzZXMgYW5kIFZQQ3NcbiAgICovXG4gIEVDMiA9IFwiZWMyXCIsXG59XG5cbi8qKlxuICogT3B0aW9ucyB0byBjcmVhdGUgYSBuZXcgSXBhbSBpbiB0aGUgYWNjb3VudFxuICovXG5leHBvcnQgaW50ZXJmYWNlIElwYW1Qcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgb3BlcmF0aW5nIFJlZ2lvbnMgZm9yIGFuIElQQU0uXG4gICAqIE9wZXJhdGluZyBSZWdpb25zIGFyZSBBV1MgUmVnaW9ucyB3aGVyZSB0aGUgSVBBTSBpcyBhbGxvd2VkIHRvIG1hbmFnZSBJUCBhZGRyZXNzIENJRFJzXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IG9wZXJhdGluZyBSZWdpb25zLCBzZWUgW0NyZWF0ZSBhbiBJUEFNXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vL3ZwYy9sYXRlc3QvaXBhbS9jcmVhdGUtaXBhbS5odG1sKSBpbiB0aGUgKkFtYXpvbiBWUEMgSVBBTSBVc2VyIEd1aWRlKiAuXG4gICAqIEBzZWUgaHR0cDovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLWlwYW0uaHRtbCNjZm4tZWMyLWlwYW0tb3BlcmF0aW5ncmVnaW9uc1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIFN0YWNrLnJlZ2lvbiBpZiBkZWZpbmVkIGluIHRoZSBzdGFja1xuICAgKi9cbiAgcmVhZG9ubHkgb3BlcmF0aW5nUmVnaW9uPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgSVBBTSB0aGF0IGNhbiBiZSB1c2VkIGZvciB0YWdnaW5nIHJlc291cmNlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gSWYgbm8gbmFtZSBwcm92aWRlZCwgbm8gdGFncyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBJUEFNXG4gICAqL1xuICByZWFkb25seSBpcGFtTmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZWZlcnMgdG8gdHdvIHBvc3NpYmxlIHNjb3BlIHR5cGVzIHVuZGVyIElQQU1cbiAqL1xuZXhwb3J0IGVudW0gSXBhbVNjb3BlVHlwZSB7XG4gIC8qKlxuICAgKiBEZWZhdWx0IHNjb3BlcyBjcmVhdGVkIGJ5IElQQU1cbiAgICovXG4gIERFRkFVTFQgPSBcImRlZmF1bHRcIixcblxuICAvKipcbiAgICogQ3VzdG9tIHNjb3BlIGNyZWF0ZWQgdXNpbmcgbWV0aG9kXG4gICAqL1xuICBDVVNUT00gPSBcImN1c3RvbVwiLFxufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIGFuIElQQU0gcG9vbC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItaXBhbXBvb2wuaHRtbFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBvb2xPcHRpb25zIHtcbiAgLyoqXG4gICAqIGFkZHJlc3NGYW1pbHkgLSBUaGUgYWRkcmVzcyBmYW1pbHkgb2YgdGhlIHBvb2wgKGlwdjQgb3IgaXB2NikuXG4gICAqL1xuICByZWFkb25seSBhZGRyZXNzRmFtaWx5OiBBZGRyZXNzRmFtaWx5O1xuXG4gIC8qKlxuICAgKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgQ0lEUnMgcHJvdmlzaW9uZWQgdG8gdGhlIHBvb2wuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gQ0lEUnMgYXJlIHByb3Zpc2lvbmVkXG4gICAqL1xuICByZWFkb25seSBpcHY0UHJvdmlzaW9uZWRDaWRycz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgbG9jYWxlIChBV1MgUmVnaW9uKSBvZiB0aGUgcG9vbC4gU2hvdWxkIGJlIG9uZSBvZiB0aGUgSVBBTSBvcGVyYXRpbmcgcmVnaW9uLlxuICAgKiAgT25seSByZXNvdXJjZXMgaW4gdGhlIHNhbWUgUmVnaW9uIGFzIHRoZSBsb2NhbGUgb2YgdGhlIHBvb2wgY2FuIGdldCBJUCBhZGRyZXNzIGFsbG9jYXRpb25zIGZyb20gdGhlIHBvb2wuXG4gICAqIFlvdSBjYW4gb25seSBhbGxvY2F0ZSBhIENJRFIgZm9yIGEgVlBDLCBmb3IgZXhhbXBsZSwgZnJvbSBhbiBJUEFNIHBvb2wgdGhhdCBzaGFyZXMgYSBsb2NhbGUgd2l0aCB0aGUgVlBD4oCZcyBSZWdpb24uXG4gICAqIE5vdGUgdGhhdCBvbmNlIHlvdSBjaG9vc2UgYSBMb2NhbGUgZm9yIGEgcG9vbCwgeW91IGNhbm5vdCBtb2RpZnkgaXQuIElmIHlvdSBjaG9vc2UgYW4gQVdTIFJlZ2lvbiBmb3IgbG9jYWxlIHRoYXQgaGFzIG5vdCBiZWVuIGNvbmZpZ3VyZWQgYXMgYW4gb3BlcmF0aW5nIFJlZ2lvbiBmb3IgdGhlIElQQU0sIHlvdSdsbCBnZXQgYW4gZXJyb3IuXG4gICAqIEBzZWUgaHR0cDovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLWlwYW1wb29sLmh0bWwjY2ZuLWVjMi1pcGFtcG9vbC1sb2NhbGVcbiAgICpcbiAgICogQGRlZmF1bHQgLSBDdXJyZW50IG9wZXJhdGluZyByZWdpb24gb2YgSVBBTVxuICAgKi9cbiAgcmVhZG9ubHkgbG9jYWxlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSVAgYWRkcmVzcyBzb3VyY2UgZm9yIHBvb2xzIGluIHRoZSBwdWJsaWMgc2NvcGUuXG4gICAqIE9ubHkgdXNlZCBmb3IgSVB2NiBhZGRyZXNzXG4gICAqIE9ubHkgYWxsb3dlZCB2YWx1ZXMgdG8gdGhpcyBhcmUgJ2J5b2lwJyBvciAnYW1hem9uJ1xuICAgKlxuICAgKiBAZGVmYXVsdCBhbWF6b25cbiAgICovXG4gIHJlYWRvbmx5IHB1YmxpY0lwU291cmNlPzogSXBhbVBvb2xQdWJsaWNJcFNvdXJjZTtcblxuICAvKipcbiAgICogTGltaXRzIHdoaWNoIHNlcnZpY2UgaW4gQVdTIHRoYXQgdGhlIHBvb2wgY2FuIGJlIHVzZWQgaW4uXG4gICAqXG4gICAqIFwiZWMyXCIsIGZvciBleGFtcGxlLCBhbGxvd3MgdXNlcnMgdG8gdXNlIHNwYWNlIGZvciBFbGFzdGljIElQIGFkZHJlc3NlcyBhbmQgVlBDcy5cbiAgICpcbiAgICogQHNlZSBodHRwOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItaXBhbXBvb2wuaHRtbCNjZm4tZWMyLWlwYW1wb29sLWF3c3NlcnZpY2VcbiAgICpcbiAgICogQGRlZmF1bHQgLSByZXF1aXJlZCBpbiBjYXNlIG9mIGFuIElQdjYsIHRocm93cyBhbiBlcnJvciBpZiBub3QgcHJvdmlkZWQuXG4gICAqL1xuICByZWFkb25seSBhd3NTZXJ2aWNlPzogQXdzU2VydmljZU5hbWU7XG5cbiAgLyoqXG4gICAqIElQQU0gUG9vbCByZXNvdXJjZSBuYW1lIHRvIGJlIHVzZWQgZm9yIHRhZ2dpbmdcbiAgICpcbiAgICogQGRlZmF1bHQgLSBhdXRvZ2VuZXJhdGVkIGJ5IENESyBpZiBub3QgcHJvdmlkZWRcbiAgICovXG4gIHJlYWRvbmx5IGlwYW1Qb29sTmFtZT86IHN0cmluZztcbn1cblxuY29uc3QgTkFNRV9UQUc6IHN0cmluZyA9IFwiTmFtZVwiO1xuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGNyZWF0aW5nIGFuIElQQU0gcG9vbC5cbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi1pcGFtcG9vbC5odG1sXG4gKi9cbmludGVyZmFjZSBJcGFtUG9vbFByb3BzIGV4dGVuZHMgUG9vbE9wdGlvbnMsIEF3c0NvbnN0cnVjdFByb3BzIHtcbiAgLyoqXG4gICAqIFNjb3BlIGlkIHdoZXJlIHBvb2wgbmVlZHMgdG8gYmUgY3JlYXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgaXBhbVNjb3BlSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGFncyB0aGF0IGFyZSByZXF1aXJlZCBmb3IgcmVzb3VyY2VzIHRoYXQgdXNlIENJRFJzIGZyb20gdGhpcyBJUEFNIHBvb2wuIFJlc291cmNlcyB0aGF0IGRvIG5vdCBoYXZlXG4gICAqIHRoZXNlIHRhZ3Mgd2lsbCBub3QgYmUgYWxsb3dlZCB0byBhbGxvY2F0ZSBzcGFjZSBmcm9tIHRoZSBwb29sLiBJZiB0aGUgcmVzb3VyY2VzIGhhdmUgdGhlaXIgdGFnc1xuICAgKiBjaGFuZ2VkIGFmdGVyIHRoZXkgaGF2ZSBhbGxvY2F0ZWQgc3BhY2Ugb3IgaWYgdGhlIGFsbG9jYXRpb24gdGFnZ2luZyByZXF1aXJlbWVudHMgYXJlIGNoYW5nZWQgb25cbiAgICogdGhlIHBvb2wsIHRoZSByZXNvdXJjZSBtYXkgYmUgbWFya2VkIGFzIG5vbmNvbXBsaWFudC5cbiAgICovXG4gIHJlYWRvbmx5IGFsbG9jYXRpb25SZXNvdXJjZVRhZ3M/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIC8vIFRPRE86IEFkZCBzdXBwb3J0IGZvciBtb3JlIGFyZ3VtZW50c1xuICAvLyBAc2VlIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXdzLzUuNjguMC9kb2NzL3Jlc291cmNlcy92cGNfaXBhbV9wb29sI2FyZ3VtZW50LXJlZmVyZW5jZVxuICAvLyBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItaXBhbXBvb2wuaHRtbFxufVxuXG4vKipcbiAqIE9wdGlvbnMgdG8gcHJvdmlzaW9uIENJRFJzIHRvIGFuIElQQU0gcG9vbC5cbiAqIFVzZWQgdG8gY3JlYXRlIGEgbmV3IElwYW1Qb29sQ2lkclxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLWlwYW1wb29sY2lkci5odG1sXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSXBhbVBvb2xDaWRyUHJvdmlzaW9uaW5nT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBJcHY2IE5ldG1hc2sgbGVuZ3RoIGZvciB0aGUgQ0lEUlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHBvb2wgcHJvdmlzaW9uZWQgd2l0aG91dCBuZXRtYXNrIGxlbmd0aCwgbmVlZCBjaWRyIHJhbmdlIGluIHRoaXMgY2FzZVxuICAgKi9cbiAgcmVhZG9ubHkgbmV0bWFza0xlbmd0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogSXB2NiBDSURSIGJsb2NrIGZvciB0aGUgSVBBTSBwb29sXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcG9vbCBwcm92aXNpb25lZCB3aXRob3V0IG5ldG1hc2sgbGVuZ3RoLCBuZWVkIG5ldG1hc2sgbGVuZ3RoIGluIHRoaXMgY2FzZVxuICAgKi9cbiAgcmVhZG9ubHkgY2lkcj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBPdXRwdXRzIHdoaWNoIG1heSBiZSByZWdpc3RlcmVkIGZvciBvdXRwdXQgdmlhIHRoZSBHcmlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElwYW1Qb29sT3V0cHV0cyB7XG4gIC8qKlxuICAgKiBQb29sIElEIHRvIGJlIHBhc3NlZCB0byB0aGUgVlBDIGNvbnN0cnVjdFxuICAgKiBAYXR0cmlidXRlIElwYW1Qb29sSWRcbiAgICovXG4gIHJlYWRvbmx5IGlwYW1Qb29sSWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBEZWZpbml0aW9uIHVzZWQgdG8gYWRkIG9yIGNyZWF0ZSBhIG5ldyBJUEFNIHBvb2xcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJSXBhbVBvb2wgZXh0ZW5kcyBJQXdzQ29uc3RydWN0IHtcbiAgLyoqIHN0cm9uZ2x5IHR5cGVkIG91dHB1dHMgKi9cbiAgcmVhZG9ubHkgaXBhbVBvb2xPdXRwdXRzOiBJcGFtUG9vbE91dHB1dHM7XG5cbiAgLyoqXG4gICAqIFBvb2wgSUQgdG8gYmUgcGFzc2VkIHRvIHRoZSBWUEMgY29uc3RydWN0XG4gICAqIEBhdHRyaWJ1dGUgSXBhbVBvb2xJZFxuICAgKi9cbiAgcmVhZG9ubHkgaXBhbVBvb2xJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQb29sIENJRFIgZm9yIElQdjYgdG8gYmUgcHJvdmlzaW9uZWQgd2l0aCBQdWJsaWMgSVAgc291cmNlIHNldCB0byAnQW1hem9uJ1xuICAgKi9cbiAgcmVhZG9ubHkgaXBhbUNpZHJzOiB0ZklwYW1Qb29sQ2lkci5WcGNJcGFtUG9vbENpZHJbXTtcblxuICAvKipcbiAgICogUG9vbCBDSURSIGZvciBJUHY0IHRvIGJlIHByb3Zpc2lvbmVkIHVzaW5nIElQQU1cbiAgICogUmVxdWlyZWQgdG8gY2hlY2sgZm9yIHN1Ym5ldCBJUCByYW5nZSBpcyB3aXRoaW4gdGhlIFZQQyByYW5nZVxuICAgKi9cbiAgcmVhZG9ubHkgaXBhbUlwdjRDaWRycz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBGdW5jdGlvbiB0byBhc3NvY2lhdGUgYSBJUHY2IGFkZHJlc3Mgd2l0aCBJUEFNIHBvb2xcbiAgICovXG4gIHByb3Zpc2lvbkNpZHIoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBvcHRpb25zOiBJcGFtUG9vbENpZHJQcm92aXNpb25pbmdPcHRpb25zLFxuICApOiB0ZklwYW1Qb29sQ2lkci5WcGNJcGFtUG9vbENpZHI7XG59XG5cbi8qKlxuICogSVBBTSBzY29wZSBpcyB0aGUgaGlnaGVzdC1sZXZlbCBjb250YWluZXIgd2l0aGluIElQQU0uIEFuIElQQU0gY29udGFpbnMgdHdvIGRlZmF1bHQgc2NvcGVzLlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLWlwYW1zY29wZS5odG1sXG4gKi9cbmludGVyZmFjZSBJcGFtU2NvcGVQcm9wcyBleHRlbmRzIElwYW1TY29wZU9wdGlvbnMge1xuICAvKipcbiAgICogSVBBTSBpZCB0byB3aGljaCBzY29wZSBuZWVkcyB0byBiZSBhZGRlZFxuICAgKi9cbiAgcmVhZG9ubHkgaXBhbUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wZXJhdGluZyByZWdpb25zIGZvciB0aGUgSXBhbVxuICAgKiBSZXF1aXJlZCBpbiBvcmRlciB0byB2YWxpZGF0ZSB0aGUgbG9jYWxlIGJlaW5nIHNldCBvbiBwb29sXG4gICAqL1xuICByZWFkb25seSBpcGFtT3BlcmF0aW5nUmVnaW9uczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEN1c3RvbSBpcGFtIHNjb3BlIGlkIHRvIGFkZCBhIHBvb2wgaW4gb3JkZXIgdG8gc3VwcG9ydCBkZWZhdWx0IHNjb3Blc1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRocm93cyBhbiBlcnJvciBpZiBubyBzY29wZSBpZCBpcyBwcm92aWRlZFxuICAgKi9cbiAgcmVhZG9ubHkgaXBhbVNjb3BlSWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQmVpbmcgdXNlZCBpbiBJUEFNIGNsYXNzIHRvIGFkZCBwb29scyB0byBkZWZhdWx0IHNjb3BlIGNyZWF0ZWQgYnkgSVBBTS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJcGFtU2NvcGVPcHRpb25zIHtcbiAgLyoqXG4gICAqIElQQU0gc2NvcGUgbmFtZSB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgdGFnZ2luZ1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHRhZ3Mgd2lsbCBiZSBhZGRlZCB0byB0aGUgc2NvcGVcbiAgICovXG4gIHJlYWRvbmx5IGlwYW1TY29wZU5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgYW4gSVAgQWRkcmVzcyBNYW5hZ2VyIChJUEFNKS5cbiAqXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi1pcGFtLmh0bWx9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElwYW1PcHRpb25zIHtcbiAgLyoqXG4gICAqIENJRFIgTWFzayBmb3IgVnBjXG4gICAqIE9ubHkgcmVxdWlyZWQgd2hlbiB1c2luZyBBV1MgSXBhbVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIG5ldG1hc2sgbGVuZ3RoIGZvciBJUEFNIGF0dGFjaGVkIHRvIFZQQyBzZWNvbmRhcnkgYWRkcmVzc1xuICAgKi9cbiAgcmVhZG9ubHkgbmV0bWFza0xlbmd0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogSXB2NCBvciBhbiBJcHY2IElQQU0gcG9vbFxuICAgKiBPbmx5IHJlcXVpcmVkIHdoZW4gdXNpbmcgQVdTIElwYW1cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBwb29sIGF0dGFjaGVkIHRvIFZQQyBzZWNvbmRhcnkgYWRkcmVzc1xuICAgKi9cbiAgcmVhZG9ubHkgaXBhbVBvb2w/OiBJSXBhbVBvb2w7XG5cbiAgLyoqXG4gICAqIFJlcXVpcmVkIHRvIHNldCBTZWNvbmRhcnkgY2lkciBibG9jayByZXNvdXJjZSBuYW1lXG4gICAqIGluIG9yZGVyIHRvIGdlbmVyYXRlIHVuaXF1ZSBsb2dpY2FsIGlkIGZvciB0aGUgcmVzb3VyY2UuXG4gICAqL1xuICByZWFkb25seSBjaWRyQmxvY2tOYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3V0cHV0cyB3aGljaCBtYXkgYmUgcmVnaXN0ZXJlZCBmb3Igb3V0cHV0IHZpYSB0aGUgR3JpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJcGFtU2NvcGVPdXRwdXRzIHtcbiAgLyoqXG4gICAqIFNjb3BlIElEIHRvIGJlIHBhc3NlZCB0byB0aGUgVlBDIGNvbnN0cnVjdFxuICAgKiBAYXR0cmlidXRlIElwYW1TY29wZUlkXG4gICAqL1xuICByZWFkb25seSBpcGFtU2NvcGVJZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgSXBhbVNjb3BlIENsYXNzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUlwYW1TY29wZUJhc2Uge1xuICAvKiogc3Ryb25nbHkgdHlwZWQgb3V0cHV0cyAqL1xuICByZWFkb25seSBpcGFtU2NvcGVPdXRwdXRzOiBJcGFtU2NvcGVPdXRwdXRzO1xuXG4gIC8qKlxuICAgKiBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgc2NvcGUgb2Ygc3RhY2sgdG8gYmUgcGFzc2VkIGluIG9yZGVyIHRvIGNyZWF0ZVxuICAgKiBhIG5ldyBJUEFNIHBvb2xcbiAgICovXG4gIHJlYWRvbmx5IHNjb3BlOiBDb25zdHJ1Y3Q7XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgU2NvcGUgaWRzIGNyZWF0ZWQgYnkgdGhlIElQQU0gb3IgYSBuZXcgUmVzb3VyY2UgaWRcbiAgICovXG4gIHJlYWRvbmx5IHNjb3BlSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogRGVmaW5lcyBzY29wZSB0eXBlIGNhbiBiZSBlaXRoZXIgZGVmYXVsdCBvciBjdXN0b21cbiAgICovXG4gIHJlYWRvbmx5IHNjb3BlVHlwZT86IElwYW1TY29wZVR5cGU7XG5cbiAgLyoqXG4gICAqIEZ1bmN0aW9uIHRvIGFkZCBhIG5ldyBwb29sIHRvIGFuIElQQU0gc2NvcGVcbiAgICovXG4gIGFkZFBvb2woaWQ6IHN0cmluZywgb3B0aW9uczogUG9vbE9wdGlvbnMpOiBJSXBhbVBvb2w7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBuZXcgSVBBTSBQb29sXG4gKiBQb29scyBlbmFibGUgeW91IHRvIG9yZ2FuaXplIHlvdXIgSVAgYWRkcmVzc2VzIGFjY29yZGluZyB0byB5b3VyIHJvdXRpbmcgYW5kIHNlY3VyaXR5IG5lZWRzXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItaXBhbXBvb2wuaHRtbFxuICogQHNlZSBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2F3cy81LjY4LjAvZG9jcy9yZXNvdXJjZXMvdnBjX2lwYW1fcG9vbFxuICogQHJlc291cmNlIGF3c192cGNfaXBhbV9wb29sXG4gKiBAaW50ZXJuYWxcbiAqL1xuY2xhc3MgSXBhbVBvb2wgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RCYXNlIGltcGxlbWVudHMgSUlwYW1Qb29sIHtcbiAgcHVibGljIGdldCBpcGFtUG9vbE91dHB1dHMoKTogSXBhbVBvb2xPdXRwdXRzIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXBhbVBvb2xJZDogdGhpcy5pcGFtUG9vbElkLFxuICAgIH07XG4gIH1cbiAgcHVibGljIGdldCBvdXRwdXRzKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIHJldHVybiB0aGlzLmlwYW1Qb29sT3V0cHV0cztcbiAgfVxuICAvKipcbiAgICogUG9vbCBJRCB0byBiZSBwYXNzZWQgdG8gdGhlIFZQQyBjb25zdHJ1Y3RcbiAgICogQGF0dHJpYnV0ZSBJcGFtUG9vbElkXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaXBhbVBvb2xJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQb29sIENJRFIgZm9yIElQdjYgdG8gYmUgcHJvdmlzaW9uZWQgd2l0aCBQdWJsaWMgSVAgc291cmNlIHNldCB0byAnQW1hem9uJ1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlwYW1DaWRyczogdGZJcGFtUG9vbENpZHIuVnBjSXBhbVBvb2xDaWRyW10gPSBbXTtcblxuICAvKipcbiAgICogUG9vbCBDSURSIGZvciBJUHY0IHRvIGJlIHByb3Zpc2lvbmVkIHVzaW5nIElQQU1cbiAgICogUmVxdWlyZWQgdG8gY2hlY2sgZm9yIHN1Ym5ldCBJUCByYW5nZSBpcyB3aXRoaW4gdGhlIFZQQyByYW5nZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlwYW1JcHY0Q2lkcnM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIFJlZmVyZW5jZSB0byBpcGFtUG9vbCByZXNvdXJjZSBjcmVhdGVkIGluIHRoaXMgY2xhc3NcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2lwYW1Qb29sOiB0ZklwYW1Qb29sLlZwY0lwYW1Qb29sO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBJcGFtUG9vbFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG4gICAgY29uc3QgaXBhbVBvb2xOYW1lID1cbiAgICAgIHByb3BzLmlwYW1Qb29sTmFtZSA/P1xuICAgICAgTGF6eS5zdHJpbmdWYWx1ZSh7XG4gICAgICAgIHByb2R1Y2U6ICgpID0+XG4gICAgICAgICAgdGhpcy5zdGFjay51bmlxdWVSZXNvdXJjZU5hbWUodGhpcywge1xuICAgICAgICAgICAgbWF4TGVuZ3RoOiAxMjgsXG4gICAgICAgICAgICBhbGxvd2VkU3BlY2lhbENoYXJhY3RlcnM6IFwiX1wiLFxuICAgICAgICAgIH0pLFxuICAgICAgfSk7XG5cbiAgICBpZiAocHJvcHMuYWRkcmVzc0ZhbWlseSA9PT0gQWRkcmVzc0ZhbWlseS5JUF9WNiAmJiAhcHJvcHMuYXdzU2VydmljZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcImF3c1NlcnZpY2UgaXMgcmVxdWlyZWQgd2hlbiBhZGRyZXNzRmFtaWx5IGlzIHNldCB0byBpcHY2XCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vQWRkIHRhZ3MgdG8gdGhlIElQQU0gUG9vbCBpZiBuYW1lIGlzIHByb3ZpZGVkXG4gICAgaWYgKGlwYW1Qb29sTmFtZSkge1xuICAgICAgVGFncy5vZih0aGlzKS5hZGQoTkFNRV9UQUcsIGlwYW1Qb29sTmFtZSk7XG4gICAgfVxuXG4gICAgdGhpcy5faXBhbVBvb2wgPSBuZXcgdGZJcGFtUG9vbC5WcGNJcGFtUG9vbCh0aGlzLCBcIlJlc291cmNlXCIsIHtcbiAgICAgIGFkZHJlc3NGYW1pbHk6IHByb3BzLmFkZHJlc3NGYW1pbHksXG4gICAgICBsb2NhbGU6IHByb3BzLmxvY2FsZSxcbiAgICAgIGlwYW1TY29wZUlkOiBwcm9wcy5pcGFtU2NvcGVJZCxcbiAgICAgIHB1YmxpY0lwU291cmNlOiBwcm9wcy5wdWJsaWNJcFNvdXJjZSxcbiAgICAgIGF3c1NlcnZpY2U6IHByb3BzLmF3c1NlcnZpY2UsXG4gICAgICBhbGxvY2F0aW9uUmVzb3VyY2VUYWdzOiBwcm9wcy5hbGxvY2F0aW9uUmVzb3VyY2VUYWdzLFxuICAgIH0pO1xuICAgIHRoaXMuaXBhbVBvb2xJZCA9IHRoaXMuX2lwYW1Qb29sLmlkO1xuXG4gICAgLy8gcHJvdmlzaW9uZWRDaWRyczogcHJvcHMuaXB2NFByb3Zpc2lvbmVkQ2lkcnM/Lm1hcCgoY2lkcikgPT4gKHsgY2lkciB9KSksXG4gICAgLy8gUG9wdWxhdGluZyB0byBjaGVjayBmb3Igc3VibmV0IHJhbmdlIGFnYWluc3QgYWxsIElQdjQgcmFuZ2VzIGFzc2lnbmVkIHRvIFZQQyBpbmNsdWRpbmcgSVBBTVxuICAgIHByb3BzLmlwdjRQcm92aXNpb25lZENpZHJzPy5mb3JFYWNoKChjaWRyKSA9PiB7XG4gICAgICB0aGlzLmlwYW1JcHY0Q2lkcnMucHVzaChjaWRyKTtcbiAgICAgIC8vIFRlcnJhZm9ybSBWcGNJcGFtUG9vbCBkb2VzIG5vdCBzdXBwb3J0IGlubGluZSBcIlByb3Zpc2lvbmVkQ2lkcnNcIiBwcm9wZXJ0eVxuICAgICAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi1pcGFtcG9vbC5odG1sI2Nmbi1lYzItaXBhbXBvb2wtcHJvdmlzaW9uZWRjaWRyc1xuICAgICAgdGhpcy5wcm92aXNpb25DaWRyKFwiUHJvdmlzaW9uZWRDaWRyXCIsIHsgY2lkciB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIENJRFIgcHJvdmlzaW9uZWQgdG8gYW4gSVBBTSBwb29sLlxuICAgKiBAc2VlIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXdzLzUuNjguMC9kb2NzL3Jlc291cmNlcy92cGNfaXBhbV9wb29sX2NpZHJcbiAgICogQHBhcmFtIGlkIE5hbWUgb2YgUmVzb3VyY2VcbiAgICogQHBhcmFtIG9wdGlvbnMgRWl0aGVyIGEgQ0lEUiBvciBuZXRtYXNrIGxlbmd0aCBtdXN0IGJlIHByb3ZpZGVkXG4gICAqIEByZXR1cm5zIGF3c192cGNfaXBhbV9wb29sX2NpZHJcbiAgICovXG4gIHB1YmxpYyBwcm92aXNpb25DaWRyKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgb3B0aW9uczogSXBhbVBvb2xDaWRyUHJvdmlzaW9uaW5nT3B0aW9ucyxcbiAgKTogdGZJcGFtUG9vbENpZHIuVnBjSXBhbVBvb2xDaWRyIHtcbiAgICAvLyBUT0RPOiBFcnJvciBpZiBuZWl0aGVyIG9yIGJvdGggY2lkciBhbmQgbmV0bWFzayBsZW5ndGggYXJlIHByb3ZpZGVkXG4gICAgY29uc3QgY2lkciA9IG5ldyB0ZklwYW1Qb29sQ2lkci5WcGNJcGFtUG9vbENpZHIodGhpcywgaWQsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBpcGFtUG9vbElkOiB0aGlzLmlwYW1Qb29sSWQsXG4gICAgfSk7XG4gICAgdGhpcy5pcGFtQ2lkcnMucHVzaChjaWRyKTtcbiAgICByZXR1cm4gY2lkcjtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgY3VzdG9tIElwYW0gU2NvcGUsIGN1c3RvbSBJUEFNIHNjb3BlcyBjYW4gb25seSBiZSBwcml2YXRlXG4gKiAoY2FuIGJlIHVzZWQgZm9yIGFkZGluZyBjdXN0b20gc2NvcGVzIHRvIGFuIGV4aXN0aW5nIElQQU0pXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItaXBhbXNjb3BlLmh0bWxcbiAqIEBzZWUgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9hd3MvNS42OC4wL2RvY3MvcmVzb3VyY2VzL3ZwY19pcGFtX3Njb3BlXG4gKiBAcmVzb3VyY2UgYXdzX3ZwY19pcGFtX3Njb3BlXG4gKi9cbmNsYXNzIElwYW1TY29wZSBleHRlbmRzIEF3c0NvbnN0cnVjdEJhc2UgaW1wbGVtZW50cyBJSXBhbVNjb3BlQmFzZSB7XG4gIHB1YmxpYyBnZXQgaXBhbVNjb3BlT3V0cHV0cygpOiBJcGFtU2NvcGVPdXRwdXRzIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXBhbVNjb3BlSWQ6IHRoaXMuc2NvcGVJZCxcbiAgICB9O1xuICB9XG4gIHB1YmxpYyBnZXQgb3V0cHV0cygpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5pcGFtU2NvcGVPdXRwdXRzO1xuICB9XG4gIC8qKlxuICAgKiBTdG9yZXMgdGhlIHJlZmVyZW5jZSB0byBuZXdseSBjcmVhdGVkIFJlc291cmNlXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9pcGFtU2NvcGU6IHRmSXBhbVNjb3BlLlZwY0lwYW1TY29wZTtcblxuICAvKipcbiAgICogSUQgZm9yIFJlc291cmNlIElwYW1TY29wZVxuICAgKiBAYXR0cmlidXRlIElwYW1TY29wZUlkXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2NvcGVJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQcm9wZXJ0aWVzIHRvIGNvbmZpZ3VyZSBpcGFtIHNjb3BlXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBJcGFtU2NvcGVQcm9wcztcblxuICAvKipcbiAgICogUmVmZXJlbmNlIHRvIHN0YWNrIHNjb3BlIHRvIGJlIHBhc3NlZCB0aHJvdWdoIGFkZFBvb2wgbWV0aG9kIGlub3JkZXIgdG8gY3JlYXRlIGEgbmV3IElwYW1Qb29sXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2NvcGU6IENvbnN0cnVjdDtcblxuICAvKipcbiAgICogRGVmaW5lcyBzY29wZSB0eXBlIGNhbiBiZSBlaXRoZXIgZGVmYXVsdCBvciBjdXN0b21cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzY29wZVR5cGU6IElwYW1TY29wZVR5cGU7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IElwYW1TY29wZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLl9pcGFtU2NvcGUgPSBuZXcgdGZJcGFtU2NvcGUuVnBjSXBhbVNjb3BlKHNjb3BlLCBcIlJlc291cmNlXCIsIHtcbiAgICAgIGlwYW1JZDogcHJvcHMuaXBhbUlkLFxuICAgIH0pO1xuICAgIFRhZ3Mub2YodGhpcy5faXBhbVNjb3BlKS5hZGQoXG4gICAgICBOQU1FX1RBRyxcbiAgICAgIHByb3BzLmlwYW1TY29wZU5hbWUgPz8gXCJDdXN0b21JcGFtU2NvcGVcIixcbiAgICApO1xuICAgIHRoaXMuc2NvcGVJZCA9IHRoaXMuX2lwYW1TY29wZS5pZDtcbiAgICB0aGlzLnNjb3BlVHlwZSA9IElwYW1TY29wZVR5cGUuQ1VTVE9NO1xuICAgIHRoaXMuc2NvcGUgPSBzY29wZTtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHBvb2wgdG8gdGhlIElQQU0gc2NvcGUuXG4gICAqIEBleHRlcm5hbFxuICAgKi9cbiAgYWRkUG9vbChpZDogc3RyaW5nLCBvcHRpb25zOiBQb29sT3B0aW9ucyk6IElJcGFtUG9vbCB7XG4gICAgcmV0dXJuIGNyZWF0ZUlwYW1Qb29sKHRoaXMuc2NvcGUsIGlkLCB0aGlzLnByb3BzLCBvcHRpb25zLCB0aGlzLnNjb3BlSWQpO1xuICB9XG59XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgSVBBTSBkZWZhdWx0IHNjb3Blcy5cbiAqL1xuY2xhc3MgSXBhbVNjb3BlQmFzZSBpbXBsZW1lbnRzIElJcGFtU2NvcGVCYXNlIHtcbiAgcHVibGljIGdldCBpcGFtU2NvcGVPdXRwdXRzKCk6IElwYW1TY29wZU91dHB1dHMge1xuICAgIHJldHVybiB7XG4gICAgICBpcGFtU2NvcGVJZDogdGhpcy5zY29wZUlkLFxuICAgIH07XG4gIH1cbiAgcHVibGljIGdldCBvdXRwdXRzKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIHJldHVybiB0aGlzLmlwYW1TY29wZU91dHB1dHM7XG4gIH1cbiAgY29uc3RydWN0b3IoXG4gICAgcmVhZG9ubHkgc2NvcGU6IENvbnN0cnVjdCxcbiAgICByZWFkb25seSBzY29wZUlkOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBwcm9wczogSXBhbVNjb3BlUHJvcHMsXG4gICAgcmVhZG9ubHkgc2NvcGVUeXBlPzogSXBhbVNjb3BlVHlwZSxcbiAgKSB7XG4gICAgdGhpcy5zY29wZVR5cGUgPSBJcGFtU2NvcGVUeXBlLkRFRkFVTFQ7XG4gICAgaWYgKCFwcm9wcy5pcGFtU2NvcGVJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaXBhbVNjb3BlSWQgaXMgcmVxdWlyZWRcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2NvcGVJZCA9IHByb3BzLmlwYW1TY29wZUlkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgcG9vbCB0byB0aGUgSVBBTSBzY29wZS5cbiAgICogQGV4dGVybmFsXG4gICAqL1xuICBhZGRQb29sKGlkOiBzdHJpbmcsIG9wdGlvbnM6IFBvb2xPcHRpb25zKTogSUlwYW1Qb29sIHtcbiAgICByZXR1cm4gY3JlYXRlSXBhbVBvb2wodGhpcy5zY29wZSwgaWQsIHRoaXMucHJvcHMsIG9wdGlvbnMsIHRoaXMuc2NvcGVJZCk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJcGFtT3V0cHV0cyB7XG4gIC8qKlxuICAgKiBJcGFtIElEIHRvIGJlIHBhc3NlZCB0byB0aGUgVlBDIGNvbnN0cnVjdFxuICAgKiBAYXR0cmlidXRlIElwYW1JZFxuICAgKi9cbiAgcmVhZG9ubHkgaXBhbUlkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBuZXcgSVBBTSB3aXRoIGRlZmF1bHQgcHVibGljIGFuZCBwcml2YXRlIHNjb3BlXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItaXBhbXNjb3BlLmh0bWxcbiAqIEBzZWUgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9hd3MvNS42OC4wL2RvY3MvcmVzb3VyY2VzL3ZwY19pcGFtXG4gKiBAcmVzb3VyY2UgYXdzX3ZwY19pcGFtXG4gKi9cbmV4cG9ydCBjbGFzcyBJcGFtIGV4dGVuZHMgQXdzQ29uc3RydWN0QmFzZSB7XG4gIHB1YmxpYyBnZXQgaXBhbU91dHB1dHMoKTogSXBhbU91dHB1dHMge1xuICAgIHJldHVybiB7XG4gICAgICBpcGFtSWQ6IHRoaXMuaXBhbUlkLFxuICAgIH07XG4gIH1cbiAgcHVibGljIGdldCBvdXRwdXRzKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIHJldHVybiB0aGlzLmlwYW1PdXRwdXRzO1xuICB9XG4gIC8qKlxuICAgKiBQcm92aWRlcyBhY2Nlc3MgdG8gZGVmYXVsdCBwdWJsaWMgSVBBTSBzY29wZSB0aHJvdWdoIGFkZCBwb29sIG1ldGhvZC5cbiAgICogVXNhZ2U6IFRvIGFkZCBhbiBJcGFtIFBvb2wgdG8gYSBkZWZhdWx0IHB1YmxpYyBzY29wZVxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItaXBhbXNjb3BlLmh0bWxcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwdWJsaWNTY29wZTogSUlwYW1TY29wZUJhc2U7XG5cbiAgLyoqXG4gICAqIFByb3ZpZGVzIGFjY2VzcyB0byBkZWZhdWx0IHByaXZhdGUgSVBBTSBzY29wZSB0aHJvdWdoIGFkZCBwb29sIG1ldGhvZC5cbiAgICogVXNhZ2U6IFRvIGFkZCBhbiBJcGFtIFBvb2wgdG8gYSBkZWZhdWx0IHByaXZhdGUgc2NvcGVcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLWlwYW1zY29wZS5odG1sXG4gICAqICovXG4gIHB1YmxpYyByZWFkb25seSBwcml2YXRlU2NvcGU6IElJcGFtU2NvcGVCYXNlO1xuXG4gIC8vIFJlc291cmNlIElQQU1cbiAgcHJpdmF0ZSByZWFkb25seSBfaXBhbTogdGZJcGFtLlZwY0lwYW07XG4gIC8qKlxuICAgKiBBY2Nlc3MgdG8gSXBhbSByZXNvdXJjZSBpZCB0aGF0IGNhbiBiZSB1c2VkIGxhdGVyIHRvIGFkZCBhIGN1c3RvbSBwcml2YXRlIHNjb3BlIHRvIHRoaXMgSVBBTVxuICAgKiBAYXR0cmlidXRlIElwYW1JZFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlwYW1JZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIG9wZXJhdGluZyByZWdpb25zIGZvciBJUEFNXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgb3BlcmF0aW5nUmVnaW9uczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIExpc3Qgb2Ygc2NvcGVzIGNyZWF0ZWQgdW5kZXIgdGhpcyBJUEFNXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2NvcGVzOiBJSXBhbVNjb3BlQmFzZVtdID0gW107XG5cbiAgLyoqXG4gICAqIElQQU0gbmFtZSB0byBiZSB1c2VkIGZvciB0YWdnaW5nXG4gICAqIEBkZWZhdWx0IG5vIHRhZyBzcGVjaWZpZWRcbiAgICogQGF0dHJpYnV0ZSBJcGFtTmFtZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlwYW1OYW1lPzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzPzogSXBhbVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICBpZiAocHJvcHM/LmlwYW1OYW1lKSB7XG4gICAgICBUYWdzLm9mKHRoaXMpLmFkZChOQU1FX1RBRywgcHJvcHMuaXBhbU5hbWUpO1xuICAgIH1cbiAgICBpZiAoIXByb3BzPy5vcGVyYXRpbmdSZWdpb24gJiYgIXRoaXMuZW52LnJlZ2lvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxlYXNlIHByb3ZpZGUgYXQgbGVhc3Qgb25lIG9wZXJhdGluZyByZWdpb25cIik7XG4gICAgfVxuXG4gICAgdGhpcy5vcGVyYXRpbmdSZWdpb25zID0gcHJvcHM/Lm9wZXJhdGluZ1JlZ2lvbiA/PyBbdGhpcy5lbnYucmVnaW9uXTtcbiAgICB0aGlzLmlwYW1OYW1lID0gcHJvcHM/LmlwYW1OYW1lO1xuXG4gICAgdGhpcy5faXBhbSA9IG5ldyB0ZklwYW0uVnBjSXBhbSh0aGlzLCBcIklwYW1cIiwge1xuICAgICAgb3BlcmF0aW5nUmVnaW9uczogdGhpcy5vcGVyYXRpbmdSZWdpb25zXG4gICAgICAgID8gdGhpcy5vcGVyYXRpbmdSZWdpb25zLm1hcCgocmVnaW9uKSA9PiAoeyByZWdpb25OYW1lOiByZWdpb24gfSkpXG4gICAgICAgIDogW10sXG4gICAgfSk7XG4gICAgdGhpcy5ub2RlLmRlZmF1bHRDaGlsZCA9IHRoaXMuX2lwYW07XG5cbiAgICB0aGlzLmlwYW1JZCA9IHRoaXMuX2lwYW0uaWQ7XG4gICAgdGhpcy5wdWJsaWNTY29wZSA9IG5ldyBJcGFtU2NvcGVCYXNlKHRoaXMsIFwiRGVmYXVsdFB1YmxpY1Njb3BlXCIsIHtcbiAgICAgIGlwYW1PcGVyYXRpbmdSZWdpb25zOiB0aGlzLm9wZXJhdGluZ1JlZ2lvbnMsXG4gICAgICBpcGFtSWQ6IHRoaXMuX2lwYW0uaWQsXG4gICAgICBpcGFtU2NvcGVJZDogdGhpcy5faXBhbS5wdWJsaWNEZWZhdWx0U2NvcGVJZCxcbiAgICB9KTtcbiAgICB0aGlzLnByaXZhdGVTY29wZSA9IG5ldyBJcGFtU2NvcGVCYXNlKHRoaXMsIFwiRGVmYXVsdFByaXZhdGVTY29wZVwiLCB7XG4gICAgICBpcGFtT3BlcmF0aW5nUmVnaW9uczogdGhpcy5vcGVyYXRpbmdSZWdpb25zLFxuICAgICAgaXBhbUlkOiB0aGlzLl9pcGFtLmlkLFxuICAgICAgaXBhbVNjb3BlSWQ6IHRoaXMuX2lwYW0ucHJpdmF0ZURlZmF1bHRTY29wZUlkLFxuICAgIH0pO1xuXG4gICAgdGhpcy5zY29wZXMucHVzaCh0aGlzLnB1YmxpY1Njb3BlLCB0aGlzLnByaXZhdGVTY29wZSk7XG4gIH1cblxuICAvKipcbiAgICogRnVuY3Rpb24gdG8gYWRkIGN1c3RvbSBzY29wZSB0byBhbiBleGlzdGluZyBJUEFNXG4gICAqIEN1c3RvbSBzY29wZXMgY2FuIG9ubHkgYmUgcHJpdmF0ZVxuICAgKi9cbiAgcHVibGljIGFkZFNjb3BlKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBvcHRpb25zOiBJcGFtU2NvcGVPcHRpb25zLFxuICApOiBJSXBhbVNjb3BlQmFzZSB7XG4gICAgY29uc3QgaXBhbVNjb3BlID0gbmV3IElwYW1TY29wZShzY29wZSwgaWQsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBpcGFtSWQ6IHRoaXMuaXBhbUlkLFxuICAgICAgaXBhbU9wZXJhdGluZ1JlZ2lvbnM6IHRoaXMub3BlcmF0aW5nUmVnaW9ucyxcbiAgICB9KTtcbiAgICB0aGlzLnNjb3Blcy5wdXNoKGlwYW1TY29wZSk7XG4gICAgcmV0dXJuIGlwYW1TY29wZTtcbiAgfVxufVxuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGNyZWF0ZSBJcGFtUG9vbCB1bmRlciBzY29wZVxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUlwYW1Qb29sKFxuICBzY29wZTogQ29uc3RydWN0LFxuICBpZDogc3RyaW5nLFxuICBzY29wZU9wdGlvbnM6IElwYW1TY29wZVByb3BzLFxuICBwb29sT3B0aW9uczogUG9vbE9wdGlvbnMsXG4gIHNjb3BlSWQ6IHN0cmluZyxcbik6IElwYW1Qb29sIHtcbiAgY29uc3QgaXNMb2NhbGVJbk9wZXJhdGluZ1JlZ2lvbnMgPSBzY29wZU9wdGlvbnMuaXBhbU9wZXJhdGluZ1JlZ2lvbnNcbiAgICA/IHNjb3BlT3B0aW9ucy5pcGFtT3BlcmF0aW5nUmVnaW9uc1xuICAgICAgICAubWFwKChyZWdpb24pID0+ICh7IHJlZ2lvbk5hbWU6IHJlZ2lvbiB9KSlcbiAgICAgICAgLnNvbWUoKHJlZ2lvbikgPT4gcmVnaW9uLnJlZ2lvbk5hbWUgPT09IHBvb2xPcHRpb25zLmxvY2FsZSlcbiAgICA6IGZhbHNlO1xuXG4gIGlmICghaXNMb2NhbGVJbk9wZXJhdGluZ1JlZ2lvbnMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgVGhlIHByb3ZpZGVkIGxvY2FsZSAnJHtwb29sT3B0aW9ucy5sb2NhbGV9JyBpcyBub3QgaW4gdGhlIG9wZXJhdGluZyByZWdpb25zLmAsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgSXBhbVBvb2woc2NvcGUsIGlkLCB7XG4gICAgaXBhbVBvb2xOYW1lOiBwb29sT3B0aW9ucy5pcGFtUG9vbE5hbWUsXG4gICAgYWRkcmVzc0ZhbWlseTogcG9vbE9wdGlvbnMuYWRkcmVzc0ZhbWlseSxcbiAgICBpcHY0UHJvdmlzaW9uZWRDaWRyczogcG9vbE9wdGlvbnMuaXB2NFByb3Zpc2lvbmVkQ2lkcnMsXG4gICAgaXBhbVNjb3BlSWQ6IHNjb3BlSWQsXG4gICAgbG9jYWxlOiBwb29sT3B0aW9ucy5sb2NhbGUsXG4gICAgcHVibGljSXBTb3VyY2U6IHBvb2xPcHRpb25zLnB1YmxpY0lwU291cmNlLFxuICAgIGF3c1NlcnZpY2U6IHBvb2xPcHRpb25zLmF3c1NlcnZpY2UsXG4gIH0pO1xufVxuIl19
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { keyPair as tfKeyPair } from "@cdktf/provider-aws";
|
|
2
|
+
import { Construct } from "constructs";
|
|
3
|
+
import { OperatingSystemType } from "./machine-image";
|
|
4
|
+
import { AwsConstructBase, AwsConstructProps, IAwsConstruct } from "../aws-construct";
|
|
5
|
+
import { IStringParameter } from "../storage/parameter";
|
|
6
|
+
/**
|
|
7
|
+
* The type of the key pair.
|
|
8
|
+
*/
|
|
9
|
+
export declare enum KeyPairType {
|
|
10
|
+
/**
|
|
11
|
+
* An RSA key.
|
|
12
|
+
*/
|
|
13
|
+
RSA = "rsa",
|
|
14
|
+
/**
|
|
15
|
+
* An ED25519 key.
|
|
16
|
+
*
|
|
17
|
+
* Note that ED25519 keys are not supported for Windows instances.
|
|
18
|
+
*/
|
|
19
|
+
ED25519 = "ed25519"
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* The properties of a Key Pair
|
|
23
|
+
*/
|
|
24
|
+
export interface KeyPairProps extends AwsConstructProps {
|
|
25
|
+
/**
|
|
26
|
+
* A unique name for the key pair.
|
|
27
|
+
*
|
|
28
|
+
* @default A generated name
|
|
29
|
+
*/
|
|
30
|
+
readonly keyPairName?: string;
|
|
31
|
+
/**
|
|
32
|
+
* Creates a unique name beginning with the specified prefix.
|
|
33
|
+
*
|
|
34
|
+
* Conflicts with `keyPairName`. If neither `keyPairName` nor `keyPairNamePrefix` is provided,
|
|
35
|
+
* TerraConstructs will create a unique key name using the `gridUUID` as prefix.
|
|
36
|
+
*
|
|
37
|
+
* @default A generated name
|
|
38
|
+
*/
|
|
39
|
+
readonly keyPairNamePrefix?: string;
|
|
40
|
+
/**
|
|
41
|
+
* The type of key pair.
|
|
42
|
+
*
|
|
43
|
+
* @default RSA (ignored if keyMaterial is provided)
|
|
44
|
+
*/
|
|
45
|
+
readonly type?: KeyPairType;
|
|
46
|
+
/**
|
|
47
|
+
* The public key material.
|
|
48
|
+
*
|
|
49
|
+
* If this is provided the key is considered "imported". For imported
|
|
50
|
+
* keys, it is assumed that you already have the private key material
|
|
51
|
+
* so the private key material will not be returned or stored in
|
|
52
|
+
* AWS Systems Manager Parameter Store.
|
|
53
|
+
*
|
|
54
|
+
* The private key generated by this resource will be stored unencrypted
|
|
55
|
+
* in your Terraform state file.
|
|
56
|
+
*
|
|
57
|
+
* Omitting the publicKeyMaterial for production deployments is not recommended.
|
|
58
|
+
* Instead, generate a private key file outside of Terraform and distribute it
|
|
59
|
+
* securely to the system where Terraform will be run.
|
|
60
|
+
*
|
|
61
|
+
* @default a public and private key will be generated
|
|
62
|
+
*/
|
|
63
|
+
readonly publicKeyMaterial?: string;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Outputs which may be registered for output via the Grid.
|
|
67
|
+
*/
|
|
68
|
+
export interface KeyPairOutputs {
|
|
69
|
+
/**
|
|
70
|
+
* The unique name of the key pair.
|
|
71
|
+
*/
|
|
72
|
+
readonly keyPairName: string;
|
|
73
|
+
/**
|
|
74
|
+
* The type of the key pair.
|
|
75
|
+
*
|
|
76
|
+
* @default no type specified
|
|
77
|
+
*/
|
|
78
|
+
readonly type?: KeyPairType;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Attributes of a Key Pair.
|
|
82
|
+
*/
|
|
83
|
+
export interface KeyPairAttributes {
|
|
84
|
+
/**
|
|
85
|
+
* The unique name of the key pair.
|
|
86
|
+
*/
|
|
87
|
+
readonly keyPairName: string;
|
|
88
|
+
/**
|
|
89
|
+
* The type of the key pair.
|
|
90
|
+
*
|
|
91
|
+
* @default no type specified
|
|
92
|
+
*/
|
|
93
|
+
readonly type?: KeyPairType;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* An EC2 Key Pair.
|
|
97
|
+
*/
|
|
98
|
+
export interface IKeyPair extends IAwsConstruct {
|
|
99
|
+
/** Strongly typed outputs */
|
|
100
|
+
readonly keyPairOutputs: KeyPairOutputs;
|
|
101
|
+
/**
|
|
102
|
+
* The name of the key pair.
|
|
103
|
+
*
|
|
104
|
+
* @attribute
|
|
105
|
+
*/
|
|
106
|
+
readonly keyPairName: string;
|
|
107
|
+
/**
|
|
108
|
+
* The type of the key pair.
|
|
109
|
+
*/
|
|
110
|
+
readonly type?: KeyPairType;
|
|
111
|
+
/**
|
|
112
|
+
* Used internally to determine whether the key pair is compatible with an OS type.
|
|
113
|
+
*
|
|
114
|
+
* @internal
|
|
115
|
+
*/
|
|
116
|
+
_isOsCompatible(osType: OperatingSystemType): boolean;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* An EC2 Key Pair.
|
|
120
|
+
*
|
|
121
|
+
* @resource AWS::EC2::KeyPair
|
|
122
|
+
*/
|
|
123
|
+
export declare class KeyPair extends AwsConstructBase implements IKeyPair {
|
|
124
|
+
/**
|
|
125
|
+
* Imports a key pair based on the name.
|
|
126
|
+
*/
|
|
127
|
+
static fromKeyPairName(scope: Construct, id: string, keyPairName: string): IKeyPair;
|
|
128
|
+
/**
|
|
129
|
+
* Imports a key pair with a name and optional type.
|
|
130
|
+
*/
|
|
131
|
+
static fromKeyPairAttributes(scope: Construct, id: string, attrs: KeyPairAttributes): IKeyPair;
|
|
132
|
+
get keyPairOutputs(): KeyPairOutputs;
|
|
133
|
+
get outputs(): Record<string, any>;
|
|
134
|
+
/**
|
|
135
|
+
* The unique name of the key pair.
|
|
136
|
+
*
|
|
137
|
+
* @attribute
|
|
138
|
+
*/
|
|
139
|
+
readonly keyPairName: string;
|
|
140
|
+
/**
|
|
141
|
+
* The fingerprint of the key pair.
|
|
142
|
+
*
|
|
143
|
+
* @attribute
|
|
144
|
+
*/
|
|
145
|
+
readonly keyPairFingerprint: string;
|
|
146
|
+
/**
|
|
147
|
+
* The unique ID of the key pair.
|
|
148
|
+
*
|
|
149
|
+
* @attribute
|
|
150
|
+
*/
|
|
151
|
+
readonly keyPairId: string;
|
|
152
|
+
/**
|
|
153
|
+
* The type of the key pair.
|
|
154
|
+
*/
|
|
155
|
+
readonly type?: KeyPairType;
|
|
156
|
+
private _privateKey?;
|
|
157
|
+
private _privateKeySsm?;
|
|
158
|
+
private readonly _isImport;
|
|
159
|
+
readonly resource: tfKeyPair.KeyPair;
|
|
160
|
+
constructor(scope: Construct, id: string, props?: KeyPairProps);
|
|
161
|
+
/**
|
|
162
|
+
* Whether the key material was imported.
|
|
163
|
+
*
|
|
164
|
+
* Keys with imported material do not have their private key material stored
|
|
165
|
+
* or returned automatically.
|
|
166
|
+
*/
|
|
167
|
+
get hasImportedMaterial(): boolean;
|
|
168
|
+
/**
|
|
169
|
+
* The Systems Manager Parameter Store parameter with the pair's private key material.
|
|
170
|
+
*/
|
|
171
|
+
get privateKey(): IStringParameter;
|
|
172
|
+
/**
|
|
173
|
+
* Used internally to determine whether the key pair is compatible with an OS type.
|
|
174
|
+
*
|
|
175
|
+
* @internal
|
|
176
|
+
*/
|
|
177
|
+
_isOsCompatible(osType: OperatingSystemType): boolean;
|
|
178
|
+
}
|