terraconstructs 0.0.25 → 0.1.0
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 +83665 -54911
- package/.mise.toml +1 -1
- package/.nvmrc +1 -1
- package/LICENSE +202 -674
- 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 +1 -0
- package/lib/aws/compute/function-alias.js +8 -2
- package/lib/aws/compute/function-base.d.ts +15 -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 +34 -4
- package/lib/aws/compute/function.js +91 -17
- 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,649 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a, _b, _c, _d;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.AccessLogFormat = exports.AccessLogField = exports.FirehoseLogDestination = exports.LogGroupLogDestination = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
/**
|
|
7
|
+
* Use CloudWatch Logs as a custom access log destination for API Gateway.
|
|
8
|
+
*/
|
|
9
|
+
class LogGroupLogDestination {
|
|
10
|
+
constructor(logGroup) {
|
|
11
|
+
this.logGroup = logGroup;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Binds this destination to the CloudWatch Logs.
|
|
15
|
+
*/
|
|
16
|
+
bind(_stage) {
|
|
17
|
+
return {
|
|
18
|
+
destinationArn: this.logGroup.logGroupArn,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
exports.LogGroupLogDestination = LogGroupLogDestination;
|
|
23
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
24
|
+
LogGroupLogDestination[_a] = { fqn: "terraconstructs.aws.compute.LogGroupLogDestination", version: "0.1.0" };
|
|
25
|
+
/**
|
|
26
|
+
* Use a Firehose delivery stream as a custom access log destination for API Gateway.
|
|
27
|
+
*/
|
|
28
|
+
class FirehoseLogDestination {
|
|
29
|
+
constructor(stream) {
|
|
30
|
+
this.stream = stream;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Binds this destination to the Firehose delivery stream.
|
|
34
|
+
*/
|
|
35
|
+
bind(_stage) {
|
|
36
|
+
if (!this.stream.nameInput?.startsWith("amazon-apigateway-")) {
|
|
37
|
+
// throw new ValidationError(
|
|
38
|
+
throw new Error(`Firehose delivery stream name for access log destination must begin with 'amazon-apigateway-', got '${this.stream.nameInput}'`);
|
|
39
|
+
}
|
|
40
|
+
return {
|
|
41
|
+
destinationArn: this.stream.arn,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
exports.FirehoseLogDestination = FirehoseLogDestination;
|
|
46
|
+
_b = JSII_RTTI_SYMBOL_1;
|
|
47
|
+
FirehoseLogDestination[_b] = { fqn: "terraconstructs.aws.compute.FirehoseLogDestination", version: "0.1.0" };
|
|
48
|
+
/**
|
|
49
|
+
* $context variables that can be used to customize access log pattern.
|
|
50
|
+
*/
|
|
51
|
+
class AccessLogField {
|
|
52
|
+
/**
|
|
53
|
+
* The API callers AWS account ID.
|
|
54
|
+
* @deprecated Use `contextCallerAccountId` or `contextOwnerAccountId` instead
|
|
55
|
+
*/
|
|
56
|
+
static contextAccountId() {
|
|
57
|
+
return "$context.identity.accountId";
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* The API callers AWS account ID.
|
|
61
|
+
*/
|
|
62
|
+
static contextCallerAccountId() {
|
|
63
|
+
return "$context.identity.accountId";
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* The API owner's AWS account ID.
|
|
67
|
+
*/
|
|
68
|
+
static contextOwnerAccountId() {
|
|
69
|
+
return "$context.accountId";
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* The identifier API Gateway assigns to your API.
|
|
73
|
+
*/
|
|
74
|
+
static contextApiId() {
|
|
75
|
+
return "$context.apiId";
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* A property of the claims returned from the Amazon Cognito user pool after the method caller is successfully authenticated.
|
|
79
|
+
* @see https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-integrate-with-cognito.html
|
|
80
|
+
*
|
|
81
|
+
* @param property A property key of the claims.
|
|
82
|
+
*/
|
|
83
|
+
static contextAuthorizerClaims(property) {
|
|
84
|
+
return `$context.authorizer.claims.${property}`;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* The principal user identification associated with the token sent by the client and returned
|
|
88
|
+
* from an API Gateway Lambda authorizer (formerly known as a custom authorizer).
|
|
89
|
+
* @see https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html
|
|
90
|
+
*/
|
|
91
|
+
static contextAuthorizerPrincipalId() {
|
|
92
|
+
return "$context.authorizer.principalId";
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* The stringified value of the specified key-value pair of the `context` map returned from an API Gateway Lambda authorizer function.
|
|
96
|
+
* @see https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html
|
|
97
|
+
* @param property key of the context map.
|
|
98
|
+
*/
|
|
99
|
+
static contextAuthorizer(property) {
|
|
100
|
+
return `$context.authorizer.${property}`;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* The AWS endpoint's request ID.
|
|
104
|
+
*/
|
|
105
|
+
static contextAwsEndpointRequestId() {
|
|
106
|
+
return "$context.awsEndpointRequestId";
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* The full domain name used to invoke the API. This should be the same as the incoming `Host` header.
|
|
110
|
+
*/
|
|
111
|
+
static contextDomainName() {
|
|
112
|
+
return "$context.domainName";
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* The first label of the `$context.domainName`. This is often used as a caller/customer identifier.
|
|
116
|
+
*/
|
|
117
|
+
static contextDomainPrefix() {
|
|
118
|
+
return "$context.domainPrefix";
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* A string containing an API Gateway error message.
|
|
122
|
+
*/
|
|
123
|
+
static contextErrorMessage() {
|
|
124
|
+
return "$context.error.message";
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* The quoted value of $context.error.message, namely "$context.error.message".
|
|
128
|
+
*/
|
|
129
|
+
static contextErrorMessageString() {
|
|
130
|
+
return "$context.error.messageString";
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* A type of GatewayResponse. This variable can only be used for simple variable substitution in a GatewayResponse body-mapping template,
|
|
134
|
+
* which is not processed by the Velocity Template Language engine, and in access logging.
|
|
135
|
+
*
|
|
136
|
+
* @see https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-logging.html
|
|
137
|
+
* @see https://docs.aws.amazon.com/apigateway/latest/developerguide/customize-gateway-responses.html
|
|
138
|
+
*/
|
|
139
|
+
static contextErrorResponseType() {
|
|
140
|
+
return "$context.error.responseType";
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* A string containing a detailed validation error message.
|
|
144
|
+
*/
|
|
145
|
+
static contextErrorValidationErrorString() {
|
|
146
|
+
return "$context.error.validationErrorString";
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* The extended ID that API Gateway assigns to the API request, which contains more useful information for debugging/troubleshooting.
|
|
150
|
+
*/
|
|
151
|
+
static contextExtendedRequestId() {
|
|
152
|
+
return "$context.extendedRequestId";
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* The HTTP method used. Valid values include: `DELETE`, `GET`, `HEAD`, `OPTIONS`, `PATCH`, `POST`, and `PUT`.
|
|
156
|
+
*/
|
|
157
|
+
static contextHttpMethod() {
|
|
158
|
+
return "$context.httpMethod";
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* The AWS account ID associated with the request.
|
|
162
|
+
*/
|
|
163
|
+
static contextIdentityAccountId() {
|
|
164
|
+
return "$context.identity.accountId";
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* For API methods that require an API key, this variable is the API key associated with the method request.
|
|
168
|
+
* For methods that don't require an API key, this variable is
|
|
169
|
+
* @see https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-api-usage-plans.html
|
|
170
|
+
*/
|
|
171
|
+
static contextIdentityApiKey() {
|
|
172
|
+
return "$context.identity.apiKey";
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* The API key ID associated with an API request that requires an API key.
|
|
176
|
+
*/
|
|
177
|
+
static contextIdentityApiKeyId() {
|
|
178
|
+
return "$context.identity.apiKeyId";
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* The principal identifier of the caller making the request.
|
|
182
|
+
*/
|
|
183
|
+
static contextIdentityCaller() {
|
|
184
|
+
return "$context.identity.caller";
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* The Amazon Cognito authentication provider used by the caller making the request.
|
|
188
|
+
* Available only if the request was signed with Amazon Cognito credentials.
|
|
189
|
+
* @see https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-identity.html
|
|
190
|
+
*/
|
|
191
|
+
static contextIdentityCognitoAuthenticationProvider() {
|
|
192
|
+
return "$context.identity.cognitoAuthenticationProvider";
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* The Amazon Cognito authentication type of the caller making the request.
|
|
196
|
+
* Available only if the request was signed with Amazon Cognito credentials.
|
|
197
|
+
*/
|
|
198
|
+
static contextIdentityCognitoAuthenticationType() {
|
|
199
|
+
return "$context.identity.cognitoAuthenticationType";
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* The Amazon Cognito identity ID of the caller making the request. Available only if the request was signed with Amazon Cognito credentials.
|
|
203
|
+
*/
|
|
204
|
+
static contextIdentityCognitoIdentityId() {
|
|
205
|
+
return "$context.identity.cognitoIdentityId";
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* The Amazon Cognito identity pool ID of the caller making the request.
|
|
209
|
+
* Available only if the request was signed with Amazon Cognito credentials.
|
|
210
|
+
*/
|
|
211
|
+
static contextIdentityCognitoIdentityPoolId() {
|
|
212
|
+
return "$context.identity.cognitoIdentityPoolId";
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* The AWS organization ID.
|
|
216
|
+
*/
|
|
217
|
+
static contextIdentityPrincipalOrgId() {
|
|
218
|
+
return "$context.identity.principalOrgId";
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* The source IP address of the TCP connection making the request to API Gateway.
|
|
222
|
+
* Warning: You should not trust this value if there is any chance that the `X-Forwarded-For` header could be forged.
|
|
223
|
+
*/
|
|
224
|
+
static contextIdentitySourceIp() {
|
|
225
|
+
return "$context.identity.sourceIp";
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* The PEM-encoded client certificate that the client presented during mutual TLS authentication.
|
|
229
|
+
* Present when a client accesses an API by using a custom domain name that has mutual TLS enabled.
|
|
230
|
+
* Present only in access logs if mutual TLS authentication fails.
|
|
231
|
+
*/
|
|
232
|
+
static contextIdentityClientCertPem() {
|
|
233
|
+
return "$context.identity.clientCert.clientCertPem";
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* The distinguished name of the subject of the certificate that a client presents.
|
|
237
|
+
* Present when a client accesses an API by using a custom domain name that has mutual TLS enabled.
|
|
238
|
+
* Present only in access logs if mutual TLS authentication fails.
|
|
239
|
+
*/
|
|
240
|
+
static contextIdentityClientCertSubjectDN() {
|
|
241
|
+
return "$context.identity.clientCert.subjectDN";
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* The distinguished name of the issuer of the certificate that a client presents.
|
|
245
|
+
* Present when a client accesses an API by using a custom domain name that has mutual TLS enabled.
|
|
246
|
+
* Present only in access logs if mutual TLS authentication fails.
|
|
247
|
+
*/
|
|
248
|
+
static contextIdentityClientCertIssunerDN() {
|
|
249
|
+
return "$context.identity.clientCert.issuerDN";
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* The serial number of the certificate.
|
|
253
|
+
* Present when a client accesses an API by using a custom domain name that has mutual TLS enabled.
|
|
254
|
+
* Present only in access logs if mutual TLS authentication fails.
|
|
255
|
+
*/
|
|
256
|
+
static contextIdentityClientCertSerialNumber() {
|
|
257
|
+
return "$context.identity.clientCert.serialNumber";
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* The date before which the certificate is invalid.
|
|
261
|
+
* Present when a client accesses an API by using a custom domain name that has mutual TLS enabled.
|
|
262
|
+
* Present only in access logs if mutual TLS authentication fails.
|
|
263
|
+
*/
|
|
264
|
+
static contextIdentityClientCertValidityNotBefore() {
|
|
265
|
+
return "$context.identity.clientCert.validity.notBefore";
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* The date after which the certificate is invalid.
|
|
269
|
+
* Present when a client accesses an API by using a custom domain name that has mutual TLS enabled.
|
|
270
|
+
* Present only in access logs if mutual TLS authentication fails.
|
|
271
|
+
*/
|
|
272
|
+
static contextIdentityClientCertValidityNotAfter() {
|
|
273
|
+
return "$context.identity.clientCert.validity.notAfter";
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* The principal identifier of the user making the request. Used in Lambda authorizers.
|
|
277
|
+
* @see https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-lambda-authorizer-output.html
|
|
278
|
+
*/
|
|
279
|
+
static contextIdentityUser() {
|
|
280
|
+
return "$context.identity.user";
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* The User-Agent header of the API caller.
|
|
284
|
+
*/
|
|
285
|
+
static contextIdentityUserAgent() {
|
|
286
|
+
return "$context.identity.userAgent";
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* The Amazon Resource Name (ARN) of the effective user identified after authentication.
|
|
290
|
+
* @see https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html
|
|
291
|
+
*/
|
|
292
|
+
static contextIdentityUserArn() {
|
|
293
|
+
return "$context.identity.userArn";
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* The request path.
|
|
297
|
+
* For example, for a non-proxy request URL of https://{rest-api-id.execute-api.{region}.amazonaws.com/{stage}/root/child,
|
|
298
|
+
* this value is /{stage}/root/child.
|
|
299
|
+
*/
|
|
300
|
+
static contextPath() {
|
|
301
|
+
return "$context.path";
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* The request protocol, for example, HTTP/1.1.
|
|
305
|
+
*/
|
|
306
|
+
static contextProtocol() {
|
|
307
|
+
return "$context.protocol";
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* The ID that API Gateway assigns to the API request.
|
|
311
|
+
*/
|
|
312
|
+
static contextRequestId() {
|
|
313
|
+
return "$context.requestId";
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* The request header override.
|
|
317
|
+
* If this parameter is defined, it contains the headers to be used instead of the HTTP Headers that are defined in the Integration Request pane.
|
|
318
|
+
* @see https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-override-request-response-parameters.html
|
|
319
|
+
*/
|
|
320
|
+
static contextRequestOverrideHeader(headerName) {
|
|
321
|
+
return `$context.requestOverride.header.${headerName}`;
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* The request path override. If this parameter is defined,
|
|
325
|
+
* it contains the request path to be used instead of the URL Path Parameters that are defined in the Integration Request pane.
|
|
326
|
+
* @see https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-override-request-response-parameters.html
|
|
327
|
+
*/
|
|
328
|
+
static contextRequestOverridePath(pathName) {
|
|
329
|
+
return `$context.requestOverride.path.${pathName}`;
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* The request query string override.
|
|
333
|
+
* If this parameter is defined, it contains the request query strings to be used instead
|
|
334
|
+
* of the URL Query String Parameters that are defined in the Integration Request pane.
|
|
335
|
+
*/
|
|
336
|
+
static contextRequestOverrideQuerystring(querystringName) {
|
|
337
|
+
return `$context.requestOverride.querystring.${querystringName}`;
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* The response header override.
|
|
341
|
+
* If this parameter is defined, it contains the header to be returned instead of the Response header
|
|
342
|
+
* that is defined as the Default mapping in the Integration Response pane.
|
|
343
|
+
* @see https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-override-request-response-parameters.html
|
|
344
|
+
*/
|
|
345
|
+
static contextResponseOverrideHeader(headerName) {
|
|
346
|
+
return `$context.responseOverride.header.${headerName}`;
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* The response status code override.
|
|
350
|
+
* If this parameter is defined, it contains the status code to be returned instead of the Method response status
|
|
351
|
+
* that is defined as the Default mapping in the Integration Response pane.
|
|
352
|
+
* @see https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-override-request-response-parameters.html
|
|
353
|
+
*/
|
|
354
|
+
static contextResponseOverrideStatus() {
|
|
355
|
+
return "$context.responseOverride.status";
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* The CLF-formatted request time (dd/MMM/yyyy:HH:mm:ss +-hhmm).
|
|
359
|
+
*/
|
|
360
|
+
static contextRequestTime() {
|
|
361
|
+
return "$context.requestTime";
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
364
|
+
* The Epoch-formatted request time.
|
|
365
|
+
*/
|
|
366
|
+
static contextRequestTimeEpoch() {
|
|
367
|
+
return "$context.requestTimeEpoch";
|
|
368
|
+
}
|
|
369
|
+
/**
|
|
370
|
+
* The identifier that API Gateway assigns to your resource.
|
|
371
|
+
*/
|
|
372
|
+
static contextResourceId() {
|
|
373
|
+
return "$context.resourceId";
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* The path to your resource.
|
|
377
|
+
* For example, for the non-proxy request URI of `https://{rest-api-id.execute-api.{region}.amazonaws.com/{stage}/root/child`,
|
|
378
|
+
* The $context.resourcePath value is `/root/child`.
|
|
379
|
+
* @see https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-create-api-step-by-step.html
|
|
380
|
+
*/
|
|
381
|
+
static contextResourcePath() {
|
|
382
|
+
return "$context.resourcePath";
|
|
383
|
+
}
|
|
384
|
+
/**
|
|
385
|
+
* The deployment stage of the API request (for example, `Beta` or `Prod`).
|
|
386
|
+
*/
|
|
387
|
+
static contextStage() {
|
|
388
|
+
return "$context.stage";
|
|
389
|
+
}
|
|
390
|
+
/**
|
|
391
|
+
* The response received from AWS WAF: `WAF_ALLOW` or `WAF_BLOCK`. Will not be set if the stage is not associated with a web ACL.
|
|
392
|
+
* @see https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-aws-waf.html
|
|
393
|
+
*/
|
|
394
|
+
static contextWafResponseCode() {
|
|
395
|
+
return "$context.wafResponseCode";
|
|
396
|
+
}
|
|
397
|
+
/**
|
|
398
|
+
* The complete ARN of the web ACL that is used to decide whether to allow or block the request.
|
|
399
|
+
* Will not be set if the stage is not associated with a web ACL.
|
|
400
|
+
* @see https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-aws-waf.html
|
|
401
|
+
*/
|
|
402
|
+
static contextWebaclArn() {
|
|
403
|
+
return "$context.webaclArn";
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* The trace ID for the X-Ray trace.
|
|
407
|
+
* @see https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-enabling-xray.html
|
|
408
|
+
*/
|
|
409
|
+
static contextXrayTraceId() {
|
|
410
|
+
return "$context.xrayTraceId";
|
|
411
|
+
}
|
|
412
|
+
/**
|
|
413
|
+
* The authorizer latency in ms.
|
|
414
|
+
*/
|
|
415
|
+
static contextAuthorizerIntegrationLatency() {
|
|
416
|
+
return "$context.authorizer.integrationLatency";
|
|
417
|
+
}
|
|
418
|
+
/**
|
|
419
|
+
* The integration latency in ms.
|
|
420
|
+
*/
|
|
421
|
+
static contextIntegrationLatency() {
|
|
422
|
+
return "$context.integrationLatency";
|
|
423
|
+
}
|
|
424
|
+
/**
|
|
425
|
+
* For Lambda proxy integration, this parameter represents the status code returned from AWS Lambda,
|
|
426
|
+
* not from the backend Lambda function.
|
|
427
|
+
*/
|
|
428
|
+
static contextIntegrationStatus() {
|
|
429
|
+
return "$context.integrationStatus";
|
|
430
|
+
}
|
|
431
|
+
/**
|
|
432
|
+
* The response latency in ms.
|
|
433
|
+
*/
|
|
434
|
+
static contextResponseLatency() {
|
|
435
|
+
return "$context.responseLatency";
|
|
436
|
+
}
|
|
437
|
+
/**
|
|
438
|
+
* The response payload length.
|
|
439
|
+
*/
|
|
440
|
+
static contextResponseLength() {
|
|
441
|
+
return "$context.responseLength";
|
|
442
|
+
}
|
|
443
|
+
/**
|
|
444
|
+
* The method response status.
|
|
445
|
+
*/
|
|
446
|
+
static contextStatus() {
|
|
447
|
+
return "$context.status";
|
|
448
|
+
}
|
|
449
|
+
/**
|
|
450
|
+
* The authorization error message.
|
|
451
|
+
*/
|
|
452
|
+
static contextAuthorizeError() {
|
|
453
|
+
return "$context.authorize.error";
|
|
454
|
+
}
|
|
455
|
+
/**
|
|
456
|
+
* The authorization latency in ms.
|
|
457
|
+
*/
|
|
458
|
+
static contextAuthorizeLatency() {
|
|
459
|
+
return "$context.authorize.latency";
|
|
460
|
+
}
|
|
461
|
+
/**
|
|
462
|
+
* The status code returned from an authorization attempt.
|
|
463
|
+
*/
|
|
464
|
+
static contextAuthorizeStatus() {
|
|
465
|
+
return "$context.authorize.status";
|
|
466
|
+
}
|
|
467
|
+
/**
|
|
468
|
+
* The error message returned from an authorizer.
|
|
469
|
+
*/
|
|
470
|
+
static contextAuthorizerError() {
|
|
471
|
+
return "$context.authorizer.error";
|
|
472
|
+
}
|
|
473
|
+
/**
|
|
474
|
+
* The status code returned from a Lambda authorizer.
|
|
475
|
+
*/
|
|
476
|
+
static contextAuthorizerIntegrationStatus() {
|
|
477
|
+
return "$context.authorizer.integrationStatus";
|
|
478
|
+
}
|
|
479
|
+
/**
|
|
480
|
+
* The authorizer latency in ms.
|
|
481
|
+
*/
|
|
482
|
+
static contextAuthorizerLatency() {
|
|
483
|
+
return "$context.authorizer.latency";
|
|
484
|
+
}
|
|
485
|
+
/**
|
|
486
|
+
* The AWS endpoint's request ID.
|
|
487
|
+
*/
|
|
488
|
+
static contextAuthorizerRequestId() {
|
|
489
|
+
return "$context.authorizer.requestId";
|
|
490
|
+
}
|
|
491
|
+
/**
|
|
492
|
+
* The status code returned from an authorizer.
|
|
493
|
+
*/
|
|
494
|
+
static contextAuthorizerStatus() {
|
|
495
|
+
return "$context.authorizer.status";
|
|
496
|
+
}
|
|
497
|
+
/**
|
|
498
|
+
* The error message returned from an authentication attempt.
|
|
499
|
+
*/
|
|
500
|
+
static contextAuthenticateError() {
|
|
501
|
+
return "$context.authenticate.error";
|
|
502
|
+
}
|
|
503
|
+
/**
|
|
504
|
+
* The authentication latency in ms.
|
|
505
|
+
*/
|
|
506
|
+
static contextAuthenticateLatency() {
|
|
507
|
+
return "$context.authenticate.latency";
|
|
508
|
+
}
|
|
509
|
+
/**
|
|
510
|
+
* The status code returned from an authentication attempt.
|
|
511
|
+
*/
|
|
512
|
+
static contextAuthenticateStatus() {
|
|
513
|
+
return "$context.authenticate.status";
|
|
514
|
+
}
|
|
515
|
+
/**
|
|
516
|
+
* The path for an API mapping that an incoming request matched.
|
|
517
|
+
* Applicable when a client uses a custom domain name to access an API. For example if a client sends a request to
|
|
518
|
+
* https://api.example.com/v1/orders/1234, and the request matches the API mapping with the path v1/orders, the value is v1/orders.
|
|
519
|
+
* @see https://docs.aws.amazon.com/en_jp/apigateway/latest/developerguide/rest-api-mappings.html
|
|
520
|
+
*/
|
|
521
|
+
static contextCustomDomainBasePathMatched() {
|
|
522
|
+
return "$context.customDomain.basePathMatched";
|
|
523
|
+
}
|
|
524
|
+
/**
|
|
525
|
+
* A string that contains an integration error message.
|
|
526
|
+
*/
|
|
527
|
+
static contextIntegrationErrorMessage() {
|
|
528
|
+
return "$context.integrationErrorMessage";
|
|
529
|
+
}
|
|
530
|
+
/**
|
|
531
|
+
* The error message returned from AWS WAF.
|
|
532
|
+
*/
|
|
533
|
+
static contextWafError() {
|
|
534
|
+
return "$context.waf.error";
|
|
535
|
+
}
|
|
536
|
+
/**
|
|
537
|
+
* The AWS WAF latency in ms.
|
|
538
|
+
*/
|
|
539
|
+
static contextWafLatency() {
|
|
540
|
+
return "$context.waf.latency";
|
|
541
|
+
}
|
|
542
|
+
/**
|
|
543
|
+
* The status code returned from AWS WAF.
|
|
544
|
+
*/
|
|
545
|
+
static contextWafStatus() {
|
|
546
|
+
return "$context.waf.status";
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
exports.AccessLogField = AccessLogField;
|
|
550
|
+
_c = JSII_RTTI_SYMBOL_1;
|
|
551
|
+
AccessLogField[_c] = { fqn: "terraconstructs.aws.compute.AccessLogField", version: "0.1.0" };
|
|
552
|
+
/**
|
|
553
|
+
* factory methods for access log format.
|
|
554
|
+
*/
|
|
555
|
+
class AccessLogFormat {
|
|
556
|
+
/**
|
|
557
|
+
* Custom log format.
|
|
558
|
+
* You can create any log format string. You can easily get the $ context variable by using the methods of AccessLogField.
|
|
559
|
+
* @example
|
|
560
|
+
*
|
|
561
|
+
* apigateway.AccessLogFormat.custom(JSON.stringify({
|
|
562
|
+
* requestId: apigateway.AccessLogField.contextRequestId(),
|
|
563
|
+
* sourceIp: apigateway.AccessLogField.contextIdentitySourceIp(),
|
|
564
|
+
* method: apigateway.AccessLogField.contextHttpMethod(),
|
|
565
|
+
* userContext: {
|
|
566
|
+
* sub: apigateway.AccessLogField.contextAuthorizerClaims('sub'),
|
|
567
|
+
* email: apigateway.AccessLogField.contextAuthorizerClaims('email')
|
|
568
|
+
* }
|
|
569
|
+
* }))
|
|
570
|
+
*/
|
|
571
|
+
static custom(format) {
|
|
572
|
+
return new AccessLogFormat(format);
|
|
573
|
+
}
|
|
574
|
+
/**
|
|
575
|
+
* Generate Common Log Format.
|
|
576
|
+
*/
|
|
577
|
+
static clf() {
|
|
578
|
+
const requester = [
|
|
579
|
+
AccessLogField.contextIdentitySourceIp(),
|
|
580
|
+
AccessLogField.contextIdentityCaller(),
|
|
581
|
+
AccessLogField.contextIdentityUser(),
|
|
582
|
+
].join(" ");
|
|
583
|
+
const requestTime = AccessLogField.contextRequestTime();
|
|
584
|
+
const request = [
|
|
585
|
+
AccessLogField.contextHttpMethod(),
|
|
586
|
+
AccessLogField.contextResourcePath(),
|
|
587
|
+
AccessLogField.contextProtocol(),
|
|
588
|
+
].join(" ");
|
|
589
|
+
const status = [
|
|
590
|
+
AccessLogField.contextStatus(),
|
|
591
|
+
AccessLogField.contextResponseLength(),
|
|
592
|
+
AccessLogField.contextRequestId(),
|
|
593
|
+
].join(" ");
|
|
594
|
+
return new AccessLogFormat(`${requester} [${requestTime}] "${request}" ${status}`);
|
|
595
|
+
}
|
|
596
|
+
/**
|
|
597
|
+
* Access log will be produced in the JSON format with a set of fields most useful in the access log. All fields are turned on by default with the
|
|
598
|
+
* option to turn off specific fields.
|
|
599
|
+
*/
|
|
600
|
+
static jsonWithStandardFields(fields = {
|
|
601
|
+
ip: true,
|
|
602
|
+
user: true,
|
|
603
|
+
caller: true,
|
|
604
|
+
requestTime: true,
|
|
605
|
+
httpMethod: true,
|
|
606
|
+
resourcePath: true,
|
|
607
|
+
status: true,
|
|
608
|
+
protocol: true,
|
|
609
|
+
responseLength: true,
|
|
610
|
+
}) {
|
|
611
|
+
return this.custom(JSON.stringify({
|
|
612
|
+
requestId: AccessLogField.contextRequestId(),
|
|
613
|
+
ip: fields.ip ? AccessLogField.contextIdentitySourceIp() : undefined,
|
|
614
|
+
user: fields.user ? AccessLogField.contextIdentityUser() : undefined,
|
|
615
|
+
caller: fields.caller
|
|
616
|
+
? AccessLogField.contextIdentityCaller()
|
|
617
|
+
: undefined,
|
|
618
|
+
requestTime: fields.requestTime
|
|
619
|
+
? AccessLogField.contextRequestTime()
|
|
620
|
+
: undefined,
|
|
621
|
+
httpMethod: fields.httpMethod
|
|
622
|
+
? AccessLogField.contextHttpMethod()
|
|
623
|
+
: undefined,
|
|
624
|
+
resourcePath: fields.resourcePath
|
|
625
|
+
? AccessLogField.contextResourcePath()
|
|
626
|
+
: undefined,
|
|
627
|
+
status: fields.status ? AccessLogField.contextStatus() : undefined,
|
|
628
|
+
protocol: fields.protocol
|
|
629
|
+
? AccessLogField.contextProtocol()
|
|
630
|
+
: undefined,
|
|
631
|
+
responseLength: fields.responseLength
|
|
632
|
+
? AccessLogField.contextResponseLength()
|
|
633
|
+
: undefined,
|
|
634
|
+
}));
|
|
635
|
+
}
|
|
636
|
+
constructor(format) {
|
|
637
|
+
this.format = format;
|
|
638
|
+
}
|
|
639
|
+
/**
|
|
640
|
+
* Output a format string to be used with CloudFormation.
|
|
641
|
+
*/
|
|
642
|
+
toString() {
|
|
643
|
+
return this.format;
|
|
644
|
+
}
|
|
645
|
+
}
|
|
646
|
+
exports.AccessLogFormat = AccessLogFormat;
|
|
647
|
+
_d = JSII_RTTI_SYMBOL_1;
|
|
648
|
+
AccessLogFormat[_d] = { fqn: "terraconstructs.aws.compute.AccessLogFormat", version: "0.1.0" };
|
|
649
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzLWxvZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hd3MvY29tcHV0ZS9hY2Nlc3MtbG9nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBK0JBOztHQUVHO0FBQ0gsTUFBYSxzQkFBc0I7SUFDakMsWUFBNkIsUUFBbUI7UUFBbkIsYUFBUSxHQUFSLFFBQVEsQ0FBVztJQUFHLENBQUM7SUFFcEQ7O09BRUc7SUFDSSxJQUFJLENBQUMsTUFBYztRQUN4QixPQUFPO1lBQ0wsY0FBYyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVztTQUMxQyxDQUFDO0lBQ0osQ0FBQzs7QUFWSCx3REFXQzs7O0FBRUQ7O0dBRUc7QUFDSCxNQUFhLHNCQUFzQjtJQUNqQyxZQUNtQixNQUFtRTtRQUFuRSxXQUFNLEdBQU4sTUFBTSxDQUE2RDtJQUNuRixDQUFDO0lBRUo7O09BRUc7SUFDSSxJQUFJLENBQUMsTUFBYztRQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsQ0FBQztZQUM3RCw2QkFBNkI7WUFDN0IsTUFBTSxJQUFJLEtBQUssQ0FDYix1R0FBdUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsQ0FFaEksQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPO1lBQ0wsY0FBYyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRztTQUNoQyxDQUFDO0lBQ0osQ0FBQzs7QUFuQkgsd0RBb0JDOzs7QUFFRDs7R0FFRztBQUNILE1BQWEsY0FBYztJQUN6Qjs7O09BR0c7SUFDSSxNQUFNLENBQUMsZ0JBQWdCO1FBQzVCLE9BQU8sNkJBQTZCLENBQUM7SUFDdkMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLHNCQUFzQjtRQUNsQyxPQUFPLDZCQUE2QixDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxx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ckMsQ0FBQyxDQUFDLFNBQVM7WUFDYixVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVU7Z0JBQzNCLENBQUMsQ0FBQyxjQUFjLENBQUMsaUJBQWlCLEVBQUU7Z0JBQ3BDLENBQUMsQ0FBQyxTQUFTO1lBQ2IsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZO2dCQUMvQixDQUFDLENBQUMsY0FBYyxDQUFDLG1CQUFtQixFQUFFO2dCQUN0QyxDQUFDLENBQUMsU0FBUztZQUNiLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDbEUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO2dCQUN2QixDQUFDLENBQUMsY0FBYyxDQUFDLGVBQWUsRUFBRTtnQkFDbEMsQ0FBQyxDQUFDLFNBQVM7WUFDYixjQUFjLEVBQUUsTUFBTSxDQUFDLGNBQWM7Z0JBQ25DLENBQUMsQ0FBQyxjQUFjLENBQUMscUJBQXFCLEVBQUU7Z0JBQ3hDLENBQUMsQ0FBQyxTQUFTO1NBQ2QsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBT0QsWUFBb0IsTUFBYztRQUNoQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxRQUFRO1FBQ2IsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7O0FBekdILDBDQTBHQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGtpbmVzaXNGaXJlaG9zZURlbGl2ZXJ5U3RyZWFtIH0gZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1hd3NcIjtcbmltcG9ydCB7IElTdGFnZSB9IGZyb20gXCIuL3N0YWdlXCI7XG4vLyBpbXBvcnQgKiBhcyBmaXJlaG9zZSBmcm9tIFwiLi4vLi4vYXdzLWtpbmVzaXNmaXJlaG9zZVwiO1xuLy8gaW1wb3J0ICogYXMgZmlyZWhvc2UgZnJvbSBcIi4uL25vdGlmeS9maXJlaG9zZVwiO1xuaW1wb3J0IHsgSUxvZ0dyb3VwIH0gZnJvbSBcIi4uL2Nsb3Vkd2F0Y2hcIjtcblxuLy8gVE9ETzogQWRvcHQgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3Jcbi8vIC0gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL3B1bGwvMzMzODIvXG4vLyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9wdWxsLzMzMDQ1XG4vLyBpbXBvcnQgeyBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICcuLi8uLi9jb3JlL2xpYi9lcnJvcnMnO1xuXG4vKipcbiAqIEFjY2VzcyBsb2cgZGVzdGluYXRpb24gZm9yIGEgUmVzdEFwaSBTdGFnZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQWNjZXNzTG9nRGVzdGluYXRpb24ge1xuICAvKipcbiAgICogQmluZHMgdGhpcyBkZXN0aW5hdGlvbiB0byB0aGUgUmVzdEFwaSBTdGFnZS5cbiAgICovXG4gIGJpbmQoc3RhZ2U6IElTdGFnZSk6IEFjY2Vzc0xvZ0Rlc3RpbmF0aW9uQ29uZmlnO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgd2hlbiBiaW5kaW5nIGEgbG9nIGRlc3RpbmF0aW9uIHRvIGEgUmVzdEFwaSBTdGFnZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBY2Nlc3NMb2dEZXN0aW5hdGlvbkNvbmZpZyB7XG4gIC8qKlxuICAgKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIGRlc3RpbmF0aW9uIHJlc291cmNlXG4gICAqL1xuICByZWFkb25seSBkZXN0aW5hdGlvbkFybjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFVzZSBDbG91ZFdhdGNoIExvZ3MgYXMgYSBjdXN0b20gYWNjZXNzIGxvZyBkZXN0aW5hdGlvbiBmb3IgQVBJIEdhdGV3YXkuXG4gKi9cbmV4cG9ydCBjbGFzcyBMb2dHcm91cExvZ0Rlc3RpbmF0aW9uIGltcGxlbWVudHMgSUFjY2Vzc0xvZ0Rlc3RpbmF0aW9uIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBsb2dHcm91cDogSUxvZ0dyb3VwKSB7fVxuXG4gIC8qKlxuICAgKiBCaW5kcyB0aGlzIGRlc3RpbmF0aW9uIHRvIHRoZSBDbG91ZFdhdGNoIExvZ3MuXG4gICAqL1xuICBwdWJsaWMgYmluZChfc3RhZ2U6IElTdGFnZSk6IEFjY2Vzc0xvZ0Rlc3RpbmF0aW9uQ29uZmlnIHtcbiAgICByZXR1cm4ge1xuICAgICAgZGVzdGluYXRpb25Bcm46IHRoaXMubG9nR3JvdXAubG9nR3JvdXBBcm4sXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIFVzZSBhIEZpcmVob3NlIGRlbGl2ZXJ5IHN0cmVhbSBhcyBhIGN1c3RvbSBhY2Nlc3MgbG9nIGRlc3RpbmF0aW9uIGZvciBBUEkgR2F0ZXdheS5cbiAqL1xuZXhwb3J0IGNsYXNzIEZpcmVob3NlTG9nRGVzdGluYXRpb24gaW1wbGVtZW50cyBJQWNjZXNzTG9nRGVzdGluYXRpb24ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0cmVhbToga2luZXNpc0ZpcmVob3NlRGVsaXZlcnlTdHJlYW0uS2luZXNpc0ZpcmVob3NlRGVsaXZlcnlTdHJlYW0sXG4gICkge31cblxuICAvKipcbiAgICogQmluZHMgdGhpcyBkZXN0aW5hdGlvbiB0byB0aGUgRmlyZWhvc2UgZGVsaXZlcnkgc3RyZWFtLlxuICAgKi9cbiAgcHVibGljIGJpbmQoX3N0YWdlOiBJU3RhZ2UpOiBBY2Nlc3NMb2dEZXN0aW5hdGlvbkNvbmZpZyB7XG4gICAgaWYgKCF0aGlzLnN0cmVhbS5uYW1lSW5wdXQ/LnN0YXJ0c1dpdGgoXCJhbWF6b24tYXBpZ2F0ZXdheS1cIikpIHtcbiAgICAgIC8vIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBGaXJlaG9zZSBkZWxpdmVyeSBzdHJlYW0gbmFtZSBmb3IgYWNjZXNzIGxvZyBkZXN0aW5hdGlvbiBtdXN0IGJlZ2luIHdpdGggJ2FtYXpvbi1hcGlnYXRld2F5LScsIGdvdCAnJHt0aGlzLnN0cmVhbS5uYW1lSW5wdXR9J2AsXG4gICAgICAgIC8vIF9zdGFnZSxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBkZXN0aW5hdGlvbkFybjogdGhpcy5zdHJlYW0uYXJuLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiAkY29udGV4dCB2YXJpYWJsZXMgdGhhdCBjYW4gYmUgdXNlZCB0byBjdXN0b21pemUgYWNjZXNzIGxvZyBwYXR0ZXJuLlxuICovXG5leHBvcnQgY2xhc3MgQWNjZXNzTG9nRmllbGQge1xuICAvKipcbiAgICogVGhlIEFQSSBjYWxsZXJzIEFXUyBhY2NvdW50IElELlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYGNvbnRleHRDYWxsZXJBY2NvdW50SWRgIG9yIGBjb250ZXh0T3duZXJBY2NvdW50SWRgIGluc3RlYWRcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dEFjY291bnRJZCgpIHtcbiAgICByZXR1cm4gXCIkY29udGV4dC5pZGVudGl0eS5hY2NvdW50SWRcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgQVBJIGNhbGxlcnMgQVdTIGFjY291bnQgSUQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRDYWxsZXJBY2NvdW50SWQoKSB7XG4gICAgcmV0dXJuIFwiJGNvbnRleHQuaWRlbnRpdHkuYWNjb3VudElkXCI7XG4gIH1cblxuICAvKipcbiAgICogVGhlIEFQSSBvd25lcidzIEFXUyBhY2NvdW50IElELlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjb250ZXh0T3duZXJBY2NvdW50SWQoKSB7XG4gICAgcmV0dXJuIFwiJGNvbnRleHQuYWNjb3VudElkXCI7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGlkZW50aWZpZXIgQVBJIEdhdGV3YXkgYXNzaWducyB0byB5b3VyIEFQSS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dEFwaUlkKCkge1xuICAgIHJldHVybiBcIiRjb250ZXh0LmFwaUlkXCI7XG4gIH1cblxuICAvKipcbiAgICogQSBwcm9wZXJ0eSBvZiB0aGUgY2xhaW1zIHJldHVybmVkIGZyb20gdGhlIEFtYXpvbiBDb2duaXRvIHVzZXIgcG9vbCBhZnRlciB0aGUgbWV0aG9kIGNhbGxlciBpcyBzdWNjZXNzZnVsbHkgYXV0aGVudGljYXRlZC5cbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvYXBpZ2F0ZXdheS1pbnRlZ3JhdGUtd2l0aC1jb2duaXRvLmh0bWxcbiAgICpcbiAgICogQHBhcmFtIHByb3BlcnR5IEEgcHJvcGVydHkga2V5IG9mIHRoZSBjbGFpbXMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRBdXRob3JpemVyQ2xhaW1zKHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYCRjb250ZXh0LmF1dGhvcml6ZXIuY2xhaW1zLiR7cHJvcGVydHl9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcHJpbmNpcGFsIHVzZXIgaWRlbnRpZmljYXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSB0b2tlbiBzZW50IGJ5IHRoZSBjbGllbnQgYW5kIHJldHVybmVkXG4gICAqIGZyb20gYW4gQVBJIEdhdGV3YXkgTGFtYmRhIGF1dGhvcml6ZXIgKGZvcm1lcmx5IGtub3duIGFzIGEgY3VzdG9tIGF1dGhvcml6ZXIpLlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9hcGlnYXRld2F5LXVzZS1sYW1iZGEtYXV0aG9yaXplci5odG1sXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRBdXRob3JpemVyUHJpbmNpcGFsSWQoKSB7XG4gICAgcmV0dXJuIFwiJGNvbnRleHQuYXV0aG9yaXplci5wcmluY2lwYWxJZFwiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzdHJpbmdpZmllZCB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIGtleS12YWx1ZSBwYWlyIG9mIHRoZSBgY29udGV4dGAgbWFwIHJldHVybmVkIGZyb20gYW4gQVBJIEdhdGV3YXkgTGFtYmRhIGF1dGhvcml6ZXIgZnVuY3Rpb24uXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2FwaWdhdGV3YXktdXNlLWxhbWJkYS1hdXRob3JpemVyLmh0bWxcbiAgICogQHBhcmFtIHByb3BlcnR5IGtleSBvZiB0aGUgY29udGV4dCBtYXAuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRBdXRob3JpemVyKHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYCRjb250ZXh0LmF1dGhvcml6ZXIuJHtwcm9wZXJ0eX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBBV1MgZW5kcG9pbnQncyByZXF1ZXN0IElELlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjb250ZXh0QXdzRW5kcG9pbnRSZXF1ZXN0SWQoKSB7XG4gICAgcmV0dXJuIFwiJGNvbnRleHQuYXdzRW5kcG9pbnRSZXF1ZXN0SWRcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZnVsbCBkb21haW4gbmFtZSB1c2VkIHRvIGludm9rZSB0aGUgQVBJLiBUaGlzIHNob3VsZCBiZSB0aGUgc2FtZSBhcyB0aGUgaW5jb21pbmcgYEhvc3RgIGhlYWRlci5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dERvbWFpbk5hbWUoKSB7XG4gICAgcmV0dXJuIFwiJGNvbnRleHQuZG9tYWluTmFtZVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBmaXJzdCBsYWJlbCBvZiB0aGUgYCRjb250ZXh0LmRvbWFpbk5hbWVgLiBUaGlzIGlzIG9mdGVuIHVzZWQgYXMgYSBjYWxsZXIvY3VzdG9tZXIgaWRlbnRpZmllci5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dERvbWFpblByZWZpeCgpIHtcbiAgICByZXR1cm4gXCIkY29udGV4dC5kb21haW5QcmVmaXhcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIHN0cmluZyBjb250YWluaW5nIGFuIEFQSSBHYXRld2F5IGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRFcnJvck1lc3NhZ2UoKSB7XG4gICAgcmV0dXJuIFwiJGNvbnRleHQuZXJyb3IubWVzc2FnZVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBxdW90ZWQgdmFsdWUgb2YgJGNvbnRleHQuZXJyb3IubWVzc2FnZSwgbmFtZWx5IFwiJGNvbnRleHQuZXJyb3IubWVzc2FnZVwiLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjb250ZXh0RXJyb3JNZXNzYWdlU3RyaW5nKCkge1xuICAgIHJldHVybiBcIiRjb250ZXh0LmVycm9yLm1lc3NhZ2VTdHJpbmdcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIHR5cGUgb2YgR2F0ZXdheVJlc3BvbnNlLiBUaGlzIHZhcmlhYmxlIGNhbiBvbmx5IGJlIHVzZWQgZm9yIHNpbXBsZSB2YXJpYWJsZSBzdWJzdGl0dXRpb24gaW4gYSBHYXRld2F5UmVzcG9uc2UgYm9keS1tYXBwaW5nIHRlbXBsYXRlLFxuICAgKiB3aGljaCBpcyBub3QgcHJvY2Vzc2VkIGJ5IHRoZSBWZWxvY2l0eSBUZW1wbGF0ZSBMYW5ndWFnZSBlbmdpbmUsIGFuZCBpbiBhY2Nlc3MgbG9nZ2luZy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvYXBpZ2F0ZXdheS13ZWJzb2NrZXQtYXBpLWxvZ2dpbmcuaHRtbFxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9jdXN0b21pemUtZ2F0ZXdheS1yZXNwb25zZXMuaHRtbFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjb250ZXh0RXJyb3JSZXNwb25zZVR5cGUoKSB7XG4gICAgcmV0dXJuIFwiJGNvbnRleHQuZXJyb3IucmVzcG9uc2VUeXBlXCI7XG4gIH1cblxuICAvKipcbiAgICogQSBzdHJpbmcgY29udGFpbmluZyBhIGRldGFpbGVkIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dEVycm9yVmFsaWRhdGlvbkVycm9yU3RyaW5nKCkge1xuICAgIHJldHVybiBcIiRjb250ZXh0LmVycm9yLnZhbGlkYXRpb25FcnJvclN0cmluZ1wiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBleHRlbmRlZCBJRCB0aGF0IEFQSSBHYXRld2F5IGFzc2lnbnMgdG8gdGhlIEFQSSByZXF1ZXN0LCB3aGljaCBjb250YWlucyBtb3JlIHVzZWZ1bCBpbmZvcm1hdGlvbiBmb3IgZGVidWdnaW5nL3Ryb3VibGVzaG9vdGluZy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dEV4dGVuZGVkUmVxdWVzdElkKCkge1xuICAgIHJldHVybiBcIiRjb250ZXh0LmV4dGVuZGVkUmVxdWVzdElkXCI7XG4gIH1cblxuICAvKipcbiAgICogVGhlIEhUVFAgbWV0aG9kIHVzZWQuIFZhbGlkIHZhbHVlcyBpbmNsdWRlOiBgREVMRVRFYCwgYEdFVGAsIGBIRUFEYCwgYE9QVElPTlNgLCBgUEFUQ0hgLCBgUE9TVGAsIGFuZCBgUFVUYC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dEh0dHBNZXRob2QoKSB7XG4gICAgcmV0dXJuIFwiJGNvbnRleHQuaHR0cE1ldGhvZFwiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBBV1MgYWNjb3VudCBJRCBhc3NvY2lhdGVkIHdpdGggdGhlIHJlcXVlc3QuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRJZGVudGl0eUFjY291bnRJZCgpIHtcbiAgICByZXR1cm4gXCIkY29udGV4dC5pZGVudGl0eS5hY2NvdW50SWRcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3IgQVBJIG1ldGhvZHMgdGhhdCByZXF1aXJlIGFuIEFQSSBrZXksIHRoaXMgdmFyaWFibGUgaXMgdGhlIEFQSSBrZXkgYXNzb2NpYXRlZCB3aXRoIHRoZSBtZXRob2QgcmVxdWVzdC5cbiAgICogRm9yIG1ldGhvZHMgdGhhdCBkb24ndCByZXF1aXJlIGFuIEFQSSBrZXksIHRoaXMgdmFyaWFibGUgaXNcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvYXBpLWdhdGV3YXktYXBpLXVzYWdlLXBsYW5zLmh0bWxcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dElkZW50aXR5QXBpS2V5KCkge1xuICAgIHJldHVybiBcIiRjb250ZXh0LmlkZW50aXR5LmFwaUtleVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBBUEkga2V5IElEIGFzc29jaWF0ZWQgd2l0aCBhbiBBUEkgcmVxdWVzdCB0aGF0IHJlcXVpcmVzIGFuIEFQSSBrZXkuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRJZGVudGl0eUFwaUtleUlkKCkge1xuICAgIHJldHVybiBcIiRjb250ZXh0LmlkZW50aXR5LmFwaUtleUlkXCI7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHByaW5jaXBhbCBpZGVudGlmaWVyIG9mIHRoZSBjYWxsZXIgbWFraW5nIHRoZSByZXF1ZXN0LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjb250ZXh0SWRlbnRpdHlDYWxsZXIoKSB7XG4gICAgcmV0dXJuIFwiJGNvbnRleHQuaWRlbnRpdHkuY2FsbGVyXCI7XG4gIH1cblxuICAvKipcbiAgICogVGhlIEFtYXpvbiBDb2duaXRvIGF1dGhlbnRpY2F0aW9uIHByb3ZpZGVyIHVzZWQgYnkgdGhlIGNhbGxlciBtYWtpbmcgdGhlIHJlcXVlc3QuXG4gICAqIEF2YWlsYWJsZSBvbmx5IGlmIHRoZSByZXF1ZXN0IHdhcyBzaWduZWQgd2l0aCBBbWF6b24gQ29nbml0byBjcmVkZW50aWFscy5cbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY29nbml0by9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvY29nbml0by1pZGVudGl0eS5odG1sXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRJZGVudGl0eUNvZ25pdG9BdXRoZW50aWNhdGlvblByb3ZpZGVyKCkge1xuICAgIHJldHVybiBcIiRjb250ZXh0LmlkZW50aXR5LmNvZ25pdG9BdXRoZW50aWNhdGlvblByb3ZpZGVyXCI7XG4gIH1cblxuICAvKipcbiAgICogVGhlIEFtYXpvbiBDb2duaXRvIGF1dGhlbnRpY2F0aW9uIHR5cGUgb2YgdGhlIGNhbGxlciBtYWtpbmcgdGhlIHJlcXVlc3QuXG4gICAqIEF2YWlsYWJsZSBvbmx5IGlmIHRoZSByZXF1ZXN0IHdhcyBzaWduZWQgd2l0aCBBbWF6b24gQ29nbml0byBjcmVkZW50aWFscy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dElkZW50aXR5Q29nbml0b0F1dGhlbnRpY2F0aW9uVHlwZSgpIHtcbiAgICByZXR1cm4gXCIkY29udGV4dC5pZGVudGl0eS5jb2duaXRvQXV0aGVudGljYXRpb25UeXBlXCI7XG4gIH1cblxuICAvKipcbiAgICogVGhlIEFtYXpvbiBDb2duaXRvIGlkZW50aXR5IElEIG9mIHRoZSBjYWxsZXIgbWFraW5nIHRoZSByZXF1ZXN0LiBBdmFpbGFibGUgb25seSBpZiB0aGUgcmVxdWVzdCB3YXMgc2lnbmVkIHdpdGggQW1hem9uIENvZ25pdG8gY3JlZGVudGlhbHMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRJZGVudGl0eUNvZ25pdG9JZGVudGl0eUlkKCkge1xuICAgIHJldHVybiBcIiRjb250ZXh0LmlkZW50aXR5LmNvZ25pdG9JZGVudGl0eUlkXCI7XG4gIH1cblxuICAvKipcbiAgICogVGhlIEFtYXpvbiBDb2duaXRvIGlkZW50aXR5IHBvb2wgSUQgb2YgdGhlIGNhbGxlciBtYWtpbmcgdGhlIHJlcXVlc3QuXG4gICAqIEF2YWlsYWJsZSBvbmx5IGlmIHRoZSByZXF1ZXN0IHdhcyBzaWduZWQgd2l0aCBBbWF6b24gQ29nbml0byBjcmVkZW50aWFscy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dElkZW50aXR5Q29nbml0b0lkZW50aXR5UG9vbElkKCkge1xuICAgIHJldHVybiBcIiRjb250ZXh0LmlkZW50aXR5LmNvZ25pdG9JZGVudGl0eVBvb2xJZFwiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBBV1Mgb3JnYW5pemF0aW9uIElELlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjb250ZXh0SWRlbnRpdHlQcmluY2lwYWxPcmdJZCgpIHtcbiAgICByZXR1cm4gXCIkY29udGV4dC5pZGVudGl0eS5wcmluY2lwYWxPcmdJZFwiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzb3VyY2UgSVAgYWRkcmVzcyBvZiB0aGUgVENQIGNvbm5lY3Rpb24gbWFraW5nIHRoZSByZXF1ZXN0IHRvIEFQSSBHYXRld2F5LlxuICAgKiBXYXJuaW5nOiBZb3Ugc2hvdWxkIG5vdCB0cnVzdCB0aGlzIHZhbHVlIGlmIHRoZXJlIGlzIGFueSBjaGFuY2UgdGhhdCB0aGUgYFgtRm9yd2FyZGVkLUZvcmAgaGVhZGVyIGNvdWxkIGJlIGZvcmdlZC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dElkZW50aXR5U291cmNlSXAoKSB7XG4gICAgcmV0dXJuIFwiJGNvbnRleHQuaWRlbnRpdHkuc291cmNlSXBcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgUEVNLWVuY29kZWQgY2xpZW50IGNlcnRpZmljYXRlIHRoYXQgdGhlIGNsaWVudCBwcmVzZW50ZWQgZHVyaW5nIG11dHVhbCBUTFMgYXV0aGVudGljYXRpb24uXG4gICAqIFByZXNlbnQgd2hlbiBhIGNsaWVudCBhY2Nlc3NlcyBhbiBBUEkgYnkgdXNpbmcgYSBjdXN0b20gZG9tYWluIG5hbWUgdGhhdCBoYXMgbXV0dWFsIFRMUyBlbmFibGVkLlxuICAgKiBQcmVzZW50IG9ubHkgaW4gYWNjZXNzIGxvZ3MgaWYgbXV0dWFsIFRMUyBhdXRoZW50aWNhdGlvbiBmYWlscy5cbiAgICovXG5cbiAgcHVibGljIHN0YXRpYyBjb250ZXh0SWRlbnRpdHlDbGllbnRDZXJ0UGVtKCkge1xuICAgIHJldHVybiBcIiRjb250ZXh0LmlkZW50aXR5LmNsaWVudENlcnQuY2xpZW50Q2VydFBlbVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBkaXN0aW5ndWlzaGVkIG5hbWUgb2YgdGhlIHN1YmplY3Qgb2YgdGhlIGNlcnRpZmljYXRlIHRoYXQgYSBjbGllbnQgcHJlc2VudHMuXG4gICAqIFByZXNlbnQgd2hlbiBhIGNsaWVudCBhY2Nlc3NlcyBhbiBBUEkgYnkgdXNpbmcgYSBjdXN0b20gZG9tYWluIG5hbWUgdGhhdCBoYXMgbXV0dWFsIFRMUyBlbmFibGVkLlxuICAgKiBQcmVzZW50IG9ubHkgaW4gYWNjZXNzIGxvZ3MgaWYgbXV0dWFsIFRMUyBhdXRoZW50aWNhdGlvbiBmYWlscy5cbiAgICovXG5cbiAgcHVibGljIHN0YXRpYyBjb250ZXh0SWRlbnRpdHlDbGllbnRDZXJ0U3ViamVjdEROKCkge1xuICAgIHJldHVybiBcIiRjb250ZXh0LmlkZW50aXR5LmNsaWVudENlcnQuc3ViamVjdEROXCI7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGRpc3Rpbmd1aXNoZWQgbmFtZSBvZiB0aGUgaXNzdWVyIG9mIHRoZSBjZXJ0aWZpY2F0ZSB0aGF0IGEgY2xpZW50IHByZXNlbnRzLlxuICAgKiBQcmVzZW50IHdoZW4gYSBjbGllbnQgYWNjZXNzZXMgYW4gQVBJIGJ5IHVzaW5nIGEgY3VzdG9tIGRvbWFpbiBuYW1lIHRoYXQgaGFzIG11dHVhbCBUTFMgZW5hYmxlZC5cbiAgICogUHJlc2VudCBvbmx5IGluIGFjY2VzcyBsb2dzIGlmIG11dHVhbCBUTFMgYXV0aGVudGljYXRpb24gZmFpbHMuXG4gICAqL1xuXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dElkZW50aXR5Q2xpZW50Q2VydElzc3VuZXJETigpIHtcbiAgICByZXR1cm4gXCIkY29udGV4dC5pZGVudGl0eS5jbGllbnRDZXJ0Lmlzc3VlckROXCI7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHNlcmlhbCBudW1iZXIgb2YgdGhlIGNlcnRpZmljYXRlLlxuICAgKiBQcmVzZW50IHdoZW4gYSBjbGllbnQgYWNjZXNzZXMgYW4gQVBJIGJ5IHVzaW5nIGEgY3VzdG9tIGRvbWFpbiBuYW1lIHRoYXQgaGFzIG11dHVhbCBUTFMgZW5hYmxlZC5cbiAgICogUHJlc2VudCBvbmx5IGluIGFjY2VzcyBsb2dzIGlmIG11dHVhbCBUTFMgYXV0aGVudGljYXRpb24gZmFpbHMuXG4gICAqL1xuXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dElkZW50aXR5Q2xpZW50Q2VydFNlcmlhbE51bWJlcigpIHtcbiAgICByZXR1cm4gXCIkY29udGV4dC5pZGVudGl0eS5jbGllbnRDZXJ0LnNlcmlhbE51bWJlclwiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBkYXRlIGJlZm9yZSB3aGljaCB0aGUgY2VydGlmaWNhdGUgaXMgaW52YWxpZC5cbiAgICogUHJlc2VudCB3aGVuIGEgY2xpZW50IGFjY2Vzc2VzIGFuIEFQSSBieSB1c2luZyBhIGN1c3RvbSBkb21haW4gbmFtZSB0aGF0IGhhcyBtdXR1YWwgVExTIGVuYWJsZWQuXG4gICAqIFByZXNlbnQgb25seSBpbiBhY2Nlc3MgbG9ncyBpZiBtdXR1YWwgVExTIGF1dGhlbnRpY2F0aW9uIGZhaWxzLlxuICAgKi9cblxuICBwdWJsaWMgc3RhdGljIGNvbnRleHRJZGVudGl0eUNsaWVudENlcnRWYWxpZGl0eU5vdEJlZm9yZSgpIHtcbiAgICByZXR1cm4gXCIkY29udGV4dC5pZGVudGl0eS5jbGllbnRDZXJ0LnZhbGlkaXR5Lm5vdEJlZm9yZVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBkYXRlIGFmdGVyIHdoaWNoIHRoZSBjZXJ0aWZpY2F0ZSBpcyBpbnZhbGlkLlxuICAgKiBQcmVzZW50IHdoZW4gYSBjbGllbnQgYWNjZXNzZXMgYW4gQVBJIGJ5IHVzaW5nIGEgY3VzdG9tIGRvbWFpbiBuYW1lIHRoYXQgaGFzIG11dHVhbCBUTFMgZW5hYmxlZC5cbiAgICogUHJlc2VudCBvbmx5IGluIGFjY2VzcyBsb2dzIGlmIG11dHVhbCBUTFMgYXV0aGVudGljYXRpb24gZmFpbHMuXG4gICAqL1xuXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dElkZW50aXR5Q2xpZW50Q2VydFZhbGlkaXR5Tm90QWZ0ZXIoKSB7XG4gICAgcmV0dXJuIFwiJGNvbnRleHQuaWRlbnRpdHkuY2xpZW50Q2VydC52YWxpZGl0eS5ub3RBZnRlclwiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBwcmluY2lwYWwgaWRlbnRpZmllciBvZiB0aGUgdXNlciBtYWtpbmcgdGhlIHJlcXVlc3QuIFVzZWQgaW4gTGFtYmRhIGF1dGhvcml6ZXJzLlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9hcGktZ2F0ZXdheS1sYW1iZGEtYXV0aG9yaXplci1vdXRwdXQuaHRtbFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjb250ZXh0SWRlbnRpdHlVc2VyKCkge1xuICAgIHJldHVybiBcIiRjb250ZXh0LmlkZW50aXR5LnVzZXJcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgVXNlci1BZ2VudCBoZWFkZXIgb2YgdGhlIEFQSSBjYWxsZXIuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRJZGVudGl0eVVzZXJBZ2VudCgpIHtcbiAgICByZXR1cm4gXCIkY29udGV4dC5pZGVudGl0eS51c2VyQWdlbnRcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIGVmZmVjdGl2ZSB1c2VyIGlkZW50aWZpZWQgYWZ0ZXIgYXV0aGVudGljYXRpb24uXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL2lkX3VzZXJzLmh0bWxcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dElkZW50aXR5VXNlckFybigpIHtcbiAgICByZXR1cm4gXCIkY29udGV4dC5pZGVudGl0eS51c2VyQXJuXCI7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJlcXVlc3QgcGF0aC5cbiAgICogRm9yIGV4YW1wbGUsIGZvciBhIG5vbi1wcm94eSByZXF1ZXN0IFVSTCBvZiBodHRwczovL3tyZXN0LWFwaS1pZC5leGVjdXRlLWFwaS57cmVnaW9ufS5hbWF6b25hd3MuY29tL3tzdGFnZX0vcm9vdC9jaGlsZCxcbiAgICogdGhpcyB2YWx1ZSBpcyAve3N0YWdlfS9yb290L2NoaWxkLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjb250ZXh0UGF0aCgpIHtcbiAgICByZXR1cm4gXCIkY29udGV4dC5wYXRoXCI7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJlcXVlc3QgcHJvdG9jb2wsIGZvciBleGFtcGxlLCBIVFRQLzEuMS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dFByb3RvY29sKCkge1xuICAgIHJldHVybiBcIiRjb250ZXh0LnByb3RvY29sXCI7XG4gIH1cblxuICAvKipcbiAgICogVGhlIElEIHRoYXQgQVBJIEdhdGV3YXkgYXNzaWducyB0byB0aGUgQVBJIHJlcXVlc3QuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRSZXF1ZXN0SWQoKSB7XG4gICAgcmV0dXJuIFwiJGNvbnRleHQucmVxdWVzdElkXCI7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJlcXVlc3QgaGVhZGVyIG92ZXJyaWRlLlxuICAgKiBJZiB0aGlzIHBhcmFtZXRlciBpcyBkZWZpbmVkLCBpdCBjb250YWlucyB0aGUgaGVhZGVycyB0byBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIEhUVFAgSGVhZGVycyB0aGF0IGFyZSBkZWZpbmVkIGluIHRoZSBJbnRlZ3JhdGlvbiBSZXF1ZXN0IHBhbmUuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2FwaWdhdGV3YXktb3ZlcnJpZGUtcmVxdWVzdC1yZXNwb25zZS1wYXJhbWV0ZXJzLmh0bWxcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dFJlcXVlc3RPdmVycmlkZUhlYWRlcihoZWFkZXJOYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYCRjb250ZXh0LnJlcXVlc3RPdmVycmlkZS5oZWFkZXIuJHtoZWFkZXJOYW1lfWA7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJlcXVlc3QgcGF0aCBvdmVycmlkZS4gSWYgdGhpcyBwYXJhbWV0ZXIgaXMgZGVmaW5lZCxcbiAgICogaXQgY29udGFpbnMgdGhlIHJlcXVlc3QgcGF0aCB0byBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIFVSTCBQYXRoIFBhcmFtZXRlcnMgdGhhdCBhcmUgZGVmaW5lZCBpbiB0aGUgSW50ZWdyYXRpb24gUmVxdWVzdCBwYW5lLlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9hcGlnYXRld2F5LW92ZXJyaWRlLXJlcXVlc3QtcmVzcG9uc2UtcGFyYW1ldGVycy5odG1sXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRSZXF1ZXN0T3ZlcnJpZGVQYXRoKHBhdGhOYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYCRjb250ZXh0LnJlcXVlc3RPdmVycmlkZS5wYXRoLiR7cGF0aE5hbWV9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcmVxdWVzdCBxdWVyeSBzdHJpbmcgb3ZlcnJpZGUuXG4gICAqIElmIHRoaXMgcGFyYW1ldGVyIGlzIGRlZmluZWQsIGl0IGNvbnRhaW5zIHRoZSByZXF1ZXN0IHF1ZXJ5IHN0cmluZ3MgdG8gYmUgdXNlZCBpbnN0ZWFkXG4gICAqIG9mIHRoZSBVUkwgUXVlcnkgU3RyaW5nIFBhcmFtZXRlcnMgdGhhdCBhcmUgZGVmaW5lZCBpbiB0aGUgSW50ZWdyYXRpb24gUmVxdWVzdCBwYW5lLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjb250ZXh0UmVxdWVzdE92ZXJyaWRlUXVlcnlzdHJpbmcocXVlcnlzdHJpbmdOYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYCRjb250ZXh0LnJlcXVlc3RPdmVycmlkZS5xdWVyeXN0cmluZy4ke3F1ZXJ5c3RyaW5nTmFtZX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByZXNwb25zZSBoZWFkZXIgb3ZlcnJpZGUuXG4gICAqIElmIHRoaXMgcGFyYW1ldGVyIGlzIGRlZmluZWQsIGl0IGNvbnRhaW5zIHRoZSBoZWFkZXIgdG8gYmUgcmV0dXJuZWQgaW5zdGVhZCBvZiB0aGUgUmVzcG9uc2UgaGVhZGVyXG4gICAqIHRoYXQgaXMgZGVmaW5lZCBhcyB0aGUgRGVmYXVsdCBtYXBwaW5nIGluIHRoZSBJbnRlZ3JhdGlvbiBSZXNwb25zZSBwYW5lLlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9hcGlnYXRld2F5LW92ZXJyaWRlLXJlcXVlc3QtcmVzcG9uc2UtcGFyYW1ldGVycy5odG1sXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRSZXNwb25zZU92ZXJyaWRlSGVhZGVyKGhlYWRlck5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBgJGNvbnRleHQucmVzcG9uc2VPdmVycmlkZS5oZWFkZXIuJHtoZWFkZXJOYW1lfWA7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJlc3BvbnNlIHN0YXR1cyBjb2RlIG92ZXJyaWRlLlxuICAgKiBJZiB0aGlzIHBhcmFtZXRlciBpcyBkZWZpbmVkLCBpdCBjb250YWlucyB0aGUgc3RhdHVzIGNvZGUgdG8gYmUgcmV0dXJuZWQgaW5zdGVhZCBvZiB0aGUgTWV0aG9kIHJlc3BvbnNlIHN0YXR1c1xuICAgKiB0aGF0IGlzIGRlZmluZWQgYXMgdGhlIERlZmF1bHQgbWFwcGluZyBpbiB0aGUgSW50ZWdyYXRpb24gUmVzcG9uc2UgcGFuZS5cbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvYXBpZ2F0ZXdheS1vdmVycmlkZS1yZXF1ZXN0LXJlc3BvbnNlLXBhcmFtZXRlcnMuaHRtbFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjb250ZXh0UmVzcG9uc2VPdmVycmlkZVN0YXR1cygpIHtcbiAgICByZXR1cm4gXCIkY29udGV4dC5yZXNwb25zZU92ZXJyaWRlLnN0YXR1c1wiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBDTEYtZm9ybWF0dGVkIHJlcXVlc3QgdGltZSAoZGQvTU1NL3l5eXk6SEg6bW06c3MgKy1oaG1tKS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dFJlcXVlc3RUaW1lKCkge1xuICAgIHJldHVybiBcIiRjb250ZXh0LnJlcXVlc3RUaW1lXCI7XG4gIH1cblxuICAvKipcbiAgICogVGhlIEVwb2NoLWZvcm1hdHRlZCByZXF1ZXN0IHRpbWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRSZXF1ZXN0VGltZUVwb2NoKCkge1xuICAgIHJldHVybiBcIiRjb250ZXh0LnJlcXVlc3RUaW1lRXBvY2hcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgaWRlbnRpZmllciB0aGF0IEFQSSBHYXRld2F5IGFzc2lnbnMgdG8geW91ciByZXNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dFJlc291cmNlSWQoKSB7XG4gICAgcmV0dXJuIFwiJGNvbnRleHQucmVzb3VyY2VJZFwiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIHRvIHlvdXIgcmVzb3VyY2UuXG4gICAqIEZvciBleGFtcGxlLCBmb3IgdGhlIG5vbi1wcm94eSByZXF1ZXN0IFVSSSBvZiBgaHR0cHM6Ly97cmVzdC1hcGktaWQuZXhlY3V0ZS1hcGkue3JlZ2lvbn0uYW1hem9uYXdzLmNvbS97c3RhZ2V9L3Jvb3QvY2hpbGRgLFxuICAgKiBUaGUgJGNvbnRleHQucmVzb3VyY2VQYXRoIHZhbHVlIGlzIGAvcm9vdC9jaGlsZGAuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2FwaS1nYXRld2F5LWNyZWF0ZS1hcGktc3RlcC1ieS1zdGVwLmh0bWxcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dFJlc291cmNlUGF0aCgpIHtcbiAgICByZXR1cm4gXCIkY29udGV4dC5yZXNvdXJjZVBhdGhcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZGVwbG95bWVudCBzdGFnZSBvZiB0aGUgQVBJIHJlcXVlc3QgKGZvciBleGFtcGxlLCBgQmV0YWAgb3IgYFByb2RgKS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dFN0YWdlKCkge1xuICAgIHJldHVybiBcIiRjb250ZXh0LnN0YWdlXCI7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJlc3BvbnNlIHJlY2VpdmVkIGZyb20gQVdTIFdBRjogYFdBRl9BTExPV2Agb3IgYFdBRl9CTE9DS2AuIFdpbGwgbm90IGJlIHNldCBpZiB0aGUgc3RhZ2UgaXMgbm90IGFzc29jaWF0ZWQgd2l0aCBhIHdlYiBBQ0wuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2FwaWdhdGV3YXktY29udHJvbC1hY2Nlc3MtYXdzLXdhZi5odG1sXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRXYWZSZXNwb25zZUNvZGUoKSB7XG4gICAgcmV0dXJuIFwiJGNvbnRleHQud2FmUmVzcG9uc2VDb2RlXCI7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGNvbXBsZXRlIEFSTiBvZiB0aGUgd2ViIEFDTCB0aGF0IGlzIHVzZWQgdG8gZGVjaWRlIHdoZXRoZXIgdG8gYWxsb3cgb3IgYmxvY2sgdGhlIHJlcXVlc3QuXG4gICAqIFdpbGwgbm90IGJlIHNldCBpZiB0aGUgc3RhZ2UgaXMgbm90IGFzc29jaWF0ZWQgd2l0aCBhIHdlYiBBQ0wuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2FwaWdhdGV3YXktY29udHJvbC1hY2Nlc3MtYXdzLXdhZi5odG1sXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRXZWJhY2xBcm4oKSB7XG4gICAgcmV0dXJuIFwiJGNvbnRleHQud2ViYWNsQXJuXCI7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHRyYWNlIElEIGZvciB0aGUgWC1SYXkgdHJhY2UuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2FwaWdhdGV3YXktZW5hYmxpbmcteHJheS5odG1sXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRYcmF5VHJhY2VJZCgpIHtcbiAgICByZXR1cm4gXCIkY29udGV4dC54cmF5VHJhY2VJZFwiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBhdXRob3JpemVyIGxhdGVuY3kgaW4gbXMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRBdXRob3JpemVySW50ZWdyYXRpb25MYXRlbmN5KCkge1xuICAgIHJldHVybiBcIiRjb250ZXh0LmF1dGhvcml6ZXIuaW50ZWdyYXRpb25MYXRlbmN5XCI7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGludGVncmF0aW9uIGxhdGVuY3kgaW4gbXMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRJbnRlZ3JhdGlvbkxhdGVuY3koKSB7XG4gICAgcmV0dXJuIFwiJGNvbnRleHQuaW50ZWdyYXRpb25MYXRlbmN5XCI7XG4gIH1cblxuICAvKipcbiAgICogRm9yIExhbWJkYSBwcm94eSBpbnRlZ3JhdGlvbiwgdGhpcyBwYXJhbWV0ZXIgcmVwcmVzZW50cyB0aGUgc3RhdHVzIGNvZGUgcmV0dXJuZWQgZnJvbSBBV1MgTGFtYmRhLFxuICAgKiBub3QgZnJvbSB0aGUgYmFja2VuZCBMYW1iZGEgZnVuY3Rpb24uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRJbnRlZ3JhdGlvblN0YXR1cygpIHtcbiAgICByZXR1cm4gXCIkY29udGV4dC5pbnRlZ3JhdGlvblN0YXR1c1wiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByZXNwb25zZSBsYXRlbmN5IGluIG1zLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjb250ZXh0UmVzcG9uc2VMYXRlbmN5KCkge1xuICAgIHJldHVybiBcIiRjb250ZXh0LnJlc3BvbnNlTGF0ZW5jeVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByZXNwb25zZSBwYXlsb2FkIGxlbmd0aC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dFJlc3BvbnNlTGVuZ3RoKCkge1xuICAgIHJldHVybiBcIiRjb250ZXh0LnJlc3BvbnNlTGVuZ3RoXCI7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG1ldGhvZCByZXNwb25zZSBzdGF0dXMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRTdGF0dXMoKSB7XG4gICAgcmV0dXJuIFwiJGNvbnRleHQuc3RhdHVzXCI7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGF1dGhvcml6YXRpb24gZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dEF1dGhvcml6ZUVycm9yKCkge1xuICAgIHJldHVybiBcIiRjb250ZXh0LmF1dGhvcml6ZS5lcnJvclwiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBhdXRob3JpemF0aW9uIGxhdGVuY3kgaW4gbXMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRBdXRob3JpemVMYXRlbmN5KCkge1xuICAgIHJldHVybiBcIiRjb250ZXh0LmF1dGhvcml6ZS5sYXRlbmN5XCI7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHN0YXR1cyBjb2RlIHJldHVybmVkIGZyb20gYW4gYXV0aG9yaXphdGlvbiBhdHRlbXB0LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjb250ZXh0QXV0aG9yaXplU3RhdHVzKCkge1xuICAgIHJldHVybiBcIiRjb250ZXh0LmF1dGhvcml6ZS5zdGF0dXNcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZXJyb3IgbWVzc2FnZSByZXR1cm5lZCBmcm9tIGFuIGF1dGhvcml6ZXIuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRBdXRob3JpemVyRXJyb3IoKSB7XG4gICAgcmV0dXJuIFwiJGNvbnRleHQuYXV0aG9yaXplci5lcnJvclwiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzdGF0dXMgY29kZSByZXR1cm5lZCBmcm9tIGEgTGFtYmRhIGF1dGhvcml6ZXIuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRBdXRob3JpemVySW50ZWdyYXRpb25TdGF0dXMoKSB7XG4gICAgcmV0dXJuIFwiJGNvbnRleHQuYXV0aG9yaXplci5pbnRlZ3JhdGlvblN0YXR1c1wiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBhdXRob3JpemVyIGxhdGVuY3kgaW4gbXMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRBdXRob3JpemVyTGF0ZW5jeSgpIHtcbiAgICByZXR1cm4gXCIkY29udGV4dC5hdXRob3JpemVyLmxhdGVuY3lcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgQVdTIGVuZHBvaW50J3MgcmVxdWVzdCBJRC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dEF1dGhvcml6ZXJSZXF1ZXN0SWQoKSB7XG4gICAgcmV0dXJuIFwiJGNvbnRleHQuYXV0aG9yaXplci5yZXF1ZXN0SWRcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgc3RhdHVzIGNvZGUgcmV0dXJuZWQgZnJvbSBhbiBhdXRob3JpemVyLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjb250ZXh0QXV0aG9yaXplclN0YXR1cygpIHtcbiAgICByZXR1cm4gXCIkY29udGV4dC5hdXRob3JpemVyLnN0YXR1c1wiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBlcnJvciBtZXNzYWdlIHJldHVybmVkIGZyb20gYW4gYXV0aGVudGljYXRpb24gYXR0ZW1wdC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dEF1dGhlbnRpY2F0ZUVycm9yKCkge1xuICAgIHJldHVybiBcIiRjb250ZXh0LmF1dGhlbnRpY2F0ZS5lcnJvclwiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBhdXRoZW50aWNhdGlvbiBsYXRlbmN5IGluIG1zLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjb250ZXh0QXV0aGVudGljYXRlTGF0ZW5jeSgpIHtcbiAgICByZXR1cm4gXCIkY29udGV4dC5hdXRoZW50aWNhdGUubGF0ZW5jeVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzdGF0dXMgY29kZSByZXR1cm5lZCBmcm9tIGFuIGF1dGhlbnRpY2F0aW9uIGF0dGVtcHQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRBdXRoZW50aWNhdGVTdGF0dXMoKSB7XG4gICAgcmV0dXJuIFwiJGNvbnRleHQuYXV0aGVudGljYXRlLnN0YXR1c1wiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIGZvciBhbiBBUEkgbWFwcGluZyB0aGF0IGFuIGluY29taW5nIHJlcXVlc3QgbWF0Y2hlZC5cbiAgICogQXBwbGljYWJsZSB3aGVuIGEgY2xpZW50IHVzZXMgYSBjdXN0b20gZG9tYWluIG5hbWUgdG8gYWNjZXNzIGFuIEFQSS4gRm9yIGV4YW1wbGUgaWYgYSBjbGllbnQgc2VuZHMgYSByZXF1ZXN0IHRvXG4gICAqIGh0dHBzOi8vYXBpLmV4YW1wbGUuY29tL3YxL29yZGVycy8xMjM0LCBhbmQgdGhlIHJlcXVlc3QgbWF0Y2hlcyB0aGUgQVBJIG1hcHBpbmcgd2l0aCB0aGUgcGF0aCB2MS9vcmRlcnMsIHRoZSB2YWx1ZSBpcyB2MS9vcmRlcnMuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VuX2pwL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3Jlc3QtYXBpLW1hcHBpbmdzLmh0bWxcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dEN1c3RvbURvbWFpbkJhc2VQYXRoTWF0Y2hlZCgpIHtcbiAgICByZXR1cm4gXCIkY29udGV4dC5jdXN0b21Eb21haW4uYmFzZVBhdGhNYXRjaGVkXCI7XG4gIH1cblxuICAvKipcbiAgICogQSBzdHJpbmcgdGhhdCBjb250YWlucyBhbiBpbnRlZ3JhdGlvbiBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjb250ZXh0SW50ZWdyYXRpb25FcnJvck1lc3NhZ2UoKSB7XG4gICAgcmV0dXJuIFwiJGNvbnRleHQuaW50ZWdyYXRpb25FcnJvck1lc3NhZ2VcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZXJyb3IgbWVzc2FnZSByZXR1cm5lZCBmcm9tIEFXUyBXQUYuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRXYWZFcnJvcigpIHtcbiAgICByZXR1cm4gXCIkY29udGV4dC53YWYuZXJyb3JcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgQVdTIFdBRiBsYXRlbmN5IGluIG1zLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjb250ZXh0V2FmTGF0ZW5jeSgpIHtcbiAgICByZXR1cm4gXCIkY29udGV4dC53YWYubGF0ZW5jeVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzdGF0dXMgY29kZSByZXR1cm5lZCBmcm9tIEFXUyBXQUYuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRXYWZTdGF0dXMoKSB7XG4gICAgcmV0dXJuIFwiJGNvbnRleHQud2FmLnN0YXR1c1wiO1xuICB9XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgY29udHJvbGxpbmcgaXRlbXMgb3V0cHV0IGluIEpTT04gc3RhbmRhcmQgZm9ybWF0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSnNvbldpdGhTdGFuZGFyZEZpZWxkUHJvcHMge1xuICAvKipcbiAgICogSWYgdGhpcyBmbGFnIGlzIGVuYWJsZWQsIHRoZSBzb3VyY2UgSVAgb2YgcmVxdWVzdCB3aWxsIGJlIG91dHB1dCB0byB0aGUgbG9nXG4gICAqL1xuICByZWFkb25seSBpcDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIElmIHRoaXMgZmxhZyBpcyBlbmFibGVkLCB0aGUgcHJpbmNpcGFsIGlkZW50aWZpZXIgb2YgdGhlIGNhbGxlciB3aWxsIGJlIG91dHB1dCB0byB0aGUgbG9nXG4gICAqL1xuICByZWFkb25seSBjYWxsZXI6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBJZiB0aGlzIGZsYWcgaXMgZW5hYmxlZCwgdGhlIHByaW5jaXBhbCBpZGVudGlmaWVyIG9mIHRoZSB1c2VyIHdpbGwgYmUgb3V0cHV0IHRvIHRoZSBsb2dcbiAgICovXG4gIHJlYWRvbmx5IHVzZXI6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBJZiB0aGlzIGZsYWcgaXMgZW5hYmxlZCwgdGhlIENMRi1mb3JtYXR0ZWQgcmVxdWVzdCB0aW1lKChkZC9NTU0veXl5eTpISDptbTpzcyArLWhobW0pIHdpbGwgYmUgb3V0cHV0IHRvIHRoZSBsb2dcbiAgICovXG4gIHJlYWRvbmx5IHJlcXVlc3RUaW1lOiBib29sZWFuO1xuICAvKipcbiAgICogSWYgdGhpcyBmbGFnIGlzIGVuYWJsZWQsIHRoZSBodHRwIG1ldGhvZCB3aWxsIGJlIG91dHB1dCB0byB0aGUgbG9nXG4gICAqL1xuICByZWFkb25seSBodHRwTWV0aG9kOiBib29sZWFuO1xuICAvKipcbiAgICogSWYgdGhpcyBmbGFnIGlzIGVuYWJsZWQsIHRoZSBwYXRoIHRvIHlvdXIgcmVzb3VyY2Ugd2lsbCBiZSBvdXRwdXQgdG8gdGhlIGxvZ1xuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VQYXRoOiBib29sZWFuO1xuICAvKipcbiAgICogSWYgdGhpcyBmbGFnIGlzIGVuYWJsZWQsIHRoZSBtZXRob2QgcmVzcG9uc2Ugc3RhdHVzIHdpbGwgYmUgb3V0cHV0IHRvIHRoZSBsb2dcbiAgICovXG4gIHJlYWRvbmx5IHN0YXR1czogYm9vbGVhbjtcbiAgLyoqXG4gICAqIElmIHRoaXMgZmxhZyBpcyBlbmFibGVkLCB0aGUgcmVxdWVzdCBwcm90b2NvbCB3aWxsIGJlIG91dHB1dCB0byB0aGUgbG9nXG4gICAqL1xuICByZWFkb25seSBwcm90b2NvbDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIElmIHRoaXMgZmxhZyBpcyBlbmFibGVkLCB0aGUgcmVzcG9uc2UgcGF5bG9hZCBsZW5ndGggd2lsbCBiZSBvdXRwdXQgdG8gdGhlIGxvZ1xuICAgKi9cbiAgcmVhZG9ubHkgcmVzcG9uc2VMZW5ndGg6IGJvb2xlYW47XG59XG5cbi8qKlxuICogZmFjdG9yeSBtZXRob2RzIGZvciBhY2Nlc3MgbG9nIGZvcm1hdC5cbiAqL1xuZXhwb3J0IGNsYXNzIEFjY2Vzc0xvZ0Zvcm1hdCB7XG4gIC8qKlxuICAgKiBDdXN0b20gbG9nIGZvcm1hdC5cbiAgICogWW91IGNhbiBjcmVhdGUgYW55IGxvZyBmb3JtYXQgc3RyaW5nLiBZb3UgY2FuIGVhc2lseSBnZXQgdGhlICQgY29udGV4dCB2YXJpYWJsZSBieSB1c2luZyB0aGUgbWV0aG9kcyBvZiBBY2Nlc3NMb2dGaWVsZC5cbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogIGFwaWdhdGV3YXkuQWNjZXNzTG9nRm9ybWF0LmN1c3RvbShKU09OLnN0cmluZ2lmeSh7XG4gICAqICAgICAgcmVxdWVzdElkOiBhcGlnYXRld2F5LkFjY2Vzc0xvZ0ZpZWxkLmNvbnRleHRSZXF1ZXN0SWQoKSxcbiAgICogICAgICBzb3VyY2VJcDogYXBpZ2F0ZXdheS5BY2Nlc3NMb2dGaWVsZC5jb250ZXh0SWRlbnRpdHlTb3VyY2VJcCgpLFxuICAgKiAgICAgIG1ldGhvZDogYXBpZ2F0ZXdheS5BY2Nlc3NMb2dGaWVsZC5jb250ZXh0SHR0cE1ldGhvZCgpLFxuICAgKiAgICAgIHVzZXJDb250ZXh0OiB7XG4gICAqICAgICAgICBzdWI6IGFwaWdhdGV3YXkuQWNjZXNzTG9nRmllbGQuY29udGV4dEF1dGhvcml6ZXJDbGFpbXMoJ3N1YicpLFxuICAgKiAgICAgICAgZW1haWw6IGFwaWdhdGV3YXkuQWNjZXNzTG9nRmllbGQuY29udGV4dEF1dGhvcml6ZXJDbGFpbXMoJ2VtYWlsJylcbiAgICogICAgICB9XG4gICAqICAgfSkpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGN1c3RvbShmb3JtYXQ6IHN0cmluZyk6IEFjY2Vzc0xvZ0Zvcm1hdCB7XG4gICAgcmV0dXJuIG5ldyBBY2Nlc3NMb2dGb3JtYXQoZm9ybWF0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBDb21tb24gTG9nIEZvcm1hdC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY2xmKCk6IEFjY2Vzc0xvZ0Zvcm1hdCB7XG4gICAgY29uc3QgcmVxdWVzdGVyID0gW1xuICAgICAgQWNjZXNzTG9nRmllbGQuY29udGV4dElkZW50aXR5U291cmNlSXAoKSxcbiAgICAgIEFjY2Vzc0xvZ0ZpZWxkLmNvbnRleHRJZGVudGl0eUNhbGxlcigpLFxuICAgICAgQWNjZXNzTG9nRmllbGQuY29udGV4dElkZW50aXR5VXNlcigpLFxuICAgIF0uam9pbihcIiBcIik7XG4gICAgY29uc3QgcmVxdWVzdFRpbWUgPSBBY2Nlc3NMb2dGaWVsZC5jb250ZXh0UmVxdWVzdFRpbWUoKTtcbiAgICBjb25zdCByZXF1ZXN0ID0gW1xuICAgICAgQWNjZXNzTG9nRmllbGQuY29udGV4dEh0dHBNZXRob2QoKSxcbiAgICAgIEFjY2Vzc0xvZ0ZpZWxkLmNvbnRleHRSZXNvdXJjZVBhdGgoKSxcbiAgICAgIEFjY2Vzc0xvZ0ZpZWxkLmNvbnRleHRQcm90b2NvbCgpLFxuICAgIF0uam9pbihcIiBcIik7XG4gICAgY29uc3Qgc3RhdHVzID0gW1xuICAgICAgQWNjZXNzTG9nRmllbGQuY29udGV4dFN0YXR1cygpLFxuICAgICAgQWNjZXNzTG9nRmllbGQuY29udGV4dFJlc3BvbnNlTGVuZ3RoKCksXG4gICAgICBBY2Nlc3NMb2dGaWVsZC5jb250ZXh0UmVxdWVzdElkKCksXG4gICAgXS5qb2luKFwiIFwiKTtcblxuICAgIHJldHVybiBuZXcgQWNjZXNzTG9nRm9ybWF0KFxuICAgICAgYCR7cmVxdWVzdGVyfSBbJHtyZXF1ZXN0VGltZX1dIFwiJHtyZXF1ZXN0fVwiICR7c3RhdHVzfWAsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY2Nlc3MgbG9nIHdpbGwgYmUgcHJvZHVjZWQgaW4gdGhlIEpTT04gZm9ybWF0IHdpdGggYSBzZXQgb2YgZmllbGRzIG1vc3QgdXNlZnVsIGluIHRoZSBhY2Nlc3MgbG9nLiBBbGwgZmllbGRzIGFyZSB0dXJuZWQgb24gYnkgZGVmYXVsdCB3aXRoIHRoZVxuICAgKiBvcHRpb24gdG8gdHVybiBvZmYgc3BlY2lmaWMgZmllbGRzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBqc29uV2l0aFN0YW5kYXJkRmllbGRzKFxuICAgIGZpZWxkczogSnNvbldpdGhTdGFuZGFyZEZpZWxkUHJvcHMgPSB7XG4gICAgICBpcDogdHJ1ZSxcbiAgICAgIHVzZXI6IHRydWUsXG4gICAgICBjYWxsZXI6IHRydWUsXG4gICAgICByZXF1ZXN0VGltZTogdHJ1ZSxcbiAgICAgIGh0dHBNZXRob2Q6IHRydWUsXG4gICAgICByZXNvdXJjZVBhdGg6IHRydWUsXG4gICAgICBzdGF0dXM6IHRydWUsXG4gICAgICBwcm90b2NvbDogdHJ1ZSxcbiAgICAgIHJlc3BvbnNlTGVuZ3RoOiB0cnVlLFxuICAgIH0sXG4gICk6IEFjY2Vzc0xvZ0Zvcm1hdCB7XG4gICAgcmV0dXJuIHRoaXMuY3VzdG9tKFxuICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICByZXF1ZXN0SWQ6IEFjY2Vzc0xvZ0ZpZWxkLmNvbnRleHRSZXF1ZXN0SWQoKSxcbiAgICAgICAgaXA6IGZpZWxkcy5pcCA/IEFjY2Vzc0xvZ0ZpZWxkLmNvbnRleHRJZGVudGl0eVNvdXJjZUlwKCkgOiB1bmRlZmluZWQsXG4gICAgICAgIHVzZXI6IGZpZWxkcy51c2VyID8gQWNjZXNzTG9nRmllbGQuY29udGV4dElkZW50aXR5VXNlcigpIDogdW5kZWZpbmVkLFxuICAgICAgICBjYWxsZXI6IGZpZWxkcy5jYWxsZXJcbiAgICAgICAgICA/IEFjY2Vzc0xvZ0ZpZWxkLmNvbnRleHRJZGVudGl0eUNhbGxlcigpXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIHJlcXVlc3RUaW1lOiBmaWVsZHMucmVxdWVzdFRpbWVcbiAgICAgICAgICA/IEFjY2Vzc0xvZ0ZpZWxkLmNvbnRleHRSZXF1ZXN0VGltZSgpXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGh0dHBNZXRob2Q6IGZpZWxkcy5odHRwTWV0aG9kXG4gICAgICAgICAgPyBBY2Nlc3NMb2dGaWVsZC5jb250ZXh0SHR0cE1ldGhvZCgpXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIHJlc291cmNlUGF0aDogZmllbGRzLnJlc291cmNlUGF0aFxuICAgICAgICAgID8gQWNjZXNzTG9nRmllbGQuY29udGV4dFJlc291cmNlUGF0aCgpXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIHN0YXR1czogZmllbGRzLnN0YXR1cyA/IEFjY2Vzc0xvZ0ZpZWxkLmNvbnRleHRTdGF0dXMoKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgcHJvdG9jb2w6IGZpZWxkcy5wcm90b2NvbFxuICAgICAgICAgID8gQWNjZXNzTG9nRmllbGQuY29udGV4dFByb3RvY29sKClcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgcmVzcG9uc2VMZW5ndGg6IGZpZWxkcy5yZXNwb25zZUxlbmd0aFxuICAgICAgICAgID8gQWNjZXNzTG9nRmllbGQuY29udGV4dFJlc3BvbnNlTGVuZ3RoKClcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQSBBUEkgR2F0ZXdheSBjdXN0b20gYWNjZXNzIGxvZyBmb3JtYXRcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgZm9ybWF0OiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcihmb3JtYXQ6IHN0cmluZykge1xuICAgIHRoaXMuZm9ybWF0ID0gZm9ybWF0O1xuICB9XG5cbiAgLyoqXG4gICAqIE91dHB1dCBhIGZvcm1hdCBzdHJpbmcgdG8gYmUgdXNlZCB3aXRoIENsb3VkRm9ybWF0aW9uLlxuICAgKi9cbiAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybWF0O1xuICB9XG59XG4iXX0=
|