terraconstructs 0.0.24 → 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/go.mod +9 -7
- package/go.sum +18 -14
- 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,184 @@
|
|
|
1
|
+
import { Construct } from "constructs";
|
|
2
|
+
import { AwsConstructBase, AwsConstructProps, IAwsConstruct } from "..";
|
|
3
|
+
import { IRestApi } from "./restapi";
|
|
4
|
+
import { IStage } from "./stage";
|
|
5
|
+
import { QuotaSettings, ThrottleSettings, UsagePlan, UsagePlanPerApiStage } from "./usage-plan";
|
|
6
|
+
import * as iam from "../iam";
|
|
7
|
+
/**
|
|
8
|
+
* API keys are alphanumeric string values that you distribute to
|
|
9
|
+
* app developer customers to grant access to your API
|
|
10
|
+
*/
|
|
11
|
+
export interface IApiKey extends IAwsConstruct {
|
|
12
|
+
/**
|
|
13
|
+
* The API key ID.
|
|
14
|
+
* @attribute
|
|
15
|
+
*/
|
|
16
|
+
readonly keyId: string;
|
|
17
|
+
/**
|
|
18
|
+
* The API key ARN.
|
|
19
|
+
*/
|
|
20
|
+
readonly keyArn: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* The options for creating an API Key.
|
|
24
|
+
*/
|
|
25
|
+
export interface ApiKeyOptions extends AwsConstructProps {
|
|
26
|
+
/**
|
|
27
|
+
* A name for the API key. If you don't specify a name, AWS CloudFormation generates a unique physical ID and uses that ID for the API key name.
|
|
28
|
+
* @link http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-apikey.html#cfn-apigateway-apikey-name
|
|
29
|
+
* @default automically generated name
|
|
30
|
+
*/
|
|
31
|
+
readonly apiKeyName?: string;
|
|
32
|
+
/**
|
|
33
|
+
* The value of the API key. Must be at least 20 characters long.
|
|
34
|
+
* @link https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-apikey.html#cfn-apigateway-apikey-value
|
|
35
|
+
* @default none
|
|
36
|
+
*/
|
|
37
|
+
readonly value?: string;
|
|
38
|
+
/**
|
|
39
|
+
* A description of the purpose of the API key.
|
|
40
|
+
* @link http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-apikey.html#cfn-apigateway-apikey-description
|
|
41
|
+
* @default none
|
|
42
|
+
*/
|
|
43
|
+
readonly description?: string;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* ApiKey Properties.
|
|
47
|
+
*/
|
|
48
|
+
export interface ApiKeyProps extends ApiKeyOptions {
|
|
49
|
+
/**
|
|
50
|
+
* A list of resources this api key is associated with.
|
|
51
|
+
* Note: This property is not used by the ApiKey construct itself as direct stage association is deprecated.
|
|
52
|
+
* Stage association is handled via Usage Plans.
|
|
53
|
+
* It is kept for compatibility with RateLimitedApiKeyProps.
|
|
54
|
+
* @default none
|
|
55
|
+
* @deprecated - use `stages` instead, and associate via a UsagePlan.
|
|
56
|
+
*/
|
|
57
|
+
readonly resources?: IRestApi[];
|
|
58
|
+
/**
|
|
59
|
+
* A list of Stages this api key is associated with.
|
|
60
|
+
* Note: This property is not used by the ApiKey construct itself as direct stage association is deprecated.
|
|
61
|
+
* Stage association is handled via Usage Plans.
|
|
62
|
+
* It is kept for compatibility with RateLimitedApiKeyProps.
|
|
63
|
+
* @default - the api key is not associated with any stages
|
|
64
|
+
*/
|
|
65
|
+
readonly stages?: IStage[];
|
|
66
|
+
/**
|
|
67
|
+
* An AWS Marketplace customer identifier to use when integrating with the AWS SaaS Marketplace.
|
|
68
|
+
* @link http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-apikey.html#cfn-apigateway-apikey-customerid
|
|
69
|
+
* @default none
|
|
70
|
+
*/
|
|
71
|
+
readonly customerId?: string;
|
|
72
|
+
/**
|
|
73
|
+
* Indicates whether the API key can be used by clients.
|
|
74
|
+
* @link http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-apikey.html#cfn-apigateway-apikey-enabled
|
|
75
|
+
* @default true
|
|
76
|
+
*/
|
|
77
|
+
readonly enabled?: boolean;
|
|
78
|
+
/**
|
|
79
|
+
* Specifies whether the key identifier is distinct from the created API key value.
|
|
80
|
+
* This property is deprecated and not supported in the TerraConstruct.
|
|
81
|
+
* @link http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-apikey.html#cfn-apigateway-apikey-generatedistinctid
|
|
82
|
+
* @default false
|
|
83
|
+
* @deprecated This property is deprecated and not used.
|
|
84
|
+
*/
|
|
85
|
+
readonly generateDistinctId?: boolean;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Base implementation that is common to the various implementations of IApiKey
|
|
89
|
+
*/
|
|
90
|
+
declare abstract class ApiKeyBase extends AwsConstructBase implements IApiKey {
|
|
91
|
+
abstract readonly keyId: string;
|
|
92
|
+
abstract readonly keyArn: string;
|
|
93
|
+
get outputs(): Record<string, any>;
|
|
94
|
+
/**
|
|
95
|
+
* Permits the IAM principal all read operations through this key
|
|
96
|
+
*
|
|
97
|
+
* @param grantee The principal to grant access to
|
|
98
|
+
*/
|
|
99
|
+
grantRead(grantee: iam.IGrantable): iam.Grant;
|
|
100
|
+
/**
|
|
101
|
+
* Permits the IAM principal all write operations through this key
|
|
102
|
+
*
|
|
103
|
+
* @param grantee The principal to grant access to
|
|
104
|
+
*/
|
|
105
|
+
grantWrite(grantee: iam.IGrantable): iam.Grant;
|
|
106
|
+
/**
|
|
107
|
+
* Permits the IAM principal all read and write operations through this key
|
|
108
|
+
*
|
|
109
|
+
* @param grantee The principal to grant access to
|
|
110
|
+
*/
|
|
111
|
+
grantReadWrite(grantee: iam.IGrantable): iam.Grant;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* An API Gateway ApiKey.
|
|
115
|
+
*
|
|
116
|
+
* An ApiKey can be distributed to API clients that are executing requests
|
|
117
|
+
* for Method resources that require an Api Key.
|
|
118
|
+
*
|
|
119
|
+
* @resource aws_api_gateway_api_key
|
|
120
|
+
*/
|
|
121
|
+
export declare class ApiKey extends ApiKeyBase {
|
|
122
|
+
/**
|
|
123
|
+
* Import an ApiKey by its Id
|
|
124
|
+
*/
|
|
125
|
+
static fromApiKeyId(scope: Construct, id: string, apiKeyId: string): IApiKey;
|
|
126
|
+
readonly keyId: string;
|
|
127
|
+
readonly keyArn: string;
|
|
128
|
+
/**
|
|
129
|
+
* Auto created Usage Plan for backwards compatibility.
|
|
130
|
+
* Since August 11, 2016 usage plans are now required to associate an API key with an API stage.
|
|
131
|
+
*
|
|
132
|
+
* Note: This property may be udnefined as direct stage association is deprecated.
|
|
133
|
+
* Stage association is handled via Usage Plans instead.
|
|
134
|
+
* It is kept for compatibility with RateLimitedApiKeyProps.
|
|
135
|
+
*/
|
|
136
|
+
readonly usagePlan?: UsagePlan;
|
|
137
|
+
private readonly resource;
|
|
138
|
+
constructor(scope: Construct, id: string, props?: ApiKeyProps);
|
|
139
|
+
/**
|
|
140
|
+
* Render the stage keys for the ApiKey.
|
|
141
|
+
* This method handles the association of the ApiKey with either
|
|
142
|
+
* RestApi resources or Stages, depending on the provided parameters.
|
|
143
|
+
*
|
|
144
|
+
* @param resources - Optional list of RestApi resources to associate with the ApiKey.
|
|
145
|
+
* @param stages - Optional list of Stages to associate with the ApiKey.
|
|
146
|
+
*/
|
|
147
|
+
private renderStageKeys;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* RateLimitedApiKey properties.
|
|
151
|
+
*/
|
|
152
|
+
export interface RateLimitedApiKeyProps extends ApiKeyProps {
|
|
153
|
+
/**
|
|
154
|
+
* API Stages to be associated with the RateLimitedApiKey.
|
|
155
|
+
* If you already prepared UsagePlan resource explicitly, you should use `stages` property.
|
|
156
|
+
* If you prefer to prepare UsagePlan resource implicitly via RateLimitedApiKey,
|
|
157
|
+
* or you should specify throttle settings at each stage individually, you should use `apiStages` property.
|
|
158
|
+
*
|
|
159
|
+
* @default none
|
|
160
|
+
*/
|
|
161
|
+
readonly apiStages?: UsagePlanPerApiStage[];
|
|
162
|
+
/**
|
|
163
|
+
* Number of requests clients can make in a given time period.
|
|
164
|
+
* @default none
|
|
165
|
+
*/
|
|
166
|
+
readonly quota?: QuotaSettings;
|
|
167
|
+
/**
|
|
168
|
+
* Overall throttle settings for the API.
|
|
169
|
+
* @default none
|
|
170
|
+
*/
|
|
171
|
+
readonly throttle?: ThrottleSettings;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* An API Gateway ApiKey, for which a rate limiting configuration can be specified.
|
|
175
|
+
*
|
|
176
|
+
* @resource aws_api_gateway_api_key
|
|
177
|
+
*/
|
|
178
|
+
export declare class RateLimitedApiKey extends ApiKeyBase {
|
|
179
|
+
readonly keyId: string;
|
|
180
|
+
readonly keyArn: string;
|
|
181
|
+
readonly apiKey: ApiKey;
|
|
182
|
+
constructor(scope: Construct, id: string, props?: RateLimitedApiKeyProps);
|
|
183
|
+
}
|
|
184
|
+
export {};
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a, _b;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.RateLimitedApiKey = exports.ApiKey = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
const provider_aws_1 = require("@cdktf/provider-aws");
|
|
7
|
+
const cdktf_1 = require("cdktf");
|
|
8
|
+
const __1 = require("..");
|
|
9
|
+
const usage_plan_1 = require("./usage-plan");
|
|
10
|
+
const iam = require("../iam");
|
|
11
|
+
/**
|
|
12
|
+
* Base implementation that is common to the various implementations of IApiKey
|
|
13
|
+
*/
|
|
14
|
+
class ApiKeyBase extends __1.AwsConstructBase {
|
|
15
|
+
get outputs() {
|
|
16
|
+
return {
|
|
17
|
+
keyId: this.keyId,
|
|
18
|
+
keyArn: this.keyArn,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Permits the IAM principal all read operations through this key
|
|
23
|
+
*
|
|
24
|
+
* @param grantee The principal to grant access to
|
|
25
|
+
*/
|
|
26
|
+
grantRead(grantee) {
|
|
27
|
+
return iam.Grant.addToPrincipal({
|
|
28
|
+
grantee,
|
|
29
|
+
actions: readPermissions,
|
|
30
|
+
resourceArns: [this.keyArn],
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Permits the IAM principal all write operations through this key
|
|
35
|
+
*
|
|
36
|
+
* @param grantee The principal to grant access to
|
|
37
|
+
*/
|
|
38
|
+
grantWrite(grantee) {
|
|
39
|
+
return iam.Grant.addToPrincipal({
|
|
40
|
+
grantee,
|
|
41
|
+
actions: writePermissions,
|
|
42
|
+
resourceArns: [this.keyArn],
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Permits the IAM principal all read and write operations through this key
|
|
47
|
+
*
|
|
48
|
+
* @param grantee The principal to grant access to
|
|
49
|
+
*/
|
|
50
|
+
grantReadWrite(grantee) {
|
|
51
|
+
return iam.Grant.addToPrincipal({
|
|
52
|
+
grantee,
|
|
53
|
+
actions: [...readPermissions, ...writePermissions],
|
|
54
|
+
resourceArns: [this.keyArn],
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* An API Gateway ApiKey.
|
|
60
|
+
*
|
|
61
|
+
* An ApiKey can be distributed to API clients that are executing requests
|
|
62
|
+
* for Method resources that require an Api Key.
|
|
63
|
+
*
|
|
64
|
+
* @resource aws_api_gateway_api_key
|
|
65
|
+
*/
|
|
66
|
+
class ApiKey extends ApiKeyBase {
|
|
67
|
+
/**
|
|
68
|
+
* Import an ApiKey by its Id
|
|
69
|
+
*/
|
|
70
|
+
static fromApiKeyId(scope, id, apiKeyId) {
|
|
71
|
+
class Import extends ApiKeyBase {
|
|
72
|
+
constructor() {
|
|
73
|
+
super(...arguments);
|
|
74
|
+
this.keyId = apiKeyId;
|
|
75
|
+
this.keyArn = this.stack.formatArn({
|
|
76
|
+
service: "apigateway",
|
|
77
|
+
account: "", // API Key ARNs typically don't include account ID in this segment
|
|
78
|
+
resource: "/apikeys",
|
|
79
|
+
arnFormat: __1.ArnFormat.SLASH_RESOURCE_NAME,
|
|
80
|
+
resourceName: apiKeyId,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return new Import(scope, id);
|
|
85
|
+
}
|
|
86
|
+
constructor(scope, id, props = {}) {
|
|
87
|
+
super(scope, id, props);
|
|
88
|
+
const name = props.apiKeyName ?? this.stack.uniqueResourceName(this);
|
|
89
|
+
this.resource = new provider_aws_1.apiGatewayApiKey.ApiGatewayApiKey(this, "Resource", {
|
|
90
|
+
name,
|
|
91
|
+
customerId: props.customerId,
|
|
92
|
+
description: props.description,
|
|
93
|
+
enabled: props.enabled ?? true,
|
|
94
|
+
value: props.value,
|
|
95
|
+
});
|
|
96
|
+
this.keyId = this.resource.id;
|
|
97
|
+
this.keyArn = this.resource.arn;
|
|
98
|
+
// copy legacy renderStageKeys logic from AWSCDK for ease of migration.
|
|
99
|
+
this.usagePlan = this.renderStageKeys(props.resources, props.stages);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Render the stage keys for the ApiKey.
|
|
103
|
+
* This method handles the association of the ApiKey with either
|
|
104
|
+
* RestApi resources or Stages, depending on the provided parameters.
|
|
105
|
+
*
|
|
106
|
+
* @param resources - Optional list of RestApi resources to associate with the ApiKey.
|
|
107
|
+
* @param stages - Optional list of Stages to associate with the ApiKey.
|
|
108
|
+
*/
|
|
109
|
+
renderStageKeys(resources, stages) {
|
|
110
|
+
if (!resources && !stages) {
|
|
111
|
+
return undefined;
|
|
112
|
+
}
|
|
113
|
+
if (resources && stages) {
|
|
114
|
+
// throw new ValidationError(
|
|
115
|
+
throw new Error(`Only one of "resources" or "stages" should be provided. (${this.node.path})`);
|
|
116
|
+
}
|
|
117
|
+
if (resources) {
|
|
118
|
+
// Handle Deprecated case of associating ApiKey with RestApi resources
|
|
119
|
+
// This creates a single Usage Plan for all stages, but is deprecated.
|
|
120
|
+
const apiStages = [];
|
|
121
|
+
resources.forEach((resource) => {
|
|
122
|
+
const restApi = resource;
|
|
123
|
+
if (!restApi.deploymentStage) {
|
|
124
|
+
// throw new ValidationError(
|
|
125
|
+
throw new Error('Cannot add an ApiKey to a RestApi that does not contain a "deploymentStage".\n' +
|
|
126
|
+
"Either set the RestApi.deploymentStage or create an ApiKey from a Stage");
|
|
127
|
+
}
|
|
128
|
+
apiStages.push({
|
|
129
|
+
api: restApi,
|
|
130
|
+
stage: restApi.deploymentStage,
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
const usagePlan = new usage_plan_1.UsagePlan(this, "UsagePlan", {
|
|
134
|
+
apiStages,
|
|
135
|
+
name: `${this.resource.nameInput}-usage-plan`,
|
|
136
|
+
description: `Usage Plan for ${this.friendlyName}`,
|
|
137
|
+
});
|
|
138
|
+
usagePlan.addApiKey(this);
|
|
139
|
+
return usagePlan;
|
|
140
|
+
}
|
|
141
|
+
if (stages && stages.length > 0) {
|
|
142
|
+
// Handle Deprecated case of associating ApiKey with multiple Stages
|
|
143
|
+
// This creates a single Usage Plan for all stages, but is also deprecated.
|
|
144
|
+
const usagePlan = new usage_plan_1.UsagePlan(this, `UsagePlan`, {
|
|
145
|
+
apiStages: stages.map((stage) => ({
|
|
146
|
+
api: stage.restApi,
|
|
147
|
+
// NOTE: UsagePlanPerApiStage expects Stage instead of IStage
|
|
148
|
+
// https://github.com/aws/aws-cdk/blob/v2.186.0/packages/aws-cdk-lib/aws-apigateway/lib/usage-plan.ts#L97-L102
|
|
149
|
+
stage: stage,
|
|
150
|
+
})),
|
|
151
|
+
});
|
|
152
|
+
usagePlan.addApiKey(this);
|
|
153
|
+
return usagePlan;
|
|
154
|
+
}
|
|
155
|
+
return undefined;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
exports.ApiKey = ApiKey;
|
|
159
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
160
|
+
ApiKey[_a] = { fqn: "terraconstructs.aws.compute.ApiKey", version: "0.1.0" };
|
|
161
|
+
/**
|
|
162
|
+
* An API Gateway ApiKey, for which a rate limiting configuration can be specified.
|
|
163
|
+
*
|
|
164
|
+
* @resource aws_api_gateway_api_key
|
|
165
|
+
*/
|
|
166
|
+
class RateLimitedApiKey extends ApiKeyBase {
|
|
167
|
+
constructor(scope, id, props = {}) {
|
|
168
|
+
super(scope, id, props);
|
|
169
|
+
this.apiKey = new ApiKey(this, "Resource", props);
|
|
170
|
+
if (props.apiStages || props.quota || props.throttle) {
|
|
171
|
+
if (this.apiKey.usagePlan) {
|
|
172
|
+
// NOTE: Creating an additional usage plan is default AWSCDK behavior.
|
|
173
|
+
// https://github.com/aws/aws-cdk/blob/v2.186.0/packages/aws-cdk-lib/aws-apigateway/lib/api-key.ts#L268-L275
|
|
174
|
+
cdktf_1.Annotations.of(this.apiKey).addWarning("UsagePlan is already created for this ApiKey. A separate UsagePlan with rate limiting will be created separately");
|
|
175
|
+
}
|
|
176
|
+
const usagePlan = new usage_plan_1.UsagePlan(this, "RateLimitedUsagePlan", {
|
|
177
|
+
apiStages: props.apiStages,
|
|
178
|
+
quota: props.quota,
|
|
179
|
+
throttle: props.throttle,
|
|
180
|
+
});
|
|
181
|
+
usagePlan.addApiKey(this.apiKey);
|
|
182
|
+
}
|
|
183
|
+
this.keyId = this.apiKey.keyId;
|
|
184
|
+
this.keyArn = this.apiKey.keyArn;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
exports.RateLimitedApiKey = RateLimitedApiKey;
|
|
188
|
+
_b = JSII_RTTI_SYMBOL_1;
|
|
189
|
+
RateLimitedApiKey[_b] = { fqn: "terraconstructs.aws.compute.RateLimitedApiKey", version: "0.1.0" };
|
|
190
|
+
const readPermissions = ["apigateway:GET"];
|
|
191
|
+
const writePermissions = [
|
|
192
|
+
"apigateway:POST",
|
|
193
|
+
"apigateway:PUT",
|
|
194
|
+
"apigateway:PATCH",
|
|
195
|
+
"apigateway:DELETE",
|
|
196
|
+
];
|
|
197
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWtleS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hd3MvY29tcHV0ZS9hcGkta2V5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsc0RBQXVEO0FBQ3ZELGlDQUFvQztBQUVwQywwQkFLWTtBQUdaLDZDQUtzQjtBQUN0Qiw4QkFBOEI7QUE0RjlCOztHQUVHO0FBQ0gsTUFBZSxVQUFXLFNBQVEsb0JBQWdCO0lBSWhELElBQVcsT0FBTztRQUNoQixPQUFPO1lBQ0wsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2pCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtTQUNwQixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxTQUFTLENBQUMsT0FBdUI7UUFDdEMsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQztZQUM5QixPQUFPO1lBQ1AsT0FBTyxFQUFFLGVBQWU7WUFDeEIsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUM1QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFVBQVUsQ0FBQyxPQUF1QjtRQUN2QyxPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDO1lBQzlCLE9BQU87WUFDUCxPQUFPLEVBQUUsZ0JBQWdCO1lBQ3pCLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7U0FDNUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxjQUFjLENBQUMsT0FBdUI7UUFDM0MsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQztZQUM5QixPQUFPO1lBQ1AsT0FBTyxFQUFFLENBQUMsR0FBRyxlQUFlLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQztZQUNsRCxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQzVCLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQUVE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QyxRQUFRLEVBQUUsQ0FBQztZQUNyRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQzFCLHNFQUFzRTtnQkFDdEUsNEdBQTRHO2dCQUM1RyxtQkFBVyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsVUFBVSxDQUNwQyxrSEFBa0gsQ0FDbkgsQ0FBQztZQUNKLENBQUM7WUFDRCxNQUFNLFNBQVMsR0FBRyxJQUFJLHNCQUFTLENBQUMsSUFBSSxFQUFFLHNCQUFzQixFQUFFO2dCQUM1RCxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7Z0JBQzFCLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztnQkFDbEIsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO2FBQ3pCLENBQUMsQ0FBQztZQUNILFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFFRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQy9CLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDbkMsQ0FBQzs7QUFoQ0gsOENBaUNDOzs7QUFFRCxNQUFNLGVBQWUsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFFM0MsTUFBTSxnQkFBZ0IsR0FBRztJQUN2QixpQkFBaUI7SUFDakIsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQixtQkFBbUI7Q0FDcEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFwaUdhdGV3YXlBcGlLZXkgfSBmcm9tIFwiQGNka3RmL3Byb3ZpZGVyLWF3c1wiO1xuaW1wb3J0IHsgQW5ub3RhdGlvbnMgfSBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQge1xuICBBcm5Gb3JtYXQsXG4gIEF3c0NvbnN0cnVjdEJhc2UsXG4gIEF3c0NvbnN0cnVjdFByb3BzLFxuICBJQXdzQ29uc3RydWN0LFxufSBmcm9tIFwiLi5cIjtcbmltcG9ydCB7IElSZXN0QXBpIH0gZnJvbSBcIi4vcmVzdGFwaVwiO1xuaW1wb3J0IHsgSVN0YWdlLCBTdGFnZSB9IGZyb20gXCIuL3N0YWdlXCI7XG5pbXBvcnQge1xuICBRdW90YVNldHRpbmdzLFxuICBUaHJvdHRsZVNldHRpbmdzLFxuICBVc2FnZVBsYW4sXG4gIFVzYWdlUGxhblBlckFwaVN0YWdlLFxufSBmcm9tIFwiLi91c2FnZS1wbGFuXCI7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSBcIi4uL2lhbVwiO1xuXG4vKipcbiAqIEFQSSBrZXlzIGFyZSBhbHBoYW51bWVyaWMgc3RyaW5nIHZhbHVlcyB0aGF0IHlvdSBkaXN0cmlidXRlIHRvXG4gKiBhcHAgZGV2ZWxvcGVyIGN1c3RvbWVycyB0byBncmFudCBhY2Nlc3MgdG8geW91ciBBUElcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQXBpS2V5IGV4dGVuZHMgSUF3c0NvbnN0cnVjdCB7XG4gIC8qKlxuICAgKiBUaGUgQVBJIGtleSBJRC5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkga2V5SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFQSSBrZXkgQVJOLlxuICAgKi9cbiAgcmVhZG9ubHkga2V5QXJuOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIG9wdGlvbnMgZm9yIGNyZWF0aW5nIGFuIEFQSSBLZXkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBpS2V5T3B0aW9ucyBleHRlbmRzIEF3c0NvbnN0cnVjdFByb3BzIHtcbiAgLyoqXG4gICAqIEEgbmFtZSBmb3IgdGhlIEFQSSBrZXkuIElmIHlvdSBkb24ndCBzcGVjaWZ5IGEgbmFtZSwgQVdTIENsb3VkRm9ybWF0aW9uIGdlbmVyYXRlcyBhIHVuaXF1ZSBwaHlzaWNhbCBJRCBhbmQgdXNlcyB0aGF0IElEIGZvciB0aGUgQVBJIGtleSBuYW1lLlxuICAgKiBAbGluayBodHRwOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1hcGlnYXRld2F5LWFwaWtleS5odG1sI2Nmbi1hcGlnYXRld2F5LWFwaWtleS1uYW1lXG4gICAqIEBkZWZhdWx0IGF1dG9taWNhbGx5IGdlbmVyYXRlZCBuYW1lXG4gICAqL1xuICByZWFkb25seSBhcGlLZXlOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIEFQSSBrZXkuIE11c3QgYmUgYXQgbGVhc3QgMjAgY2hhcmFjdGVycyBsb25nLlxuICAgKiBAbGluayBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtYXBpZ2F0ZXdheS1hcGlrZXkuaHRtbCNjZm4tYXBpZ2F0ZXdheS1hcGlrZXktdmFsdWVcbiAgICogQGRlZmF1bHQgbm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgZGVzY3JpcHRpb24gb2YgdGhlIHB1cnBvc2Ugb2YgdGhlIEFQSSBrZXkuXG4gICAqIEBsaW5rIGh0dHA6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWFwaWdhdGV3YXktYXBpa2V5Lmh0bWwjY2ZuLWFwaWdhdGV3YXktYXBpa2V5LWRlc2NyaXB0aW9uXG4gICAqIEBkZWZhdWx0IG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFwaUtleSBQcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwaUtleVByb3BzIGV4dGVuZHMgQXBpS2V5T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgcmVzb3VyY2VzIHRoaXMgYXBpIGtleSBpcyBhc3NvY2lhdGVkIHdpdGguXG4gICAqIE5vdGU6IFRoaXMgcHJvcGVydHkgaXMgbm90IHVzZWQgYnkgdGhlIEFwaUtleSBjb25zdHJ1Y3QgaXRzZWxmIGFzIGRpcmVjdCBzdGFnZSBhc3NvY2lhdGlvbiBpcyBkZXByZWNhdGVkLlxuICAgKiBTdGFnZSBhc3NvY2lhdGlvbiBpcyBoYW5kbGVkIHZpYSBVc2FnZSBQbGFucy5cbiAgICogSXQgaXMga2VwdCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFJhdGVMaW1pdGVkQXBpS2V5UHJvcHMuXG4gICAqIEBkZWZhdWx0IG5vbmVcbiAgICogQGRlcHJlY2F0ZWQgLSB1c2UgYHN0YWdlc2AgaW5zdGVhZCwgYW5kIGFzc29jaWF0ZSB2aWEgYSBVc2FnZVBsYW4uXG4gICAqL1xuICByZWFkb25seSByZXNvdXJjZXM/OiBJUmVzdEFwaVtdO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgU3RhZ2VzIHRoaXMgYXBpIGtleSBpcyBhc3NvY2lhdGVkIHdpdGguXG4gICAqIE5vdGU6IFRoaXMgcHJvcGVydHkgaXMgbm90IHVzZWQgYnkgdGhlIEFwaUtleSBjb25zdHJ1Y3QgaXRzZWxmIGFzIGRpcmVjdCBzdGFnZSBhc3NvY2lhdGlvbiBpcyBkZXByZWNhdGVkLlxuICAgKiBTdGFnZSBhc3NvY2lhdGlvbiBpcyBoYW5kbGVkIHZpYSBVc2FnZSBQbGFucy5cbiAgICogSXQgaXMga2VwdCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFJhdGVMaW1pdGVkQXBpS2V5UHJvcHMuXG4gICAqIEBkZWZhdWx0IC0gdGhlIGFwaSBrZXkgaXMgbm90IGFzc29jaWF0ZWQgd2l0aCBhbnkgc3RhZ2VzXG4gICAqL1xuICByZWFkb25seSBzdGFnZXM/OiBJU3RhZ2VbXTtcblxuICAvKipcbiAgICogQW4gQVdTIE1hcmtldHBsYWNlIGN1c3RvbWVyIGlkZW50aWZpZXIgdG8gdXNlIHdoZW4gaW50ZWdyYXRpbmcgd2l0aCB0aGUgQVdTIFNhYVMgTWFya2V0cGxhY2UuXG4gICAqIEBsaW5rIGh0dHA6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWFwaWdhdGV3YXktYXBpa2V5Lmh0bWwjY2ZuLWFwaWdhdGV3YXktYXBpa2V5LWN1c3RvbWVyaWRcbiAgICogQGRlZmF1bHQgbm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgY3VzdG9tZXJJZD86IHN0cmluZztcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIEFQSSBrZXkgY2FuIGJlIHVzZWQgYnkgY2xpZW50cy5cbiAgICogQGxpbmsgaHR0cDovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtYXBpZ2F0ZXdheS1hcGlrZXkuaHRtbCNjZm4tYXBpZ2F0ZXdheS1hcGlrZXktZW5hYmxlZFxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIGtleSBpZGVudGlmaWVyIGlzIGRpc3RpbmN0IGZyb20gdGhlIGNyZWF0ZWQgQVBJIGtleSB2YWx1ZS5cbiAgICogVGhpcyBwcm9wZXJ0eSBpcyBkZXByZWNhdGVkIGFuZCBub3Qgc3VwcG9ydGVkIGluIHRoZSBUZXJyYUNvbnN0cnVjdC5cbiAgICogQGxpbmsgaHR0cDovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtYXBpZ2F0ZXdheS1hcGlrZXkuaHRtbCNjZm4tYXBpZ2F0ZXdheS1hcGlrZXktZ2VuZXJhdGVkaXN0aW5jdGlkXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqIEBkZXByZWNhdGVkIFRoaXMgcHJvcGVydHkgaXMgZGVwcmVjYXRlZCBhbmQgbm90IHVzZWQuXG4gICAqL1xuICByZWFkb25seSBnZW5lcmF0ZURpc3RpbmN0SWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEJhc2UgaW1wbGVtZW50YXRpb24gdGhhdCBpcyBjb21tb24gdG8gdGhlIHZhcmlvdXMgaW1wbGVtZW50YXRpb25zIG9mIElBcGlLZXlcbiAqL1xuYWJzdHJhY3QgY2xhc3MgQXBpS2V5QmFzZSBleHRlbmRzIEF3c0NvbnN0cnVjdEJhc2UgaW1wbGVtZW50cyBJQXBpS2V5IHtcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGtleUlkOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBrZXlBcm46IHN0cmluZztcblxuICBwdWJsaWMgZ2V0IG91dHB1dHMoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtleUlkOiB0aGlzLmtleUlkLFxuICAgICAga2V5QXJuOiB0aGlzLmtleUFybixcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcm1pdHMgdGhlIElBTSBwcmluY2lwYWwgYWxsIHJlYWQgb3BlcmF0aW9ucyB0aHJvdWdoIHRoaXMga2V5XG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWwgdG8gZ3JhbnQgYWNjZXNzIHRvXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRSZWFkKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gaWFtLkdyYW50LmFkZFRvUHJpbmNpcGFsKHtcbiAgICAgIGdyYW50ZWUsXG4gICAgICBhY3Rpb25zOiByZWFkUGVybWlzc2lvbnMsXG4gICAgICByZXNvdXJjZUFybnM6IFt0aGlzLmtleUFybl0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUGVybWl0cyB0aGUgSUFNIHByaW5jaXBhbCBhbGwgd3JpdGUgb3BlcmF0aW9ucyB0aHJvdWdoIHRoaXMga2V5XG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWwgdG8gZ3JhbnQgYWNjZXNzIHRvXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRXcml0ZShncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIGlhbS5HcmFudC5hZGRUb1ByaW5jaXBhbCh7XG4gICAgICBncmFudGVlLFxuICAgICAgYWN0aW9uczogd3JpdGVQZXJtaXNzaW9ucyxcbiAgICAgIHJlc291cmNlQXJuczogW3RoaXMua2V5QXJuXSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJtaXRzIHRoZSBJQU0gcHJpbmNpcGFsIGFsbCByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIHRocm91Z2ggdGhpcyBrZXlcbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbCB0byBncmFudCBhY2Nlc3MgdG9cbiAgICovXG4gIHB1YmxpYyBncmFudFJlYWRXcml0ZShncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIGlhbS5HcmFudC5hZGRUb1ByaW5jaXBhbCh7XG4gICAgICBncmFudGVlLFxuICAgICAgYWN0aW9uczogWy4uLnJlYWRQZXJtaXNzaW9ucywgLi4ud3JpdGVQZXJtaXNzaW9uc10sXG4gICAgICByZXNvdXJjZUFybnM6IFt0aGlzLmtleUFybl0sXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBBbiBBUEkgR2F0ZXdheSBBcGlLZXkuXG4gKlxuICogQW4gQXBpS2V5IGNhbiBiZSBkaXN0cmlidXRlZCB0byBBUEkgY2xpZW50cyB0aGF0IGFyZSBleGVjdXRpbmcgcmVxdWVzdHNcbiAqIGZvciBNZXRob2QgcmVzb3VyY2VzIHRoYXQgcmVxdWlyZSBhbiBBcGkgS2V5LlxuICpcbiAqIEByZXNvdXJjZSBhd3NfYXBpX2dhdGV3YXlfYXBpX2tleVxuICovXG5leHBvcnQgY2xhc3MgQXBpS2V5IGV4dGVuZHMgQXBpS2V5QmFzZSB7XG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gQXBpS2V5IGJ5IGl0cyBJZFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tQXBpS2V5SWQoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIGFwaUtleUlkOiBzdHJpbmcsXG4gICk6IElBcGlLZXkge1xuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIEFwaUtleUJhc2Uge1xuICAgICAgcHVibGljIGtleUlkID0gYXBpS2V5SWQ7XG4gICAgICBwdWJsaWMga2V5QXJuID0gdGhpcy5zdGFjay5mb3JtYXRBcm4oe1xuICAgICAgICBzZXJ2aWNlOiBcImFwaWdhdGV3YXlcIixcbiAgICAgICAgYWNjb3VudDogXCJcIiwgLy8gQVBJIEtleSBBUk5zIHR5cGljYWxseSBkb24ndCBpbmNsdWRlIGFjY291bnQgSUQgaW4gdGhpcyBzZWdtZW50XG4gICAgICAgIHJlc291cmNlOiBcIi9hcGlrZXlzXCIsXG4gICAgICAgIGFybkZvcm1hdDogQXJuRm9ybWF0LlNMQVNIX1JFU09VUkNFX05BTUUsXG4gICAgICAgIHJlc291cmNlTmFtZTogYXBpS2V5SWQsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IGtleUlkOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBrZXlBcm46IHN0cmluZztcbiAgLyoqXG4gICAqIEF1dG8gY3JlYXRlZCBVc2FnZSBQbGFuIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cbiAgICogU2luY2UgQXVndXN0IDExLCAyMDE2IHVzYWdlIHBsYW5zIGFyZSBub3cgcmVxdWlyZWQgdG8gYXNzb2NpYXRlIGFuIEFQSSBrZXkgd2l0aCBhbiBBUEkgc3RhZ2UuXG4gICAqXG4gICAqIE5vdGU6IFRoaXMgcHJvcGVydHkgbWF5IGJlIHVkbmVmaW5lZCBhcyBkaXJlY3Qgc3RhZ2UgYXNzb2NpYXRpb24gaXMgZGVwcmVjYXRlZC5cbiAgICogU3RhZ2UgYXNzb2NpYXRpb24gaXMgaGFuZGxlZCB2aWEgVXNhZ2UgUGxhbnMgaW5zdGVhZC5cbiAgICogSXQgaXMga2VwdCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFJhdGVMaW1pdGVkQXBpS2V5UHJvcHMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdXNhZ2VQbGFuPzogVXNhZ2VQbGFuO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlc291cmNlOiBhcGlHYXRld2F5QXBpS2V5LkFwaUdhdGV3YXlBcGlLZXk7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEFwaUtleVByb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIGNvbnN0IG5hbWUgPSBwcm9wcy5hcGlLZXlOYW1lID8/IHRoaXMuc3RhY2sudW5pcXVlUmVzb3VyY2VOYW1lKHRoaXMpO1xuXG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyBhcGlHYXRld2F5QXBpS2V5LkFwaUdhdGV3YXlBcGlLZXkodGhpcywgXCJSZXNvdXJjZVwiLCB7XG4gICAgICBuYW1lLFxuICAgICAgY3VzdG9tZXJJZDogcHJvcHMuY3VzdG9tZXJJZCxcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9wcy5kZXNjcmlwdGlvbixcbiAgICAgIGVuYWJsZWQ6IHByb3BzLmVuYWJsZWQgPz8gdHJ1ZSxcbiAgICAgIHZhbHVlOiBwcm9wcy52YWx1ZSxcbiAgICB9KTtcbiAgICB0aGlzLmtleUlkID0gdGhpcy5yZXNvdXJjZS5pZDtcbiAgICB0aGlzLmtleUFybiA9IHRoaXMucmVzb3VyY2UuYXJuO1xuXG4gICAgLy8gY29weSBsZWdhY3kgcmVuZGVyU3RhZ2VLZXlzIGxvZ2ljIGZyb20gQVdTQ0RLIGZvciBlYXNlIG9mIG1pZ3JhdGlvbi5cbiAgICB0aGlzLnVzYWdlUGxhbiA9IHRoaXMucmVuZGVyU3RhZ2VLZXlzKHByb3BzLnJlc291cmNlcywgcHJvcHMuc3RhZ2VzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgdGhlIHN0YWdlIGtleXMgZm9yIHRoZSBBcGlLZXkuXG4gICAqIFRoaXMgbWV0aG9kIGhhbmRsZXMgdGhlIGFzc29jaWF0aW9uIG9mIHRoZSBBcGlLZXkgd2l0aCBlaXRoZXJcbiAgICogUmVzdEFwaSByZXNvdXJjZXMgb3IgU3RhZ2VzLCBkZXBlbmRpbmcgb24gdGhlIHByb3ZpZGVkIHBhcmFtZXRlcnMuXG4gICAqXG4gICAqIEBwYXJhbSByZXNvdXJjZXMgLSBPcHRpb25hbCBsaXN0IG9mIFJlc3RBcGkgcmVzb3VyY2VzIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBBcGlLZXkuXG4gICAqIEBwYXJhbSBzdGFnZXMgLSBPcHRpb25hbCBsaXN0IG9mIFN0YWdlcyB0byBhc3NvY2lhdGUgd2l0aCB0aGUgQXBpS2V5LlxuICAgKi9cbiAgcHJpdmF0ZSByZW5kZXJTdGFnZUtleXMoXG4gICAgcmVzb3VyY2VzPzogSVJlc3RBcGlbXSxcbiAgICBzdGFnZXM/OiBJU3RhZ2VbXSxcbiAgKTogVXNhZ2VQbGFuIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXJlc291cmNlcyAmJiAhc3RhZ2VzKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmIChyZXNvdXJjZXMgJiYgc3RhZ2VzKSB7XG4gICAgICAvLyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgT25seSBvbmUgb2YgXCJyZXNvdXJjZXNcIiBvciBcInN0YWdlc1wiIHNob3VsZCBiZSBwcm92aWRlZC4gKCR7dGhpcy5ub2RlLnBhdGh9KWAsXG4gICAgICAgIC8vIHRoaXMsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChyZXNvdXJjZXMpIHtcbiAgICAgIC8vIEhhbmRsZSBEZXByZWNhdGVkIGNhc2Ugb2YgYXNzb2NpYXRpbmcgQXBpS2V5IHdpdGggUmVzdEFwaSByZXNvdXJjZXNcbiAgICAgIC8vIFRoaXMgY3JlYXRlcyBhIHNpbmdsZSBVc2FnZSBQbGFuIGZvciBhbGwgc3RhZ2VzLCBidXQgaXMgZGVwcmVjYXRlZC5cbiAgICAgIGNvbnN0IGFwaVN0YWdlczogVXNhZ2VQbGFuUGVyQXBpU3RhZ2VbXSA9IFtdO1xuICAgICAgcmVzb3VyY2VzLmZvckVhY2goKHJlc291cmNlOiBJUmVzdEFwaSkgPT4ge1xuICAgICAgICBjb25zdCByZXN0QXBpID0gcmVzb3VyY2U7XG4gICAgICAgIGlmICghcmVzdEFwaS5kZXBsb3ltZW50U3RhZ2UpIHtcbiAgICAgICAgICAvLyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdDYW5ub3QgYWRkIGFuIEFwaUtleSB0byBhIFJlc3RBcGkgdGhhdCBkb2VzIG5vdCBjb250YWluIGEgXCJkZXBsb3ltZW50U3RhZ2VcIi5cXG4nICtcbiAgICAgICAgICAgICAgXCJFaXRoZXIgc2V0IHRoZSBSZXN0QXBpLmRlcGxveW1lbnRTdGFnZSBvciBjcmVhdGUgYW4gQXBpS2V5IGZyb20gYSBTdGFnZVwiLFxuICAgICAgICAgICAgLy8gdGhpcyxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGFwaVN0YWdlcy5wdXNoKHtcbiAgICAgICAgICBhcGk6IHJlc3RBcGksXG4gICAgICAgICAgc3RhZ2U6IHJlc3RBcGkuZGVwbG95bWVudFN0YWdlLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB1c2FnZVBsYW4gPSBuZXcgVXNhZ2VQbGFuKHRoaXMsIFwiVXNhZ2VQbGFuXCIsIHtcbiAgICAgICAgYXBpU3RhZ2VzLFxuICAgICAgICBuYW1lOiBgJHt0aGlzLnJlc291cmNlLm5hbWVJbnB1dH0tdXNhZ2UtcGxhbmAsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgVXNhZ2UgUGxhbiBmb3IgJHt0aGlzLmZyaWVuZGx5TmFtZX1gLFxuICAgICAgfSk7XG4gICAgICB1c2FnZVBsYW4uYWRkQXBpS2V5KHRoaXMpO1xuICAgICAgcmV0dXJuIHVzYWdlUGxhbjtcbiAgICB9XG5cbiAgICBpZiAoc3RhZ2VzICYmIHN0YWdlcy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBIYW5kbGUgRGVwcmVjYXRlZCBjYXNlIG9mIGFzc29jaWF0aW5nIEFwaUtleSB3aXRoIG11bHRpcGxlIFN0YWdlc1xuICAgICAgLy8gVGhpcyBjcmVhdGVzIGEgc2luZ2xlIFVzYWdlIFBsYW4gZm9yIGFsbCBzdGFnZXMsIGJ1dCBpcyBhbHNvIGRlcHJlY2F0ZWQuXG4gICAgICBjb25zdCB1c2FnZVBsYW4gPSBuZXcgVXNhZ2VQbGFuKHRoaXMsIGBVc2FnZVBsYW5gLCB7XG4gICAgICAgIGFwaVN0YWdlczogc3RhZ2VzLm1hcCgoc3RhZ2UpID0+ICh7XG4gICAgICAgICAgYXBpOiBzdGFnZS5yZXN0QXBpLFxuICAgICAgICAgIC8vIE5PVEU6IFVzYWdlUGxhblBlckFwaVN0YWdlIGV4cGVjdHMgU3RhZ2UgaW5zdGVhZCBvZiBJU3RhZ2VcbiAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi92Mi4xODYuMC9wYWNrYWdlcy9hd3MtY2RrLWxpYi9hd3MtYXBpZ2F0ZXdheS9saWIvdXNhZ2UtcGxhbi50cyNMOTctTDEwMlxuICAgICAgICAgIHN0YWdlOiBzdGFnZSBhcyBTdGFnZSxcbiAgICAgICAgfSkpLFxuICAgICAgfSk7XG4gICAgICB1c2FnZVBsYW4uYWRkQXBpS2V5KHRoaXMpO1xuICAgICAgcmV0dXJuIHVzYWdlUGxhbjtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIFJhdGVMaW1pdGVkQXBpS2V5IHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmF0ZUxpbWl0ZWRBcGlLZXlQcm9wcyBleHRlbmRzIEFwaUtleVByb3BzIHtcbiAgLyoqXG4gICAqIEFQSSBTdGFnZXMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBSYXRlTGltaXRlZEFwaUtleS5cbiAgICogSWYgeW91IGFscmVhZHkgcHJlcGFyZWQgVXNhZ2VQbGFuIHJlc291cmNlIGV4cGxpY2l0bHksIHlvdSBzaG91bGQgdXNlIGBzdGFnZXNgIHByb3BlcnR5LlxuICAgKiBJZiB5b3UgcHJlZmVyIHRvIHByZXBhcmUgVXNhZ2VQbGFuIHJlc291cmNlIGltcGxpY2l0bHkgdmlhIFJhdGVMaW1pdGVkQXBpS2V5LFxuICAgKiBvciB5b3Ugc2hvdWxkIHNwZWNpZnkgdGhyb3R0bGUgc2V0dGluZ3MgYXQgZWFjaCBzdGFnZSBpbmRpdmlkdWFsbHksIHlvdSBzaG91bGQgdXNlIGBhcGlTdGFnZXNgIHByb3BlcnR5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBub25lXG4gICAqL1xuICByZWFkb25seSBhcGlTdGFnZXM/OiBVc2FnZVBsYW5QZXJBcGlTdGFnZVtdO1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgcmVxdWVzdHMgY2xpZW50cyBjYW4gbWFrZSBpbiBhIGdpdmVuIHRpbWUgcGVyaW9kLlxuICAgKiBAZGVmYXVsdCBub25lXG4gICAqL1xuICByZWFkb25seSBxdW90YT86IFF1b3RhU2V0dGluZ3M7XG5cbiAgLyoqXG4gICAqIE92ZXJhbGwgdGhyb3R0bGUgc2V0dGluZ3MgZm9yIHRoZSBBUEkuXG4gICAqIEBkZWZhdWx0IG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IHRocm90dGxlPzogVGhyb3R0bGVTZXR0aW5ncztcbn1cblxuLyoqXG4gKiBBbiBBUEkgR2F0ZXdheSBBcGlLZXksIGZvciB3aGljaCBhIHJhdGUgbGltaXRpbmcgY29uZmlndXJhdGlvbiBjYW4gYmUgc3BlY2lmaWVkLlxuICpcbiAqIEByZXNvdXJjZSBhd3NfYXBpX2dhdGV3YXlfYXBpX2tleVxuICovXG5leHBvcnQgY2xhc3MgUmF0ZUxpbWl0ZWRBcGlLZXkgZXh0ZW5kcyBBcGlLZXlCYXNlIHtcbiAgcHVibGljIHJlYWRvbmx5IGtleUlkOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBrZXlBcm46IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGFwaUtleTogQXBpS2V5O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogUmF0ZUxpbWl0ZWRBcGlLZXlQcm9wcyA9IHt9LFxuICApIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIHRoaXMuYXBpS2V5ID0gbmV3IEFwaUtleSh0aGlzLCBcIlJlc291cmNlXCIsIHByb3BzKTtcblxuICAgIGlmIChwcm9wcy5hcGlTdGFnZXMgfHwgcHJvcHMucXVvdGEgfHwgcHJvcHMudGhyb3R0bGUpIHtcbiAgICAgIGlmICh0aGlzLmFwaUtleS51c2FnZVBsYW4pIHtcbiAgICAgICAgLy8gTk9URTogQ3JlYXRpbmcgYW4gYWRkaXRpb25hbCB1c2FnZSBwbGFuIGlzIGRlZmF1bHQgQVdTQ0RLIGJlaGF2aW9yLlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi92Mi4xODYuMC9wYWNrYWdlcy9hd3MtY2RrLWxpYi9hd3MtYXBpZ2F0ZXdheS9saWIvYXBpLWtleS50cyNMMjY4LUwyNzVcbiAgICAgICAgQW5ub3RhdGlvbnMub2YodGhpcy5hcGlLZXkpLmFkZFdhcm5pbmcoXG4gICAgICAgICAgXCJVc2FnZVBsYW4gaXMgYWxyZWFkeSBjcmVhdGVkIGZvciB0aGlzIEFwaUtleS4gQSBzZXBhcmF0ZSBVc2FnZVBsYW4gd2l0aCByYXRlIGxpbWl0aW5nIHdpbGwgYmUgY3JlYXRlZCBzZXBhcmF0ZWx5XCIsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjb25zdCB1c2FnZVBsYW4gPSBuZXcgVXNhZ2VQbGFuKHRoaXMsIFwiUmF0ZUxpbWl0ZWRVc2FnZVBsYW5cIiwge1xuICAgICAgICBhcGlTdGFnZXM6IHByb3BzLmFwaVN0YWdlcyxcbiAgICAgICAgcXVvdGE6IHByb3BzLnF1b3RhLFxuICAgICAgICB0aHJvdHRsZTogcHJvcHMudGhyb3R0bGUsXG4gICAgICB9KTtcbiAgICAgIHVzYWdlUGxhbi5hZGRBcGlLZXkodGhpcy5hcGlLZXkpO1xuICAgIH1cblxuICAgIHRoaXMua2V5SWQgPSB0aGlzLmFwaUtleS5rZXlJZDtcbiAgICB0aGlzLmtleUFybiA9IHRoaXMuYXBpS2V5LmtleUFybjtcbiAgfVxufVxuXG5jb25zdCByZWFkUGVybWlzc2lvbnMgPSBbXCJhcGlnYXRld2F5OkdFVFwiXTtcblxuY29uc3Qgd3JpdGVQZXJtaXNzaW9ucyA9IFtcbiAgXCJhcGlnYXRld2F5OlBPU1RcIixcbiAgXCJhcGlnYXRld2F5OlBVVFwiLFxuICBcImFwaWdhdGV3YXk6UEFUQ0hcIixcbiAgXCJhcGlnYXRld2F5OkRFTEVURVwiLFxuXTtcbiJdfQ==
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
export interface MetricWithDims<D> {
|
|
2
|
+
readonly namespace: string;
|
|
3
|
+
readonly metricName: string;
|
|
4
|
+
readonly statistic: string;
|
|
5
|
+
readonly dimensionsMap: D;
|
|
6
|
+
}
|
|
7
|
+
export declare class ApiGatewayMetrics {
|
|
8
|
+
static _4XxErrorSum(dimensions: {
|
|
9
|
+
ApiName: string;
|
|
10
|
+
Stage: string;
|
|
11
|
+
}): MetricWithDims<{
|
|
12
|
+
ApiName: string;
|
|
13
|
+
Stage: string;
|
|
14
|
+
}>;
|
|
15
|
+
static _4XxErrorSum(dimensions: {
|
|
16
|
+
ApiName: string;
|
|
17
|
+
}): MetricWithDims<{
|
|
18
|
+
ApiName: string;
|
|
19
|
+
}>;
|
|
20
|
+
static _4XxErrorSum(dimensions: {
|
|
21
|
+
ApiName: string;
|
|
22
|
+
Method: string;
|
|
23
|
+
Resource: string;
|
|
24
|
+
Stage: string;
|
|
25
|
+
}): MetricWithDims<{
|
|
26
|
+
ApiName: string;
|
|
27
|
+
Method: string;
|
|
28
|
+
Resource: string;
|
|
29
|
+
Stage: string;
|
|
30
|
+
}>;
|
|
31
|
+
static _5XxErrorSum(dimensions: {
|
|
32
|
+
ApiName: string;
|
|
33
|
+
Stage: string;
|
|
34
|
+
}): MetricWithDims<{
|
|
35
|
+
ApiName: string;
|
|
36
|
+
Stage: string;
|
|
37
|
+
}>;
|
|
38
|
+
static _5XxErrorSum(dimensions: {
|
|
39
|
+
ApiName: string;
|
|
40
|
+
}): MetricWithDims<{
|
|
41
|
+
ApiName: string;
|
|
42
|
+
}>;
|
|
43
|
+
static _5XxErrorSum(dimensions: {
|
|
44
|
+
ApiName: string;
|
|
45
|
+
Method: string;
|
|
46
|
+
Resource: string;
|
|
47
|
+
Stage: string;
|
|
48
|
+
}): MetricWithDims<{
|
|
49
|
+
ApiName: string;
|
|
50
|
+
Method: string;
|
|
51
|
+
Resource: string;
|
|
52
|
+
Stage: string;
|
|
53
|
+
}>;
|
|
54
|
+
static cacheHitCountSum(dimensions: {
|
|
55
|
+
ApiName: string;
|
|
56
|
+
Stage: string;
|
|
57
|
+
}): MetricWithDims<{
|
|
58
|
+
ApiName: string;
|
|
59
|
+
Stage: string;
|
|
60
|
+
}>;
|
|
61
|
+
static cacheHitCountSum(dimensions: {
|
|
62
|
+
ApiName: string;
|
|
63
|
+
}): MetricWithDims<{
|
|
64
|
+
ApiName: string;
|
|
65
|
+
}>;
|
|
66
|
+
static cacheHitCountSum(dimensions: {
|
|
67
|
+
ApiName: string;
|
|
68
|
+
Method: string;
|
|
69
|
+
Resource: string;
|
|
70
|
+
Stage: string;
|
|
71
|
+
}): MetricWithDims<{
|
|
72
|
+
ApiName: string;
|
|
73
|
+
Method: string;
|
|
74
|
+
Resource: string;
|
|
75
|
+
Stage: string;
|
|
76
|
+
}>;
|
|
77
|
+
static cacheMissCountSum(dimensions: {
|
|
78
|
+
ApiName: string;
|
|
79
|
+
Stage: string;
|
|
80
|
+
}): MetricWithDims<{
|
|
81
|
+
ApiName: string;
|
|
82
|
+
Stage: string;
|
|
83
|
+
}>;
|
|
84
|
+
static cacheMissCountSum(dimensions: {
|
|
85
|
+
ApiName: string;
|
|
86
|
+
}): MetricWithDims<{
|
|
87
|
+
ApiName: string;
|
|
88
|
+
}>;
|
|
89
|
+
static cacheMissCountSum(dimensions: {
|
|
90
|
+
ApiName: string;
|
|
91
|
+
Method: string;
|
|
92
|
+
Resource: string;
|
|
93
|
+
Stage: string;
|
|
94
|
+
}): MetricWithDims<{
|
|
95
|
+
ApiName: string;
|
|
96
|
+
Method: string;
|
|
97
|
+
Resource: string;
|
|
98
|
+
Stage: string;
|
|
99
|
+
}>;
|
|
100
|
+
static countSum(dimensions: {
|
|
101
|
+
ApiName: string;
|
|
102
|
+
Stage: string;
|
|
103
|
+
}): MetricWithDims<{
|
|
104
|
+
ApiName: string;
|
|
105
|
+
Stage: string;
|
|
106
|
+
}>;
|
|
107
|
+
static countSum(dimensions: {
|
|
108
|
+
ApiName: string;
|
|
109
|
+
}): MetricWithDims<{
|
|
110
|
+
ApiName: string;
|
|
111
|
+
}>;
|
|
112
|
+
static countSum(dimensions: {
|
|
113
|
+
ApiName: string;
|
|
114
|
+
Method: string;
|
|
115
|
+
Resource: string;
|
|
116
|
+
Stage: string;
|
|
117
|
+
}): MetricWithDims<{
|
|
118
|
+
ApiName: string;
|
|
119
|
+
Method: string;
|
|
120
|
+
Resource: string;
|
|
121
|
+
Stage: string;
|
|
122
|
+
}>;
|
|
123
|
+
static integrationLatencyAverage(dimensions: {
|
|
124
|
+
ApiName: string;
|
|
125
|
+
Stage: string;
|
|
126
|
+
}): MetricWithDims<{
|
|
127
|
+
ApiName: string;
|
|
128
|
+
Stage: string;
|
|
129
|
+
}>;
|
|
130
|
+
static integrationLatencyAverage(dimensions: {
|
|
131
|
+
ApiName: string;
|
|
132
|
+
}): MetricWithDims<{
|
|
133
|
+
ApiName: string;
|
|
134
|
+
}>;
|
|
135
|
+
static integrationLatencyAverage(dimensions: {
|
|
136
|
+
ApiName: string;
|
|
137
|
+
Method: string;
|
|
138
|
+
Resource: string;
|
|
139
|
+
Stage: string;
|
|
140
|
+
}): MetricWithDims<{
|
|
141
|
+
ApiName: string;
|
|
142
|
+
Method: string;
|
|
143
|
+
Resource: string;
|
|
144
|
+
Stage: string;
|
|
145
|
+
}>;
|
|
146
|
+
static latencyAverage(dimensions: {
|
|
147
|
+
ApiName: string;
|
|
148
|
+
Stage: string;
|
|
149
|
+
}): MetricWithDims<{
|
|
150
|
+
ApiName: string;
|
|
151
|
+
Stage: string;
|
|
152
|
+
}>;
|
|
153
|
+
static latencyAverage(dimensions: {
|
|
154
|
+
ApiName: string;
|
|
155
|
+
}): MetricWithDims<{
|
|
156
|
+
ApiName: string;
|
|
157
|
+
}>;
|
|
158
|
+
static latencyAverage(dimensions: {
|
|
159
|
+
ApiName: string;
|
|
160
|
+
Method: string;
|
|
161
|
+
Resource: string;
|
|
162
|
+
Stage: string;
|
|
163
|
+
}): MetricWithDims<{
|
|
164
|
+
ApiName: string;
|
|
165
|
+
Method: string;
|
|
166
|
+
Resource: string;
|
|
167
|
+
Stage: string;
|
|
168
|
+
}>;
|
|
169
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ApiGatewayMetrics = void 0;
|
|
4
|
+
class ApiGatewayMetrics {
|
|
5
|
+
static _4XxErrorSum(dimensions) {
|
|
6
|
+
return {
|
|
7
|
+
"namespace": "AWS/ApiGateway",
|
|
8
|
+
"metricName": "4XXError",
|
|
9
|
+
"dimensionsMap": dimensions,
|
|
10
|
+
"statistic": "Sum"
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
static _5XxErrorSum(dimensions) {
|
|
14
|
+
return {
|
|
15
|
+
"namespace": "AWS/ApiGateway",
|
|
16
|
+
"metricName": "5XXError",
|
|
17
|
+
"dimensionsMap": dimensions,
|
|
18
|
+
"statistic": "Sum"
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
static cacheHitCountSum(dimensions) {
|
|
22
|
+
return {
|
|
23
|
+
"namespace": "AWS/ApiGateway",
|
|
24
|
+
"metricName": "CacheHitCount",
|
|
25
|
+
"dimensionsMap": dimensions,
|
|
26
|
+
"statistic": "Sum"
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
static cacheMissCountSum(dimensions) {
|
|
30
|
+
return {
|
|
31
|
+
"namespace": "AWS/ApiGateway",
|
|
32
|
+
"metricName": "CacheMissCount",
|
|
33
|
+
"dimensionsMap": dimensions,
|
|
34
|
+
"statistic": "Sum"
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
static countSum(dimensions) {
|
|
38
|
+
return {
|
|
39
|
+
"namespace": "AWS/ApiGateway",
|
|
40
|
+
"metricName": "Count",
|
|
41
|
+
"dimensionsMap": dimensions,
|
|
42
|
+
"statistic": "Sum"
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
static integrationLatencyAverage(dimensions) {
|
|
46
|
+
return {
|
|
47
|
+
"namespace": "AWS/ApiGateway",
|
|
48
|
+
"metricName": "IntegrationLatency",
|
|
49
|
+
"dimensionsMap": dimensions,
|
|
50
|
+
"statistic": "Average"
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
static latencyAverage(dimensions) {
|
|
54
|
+
return {
|
|
55
|
+
"namespace": "AWS/ApiGateway",
|
|
56
|
+
"metricName": "Latency",
|
|
57
|
+
"dimensionsMap": dimensions,
|
|
58
|
+
"statistic": "Average"
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
exports.ApiGatewayMetrics = ApiGatewayMetrics;
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpZ2F0ZXdheS1jYW5uZWQtbWV0cmljcy5nZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzL2NvbXB1dGUvYXBpZ2F0ZXdheS1jYW5uZWQtbWV0cmljcy5nZW5lcmF0ZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBV0EsTUFBYSxpQkFBaUI7SUFPckIsTUFBTSxDQUFDLFlBQVksQ0FBQyxVQUFlO1FBQ3hDLE9BQU87WUFDTCxXQUFXLEVBQUUsZ0JBQWdCO1lBQzdCLFlBQVksRUFBRSxVQUFVO1lBQ3hCLGVBQWUsRUFBRSxVQUFVO1lBQzNCLFdBQVcsRUFBRSxLQUFLO1NBQ25CLENBQUM7SUFDSixDQUFDO0lBUU0sTUFBTSxDQUFDLFlBQVksQ0FBQyxVQUFlO1FBQ3hDLE9BQU87WUFDTCxXQUFXLEVBQUUsZ0JBQWdCO1lBQzdCLFlBQVksRUFBRSxVQUFVO1lBQ3hCLGVBQWUsRUFBRSxVQUFVO1lBQzNCLFdBQVcsRUFBRSxLQUFLO1NBQ25CLENBQUM7SUFDSixDQUFDO0lBUU0sTUFBTSxDQUFDLGdCQUFnQixDQUFDLFVBQWU7UUFDNUMsT0FBTztZQUNMLFdBQVcsRUFBRSxnQkFBZ0I7WUFDN0IsWUFBWSxFQUFFLGVBQWU7WUFDN0IsZUFBZSxFQUFFLFVBQVU7WUFDM0IsV0FBVyxFQUFFLEtBQUs7U0FDbkIsQ0FBQztJQUNKLENBQUM7SUFRTSxNQUFNLENBQUMsaUJBQWlCLENBQUMsVUFBZTtRQUM3QyxPQUFPO1lBQ0wsV0FBVyxFQUFFLGdCQUFnQjtZQUM3QixZQUFZLEVBQUUsZ0JBQWdCO1lBQzlCLGVBQWUsRUFBRSxVQUFVO1lBQzNCLFdBQVcsRUFBRSxLQUFLO1NBQ25CLENBQUM7SUFDSixDQUFDO0lBUU0sTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFlO1FBQ3BDLE9BQU87WUFDTCxXQUFXLEVBQUUsZ0JBQWdCO1lBQzdCLFlBQVksRUFBRSxPQUFPO1lBQ3JCLGVBQWUsRUFBRSxVQUFVO1lBQzNCLFdBQVcsRUFBRSxLQUFLO1NBQ25CLENBQUM7SUFDSixDQUFDO0lBUU0sTUFBTSxDQUFDLHlCQUF5QixDQUFDLFVBQWU7UUFDckQsT0FBTztZQUNMLFdBQVcsRUFBRSxnQkFBZ0I7WUFDN0IsWUFBWSxFQUFFLG9CQUFvQjtZQUNsQyxlQUFlLEVBQUUsVUFBVTtZQUMzQixXQUFXLEVBQUUsU0FBUztTQUN2QixDQUFDO0lBQ0osQ0FBQztJQVFNLE1BQU0sQ0FBQyxjQUFjLENBQUMsVUFBZTtRQUMxQyxPQUFPO1lBQ0wsV0FBVyxFQUFFLGdCQUFnQjtZQUM3QixZQUFZLEVBQUUsU0FBUztZQUN2QixlQUFlLEVBQUUsVUFBVTtZQUMzQixXQUFXLEVBQUUsU0FBUztTQUN2QixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBekdELDhDQXlHQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHByZXR0aWVyL3ByZXR0aWVyLG1heC1sZW4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWV0cmljV2l0aERpbXM8RD4ge1xuICByZWFkb25seSBuYW1lc3BhY2U6IHN0cmluZztcblxuICByZWFkb25seSBtZXRyaWNOYW1lOiBzdHJpbmc7XG5cbiAgcmVhZG9ubHkgc3RhdGlzdGljOiBzdHJpbmc7XG5cbiAgcmVhZG9ubHkgZGltZW5zaW9uc01hcDogRDtcbn1cblxuZXhwb3J0IGNsYXNzIEFwaUdhdGV3YXlNZXRyaWNzIHtcbiAgcHVibGljIHN0YXRpYyBfNFh4RXJyb3JTdW0oZGltZW5zaW9uczogeyBBcGlOYW1lOiBzdHJpbmc7IFN0YWdlOiBzdHJpbmc7IH0pOiBNZXRyaWNXaXRoRGltczx7IEFwaU5hbWU6IHN0cmluZzsgU3RhZ2U6IHN0cmluZzsgfT47XG5cbiAgcHVibGljIHN0YXRpYyBfNFh4RXJyb3JTdW0oZGltZW5zaW9uczogeyBBcGlOYW1lOiBzdHJpbmc7IH0pOiBNZXRyaWNXaXRoRGltczx7IEFwaU5hbWU6IHN0cmluZzsgfT47XG5cbiAgcHVibGljIHN0YXRpYyBfNFh4RXJyb3JTdW0oZGltZW5zaW9uczogeyBBcGlOYW1lOiBzdHJpbmc7IE1ldGhvZDogc3RyaW5nOyBSZXNvdXJjZTogc3RyaW5nOyBTdGFnZTogc3RyaW5nOyB9KTogTWV0cmljV2l0aERpbXM8eyBBcGlOYW1lOiBzdHJpbmc7IE1ldGhvZDogc3RyaW5nOyBSZXNvdXJjZTogc3RyaW5nOyBTdGFnZTogc3RyaW5nOyB9PjtcblxuICBwdWJsaWMgc3RhdGljIF80WHhFcnJvclN1bShkaW1lbnNpb25zOiBhbnkpOiBNZXRyaWNXaXRoRGltczxhbnk+IHtcbiAgICByZXR1cm4ge1xuICAgICAgXCJuYW1lc3BhY2VcIjogXCJBV1MvQXBpR2F0ZXdheVwiLFxuICAgICAgXCJtZXRyaWNOYW1lXCI6IFwiNFhYRXJyb3JcIixcbiAgICAgIFwiZGltZW5zaW9uc01hcFwiOiBkaW1lbnNpb25zLFxuICAgICAgXCJzdGF0aXN0aWNcIjogXCJTdW1cIlxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIF81WHhFcnJvclN1bShkaW1lbnNpb25zOiB7IEFwaU5hbWU6IHN0cmluZzsgU3RhZ2U6IHN0cmluZzsgfSk6IE1ldHJpY1dpdGhEaW1zPHsgQXBpTmFtZTogc3RyaW5nOyBTdGFnZTogc3RyaW5nOyB9PjtcblxuICBwdWJsaWMgc3RhdGljIF81WHhFcnJvclN1bShkaW1lbnNpb25zOiB7IEFwaU5hbWU6IHN0cmluZzsgfSk6IE1ldHJpY1dpdGhEaW1zPHsgQXBpTmFtZTogc3RyaW5nOyB9PjtcblxuICBwdWJsaWMgc3RhdGljIF81WHhFcnJvclN1bShkaW1lbnNpb25zOiB7IEFwaU5hbWU6IHN0cmluZzsgTWV0aG9kOiBzdHJpbmc7IFJlc291cmNlOiBzdHJpbmc7IFN0YWdlOiBzdHJpbmc7IH0pOiBNZXRyaWNXaXRoRGltczx7IEFwaU5hbWU6IHN0cmluZzsgTWV0aG9kOiBzdHJpbmc7IFJlc291cmNlOiBzdHJpbmc7IFN0YWdlOiBzdHJpbmc7IH0+O1xuXG4gIHB1YmxpYyBzdGF0aWMgXzVYeEVycm9yU3VtKGRpbWVuc2lvbnM6IGFueSk6IE1ldHJpY1dpdGhEaW1zPGFueT4ge1xuICAgIHJldHVybiB7XG4gICAgICBcIm5hbWVzcGFjZVwiOiBcIkFXUy9BcGlHYXRld2F5XCIsXG4gICAgICBcIm1ldHJpY05hbWVcIjogXCI1WFhFcnJvclwiLFxuICAgICAgXCJkaW1lbnNpb25zTWFwXCI6IGRpbWVuc2lvbnMsXG4gICAgICBcInN0YXRpc3RpY1wiOiBcIlN1bVwiXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgY2FjaGVIaXRDb3VudFN1bShkaW1lbnNpb25zOiB7IEFwaU5hbWU6IHN0cmluZzsgU3RhZ2U6IHN0cmluZzsgfSk6IE1ldHJpY1dpdGhEaW1zPHsgQXBpTmFtZTogc3RyaW5nOyBTdGFnZTogc3RyaW5nOyB9PjtcblxuICBwdWJsaWMgc3RhdGljIGNhY2hlSGl0Q291bnRTdW0oZGltZW5zaW9uczogeyBBcGlOYW1lOiBzdHJpbmc7IH0pOiBNZXRyaWNXaXRoRGltczx7IEFwaU5hbWU6IHN0cmluZzsgfT47XG5cbiAgcHVibGljIHN0YXRpYyBjYWNoZUhpdENvdW50U3VtKGRpbWVuc2lvbnM6IHsgQXBpTmFtZTogc3RyaW5nOyBNZXRob2Q6IHN0cmluZzsgUmVzb3VyY2U6IHN0cmluZzsgU3RhZ2U6IHN0cmluZzsgfSk6IE1ldHJpY1dpdGhEaW1zPHsgQXBpTmFtZTogc3RyaW5nOyBNZXRob2Q6IHN0cmluZzsgUmVzb3VyY2U6IHN0cmluZzsgU3RhZ2U6IHN0cmluZzsgfT47XG5cbiAgcHVibGljIHN0YXRpYyBjYWNoZUhpdENvdW50U3VtKGRpbWVuc2lvbnM6IGFueSk6IE1ldHJpY1dpdGhEaW1zPGFueT4ge1xuICAgIHJldHVybiB7XG4gICAgICBcIm5hbWVzcGFjZVwiOiBcIkFXUy9BcGlHYXRld2F5XCIsXG4gICAgICBcIm1ldHJpY05hbWVcIjogXCJDYWNoZUhpdENvdW50XCIsXG4gICAgICBcImRpbWVuc2lvbnNNYXBcIjogZGltZW5zaW9ucyxcbiAgICAgIFwic3RhdGlzdGljXCI6IFwiU3VtXCJcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBjYWNoZU1pc3NDb3VudFN1bShkaW1lbnNpb25zOiB7IEFwaU5hbWU6IHN0cmluZzsgU3RhZ2U6IHN0cmluZzsgfSk6IE1ldHJpY1dpdGhEaW1zPHsgQXBpTmFtZTogc3RyaW5nOyBTdGFnZTogc3RyaW5nOyB9PjtcblxuICBwdWJsaWMgc3RhdGljIGNhY2hlTWlzc0NvdW50U3VtKGRpbWVuc2lvbnM6IHsgQXBpTmFtZTogc3RyaW5nOyB9KTogTWV0cmljV2l0aERpbXM8eyBBcGlOYW1lOiBzdHJpbmc7IH0+O1xuXG4gIHB1YmxpYyBzdGF0aWMgY2FjaGVNaXNzQ291bnRTdW0oZGltZW5zaW9uczogeyBBcGlOYW1lOiBzdHJpbmc7IE1ldGhvZDogc3RyaW5nOyBSZXNvdXJjZTogc3RyaW5nOyBTdGFnZTogc3RyaW5nOyB9KTogTWV0cmljV2l0aERpbXM8eyBBcGlOYW1lOiBzdHJpbmc7IE1ldGhvZDogc3RyaW5nOyBSZXNvdXJjZTogc3RyaW5nOyBTdGFnZTogc3RyaW5nOyB9PjtcblxuICBwdWJsaWMgc3RhdGljIGNhY2hlTWlzc0NvdW50U3VtKGRpbWVuc2lvbnM6IGFueSk6IE1ldHJpY1dpdGhEaW1zPGFueT4ge1xuICAgIHJldHVybiB7XG4gICAgICBcIm5hbWVzcGFjZVwiOiBcIkFXUy9BcGlHYXRld2F5XCIsXG4gICAgICBcIm1ldHJpY05hbWVcIjogXCJDYWNoZU1pc3NDb3VudFwiLFxuICAgICAgXCJkaW1lbnNpb25zTWFwXCI6IGRpbWVuc2lvbnMsXG4gICAgICBcInN0YXRpc3RpY1wiOiBcIlN1bVwiXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgY291bnRTdW0oZGltZW5zaW9uczogeyBBcGlOYW1lOiBzdHJpbmc7IFN0YWdlOiBzdHJpbmc7IH0pOiBNZXRyaWNXaXRoRGltczx7IEFwaU5hbWU6IHN0cmluZzsgU3RhZ2U6IHN0cmluZzsgfT47XG5cbiAgcHVibGljIHN0YXRpYyBjb3VudFN1bShkaW1lbnNpb25zOiB7IEFwaU5hbWU6IHN0cmluZzsgfSk6IE1ldHJpY1dpdGhEaW1zPHsgQXBpTmFtZTogc3RyaW5nOyB9PjtcblxuICBwdWJsaWMgc3RhdGljIGNvdW50U3VtKGRpbWVuc2lvbnM6IHsgQXBpTmFtZTogc3RyaW5nOyBNZXRob2Q6IHN0cmluZzsgUmVzb3VyY2U6IHN0cmluZzsgU3RhZ2U6IHN0cmluZzsgfSk6IE1ldHJpY1dpdGhEaW1zPHsgQXBpTmFtZTogc3RyaW5nOyBNZXRob2Q6IHN0cmluZzsgUmVzb3VyY2U6IHN0cmluZzsgU3RhZ2U6IHN0cmluZzsgfT47XG5cbiAgcHVibGljIHN0YXRpYyBjb3VudFN1bShkaW1lbnNpb25zOiBhbnkpOiBNZXRyaWNXaXRoRGltczxhbnk+IHtcbiAgICByZXR1cm4ge1xuICAgICAgXCJuYW1lc3BhY2VcIjogXCJBV1MvQXBpR2F0ZXdheVwiLFxuICAgICAgXCJtZXRyaWNOYW1lXCI6IFwiQ291bnRcIixcbiAgICAgIFwiZGltZW5zaW9uc01hcFwiOiBkaW1lbnNpb25zLFxuICAgICAgXCJzdGF0aXN0aWNcIjogXCJTdW1cIlxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGludGVncmF0aW9uTGF0ZW5jeUF2ZXJhZ2UoZGltZW5zaW9uczogeyBBcGlOYW1lOiBzdHJpbmc7IFN0YWdlOiBzdHJpbmc7IH0pOiBNZXRyaWNXaXRoRGltczx7IEFwaU5hbWU6IHN0cmluZzsgU3RhZ2U6IHN0cmluZzsgfT47XG5cbiAgcHVibGljIHN0YXRpYyBpbnRlZ3JhdGlvbkxhdGVuY3lBdmVyYWdlKGRpbWVuc2lvbnM6IHsgQXBpTmFtZTogc3RyaW5nOyB9KTogTWV0cmljV2l0aERpbXM8eyBBcGlOYW1lOiBzdHJpbmc7IH0+O1xuXG4gIHB1YmxpYyBzdGF0aWMgaW50ZWdyYXRpb25MYXRlbmN5QXZlcmFnZShkaW1lbnNpb25zOiB7IEFwaU5hbWU6IHN0cmluZzsgTWV0aG9kOiBzdHJpbmc7IFJlc291cmNlOiBzdHJpbmc7IFN0YWdlOiBzdHJpbmc7IH0pOiBNZXRyaWNXaXRoRGltczx7IEFwaU5hbWU6IHN0cmluZzsgTWV0aG9kOiBzdHJpbmc7IFJlc291cmNlOiBzdHJpbmc7IFN0YWdlOiBzdHJpbmc7IH0+O1xuXG4gIHB1YmxpYyBzdGF0aWMgaW50ZWdyYXRpb25MYXRlbmN5QXZlcmFnZShkaW1lbnNpb25zOiBhbnkpOiBNZXRyaWNXaXRoRGltczxhbnk+IHtcbiAgICByZXR1cm4ge1xuICAgICAgXCJuYW1lc3BhY2VcIjogXCJBV1MvQXBpR2F0ZXdheVwiLFxuICAgICAgXCJtZXRyaWNOYW1lXCI6IFwiSW50ZWdyYXRpb25MYXRlbmN5XCIsXG4gICAgICBcImRpbWVuc2lvbnNNYXBcIjogZGltZW5zaW9ucyxcbiAgICAgIFwic3RhdGlzdGljXCI6IFwiQXZlcmFnZVwiXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgbGF0ZW5jeUF2ZXJhZ2UoZGltZW5zaW9uczogeyBBcGlOYW1lOiBzdHJpbmc7IFN0YWdlOiBzdHJpbmc7IH0pOiBNZXRyaWNXaXRoRGltczx7IEFwaU5hbWU6IHN0cmluZzsgU3RhZ2U6IHN0cmluZzsgfT47XG5cbiAgcHVibGljIHN0YXRpYyBsYXRlbmN5QXZlcmFnZShkaW1lbnNpb25zOiB7IEFwaU5hbWU6IHN0cmluZzsgfSk6IE1ldHJpY1dpdGhEaW1zPHsgQXBpTmFtZTogc3RyaW5nOyB9PjtcblxuICBwdWJsaWMgc3RhdGljIGxhdGVuY3lBdmVyYWdlKGRpbWVuc2lvbnM6IHsgQXBpTmFtZTogc3RyaW5nOyBNZXRob2Q6IHN0cmluZzsgUmVzb3VyY2U6IHN0cmluZzsgU3RhZ2U6IHN0cmluZzsgfSk6IE1ldHJpY1dpdGhEaW1zPHsgQXBpTmFtZTogc3RyaW5nOyBNZXRob2Q6IHN0cmluZzsgUmVzb3VyY2U6IHN0cmluZzsgU3RhZ2U6IHN0cmluZzsgfT47XG5cbiAgcHVibGljIHN0YXRpYyBsYXRlbmN5QXZlcmFnZShkaW1lbnNpb25zOiBhbnkpOiBNZXRyaWNXaXRoRGltczxhbnk+IHtcbiAgICByZXR1cm4ge1xuICAgICAgXCJuYW1lc3BhY2VcIjogXCJBV1MvQXBpR2F0ZXdheVwiLFxuICAgICAgXCJtZXRyaWNOYW1lXCI6IFwiTGF0ZW5jeVwiLFxuICAgICAgXCJkaW1lbnNpb25zTWFwXCI6IGRpbWVuc2lvbnMsXG4gICAgICBcInN0YXRpc3RpY1wiOiBcIkF2ZXJhZ2VcIlxuICAgIH07XG4gIH1cbn0iXX0=
|