terraconstructs 0.0.25 → 0.1.1
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 +83939 -55116
- package/.mise.toml +2 -2
- package/.nvmrc +1 -1
- package/LICENSE +202 -674
- package/go.mod +1 -1
- package/go.sum +2 -2
- package/lib/asset-manager.d.ts +23 -0
- package/lib/asset-manager.js +3 -0
- package/lib/asset-staging.d.ts +178 -0
- package/lib/asset-staging.js +589 -0
- package/lib/assets.d.ts +359 -0
- package/lib/assets.js +55 -0
- package/lib/aws/arn.js +16 -15
- package/lib/aws/aws-asset-manager.d.ts +91 -0
- package/lib/aws/aws-asset-manager.js +244 -0
- package/lib/aws/aws-construct.js +1 -1
- package/lib/aws/aws-stack.d.ts +37 -0
- package/lib/aws/aws-stack.js +30 -9
- package/lib/aws/aws-tags.js +2 -2
- package/lib/aws/cloudwatch/actions/appscaling.d.ts +15 -0
- package/lib/aws/cloudwatch/actions/appscaling.js +24 -0
- package/lib/aws/cloudwatch/actions/ec2.js +1 -1
- package/lib/aws/cloudwatch/actions/index.d.ts +3 -0
- package/lib/aws/cloudwatch/actions/index.js +4 -4
- package/lib/aws/cloudwatch/actions/lambda.js +1 -1
- package/lib/aws/cloudwatch/actions/sns.d.ts +14 -0
- package/lib/aws/cloudwatch/actions/sns.js +23 -0
- package/lib/aws/cloudwatch/actions/ssm.d.ts +72 -0
- package/lib/aws/cloudwatch/actions/ssm.js +104 -0
- 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.js +1 -1
- 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/query-definition.js +2 -2
- package/lib/aws/cloudwatch/stats.js +1 -1
- package/lib/aws/cloudwatch/subscription-filter.js +1 -1
- package/lib/aws/cloudwatch/text.js +1 -1
- package/lib/aws/cloudwatch/variable.js +3 -3
- package/lib/aws/cloudwatch/widget.js +1 -1
- package/lib/aws/compute/access-log.d.ts +478 -0
- package/lib/aws/compute/access-log.js +649 -0
- package/lib/aws/compute/activity.js +1 -1
- package/lib/aws/compute/alb/application-listener-action.js +1 -1
- package/lib/aws/compute/alb/application-listener-certificate.js +1 -1
- package/lib/aws/compute/alb/application-listener-rule.js +1 -1
- package/lib/aws/compute/alb/application-listener.js +1 -1
- package/lib/aws/compute/alb/application-load-balancer.js +1 -1
- package/lib/aws/compute/alb/application-target-group.js +1 -1
- package/lib/aws/compute/alb/conditions.js +1 -1
- package/lib/aws/compute/alb/trust-store-revocation.js +1 -1
- package/lib/aws/compute/alb/trust-store.js +1 -1
- package/lib/aws/compute/api-definition.d.ts +106 -0
- package/lib/aws/compute/api-definition.js +200 -0
- package/lib/aws/compute/api-key.d.ts +184 -0
- package/lib/aws/compute/api-key.js +197 -0
- package/lib/aws/compute/apigateway-canned-metrics.generated.d.ts +169 -0
- package/lib/aws/compute/apigateway-canned-metrics.generated.js +63 -0
- package/lib/aws/compute/apigateway-util.d.ts +31 -0
- package/lib/aws/compute/apigateway-util.js +152 -0
- package/lib/aws/compute/architecture.js +1 -1
- package/lib/aws/compute/aspects/require-imdsv2-aspect.js +2 -2
- package/lib/aws/compute/authorizer.d.ts +35 -0
- package/lib/aws/compute/authorizer.js +28 -0
- package/lib/aws/compute/authorizers/identity-source.d.ts +37 -0
- package/lib/aws/compute/authorizers/identity-source.js +61 -0
- package/lib/aws/compute/authorizers/index.d.ts +2 -0
- package/lib/aws/compute/authorizers/index.js +20 -0
- package/lib/aws/compute/authorizers/lambda.d.ts +140 -0
- package/lib/aws/compute/authorizers/lambda.js +208 -0
- package/lib/aws/compute/base-path-mapping.d.ts +49 -0
- package/lib/aws/compute/base-path-mapping.js +52 -0
- package/lib/aws/compute/base-scalable-attribute.js +3 -3
- package/lib/aws/compute/bastion-host.js +1 -1
- package/lib/aws/compute/chain.js +1 -1
- package/lib/aws/compute/client-vpn-authorization-rule.js +1 -1
- package/lib/aws/compute/client-vpn-endpoint.js +2 -2
- package/lib/aws/compute/client-vpn-route.js +2 -2
- package/lib/aws/compute/code.d.ts +415 -0
- package/lib/aws/compute/code.js +424 -0
- package/lib/aws/compute/condition.js +1 -1
- package/lib/aws/compute/connections.js +1 -1
- package/lib/aws/compute/cors.d.ts +102 -0
- package/lib/aws/compute/cors.js +33 -0
- package/lib/aws/compute/deployment.d.ts +83 -0
- package/lib/aws/compute/deployment.js +158 -0
- package/lib/aws/compute/domain-name.d.ts +153 -0
- package/lib/aws/compute/domain-name.js +158 -0
- package/lib/aws/compute/event-invoke-config.d.ts +2 -2
- package/lib/aws/compute/event-invoke-config.js +4 -4
- package/lib/aws/compute/event-source-filter.js +2 -2
- package/lib/aws/compute/event-source-mapping.d.ts +2 -2
- package/lib/aws/compute/event-source-mapping.js +9 -7
- 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 +3 -2
- package/lib/aws/compute/fields.js +4 -4
- package/lib/aws/compute/function-alias.d.ts +2 -0
- package/lib/aws/compute/function-alias.js +14 -2
- package/lib/aws/compute/function-base.d.ts +23 -0
- package/lib/aws/compute/function-base.js +4 -4
- 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/bundling.d.ts +75 -0
- package/lib/aws/compute/function-nodejs/bundling.js +405 -0
- package/lib/aws/compute/function-nodejs/function.d.ts +99 -0
- package/lib/aws/compute/function-nodejs/function.js +175 -0
- package/lib/aws/compute/function-nodejs/index.d.ts +2 -0
- package/lib/aws/compute/function-nodejs/index.js +19 -0
- package/lib/aws/compute/function-nodejs/package-installation.d.ts +8 -0
- package/lib/aws/compute/function-nodejs/package-installation.js +36 -0
- package/lib/aws/compute/function-nodejs/package-manager.d.ts +33 -0
- package/lib/aws/compute/function-nodejs/package-manager.js +99 -0
- package/lib/aws/compute/function-nodejs/types.d.ts +410 -0
- package/lib/aws/compute/function-nodejs/types.js +81 -0
- package/lib/aws/compute/function-nodejs/util.d.ts +60 -0
- package/lib/aws/compute/function-nodejs/util.js +202 -0
- package/lib/aws/compute/function-url.d.ts +2 -2
- package/lib/aws/compute/function-url.js +4 -4
- package/lib/aws/compute/function.d.ts +43 -5
- package/lib/aws/compute/function.js +106 -18
- package/lib/aws/compute/gateway-response.d.ts +157 -0
- package/lib/aws/compute/gateway-response.js +156 -0
- package/lib/aws/compute/handler.d.ts +10 -0
- package/lib/aws/compute/handler.js +20 -0
- package/lib/aws/compute/index.d.ts +27 -0
- package/lib/aws/compute/index.js +29 -1
- package/lib/aws/compute/instance-types.js +1 -1
- package/lib/aws/compute/instance.js +1 -1
- package/lib/aws/compute/integration.d.ts +311 -0
- package/lib/aws/compute/integration.js +165 -0
- package/lib/aws/compute/integrations/aws.d.ts +72 -0
- package/lib/aws/compute/integrations/aws.js +55 -0
- package/lib/aws/compute/integrations/http.d.ts +37 -0
- package/lib/aws/compute/integrations/http.js +35 -0
- package/lib/aws/compute/integrations/index.d.ts +6 -0
- package/lib/aws/compute/integrations/index.js +24 -0
- package/lib/aws/compute/integrations/lambda.d.ts +40 -0
- package/lib/aws/compute/integrations/lambda.js +73 -0
- package/lib/aws/compute/integrations/mock.d.ts +16 -0
- package/lib/aws/compute/integrations/mock.js +30 -0
- package/lib/aws/compute/integrations/request-context.d.ts +144 -0
- package/lib/aws/compute/integrations/request-context.js +3 -0
- package/lib/aws/compute/integrations/stepfunctions.d.ts +102 -0
- package/lib/aws/compute/integrations/stepfunctions.js +268 -0
- package/lib/aws/compute/ip-addresses.js +2 -2
- package/lib/aws/compute/ipam.js +1 -1
- package/lib/aws/compute/json-schema.d.ts +75 -0
- package/lib/aws/compute/json-schema.js +23 -0
- package/lib/aws/compute/key-pair.js +1 -1
- package/lib/aws/compute/lambda-api.d.ts +46 -0
- package/lib/aws/compute/lambda-api.js +64 -0
- package/lib/aws/compute/launch-template.js +2 -2
- package/lib/aws/compute/lb-shared/base-listener.js +1 -1
- package/lib/aws/compute/lb-shared/base-load-balancer.js +2 -2
- package/lib/aws/compute/lb-shared/base-target-group.js +1 -1
- package/lib/aws/compute/lb-shared/listener-certificate.js +1 -1
- package/lib/aws/compute/lb-shared/load-balancer-targets.js +2 -2
- package/lib/aws/compute/lb-targets/alb-target.js +3 -3
- package/lib/aws/compute/lb-targets/instance-target.js +2 -2
- package/lib/aws/compute/lb-targets/ip-target.js +1 -1
- package/lib/aws/compute/lb-targets/lambda-target.js +1 -1
- package/lib/aws/compute/load-balancer.js +3 -3
- package/lib/aws/compute/machine-image/amazon-linux-2022.js +2 -2
- package/lib/aws/compute/machine-image/amazon-linux-2023.js +2 -2
- package/lib/aws/compute/machine-image/amazon-linux2.js +2 -2
- package/lib/aws/compute/machine-image/common.js +1 -1
- package/lib/aws/compute/machine-image/machine-image.js +8 -8
- package/lib/aws/compute/method.d.ts +219 -0
- package/lib/aws/compute/method.js +396 -0
- package/lib/aws/compute/methodresponse.d.ts +28 -0
- package/lib/aws/compute/methodresponse.js +3 -0
- package/lib/aws/compute/model.d.ts +143 -0
- package/lib/aws/compute/model.js +141 -0
- package/lib/aws/compute/nat.js +5 -5
- package/lib/aws/compute/network-acl-types.js +2 -2
- package/lib/aws/compute/network-acl.js +3 -3
- package/lib/aws/compute/nlb/network-listener-action.js +1 -1
- package/lib/aws/compute/nlb/network-listener.js +1 -1
- package/lib/aws/compute/nlb/network-load-balancer.js +1 -1
- package/lib/aws/compute/nlb/network-target-group.js +1 -1
- package/lib/aws/compute/peer.js +1 -1
- package/lib/aws/compute/placement-group.js +1 -1
- package/lib/aws/compute/port.js +1 -1
- package/lib/aws/compute/prefix-list.js +1 -1
- package/lib/aws/compute/requestvalidator.d.ts +50 -0
- package/lib/aws/compute/requestvalidator.js +59 -0
- package/lib/aws/compute/resource.d.ts +223 -0
- package/lib/aws/compute/resource.js +316 -0
- package/lib/aws/compute/restapi.d.ts +510 -0
- package/lib/aws/compute/restapi.js +626 -0
- package/lib/aws/compute/route.js +8 -8
- package/lib/aws/compute/runtime.d.ts +282 -0
- package/lib/aws/compute/runtime.js +337 -0
- package/lib/aws/compute/scalable-target.js +3 -3
- package/lib/aws/compute/schedule.js +3 -3
- package/lib/aws/compute/security-group.js +1 -1
- package/lib/aws/compute/stage.d.ts +350 -0
- package/lib/aws/compute/stage.js +304 -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.js +4 -4
- 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 +1 -1
- 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/step-scaling-action.js +3 -3
- package/lib/aws/compute/step-scaling-policy.js +1 -1
- package/lib/aws/compute/stepfunctions-api.d.ts +103 -0
- package/lib/aws/compute/stepfunctions-api.js +39 -0
- package/lib/aws/compute/subnet-v2.js +2 -2
- package/lib/aws/compute/subnet.js +1 -1
- package/lib/aws/compute/target-tracking-scaling-policy.js +3 -3
- 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/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 +1 -1
- package/lib/aws/compute/usage-plan.d.ts +194 -0
- package/lib/aws/compute/usage-plan.js +174 -0
- package/lib/aws/compute/user-data.js +3 -3
- package/lib/aws/compute/volume.js +2 -2
- package/lib/aws/compute/vpc-endpoint-service.js +1 -1
- package/lib/aws/compute/vpc-endpoint.js +6 -6
- package/lib/aws/compute/vpc-flow-logs.js +4 -4
- package/lib/aws/compute/vpc-link.d.ts +104 -0
- package/lib/aws/compute/vpc-link.js +137 -0
- package/lib/aws/compute/vpc-v2-base.js +1 -1
- package/lib/aws/compute/vpc-v2.js +2 -2
- package/lib/aws/compute/vpc.js +4 -4
- package/lib/aws/compute/vpn.js +3 -3
- package/lib/aws/edge/certificate.js +1 -1
- package/lib/aws/edge/distribution.js +3 -3
- package/lib/aws/edge/dns-alias-record-targets.js +3 -3
- package/lib/aws/edge/dns-record.js +13 -13
- package/lib/aws/edge/dns-zone.js +1 -1
- package/lib/aws/edge/function.js +2 -2
- package/lib/aws/edge/key-value-store.js +4 -4
- package/lib/aws/edge/origin.js +3 -3
- 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/group.js +1 -1
- package/lib/aws/iam/instance-profile.js +1 -1
- package/lib/aws/iam/managed-policy.js +1 -1
- package/lib/aws/iam/oidc-provider.js +1 -1
- package/lib/aws/iam/policy-document.js +1 -1
- package/lib/aws/iam/policy-statement.js +1 -1
- package/lib/aws/iam/policy.js +1 -1
- package/lib/aws/iam/principals.js +20 -20
- package/lib/aws/iam/role.js +1 -1
- package/lib/aws/iam/saml-provider.js +2 -2
- package/lib/aws/iam/unknown-principal.js +1 -1
- package/lib/aws/iam/user.js +5 -5
- package/lib/aws/index.d.ts +1 -0
- package/lib/aws/index.js +4 -1
- package/lib/aws/network/simple-ipv4-vpc.js +1 -1
- package/lib/aws/network/subnet-group.js +3 -3
- package/lib/aws/network/subnet.js +4 -4
- package/lib/aws/notify/archive.js +1 -1
- package/lib/aws/notify/connection.js +3 -3
- package/lib/aws/notify/event-bus.js +3 -3
- package/lib/aws/notify/event-pattern.js +1 -1
- package/lib/aws/notify/input.js +2 -2
- package/lib/aws/notify/kinesis-stream.js +1 -1
- package/lib/aws/notify/notification-rule.d.ts +1 -1
- package/lib/aws/notify/notification-rule.js +5 -5
- package/lib/aws/notify/policy.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 +1 -1
- package/lib/aws/notify/schedule.js +1 -1
- package/lib/aws/notify/subscription-filter.js +1 -1
- package/lib/aws/notify/subscription.js +4 -4
- package/lib/aws/notify/subscriptions/email.js +1 -1
- package/lib/aws/notify/subscriptions/lambda.js +1 -1
- package/lib/aws/notify/subscriptions/sms.js +1 -1
- package/lib/aws/notify/subscriptions/sqs.js +1 -1
- package/lib/aws/notify/subscriptions/url.js +1 -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/topic-base.js +1 -1
- package/lib/aws/notify/topic.js +6 -5
- package/lib/aws/partition.d.ts +21 -0
- package/lib/aws/partition.js +42 -0
- package/lib/aws/storage/assets/image-asset.d.ts +379 -0
- package/lib/aws/storage/assets/image-asset.js +247 -0
- package/lib/aws/storage/assets/index.d.ts +2 -0
- package/lib/aws/storage/assets/index.js +21 -0
- package/lib/aws/storage/assets/s3.d.ts +125 -0
- package/lib/aws/storage/assets/s3.js +80 -0
- package/lib/aws/storage/auth-token.d.ts +25 -0
- package/lib/aws/storage/auth-token.js +54 -0
- package/lib/aws/storage/billing.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.d.ts +1 -1
- package/lib/aws/storage/bucket-source.js +4 -4
- package/lib/aws/storage/bucket.d.ts +14 -6
- package/lib/aws/storage/bucket.js +48 -40
- package/lib/aws/storage/capacity.js +1 -1
- package/lib/aws/storage/ecr-lifecycle.d.ts +88 -0
- package/lib/aws/storage/ecr-lifecycle.js +23 -0
- package/lib/aws/storage/ecr-repository.d.ts +446 -0
- package/lib/aws/storage/ecr-repository.js +685 -0
- package/lib/aws/storage/encryption.js +1 -1
- package/lib/aws/storage/index.d.ts +5 -0
- package/lib/aws/storage/index.js +10 -3
- package/lib/aws/storage/location.d.ts +17 -0
- package/lib/aws/storage/location.js +4 -0
- package/lib/aws/storage/notification-targets/function.js +1 -1
- package/lib/aws/storage/notification-targets/queue.js +1 -1
- package/lib/aws/storage/origin-access-identity.js +1 -1
- package/lib/aws/storage/parameter.js +2 -2
- package/lib/aws/storage/table.js +3 -3
- package/lib/aws/storage/util.d.ts +8 -20
- package/lib/aws/storage/util.js +56 -34
- package/lib/aws/util.d.ts +1 -0
- package/lib/aws/util.js +6 -1
- package/lib/bundling.d.ts +434 -0
- package/lib/bundling.js +368 -0
- package/lib/construct-base.js +2 -2
- package/lib/duration.js +1 -1
- package/lib/expiration.js +1 -1
- package/lib/fs/copy.d.ts +2 -0
- package/lib/fs/copy.js +57 -0
- package/lib/fs/fingerprint.d.ts +21 -0
- package/lib/fs/fingerprint.js +165 -0
- package/lib/fs/ignore.d.ts +107 -0
- package/lib/fs/ignore.js +190 -0
- package/lib/fs/index.d.ts +47 -0
- package/lib/fs/index.js +88 -0
- package/lib/fs/options.d.ts +110 -0
- package/lib/fs/options.js +60 -0
- package/lib/fs/utils.d.ts +11 -0
- package/lib/fs/utils.js +34 -0
- package/lib/index.d.ts +5 -0
- package/lib/index.js +7 -1
- package/lib/private/asset-staging.d.ts +83 -0
- package/lib/private/asset-staging.js +205 -0
- package/lib/private/cache.d.ts +17 -0
- package/lib/private/cache.js +35 -0
- package/lib/private/jsii-deprecated.d.ts +2 -0
- package/lib/private/jsii-deprecated.js +19 -0
- package/lib/private/unique-resource-name.js +3 -2
- package/lib/size.js +1 -1
- package/lib/stack-base.js +1 -1
- package/lib/terra-func.js +2 -2
- package/lib/time-zone.js +1 -1
- package/node_modules/@balena/dockerignore/CHANGELOG.md +31 -0
- package/node_modules/@balena/dockerignore/LICENSE.md +206 -0
- package/node_modules/@balena/dockerignore/README.md +261 -0
- package/node_modules/@balena/dockerignore/ignore.js +363 -0
- package/node_modules/@balena/dockerignore/index.d.ts +45 -0
- package/node_modules/@balena/dockerignore/package.json +49 -0
- package/node_modules/balanced-match/.github/FUNDING.yml +2 -0
- package/node_modules/balanced-match/LICENSE.md +21 -0
- package/node_modules/balanced-match/README.md +97 -0
- package/node_modules/balanced-match/index.js +62 -0
- package/node_modules/balanced-match/package.json +48 -0
- package/node_modules/concat-map/.travis.yml +4 -0
- package/node_modules/concat-map/LICENSE +18 -0
- package/node_modules/concat-map/README.markdown +62 -0
- package/node_modules/concat-map/example/map.js +6 -0
- package/node_modules/concat-map/index.js +13 -0
- package/node_modules/concat-map/package.json +43 -0
- package/node_modules/concat-map/test/map.js +39 -0
- package/node_modules/ignore/LICENSE-MIT +21 -0
- package/node_modules/ignore/README.md +412 -0
- package/node_modules/ignore/index.d.ts +61 -0
- package/node_modules/ignore/index.js +636 -0
- package/node_modules/ignore/legacy.js +559 -0
- package/node_modules/ignore/package.json +74 -0
- package/node_modules/minimatch/LICENSE +15 -0
- package/node_modules/minimatch/README.md +230 -0
- package/node_modules/minimatch/minimatch.js +947 -0
- package/node_modules/minimatch/node_modules/brace-expansion/LICENSE +21 -0
- package/node_modules/minimatch/node_modules/brace-expansion/README.md +129 -0
- package/node_modules/minimatch/node_modules/brace-expansion/index.js +201 -0
- package/node_modules/minimatch/node_modules/brace-expansion/package.json +47 -0
- package/node_modules/minimatch/package.json +33 -0
- package/package.json +14 -5
- package/lib/aws/compute/function-nodejs.d.ts +0 -55
- package/lib/aws/compute/function-nodejs.js +0 -70
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.StepFunctionsIntegration = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
const fs = require("fs");
|
|
7
|
+
const path = require("path");
|
|
8
|
+
const cdktf_1 = require("cdktf");
|
|
9
|
+
const sfn = require("..");
|
|
10
|
+
const aws_1 = require("./aws");
|
|
11
|
+
const iam = require("../../iam");
|
|
12
|
+
// import { ValidationError } from "../../../core/lib/errors";
|
|
13
|
+
const integration_1 = require("../integration");
|
|
14
|
+
const model_1 = require("../model");
|
|
15
|
+
/**
|
|
16
|
+
* Options to integrate with various StepFunction API
|
|
17
|
+
*/
|
|
18
|
+
class StepFunctionsIntegration {
|
|
19
|
+
/**
|
|
20
|
+
* Integrates a Synchronous Express State Machine from AWS Step Functions to an API Gateway method.
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
*
|
|
24
|
+
* const stateMachine = new stepfunctions.StateMachine(this, 'MyStateMachine', {
|
|
25
|
+
* stateMachineType: stepfunctions.StateMachineType.EXPRESS,
|
|
26
|
+
* definition: stepfunctions.Chain.start(new stepfunctions.Pass(this, 'Pass')),
|
|
27
|
+
* });
|
|
28
|
+
*
|
|
29
|
+
* const api = new apigateway.RestApi(this, 'Api', {
|
|
30
|
+
* restApiName: 'MyApi',
|
|
31
|
+
* });
|
|
32
|
+
* api.root.addMethod('GET', apigateway.StepFunctionsIntegration.startExecution(stateMachine));
|
|
33
|
+
*/
|
|
34
|
+
static startExecution(stateMachine, options) {
|
|
35
|
+
return new StepFunctionsExecutionIntegration(stateMachine, options);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
exports.StepFunctionsIntegration = StepFunctionsIntegration;
|
|
39
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
40
|
+
StepFunctionsIntegration[_a] = { fqn: "terraconstructs.aws.compute.StepFunctionsIntegration", version: "0.1.1" };
|
|
41
|
+
class StepFunctionsExecutionIntegration extends aws_1.AwsIntegration {
|
|
42
|
+
constructor(stateMachine, options = {}) {
|
|
43
|
+
super({
|
|
44
|
+
service: "states",
|
|
45
|
+
action: "StartSyncExecution",
|
|
46
|
+
options: {
|
|
47
|
+
credentialsRole: options.credentialsRole,
|
|
48
|
+
integrationResponses: options.integrationResponses ?? integrationResponse(),
|
|
49
|
+
passthroughBehavior: integration_1.PassthroughBehavior.NEVER,
|
|
50
|
+
requestTemplates: requestTemplates(stateMachine, options),
|
|
51
|
+
...options,
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
this.stateMachine = stateMachine;
|
|
55
|
+
this.useDefaultMethodResponses = options.useDefaultMethodResponses ?? true;
|
|
56
|
+
}
|
|
57
|
+
bind(method) {
|
|
58
|
+
const bindResult = super.bind(method);
|
|
59
|
+
const credentialsRole = bindResult.options?.credentialsRole ??
|
|
60
|
+
new iam.Role(method, "StartSyncExecutionRole", {
|
|
61
|
+
assumedBy: new iam.ServicePrincipal("apigateway.amazonaws.com"),
|
|
62
|
+
});
|
|
63
|
+
this.stateMachine.grantStartSyncExecution(credentialsRole);
|
|
64
|
+
let stateMachineName;
|
|
65
|
+
if (this.stateMachine instanceof sfn.StateMachine) {
|
|
66
|
+
const stateMachineType = this.stateMachine
|
|
67
|
+
.stateMachineType;
|
|
68
|
+
if (stateMachineType !== sfn.StateMachineType.EXPRESS) {
|
|
69
|
+
// throw new ValidationError(
|
|
70
|
+
throw new Error('State Machine must be of type "EXPRESS". Please use StateMachineType.EXPRESS as the stateMachineType');
|
|
71
|
+
}
|
|
72
|
+
// if not imported, extract the name from the CFN layer to reach the
|
|
73
|
+
// literal value if it is given (rather than a token)
|
|
74
|
+
stateMachineName = this.stateMachine.node.defaultChild.nameInput;
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
// imported state machine
|
|
78
|
+
stateMachineName = `StateMachine-${this.stateMachine.stack.node.addr}`;
|
|
79
|
+
}
|
|
80
|
+
let deploymentToken;
|
|
81
|
+
if (stateMachineName !== undefined &&
|
|
82
|
+
!cdktf_1.Token.isUnresolved(stateMachineName)) {
|
|
83
|
+
deploymentToken = JSON.stringify({ stateMachineName });
|
|
84
|
+
}
|
|
85
|
+
if (this.useDefaultMethodResponses) {
|
|
86
|
+
for (const methodResponse of METHOD_RESPONSES) {
|
|
87
|
+
method.addMethodResponse(methodResponse);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return {
|
|
91
|
+
...bindResult,
|
|
92
|
+
options: {
|
|
93
|
+
...bindResult.options,
|
|
94
|
+
credentialsRole,
|
|
95
|
+
},
|
|
96
|
+
deploymentToken,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Defines the integration response that passes the result on success,
|
|
102
|
+
* or the error on failure, from the synchronous execution to the caller.
|
|
103
|
+
*
|
|
104
|
+
* @returns integrationResponse mapping
|
|
105
|
+
*/
|
|
106
|
+
function integrationResponse() {
|
|
107
|
+
const errorResponse = [
|
|
108
|
+
{
|
|
109
|
+
/**
|
|
110
|
+
* Specifies the regular expression (regex) pattern used to choose
|
|
111
|
+
* an integration response based on the response from the back end.
|
|
112
|
+
* In this case it will match all '4XX' HTTP Errors
|
|
113
|
+
*/
|
|
114
|
+
selectionPattern: "4\\d{2}",
|
|
115
|
+
statusCode: "400",
|
|
116
|
+
responseTemplates: {
|
|
117
|
+
"application/json": `{
|
|
118
|
+
"error": "Bad request!"
|
|
119
|
+
}`,
|
|
120
|
+
},
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
/**
|
|
124
|
+
* Match all '5XX' HTTP Errors
|
|
125
|
+
*/
|
|
126
|
+
selectionPattern: "5\\d{2}",
|
|
127
|
+
statusCode: "500",
|
|
128
|
+
responseTemplates: {
|
|
129
|
+
"application/json": "\"error\": $input.path('$.error')",
|
|
130
|
+
},
|
|
131
|
+
},
|
|
132
|
+
];
|
|
133
|
+
const integResponse = [
|
|
134
|
+
{
|
|
135
|
+
statusCode: "200",
|
|
136
|
+
responseTemplates: {
|
|
137
|
+
/* eslint-disable */
|
|
138
|
+
"application/json": [
|
|
139
|
+
"#set($inputRoot = $input.path('$'))",
|
|
140
|
+
"#if($input.path('$.status').toString().equals(\"FAILED\"))",
|
|
141
|
+
"#set($context.responseOverride.status = 500)",
|
|
142
|
+
"{",
|
|
143
|
+
'"error": "$input.path(\'$.error\')",',
|
|
144
|
+
'"cause": "$input.path(\'$.cause\')"',
|
|
145
|
+
"}",
|
|
146
|
+
"#else",
|
|
147
|
+
"$input.path('$.output')",
|
|
148
|
+
"#end",
|
|
149
|
+
/* eslint-enable */
|
|
150
|
+
].join("\n"),
|
|
151
|
+
},
|
|
152
|
+
},
|
|
153
|
+
...errorResponse,
|
|
154
|
+
];
|
|
155
|
+
return integResponse;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Defines the request template that will be used for the integration
|
|
159
|
+
*/
|
|
160
|
+
function requestTemplates(stateMachine, options) {
|
|
161
|
+
const templateStr = templateString(stateMachine, options);
|
|
162
|
+
const requestTemplate = {
|
|
163
|
+
"application/json": templateStr,
|
|
164
|
+
};
|
|
165
|
+
return requestTemplate;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Reads the VTL template and returns the template string to be used
|
|
169
|
+
* for the request template.
|
|
170
|
+
*/
|
|
171
|
+
function templateString(stateMachine, options) {
|
|
172
|
+
let templateStr;
|
|
173
|
+
let requestContextStr = "";
|
|
174
|
+
const includeHeader = options.headers ?? false;
|
|
175
|
+
const includeQueryString = options.querystring ?? true;
|
|
176
|
+
const includePath = options.path ?? true;
|
|
177
|
+
const includeAuthorizer = options.authorizer ?? false;
|
|
178
|
+
if (options.requestContext &&
|
|
179
|
+
Object.keys(options.requestContext).length > 0) {
|
|
180
|
+
requestContextStr = requestContext(options.requestContext);
|
|
181
|
+
}
|
|
182
|
+
templateStr = fs.readFileSync(path.join(__dirname, "stepfunctions.vtl"), {
|
|
183
|
+
encoding: "utf-8",
|
|
184
|
+
});
|
|
185
|
+
templateStr = templateStr.replace("%STATEMACHINE%", stateMachine.stateMachineArn);
|
|
186
|
+
templateStr = templateStr.replace("%INCLUDE_HEADERS%", String(includeHeader));
|
|
187
|
+
templateStr = templateStr.replace("%INCLUDE_QUERYSTRING%", String(includeQueryString));
|
|
188
|
+
templateStr = templateStr.replace("%INCLUDE_PATH%", String(includePath));
|
|
189
|
+
templateStr = templateStr.replace("%INCLUDE_AUTHORIZER%", String(includeAuthorizer));
|
|
190
|
+
templateStr = templateStr.replace("%REQUESTCONTEXT%", requestContextStr);
|
|
191
|
+
return templateStr;
|
|
192
|
+
}
|
|
193
|
+
function requestContext(requestContextObj) {
|
|
194
|
+
const context = {
|
|
195
|
+
accountId: requestContextObj?.accountId
|
|
196
|
+
? "$context.identity.accountId"
|
|
197
|
+
: undefined,
|
|
198
|
+
apiId: requestContextObj?.apiId ? "$context.apiId" : undefined,
|
|
199
|
+
apiKey: requestContextObj?.apiKey ? "$context.identity.apiKey" : undefined,
|
|
200
|
+
authorizerPrincipalId: requestContextObj?.authorizerPrincipalId
|
|
201
|
+
? "$context.authorizer.principalId"
|
|
202
|
+
: undefined,
|
|
203
|
+
caller: requestContextObj?.caller ? "$context.identity.caller" : undefined,
|
|
204
|
+
cognitoAuthenticationProvider: requestContextObj?.cognitoAuthenticationProvider
|
|
205
|
+
? "$context.identity.cognitoAuthenticationProvider"
|
|
206
|
+
: undefined,
|
|
207
|
+
cognitoAuthenticationType: requestContextObj?.cognitoAuthenticationType
|
|
208
|
+
? "$context.identity.cognitoAuthenticationType"
|
|
209
|
+
: undefined,
|
|
210
|
+
cognitoIdentityId: requestContextObj?.cognitoIdentityId
|
|
211
|
+
? "$context.identity.cognitoIdentityId"
|
|
212
|
+
: undefined,
|
|
213
|
+
cognitoIdentityPoolId: requestContextObj?.cognitoIdentityPoolId
|
|
214
|
+
? "$context.identity.cognitoIdentityPoolId"
|
|
215
|
+
: undefined,
|
|
216
|
+
httpMethod: requestContextObj?.httpMethod
|
|
217
|
+
? "$context.httpMethod"
|
|
218
|
+
: undefined,
|
|
219
|
+
stage: requestContextObj?.stage ? "$context.stage" : undefined,
|
|
220
|
+
sourceIp: requestContextObj?.sourceIp
|
|
221
|
+
? "$context.identity.sourceIp"
|
|
222
|
+
: undefined,
|
|
223
|
+
user: requestContextObj?.user ? "$context.identity.user" : undefined,
|
|
224
|
+
userAgent: requestContextObj?.userAgent
|
|
225
|
+
? "$context.identity.userAgent"
|
|
226
|
+
: undefined,
|
|
227
|
+
userArn: requestContextObj?.userArn
|
|
228
|
+
? "$context.identity.userArn"
|
|
229
|
+
: undefined,
|
|
230
|
+
requestId: requestContextObj?.requestId ? "$context.requestId" : undefined,
|
|
231
|
+
resourceId: requestContextObj?.resourceId
|
|
232
|
+
? "$context.resourceId"
|
|
233
|
+
: undefined,
|
|
234
|
+
resourcePath: requestContextObj?.resourcePath
|
|
235
|
+
? "$context.resourcePath"
|
|
236
|
+
: undefined,
|
|
237
|
+
};
|
|
238
|
+
const contextAsString = JSON.stringify(context);
|
|
239
|
+
// The VTL Template conflicts with double-quotes (") for strings.
|
|
240
|
+
// Before sending to the template, we replace double-quotes (") with @@ and replace it back inside the .vtl file
|
|
241
|
+
const doublequotes = '"';
|
|
242
|
+
const replaceWith = "@@";
|
|
243
|
+
return contextAsString.split(doublequotes).join(replaceWith);
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Method response model for each HTTP code response
|
|
247
|
+
*/
|
|
248
|
+
const METHOD_RESPONSES = [
|
|
249
|
+
{
|
|
250
|
+
statusCode: "200",
|
|
251
|
+
responseModels: {
|
|
252
|
+
"application/json": model_1.Model.EMPTY_MODEL,
|
|
253
|
+
},
|
|
254
|
+
},
|
|
255
|
+
{
|
|
256
|
+
statusCode: "400",
|
|
257
|
+
responseModels: {
|
|
258
|
+
"application/json": model_1.Model.ERROR_MODEL,
|
|
259
|
+
},
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
statusCode: "500",
|
|
263
|
+
responseModels: {
|
|
264
|
+
"application/json": model_1.Model.ERROR_MODEL,
|
|
265
|
+
},
|
|
266
|
+
},
|
|
267
|
+
];
|
|
268
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcGZ1bmN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hd3MvY29tcHV0ZS9pbnRlZ3JhdGlvbnMvc3RlcGZ1bmN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFFN0IsaUNBQThCO0FBRTlCLDBCQUEwQjtBQUMxQiwrQkFBdUM7QUFDdkMsaUNBQWlDO0FBQ2pDLDhEQUE4RDtBQUM5RCxnREFJd0I7QUFFeEIsb0NBQWlDO0FBc0ZqQzs7R0FFRztBQUNILE1BQWEsd0JBQXdCO0lBQ25DOzs7Ozs7Ozs7Ozs7OztPQWNHO0lBQ0ksTUFBTSxDQUFDLGNBQWMsQ0FDMUIsWUFBK0IsRUFDL0IsT0FBa0Q7UUFFbEQsT0FBTyxJQUFJLGlDQUFpQyxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN0RSxDQUFDOztBQXJCSCw0REFzQkM7OztBQUVELE1BQU0saUNBQWtDLFNBQVEsb0JBQWM7SUFJNUQsWUFDRSxZQUErQixFQUMvQixVQUFvRCxFQUFFO1FBRXRELEtBQUssQ0FBQztZQUNKLE9BQU8sRUFBRSxRQUFRO1lBQ2pCLE1BQU0sRUFBRSxvQkFBb0I7WUFDNUIsT0FBTyxFQUFFO2dCQUNQLGVBQWUsRUFBRSxPQUFPLENBQUMsZUFBZTtnQkFDeEMsb0JBQW9CLEVBQ2xCLE9BQU8sQ0FBQyxvQkFBb0IsSUFBSSxtQkFBbUIsRUFBRTtnQkFDdkQsbUJBQW1CLEVBQUUsaUNBQW1CLENBQUMsS0FBSztnQkFDOUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQztnQkFDekQsR0FBRyxPQUFPO2FBQ1g7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUNqQyxJQUFJLENBQUMseUJBQXlCLEdBQUcsT0FBTyxDQUFDLHlCQUF5QixJQUFJLElBQUksQ0FBQztJQUM3RSxDQUFD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QUFZLEVBQUUsaUJBQWlCLEVBQUUsWUFBWTtZQUMzQyxDQUFDLENBQUMsdUJBQXVCO1lBQ3pCLENBQUMsQ0FBQyxTQUFTO0tBQ2QsQ0FBQztJQUVGLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFaEQsaUVBQWlFO0lBQ2pFLGdIQUFnSDtJQUNoSCxNQUFNLFlBQVksR0FBRyxHQUFHLENBQUM7SUFDekIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDO0lBQ3pCLE9BQU8sZUFBZSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDL0QsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxnQkFBZ0IsR0FBRztJQUN2QjtRQUNFLFVBQVUsRUFBRSxLQUFLO1FBQ2pCLGNBQWMsRUFBRTtZQUNkLGtCQUFrQixFQUFFLGFBQUssQ0FBQyxXQUFXO1NBQ3RDO0tBQ0Y7SUFDRDtRQUNFLFVBQVUsRUFBRSxLQUFLO1FBQ2pCLGNBQWMsRUFBRTtZQUNkLGtCQUFrQixFQUFFLGFBQUssQ0FBQyxXQUFXO1NBQ3RDO0tBQ0Y7SUFDRDtRQUNFLFVBQVUsRUFBRSxLQUFLO1FBQ2pCLGNBQWMsRUFBRTtZQUNkLGtCQUFrQixFQUFFLGFBQUssQ0FBQyxXQUFXO1NBQ3RDO0tBQ0Y7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBzZm5TdGF0ZU1hY2hpbmUgfSBmcm9tIFwiQGNka3RmL3Byb3ZpZGVyLWF3c1wiO1xuaW1wb3J0IHsgVG9rZW4gfSBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IFJlcXVlc3RDb250ZXh0IH0gZnJvbSBcIi5cIjtcbmltcG9ydCAqIGFzIHNmbiBmcm9tIFwiLi5cIjtcbmltcG9ydCB7IEF3c0ludGVncmF0aW9uIH0gZnJvbSBcIi4vYXdzXCI7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSBcIi4uLy4uL2lhbVwiO1xuLy8gaW1wb3J0IHsgVmFsaWRhdGlvbkVycm9yIH0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvbGliL2Vycm9yc1wiO1xuaW1wb3J0IHtcbiAgSW50ZWdyYXRpb25Db25maWcsXG4gIEludGVncmF0aW9uT3B0aW9ucyxcbiAgUGFzc3Rocm91Z2hCZWhhdmlvcixcbn0gZnJvbSBcIi4uL2ludGVncmF0aW9uXCI7XG5pbXBvcnQgeyBNZXRob2QgfSBmcm9tIFwiLi4vbWV0aG9kXCI7XG5pbXBvcnQgeyBNb2RlbCB9IGZyb20gXCIuLi9tb2RlbFwiO1xuXG4vKipcbiAqIE9wdGlvbnMgd2hlbiBjb25maWd1cmluZyBTdGVwIEZ1bmN0aW9ucyBzeW5jaHJvbm91cyBpbnRlZ3JhdGlvbiB3aXRoIFJlc3QgQVBJXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RlcEZ1bmN0aW9uc0V4ZWN1dGlvbkludGVncmF0aW9uT3B0aW9uc1xuICBleHRlbmRzIEludGVncmF0aW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGljaCBkZXRhaWxzIG9mIHRoZSBpbmNvbWluZyByZXF1ZXN0IG11c3QgYmUgcGFzc2VkIG9udG8gdGhlIHVuZGVybHlpbmcgc3RhdGUgbWFjaGluZSxcbiAgICogc3VjaCBhcywgYWNjb3VudCBpZCwgdXNlciBpZGVudGl0eSwgcmVxdWVzdCBpZCwgZXRjLiBUaGUgZXhlY3V0aW9uIGlucHV0IHdpbGwgaW5jbHVkZSBhIG5ldyBrZXkgYHJlcXVlc3RDb250ZXh0YDpcbiAgICpcbiAgICoge1xuICAgKiAgIFwiYm9keVwiOiB7fSxcbiAgICogICBcInJlcXVlc3RDb250ZXh0XCI6IHtcbiAgICogICAgICAgXCJrZXlcIjogXCJ2YWx1ZVwiXG4gICAqICAgfVxuICAgKiB9XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYWxsIHBhcmFtZXRlcnMgd2l0aGluIHJlcXVlc3QgY29udGV4dCB3aWxsIGJlIHNldCBhcyBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWVzdENvbnRleHQ/OiBSZXF1ZXN0Q29udGV4dDtcblxuICAvKipcbiAgICogQ2hlY2sgaWYgcXVlcnlzdHJpbmcgaXMgdG8gYmUgaW5jbHVkZWQgaW5zaWRlIHRoZSBleGVjdXRpb24gaW5wdXQuIFRoZSBleGVjdXRpb24gaW5wdXQgd2lsbCBpbmNsdWRlIGEgbmV3IGtleSBgcXVlcnlTdHJpbmdgOlxuICAgKlxuICAgKiB7XG4gICAqICAgXCJib2R5XCI6IHt9LFxuICAgKiAgIFwicXVlcnlzdHJpbmdcIjoge1xuICAgKiAgICAgXCJrZXlcIjogXCJ2YWx1ZVwiXG4gICAqICAgfVxuICAgKiB9XG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHF1ZXJ5c3RyaW5nPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ2hlY2sgaWYgcGF0aCBpcyB0byBiZSBpbmNsdWRlZCBpbnNpZGUgdGhlIGV4ZWN1dGlvbiBpbnB1dC4gVGhlIGV4ZWN1dGlvbiBpbnB1dCB3aWxsIGluY2x1ZGUgYSBuZXcga2V5IGBwYXRoYDpcbiAgICpcbiAgICoge1xuICAgKiAgIFwiYm9keVwiOiB7fSxcbiAgICogICBcInBhdGhcIjoge1xuICAgKiAgICAgXCJyZXNvdXJjZU5hbWVcIjogXCJyZXNvdXJjZVZhbHVlXCJcbiAgICogICB9XG4gICAqIH1cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGhlYWRlciBpcyB0byBiZSBpbmNsdWRlZCBpbnNpZGUgdGhlIGV4ZWN1dGlvbiBpbnB1dC4gVGhlIGV4ZWN1dGlvbiBpbnB1dCB3aWxsIGluY2x1ZGUgYSBuZXcga2V5IGBoZWFkZXJzYDpcbiAgICpcbiAgICoge1xuICAgKiAgIFwiYm9keVwiOiB7fSxcbiAgICogICBcImhlYWRlcnNcIjoge1xuICAgKiAgICAgIFwiaGVhZGVyMVwiOiBcInZhbHVlXCIsXG4gICAqICAgICAgXCJoZWFkZXIyXCI6IFwidmFsdWVcIlxuICAgKiAgIH1cbiAgICogfVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgaGVhZGVycz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIHRoZSB3aG9sZSBhdXRob3JpemVyIG9iamVjdCwgaW5jbHVkaW5nIGN1c3RvbSBjb250ZXh0IHZhbHVlcyBzaG91bGQgYmUgaW4gdGhlIGV4ZWN1dGlvbiBpbnB1dC4gVGhlIGV4ZWN1dGlvbiBpbnB1dCB3aWxsIGluY2x1ZGUgYSBuZXcga2V5IGBhdXRob3JpemVyYDpcbiAgICpcbiAgICoge1xuICAgKiAgIFwiYm9keVwiOiB7fSxcbiAgICogICBcImF1dGhvcml6ZXJcIjoge1xuICAgKiAgICAgXCJrZXlcIjogXCJ2YWx1ZVwiXG4gICAqICAgfVxuICAgKiB9XG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBhdXRob3JpemVyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBhZGQgZGVmYXVsdCByZXNwb25zZSBtb2RlbHMgd2l0aCAyMDAsIDQwMCwgYW5kIDUwMCBzdGF0dXMgY29kZXMgdG8gdGhlIG1ldGhvZC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgdXNlRGVmYXVsdE1ldGhvZFJlc3BvbnNlcz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogT3B0aW9ucyB0byBpbnRlZ3JhdGUgd2l0aCB2YXJpb3VzIFN0ZXBGdW5jdGlvbiBBUElcbiAqL1xuZXhwb3J0IGNsYXNzIFN0ZXBGdW5jdGlvbnNJbnRlZ3JhdGlvbiB7XG4gIC8qKlxuICAgKiBJbnRlZ3JhdGVzIGEgU3luY2hyb25vdXMgRXhwcmVzcyBTdGF0ZSBNYWNoaW5lIGZyb20gQVdTIFN0ZXAgRnVuY3Rpb25zIHRvIGFuIEFQSSBHYXRld2F5IG1ldGhvZC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogICAgY29uc3Qgc3RhdGVNYWNoaW5lID0gbmV3IHN0ZXBmdW5jdGlvbnMuU3RhdGVNYWNoaW5lKHRoaXMsICdNeVN0YXRlTWFjaGluZScsIHtcbiAgICogICAgICAgc3RhdGVNYWNoaW5lVHlwZTogc3RlcGZ1bmN0aW9ucy5TdGF0ZU1hY2hpbmVUeXBlLkVYUFJFU1MsXG4gICAqICAgICAgIGRlZmluaXRpb246IHN0ZXBmdW5jdGlvbnMuQ2hhaW4uc3RhcnQobmV3IHN0ZXBmdW5jdGlvbnMuUGFzcyh0aGlzLCAnUGFzcycpKSxcbiAgICogICAgfSk7XG4gICAqXG4gICAqICAgIGNvbnN0IGFwaSA9IG5ldyBhcGlnYXRld2F5LlJlc3RBcGkodGhpcywgJ0FwaScsIHtcbiAgICogICAgICAgcmVzdEFwaU5hbWU6ICdNeUFwaScsXG4gICAqICAgIH0pO1xuICAgKiAgICBhcGkucm9vdC5hZGRNZXRob2QoJ0dFVCcsIGFwaWdhdGV3YXkuU3RlcEZ1bmN0aW9uc0ludGVncmF0aW9uLnN0YXJ0RXhlY3V0aW9uKHN0YXRlTWFjaGluZSkpO1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBzdGFydEV4ZWN1dGlvbihcbiAgICBzdGF0ZU1hY2hpbmU6IHNmbi5JU3RhdGVNYWNoaW5lLFxuICAgIG9wdGlvbnM/OiBTdGVwRnVuY3Rpb25zRXhlY3V0aW9uSW50ZWdyYXRpb25PcHRpb25zLFxuICApOiBBd3NJbnRlZ3JhdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBTdGVwRnVuY3Rpb25zRXhlY3V0aW9uSW50ZWdyYXRpb24oc3RhdGVNYWNoaW5lLCBvcHRpb25zKTtcbiAgfVxufVxuXG5jbGFzcyBTdGVwRnVuY3Rpb25zRXhlY3V0aW9uSW50ZWdyYXRpb24gZXh0ZW5kcyBBd3NJbnRlZ3JhdGlvbiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3RhdGVNYWNoaW5lOiBzZm4uSVN0YXRlTWFjaGluZTtcbiAgcHJpdmF0ZSByZWFkb25seSB1c2VEZWZhdWx0TWV0aG9kUmVzcG9uc2VzOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHN0YXRlTWFjaGluZTogc2ZuLklTdGF0ZU1hY2hpbmUsXG4gICAgb3B0aW9uczogU3RlcEZ1bmN0aW9uc0V4ZWN1dGlvbkludGVncmF0aW9uT3B0aW9ucyA9IHt9LFxuICApIHtcbiAgICBzdXBlcih7XG4gICAgICBzZXJ2aWNlOiBcInN0YXRlc1wiLFxuICAgICAgYWN0aW9uOiBcIlN0YXJ0U3luY0V4ZWN1dGlvblwiLFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBjcmVkZW50aWFsc1JvbGU6IG9wdGlvbnMuY3JlZGVudGlhbHNSb2xlLFxuICAgICAgICBpbnRlZ3JhdGlvblJlc3BvbnNlczpcbiAgICAgICAgICBvcHRpb25zLmludGVncmF0aW9uUmVzcG9uc2VzID8/IGludGVncmF0aW9uUmVzcG9uc2UoKSxcbiAgICAgICAgcGFzc3Rocm91Z2hCZWhhdmlvcjogUGFzc3Rocm91Z2hCZWhhdmlvci5ORVZFUixcbiAgICAgICAgcmVxdWVzdFRlbXBsYXRlczogcmVxdWVzdFRlbXBsYXRlcyhzdGF0ZU1hY2hpbmUsIG9wdGlvbnMpLFxuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHRoaXMuc3RhdGVNYWNoaW5lID0gc3RhdGVNYWNoaW5lO1xuICAgIHRoaXMudXNlRGVmYXVsdE1ldGhvZFJlc3BvbnNlcyA9IG9wdGlvbnMudXNlRGVmYXVsdE1ldGhvZFJlc3BvbnNlcyA/PyB0cnVlO1xuICB9XG5cbiAgcHVibGljIGJpbmQobWV0aG9kOiBNZXRob2QpOiBJbnRlZ3JhdGlvbkNvbmZpZyB7XG4gICAgY29uc3QgYmluZFJlc3VsdCA9IHN1cGVyLmJpbmQobWV0aG9kKTtcblxuICAgIGNvbnN0IGNyZWRlbnRpYWxzUm9sZSA9XG4gICAgICBiaW5kUmVzdWx0Lm9wdGlvbnM/LmNyZWRlbnRpYWxzUm9sZSA/P1xuICAgICAgbmV3IGlhbS5Sb2xlKG1ldGhvZCwgXCJTdGFydFN5bmNFeGVjdXRpb25Sb2xlXCIsIHtcbiAgICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoXCJhcGlnYXRld2F5LmFtYXpvbmF3cy5jb21cIiksXG4gICAgICB9KTtcbiAgICB0aGlzLnN0YXRlTWFjaGluZS5ncmFudFN0YXJ0U3luY0V4ZWN1dGlvbihjcmVkZW50aWFsc1JvbGUpO1xuXG4gICAgbGV0IHN0YXRlTWFjaGluZU5hbWU7XG5cbiAgICBpZiAodGhpcy5zdGF0ZU1hY2hpbmUgaW5zdGFuY2VvZiBzZm4uU3RhdGVNYWNoaW5lKSB7XG4gICAgICBjb25zdCBzdGF0ZU1hY2hpbmVUeXBlID0gKHRoaXMuc3RhdGVNYWNoaW5lIGFzIHNmbi5TdGF0ZU1hY2hpbmUpXG4gICAgICAgIC5zdGF0ZU1hY2hpbmVUeXBlO1xuICAgICAgaWYgKHN0YXRlTWFjaGluZVR5cGUgIT09IHNmbi5TdGF0ZU1hY2hpbmVUeXBlLkVYUFJFU1MpIHtcbiAgICAgICAgLy8gdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdTdGF0ZSBNYWNoaW5lIG11c3QgYmUgb2YgdHlwZSBcIkVYUFJFU1NcIi4gUGxlYXNlIHVzZSBTdGF0ZU1hY2hpbmVUeXBlLkVYUFJFU1MgYXMgdGhlIHN0YXRlTWFjaGluZVR5cGUnLFxuICAgICAgICAgIC8vIG1ldGhvZCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gaWYgbm90IGltcG9ydGVkLCBleHRyYWN0IHRoZSBuYW1lIGZyb20gdGhlIENGTiBsYXllciB0byByZWFjaCB0aGVcbiAgICAgIC8vIGxpdGVyYWwgdmFsdWUgaWYgaXQgaXMgZ2l2ZW4gKHJhdGhlciB0aGFuIGEgdG9rZW4pXG4gICAgICBzdGF0ZU1hY2hpbmVOYW1lID0gKFxuICAgICAgICB0aGlzLnN0YXRlTWFjaGluZS5ub2RlLmRlZmF1bHRDaGlsZCBhcyBzZm5TdGF0ZU1hY2hpbmUuU2ZuU3RhdGVNYWNoaW5lXG4gICAgICApLm5hbWVJbnB1dDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaW1wb3J0ZWQgc3RhdGUgbWFjaGluZVxuICAgICAgc3RhdGVNYWNoaW5lTmFtZSA9IGBTdGF0ZU1hY2hpbmUtJHt0aGlzLnN0YXRlTWFjaGluZS5zdGFjay5ub2RlLmFkZHJ9YDtcbiAgICB9XG5cbiAgICBsZXQgZGVwbG95bWVudFRva2VuO1xuXG4gICAgaWYgKFxuICAgICAgc3RhdGVNYWNoaW5lTmFtZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAhVG9rZW4uaXNVbnJlc29sdmVkKHN0YXRlTWFjaGluZU5hbWUpXG4gICAgKSB7XG4gICAgICBkZXBsb3ltZW50VG9rZW4gPSBKU09OLnN0cmluZ2lmeSh7IHN0YXRlTWFjaGluZU5hbWUgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudXNlRGVmYXVsdE1ldGhvZFJlc3BvbnNlcykge1xuICAgICAgZm9yIChjb25zdCBtZXRob2RSZXNwb25zZSBvZiBNRVRIT0RfUkVTUE9OU0VTKSB7XG4gICAgICAgIG1ldGhvZC5hZGRNZXRob2RSZXNwb25zZShtZXRob2RSZXNwb25zZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmJpbmRSZXN1bHQsXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIC4uLmJpbmRSZXN1bHQub3B0aW9ucyxcbiAgICAgICAgY3JlZGVudGlhbHNSb2xlLFxuICAgICAgfSxcbiAgICAgIGRlcGxveW1lbnRUb2tlbixcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogRGVmaW5lcyB0aGUgaW50ZWdyYXRpb24gcmVzcG9uc2UgdGhhdCBwYXNzZXMgdGhlIHJlc3VsdCBvbiBzdWNjZXNzLFxuICogb3IgdGhlIGVycm9yIG9uIGZhaWx1cmUsIGZyb20gdGhlIHN5bmNocm9ub3VzIGV4ZWN1dGlvbiB0byB0aGUgY2FsbGVyLlxuICpcbiAqIEByZXR1cm5zIGludGVncmF0aW9uUmVzcG9uc2UgbWFwcGluZ1xuICovXG5mdW5jdGlvbiBpbnRlZ3JhdGlvblJlc3BvbnNlKCkge1xuICBjb25zdCBlcnJvclJlc3BvbnNlID0gW1xuICAgIHtcbiAgICAgIC8qKlxuICAgICAgICogU3BlY2lmaWVzIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gKHJlZ2V4KSBwYXR0ZXJuIHVzZWQgdG8gY2hvb3NlXG4gICAgICAgKiBhbiBpbnRlZ3JhdGlvbiByZXNwb25zZSBiYXNlZCBvbiB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgYmFjayBlbmQuXG4gICAgICAgKiBJbiB0aGlzIGNhc2UgaXQgd2lsbCBtYXRjaCBhbGwgJzRYWCcgSFRUUCBFcnJvcnNcbiAgICAgICAqL1xuICAgICAgc2VsZWN0aW9uUGF0dGVybjogXCI0XFxcXGR7Mn1cIixcbiAgICAgIHN0YXR1c0NvZGU6IFwiNDAwXCIsXG4gICAgICByZXNwb25zZVRlbXBsYXRlczoge1xuICAgICAgICBcImFwcGxpY2F0aW9uL2pzb25cIjogYHtcbiAgICAgICAgICAgIFwiZXJyb3JcIjogXCJCYWQgcmVxdWVzdCFcIlxuICAgICAgICAgIH1gLFxuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIC8qKlxuICAgICAgICogTWF0Y2ggYWxsICc1WFgnIEhUVFAgRXJyb3JzXG4gICAgICAgKi9cbiAgICAgIHNlbGVjdGlvblBhdHRlcm46IFwiNVxcXFxkezJ9XCIsXG4gICAgICBzdGF0dXNDb2RlOiBcIjUwMFwiLFxuICAgICAgcmVzcG9uc2VUZW1wbGF0ZXM6IHtcbiAgICAgICAgXCJhcHBsaWNhdGlvbi9qc29uXCI6IFwiXFxcImVycm9yXFxcIjogJGlucHV0LnBhdGgoJyQuZXJyb3InKVwiLFxuICAgICAgfSxcbiAgICB9LFxuICBdO1xuXG4gIGNvbnN0IGludGVnUmVzcG9uc2UgPSBbXG4gICAge1xuICAgICAgc3RhdHVzQ29kZTogXCIyMDBcIixcbiAgICAgIHJlc3BvbnNlVGVtcGxhdGVzOiB7XG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlICovXG4gICAgICAgIFwiYXBwbGljYXRpb24vanNvblwiOiBbXG4gICAgICAgICAgXCIjc2V0KCRpbnB1dFJvb3QgPSAkaW5wdXQucGF0aCgnJCcpKVwiLFxuICAgICAgICAgIFwiI2lmKCRpbnB1dC5wYXRoKCckLnN0YXR1cycpLnRvU3RyaW5nKCkuZXF1YWxzKFxcXCJGQUlMRURcXFwiKSlcIixcbiAgICAgICAgICBcIiNzZXQoJGNvbnRleHQucmVzcG9uc2VPdmVycmlkZS5zdGF0dXMgPSA1MDApXCIsXG4gICAgICAgICAgXCJ7XCIsXG4gICAgICAgICAgJ1wiZXJyb3JcIjogXCIkaW5wdXQucGF0aChcXCckLmVycm9yXFwnKVwiLCcsXG4gICAgICAgICAgJ1wiY2F1c2VcIjogXCIkaW5wdXQucGF0aChcXCckLmNhdXNlXFwnKVwiJyxcbiAgICAgICAgICBcIn1cIixcbiAgICAgICAgICBcIiNlbHNlXCIsXG4gICAgICAgICAgXCIkaW5wdXQucGF0aCgnJC5vdXRwdXQnKVwiLFxuICAgICAgICAgIFwiI2VuZFwiLFxuICAgICAgICAgIC8qIGVzbGludC1lbmFibGUgKi9cbiAgICAgICAgXS5qb2luKFwiXFxuXCIpLFxuICAgICAgfSxcbiAgICB9LFxuICAgIC4uLmVycm9yUmVzcG9uc2UsXG4gIF07XG5cbiAgcmV0dXJuIGludGVnUmVzcG9uc2U7XG59XG5cbi8qKlxuICogRGVmaW5lcyB0aGUgcmVxdWVzdCB0ZW1wbGF0ZSB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgdGhlIGludGVncmF0aW9uXG4gKi9cbmZ1bmN0aW9uIHJlcXVlc3RUZW1wbGF0ZXMoXG4gIHN0YXRlTWFjaGluZTogc2ZuLklTdGF0ZU1hY2hpbmUsXG4gIG9wdGlvbnM6IFN0ZXBGdW5jdGlvbnNFeGVjdXRpb25JbnRlZ3JhdGlvbk9wdGlvbnMsXG4pIHtcbiAgY29uc3QgdGVtcGxhdGVTdHIgPSB0ZW1wbGF0ZVN0cmluZyhzdGF0ZU1hY2hpbmUsIG9wdGlvbnMpO1xuXG4gIGNvbnN0IHJlcXVlc3RUZW1wbGF0ZTogeyBbY29udGVudFR5cGU6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgIFwiYXBwbGljYXRpb24vanNvblwiOiB0ZW1wbGF0ZVN0cixcbiAgfTtcblxuICByZXR1cm4gcmVxdWVzdFRlbXBsYXRlO1xufVxuXG4vKipcbiAqIFJlYWRzIHRoZSBWVEwgdGVtcGxhdGUgYW5kIHJldHVybnMgdGhlIHRlbXBsYXRlIHN0cmluZyB0byBiZSB1c2VkXG4gKiBmb3IgdGhlIHJlcXVlc3QgdGVtcGxhdGUuXG4gKi9cbmZ1bmN0aW9uIHRlbXBsYXRlU3RyaW5nKFxuICBzdGF0ZU1hY2hpbmU6IHNmbi5JU3RhdGVNYWNoaW5lLFxuICBvcHRpb25zOiBTdGVwRnVuY3Rpb25zRXhlY3V0aW9uSW50ZWdyYXRpb25PcHRpb25zLFxuKTogc3RyaW5nIHtcbiAgbGV0IHRlbXBsYXRlU3RyOiBzdHJpbmc7XG5cbiAgbGV0IHJlcXVlc3RDb250ZXh0U3RyID0gXCJcIjtcblxuICBjb25zdCBpbmNsdWRlSGVhZGVyID0gb3B0aW9ucy5oZWFkZXJzID8/IGZhbHNlO1xuICBjb25zdCBpbmNsdWRlUXVlcnlTdHJpbmcgPSBvcHRpb25zLnF1ZXJ5c3RyaW5nID8/IHRydWU7XG4gIGNvbnN0IGluY2x1ZGVQYXRoID0gb3B0aW9ucy5wYXRoID8/IHRydWU7XG4gIGNvbnN0IGluY2x1ZGVBdXRob3JpemVyID0gb3B0aW9ucy5hdXRob3JpemVyID8/IGZhbHNlO1xuXG4gIGlmIChcbiAgICBvcHRpb25zLnJlcXVlc3RDb250ZXh0ICYmXG4gICAgT2JqZWN0LmtleXMob3B0aW9ucy5yZXF1ZXN0Q29udGV4dCkubGVuZ3RoID4gMFxuICApIHtcbiAgICByZXF1ZXN0Q29udGV4dFN0ciA9IHJlcXVlc3RDb250ZXh0KG9wdGlvbnMucmVxdWVzdENvbnRleHQpO1xuICB9XG5cbiAgdGVtcGxhdGVTdHIgPSBmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKF9fZGlybmFtZSwgXCJzdGVwZnVuY3Rpb25zLnZ0bFwiKSwge1xuICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gIH0pO1xuICB0ZW1wbGF0ZVN0ciA9IHRlbXBsYXRlU3RyLnJlcGxhY2UoXG4gICAgXCIlU1RBVEVNQUNISU5FJVwiLFxuICAgIHN0YXRlTWFjaGluZS5zdGF0ZU1hY2hpbmVBcm4sXG4gICk7XG4gIHRlbXBsYXRlU3RyID0gdGVtcGxhdGVTdHIucmVwbGFjZShcIiVJTkNMVURFX0hFQURFUlMlXCIsIFN0cmluZyhpbmNsdWRlSGVhZGVyKSk7XG4gIHRlbXBsYXRlU3RyID0gdGVtcGxhdGVTdHIucmVwbGFjZShcbiAgICBcIiVJTkNMVURFX1FVRVJZU1RSSU5HJVwiLFxuICAgIFN0cmluZyhpbmNsdWRlUXVlcnlTdHJpbmcpLFxuICApO1xuICB0ZW1wbGF0ZVN0ciA9IHRlbXBsYXRlU3RyLnJlcGxhY2UoXCIlSU5DTFVERV9QQVRIJVwiLCBTdHJpbmcoaW5jbHVkZVBhdGgpKTtcbiAgdGVtcGxhdGVTdHIgPSB0ZW1wbGF0ZVN0ci5yZXBsYWNlKFxuICAgIFwiJUlOQ0xVREVfQVVUSE9SSVpFUiVcIixcbiAgICBTdHJpbmcoaW5jbHVkZUF1dGhvcml6ZXIpLFxuICApO1xuICB0ZW1wbGF0ZVN0ciA9IHRlbXBsYXRlU3RyLnJlcGxhY2UoXCIlUkVRVUVTVENPTlRFWFQlXCIsIHJlcXVlc3RDb250ZXh0U3RyKTtcblxuICByZXR1cm4gdGVtcGxhdGVTdHI7XG59XG5cbmZ1bmN0aW9uIHJlcXVlc3RDb250ZXh0KHJlcXVlc3RDb250ZXh0T2JqOiBSZXF1ZXN0Q29udGV4dCB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgYWNjb3VudElkOiByZXF1ZXN0Q29udGV4dE9iaj8uYWNjb3VudElkXG4gICAgICA/IFwiJGNvbnRleHQuaWRlbnRpdHkuYWNjb3VudElkXCJcbiAgICAgIDogdW5kZWZpbmVkLFxuICAgIGFwaUlkOiByZXF1ZXN0Q29udGV4dE9iaj8uYXBpSWQgPyBcIiRjb250ZXh0LmFwaUlkXCIgOiB1bmRlZmluZWQsXG4gICAgYXBpS2V5OiByZXF1ZXN0Q29udGV4dE9iaj8uYXBpS2V5ID8gXCIkY29udGV4dC5pZGVudGl0eS5hcGlLZXlcIiA6IHVuZGVmaW5lZCxcbiAgICBhdXRob3JpemVyUHJpbmNpcGFsSWQ6IHJlcXVlc3RDb250ZXh0T2JqPy5hdXRob3JpemVyUHJpbmNpcGFsSWRcbiAgICAgID8gXCIkY29udGV4dC5hdXRob3JpemVyLnByaW5jaXBhbElkXCJcbiAgICAgIDogdW5kZWZpbmVkLFxuICAgIGNhbGxlcjogcmVxdWVzdENvbnRleHRPYmo/LmNhbGxlciA/IFwiJGNvbnRleHQuaWRlbnRpdHkuY2FsbGVyXCIgOiB1bmRlZmluZWQsXG4gICAgY29nbml0b0F1dGhlbnRpY2F0aW9uUHJvdmlkZXI6XG4gICAgICByZXF1ZXN0Q29udGV4dE9iaj8uY29nbml0b0F1dGhlbnRpY2F0aW9uUHJvdmlkZXJcbiAgICAgICAgPyBcIiRjb250ZXh0LmlkZW50aXR5LmNvZ25pdG9BdXRoZW50aWNhdGlvblByb3ZpZGVyXCJcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgY29nbml0b0F1dGhlbnRpY2F0aW9uVHlwZTogcmVxdWVzdENvbnRleHRPYmo/LmNvZ25pdG9BdXRoZW50aWNhdGlvblR5cGVcbiAgICAgID8gXCIkY29udGV4dC5pZGVudGl0eS5jb2duaXRvQXV0aGVudGljYXRpb25UeXBlXCJcbiAgICAgIDogdW5kZWZpbmVkLFxuICAgIGNvZ25pdG9JZGVudGl0eUlkOiByZXF1ZXN0Q29udGV4dE9iaj8uY29nbml0b0lkZW50aXR5SWRcbiAgICAgID8gXCIkY29udGV4dC5pZGVudGl0eS5jb2duaXRvSWRlbnRpdHlJZFwiXG4gICAgICA6IHVuZGVmaW5lZCxcbiAgICBjb2duaXRvSWRlbnRpdHlQb29sSWQ6IHJlcXVlc3RDb250ZXh0T2JqPy5jb2duaXRvSWRlbnRpdHlQb29sSWRcbiAgICAgID8gXCIkY29udGV4dC5pZGVudGl0eS5jb2duaXRvSWRlbnRpdHlQb29sSWRcIlxuICAgICAgOiB1bmRlZmluZWQsXG4gICAgaHR0cE1ldGhvZDogcmVxdWVzdENvbnRleHRPYmo/Lmh0dHBNZXRob2RcbiAgICAgID8gXCIkY29udGV4dC5odHRwTWV0aG9kXCJcbiAgICAgIDogdW5kZWZpbmVkLFxuICAgIHN0YWdlOiByZXF1ZXN0Q29udGV4dE9iaj8uc3RhZ2UgPyBcIiRjb250ZXh0LnN0YWdlXCIgOiB1bmRlZmluZWQsXG4gICAgc291cmNlSXA6IHJlcXVlc3RDb250ZXh0T2JqPy5zb3VyY2VJcFxuICAgICAgPyBcIiRjb250ZXh0LmlkZW50aXR5LnNvdXJjZUlwXCJcbiAgICAgIDogdW5kZWZpbmVkLFxuICAgIHVzZXI6IHJlcXVlc3RDb250ZXh0T2JqPy51c2VyID8gXCIkY29udGV4dC5pZGVudGl0eS51c2VyXCIgOiB1bmRlZmluZWQsXG4gICAgdXNlckFnZW50OiByZXF1ZXN0Q29udGV4dE9iaj8udXNlckFnZW50XG4gICAgICA/IFwiJGNvbnRleHQuaWRlbnRpdHkudXNlckFnZW50XCJcbiAgICAgIDogdW5kZWZpbmVkLFxuICAgIHVzZXJBcm46IHJlcXVlc3RDb250ZXh0T2JqPy51c2VyQXJuXG4gICAgICA/IFwiJGNvbnRleHQuaWRlbnRpdHkudXNlckFyblwiXG4gICAgICA6IHVuZGVmaW5lZCxcbiAgICByZXF1ZXN0SWQ6IHJlcXVlc3RDb250ZXh0T2JqPy5yZXF1ZXN0SWQgPyBcIiRjb250ZXh0LnJlcXVlc3RJZFwiIDogdW5kZWZpbmVkLFxuICAgIHJlc291cmNlSWQ6IHJlcXVlc3RDb250ZXh0T2JqPy5yZXNvdXJjZUlkXG4gICAgICA/IFwiJGNvbnRleHQucmVzb3VyY2VJZFwiXG4gICAgICA6IHVuZGVmaW5lZCxcbiAgICByZXNvdXJjZVBhdGg6IHJlcXVlc3RDb250ZXh0T2JqPy5yZXNvdXJjZVBhdGhcbiAgICAgID8gXCIkY29udGV4dC5yZXNvdXJjZVBhdGhcIlxuICAgICAgOiB1bmRlZmluZWQsXG4gIH07XG5cbiAgY29uc3QgY29udGV4dEFzU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoY29udGV4dCk7XG5cbiAgLy8gVGhlIFZUTCBUZW1wbGF0ZSBjb25mbGljdHMgd2l0aCBkb3VibGUtcXVvdGVzIChcIikgZm9yIHN0cmluZ3MuXG4gIC8vIEJlZm9yZSBzZW5kaW5nIHRvIHRoZSB0ZW1wbGF0ZSwgd2UgcmVwbGFjZSBkb3VibGUtcXVvdGVzIChcIikgd2l0aCBAQCBhbmQgcmVwbGFjZSBpdCBiYWNrIGluc2lkZSB0aGUgLnZ0bCBmaWxlXG4gIGNvbnN0IGRvdWJsZXF1b3RlcyA9ICdcIic7XG4gIGNvbnN0IHJlcGxhY2VXaXRoID0gXCJAQFwiO1xuICByZXR1cm4gY29udGV4dEFzU3RyaW5nLnNwbGl0KGRvdWJsZXF1b3Rlcykuam9pbihyZXBsYWNlV2l0aCk7XG59XG5cbi8qKlxuICogTWV0aG9kIHJlc3BvbnNlIG1vZGVsIGZvciBlYWNoIEhUVFAgY29kZSByZXNwb25zZVxuICovXG5jb25zdCBNRVRIT0RfUkVTUE9OU0VTID0gW1xuICB7XG4gICAgc3RhdHVzQ29kZTogXCIyMDBcIixcbiAgICByZXNwb25zZU1vZGVsczoge1xuICAgICAgXCJhcHBsaWNhdGlvbi9qc29uXCI6IE1vZGVsLkVNUFRZX01PREVMLFxuICAgIH0sXG4gIH0sXG4gIHtcbiAgICBzdGF0dXNDb2RlOiBcIjQwMFwiLFxuICAgIHJlc3BvbnNlTW9kZWxzOiB7XG4gICAgICBcImFwcGxpY2F0aW9uL2pzb25cIjogTW9kZWwuRVJST1JfTU9ERUwsXG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHN0YXR1c0NvZGU6IFwiNTAwXCIsXG4gICAgcmVzcG9uc2VNb2RlbHM6IHtcbiAgICAgIFwiYXBwbGljYXRpb24vanNvblwiOiBNb2RlbC5FUlJPUl9NT0RFTCxcbiAgICB9LFxuICB9LFxuXTtcbiJdfQ==
|
|
@@ -41,7 +41,7 @@ class IpAddresses {
|
|
|
41
41
|
}
|
|
42
42
|
exports.IpAddresses = IpAddresses;
|
|
43
43
|
_a = JSII_RTTI_SYMBOL_1;
|
|
44
|
-
IpAddresses[_a] = { fqn: "terraconstructs.aws.compute.IpAddresses", version: "0.
|
|
44
|
+
IpAddresses[_a] = { fqn: "terraconstructs.aws.compute.IpAddresses", version: "0.1.1" };
|
|
45
45
|
/**
|
|
46
46
|
* Implements integration with Amazon VPC IP Address Manager (IPAM).
|
|
47
47
|
*
|
|
@@ -180,7 +180,7 @@ class Ipv6Addresses {
|
|
|
180
180
|
}
|
|
181
181
|
exports.Ipv6Addresses = Ipv6Addresses;
|
|
182
182
|
_b = JSII_RTTI_SYMBOL_1;
|
|
183
|
-
Ipv6Addresses[_b] = { fqn: "terraconstructs.aws.compute.Ipv6Addresses", version: "0.
|
|
183
|
+
Ipv6Addresses[_b] = { fqn: "terraconstructs.aws.compute.Ipv6Addresses", version: "0.1.1" };
|
|
184
184
|
/**
|
|
185
185
|
* Implements integration with Amazon provided IPv6 CIDRs.
|
|
186
186
|
*
|
package/lib/aws/compute/ipam.js
CHANGED
|
@@ -279,7 +279,7 @@ class Ipam extends aws_construct_1.AwsConstructBase {
|
|
|
279
279
|
}
|
|
280
280
|
exports.Ipam = Ipam;
|
|
281
281
|
_a = JSII_RTTI_SYMBOL_1;
|
|
282
|
-
Ipam[_a] = { fqn: "terraconstructs.aws.compute.alpha.Ipam", version: "0.
|
|
282
|
+
Ipam[_a] = { fqn: "terraconstructs.aws.compute.alpha.Ipam", version: "0.1.1" };
|
|
283
283
|
/**
|
|
284
284
|
* Function to create IpamPool under scope
|
|
285
285
|
* @internal
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
export declare enum JsonSchemaVersion {
|
|
2
|
+
/**
|
|
3
|
+
* In API Gateway models are defined using the JSON schema draft 4.
|
|
4
|
+
* @see https://tools.ietf.org/html/draft-zyp-json-schema-04
|
|
5
|
+
*/
|
|
6
|
+
DRAFT4 = "http://json-schema.org/draft-04/schema#",
|
|
7
|
+
DRAFT7 = "http://json-schema.org/draft-07/schema#"
|
|
8
|
+
}
|
|
9
|
+
export declare enum JsonSchemaType {
|
|
10
|
+
NULL = "null",
|
|
11
|
+
BOOLEAN = "boolean",
|
|
12
|
+
OBJECT = "object",
|
|
13
|
+
ARRAY = "array",
|
|
14
|
+
NUMBER = "number",
|
|
15
|
+
INTEGER = "integer",
|
|
16
|
+
STRING = "string"
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Represents a JSON schema definition of the structure of a
|
|
20
|
+
* REST API model. Copied from npm module jsonschema.
|
|
21
|
+
*
|
|
22
|
+
* @see http://json-schema.org/
|
|
23
|
+
* @see https://github.com/tdegrunt/jsonschema
|
|
24
|
+
*/
|
|
25
|
+
export interface JsonSchema {
|
|
26
|
+
readonly schema?: JsonSchemaVersion;
|
|
27
|
+
readonly id?: string;
|
|
28
|
+
readonly ref?: string;
|
|
29
|
+
readonly type?: JsonSchemaType | JsonSchemaType[];
|
|
30
|
+
readonly title?: string;
|
|
31
|
+
readonly description?: string;
|
|
32
|
+
readonly enum?: any[];
|
|
33
|
+
/**
|
|
34
|
+
* The default value if you use an enum.
|
|
35
|
+
*
|
|
36
|
+
* @default - not set
|
|
37
|
+
*/
|
|
38
|
+
readonly default?: any;
|
|
39
|
+
readonly format?: string;
|
|
40
|
+
readonly definitions?: {
|
|
41
|
+
[name: string]: JsonSchema;
|
|
42
|
+
};
|
|
43
|
+
readonly multipleOf?: number;
|
|
44
|
+
readonly maximum?: number;
|
|
45
|
+
readonly exclusiveMaximum?: boolean;
|
|
46
|
+
readonly minimum?: number;
|
|
47
|
+
readonly exclusiveMinimum?: boolean;
|
|
48
|
+
readonly maxLength?: number;
|
|
49
|
+
readonly minLength?: number;
|
|
50
|
+
readonly pattern?: string;
|
|
51
|
+
readonly items?: JsonSchema | JsonSchema[];
|
|
52
|
+
readonly additionalItems?: JsonSchema[];
|
|
53
|
+
readonly maxItems?: number;
|
|
54
|
+
readonly minItems?: number;
|
|
55
|
+
readonly uniqueItems?: boolean;
|
|
56
|
+
readonly contains?: JsonSchema | JsonSchema[];
|
|
57
|
+
readonly maxProperties?: number;
|
|
58
|
+
readonly minProperties?: number;
|
|
59
|
+
readonly required?: string[];
|
|
60
|
+
readonly properties?: {
|
|
61
|
+
[name: string]: JsonSchema;
|
|
62
|
+
};
|
|
63
|
+
readonly additionalProperties?: JsonSchema | boolean;
|
|
64
|
+
readonly patternProperties?: {
|
|
65
|
+
[name: string]: JsonSchema;
|
|
66
|
+
};
|
|
67
|
+
readonly dependencies?: {
|
|
68
|
+
[name: string]: JsonSchema | string[];
|
|
69
|
+
};
|
|
70
|
+
readonly propertyNames?: JsonSchema;
|
|
71
|
+
readonly allOf?: JsonSchema[];
|
|
72
|
+
readonly anyOf?: JsonSchema[];
|
|
73
|
+
readonly oneOf?: JsonSchema[];
|
|
74
|
+
readonly not?: JsonSchema;
|
|
75
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.JsonSchemaType = exports.JsonSchemaVersion = void 0;
|
|
4
|
+
var JsonSchemaVersion;
|
|
5
|
+
(function (JsonSchemaVersion) {
|
|
6
|
+
/**
|
|
7
|
+
* In API Gateway models are defined using the JSON schema draft 4.
|
|
8
|
+
* @see https://tools.ietf.org/html/draft-zyp-json-schema-04
|
|
9
|
+
*/
|
|
10
|
+
JsonSchemaVersion["DRAFT4"] = "http://json-schema.org/draft-04/schema#";
|
|
11
|
+
JsonSchemaVersion["DRAFT7"] = "http://json-schema.org/draft-07/schema#";
|
|
12
|
+
})(JsonSchemaVersion || (exports.JsonSchemaVersion = JsonSchemaVersion = {}));
|
|
13
|
+
var JsonSchemaType;
|
|
14
|
+
(function (JsonSchemaType) {
|
|
15
|
+
JsonSchemaType["NULL"] = "null";
|
|
16
|
+
JsonSchemaType["BOOLEAN"] = "boolean";
|
|
17
|
+
JsonSchemaType["OBJECT"] = "object";
|
|
18
|
+
JsonSchemaType["ARRAY"] = "array";
|
|
19
|
+
JsonSchemaType["NUMBER"] = "number";
|
|
20
|
+
JsonSchemaType["INTEGER"] = "integer";
|
|
21
|
+
JsonSchemaType["STRING"] = "string";
|
|
22
|
+
})(JsonSchemaType || (exports.JsonSchemaType = JsonSchemaType = {}));
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi1zY2hlbWEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzL2NvbXB1dGUvanNvbi1zY2hlbWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsSUFBWSxpQkFPWDtBQVBELFdBQVksaUJBQWlCO0lBQzNCOzs7T0FHRztJQUNILHVFQUFrRCxDQUFBO0lBQ2xELHVFQUFrRCxDQUFBO0FBQ3BELENBQUMsRUFQVyxpQkFBaUIsaUNBQWpCLGlCQUFpQixRQU81QjtBQUVELElBQVksY0FRWDtBQVJELFdBQVksY0FBYztJQUN4QiwrQkFBYSxDQUFBO0lBQ2IscUNBQW1CLENBQUE7SUFDbkIsbUNBQWlCLENBQUE7SUFDakIsaUNBQWUsQ0FBQTtJQUNmLG1DQUFpQixDQUFBO0lBQ2pCLHFDQUFtQixDQUFBO0lBQ25CLG1DQUFpQixDQUFBO0FBQ25CLENBQUMsRUFSVyxjQUFjLDhCQUFkLGNBQWMsUUFRekIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZW51bSBKc29uU2NoZW1hVmVyc2lvbiB7XG4gIC8qKlxuICAgKiBJbiBBUEkgR2F0ZXdheSBtb2RlbHMgYXJlIGRlZmluZWQgdXNpbmcgdGhlIEpTT04gc2NoZW1hIGRyYWZ0IDQuXG4gICAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LXp5cC1qc29uLXNjaGVtYS0wNFxuICAgKi9cbiAgRFJBRlQ0ID0gXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSNcIixcbiAgRFJBRlQ3ID0gXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA3L3NjaGVtYSNcIixcbn1cblxuZXhwb3J0IGVudW0gSnNvblNjaGVtYVR5cGUge1xuICBOVUxMID0gXCJudWxsXCIsXG4gIEJPT0xFQU4gPSBcImJvb2xlYW5cIixcbiAgT0JKRUNUID0gXCJvYmplY3RcIixcbiAgQVJSQVkgPSBcImFycmF5XCIsXG4gIE5VTUJFUiA9IFwibnVtYmVyXCIsXG4gIElOVEVHRVIgPSBcImludGVnZXJcIixcbiAgU1RSSU5HID0gXCJzdHJpbmdcIixcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgSlNPTiBzY2hlbWEgZGVmaW5pdGlvbiBvZiB0aGUgc3RydWN0dXJlIG9mIGFcbiAqIFJFU1QgQVBJIG1vZGVsLiBDb3BpZWQgZnJvbSBucG0gbW9kdWxlIGpzb25zY2hlbWEuXG4gKlxuICogQHNlZSBodHRwOi8vanNvbi1zY2hlbWEub3JnL1xuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vdGRlZ3J1bnQvanNvbnNjaGVtYVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpzb25TY2hlbWEge1xuICAvLyBTcGVjaWFsIGtleXdvcmRzXG4gIHJlYWRvbmx5IHNjaGVtYT86IEpzb25TY2hlbWFWZXJzaW9uO1xuICByZWFkb25seSBpZD86IHN0cmluZztcbiAgcmVhZG9ubHkgcmVmPzogc3RyaW5nO1xuXG4gIC8vIENvbW1vbiBwcm9wZXJ0aWVzXG4gIHJlYWRvbmx5IHR5cGU/OiBKc29uU2NoZW1hVHlwZSB8IEpzb25TY2hlbWFUeXBlW107XG4gIHJlYWRvbmx5IHRpdGxlPzogc3RyaW5nO1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgcmVhZG9ubHkgZW51bT86IGFueVtdO1xuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUgaWYgeW91IHVzZSBhbiBlbnVtLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vdCBzZXRcbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHQ/OiBhbnk7XG4gIHJlYWRvbmx5IGZvcm1hdD86IHN0cmluZztcbiAgcmVhZG9ubHkgZGVmaW5pdGlvbnM/OiB7IFtuYW1lOiBzdHJpbmddOiBKc29uU2NoZW1hIH07XG5cbiAgLy8gTnVtYmVyIG9yIEludGVnZXJcbiAgcmVhZG9ubHkgbXVsdGlwbGVPZj86IG51bWJlcjtcbiAgcmVhZG9ubHkgbWF4aW11bT86IG51bWJlcjtcbiAgcmVhZG9ubHkgZXhjbHVzaXZlTWF4aW11bT86IGJvb2xlYW47XG4gIHJlYWRvbmx5IG1pbmltdW0/OiBudW1iZXI7XG4gIHJlYWRvbmx5IGV4Y2x1c2l2ZU1pbmltdW0/OiBib29sZWFuO1xuXG4gIC8vIFN0cmluZ1xuICByZWFkb25seSBtYXhMZW5ndGg/OiBudW1iZXI7XG4gIHJlYWRvbmx5IG1pbkxlbmd0aD86IG51bWJlcjtcbiAgcmVhZG9ubHkgcGF0dGVybj86IHN0cmluZztcblxuICAvLyBBcnJheVxuICByZWFkb25seSBpdGVtcz86IEpzb25TY2hlbWEgfCBKc29uU2NoZW1hW107XG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxJdGVtcz86IEpzb25TY2hlbWFbXTtcbiAgcmVhZG9ubHkgbWF4SXRlbXM/OiBudW1iZXI7XG4gIHJlYWRvbmx5IG1pbkl0ZW1zPzogbnVtYmVyO1xuICByZWFkb25seSB1bmlxdWVJdGVtcz86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGNvbnRhaW5zPzogSnNvblNjaGVtYSB8IEpzb25TY2hlbWFbXTtcblxuICAvLyBPYmplY3RcbiAgcmVhZG9ubHkgbWF4UHJvcGVydGllcz86IG51bWJlcjtcbiAgcmVhZG9ubHkgbWluUHJvcGVydGllcz86IG51bWJlcjtcbiAgcmVhZG9ubHkgcmVxdWlyZWQ/OiBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgcHJvcGVydGllcz86IHsgW25hbWU6IHN0cmluZ106IEpzb25TY2hlbWEgfTtcbiAgcmVhZG9ubHkgYWRkaXRpb25hbFByb3BlcnRpZXM/OiBKc29uU2NoZW1hIHwgYm9vbGVhbjtcbiAgcmVhZG9ubHkgcGF0dGVyblByb3BlcnRpZXM/OiB7IFtuYW1lOiBzdHJpbmddOiBKc29uU2NoZW1hIH07XG4gIHJlYWRvbmx5IGRlcGVuZGVuY2llcz86IHsgW25hbWU6IHN0cmluZ106IEpzb25TY2hlbWEgfCBzdHJpbmdbXSB9O1xuICByZWFkb25seSBwcm9wZXJ0eU5hbWVzPzogSnNvblNjaGVtYTtcblxuICAvLyBDb25kaXRpb25hbFxuICByZWFkb25seSBhbGxPZj86IEpzb25TY2hlbWFbXTtcbiAgcmVhZG9ubHkgYW55T2Y/OiBKc29uU2NoZW1hW107XG4gIHJlYWRvbmx5IG9uZU9mPzogSnNvblNjaGVtYVtdO1xuICByZWFkb25seSBub3Q/OiBKc29uU2NoZW1hO1xufVxuIl19
|
|
@@ -190,5 +190,5 @@ class KeyPair extends aws_construct_1.AwsConstructBase {
|
|
|
190
190
|
}
|
|
191
191
|
exports.KeyPair = KeyPair;
|
|
192
192
|
_a = JSII_RTTI_SYMBOL_1;
|
|
193
|
-
KeyPair[_a] = { fqn: "terraconstructs.aws.compute.KeyPair", version: "0.
|
|
193
|
+
KeyPair[_a] = { fqn: "terraconstructs.aws.compute.KeyPair", version: "0.1.1" };
|
|
194
194
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5LXBhaXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzL2NvbXB1dGUva2V5LXBhaXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw0RkFBNEY7QUFFNUYsc0RBQTJEO0FBQzNELHNEQUFpRDtBQUNqRCxpQ0FBMkI7QUFFM0IsbURBQXNEO0FBQ3RELG9EQUkwQjtBQUMxQixvREFJOEI7QUFFOUIsTUFBTTtBQUNOLGdDQUFnQztBQUNoQyxNQUFNO0FBQ04sOEJBQThCO0FBQzlCLFFBQVE7QUFDUiw4Q0FBOEM7QUFDOUMsUUFBUTtBQUNSLGlCQUFpQjtBQUVqQixRQUFRO0FBQ1IsbUJBQW1CO0FBQ25CLFFBQVE7QUFDUixpQkFBaUI7QUFDakIsSUFBSTtBQUVKOztHQUVHO0FBQ0gsSUFBWSxXQVlYO0FBWkQsV0FBWSxXQUFXO0lBQ3JCOztPQUVHO0lBQ0gsMEJBQVcsQ0FBQTtJQUVYOzs7O09BSUc7SUFDSCxrQ0FBbUIsQ0FBQTtBQUNyQixDQUFDLEVBWlcsV0FBVywyQkFBWCxXQUFXLFFBWXRCO0FBc0hEOzs7O0dBSUc7QUFDSCxNQUFhLE9BQVEsU0FBUSxnQ0FBZ0I7SUFDM0M7O09BRUc7SUFDSSxNQUFNLENBQUMsZUFBZSxDQUMzQixLQUFnQixFQUNoQixFQUFVLEVBQ1YsV0FBbUI7UUFFbkIsT0FBTyxPQUFPLENBQUMscUJBQXFCLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLHFCQUFxQixDQUNqQyxLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBd0I7UUFFeEIsTUFBTSxNQUFPLFNBQVEsZ0NBQWdCO1lBR25DLElBQVcsY0FBYztnQkFDdkIsT0FBTztvQkFDTCxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7b0JBQzdCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtpQkFDaEIsQ0FBQztZ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Q0FBQztJQUM5QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLGVBQWUsQ0FBQyxNQUEyQjtRQUNoRCxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNsQixLQUFLLFdBQVcsQ0FBQyxPQUFPO2dCQUN0QixPQUFPLE1BQU0sS0FBSyxtQ0FBbUIsQ0FBQyxPQUFPLENBQUM7WUFDaEQsS0FBSyxXQUFXLENBQUMsR0FBRztnQkFDbEIsT0FBTyxJQUFJLENBQUM7WUFDZDtnQkFDRSxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO0lBQ0gsQ0FBQzs7QUFwTkgsMEJBcU5DIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTc1LjEvcGFja2FnZXMvYXdzLWNkay1saWIvYXdzLWVjMi9saWIva2V5LXBhaXIudHNcblxuaW1wb3J0IHsga2V5UGFpciBhcyB0ZktleVBhaXIgfSBmcm9tIFwiQGNka3RmL3Byb3ZpZGVyLWF3c1wiO1xuaW1wb3J0IHsgcHJpdmF0ZUtleSB9IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItdGxzXCI7XG5pbXBvcnQgeyBGbiB9IGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IE9wZXJhdGluZ1N5c3RlbVR5cGUgfSBmcm9tIFwiLi9tYWNoaW5lLWltYWdlXCI7XG5pbXBvcnQge1xuICBBd3NDb25zdHJ1Y3RCYXNlLFxuICBBd3NDb25zdHJ1Y3RQcm9wcyxcbiAgSUF3c0NvbnN0cnVjdCxcbn0gZnJvbSBcIi4uL2F3cy1jb25zdHJ1Y3RcIjtcbmltcG9ydCB7XG4gIFN0cmluZ1BhcmFtZXRlcixcbiAgSVN0cmluZ1BhcmFtZXRlcixcbiAgUGFyYW1ldGVyVHlwZSxcbn0gZnJvbSBcIi4uL3N0b3JhZ2UvcGFyYW1ldGVyXCI7XG5cbi8vIC8qKlxuLy8gICogVGhlIGZvcm1hdCBvZiB0aGUgS2V5IFBhaXJcbi8vICAqL1xuLy8gZXhwb3J0IGVudW0gS2V5UGFpckZvcm1hdCB7XG4vLyAgIC8qKlxuLy8gICAgKiBBIFBQSyBmaWxlLCB0eXBpY2FsbHkgdXNlZCB3aXRoIFB1VFRZLlxuLy8gICAgKi9cbi8vICAgUFBLID0gXCJwcGtcIixcblxuLy8gICAvKipcbi8vICAgICogQSBQRU0gZmlsZS5cbi8vICAgICovXG4vLyAgIFBFTSA9IFwicGVtXCIsXG4vLyB9XG5cbi8qKlxuICogVGhlIHR5cGUgb2YgdGhlIGtleSBwYWlyLlxuICovXG5leHBvcnQgZW51bSBLZXlQYWlyVHlwZSB7XG4gIC8qKlxuICAgKiBBbiBSU0Ega2V5LlxuICAgKi9cbiAgUlNBID0gXCJyc2FcIixcblxuICAvKipcbiAgICogQW4gRUQyNTUxOSBrZXkuXG4gICAqXG4gICAqIE5vdGUgdGhhdCBFRDI1NTE5IGtleXMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIFdpbmRvd3MgaW5zdGFuY2VzLlxuICAgKi9cbiAgRUQyNTUxOSA9IFwiZWQyNTUxOVwiLFxufVxuXG4vKipcbiAqIFRoZSBwcm9wZXJ0aWVzIG9mIGEgS2V5IFBhaXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLZXlQYWlyUHJvcHMgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RQcm9wcyB7XG4gIC8qKlxuICAgKiBBIHVuaXF1ZSBuYW1lIGZvciB0aGUga2V5IHBhaXIuXG4gICAqXG4gICAqIEBkZWZhdWx0IEEgZ2VuZXJhdGVkIG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IGtleVBhaXJOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdW5pcXVlIG5hbWUgYmVnaW5uaW5nIHdpdGggdGhlIHNwZWNpZmllZCBwcmVmaXguXG4gICAqXG4gICAqIENvbmZsaWN0cyB3aXRoIGBrZXlQYWlyTmFtZWAuIElmIG5laXRoZXIgYGtleVBhaXJOYW1lYCBub3IgYGtleVBhaXJOYW1lUHJlZml4YCBpcyBwcm92aWRlZCxcbiAgICogVGVycmFDb25zdHJ1Y3RzIHdpbGwgY3JlYXRlIGEgdW5pcXVlIGtleSBuYW1lIHVzaW5nIHRoZSBgZ3JpZFVVSURgIGFzIHByZWZpeC5cbiAgICpcbiAgICogQGRlZmF1bHQgQSBnZW5lcmF0ZWQgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkga2V5UGFpck5hbWVQcmVmaXg/OiBzdHJpbmc7XG5cbiAgLy8gLyoqXG4gIC8vICAqIFRoZSBmb3JtYXQgb2YgdGhlIGtleSBwYWlyLlxuICAvLyAgKlxuICAvLyAgKiBAZGVmYXVsdCBQRU1cbiAgLy8gICovXG4gIC8vIHJlYWRvbmx5IGZvcm1hdD86IEtleVBhaXJGb3JtYXQ7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIGtleSBwYWlyLlxuICAgKlxuICAgKiBAZGVmYXVsdCBSU0EgKGlnbm9yZWQgaWYga2V5TWF0ZXJpYWwgaXMgcHJvdmlkZWQpXG4gICAqL1xuICByZWFkb25seSB0eXBlPzogS2V5UGFpclR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBwdWJsaWMga2V5IG1hdGVyaWFsLlxuICAgKlxuICAgKiBJZiB0aGlzIGlzIHByb3ZpZGVkIHRoZSBrZXkgaXMgY29uc2lkZXJlZCBcImltcG9ydGVkXCIuIEZvciBpbXBvcnRlZFxuICAgKiBrZXlzLCBpdCBpcyBhc3N1bWVkIHRoYXQgeW91IGFscmVhZHkgaGF2ZSB0aGUgcHJpdmF0ZSBrZXkgbWF0ZXJpYWxcbiAgICogc28gdGhlIHByaXZhdGUga2V5IG1hdGVyaWFsIHdpbGwgbm90IGJlIHJldHVybmVkIG9yIHN0b3JlZCBpblxuICAgKiBBV1MgU3lzdGVtcyBNYW5hZ2VyIFBhcmFtZXRlciBTdG9yZS5cbiAgICpcbiAgICogVGhlIHByaXZhdGUga2V5IGdlbmVyYXRlZCBieSB0aGlzIHJlc291cmNlIHdpbGwgYmUgc3RvcmVkIHVuZW5jcnlwdGVkXG4gICAqIGluIHlvdXIgVGVycmFmb3JtIHN0YXRlIGZpbGUuXG4gICAqXG4gICAqIE9taXR0aW5nIHRoZSBwdWJsaWNLZXlNYXRlcmlhbCBmb3IgcHJvZHVjdGlvbiBkZXBsb3ltZW50cyBpcyBub3QgcmVjb21tZW5kZWQuXG4gICAqIEluc3RlYWQsIGdlbmVyYXRlIGEgcHJpdmF0ZSBrZXkgZmlsZSBvdXRzaWRlIG9mIFRlcnJhZm9ybSBhbmQgZGlzdHJpYnV0ZSBpdFxuICAgKiBzZWN1cmVseSB0byB0aGUgc3lzdGVtIHdoZXJlIFRlcnJhZm9ybSB3aWxsIGJlIHJ1bi5cbiAgICpcbiAgICogQGRlZmF1bHQgYSBwdWJsaWMgYW5kIHByaXZhdGUga2V5IHdpbGwgYmUgZ2VuZXJhdGVkXG4gICAqL1xuICByZWFkb25seSBwdWJsaWNLZXlNYXRlcmlhbD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBPdXRwdXRzIHdoaWNoIG1heSBiZSByZWdpc3RlcmVkIGZvciBvdXRwdXQgdmlhIHRoZSBHcmlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEtleVBhaXJPdXRwdXRzIHtcbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgbmFtZSBvZiB0aGUga2V5IHBhaXIuXG4gICAqL1xuICByZWFkb25seSBrZXlQYWlyTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB0aGUga2V5IHBhaXIuXG4gICAqXG4gICAqIEBkZWZhdWx0IG5vIHR5cGUgc3BlY2lmaWVkXG4gICAqL1xuICByZWFkb25seSB0eXBlPzogS2V5UGFpclR5cGU7XG59XG5cbi8qKlxuICogQXR0cmlidXRlcyBvZiBhIEtleSBQYWlyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEtleVBhaXJBdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgbmFtZSBvZiB0aGUga2V5IHBhaXIuXG4gICAqL1xuICByZWFkb25seSBrZXlQYWlyTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB0aGUga2V5IHBhaXIuXG4gICAqXG4gICAqIEBkZWZhdWx0IG5vIHR5cGUgc3BlY2lmaWVkXG4gICAqL1xuICByZWFkb25seSB0eXBlPzogS2V5UGFpclR5cGU7XG59XG5cbi8qKlxuICogQW4gRUMyIEtleSBQYWlyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElLZXlQYWlyIGV4dGVuZHMgSUF3c0NvbnN0cnVjdCB7XG4gIC8qKiBTdHJvbmdseSB0eXBlZCBvdXRwdXRzICovXG4gIHJlYWRvbmx5IGtleVBhaXJPdXRwdXRzOiBLZXlQYWlyT3V0cHV0cztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGtleSBwYWlyLlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBrZXlQYWlyTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB0aGUga2V5IHBhaXIuXG4gICAqL1xuICByZWFkb25seSB0eXBlPzogS2V5UGFpclR5cGU7XG5cbiAgLyoqXG4gICAqIFVzZWQgaW50ZXJuYWxseSB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUga2V5IHBhaXIgaXMgY29tcGF0aWJsZSB3aXRoIGFuIE9TIHR5cGUuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgX2lzT3NDb21wYXRpYmxlKG9zVHlwZTogT3BlcmF0aW5nU3lzdGVtVHlwZSk6IGJvb2xlYW47XG59XG5cbi8qKlxuICogQW4gRUMyIEtleSBQYWlyLlxuICpcbiAqIEByZXNvdXJjZSBBV1M6OkVDMjo6S2V5UGFpclxuICovXG5leHBvcnQgY2xhc3MgS2V5UGFpciBleHRlbmRzIEF3c0NvbnN0cnVjdEJhc2UgaW1wbGVtZW50cyBJS2V5UGFpciB7XG4gIC8qKlxuICAgKiBJbXBvcnRzIGEga2V5IHBhaXIgYmFzZWQgb24gdGhlIG5hbWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21LZXlQYWlyTmFtZShcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAga2V5UGFpck5hbWU6IHN0cmluZyxcbiAgKTogSUtleVBhaXIge1xuICAgIHJldHVybiBLZXlQYWlyLmZyb21LZXlQYWlyQXR0cmlidXRlcyhzY29wZSwgaWQsIHsga2V5UGFpck5hbWUgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0cyBhIGtleSBwYWlyIHdpdGggYSBuYW1lIGFuZCBvcHRpb25hbCB0eXBlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tS2V5UGFpckF0dHJpYnV0ZXMoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIGF0dHJzOiBLZXlQYWlyQXR0cmlidXRlcyxcbiAgKTogSUtleVBhaXIge1xuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIEF3c0NvbnN0cnVjdEJhc2UgaW1wbGVtZW50cyBJS2V5UGFpciB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkga2V5UGFpck5hbWU6IHN0cmluZztcbiAgICAgIHB1YmxpYyByZWFkb25seSB0eXBlPzogS2V5UGFpclR5cGU7XG4gICAgICBwdWJsaWMgZ2V0IGtleVBhaXJPdXRwdXRzKCk6IEtleVBhaXJPdXRwdXRzIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBrZXlQYWlyTmFtZTogdGhpcy5rZXlQYWlyTmFtZSxcbiAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBwdWJsaWMgZ2V0IG91dHB1dHMoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmtleVBhaXJPdXRwdXRzO1xuICAgICAgfVxuXG4gICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICAgICAgdGhpcy5rZXlQYWlyTmFtZSA9IGF0dHJzLmtleVBhaXJOYW1lO1xuICAgICAgICB0aGlzLnR5cGUgPSBhdHRycy50eXBlO1xuICAgICAgfVxuXG4gICAgICAvKipcbiAgICAgICAqIFVzZWQgaW50ZXJuYWxseSB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUga2V5IHBhaXIgaXMgY29tcGF0aWJsZSB3aXRoIGFuIE9TIHR5cGUuXG4gICAgICAgKlxuICAgICAgICogQGludGVybmFsXG4gICAgICAgKi9cbiAgICAgIHB1YmxpYyBfaXNPc0NvbXBhdGlibGUob3NUeXBlOiBPcGVyYXRpbmdTeXN0ZW1UeXBlKTogYm9vbGVhbiB7XG4gICAgICAgIHN3aXRjaCAodGhpcy50eXBlKSB7XG4gICAgICAgICAgY2FzZSBLZXlQYWlyVHlwZS5FRDI1NTE5OlxuICAgICAgICAgICAgcmV0dXJuIG9zVHlwZSAhPT0gT3BlcmF0aW5nU3lzdGVtVHlwZS5XSU5ET1dTO1xuICAgICAgICAgIGNhc2UgS2V5UGFpclR5cGUuUlNBOlxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgSW1wb3J0KCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGtleVBhaXJPdXRwdXRzKCk6IEtleVBhaXJPdXRwdXRzIHtcbiAgICByZXR1cm4ge1xuICAgICAga2V5UGFpck5hbWU6IHRoaXMua2V5UGFpck5hbWUsXG4gICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgfTtcbiAgfVxuICBwdWJsaWMgZ2V0IG91dHB1dHMoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgcmV0dXJuIHRoaXMua2V5UGFpck91dHB1dHM7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHVuaXF1ZSBuYW1lIG9mIHRoZSBrZXkgcGFpci5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGtleVBhaXJOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBmaW5nZXJwcmludCBvZiB0aGUga2V5IHBhaXIuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBrZXlQYWlyRmluZ2VycHJpbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHVuaXF1ZSBJRCBvZiB0aGUga2V5IHBhaXIuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBrZXlQYWlySWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIGtleSBwYWlyLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHR5cGU/OiBLZXlQYWlyVHlwZTtcblxuICAvLyBub3Qgc3VwcG9ydGVkIGluIFRlcnJhZm9ybVxuICAvLyAvKipcbiAgLy8gICogVGhlIGZvcm1hdCBvZiB0aGUga2V5IHBhaXIuXG4gIC8vICAqL1xuICAvLyBwdWJsaWMgcmVhZG9ubHkgZm9ybWF0OiBLZXlQYWlyRm9ybWF0O1xuXG4gIHByaXZhdGUgX3ByaXZhdGVLZXk/OiBwcml2YXRlS2V5LlByaXZhdGVLZXk7XG4gIHByaXZhdGUgX3ByaXZhdGVLZXlTc20/OiBJU3RyaW5nUGFyYW1ldGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc0ltcG9ydDogYm9vbGVhbjtcblxuICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2U6IHRmS2V5UGFpci5LZXlQYWlyO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzPzogS2V5UGFpclByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICBpZiAocHJvcHM/LmtleVBhaXJOYW1lICYmIHByb3BzPy5rZXlQYWlyTmFtZVByZWZpeCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkNhbm5vdCBzcGVjaWZ5IGJvdGggJ2tleVBhaXJOYW1lJyBhbmQgJ2tleVBhaXJOYW1lUHJlZml4J1wiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBrZXlQYWlyTmFtZVByZWZpeCA9XG4gICAgICBwcm9wcz8ua2V5UGFpck5hbWVQcmVmaXggfHxcbiAgICAgIHRoaXMuc3RhY2sudW5pcXVlUmVzb3VyY2VOYW1lKHRoaXMsIHtcbiAgICAgICAgcHJlZml4OiB0aGlzLmdyaWRVVUlELFxuICAgICAgICBtYXhMZW5ndGg6IDI1NSxcbiAgICAgIH0pO1xuXG4gICAgLy8gTGF6eS5zdHJpbmdWYWx1ZSh7XG4gICAgLy8gICBwcm9kdWNlOiAoKSA9PiBBd3NTdGFjay51bmlxdWVSZXNvdXJjZU5hbWUodGhpcywgeyBtYXhMZW5ndGg6IDI1NSB9KSxcbiAgICAvLyB9KTtcblxuICAgIGlmIChwcm9wcz8ucHVibGljS2V5TWF0ZXJpYWwgJiYgcHJvcHM/LnR5cGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBzcGVjaWZ5ICd0eXBlJyBmb3Iga2V5cyB3aXRoIGltcG9ydGVkIG1hdGVyaWFsXCIpO1xuICAgIH1cblxuICAgIHRoaXMuX2lzSW1wb3J0ID0gISFwcm9wcz8ucHVibGljS2V5TWF0ZXJpYWw7XG5cbiAgICBjb25zdCBrZXlUeXBlID0gcHJvcHM/LnR5cGUgPz8gS2V5UGFpclR5cGUuUlNBO1xuICAgIGxldCBwdWJsaWNLZXkgPSBwcm9wcz8ucHVibGljS2V5TWF0ZXJpYWw7XG4gICAgaWYgKCFwdWJsaWNLZXkpIHtcbiAgICAgIGxldCBhbGdvcml0aG06IFwiUlNBXCIgfCBcIkVDRFNBXCIgfCBcIkVEMjU1MTlcIjtcbiAgICAgIHN3aXRjaCAoa2V5VHlwZSkge1xuICAgICAgICBjYXNlIEtleVBhaXJUeXBlLkVEMjU1MTk6XG4gICAgICAgICAgYWxnb3JpdGhtID0gXCJFRDI1NTE5XCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgS2V5UGFpclR5cGUuUlNBOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGFsZ29yaXRobSA9IFwiUlNBXCI7XG4gICAgICB9XG4gICAgICB0aGlzLl9wcml2YXRlS2V5ID0gbmV3IHByaXZhdGVLZXkuUHJpdmF0ZUtleSh0aGlzLCBcIlByaXZhdGVLZXlcIiwge1xuICAgICAgICBhbGdvcml0aG0sXG4gICAgICB9KTtcbiAgICAgIHB1YmxpY0tleSA9IEZuLnRyaW1zcGFjZSh0aGlzLl9wcml2YXRlS2V5LnB1YmxpY0tleU9wZW5zc2gpO1xuICAgIH1cblxuICAgIHRoaXMucmVzb3VyY2UgPSBuZXcgdGZLZXlQYWlyLktleVBhaXIodGhpcywgXCJSZXNvdXJjZVwiLCB7XG4gICAgICBrZXlOYW1lOiBwcm9wcz8ua2V5UGFpck5hbWUsXG4gICAgICBrZXlOYW1lUHJlZml4OiBrZXlQYWlyTmFtZVByZWZpeCxcbiAgICAgIC8vIGtleUZvcm1hdDogcHJvcHM/LmZvcm1hdCA/PyBLZXlQYWlyRm9ybWF0LlBFTSxcbiAgICAgIHB1YmxpY0tleSxcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLl9wcml2YXRlS2V5KSB7XG4gICAgICAvLyBpZiBwcml2YXRlS2V5IHdhcyBnZW5lcmF0ZWQsIG1pbWljIENGTiBiZWhhdmlvciB3aXRoIFNTTVxuICAgICAgdGhpcy5fcHJpdmF0ZUtleVNzbSA9IG5ldyBTdHJpbmdQYXJhbWV0ZXIodGhpcywgXCJQcml2YXRlS2V5UGFyYW1ldGVyXCIsIHtcbiAgICAgICAgcGFyYW1ldGVyTmFtZTogYC9lYzIva2V5cGFpci8ke3RoaXMucmVzb3VyY2UuaWR9YCxcbiAgICAgICAgZGVzY3JpcHRpb246IGBQcml2YXRlIGtleSBmb3IgJHt0aGlzLnJlc291cmNlLmtleU5hbWV9YCxcbiAgICAgICAgdHlwZTogUGFyYW1ldGVyVHlwZS5TRUNVUkVfU1RSSU5HLFxuICAgICAgICBzZW5zaXRpdmVTdHJpbmdWYWx1ZTogdGhpcy5fcHJpdmF0ZUtleS5wcml2YXRlS2V5UGVtLFxuICAgICAgICBzaW1wbGVOYW1lOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMua2V5UGFpck5hbWUgPSB0aGlzLnJlc291cmNlLmtleU5hbWU7XG4gICAgdGhpcy5rZXlQYWlyRmluZ2VycHJpbnQgPSB0aGlzLnJlc291cmNlLmZpbmdlcnByaW50O1xuICAgIHRoaXMua2V5UGFpcklkID0gdGhpcy5yZXNvdXJjZS5pZDtcbiAgICB0aGlzLnR5cGUgPSBrZXlUeXBlO1xuICAgIC8vIHRoaXMuZm9ybWF0ID0ga2V5Rm9ybWF0O1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGtleSBtYXRlcmlhbCB3YXMgaW1wb3J0ZWQuXG4gICAqXG4gICAqIEtleXMgd2l0aCBpbXBvcnRlZCBtYXRlcmlhbCBkbyBub3QgaGF2ZSB0aGVpciBwcml2YXRlIGtleSBtYXRlcmlhbCBzdG9yZWRcbiAgICogb3IgcmV0dXJuZWQgYXV0b21hdGljYWxseS5cbiAgICovXG4gIHB1YmxpYyBnZXQgaGFzSW1wb3J0ZWRNYXRlcmlhbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNJbXBvcnQ7XG4gIH1cblxuICAvKipcbiAgICogVGhlIFN5c3RlbXMgTWFuYWdlciBQYXJhbWV0ZXIgU3RvcmUgcGFyYW1ldGVyIHdpdGggdGhlIHBhaXIncyBwcml2YXRlIGtleSBtYXRlcmlhbC5cbiAgICovXG4gIHB1YmxpYyBnZXQgcHJpdmF0ZUtleSgpOiBJU3RyaW5nUGFyYW1ldGVyIHtcbiAgICBpZiAodGhpcy5faXNJbXBvcnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJBbiBTU00gcGFyYW1ldGVyIHdpdGggcHJpdmF0ZSBrZXkgbWF0ZXJpYWwgaXMgbm90IGNyZWF0ZWQgZm9yIGltcG9ydGVkIGtleXNcIixcbiAgICAgICk7XG4gICAgfVxuICAgIC8vIGVsc2UsIHRoaXMgaXMgZ3VhcmFudGVlZCB0byBiZSBzZXRcbiAgICByZXR1cm4gdGhpcy5fcHJpdmF0ZUtleVNzbSE7XG4gIH1cblxuICAvKipcbiAgICogVXNlZCBpbnRlcm5hbGx5IHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBrZXkgcGFpciBpcyBjb21wYXRpYmxlIHdpdGggYW4gT1MgdHlwZS5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgX2lzT3NDb21wYXRpYmxlKG9zVHlwZTogT3BlcmF0aW5nU3lzdGVtVHlwZSk6IGJvb2xlYW4ge1xuICAgIHN3aXRjaCAodGhpcy50eXBlKSB7XG4gICAgICBjYXNlIEtleVBhaXJUeXBlLkVEMjU1MTk6XG4gICAgICAgIHJldHVybiBvc1R5cGUgIT09IE9wZXJhdGluZ1N5c3RlbVR5cGUuV0lORE9XUztcbiAgICAgIGNhc2UgS2V5UGFpclR5cGUuUlNBOlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { Construct } from "constructs";
|
|
2
|
+
import * as lambda from ".";
|
|
3
|
+
import { LambdaIntegrationOptions } from "./integrations";
|
|
4
|
+
import { RestApi, RestApiProps } from "./restapi";
|
|
5
|
+
export interface LambdaRestApiProps extends RestApiProps {
|
|
6
|
+
/**
|
|
7
|
+
* The default Lambda function that handles all requests from this API.
|
|
8
|
+
*
|
|
9
|
+
* This handler will be used as a the default integration for all methods in
|
|
10
|
+
* this API, unless specified otherwise in `addMethod`.
|
|
11
|
+
*/
|
|
12
|
+
readonly handler: lambda.IFunction;
|
|
13
|
+
/**
|
|
14
|
+
* Specific Lambda integration options.
|
|
15
|
+
*
|
|
16
|
+
* @default see defaults defined in `LambdaIntegrationOptions`.
|
|
17
|
+
*/
|
|
18
|
+
readonly integrationOptions?: LambdaIntegrationOptions;
|
|
19
|
+
/**
|
|
20
|
+
* If true, route all requests to the Lambda Function
|
|
21
|
+
*
|
|
22
|
+
* If set to false, you will need to explicitly define the API model using
|
|
23
|
+
* `addResource` and `addMethod` (or `addProxy`).
|
|
24
|
+
*
|
|
25
|
+
* @default true
|
|
26
|
+
*/
|
|
27
|
+
readonly proxy?: boolean;
|
|
28
|
+
/**
|
|
29
|
+
* @deprecated the `LambdaRestApiProps` now extends `RestApiProps`, so all
|
|
30
|
+
* options are just available here. Note that the options specified in
|
|
31
|
+
* `options` will be overridden by any props specified at the root level.
|
|
32
|
+
*
|
|
33
|
+
* @default - no options.
|
|
34
|
+
*/
|
|
35
|
+
readonly options?: RestApiProps;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Defines an API Gateway REST API with AWS Lambda proxy integration.
|
|
39
|
+
*
|
|
40
|
+
* Use the `proxy` property to define a greedy proxy ("{proxy+}") and "ANY"
|
|
41
|
+
* method from the specified path. If not defined, you will need to explicity
|
|
42
|
+
* add resources and methods to the API.
|
|
43
|
+
*/
|
|
44
|
+
export declare class LambdaRestApi extends RestApi {
|
|
45
|
+
constructor(scope: Construct, id: string, props: LambdaRestApiProps);
|
|
46
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.LambdaRestApi = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
const integrations_1 = require("./integrations");
|
|
7
|
+
const restapi_1 = require("./restapi");
|
|
8
|
+
/**
|
|
9
|
+
* Defines an API Gateway REST API with AWS Lambda proxy integration.
|
|
10
|
+
*
|
|
11
|
+
* Use the `proxy` property to define a greedy proxy ("{proxy+}") and "ANY"
|
|
12
|
+
* method from the specified path. If not defined, you will need to explicity
|
|
13
|
+
* add resources and methods to the API.
|
|
14
|
+
*/
|
|
15
|
+
class LambdaRestApi extends restapi_1.RestApi {
|
|
16
|
+
constructor(scope, id, props) {
|
|
17
|
+
if (props.options?.defaultIntegration || props.defaultIntegration) {
|
|
18
|
+
// throw new ValidationError(
|
|
19
|
+
throw new Error('Cannot specify "defaultIntegration" since Lambda integration is automatically defined');
|
|
20
|
+
}
|
|
21
|
+
super(scope, id, {
|
|
22
|
+
defaultIntegration: new integrations_1.LambdaIntegration(props.handler, props.integrationOptions),
|
|
23
|
+
...props.options, // deprecated, but we still support
|
|
24
|
+
...props,
|
|
25
|
+
});
|
|
26
|
+
if (props.proxy !== false) {
|
|
27
|
+
this.root.addProxy();
|
|
28
|
+
// Make sure users cannot call any other resource adding function
|
|
29
|
+
this.root.addResource = addResourceThrows;
|
|
30
|
+
this.root.addMethod = addMethodThrows;
|
|
31
|
+
this.root.addProxy = addProxyThrows;
|
|
32
|
+
}
|
|
33
|
+
this.node.addValidation({
|
|
34
|
+
validate() {
|
|
35
|
+
for (const value of Object.values(props.deployOptions?.variables ?? {})) {
|
|
36
|
+
// Checks that variable Stage values match regex
|
|
37
|
+
const regexp = /[A-Za-z0-9-._~:/?#&=,]+/;
|
|
38
|
+
if (value.match(regexp) === null) {
|
|
39
|
+
return [
|
|
40
|
+
"Stage variable value " + value + " does not match the regex.",
|
|
41
|
+
];
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return [];
|
|
45
|
+
},
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
exports.LambdaRestApi = LambdaRestApi;
|
|
50
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
51
|
+
LambdaRestApi[_a] = { fqn: "terraconstructs.aws.compute.LambdaRestApi", version: "0.1.1" };
|
|
52
|
+
function addResourceThrows() {
|
|
53
|
+
// throw new UnscopedValidationError(
|
|
54
|
+
throw new Error("Cannot call 'addResource' on a proxying LambdaRestApi; set 'proxy' to false");
|
|
55
|
+
}
|
|
56
|
+
function addMethodThrows() {
|
|
57
|
+
// throw new UnscopedValidationError(
|
|
58
|
+
throw new Error("Cannot call 'addMethod' on a proxying LambdaRestApi; set 'proxy' to false");
|
|
59
|
+
}
|
|
60
|
+
function addProxyThrows() {
|
|
61
|
+
// throw new UnscopedValidationError(
|
|
62
|
+
throw new Error("Cannot call 'addProxy' on a proxying LambdaRestApi; set 'proxy' to false");
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFtYmRhLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hd3MvY29tcHV0ZS9sYW1iZGEtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBR0EsaURBQTZFO0FBRzdFLHVDQUFrRDtBQTBDbEQ7Ozs7OztHQU1HO0FBQ0gsTUFBYSxhQUFjLFNBQVEsaUJBQU87SUFDeEMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF5QjtRQUNqRSxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLElBQUksS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDbEUsNkJBQTZCO1lBQzdCLE1BQU0sSUFBSSxLQUFLLENBQ2IsdUZBQXVGLENBRXhGLENBQUM7UUFDSixDQUFDO1FBRUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixrQkFBa0IsRUFBRSxJQUFJLGdDQUFpQixDQUN2QyxLQUFLLENBQUMsT0FBTyxFQUNiLEtBQUssQ0FBQyxrQkFBa0IsQ0FDekI7WUFDRCxHQUFHLEtBQUssQ0FBQyxPQUFPLEVBQUUsbUNBQW1DO1lBQ3JELEdBQUcsS0FBSztTQUNULENBQUMsQ0FBQztRQUVILElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBRXJCLGlFQUFpRTtZQUNqRSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQztZQUMxQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxlQUFlLENBQUM7WUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsY0FBYyxDQUFDO1FBQ3RDLENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUN0QixRQUFRO2dCQUNOLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FDL0IsS0FBSyxDQUFDLGFBQWEsRUFBRSxTQUFTLElBQUksRUFBRSxDQUNyQyxFQUFFLENBQUM7b0JBQ0YsZ0RBQWdEO29CQUNoRCxNQUFNLE1BQU0sR0FBRyx5QkFBeUIsQ0FBQztvQkFDekMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO3dCQUNqQyxPQUFPOzRCQUNMLHVCQUF1QixHQUFHLEtBQUssR0FBRyw0QkFBNEI7eUJBQy9ELENBQUM7b0JBQ0osQ0FBQztnQkFDSCxDQUFDO2dCQUNELE9BQU8sRUFBRSxDQUFDO1lBQ1osQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBNUNILHNDQTZDQzs7O0FBRUQsU0FBUyxpQkFBaUI7SUFDeEIscUNBQXFDO0lBQ3JDLE1BQU0sSUFBSSxLQUFLLENBQ2IsNkVBQTZFLENBQzlFLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxlQUFlO0lBQ3RCLHFDQUFxQztJQUNyQyxNQUFNLElBQUksS0FBSyxDQUNiLDJFQUEyRSxDQUM1RSxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsY0FBYztJQUNyQixxQ0FBcUM7SUFDckMsTUFBTSxJQUFJLEtBQUssQ0FDYiwwRUFBMEUsQ0FDM0UsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBpbXBvcnQgKiBhcyBjZGsgZnJvbSAnLi4vLi4vY29yZSc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gXCIuXCI7XG5pbXBvcnQgeyBMYW1iZGFJbnRlZ3JhdGlvbiwgTGFtYmRhSW50ZWdyYXRpb25PcHRpb25zIH0gZnJvbSBcIi4vaW50ZWdyYXRpb25zXCI7XG5pbXBvcnQgeyBNZXRob2QgfSBmcm9tIFwiLi9tZXRob2RcIjtcbmltcG9ydCB7IFByb3h5UmVzb3VyY2UsIFJlc291cmNlIH0gZnJvbSBcIi4vcmVzb3VyY2VcIjtcbmltcG9ydCB7IFJlc3RBcGksIFJlc3RBcGlQcm9wcyB9IGZyb20gXCIuL3Jlc3RhcGlcIjtcbi8vIGltcG9ydCB7XG4vLyAgIFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yLFxuLy8gICBWYWxpZGF0aW9uRXJyb3IsXG4vLyB9IGZyb20gXCIuLi8uLi9jb3JlL2xpYi9lcnJvcnNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBMYW1iZGFSZXN0QXBpUHJvcHMgZXh0ZW5kcyBSZXN0QXBpUHJvcHMge1xuICAvKipcbiAgICogVGhlIGRlZmF1bHQgTGFtYmRhIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyBhbGwgcmVxdWVzdHMgZnJvbSB0aGlzIEFQSS5cbiAgICpcbiAgICogVGhpcyBoYW5kbGVyIHdpbGwgYmUgdXNlZCBhcyBhIHRoZSBkZWZhdWx0IGludGVncmF0aW9uIGZvciBhbGwgbWV0aG9kcyBpblxuICAgKiB0aGlzIEFQSSwgdW5sZXNzIHNwZWNpZmllZCBvdGhlcndpc2UgaW4gYGFkZE1ldGhvZGAuXG4gICAqL1xuICByZWFkb25seSBoYW5kbGVyOiBsYW1iZGEuSUZ1bmN0aW9uO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpYyBMYW1iZGEgaW50ZWdyYXRpb24gb3B0aW9ucy5cbiAgICpcbiAgICogQGRlZmF1bHQgc2VlIGRlZmF1bHRzIGRlZmluZWQgaW4gYExhbWJkYUludGVncmF0aW9uT3B0aW9uc2AuXG4gICAqL1xuICByZWFkb25seSBpbnRlZ3JhdGlvbk9wdGlvbnM/OiBMYW1iZGFJbnRlZ3JhdGlvbk9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIElmIHRydWUsIHJvdXRlIGFsbCByZXF1ZXN0cyB0byB0aGUgTGFtYmRhIEZ1bmN0aW9uXG4gICAqXG4gICAqIElmIHNldCB0byBmYWxzZSwgeW91IHdpbGwgbmVlZCB0byBleHBsaWNpdGx5IGRlZmluZSB0aGUgQVBJIG1vZGVsIHVzaW5nXG4gICAqIGBhZGRSZXNvdXJjZWAgYW5kIGBhZGRNZXRob2RgIChvciBgYWRkUHJveHlgKS5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJveHk/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB0aGUgYExhbWJkYVJlc3RBcGlQcm9wc2Agbm93IGV4dGVuZHMgYFJlc3RBcGlQcm9wc2AsIHNvIGFsbFxuICAgKiBvcHRpb25zIGFyZSBqdXN0IGF2YWlsYWJsZSBoZXJlLiBOb3RlIHRoYXQgdGhlIG9wdGlvbnMgc3BlY2lmaWVkIGluXG4gICAqIGBvcHRpb25zYCB3aWxsIGJlIG92ZXJyaWRkZW4gYnkgYW55IHByb3BzIHNwZWNpZmllZCBhdCB0aGUgcm9vdCBsZXZlbC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBvcHRpb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgb3B0aW9ucz86IFJlc3RBcGlQcm9wcztcbn1cblxuLyoqXG4gKiBEZWZpbmVzIGFuIEFQSSBHYXRld2F5IFJFU1QgQVBJIHdpdGggQVdTIExhbWJkYSBwcm94eSBpbnRlZ3JhdGlvbi5cbiAqXG4gKiBVc2UgdGhlIGBwcm94eWAgcHJvcGVydHkgdG8gZGVmaW5lIGEgZ3JlZWR5IHByb3h5IChcIntwcm94eSt9XCIpIGFuZCBcIkFOWVwiXG4gKiBtZXRob2QgZnJvbSB0aGUgc3BlY2lmaWVkIHBhdGguIElmIG5vdCBkZWZpbmVkLCB5b3Ugd2lsbCBuZWVkIHRvIGV4cGxpY2l0eVxuICogYWRkIHJlc291cmNlcyBhbmQgbWV0aG9kcyB0byB0aGUgQVBJLlxuICovXG5leHBvcnQgY2xhc3MgTGFtYmRhUmVzdEFwaSBleHRlbmRzIFJlc3RBcGkge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogTGFtYmRhUmVzdEFwaVByb3BzKSB7XG4gICAgaWYgKHByb3BzLm9wdGlvbnM/LmRlZmF1bHRJbnRlZ3JhdGlvbiB8fCBwcm9wcy5kZWZhdWx0SW50ZWdyYXRpb24pIHtcbiAgICAgIC8vIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdDYW5ub3Qgc3BlY2lmeSBcImRlZmF1bHRJbnRlZ3JhdGlvblwiIHNpbmNlIExhbWJkYSBpbnRlZ3JhdGlvbiBpcyBhdXRvbWF0aWNhbGx5IGRlZmluZWQnLFxuICAgICAgICAvLyBzY29wZSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBkZWZhdWx0SW50ZWdyYXRpb246IG5ldyBMYW1iZGFJbnRlZ3JhdGlvbihcbiAgICAgICAgcHJvcHMuaGFuZGxlcixcbiAgICAgICAgcHJvcHMuaW50ZWdyYXRpb25PcHRpb25zLFxuICAgICAgKSxcbiAgICAgIC4uLnByb3BzLm9wdGlvbnMsIC8vIGRlcHJlY2F0ZWQsIGJ1dCB3ZSBzdGlsbCBzdXBwb3J0XG4gICAgICAuLi5wcm9wcyxcbiAgICB9KTtcblxuICAgIGlmIChwcm9wcy5wcm94eSAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMucm9vdC5hZGRQcm94eSgpO1xuXG4gICAgICAvLyBNYWtlIHN1cmUgdXNlcnMgY2Fubm90IGNhbGwgYW55IG90aGVyIHJlc291cmNlIGFkZGluZyBmdW5jdGlvblxuICAgICAgdGhpcy5yb290LmFkZFJlc291cmNlID0gYWRkUmVzb3VyY2VUaHJvd3M7XG4gICAgICB0aGlzLnJvb3QuYWRkTWV0aG9kID0gYWRkTWV0aG9kVGhyb3dzO1xuICAgICAgdGhpcy5yb290LmFkZFByb3h5ID0gYWRkUHJveHlUaHJvd3M7XG4gICAgfVxuXG4gICAgdGhpcy5ub2RlLmFkZFZhbGlkYXRpb24oe1xuICAgICAgdmFsaWRhdGUoKSB7XG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgT2JqZWN0LnZhbHVlcyhcbiAgICAgICAgICBwcm9wcy5kZXBsb3lPcHRpb25zPy52YXJpYWJsZXMgPz8ge30sXG4gICAgICAgICkpIHtcbiAgICAgICAgICAvLyBDaGVja3MgdGhhdCB2YXJpYWJsZSBTdGFnZSB2YWx1ZXMgbWF0Y2ggcmVnZXhcbiAgICAgICAgICBjb25zdCByZWdleHAgPSAvW0EtWmEtejAtOS0uX346Lz8jJj0sXSsvO1xuICAgICAgICAgIGlmICh2YWx1ZS5tYXRjaChyZWdleHApID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICBcIlN0YWdlIHZhcmlhYmxlIHZhbHVlIFwiICsgdmFsdWUgKyBcIiBkb2VzIG5vdCBtYXRjaCB0aGUgcmVnZXguXCIsXG4gICAgICAgICAgICBdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW107XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFkZFJlc291cmNlVGhyb3dzKCk6IFJlc291cmNlIHtcbiAgLy8gdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKFxuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgXCJDYW5ub3QgY2FsbCAnYWRkUmVzb3VyY2UnIG9uIGEgcHJveHlpbmcgTGFtYmRhUmVzdEFwaTsgc2V0ICdwcm94eScgdG8gZmFsc2VcIixcbiAgKTtcbn1cblxuZnVuY3Rpb24gYWRkTWV0aG9kVGhyb3dzKCk6IE1ldGhvZCB7XG4gIC8vIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihcbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgIFwiQ2Fubm90IGNhbGwgJ2FkZE1ldGhvZCcgb24gYSBwcm94eWluZyBMYW1iZGFSZXN0QXBpOyBzZXQgJ3Byb3h5JyB0byBmYWxzZVwiLFxuICApO1xufVxuXG5mdW5jdGlvbiBhZGRQcm94eVRocm93cygpOiBQcm94eVJlc291cmNlIHtcbiAgLy8gdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKFxuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgXCJDYW5ub3QgY2FsbCAnYWRkUHJveHknIG9uIGEgcHJveHlpbmcgTGFtYmRhUmVzdEFwaTsgc2V0ICdwcm94eScgdG8gZmFsc2VcIixcbiAgKTtcbn1cbiJdfQ==
|