terraconstructs 0.0.8
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/.envrc +5 -0
- package/.jsii +79780 -0
- package/.mise.toml +8 -0
- package/.nvmrc +1 -0
- package/.terraform-version +1 -0
- package/.terraform.d/plugin-cache/.gitignore +5 -0
- package/LICENSE +674 -0
- package/NOTICE.txt +12 -0
- package/README.md +42 -0
- package/bun.lockb +0 -0
- package/go.mod +158 -0
- package/go.sum +1206 -0
- package/lib/aws/arn.d.ts +187 -0
- package/lib/aws/arn.js +383 -0
- package/lib/aws/aws-construct.d.ts +76 -0
- package/lib/aws/aws-construct.js +38 -0
- package/lib/aws/aws-stack.d.ts +201 -0
- package/lib/aws/aws-stack.js +303 -0
- package/lib/aws/cloudwatch/actions/ec2.d.ts +35 -0
- package/lib/aws/cloudwatch/actions/ec2.js +48 -0
- package/lib/aws/cloudwatch/actions/index.d.ts +2 -0
- package/lib/aws/cloudwatch/actions/index.js +24 -0
- package/lib/aws/cloudwatch/actions/lambda.d.ts +16 -0
- package/lib/aws/cloudwatch/actions/lambda.js +48 -0
- package/lib/aws/cloudwatch/alarm-action.d.ts +23 -0
- package/lib/aws/cloudwatch/alarm-action.js +4 -0
- package/lib/aws/cloudwatch/alarm-base.d.ts +84 -0
- package/lib/aws/cloudwatch/alarm-base.js +64 -0
- package/lib/aws/cloudwatch/alarm-rule.d.ts +61 -0
- package/lib/aws/cloudwatch/alarm-rule.js +116 -0
- package/lib/aws/cloudwatch/alarm-status-widget.d.ts +77 -0
- package/lib/aws/cloudwatch/alarm-status-widget.js +62 -0
- package/lib/aws/cloudwatch/alarm.d.ts +158 -0
- package/lib/aws/cloudwatch/alarm.js +410 -0
- package/lib/aws/cloudwatch/composite-alarm.d.ts +88 -0
- package/lib/aws/cloudwatch/composite-alarm.js +98 -0
- package/lib/aws/cloudwatch/dashboard.d.ts +137 -0
- package/lib/aws/cloudwatch/dashboard.js +141 -0
- package/lib/aws/cloudwatch/data-protection-policy.d.ts +184 -0
- package/lib/aws/cloudwatch/data-protection-policy.js +246 -0
- package/lib/aws/cloudwatch/graph.d.ts +792 -0
- package/lib/aws/cloudwatch/graph.js +537 -0
- package/lib/aws/cloudwatch/index.d.ts +26 -0
- package/lib/aws/cloudwatch/index.js +49 -0
- package/lib/aws/cloudwatch/layout.d.ts +89 -0
- package/lib/aws/cloudwatch/layout.js +147 -0
- package/lib/aws/cloudwatch/log-destinations/index.d.ts +2 -0
- package/lib/aws/cloudwatch/log-destinations/index.js +20 -0
- package/lib/aws/cloudwatch/log-destinations/kinesis.d.ts +29 -0
- package/lib/aws/cloudwatch/log-destinations/kinesis.js +52 -0
- package/lib/aws/cloudwatch/log-destinations/lambda.d.ts +22 -0
- package/lib/aws/cloudwatch/log-destinations/lambda.js +46 -0
- package/lib/aws/cloudwatch/log-group.d.ts +453 -0
- package/lib/aws/cloudwatch/log-group.js +350 -0
- package/lib/aws/cloudwatch/log-query.d.ts +91 -0
- package/lib/aws/cloudwatch/log-query.js +85 -0
- package/lib/aws/cloudwatch/log-stream.d.ts +57 -0
- package/lib/aws/cloudwatch/log-stream.js +57 -0
- package/lib/aws/cloudwatch/metric-filter.d.ts +30 -0
- package/lib/aws/cloudwatch/metric-filter.js +69 -0
- package/lib/aws/cloudwatch/metric-types.d.ts +407 -0
- package/lib/aws/cloudwatch/metric-types.js +151 -0
- package/lib/aws/cloudwatch/metric.d.ts +492 -0
- package/lib/aws/cloudwatch/metric.js +493 -0
- package/lib/aws/cloudwatch/pattern.d.ts +195 -0
- package/lib/aws/cloudwatch/pattern.js +412 -0
- package/lib/aws/cloudwatch/policy.d.ts +43 -0
- package/lib/aws/cloudwatch/policy.js +50 -0
- package/lib/aws/cloudwatch/private/drop-empty-object-at-the-end-of-an-array-token.d.ts +14 -0
- package/lib/aws/cloudwatch/private/drop-empty-object-at-the-end-of-an-array-token.js +37 -0
- package/lib/aws/cloudwatch/private/env-tokens.d.ts +8 -0
- package/lib/aws/cloudwatch/private/env-tokens.js +48 -0
- package/lib/aws/cloudwatch/private/metric-util.d.ts +60 -0
- package/lib/aws/cloudwatch/private/metric-util.js +132 -0
- package/lib/aws/cloudwatch/private/object.d.ts +1 -0
- package/lib/aws/cloudwatch/private/object.js +18 -0
- package/lib/aws/cloudwatch/private/rendering.d.ts +60 -0
- package/lib/aws/cloudwatch/private/rendering.js +181 -0
- package/lib/aws/cloudwatch/private/statistic.d.ts +51 -0
- package/lib/aws/cloudwatch/private/statistic.js +176 -0
- package/lib/aws/cloudwatch/query-definition.d.ts +150 -0
- package/lib/aws/cloudwatch/query-definition.js +114 -0
- package/lib/aws/cloudwatch/stats.d.ts +150 -0
- package/lib/aws/cloudwatch/stats.js +207 -0
- package/lib/aws/cloudwatch/subscription-filter.d.ts +75 -0
- package/lib/aws/cloudwatch/subscription-filter.js +51 -0
- package/lib/aws/cloudwatch/text.d.ts +52 -0
- package/lib/aws/cloudwatch/text.js +53 -0
- package/lib/aws/cloudwatch/variable.d.ts +156 -0
- package/lib/aws/cloudwatch/variable.js +156 -0
- package/lib/aws/cloudwatch/widget.d.ts +62 -0
- package/lib/aws/cloudwatch/widget.js +45 -0
- package/lib/aws/compute/activity.d.ts +81 -0
- package/lib/aws/compute/activity.js +132 -0
- package/lib/aws/compute/architecture.d.ts +33 -0
- package/lib/aws/compute/architecture.js +42 -0
- package/lib/aws/compute/chain.d.ts +52 -0
- package/lib/aws/compute/chain.js +68 -0
- package/lib/aws/compute/condition.d.ts +202 -0
- package/lib/aws/compute/condition.js +409 -0
- package/lib/aws/compute/event-invoke-config.d.ts +74 -0
- package/lib/aws/compute/event-invoke-config.js +63 -0
- package/lib/aws/compute/event-source-filter.d.ts +64 -0
- package/lib/aws/compute/event-source-filter.js +86 -0
- package/lib/aws/compute/event-source-mapping.d.ts +310 -0
- package/lib/aws/compute/event-source-mapping.js +267 -0
- package/lib/aws/compute/event-sources/index.d.ts +4 -0
- package/lib/aws/compute/event-sources/index.js +28 -0
- package/lib/aws/compute/event-sources/s3-onfailure-destination.d.ts +13 -0
- package/lib/aws/compute/event-sources/s3-onfailure-destination.js +26 -0
- package/lib/aws/compute/event-sources/s3.d.ts +24 -0
- package/lib/aws/compute/event-sources/s3.js +25 -0
- package/lib/aws/compute/event-sources/sqs-dlq.d.ts +13 -0
- package/lib/aws/compute/event-sources/sqs-dlq.js +26 -0
- package/lib/aws/compute/event-sources/sqs.d.ts +75 -0
- package/lib/aws/compute/event-sources/sqs.js +84 -0
- package/lib/aws/compute/fields.d.ts +367 -0
- package/lib/aws/compute/fields.js +546 -0
- package/lib/aws/compute/function-alias.d.ts +148 -0
- package/lib/aws/compute/function-alias.js +176 -0
- package/lib/aws/compute/function-base.d.ts +314 -0
- package/lib/aws/compute/function-base.js +421 -0
- package/lib/aws/compute/function-destination.d.ts +42 -0
- package/lib/aws/compute/function-destination.js +18 -0
- package/lib/aws/compute/function-destinations/event-bridge.d.ts +19 -0
- package/lib/aws/compute/function-destinations/event-bridge.js +46 -0
- package/lib/aws/compute/function-destinations/function.d.ts +34 -0
- package/lib/aws/compute/function-destinations/function.js +55 -0
- package/lib/aws/compute/function-destinations/index.d.ts +3 -0
- package/lib/aws/compute/function-destinations/index.js +22 -0
- package/lib/aws/compute/function-destinations/sqs.d.ts +14 -0
- package/lib/aws/compute/function-destinations/sqs.js +27 -0
- package/lib/aws/compute/function-nodejs.d.ts +55 -0
- package/lib/aws/compute/function-nodejs.js +70 -0
- package/lib/aws/compute/function-permission.d.ts +83 -0
- package/lib/aws/compute/function-permission.js +3 -0
- package/lib/aws/compute/function-url.d.ts +210 -0
- package/lib/aws/compute/function-url.js +148 -0
- package/lib/aws/compute/function-vpc-config.generated.d.ts +36 -0
- package/lib/aws/compute/function-vpc-config.generated.js +3 -0
- package/lib/aws/compute/function.d.ts +492 -0
- package/lib/aws/compute/function.js +692 -0
- package/lib/aws/compute/index.d.ts +42 -0
- package/lib/aws/compute/index.js +64 -0
- package/lib/aws/compute/private/intrinstics.d.ts +86 -0
- package/lib/aws/compute/private/intrinstics.js +220 -0
- package/lib/aws/compute/private/json-path.d.ts +57 -0
- package/lib/aws/compute/private/json-path.js +351 -0
- package/lib/aws/compute/private/util.d.ts +1 -0
- package/lib/aws/compute/private/util.js +38 -0
- package/lib/aws/compute/state-graph.d.ts +100 -0
- package/lib/aws/compute/state-graph.js +177 -0
- package/lib/aws/compute/state-machine-fragment.d.ts +61 -0
- package/lib/aws/compute/state-machine-fragment.js +56 -0
- package/lib/aws/compute/state-machine.d.ts +323 -0
- package/lib/aws/compute/state-machine.js +392 -0
- package/lib/aws/compute/states/choice.d.ts +94 -0
- package/lib/aws/compute/states/choice.js +81 -0
- package/lib/aws/compute/states/custom-state.d.ts +55 -0
- package/lib/aws/compute/states/custom-state.js +114 -0
- package/lib/aws/compute/states/distributed-map/item-batcher.d.ts +64 -0
- package/lib/aws/compute/states/distributed-map/item-batcher.js +58 -0
- package/lib/aws/compute/states/distributed-map/item-reader.d.ts +256 -0
- package/lib/aws/compute/states/distributed-map/item-reader.js +253 -0
- package/lib/aws/compute/states/distributed-map/result-writer.d.ts +41 -0
- package/lib/aws/compute/states/distributed-map/result-writer.js +66 -0
- package/lib/aws/compute/states/distributed-map.d.ts +153 -0
- package/lib/aws/compute/states/distributed-map.js +207 -0
- package/lib/aws/compute/states/fail.d.ts +74 -0
- package/lib/aws/compute/states/fail.js +83 -0
- package/lib/aws/compute/states/map-base.d.ts +145 -0
- package/lib/aws/compute/states/map-base.js +109 -0
- package/lib/aws/compute/states/map.d.ts +76 -0
- package/lib/aws/compute/states/map.js +110 -0
- package/lib/aws/compute/states/parallel.d.ts +113 -0
- package/lib/aws/compute/states/parallel.js +100 -0
- package/lib/aws/compute/states/pass.d.ts +122 -0
- package/lib/aws/compute/states/pass.js +99 -0
- package/lib/aws/compute/states/private/state-type.d.ts +13 -0
- package/lib/aws/compute/states/private/state-type.js +19 -0
- package/lib/aws/compute/states/state.d.ts +276 -0
- package/lib/aws/compute/states/state.js +482 -0
- package/lib/aws/compute/states/succeed.d.ts +51 -0
- package/lib/aws/compute/states/succeed.js +32 -0
- package/lib/aws/compute/states/task-base.d.ts +225 -0
- package/lib/aws/compute/states/task-base.js +160 -0
- package/lib/aws/compute/states/task.d.ts +127 -0
- package/lib/aws/compute/states/task.js +92 -0
- package/lib/aws/compute/states/wait.d.ts +78 -0
- package/lib/aws/compute/states/wait.js +90 -0
- package/lib/aws/compute/step-functions-task.d.ts +78 -0
- package/lib/aws/compute/step-functions-task.js +27 -0
- package/lib/aws/compute/task-credentials.d.ts +45 -0
- package/lib/aws/compute/task-credentials.js +52 -0
- package/lib/aws/compute/task-input.d.ts +86 -0
- package/lib/aws/compute/task-input.js +107 -0
- package/lib/aws/compute/tasks/aws-sdk/call-aws-service.d.ts +73 -0
- package/lib/aws/compute/tasks/aws-sdk/call-aws-service.js +69 -0
- package/lib/aws/compute/tasks/eventbridge/put-events.d.ts +74 -0
- package/lib/aws/compute/tasks/eventbridge/put-events.js +94 -0
- package/lib/aws/compute/tasks/http/invoke.d.ts +104 -0
- package/lib/aws/compute/tasks/http/invoke.js +117 -0
- package/lib/aws/compute/tasks/index.d.ts +7 -0
- package/lib/aws/compute/tasks/index.js +42 -0
- package/lib/aws/compute/tasks/lambda/invoke.d.ts +106 -0
- package/lib/aws/compute/tasks/lambda/invoke.js +125 -0
- package/lib/aws/compute/tasks/private/task-utils.d.ts +8 -0
- package/lib/aws/compute/tasks/private/task-utils.js +36 -0
- package/lib/aws/compute/tasks/resource-arn-suffix.d.ts +3 -0
- package/lib/aws/compute/tasks/resource-arn-suffix.js +25 -0
- package/lib/aws/compute/tasks/sqs/send-message.d.ts +62 -0
- package/lib/aws/compute/tasks/sqs/send-message.js +70 -0
- package/lib/aws/compute/tasks/stepfunctions/invoke-activity.d.ts +36 -0
- package/lib/aws/compute/tasks/stepfunctions/invoke-activity.js +45 -0
- package/lib/aws/compute/tasks/stepfunctions/start-execution.d.ts +63 -0
- package/lib/aws/compute/tasks/stepfunctions/start-execution.js +123 -0
- package/lib/aws/compute/types.d.ts +214 -0
- package/lib/aws/compute/types.js +103 -0
- package/lib/aws/compute/util.d.ts +12 -0
- package/lib/aws/compute/util.js +29 -0
- package/lib/aws/edge/certificate.d.ts +144 -0
- package/lib/aws/edge/certificate.js +191 -0
- package/lib/aws/edge/distribution.d.ts +505 -0
- package/lib/aws/edge/distribution.js +444 -0
- package/lib/aws/edge/dns-alias-record-targets.d.ts +29 -0
- package/lib/aws/edge/dns-alias-record-targets.js +46 -0
- package/lib/aws/edge/dns-record.d.ts +536 -0
- package/lib/aws/edge/dns-record.js +532 -0
- package/lib/aws/edge/dns-zone.d.ts +169 -0
- package/lib/aws/edge/dns-zone.js +149 -0
- package/lib/aws/edge/function.d.ts +185 -0
- package/lib/aws/edge/function.js +141 -0
- package/lib/aws/edge/index.d.ts +8 -0
- package/lib/aws/edge/index.js +25 -0
- package/lib/aws/edge/key-value-store.d.ts +162 -0
- package/lib/aws/edge/key-value-store.js +163 -0
- package/lib/aws/edge/origin.d.ts +160 -0
- package/lib/aws/edge/origin.js +245 -0
- package/lib/aws/encryption/alias.d.ts +137 -0
- package/lib/aws/encryption/alias.js +216 -0
- package/lib/aws/encryption/index.d.ts +4 -0
- package/lib/aws/encryption/index.js +21 -0
- package/lib/aws/encryption/key-lookup.d.ts +11 -0
- package/lib/aws/encryption/key-lookup.js +4 -0
- package/lib/aws/encryption/key.d.ts +461 -0
- package/lib/aws/encryption/key.js +586 -0
- package/lib/aws/encryption/private/perms.d.ts +5 -0
- package/lib/aws/encryption/private/perms.js +30 -0
- package/lib/aws/encryption/via-service-principal.d.ts +11 -0
- package/lib/aws/encryption/via-service-principal.js +39 -0
- package/lib/aws/iam/grant.d.ts +221 -0
- package/lib/aws/iam/grant.js +239 -0
- package/lib/aws/iam/identity-base.d.ts +20 -0
- package/lib/aws/iam/identity-base.js +3 -0
- package/lib/aws/iam/index.d.ts +16 -0
- package/lib/aws/iam/index.js +34 -0
- package/lib/aws/iam/managed-policy.d.ts +227 -0
- package/lib/aws/iam/managed-policy.js +237 -0
- package/lib/aws/iam/oidc-provider.d.ts +120 -0
- package/lib/aws/iam/oidc-provider.js +82 -0
- package/lib/aws/iam/policy-document-config.generated.d.ts +78 -0
- package/lib/aws/iam/policy-document-config.generated.js +3 -0
- package/lib/aws/iam/policy-document.d.ts +150 -0
- package/lib/aws/iam/policy-document.js +172 -0
- package/lib/aws/iam/policy-statement-props.generated.d.ts +55 -0
- package/lib/aws/iam/policy-statement-props.generated.js +3 -0
- package/lib/aws/iam/policy-statement.d.ts +451 -0
- package/lib/aws/iam/policy-statement.js +947 -0
- package/lib/aws/iam/policy.d.ts +122 -0
- package/lib/aws/iam/policy.js +192 -0
- package/lib/aws/iam/principals.d.ts +668 -0
- package/lib/aws/iam/principals.js +1032 -0
- package/lib/aws/iam/private/adapter.d.ts +21 -0
- package/lib/aws/iam/private/adapter.js +51 -0
- package/lib/aws/iam/private/assume-role-policy.d.ts +8 -0
- package/lib/aws/iam/private/assume-role-policy.js +27 -0
- package/lib/aws/iam/private/comparable-principal.d.ts +6 -0
- package/lib/aws/iam/private/comparable-principal.js +20 -0
- package/lib/aws/iam/private/immutable-role.d.ts +43 -0
- package/lib/aws/iam/private/immutable-role.js +76 -0
- package/lib/aws/iam/private/imported-role.d.ts +49 -0
- package/lib/aws/iam/private/imported-role.js +103 -0
- package/lib/aws/iam/private/merge-statements.d.ts +44 -0
- package/lib/aws/iam/private/merge-statements.js +214 -0
- package/lib/aws/iam/private/postprocess-policy-document.d.ts +15 -0
- package/lib/aws/iam/private/postprocess-policy-document.js +102 -0
- package/lib/aws/iam/private/util.d.ts +37 -0
- package/lib/aws/iam/private/util.js +87 -0
- package/lib/aws/iam/role.d.ts +425 -0
- package/lib/aws/iam/role.js +407 -0
- package/lib/aws/iam/saml-provider.d.ts +79 -0
- package/lib/aws/iam/saml-provider.js +79 -0
- package/lib/aws/iam/unknown-principal.d.ts +32 -0
- package/lib/aws/iam/unknown-principal.js +45 -0
- package/lib/aws/iam/utils.d.ts +12 -0
- package/lib/aws/iam/utils.js +41 -0
- package/lib/aws/index.d.ts +13 -0
- package/lib/aws/index.js +34 -0
- package/lib/aws/log-retention.d.ts +97 -0
- package/lib/aws/log-retention.js +103 -0
- package/lib/aws/network/index.d.ts +4 -0
- package/lib/aws/network/index.js +21 -0
- package/lib/aws/network/network.d.ts +77 -0
- package/lib/aws/network/network.js +3 -0
- package/lib/aws/network/simple-ipv4-vpc.d.ts +84 -0
- package/lib/aws/network/simple-ipv4-vpc.js +236 -0
- package/lib/aws/network/subnet-group.d.ts +42 -0
- package/lib/aws/network/subnet-group.js +72 -0
- package/lib/aws/network/subnet.d.ts +95 -0
- package/lib/aws/network/subnet.js +123 -0
- package/lib/aws/notify/archive.d.ts +77 -0
- package/lib/aws/notify/archive.js +62 -0
- package/lib/aws/notify/connection.d.ts +276 -0
- package/lib/aws/notify/connection.js +261 -0
- package/lib/aws/notify/event-bus.d.ts +298 -0
- package/lib/aws/notify/event-bus.js +326 -0
- package/lib/aws/notify/event-pattern.d.ts +220 -0
- package/lib/aws/notify/event-pattern.js +197 -0
- package/lib/aws/notify/index.d.ts +15 -0
- package/lib/aws/notify/index.js +35 -0
- package/lib/aws/notify/input.d.ts +126 -0
- package/lib/aws/notify/input.js +282 -0
- package/lib/aws/notify/kinesis-canned-metrics.generated.d.ts +68 -0
- package/lib/aws/notify/kinesis-canned-metrics.generated.js +103 -0
- package/lib/aws/notify/kinesis-fixed-canned-metrics.d.ts +195 -0
- package/lib/aws/notify/kinesis-fixed-canned-metrics.js +155 -0
- package/lib/aws/notify/kinesis-stream.d.ts +705 -0
- package/lib/aws/notify/kinesis-stream.js +541 -0
- package/lib/aws/notify/on-event-options.d.ts +54 -0
- package/lib/aws/notify/on-event-options.js +3 -0
- package/lib/aws/notify/queue-config.generated.d.ts +85 -0
- package/lib/aws/notify/queue-config.generated.js +3 -0
- package/lib/aws/notify/queue-policy.d.ts +35 -0
- package/lib/aws/notify/queue-policy.js +39 -0
- package/lib/aws/notify/queue.d.ts +355 -0
- package/lib/aws/notify/queue.js +305 -0
- package/lib/aws/notify/resource-policy.d.ts +41 -0
- package/lib/aws/notify/resource-policy.js +43 -0
- package/lib/aws/notify/rule.d.ts +153 -0
- package/lib/aws/notify/rule.js +227 -0
- package/lib/aws/notify/schedule.d.ts +83 -0
- package/lib/aws/notify/schedule.js +116 -0
- package/lib/aws/notify/target.d.ts +102 -0
- package/lib/aws/notify/target.js +3 -0
- package/lib/aws/notify/targets/event-bus.d.ts +39 -0
- package/lib/aws/notify/targets/event-bus.js +40 -0
- package/lib/aws/notify/targets/function.d.ts +31 -0
- package/lib/aws/notify/targets/function.js +36 -0
- package/lib/aws/notify/targets/index.d.ts +6 -0
- package/lib/aws/notify/targets/index.js +37 -0
- package/lib/aws/notify/targets/log-group.d.ts +89 -0
- package/lib/aws/notify/targets/log-group.js +110 -0
- package/lib/aws/notify/targets/sqs.d.ts +45 -0
- package/lib/aws/notify/targets/sqs.js +73 -0
- package/lib/aws/notify/targets/state-machine.d.ts +36 -0
- package/lib/aws/notify/targets/state-machine.js +39 -0
- package/lib/aws/notify/targets/util.d.ts +71 -0
- package/lib/aws/notify/targets/util.js +130 -0
- package/lib/aws/notify/util.d.ts +13 -0
- package/lib/aws/notify/util.js +69 -0
- package/lib/aws/provider-config.generated.d.ts +220 -0
- package/lib/aws/provider-config.generated.js +3 -0
- package/lib/aws/storage/bucket-destination.d.ts +41 -0
- package/lib/aws/storage/bucket-destination.js +13 -0
- package/lib/aws/storage/bucket-notifications.d.ts +58 -0
- package/lib/aws/storage/bucket-notifications.js +169 -0
- package/lib/aws/storage/bucket-perms.d.ts +9 -0
- package/lib/aws/storage/bucket-perms.js +33 -0
- package/lib/aws/storage/bucket-policy.d.ts +51 -0
- package/lib/aws/storage/bucket-policy.js +53 -0
- package/lib/aws/storage/bucket-source.d.ts +41 -0
- package/lib/aws/storage/bucket-source.js +79 -0
- package/lib/aws/storage/bucket.d.ts +941 -0
- package/lib/aws/storage/bucket.js +869 -0
- package/lib/aws/storage/cors-config.generated.d.ts +57 -0
- package/lib/aws/storage/cors-config.generated.js +3 -0
- package/lib/aws/storage/cors-rule-config.generated.d.ts +38 -0
- package/lib/aws/storage/cors-rule-config.generated.js +3 -0
- package/lib/aws/storage/index.d.ts +12 -0
- package/lib/aws/storage/index.js +31 -0
- package/lib/aws/storage/lifecycle-config.generated.d.ts +55 -0
- package/lib/aws/storage/lifecycle-config.generated.js +3 -0
- package/lib/aws/storage/notification-targets/function.d.ts +11 -0
- package/lib/aws/storage/notification-targets/function.js +48 -0
- package/lib/aws/storage/notification-targets/index.d.ts +2 -0
- package/lib/aws/storage/notification-targets/index.js +21 -0
- package/lib/aws/storage/notification-targets/queue.d.ts +15 -0
- package/lib/aws/storage/notification-targets/queue.js +58 -0
- package/lib/aws/storage/origin-access-identity.d.ts +91 -0
- package/lib/aws/storage/origin-access-identity.js +76 -0
- package/lib/aws/storage/util.d.ts +40 -0
- package/lib/aws/storage/util.js +85 -0
- package/lib/aws/storage/website-config.generated.d.ts +73 -0
- package/lib/aws/storage/website-config.generated.js +3 -0
- package/lib/aws/util.d.ts +4 -0
- package/lib/aws/util.js +25 -0
- package/lib/construct-base.d.ts +69 -0
- package/lib/construct-base.js +89 -0
- package/lib/duration.d.ts +160 -0
- package/lib/duration.js +327 -0
- package/lib/index.d.ts +5 -0
- package/lib/index.js +24 -0
- package/lib/private/index.d.ts +2 -0
- package/lib/private/index.js +19 -0
- package/lib/private/terraform-dependables-aspect.d.ts +20 -0
- package/lib/private/terraform-dependables-aspect.js +95 -0
- package/lib/private/unique-resource-name.d.ts +9 -0
- package/lib/private/unique-resource-name.js +145 -0
- package/lib/size.d.ts +146 -0
- package/lib/size.js +220 -0
- package/lib/stack-base.d.ts +188 -0
- package/lib/stack-base.js +183 -0
- package/lib/token.d.ts +32 -0
- package/lib/token.js +54 -0
- package/node_modules/camel-case/LICENSE +21 -0
- package/node_modules/camel-case/README.md +47 -0
- package/node_modules/camel-case/dist/index.d.ts +5 -0
- package/node_modules/camel-case/dist/index.js +23 -0
- package/node_modules/camel-case/dist/index.js.map +1 -0
- package/node_modules/camel-case/dist/index.spec.d.ts +1 -0
- package/node_modules/camel-case/dist/index.spec.js +26 -0
- package/node_modules/camel-case/dist/index.spec.js.map +1 -0
- package/node_modules/camel-case/dist.es2015/index.d.ts +5 -0
- package/node_modules/camel-case/dist.es2015/index.js +17 -0
- package/node_modules/camel-case/dist.es2015/index.js.map +1 -0
- package/node_modules/camel-case/dist.es2015/index.spec.d.ts +1 -0
- package/node_modules/camel-case/dist.es2015/index.spec.js +24 -0
- package/node_modules/camel-case/dist.es2015/index.spec.js.map +1 -0
- package/node_modules/camel-case/package.json +89 -0
- package/node_modules/capital-case/LICENSE +21 -0
- package/node_modules/capital-case/README.md +37 -0
- package/node_modules/capital-case/dist/index.d.ts +4 -0
- package/node_modules/capital-case/dist/index.js +16 -0
- package/node_modules/capital-case/dist/index.js.map +1 -0
- package/node_modules/capital-case/dist/index.spec.d.ts +1 -0
- package/node_modules/capital-case/dist/index.spec.js +24 -0
- package/node_modules/capital-case/dist/index.spec.js.map +1 -0
- package/node_modules/capital-case/dist.es2015/index.d.ts +4 -0
- package/node_modules/capital-case/dist.es2015/index.js +11 -0
- package/node_modules/capital-case/dist.es2015/index.js.map +1 -0
- package/node_modules/capital-case/dist.es2015/index.spec.d.ts +1 -0
- package/node_modules/capital-case/dist.es2015/index.spec.js +22 -0
- package/node_modules/capital-case/dist.es2015/index.spec.js.map +1 -0
- package/node_modules/capital-case/package.json +90 -0
- package/node_modules/change-case/LICENSE +21 -0
- package/node_modules/change-case/README.md +44 -0
- package/node_modules/change-case/dist/index.d.ts +11 -0
- package/node_modules/change-case/dist/index.js +15 -0
- package/node_modules/change-case/dist/index.js.map +1 -0
- package/node_modules/change-case/dist/index.spec.d.ts +1 -0
- package/node_modules/change-case/dist/index.spec.js +9 -0
- package/node_modules/change-case/dist/index.spec.js.map +1 -0
- package/node_modules/change-case/dist.es2015/index.d.ts +11 -0
- package/node_modules/change-case/dist.es2015/index.js +12 -0
- package/node_modules/change-case/dist.es2015/index.js.map +1 -0
- package/node_modules/change-case/dist.es2015/index.spec.d.ts +1 -0
- package/node_modules/change-case/dist.es2015/index.spec.js +7 -0
- package/node_modules/change-case/dist.es2015/index.spec.js.map +1 -0
- package/node_modules/change-case/package.json +101 -0
- package/node_modules/constant-case/LICENSE +21 -0
- package/node_modules/constant-case/README.md +37 -0
- package/node_modules/constant-case/dist/index.d.ts +3 -0
- package/node_modules/constant-case/dist/index.js +12 -0
- package/node_modules/constant-case/dist/index.js.map +1 -0
- package/node_modules/constant-case/dist/index.spec.d.ts +1 -0
- package/node_modules/constant-case/dist/index.spec.js +26 -0
- package/node_modules/constant-case/dist/index.spec.js.map +1 -0
- package/node_modules/constant-case/dist.es2015/index.d.ts +3 -0
- package/node_modules/constant-case/dist.es2015/index.js +8 -0
- package/node_modules/constant-case/dist.es2015/index.js.map +1 -0
- package/node_modules/constant-case/dist.es2015/index.spec.d.ts +1 -0
- package/node_modules/constant-case/dist.es2015/index.spec.js +24 -0
- package/node_modules/constant-case/dist.es2015/index.spec.js.map +1 -0
- package/node_modules/constant-case/package.json +90 -0
- package/node_modules/dot-case/LICENSE +21 -0
- package/node_modules/dot-case/README.md +37 -0
- package/node_modules/dot-case/dist/index.d.ts +3 -0
- package/node_modules/dot-case/dist/index.js +11 -0
- package/node_modules/dot-case/dist/index.js.map +1 -0
- package/node_modules/dot-case/dist/index.spec.d.ts +1 -0
- package/node_modules/dot-case/dist/index.spec.js +26 -0
- package/node_modules/dot-case/dist/index.spec.js.map +1 -0
- package/node_modules/dot-case/dist.es2015/index.d.ts +3 -0
- package/node_modules/dot-case/dist.es2015/index.js +7 -0
- package/node_modules/dot-case/dist.es2015/index.js.map +1 -0
- package/node_modules/dot-case/dist.es2015/index.spec.d.ts +1 -0
- package/node_modules/dot-case/dist.es2015/index.spec.js +24 -0
- package/node_modules/dot-case/dist.es2015/index.spec.js.map +1 -0
- package/node_modules/dot-case/package.json +89 -0
- package/node_modules/esbuild-wasm/LICENSE.md +21 -0
- package/node_modules/esbuild-wasm/README.md +3 -0
- package/node_modules/esbuild-wasm/bin/esbuild +91 -0
- package/node_modules/esbuild-wasm/esbuild.wasm +0 -0
- package/node_modules/esbuild-wasm/esm/browser.d.ts +705 -0
- package/node_modules/esbuild-wasm/esm/browser.js +2370 -0
- package/node_modules/esbuild-wasm/esm/browser.min.js +20 -0
- package/node_modules/esbuild-wasm/lib/browser.d.ts +705 -0
- package/node_modules/esbuild-wasm/lib/browser.js +2415 -0
- package/node_modules/esbuild-wasm/lib/browser.min.js +22 -0
- package/node_modules/esbuild-wasm/lib/main.d.ts +705 -0
- package/node_modules/esbuild-wasm/lib/main.js +2051 -0
- package/node_modules/esbuild-wasm/package.json +19 -0
- package/node_modules/esbuild-wasm/wasm_exec.js +561 -0
- package/node_modules/esbuild-wasm/wasm_exec_node.js +39 -0
- package/node_modules/header-case/LICENSE +21 -0
- package/node_modules/header-case/README.md +37 -0
- package/node_modules/header-case/dist/index.d.ts +3 -0
- package/node_modules/header-case/dist/index.js +11 -0
- package/node_modules/header-case/dist/index.js.map +1 -0
- package/node_modules/header-case/dist/index.spec.d.ts +1 -0
- package/node_modules/header-case/dist/index.spec.js +24 -0
- package/node_modules/header-case/dist/index.spec.js.map +1 -0
- package/node_modules/header-case/dist.es2015/index.d.ts +3 -0
- package/node_modules/header-case/dist.es2015/index.js +7 -0
- package/node_modules/header-case/dist.es2015/index.js.map +1 -0
- package/node_modules/header-case/dist.es2015/index.spec.d.ts +1 -0
- package/node_modules/header-case/dist.es2015/index.spec.js +22 -0
- package/node_modules/header-case/dist.es2015/index.spec.js.map +1 -0
- package/node_modules/header-case/package.json +89 -0
- package/node_modules/lower-case/LICENSE +21 -0
- package/node_modules/lower-case/README.md +35 -0
- package/node_modules/lower-case/dist/index.d.ts +8 -0
- package/node_modules/lower-case/dist/index.js +53 -0
- package/node_modules/lower-case/dist/index.js.map +1 -0
- package/node_modules/lower-case/dist/index.spec.d.ts +1 -0
- package/node_modules/lower-case/dist/index.spec.js +36 -0
- package/node_modules/lower-case/dist/index.spec.js.map +1 -0
- package/node_modules/lower-case/dist.es2015/index.d.ts +8 -0
- package/node_modules/lower-case/dist.es2015/index.js +48 -0
- package/node_modules/lower-case/dist.es2015/index.js.map +1 -0
- package/node_modules/lower-case/dist.es2015/index.spec.d.ts +1 -0
- package/node_modules/lower-case/dist.es2015/index.spec.js +34 -0
- package/node_modules/lower-case/dist.es2015/index.spec.js.map +1 -0
- package/node_modules/lower-case/package.json +87 -0
- package/node_modules/mime-db/HISTORY.md +507 -0
- package/node_modules/mime-db/LICENSE +23 -0
- package/node_modules/mime-db/README.md +100 -0
- package/node_modules/mime-db/db.json +8519 -0
- package/node_modules/mime-db/index.js +12 -0
- package/node_modules/mime-db/package.json +60 -0
- package/node_modules/mime-types/HISTORY.md +397 -0
- package/node_modules/mime-types/LICENSE +23 -0
- package/node_modules/mime-types/README.md +113 -0
- package/node_modules/mime-types/index.js +188 -0
- package/node_modules/mime-types/package.json +44 -0
- package/node_modules/no-case/LICENSE +21 -0
- package/node_modules/no-case/README.md +37 -0
- package/node_modules/no-case/dist/index.d.ts +10 -0
- package/node_modules/no-case/dist/index.js +35 -0
- package/node_modules/no-case/dist/index.js.map +1 -0
- package/node_modules/no-case/dist/index.spec.d.ts +1 -0
- package/node_modules/no-case/dist/index.spec.js +59 -0
- package/node_modules/no-case/dist/index.spec.js.map +1 -0
- package/node_modules/no-case/dist.es2015/index.d.ts +10 -0
- package/node_modules/no-case/dist.es2015/index.js +31 -0
- package/node_modules/no-case/dist.es2015/index.js.map +1 -0
- package/node_modules/no-case/dist.es2015/index.spec.d.ts +1 -0
- package/node_modules/no-case/dist.es2015/index.spec.js +57 -0
- package/node_modules/no-case/dist.es2015/index.spec.js.map +1 -0
- package/node_modules/no-case/package.json +85 -0
- package/node_modules/param-case/LICENSE +21 -0
- package/node_modules/param-case/README.md +37 -0
- package/node_modules/param-case/dist/index.d.ts +3 -0
- package/node_modules/param-case/dist/index.js +11 -0
- package/node_modules/param-case/dist/index.js.map +1 -0
- package/node_modules/param-case/dist/index.spec.d.ts +1 -0
- package/node_modules/param-case/dist/index.spec.js +24 -0
- package/node_modules/param-case/dist/index.spec.js.map +1 -0
- package/node_modules/param-case/dist.es2015/index.d.ts +3 -0
- package/node_modules/param-case/dist.es2015/index.js +7 -0
- package/node_modules/param-case/dist.es2015/index.js.map +1 -0
- package/node_modules/param-case/dist.es2015/index.spec.d.ts +1 -0
- package/node_modules/param-case/dist.es2015/index.spec.js +22 -0
- package/node_modules/param-case/dist.es2015/index.spec.js.map +1 -0
- package/node_modules/param-case/package.json +91 -0
- package/node_modules/pascal-case/LICENSE +21 -0
- package/node_modules/pascal-case/README.md +47 -0
- package/node_modules/pascal-case/dist/index.d.ts +5 -0
- package/node_modules/pascal-case/dist/index.js +24 -0
- package/node_modules/pascal-case/dist/index.js.map +1 -0
- package/node_modules/pascal-case/dist/index.spec.d.ts +1 -0
- package/node_modules/pascal-case/dist/index.spec.js +25 -0
- package/node_modules/pascal-case/dist/index.spec.js.map +1 -0
- package/node_modules/pascal-case/dist.es2015/index.d.ts +5 -0
- package/node_modules/pascal-case/dist.es2015/index.js +18 -0
- package/node_modules/pascal-case/dist.es2015/index.js.map +1 -0
- package/node_modules/pascal-case/dist.es2015/index.spec.d.ts +1 -0
- package/node_modules/pascal-case/dist.es2015/index.spec.js +23 -0
- package/node_modules/pascal-case/dist.es2015/index.spec.js.map +1 -0
- package/node_modules/pascal-case/package.json +90 -0
- package/node_modules/path-case/LICENSE +21 -0
- package/node_modules/path-case/README.md +37 -0
- package/node_modules/path-case/dist/index.d.ts +3 -0
- package/node_modules/path-case/dist/index.js +11 -0
- package/node_modules/path-case/dist/index.js.map +1 -0
- package/node_modules/path-case/dist/index.spec.d.ts +1 -0
- package/node_modules/path-case/dist/index.spec.js +24 -0
- package/node_modules/path-case/dist/index.spec.js.map +1 -0
- package/node_modules/path-case/dist.es2015/index.d.ts +3 -0
- package/node_modules/path-case/dist.es2015/index.js +7 -0
- package/node_modules/path-case/dist.es2015/index.js.map +1 -0
- package/node_modules/path-case/dist.es2015/index.spec.d.ts +1 -0
- package/node_modules/path-case/dist.es2015/index.spec.js +22 -0
- package/node_modules/path-case/dist.es2015/index.spec.js.map +1 -0
- package/node_modules/path-case/package.json +88 -0
- package/node_modules/sentence-case/LICENSE +21 -0
- package/node_modules/sentence-case/README.md +37 -0
- package/node_modules/sentence-case/dist/index.d.ts +4 -0
- package/node_modules/sentence-case/dist/index.js +19 -0
- package/node_modules/sentence-case/dist/index.js.map +1 -0
- package/node_modules/sentence-case/dist/index.spec.d.ts +1 -0
- package/node_modules/sentence-case/dist/index.spec.js +24 -0
- package/node_modules/sentence-case/dist/index.spec.js.map +1 -0
- package/node_modules/sentence-case/dist.es2015/index.d.ts +4 -0
- package/node_modules/sentence-case/dist.es2015/index.js +14 -0
- package/node_modules/sentence-case/dist.es2015/index.js.map +1 -0
- package/node_modules/sentence-case/dist.es2015/index.spec.d.ts +1 -0
- package/node_modules/sentence-case/dist.es2015/index.spec.js +22 -0
- package/node_modules/sentence-case/dist.es2015/index.spec.js.map +1 -0
- package/node_modules/sentence-case/package.json +89 -0
- package/node_modules/snake-case/LICENSE +21 -0
- package/node_modules/snake-case/README.md +37 -0
- package/node_modules/snake-case/dist/index.d.ts +3 -0
- package/node_modules/snake-case/dist/index.js +11 -0
- package/node_modules/snake-case/dist/index.js.map +1 -0
- package/node_modules/snake-case/dist/index.spec.d.ts +1 -0
- package/node_modules/snake-case/dist/index.spec.js +25 -0
- package/node_modules/snake-case/dist/index.spec.js.map +1 -0
- package/node_modules/snake-case/dist.es2015/index.d.ts +3 -0
- package/node_modules/snake-case/dist.es2015/index.js +7 -0
- package/node_modules/snake-case/dist.es2015/index.js.map +1 -0
- package/node_modules/snake-case/dist.es2015/index.spec.d.ts +1 -0
- package/node_modules/snake-case/dist.es2015/index.spec.js +23 -0
- package/node_modules/snake-case/dist.es2015/index.spec.js.map +1 -0
- package/node_modules/snake-case/package.json +90 -0
- package/node_modules/tslib/CopyrightNotice.txt +15 -0
- package/node_modules/tslib/LICENSE.txt +12 -0
- package/node_modules/tslib/README.md +164 -0
- package/node_modules/tslib/SECURITY.md +41 -0
- package/node_modules/tslib/modules/index.d.ts +37 -0
- package/node_modules/tslib/modules/index.js +68 -0
- package/node_modules/tslib/modules/package.json +3 -0
- package/node_modules/tslib/package.json +47 -0
- package/node_modules/tslib/tslib.d.ts +453 -0
- package/node_modules/tslib/tslib.es6.html +1 -0
- package/node_modules/tslib/tslib.es6.js +374 -0
- package/node_modules/tslib/tslib.es6.mjs +373 -0
- package/node_modules/tslib/tslib.html +1 -0
- package/node_modules/tslib/tslib.js +424 -0
- package/node_modules/upper-case/README.md +34 -0
- package/node_modules/upper-case/dist/index.d.ts +8 -0
- package/node_modules/upper-case/dist/index.js +49 -0
- package/node_modules/upper-case/dist/index.js.map +1 -0
- package/node_modules/upper-case/dist/index.spec.d.ts +1 -0
- package/node_modules/upper-case/dist/index.spec.js +34 -0
- package/node_modules/upper-case/dist/index.spec.js.map +1 -0
- package/node_modules/upper-case/dist.es2015/index.d.ts +8 -0
- package/node_modules/upper-case/dist.es2015/index.js +44 -0
- package/node_modules/upper-case/dist.es2015/index.js.map +1 -0
- package/node_modules/upper-case/dist.es2015/index.spec.d.ts +1 -0
- package/node_modules/upper-case/dist.es2015/index.spec.js +32 -0
- package/node_modules/upper-case/dist.es2015/index.spec.js.map +1 -0
- package/node_modules/upper-case/package.json +86 -0
- package/node_modules/upper-case-first/LICENSE +21 -0
- package/node_modules/upper-case-first/README.md +32 -0
- package/node_modules/upper-case-first/dist/index.d.ts +4 -0
- package/node_modules/upper-case-first/dist/index.js +11 -0
- package/node_modules/upper-case-first/dist/index.js.map +1 -0
- package/node_modules/upper-case-first/dist/index.spec.d.ts +1 -0
- package/node_modules/upper-case-first/dist/index.spec.js +20 -0
- package/node_modules/upper-case-first/dist/index.spec.js.map +1 -0
- package/node_modules/upper-case-first/dist.es2015/index.d.ts +4 -0
- package/node_modules/upper-case-first/dist.es2015/index.js +7 -0
- package/node_modules/upper-case-first/dist.es2015/index.js.map +1 -0
- package/node_modules/upper-case-first/dist.es2015/index.spec.d.ts +1 -0
- package/node_modules/upper-case-first/dist.es2015/index.spec.js +18 -0
- package/node_modules/upper-case-first/dist.es2015/index.spec.js.map +1 -0
- package/node_modules/upper-case-first/package.json +87 -0
- package/package.json +152 -0
- package/setup.js +2 -0
|
@@ -0,0 +1,444 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a, _b, _c;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.ManagedResponseHeadersPolicy = exports.ManagedOriginRequestPolicy = exports.ManagedCachePolicy = exports.ViewerProtocolPolicy = exports.CachedMethods = exports.AllowedMethods = exports.SecurityPolicyProtocol = exports.SSLMethod = exports.PriceClass = exports.HttpVersion = exports.GeoRestrictionType = exports.Distribution = 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 arn_1 = require("../arn");
|
|
9
|
+
const aws_construct_1 = require("../aws-construct");
|
|
10
|
+
const aws_stack_1 = require("../aws-stack");
|
|
11
|
+
/**
|
|
12
|
+
* Amazon Cloudfront Distribution
|
|
13
|
+
*/
|
|
14
|
+
class Distribution extends aws_construct_1.AwsConstructBase {
|
|
15
|
+
get distributionOutputs() {
|
|
16
|
+
return this._outputs;
|
|
17
|
+
}
|
|
18
|
+
get outputs() {
|
|
19
|
+
return this.distributionOutputs;
|
|
20
|
+
}
|
|
21
|
+
get domainName() {
|
|
22
|
+
return this._domainName;
|
|
23
|
+
}
|
|
24
|
+
constructor(scope, name, props) {
|
|
25
|
+
super(scope, name, props);
|
|
26
|
+
this._origins = new Array();
|
|
27
|
+
this.additionalBehaviors = [];
|
|
28
|
+
if (props.certificate) {
|
|
29
|
+
const certificateRegion = aws_stack_1.AwsStack.ofAwsConstruct(this).splitArn(props.certificate.certificateArn, arn_1.ArnFormat.SLASH_RESOURCE_NAME).region;
|
|
30
|
+
if (!cdktf_1.Token.isUnresolved(certificateRegion) &&
|
|
31
|
+
certificateRegion !== "us-east-1") {
|
|
32
|
+
throw new Error(`Distribution certificates must be in the us-east-1 region and the certificate you provided is in ${certificateRegion}.`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
this.certificate = props.certificate;
|
|
36
|
+
this.errorResponses = props.errorResponses ?? [];
|
|
37
|
+
const defaultOriginId = this.addOrigin(props.defaultBehavior.origin);
|
|
38
|
+
if (props.additionalBehaviors) {
|
|
39
|
+
Object.entries(props.additionalBehaviors).forEach(([pathPattern, behaviorOptions]) => {
|
|
40
|
+
this.addBehavior(pathPattern, behaviorOptions.origin, behaviorOptions);
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
// Comments have an undocumented limit of 128 characters
|
|
44
|
+
const trimmedComment = props.comment && props.comment.length > 128
|
|
45
|
+
? `${props.comment.slice(0, 128 - 3)}...`
|
|
46
|
+
: props.comment;
|
|
47
|
+
this.resource = new provider_aws_1.cloudfrontDistribution.CloudfrontDistribution(this, "Resource", {
|
|
48
|
+
enabled: props.enabled ?? true,
|
|
49
|
+
origin: cdktf_1.Lazy.anyValue({
|
|
50
|
+
produce: () => this._origins.map((o) =>
|
|
51
|
+
// Lazy producers need additional xxxToTerraform wrap
|
|
52
|
+
provider_aws_1.cloudfrontDistribution.cloudfrontDistributionOriginToTerraform(o.origin.render(o.id))),
|
|
53
|
+
}),
|
|
54
|
+
defaultCacheBehavior: this._renderDefaultCacheBehavior({
|
|
55
|
+
pathPattern: "*", // ignored for Default Cache Behavior
|
|
56
|
+
targetOriginId: defaultOriginId,
|
|
57
|
+
...props.defaultBehavior,
|
|
58
|
+
}),
|
|
59
|
+
orderedCacheBehavior: cdktf_1.Lazy.anyValue({
|
|
60
|
+
produce: () => this.additionalBehaviors.map((b) =>
|
|
61
|
+
// Lazy producers need additional xxxToTerraform wrap
|
|
62
|
+
provider_aws_1.cloudfrontDistribution.cloudfrontDistributionOrderedCacheBehaviorToTerraform({
|
|
63
|
+
pathPattern: b.pathPattern,
|
|
64
|
+
...this._renderDefaultCacheBehavior(b),
|
|
65
|
+
})),
|
|
66
|
+
}, { omitEmptyArray: true }),
|
|
67
|
+
aliases: props.aliases,
|
|
68
|
+
comment: trimmedComment,
|
|
69
|
+
customErrorResponse: this.renderErrorResponses(),
|
|
70
|
+
defaultRootObject: props.defaultRootObject,
|
|
71
|
+
httpVersion: props.httpVersion ?? HttpVersion.HTTP2,
|
|
72
|
+
priceClass: props.priceClass ?? undefined,
|
|
73
|
+
restrictions: this.renderRestrictions(props.geoRestriction),
|
|
74
|
+
viewerCertificate: this.renderViewerCertificate(this.certificate, props.minimumProtocolVersion, props.sslSupportMethod),
|
|
75
|
+
waitForDeployment: props.waitForDeployment,
|
|
76
|
+
});
|
|
77
|
+
this._domainName = this.resource.domainName;
|
|
78
|
+
this.hostedZoneId = this.resource.hostedZoneId;
|
|
79
|
+
this._outputs = {
|
|
80
|
+
id: this.resource.id,
|
|
81
|
+
hostedZoneId: this.resource.hostedZoneId,
|
|
82
|
+
status: this.resource.status,
|
|
83
|
+
arn: this.resource.arn,
|
|
84
|
+
domainName: this._domainName,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Add an Origin to this Distribution.
|
|
89
|
+
*
|
|
90
|
+
* @param origin The Origin to add.
|
|
91
|
+
* @param originId An optional id to use for the Origin or one will be generated.
|
|
92
|
+
*/
|
|
93
|
+
addOrigin(origin, originId) {
|
|
94
|
+
const indexedOrigin = this._origins.find((originIndex) => originIndex.origin === origin);
|
|
95
|
+
if (indexedOrigin) {
|
|
96
|
+
if (originId && originId !== indexedOrigin.id) {
|
|
97
|
+
throw new Error(`Duplicate origin for ${indexedOrigin.id} and ${originId}.`);
|
|
98
|
+
}
|
|
99
|
+
return indexedOrigin.id;
|
|
100
|
+
}
|
|
101
|
+
const nextIndex = this._origins.length;
|
|
102
|
+
const id = originId ?? `origin-${nextIndex}`;
|
|
103
|
+
// ensure id (if provided) is unique within Distribution
|
|
104
|
+
if (this._origins.some((originIndex) => originIndex.id === id)) {
|
|
105
|
+
throw new Error(`Duplicate origin id ${id}. OriginIds must be unique within a distribution`);
|
|
106
|
+
}
|
|
107
|
+
this._origins.push({ origin, id });
|
|
108
|
+
return id;
|
|
109
|
+
}
|
|
110
|
+
renderErrorResponses() {
|
|
111
|
+
if (this.errorResponses.length === 0) {
|
|
112
|
+
return undefined;
|
|
113
|
+
}
|
|
114
|
+
return this.errorResponses.map((errorConfig) => {
|
|
115
|
+
if (!errorConfig.responseHttpStatus &&
|
|
116
|
+
!errorConfig.ttl &&
|
|
117
|
+
!errorConfig.responsePagePath) {
|
|
118
|
+
throw new Error("A custom error response without either a 'responseHttpStatus', 'ttl' or 'responsePagePath' is not valid.");
|
|
119
|
+
}
|
|
120
|
+
return {
|
|
121
|
+
errorCachingMinTtl: errorConfig.ttl?.toSeconds(),
|
|
122
|
+
errorCode: errorConfig.httpStatus,
|
|
123
|
+
responseCode: errorConfig.responsePagePath
|
|
124
|
+
? (errorConfig.responseHttpStatus ?? errorConfig.httpStatus)
|
|
125
|
+
: errorConfig.responseHttpStatus,
|
|
126
|
+
responsePagePath: errorConfig.responsePagePath,
|
|
127
|
+
};
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Adds a new behavior to this distribution for the given pathPattern.
|
|
132
|
+
*
|
|
133
|
+
* @param pathPattern the path pattern (e.g., 'images/*') that specifies which requests to apply the behavior to.
|
|
134
|
+
* @param origin the origin to use for this behavior
|
|
135
|
+
* @param behaviorOptions the options for the behavior at this path.
|
|
136
|
+
*/
|
|
137
|
+
addBehavior(pathPattern, origin, behaviorOptions = {}) {
|
|
138
|
+
if (pathPattern === "*") {
|
|
139
|
+
throw new Error("Only the default behavior can have a path pattern of '*'");
|
|
140
|
+
}
|
|
141
|
+
const targetOriginId = this.addOrigin(origin);
|
|
142
|
+
this.additionalBehaviors.push({
|
|
143
|
+
pathPattern,
|
|
144
|
+
origin,
|
|
145
|
+
targetOriginId,
|
|
146
|
+
...behaviorOptions,
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Creates and returns the Terraform representation of this behavior.
|
|
151
|
+
* This renders as a "CloudfrontDistributionDefaultCacheBehavior"
|
|
152
|
+
* regardless if this is a default cache behavior or not, as the two
|
|
153
|
+
* are identical except the `pathPattern` is omitted for the default
|
|
154
|
+
* cache behavior.
|
|
155
|
+
*
|
|
156
|
+
* @internal
|
|
157
|
+
*/
|
|
158
|
+
_renderDefaultCacheBehavior(props) {
|
|
159
|
+
// TODO: should it be possible to leave cachePolicy be undefined?
|
|
160
|
+
const managedCachePolicyName = props.cachePolicy ?? ManagedCachePolicy.CACHING_OPTIMIZED;
|
|
161
|
+
const cachePolicy = this.dataLookup(managedCachePolicyName, provider_aws_1.dataAwsCloudfrontCachePolicy.DataAwsCloudfrontCachePolicy, { name: managedCachePolicyName });
|
|
162
|
+
const originRequestPolicy = this.dataLookup(props.originRequestPolicy, provider_aws_1.dataAwsCloudfrontOriginRequestPolicy.DataAwsCloudfrontOriginRequestPolicy, { name: props.originRequestPolicy });
|
|
163
|
+
const responseHeadersPolicy = this.dataLookup(props.responseHeadersPolicy, provider_aws_1.dataAwsCloudfrontResponseHeadersPolicy.DataAwsCloudfrontResponseHeadersPolicy, { name: props.responseHeadersPolicy });
|
|
164
|
+
return {
|
|
165
|
+
targetOriginId: props.targetOriginId,
|
|
166
|
+
allowedMethods: props.allowedMethods?.methods ?? AllowedMethods.ALLOW_GET_HEAD.methods,
|
|
167
|
+
cachedMethods: props.cachedMethods?.methods ?? CachedMethods.CACHE_GET_HEAD.methods,
|
|
168
|
+
cachePolicyId: cachePolicy?.id,
|
|
169
|
+
compress: props.compress ?? true,
|
|
170
|
+
originRequestPolicyId: originRequestPolicy?.id,
|
|
171
|
+
responseHeadersPolicyId: responseHeadersPolicy?.id,
|
|
172
|
+
smoothStreaming: props.smoothStreaming,
|
|
173
|
+
viewerProtocolPolicy: props.viewerProtocolPolicy ?? ViewerProtocolPolicy.ALLOW_ALL,
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
renderRestrictions(geoRestriction) {
|
|
177
|
+
return geoRestriction
|
|
178
|
+
? {
|
|
179
|
+
geoRestriction: {
|
|
180
|
+
restrictionType: geoRestriction.restrictionType,
|
|
181
|
+
locations: geoRestriction.restrictionType !== GeoRestrictionType.NONE
|
|
182
|
+
? this.validateLocations(geoRestriction.locations)
|
|
183
|
+
: undefined,
|
|
184
|
+
},
|
|
185
|
+
}
|
|
186
|
+
: {
|
|
187
|
+
geoRestriction: {
|
|
188
|
+
restrictionType: GeoRestrictionType.NONE,
|
|
189
|
+
},
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
validateLocations(locations) {
|
|
193
|
+
const LOCATION_REGEX = /^[A-Z]{2}$/;
|
|
194
|
+
if (locations.length === 0) {
|
|
195
|
+
throw new Error("Should provide at least 1 location");
|
|
196
|
+
}
|
|
197
|
+
locations.forEach((location) => {
|
|
198
|
+
if (!LOCATION_REGEX.test(location)) {
|
|
199
|
+
// eslint-disable-next-line max-len
|
|
200
|
+
throw new Error(`Invalid location format for location: ${location}, location should be two-letter and uppercase country ISO 3166-1-alpha-2 code`);
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
return locations;
|
|
204
|
+
}
|
|
205
|
+
renderViewerCertificate(certificate, minimumProtocolVersionProp, sslSupportMethodProp) {
|
|
206
|
+
const minimumProtocolVersion = minimumProtocolVersionProp ?? SecurityPolicyProtocol.TLS_V1_2_2021;
|
|
207
|
+
const sslSupportMethod = sslSupportMethodProp ?? SSLMethod.SNI;
|
|
208
|
+
return {
|
|
209
|
+
...(certificate
|
|
210
|
+
? { acmCertificateArn: certificate.certificateArn }
|
|
211
|
+
: { cloudfrontDefaultCertificate: true }),
|
|
212
|
+
minimumProtocolVersion: minimumProtocolVersion,
|
|
213
|
+
sslSupportMethod: sslSupportMethod,
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Conditionally lookup or create a child based on the id provided.
|
|
218
|
+
* If the id is undefined, it will return undefined.
|
|
219
|
+
*
|
|
220
|
+
* @param id the id of the child to lookup or create
|
|
221
|
+
* @param constructType the type of the child to create
|
|
222
|
+
* @param config the configuration to pass to the child
|
|
223
|
+
*/
|
|
224
|
+
dataLookup(id, constructType, config) {
|
|
225
|
+
if (!id) {
|
|
226
|
+
return undefined;
|
|
227
|
+
}
|
|
228
|
+
let child = this.node.tryFindChild(id);
|
|
229
|
+
if (!child) {
|
|
230
|
+
child = new constructType(this, id, config);
|
|
231
|
+
}
|
|
232
|
+
return child;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
exports.Distribution = Distribution;
|
|
236
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
237
|
+
Distribution[_a] = { fqn: "terraconstructs.aws.edge.Distribution", version: "0.0.8" };
|
|
238
|
+
var GeoRestrictionType;
|
|
239
|
+
(function (GeoRestrictionType) {
|
|
240
|
+
GeoRestrictionType["NONE"] = "none";
|
|
241
|
+
GeoRestrictionType["WHITELIST"] = "whitelist";
|
|
242
|
+
GeoRestrictionType["BLACKLIST"] = "blacklist";
|
|
243
|
+
})(GeoRestrictionType || (exports.GeoRestrictionType = GeoRestrictionType = {}));
|
|
244
|
+
// ref: https://github.com/aws/aws-cdk/blob/v2.156.0/packages/aws-cdk-lib/aws-cloudfront/lib/distribution.ts
|
|
245
|
+
/** Maximum HTTP version to support */
|
|
246
|
+
var HttpVersion;
|
|
247
|
+
(function (HttpVersion) {
|
|
248
|
+
/** HTTP 1.1 */
|
|
249
|
+
HttpVersion["HTTP1_1"] = "http1.1";
|
|
250
|
+
/** HTTP 2 */
|
|
251
|
+
HttpVersion["HTTP2"] = "http2";
|
|
252
|
+
/** HTTP 2 and HTTP 3 */
|
|
253
|
+
HttpVersion["HTTP2_AND_3"] = "http2and3";
|
|
254
|
+
/** HTTP 3 */
|
|
255
|
+
HttpVersion["HTTP3"] = "http3";
|
|
256
|
+
})(HttpVersion || (exports.HttpVersion = HttpVersion = {}));
|
|
257
|
+
/**
|
|
258
|
+
* The price class determines how many edge locations CloudFront will use for your distribution.
|
|
259
|
+
* See https://aws.amazon.com/cloudfront/pricing/ for full list of supported regions.
|
|
260
|
+
*/
|
|
261
|
+
var PriceClass;
|
|
262
|
+
(function (PriceClass) {
|
|
263
|
+
/** USA, Canada, Europe, & Israel */
|
|
264
|
+
PriceClass["PRICE_CLASS_100"] = "PriceClass_100";
|
|
265
|
+
/** PRICE_CLASS_100 + South Africa, Kenya, Middle East, Japan, Singapore, South Korea, Taiwan, Hong Kong, & Philippines */
|
|
266
|
+
PriceClass["PRICE_CLASS_200"] = "PriceClass_200";
|
|
267
|
+
/** All locations */
|
|
268
|
+
PriceClass["PRICE_CLASS_ALL"] = "PriceClass_All";
|
|
269
|
+
})(PriceClass || (exports.PriceClass = PriceClass = {}));
|
|
270
|
+
/**
|
|
271
|
+
* The SSL method CloudFront will use for your distribution.
|
|
272
|
+
*
|
|
273
|
+
* Server Name Indication (SNI) - is an extension to the TLS computer networking protocol by which a client indicates
|
|
274
|
+
* which hostname it is attempting to connect to at the start of the handshaking process. This allows a server to present
|
|
275
|
+
* multiple certificates on the same IP address and TCP port number and hence allows multiple secure (HTTPS) websites
|
|
276
|
+
* (or any other service over TLS) to be served by the same IP address without requiring all those sites to use the same certificate.
|
|
277
|
+
*
|
|
278
|
+
* CloudFront can use SNI to host multiple distributions on the same IP - which a large majority of clients will support.
|
|
279
|
+
*
|
|
280
|
+
* If your clients cannot support SNI however - CloudFront can use dedicated IPs for your distribution - but there is a prorated monthly charge for
|
|
281
|
+
* using this feature. By default, we use SNI - but you can optionally enable dedicated IPs (VIP).
|
|
282
|
+
*
|
|
283
|
+
* See the CloudFront SSL for more details about pricing : https://aws.amazon.com/cloudfront/custom-ssl-domains/
|
|
284
|
+
*
|
|
285
|
+
*/
|
|
286
|
+
var SSLMethod;
|
|
287
|
+
(function (SSLMethod) {
|
|
288
|
+
SSLMethod["SNI"] = "sni-only";
|
|
289
|
+
SSLMethod["VIP"] = "vip";
|
|
290
|
+
})(SSLMethod || (exports.SSLMethod = SSLMethod = {}));
|
|
291
|
+
/**
|
|
292
|
+
* The minimum version of the SSL protocol that you want CloudFront to use for HTTPS connections.
|
|
293
|
+
* CloudFront serves your objects only to browsers or devices that support at least the SSL version that you specify.
|
|
294
|
+
*/
|
|
295
|
+
var SecurityPolicyProtocol;
|
|
296
|
+
(function (SecurityPolicyProtocol) {
|
|
297
|
+
SecurityPolicyProtocol["SSL_V3"] = "SSLv3";
|
|
298
|
+
SecurityPolicyProtocol["TLS_V1"] = "TLSv1";
|
|
299
|
+
SecurityPolicyProtocol["TLS_V1_2016"] = "TLSv1_2016";
|
|
300
|
+
SecurityPolicyProtocol["TLS_V1_1_2016"] = "TLSv1.1_2016";
|
|
301
|
+
SecurityPolicyProtocol["TLS_V1_2_2018"] = "TLSv1.2_2018";
|
|
302
|
+
SecurityPolicyProtocol["TLS_V1_2_2019"] = "TLSv1.2_2019";
|
|
303
|
+
SecurityPolicyProtocol["TLS_V1_2_2021"] = "TLSv1.2_2021";
|
|
304
|
+
})(SecurityPolicyProtocol || (exports.SecurityPolicyProtocol = SecurityPolicyProtocol = {}));
|
|
305
|
+
/**
|
|
306
|
+
* The HTTP methods that the Behavior will accept requests on.
|
|
307
|
+
*/
|
|
308
|
+
class AllowedMethods {
|
|
309
|
+
constructor(methods) {
|
|
310
|
+
this.methods = methods;
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
exports.AllowedMethods = AllowedMethods;
|
|
314
|
+
_b = JSII_RTTI_SYMBOL_1;
|
|
315
|
+
AllowedMethods[_b] = { fqn: "terraconstructs.aws.edge.AllowedMethods", version: "0.0.8" };
|
|
316
|
+
/** HEAD and GET */
|
|
317
|
+
AllowedMethods.ALLOW_GET_HEAD = new AllowedMethods(["GET", "HEAD"]);
|
|
318
|
+
/** HEAD, GET, and OPTIONS */
|
|
319
|
+
AllowedMethods.ALLOW_GET_HEAD_OPTIONS = new AllowedMethods([
|
|
320
|
+
"GET",
|
|
321
|
+
"HEAD",
|
|
322
|
+
"OPTIONS",
|
|
323
|
+
]);
|
|
324
|
+
/** All supported HTTP methods */
|
|
325
|
+
AllowedMethods.ALLOW_ALL = new AllowedMethods([
|
|
326
|
+
"GET",
|
|
327
|
+
"HEAD",
|
|
328
|
+
"OPTIONS",
|
|
329
|
+
"PUT",
|
|
330
|
+
"PATCH",
|
|
331
|
+
"POST",
|
|
332
|
+
"DELETE",
|
|
333
|
+
]);
|
|
334
|
+
/**
|
|
335
|
+
* The HTTP methods that the Behavior will cache requests on.
|
|
336
|
+
*/
|
|
337
|
+
class CachedMethods {
|
|
338
|
+
constructor(methods) {
|
|
339
|
+
this.methods = methods;
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
exports.CachedMethods = CachedMethods;
|
|
343
|
+
_c = JSII_RTTI_SYMBOL_1;
|
|
344
|
+
CachedMethods[_c] = { fqn: "terraconstructs.aws.edge.CachedMethods", version: "0.0.8" };
|
|
345
|
+
/** HEAD and GET */
|
|
346
|
+
CachedMethods.CACHE_GET_HEAD = new CachedMethods(["GET", "HEAD"]);
|
|
347
|
+
/** HEAD, GET, and OPTIONS */
|
|
348
|
+
CachedMethods.CACHE_GET_HEAD_OPTIONS = new CachedMethods([
|
|
349
|
+
"GET",
|
|
350
|
+
"HEAD",
|
|
351
|
+
"OPTIONS",
|
|
352
|
+
]);
|
|
353
|
+
/**
|
|
354
|
+
* How HTTPs should be handled with your distribution.
|
|
355
|
+
*/
|
|
356
|
+
var ViewerProtocolPolicy;
|
|
357
|
+
(function (ViewerProtocolPolicy) {
|
|
358
|
+
/** HTTPS only */
|
|
359
|
+
ViewerProtocolPolicy["HTTPS_ONLY"] = "https-only";
|
|
360
|
+
/** Will redirect HTTP requests to HTTPS */
|
|
361
|
+
ViewerProtocolPolicy["REDIRECT_TO_HTTPS"] = "redirect-to-https";
|
|
362
|
+
/** Both HTTP and HTTPS supported */
|
|
363
|
+
ViewerProtocolPolicy["ALLOW_ALL"] = "allow-all";
|
|
364
|
+
})(ViewerProtocolPolicy || (exports.ViewerProtocolPolicy = ViewerProtocolPolicy = {}));
|
|
365
|
+
/**
|
|
366
|
+
* CloudFront provides a set of managed cache policies that you can attach to any of your distribution's cache behaviors.
|
|
367
|
+
* With a managed cache policy, you don't need to write or maintain your own cache policy. The managed policies use settings that are optimized for specific use cases.
|
|
368
|
+
*
|
|
369
|
+
* @link https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-cache-policies.html
|
|
370
|
+
* @link https://registry.terraform.io/providers/hashicorp/aws/5.60.0/docs/data-sources/cloudfront_cache_policy#aws-managed-policies
|
|
371
|
+
*/
|
|
372
|
+
var ManagedCachePolicy;
|
|
373
|
+
(function (ManagedCachePolicy) {
|
|
374
|
+
/**
|
|
375
|
+
* This policy is designed for use with an origin that is an AWS Amplify web app.
|
|
376
|
+
*/
|
|
377
|
+
ManagedCachePolicy["AMPLIFY"] = "Managed-Amplify";
|
|
378
|
+
/**
|
|
379
|
+
* Optimize cache efficiency by minimizing the values that CloudFront includes in the cache key.
|
|
380
|
+
* Query strings and cookies are not included in the cache key, and only the normalized 'Accept-Encoding' header is included.
|
|
381
|
+
*/
|
|
382
|
+
ManagedCachePolicy["CACHING_OPTIMIZED"] = "Managed-CachingOptimized";
|
|
383
|
+
/**
|
|
384
|
+
* Optimize cache efficiency by minimizing the values that CloudFront includes in the cache key.
|
|
385
|
+
* Query strings and cookies are not included in the cache key, and only the normalized 'Accept-Encoding' header is included.
|
|
386
|
+
* Disables cache compression.
|
|
387
|
+
*/
|
|
388
|
+
ManagedCachePolicy["CACHING_OPTIMIZED_FOR_UNCOMPRESSED_OBJECTS"] = "Managed-CachingOptimizedForUncompressedObjects";
|
|
389
|
+
/** Disables caching. This policy is useful for dynamic content and for requests that are not cacheable. */
|
|
390
|
+
ManagedCachePolicy["CACHING_DISABLED"] = "Managed-CachingDisabled";
|
|
391
|
+
/** Designed for use with an origin that is an AWS Elemental MediaPackage endpoint. */
|
|
392
|
+
ManagedCachePolicy["ELEMENTAL_MEDIA_PACKAGE"] = "Managed-Elemental-MediaPackage";
|
|
393
|
+
/**
|
|
394
|
+
* Designed for use with an origin that returns Cache-Control HTTP response headers and does not serve different content based on values present in the query string.
|
|
395
|
+
*/
|
|
396
|
+
ManagedCachePolicy["USE_ORIGIN_CACHE_CONTROL_HEADERS"] = "Managed-UseOriginCacheControlHeaders";
|
|
397
|
+
/**
|
|
398
|
+
* Designed for use with an origin that returns Cache-Control HTTP response headers and serves different content based on values present in the query string.
|
|
399
|
+
*/
|
|
400
|
+
ManagedCachePolicy["USE_ORIGIN_CACHE_CONTROL_HEADERS_QUERY_STRINGS"] = "Managed-UseOriginCacheControlHeaders-QueryStrings";
|
|
401
|
+
})(ManagedCachePolicy || (exports.ManagedCachePolicy = ManagedCachePolicy = {}));
|
|
402
|
+
/**
|
|
403
|
+
* Origin Request Policy configuration.
|
|
404
|
+
*
|
|
405
|
+
* @link https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-origin-request-policies.html
|
|
406
|
+
* @link https://registry.terraform.io/providers/hashicorp/aws/5.60.0/docs/data-sources/cloudfront_origin_request_policy#aws-managed-policies
|
|
407
|
+
*/
|
|
408
|
+
var ManagedOriginRequestPolicy;
|
|
409
|
+
(function (ManagedOriginRequestPolicy) {
|
|
410
|
+
/** This policy includes only the User-Agent and Referer headers. It doesn’t include any query strings or cookies. */
|
|
411
|
+
ManagedOriginRequestPolicy["USER_AGENT_REFERER_HEADERS"] = "Managed-UserAgentRefererHeaders";
|
|
412
|
+
/** This policy includes the header that enables cross-origin resource sharing (CORS) requests when the origin is a custom origin. */
|
|
413
|
+
ManagedOriginRequestPolicy["CORS_CUSTOM_ORIGIN"] = "Managed-CORS-CustomOrigin";
|
|
414
|
+
/** This policy includes the headers that enable cross-origin resource sharing (CORS) requests when the origin is an Amazon S3 bucket. */
|
|
415
|
+
ManagedOriginRequestPolicy["CORS_S3_ORIGIN"] = "Managed-CORS-S3Origin";
|
|
416
|
+
/** This policy includes all values (query strings, headers, and cookies) in the viewer request. */
|
|
417
|
+
ManagedOriginRequestPolicy["ALL_VIEWER"] = "Managed-AllViewer";
|
|
418
|
+
/** This policy is designed for use with an origin that is an AWS Elemental MediaTailor endpoint. */
|
|
419
|
+
ManagedOriginRequestPolicy["ELEMENTAL_MEDIA_TAILOR"] = "Managed-Elemental-MediaTailor-PersonalizedManifests";
|
|
420
|
+
/** This policy includes all values (headers, cookies, and query strings) in the viewer request, and all CloudFront headers that were released through June 2022 (CloudFront headers released after June 2022 are not included). */
|
|
421
|
+
ManagedOriginRequestPolicy["ALL_VIEWER_AND_CLOUDFRONT_2022"] = "Managed-AllViewerAndCloudFrontHeaders-2022-06";
|
|
422
|
+
/** This policy includes all values (query strings, and cookies) except the header in the viewer request. */
|
|
423
|
+
ManagedOriginRequestPolicy["ALL_VIEWER_EXCEPT_HOST_HEADER"] = "Managed-AllViewerExceptHostHeader";
|
|
424
|
+
})(ManagedOriginRequestPolicy || (exports.ManagedOriginRequestPolicy = ManagedOriginRequestPolicy = {}));
|
|
425
|
+
/**
|
|
426
|
+
* A Response Headers Policy configuration
|
|
427
|
+
*
|
|
428
|
+
* @link https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-response-headers-policies.html
|
|
429
|
+
* @link https://registry.terraform.io/providers/hashicorp/aws/5.60.0/docs/data-sources/cloudfront_response_headers_policy#aws-managed-policies
|
|
430
|
+
*/
|
|
431
|
+
var ManagedResponseHeadersPolicy;
|
|
432
|
+
(function (ManagedResponseHeadersPolicy) {
|
|
433
|
+
/** Use this managed policy to allow simple CORS requests from any origin. */
|
|
434
|
+
ManagedResponseHeadersPolicy["CORS_ALLOW_ALL_ORIGINS"] = "Managed-SimpleCORS";
|
|
435
|
+
/** Use this managed policy to allow CORS requests from any origin, including preflight requests. */
|
|
436
|
+
ManagedResponseHeadersPolicy["CORS_ALLOW_ALL_ORIGINS_WITH_PREFLIGHT"] = "Managed-CORS-With-Preflight";
|
|
437
|
+
/** Use this managed policy to add a set of security headers to all responses that CloudFront sends to viewers. */
|
|
438
|
+
ManagedResponseHeadersPolicy["SECURITY_HEADERS"] = "Managed-SecurityHeadersPolicy";
|
|
439
|
+
/** Use this managed policy to allow simple CORS requests from any origin and add a set of security headers to all responses that CloudFront sends to viewers. */
|
|
440
|
+
ManagedResponseHeadersPolicy["CORS_ALLOW_ALL_ORIGINS_AND_SECURITY_HEADERS"] = "Managed-CORS-and-SecurityHeadersPolicy";
|
|
441
|
+
/** Use this managed policy to allow CORS requests from any origin, including preflight requests, and add a set of security headers to all responses that CloudFront sends to viewers. */
|
|
442
|
+
ManagedResponseHeadersPolicy["CORS_ALLOW_ALL_ORIGINS_WITH_PREFLIGHT_AND_SECURITY_HEADERS"] = "Managed-CORS-with-preflight-and-SecurityHeadersPolicy";
|
|
443
|
+
})(ManagedResponseHeadersPolicy || (exports.ManagedResponseHeadersPolicy = ManagedResponseHeadersPolicy = {}));
|
|
444
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzdHJpYnV0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F3cy9lZGdlL2Rpc3RyaWJ1dGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHNEQUs2QjtBQUM3QixpQ0FBaUQ7QUFJakQsZ0NBQW1DO0FBQ25DLG9EQUkwQjtBQUMxQiw0Q0FBd0M7QUFtTXhDOztHQUVHO0FBQ0gsTUFBYSxZQUFhLFNBQVEsZ0NBQWdCO0lBS2hELElBQVcsbUJBQW1CO1FBQzVCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBQ0QsSUFBVyxPQUFPO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFXLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFVRCxZQUFZLEtBQWdCLEVBQUUsSUFBWSxFQUFFLEtBQXdCO1FBQ2xFLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBUlgsYUFBUSxHQUFHLElBQUksS0FBSyxFQUFlLENBQUM7UUFFcEMsd0JBQW1CLEdBQW9CLEVBQUUsQ0FBQztRQVF6RCxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN0QixNQUFNLGlCQUFpQixHQUFHLG9CQUFRLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FDOUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQ2hDLGVBQVMsQ0FBQyxtQkFBbUIsQ0FDOUIsQ0FBQyxNQUFNLENBQUM7WUFDVCxJQUNFLENBQUMsYUFBSyxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQztnQkFDdEMsaUJBQWlCLEtBQUssV0FBVyxFQUNqQyxDQUFDO2dCQUNELE1BQU0sSUFBSSxLQUFLLENBQ2Isb0dBQW9HLGlCQUFpQixHQUFHLENBQ3pILENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztR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O09BSUc7SUFDSCxtSEFBNkYsQ0FBQTtJQUM3RiwyR0FBMkc7SUFDM0csa0VBQTRDLENBQUE7SUFDNUMsc0ZBQXNGO0lBQ3RGLGdGQUEwRCxDQUFBO0lBQzFEOztPQUVHO0lBQ0gsK0ZBQXlFLENBQUE7SUFDekU7O09BRUc7SUFDSCwwSEFBb0csQ0FBQTtBQUN0RyxDQUFDLEVBNUJXLGtCQUFrQixrQ0FBbEIsa0JBQWtCLFFBNEI3QjtBQUVEOzs7OztHQUtHO0FBQ0gsSUFBWSwwQkFlWDtBQWZELFdBQVksMEJBQTBCO0lBQ3BDLHFIQUFxSDtJQUNySCw0RkFBOEQsQ0FBQTtJQUM5RCxxSUFBcUk7SUFDckksOEVBQWdELENBQUE7SUFDaEQseUlBQXlJO0lBQ3pJLHNFQUF3QyxDQUFBO0lBQ3hDLG1HQUFtRztJQUNuRyw4REFBZ0MsQ0FBQTtJQUNoQyxvR0FBb0c7SUFDcEcsNEdBQThFLENBQUE7SUFDOUUsbU9BQW1PO0lBQ25PLDhHQUFnRixDQUFBO0lBQ2hGLDRHQUE0RztJQUM1RyxpR0FBbUUsQ0FBQTtBQUNyRSxDQUFDLEVBZlcsMEJBQTBCLDBDQUExQiwwQkFBMEIsUUFlckM7QUFFRDs7Ozs7R0FLRztBQUNILElBQVksNEJBV1g7QUFYRCxXQUFZLDRCQUE0QjtJQUN0Qyw2RUFBNkU7SUFDN0UsNkVBQTZDLENBQUE7SUFDN0Msb0dBQW9HO0lBQ3BHLHFHQUFxRSxDQUFBO0lBQ3JFLGtIQUFrSDtJQUNsSCxrRkFBa0QsQ0FBQTtJQUNsRCxpS0FBaUs7SUFDakssc0hBQXNGLENBQUE7SUFDdEYseUxBQXlMO0lBQ3pMLG9KQUFvSCxDQUFBO0FBQ3RILENBQUMsRUFYVyw0QkFBNEIsNENBQTVCLDRCQUE0QixRQVd2QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGNsb3VkZnJvbnREaXN0cmlidXRpb24sXG4gIGRhdGFBd3NDbG91ZGZyb250Q2FjaGVQb2xpY3ksXG4gIGRhdGFBd3NDbG91ZGZyb250T3JpZ2luUmVxdWVzdFBvbGljeSxcbiAgZGF0YUF3c0Nsb3VkZnJvbnRSZXNwb25zZUhlYWRlcnNQb2xpY3ksXG59IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItYXdzXCI7XG5pbXBvcnQgeyBJUmVzb2x2YWJsZSwgVG9rZW4sIExhenkgfSBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBJQ2VydGlmaWNhdGUsIElPcmlnaW4sIEZ1bmN0aW9uQXNzb2NpYXRpb24gfSBmcm9tIFwiLlwiO1xuaW1wb3J0IHsgRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vZHVyYXRpb25cIjtcbmltcG9ydCB7IEFybkZvcm1hdCB9IGZyb20gXCIuLi9hcm5cIjtcbmltcG9ydCB7XG4gIEF3c0NvbnN0cnVjdEJhc2UsXG4gIElBd3NDb25zdHJ1Y3QsXG4gIEF3c0NvbnN0cnVjdFByb3BzLFxufSBmcm9tIFwiLi4vYXdzLWNvbnN0cnVjdFwiO1xuaW1wb3J0IHsgQXdzU3RhY2sgfSBmcm9tIFwiLi4vYXdzLXN0YWNrXCI7XG5cbi8vIFRPRE86IFJlLWFkZCBpbnZhbGlkYXRpb24gc3VwcG9ydFxuLy8gVE9ETzogUmUtYWRkIG9yaWdpbiBncm91cCAoZmFpbG92ZXIpIHN1cHBvcnRcbi8vIFRPRE86IFJlLWFkZCBrZXkgZ3JvdXAgc3VwcG9ydFxuLy8gVE9ETzogUmUtYWRkIFdBRiBzdXBwb3J0XG4vLyBUT0RPOiBSZS1hZGQgbG9nZ2luZyBzdXBwb3J0XG4vLyBUT0RPOiBSZS1hZGQgY3VzdG9tIGNhY2hlLCBvcmlnaW5SZXF1ZXN0LCBSZXNwb25zZUhlYWRlciBwb2xpY3kgc3VwcG9ydD9cblxuLyoqXG4gKiBPdXRwdXRzIHdoaWNoIG1heSBiZSByZWdpc3RlcmVkIGZvciBvdXRwdXQgdmlhIHRoZSBHcmlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERpc3RyaWJ1dGlvbk91dHB1dHMge1xuICAvKipcbiAgICogSWRlbnRpZmllciBmb3IgdGhlIGRpc3RyaWJ1dGlvbi4gRm9yIGV4YW1wbGU6IGBFREZEVkJENjMyQkhEUzVgLlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogQ2xvdWRGcm9udCBSb3V0ZSA1MyB6b25lIElEIHRoYXQgY2FuIGJlIHVzZWQgdG9cbiAgICogcm91dGUgYW4gQWxpYXMgUmVzb3VyY2UgUmVjb3JkIFNldCB0by5cbiAgICpcbiAgICogVGhpcyBhdHRyaWJ1dGUgaXMgc2ltcGx5IGFuIGFsaWFzIGZvciB0aGUgem9uZSBJRFxuICAgKi9cbiAgcmVhZG9ubHkgaG9zdGVkWm9uZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEN1cnJlbnQgc3RhdHVzIG9mIHRoZSBkaXN0cmlidXRpb24uXG4gICAqXG4gICAqIGBEZXBsb3llZGAgaWYgdGhlIGRpc3RyaWJ1dGlvbidzIGluZm9ybWF0aW9uIGlzIGZ1bGx5IHByb3BhZ2F0ZWRcbiAgICogdGhyb3VnaG91dCB0aGUgQW1hem9uIENsb3VkRnJvbnQgc3lzdGVtLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdHVzOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFSTiBmb3IgdGhlIGRpc3RyaWJ1dGlvblxuICAgKi9cbiAgcmVhZG9ubHkgYXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERvbWFpbiBuYW1lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGRpc3RyaWJ1dGlvbi5cbiAgICpcbiAgICogRm9yIGV4YW1wbGU6IGBkNjA0NzIxZnhhYXF5OS5jbG91ZGZyb250Lm5ldGBcbiAgICovXG4gIHJlYWRvbmx5IGRvbWFpbk5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBJbXBvcnRlZCBvciBjcmVhdGVkIEROUyB6b25lIGF0dHJpYnV0ZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRGlzdHJpYnV0aW9uIGV4dGVuZHMgSUF3c0NvbnN0cnVjdCB7XG4gIC8qKiBTdHJvbmdseSB0eXBlZCBvdXRwdXRzXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGRpc3RyaWJ1dGlvbk91dHB1dHM6IERpc3RyaWJ1dGlvbk91dHB1dHM7XG5cbiAgLyoqXG4gICAqIERvbWFpbiBuYW1lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGRpc3RyaWJ1dGlvbi5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKiBGb3IgZXhhbXBsZTogYGQ2MDQ3MjFmeGFhcXk5LmNsb3VkZnJvbnQubmV0YFxuICAgKi9cbiAgcmVhZG9ubHkgZG9tYWluTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDbG91ZEZyb250IFJvdXRlIDUzIHpvbmUgSUQgdGhhdCBjYW4gYmUgdXNlZCB0b1xuICAgKiByb3V0ZSBhbiBBbGlhcyBSZXNvdXJjZSBSZWNvcmQgU2V0IHRvLlxuICAgKlxuICAgKiBUaGlzIGF0dHJpYnV0ZSBpcyBzaW1wbHkgYW4gYWxpYXMgZm9yIHRoZSB6b25lIElEXG4gICAqL1xuICByZWFkb25seSBob3N0ZWRab25lSWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEaXN0cmlidXRpb25Qcm9wcyBleHRlbmRzIEF3c0NvbnN0cnVjdFByb3BzIHtcbiAgLyoqXG4gICAqIEV4dHJhIENOQU1FcyAoYWx0ZXJuYXRlIGRvbWFpbiBuYW1lcyksIGlmIGFueSwgZm9yIHRoaXMgZGlzdHJpYnV0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgYWxpYXNlcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBkaXN0cmlidXRpb24gaXMgZW5hYmxlZCB0byBhY2NlcHQgZW5kIHVzZXIgcmVxdWVzdHMgZm9yIGNvbnRlbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuIHwgSVJlc29sdmFibGU7XG5cbiAgLyoqXG4gICAqIElmIGVuYWJsZWQsIHRoZSByZXNvdXJjZSB3aWxsIHdhaXQgZm9yIHRoZSBkaXN0cmlidXRpb24gc3RhdHVzIHRvIGNoYW5nZVxuICAgKiBmcm9tIEluUHJvZ3Jlc3MgdG8gRGVwbG95ZWQuXG4gICAqXG4gICAqIFNldHRpbmcgdGhpcyB0b2ZhbHNlIHdpbGwgc2tpcCB0aGUgcHJvY2Vzcy5cbiAgICpcbiAgICogQGRlZmF1bHQ6IHRydWUuXG4gICAqL1xuICByZWFkb25seSB3YWl0Rm9yRGVwbG95bWVudD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IGJlaGF2aW9yIGZvciB0aGUgZGlzdHJpYnV0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdEJlaGF2aW9yOiBCZWhhdmlvck9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgYmVoYXZpb3JzIGZvciB0aGUgZGlzdHJpYnV0aW9uLCBtYXBwZWQgYnkgdGhlIHBhdGhQYXR0ZXJuIHRoYXQgc3BlY2lmaWVzIHdoaWNoIHJlcXVlc3RzIHRvIGFwcGx5IHRoZSBiZWhhdmlvciB0by5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBhZGRpdGlvbmFsIGJlaGF2aW9ycyBhcmUgYWRkZWQuXG4gICAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsQmVoYXZpb3JzPzogUmVjb3JkPHN0cmluZywgQmVoYXZpb3JPcHRpb25zPjtcblxuICAvKipcbiAgICogQSBjZXJ0aWZpY2F0ZSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiBUaGUgY2VydGlmaWNhdGUgbXVzdCBiZSBsb2NhdGVkIGluIE4uIFZpcmdpbmlhICh1cy1lYXN0LTEpLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBDbG91ZEZyb250IHdpbGRjYXJkIGNlcnRpZmljYXRlICgqLmNsb3VkZnJvbnQubmV0KSB3aWxsIGJlIHVzZWQuXG4gICAqL1xuICByZWFkb25seSBjZXJ0aWZpY2F0ZT86IElDZXJ0aWZpY2F0ZTtcblxuICAvKipcbiAgICogQW55IGNvbW1lbnRzIHlvdSB3YW50IHRvIGluY2x1ZGUgYWJvdXQgdGhlIGRpc3RyaWJ1dGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBjb21tZW50XG4gICAqL1xuICByZWFkb25seSBjb21tZW50Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgb2JqZWN0IHRoYXQgeW91IHdhbnQgQ2xvdWRGcm9udCB0byByZXF1ZXN0IGZyb20geW91ciBvcmlnaW4gKGZvciBleGFtcGxlLCBpbmRleC5odG1sKVxuICAgKiB3aGVuIGEgdmlld2VyIHJlcXVlc3RzIHRoZSByb290IFVSTCBmb3IgeW91ciBkaXN0cmlidXRpb24uIElmIG5vIGRlZmF1bHQgb2JqZWN0IGlzIHNldCwgdGhlXG4gICAqIHJlcXVlc3QgZ29lcyB0byB0aGUgb3JpZ2luJ3Mgcm9vdCAoZS5nLiwgZXhhbXBsZS5jb20vKS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBkZWZhdWx0IHJvb3Qgb2JqZWN0XG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0Um9vdE9iamVjdD86IHN0cmluZztcblxuICAvKipcbiAgICogQ29udHJvbHMgdGhlIGNvdW50cmllcyBpbiB3aGljaCB5b3VyIGNvbnRlbnQgaXMgZGlzdHJpYnV0ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gZ2VvZ3JhcGhpYyByZXN0cmljdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IGdlb1Jlc3RyaWN0aW9uPzogR2VvUmVzdHJpY3Rpb247XG5cbiAgLyoqXG4gICAqIFNwZWNpZnkgdGhlIG1heGltdW0gSFRUUCB2ZXJzaW9uIHRoYXQgeW91IHdhbnQgdmlld2VycyB0byB1c2UgdG8gY29tbXVuaWNhdGUgd2l0aCBDbG91ZEZyb250LlxuICAgKlxuICAgKiBGb3Igdmlld2VycyBhbmQgQ2xvdWRGcm9udCB0byB1c2UgSFRUUC8yLCB2aWV3ZXJzIG11c3Qgc3VwcG9ydCBUTFMgMS4yIG9yIGxhdGVyLCBhbmQgbXVzdCBzdXBwb3J0IHNlcnZlciBuYW1lIGlkZW50aWZpY2F0aW9uIChTTkkpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBIdHRwVmVyc2lvbi5IVFRQMlxuICAgKi9cbiAgcmVhZG9ubHkgaHR0cFZlcnNpb24/OiBIdHRwVmVyc2lvbjtcblxuICAvKipcbiAgICogVGhlIHByaWNlIGNsYXNzIHRoYXQgY29ycmVzcG9uZHMgd2l0aCB0aGUgbWF4aW11bSBwcmljZSB0aGF0IHlvdSB3YW50IHRvIHBheSBmb3IgQ2xvdWRGcm9udCBzZXJ2aWNlLlxuICAgKiBJZiB5b3Ugc3BlY2lmeSBQcmljZUNsYXNzX0FsbCwgQ2xvdWRGcm9udCByZXNwb25kcyB0byByZXF1ZXN0cyBmb3IgeW91ciBvYmplY3RzIGZyb20gYWxsIENsb3VkRnJvbnQgZWRnZSBsb2NhdGlvbnMuXG4gICAqIElmIHlvdSBzcGVjaWZ5IGEgcHJpY2UgY2xhc3Mgb3RoZXIgdGhhbiBQcmljZUNsYXNzX0FsbCwgQ2xvdWRGcm9udCBzZXJ2ZXMgeW91ciBvYmplY3RzIGZyb20gdGhlIENsb3VkRnJvbnQgZWRnZSBsb2NhdGlvblxuICAgKiB0aGF0IGhhcyB0aGUgbG93ZXN0IGxhdGVuY3kgYW1vbmcgdGhlIGVkZ2UgbG9jYXRpb25zIGluIHlvdXIgcHJpY2UgY2xhc3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IFByaWNlQ2xhc3MuUFJJQ0VfQ0xBU1NfQUxMXG4gICAqL1xuICByZWFkb25seSBwcmljZUNsYXNzPzogUHJpY2VDbGFzcztcblxuICAvKipcbiAgICogSG93IENsb3VkRnJvbnQgc2hvdWxkIGhhbmRsZSByZXF1ZXN0cyB0aGF0IGFyZSBub3Qgc3VjY2Vzc2Z1bCAoZS5nLiwgUGFnZU5vdEZvdW5kKS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBjdXN0b20gZXJyb3IgcmVzcG9uc2VzLlxuICAgKi9cbiAgcmVhZG9ubHkgZXJyb3JSZXNwb25zZXM/OiBFcnJvclJlc3BvbnNlW107XG5cbiAgLyoqXG4gICAqIFRoZSBtaW5pbXVtIHZlcnNpb24gb2YgdGhlIFNTTCBwcm90b2NvbCB0aGF0IHlvdSB3YW50IENsb3VkRnJvbnQgdG8gdXNlIGZvciBIVFRQUyBjb25uZWN0aW9ucy5cbiAgICpcbiAgICogQ2xvdWRGcm9udCBzZXJ2ZXMgeW91ciBvYmplY3RzIG9ubHkgdG8gYnJvd3NlcnMgb3IgZGV2aWNlcyB0aGF0IHN1cHBvcnQgYXRcbiAgICogbGVhc3QgdGhlIFNTTCB2ZXJzaW9uIHRoYXQgeW91IHNwZWNpZnkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gU2VjdXJpdHlQb2xpY3lQcm90b2NvbC5UTFNfVjFfMl8yMDIxLlxuICAgKi9cbiAgcmVhZG9ubHkgbWluaW11bVByb3RvY29sVmVyc2lvbj86IFNlY3VyaXR5UG9saWN5UHJvdG9jb2w7XG5cbiAgLyoqXG4gICAqIFRoZSBTU0wgbWV0aG9kIENsb3VkRnJvbnQgd2lsbCB1c2UgZm9yIHlvdXIgZGlzdHJpYnV0aW9uLlxuICAgKlxuICAgKiBTZXJ2ZXIgTmFtZSBJbmRpY2F0aW9uIChTTkkpIC0gaXMgYW4gZXh0ZW5zaW9uIHRvIHRoZSBUTFMgY29tcHV0ZXIgbmV0d29ya2luZyBwcm90b2NvbCBieSB3aGljaCBhIGNsaWVudCBpbmRpY2F0ZXNcbiAgICogd2hpY2ggaG9zdG5hbWUgaXQgaXMgYXR0ZW1wdGluZyB0byBjb25uZWN0IHRvIGF0IHRoZSBzdGFydCBvZiB0aGUgaGFuZHNoYWtpbmcgcHJvY2Vzcy4gVGhpcyBhbGxvd3MgYSBzZXJ2ZXIgdG8gcHJlc2VudFxuICAgKiBtdWx0aXBsZSBjZXJ0aWZpY2F0ZXMgb24gdGhlIHNhbWUgSVAgYWRkcmVzcyBhbmQgVENQIHBvcnQgbnVtYmVyIGFuZCBoZW5jZSBhbGxvd3MgbXVsdGlwbGUgc2VjdXJlIChIVFRQUykgd2Vic2l0ZXNcbiAgICogKG9yIGFueSBvdGhlciBzZXJ2aWNlIG92ZXIgVExTKSB0byBiZSBzZXJ2ZWQgYnkgdGhlIHNhbWUgSVAgYWRkcmVzcyB3aXRob3V0IHJlcXVpcmluZyBhbGwgdGhvc2Ugc2l0ZXMgdG8gdXNlIHRoZSBzYW1lIGNlcnRpZmljYXRlLlxuICAgKlxuICAgKiBDbG91ZEZyb250IGNhbiB1c2UgU05JIHRvIGhvc3QgbXVsdGlwbGUgZGlzdHJpYnV0aW9ucyBvbiB0aGUgc2FtZSBJUCAtIHdoaWNoIGEgbGFyZ2UgbWFqb3JpdHkgb2YgY2xpZW50cyB3aWxsIHN1cHBvcnQuXG4gICAqXG4gICAqIElmIHlvdXIgY2xpZW50cyBjYW5ub3Qgc3VwcG9ydCBTTkkgaG93ZXZlciAtIENsb3VkRnJvbnQgY2FuIHVzZSBkZWRpY2F0ZWQgSVBzIGZvciB5b3VyIGRpc3RyaWJ1dGlvbiAtIGJ1dCB0aGVyZSBpcyBhIHByb3JhdGVkIG1vbnRobHkgY2hhcmdlIGZvclxuICAgKiB1c2luZyB0aGlzIGZlYXR1cmUuIEJ5IGRlZmF1bHQsIHdlIHVzZSBTTkkgLSBidXQgeW91IGNhbiBvcHRpb25hbGx5IGVuYWJsZSBkZWRpY2F0ZWQgSVBzIChWSVApLlxuICAgKlxuICAgKiBTZWUgdGhlIENsb3VkRnJvbnQgU1NMIGZvciBtb3JlIGRldGFpbHMgYWJvdXQgcHJpY2luZyA6IGh0dHBzOi8vYXdzLmFtYXpvbi5jb20vY2xvdWRmcm9udC9jdXN0b20tc3NsLWRvbWFpbnMvXG4gICAqXG4gICAqIEBkZWZhdWx0IFNTTE1ldGhvZC5TTklcbiAgICovXG4gIHJlYWRvbmx5IHNzbFN1cHBvcnRNZXRob2Q/OiBTU0xNZXRob2Q7XG59XG5cbi8qKlxuICogQW1hem9uIENsb3VkZnJvbnQgRGlzdHJpYnV0aW9uXG4gKi9cbmV4cG9ydCBjbGFzcyBEaXN0cmlidXRpb24gZXh0ZW5kcyBBd3NDb25zdHJ1Y3RCYXNlIGltcGxlbWVudHMgSURpc3RyaWJ1dGlvbiB7XG4gIC8vIFRPRE86IEFkZCBzdGF0aWMgZnJvbUxvb2t1cD9cbiAgcHJpdmF0ZSByZWFkb25seSByZXNvdXJjZTogY2xvdWRmcm9udERpc3RyaWJ1dGlvbi5DbG91ZGZyb250RGlzdHJpYnV0aW9uO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX291dHB1dHM6IERpc3RyaWJ1dGlvbk91dHB1dHM7XG4gIHB1YmxpYyBnZXQgZGlzdHJpYnV0aW9uT3V0cHV0cygpOiBEaXN0cmlidXRpb25PdXRwdXRzIHtcbiAgICByZXR1cm4gdGhpcy5fb3V0cHV0cztcbiAgfVxuICBwdWJsaWMgZ2V0IG91dHB1dHMoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgcmV0dXJuIHRoaXMuZGlzdHJpYnV0aW9uT3V0cHV0cztcbiAgfVxuICBwcml2YXRlIHJlYWRvbmx5IF9kb21haW5OYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBnZXQgZG9tYWluTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9kb21haW5OYW1lO1xuICB9XG4gIHB1YmxpYyByZWFkb25seSBob3N0ZWRab25lSWQ6IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IF9vcmlnaW5zID0gbmV3IEFycmF5PE9yaWdpbkluZGV4PigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgYWRkaXRpb25hbEJlaGF2aW9yczogQ2FjaGVCZWhhdmlvcltdID0gW107XG5cbiAgcHJpdmF0ZSByZWFkb25seSBlcnJvclJlc3BvbnNlczogRXJyb3JSZXNwb25zZVtdO1xuICBwcml2YXRlIHJlYWRvbmx5IGNlcnRpZmljYXRlPzogSUNlcnRpZmljYXRlO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIG5hbWU6IHN0cmluZywgcHJvcHM6IERpc3RyaWJ1dGlvblByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIG5hbWUsIHByb3BzKTtcblxuICAgIGlmIChwcm9wcy5jZXJ0aWZpY2F0ZSkge1xuICAgICAgY29uc3QgY2VydGlmaWNhdGVSZWdpb24gPSBBd3NTdGFjay5vZkF3c0NvbnN0cnVjdCh0aGlzKS5zcGxpdEFybihcbiAgICAgICAgcHJvcHMuY2VydGlmaWNhdGUuY2VydGlmaWNhdGVBcm4sXG4gICAgICAgIEFybkZvcm1hdC5TTEFTSF9SRVNPVVJDRV9OQU1FLFxuICAgICAgKS5yZWdpb247XG4gICAgICBpZiAoXG4gICAgICAgICFUb2tlbi5pc1VucmVzb2x2ZWQoY2VydGlmaWNhdGVSZWdpb24pICYmXG4gICAgICAgIGNlcnRpZmljYXRlUmVnaW9uICE9PSBcInVzLWVhc3QtMVwiXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBEaXN0cmlidXRpb24gY2VydGlmaWNhdGVzIG11c3QgYmUgaW4gdGhlIHVzLWVhc3QtMSByZWdpb24gYW5kIHRoZSBjZXJ0aWZpY2F0ZSB5b3UgcHJvdmlkZWQgaXMgaW4gJHtjZXJ0aWZpY2F0ZVJlZ2lvbn0uYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jZXJ0aWZpY2F0ZSA9IHByb3BzLmNlcnRpZmljYXRlO1xuICAgIHRoaXMuZXJyb3JSZXNwb25zZXMgPSBwcm9wcy5lcnJvclJlc3BvbnNlcyA/PyBbXTtcblxuICAgIGNvbnN0IGRlZmF1bHRPcmlnaW5JZCA9IHRoaXMuYWRkT3JpZ2luKHByb3BzLmRlZmF1bHRCZWhhdmlvci5vcmlnaW4pO1xuICAgIGlmIChwcm9wcy5hZGRpdGlvbmFsQmVoYXZpb3JzKSB7XG4gICAgICBPYmplY3QuZW50cmllcyhwcm9wcy5hZGRpdGlvbmFsQmVoYXZpb3JzKS5mb3JFYWNoKFxuICAgICAgICAoW3BhdGhQYXR0ZXJuLCBiZWhhdmlvck9wdGlvbnNdKSA9PiB7XG4gICAgICAgICAgdGhpcy5hZGRCZWhhdmlvcihcbiAgICAgICAgICAgIHBhdGhQYXR0ZXJuLFxuICAgICAgICAgICAgYmVoYXZpb3JPcHRpb25zLm9yaWdpbixcbiAgICAgICAgICAgIGJlaGF2aW9yT3B0aW9ucyxcbiAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBDb21tZW50cyBoYXZlIGFuIHVuZG9jdW1lbnRlZCBsaW1pdCBvZiAxMjggY2hhcmFjdGVyc1xuICAgIGNvbnN0IHRyaW1tZWRDb21tZW50ID1cbiAgICAgIHByb3BzLmNvbW1lbnQgJiYgcHJvcHMuY29tbWVudC5sZW5ndGggPiAxMjhcbiAgICAgICAgPyBgJHtwcm9wcy5jb21tZW50LnNsaWNlKDAsIDEyOCAtIDMpfS4uLmBcbiAgICAgICAgOiBwcm9wcy5jb21tZW50O1xuXG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyBjbG91ZGZyb250RGlzdHJpYnV0aW9uLkNsb3VkZnJvbnREaXN0cmlidXRpb24oXG4gICAgICB0aGlzLFxuICAgICAgXCJSZXNvdXJjZVwiLFxuICAgICAge1xuICAgICAgICBlbmFibGVkOiBwcm9wcy5lbmFibGVkID8/IHRydWUsXG4gICAgICAgIG9yaWdpbjogTGF6eS5hbnlWYWx1ZSh7XG4gICAgICAgICAgcHJvZHVjZTogKCkgPT5cbiAgICAgICAgICAgIHRoaXMuX29yaWdpbnMubWFwKChvKSA9PlxuICAgICAgICAgICAgICAvLyBMYXp5IHByb2R1Y2VycyBuZWVkIGFkZGl0aW9uYWwgeHh4VG9UZXJyYWZvcm0gd3JhcFxuICAgICAgICAgICAgICBjbG91ZGZyb250RGlzdHJpYnV0aW9uLmNsb3VkZnJvbnREaXN0cmlidXRpb25PcmlnaW5Ub1RlcnJhZm9ybShcbiAgICAgICAgICAgICAgICBvLm9yaWdpbi5yZW5kZXIoby5pZCksXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICApLFxuICAgICAgICB9KSxcbiAgICAgICAgZGVmYXVsdENhY2hlQmVoYXZpb3I6IHRoaXMuX3JlbmRlckRlZmF1bHRDYWNoZUJlaGF2aW9yKHtcbiAgICAgICAgICBwYXRoUGF0dGVybjogXCIqXCIsIC8vIGlnbm9yZWQgZm9yIERlZmF1bHQgQ2FjaGUgQmVoYXZpb3JcbiAgICAgICAgICB0YXJnZXRPcmlnaW5JZDogZGVmYXVsdE9yaWdpbklkLFxuICAgICAgICAgIC4uLnByb3BzLmRlZmF1bHRCZWhhdmlvcixcbiAgICAgICAgfSksXG4gICAgICAgIG9yZGVyZWRDYWNoZUJlaGF2aW9yOiBMYXp5LmFueVZhbHVlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHByb2R1Y2U6ICgpID0+XG4gICAgICAgICAgICAgIHRoaXMuYWRkaXRpb25hbEJlaGF2aW9ycy5tYXAoKGIpID0+XG4gICAgICAgICAgICAgICAgLy8gTGF6eSBwcm9kdWNlcnMgbmVlZCBhZGRpdGlvbmFsIHh4eFRvVGVycmFmb3JtIHdyYXBcbiAgICAgICAgICAgICAgICBjbG91ZGZyb250RGlzdHJpYnV0aW9uLmNsb3VkZnJvbnREaXN0cmlidXRpb25PcmRlcmVkQ2FjaGVCZWhhdmlvclRvVGVycmFmb3JtKFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBwYXRoUGF0dGVybjogYi5wYXRoUGF0dGVybixcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5fcmVuZGVyRGVmYXVsdENhY2hlQmVoYXZpb3IoYiksXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IG9taXRFbXB0eUFycmF5OiB0cnVlIH0sXG4gICAgICAgICksXG4gICAgICAgIGFsaWFzZXM6IHByb3BzLmFsaWFzZXMsXG4gICAgICAgIGNvbW1lbnQ6IHRyaW1tZWRDb21tZW50LFxuICAgICAgICBjdXN0b21FcnJvclJlc3BvbnNlOiB0aGlzLnJlbmRlckVycm9yUmVzcG9uc2VzKCksXG4gICAgICAgIGRlZmF1bHRSb290T2JqZWN0OiBwcm9wcy5kZWZhdWx0Um9vdE9iamVjdCxcbiAgICAgICAgaHR0cFZlcnNpb246IHByb3BzLmh0dHBWZXJzaW9uID8/IEh0dHBWZXJzaW9uLkhUVFAyLFxuICAgICAgICBwcmljZUNsYXNzOiBwcm9wcy5wcmljZUNsYXNzID8/IHVuZGVmaW5lZCxcbiAgICAgICAgcmVzdHJpY3Rpb25zOiB0aGlzLnJlbmRlclJlc3RyaWN0aW9ucyhwcm9wcy5nZW9SZXN0cmljdGlvbiksXG4gICAgICAgIHZpZXdlckNlcnRpZmljYXRlOiB0aGlzLnJlbmRlclZpZXdlckNlcnRpZmljYXRlKFxuICAgICAgICAgIHRoaXMuY2VydGlmaWNhdGUsXG4gICAgICAgICAgcHJvcHMubWluaW11bVByb3RvY29sVmVyc2lvbixcbiAgICAgICAgICBwcm9wcy5zc2xTdXBwb3J0TWV0aG9kLFxuICAgICAgICApLFxuICAgICAgICB3YWl0Rm9yRGVwbG95bWVudDogcHJvcHMud2FpdEZvckRlcGxveW1lbnQsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICB0aGlzLl9kb21haW5OYW1lID0gdGhpcy5yZXNvdXJjZS5kb21haW5OYW1lO1xuICAgIHRoaXMuaG9zdGVkWm9uZUlkID0gdGhpcy5yZXNvdXJjZS5ob3N0ZWRab25lSWQ7XG4gICAgdGhpcy5fb3V0cHV0cyA9IHtcbiAgICAgIGlkOiB0aGlzLnJlc291cmNlLmlkLFxuICAgICAgaG9zdGVkWm9uZUlkOiB0aGlzLnJlc291cmNlLmhvc3RlZFpvbmVJZCxcbiAgICAgIHN0YXR1czogdGhpcy5yZXNvdXJjZS5zdGF0dXMsXG4gICAgICBhcm46IHRoaXMucmVzb3VyY2UuYXJuLFxuICAgICAgZG9tYWluTmFtZTogdGhpcy5fZG9tYWluTmFtZSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBPcmlnaW4gdG8gdGhpcyBEaXN0cmlidXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBvcmlnaW4gVGhlIE9yaWdpbiB0byBhZGQuXG4gICAqIEBwYXJhbSBvcmlnaW5JZCBBbiBvcHRpb25hbCBpZCB0byB1c2UgZm9yIHRoZSBPcmlnaW4gb3Igb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKi9cbiAgcHVibGljIGFkZE9yaWdpbihvcmlnaW46IElPcmlnaW4sIG9yaWdpbklkPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBpbmRleGVkT3JpZ2luID0gdGhpcy5fb3JpZ2lucy5maW5kKFxuICAgICAgKG9yaWdpbkluZGV4KSA9PiBvcmlnaW5JbmRleC5vcmlnaW4gPT09IG9yaWdpbixcbiAgICApO1xuICAgIGlmIChpbmRleGVkT3JpZ2luKSB7XG4gICAgICBpZiAob3JpZ2luSWQgJiYgb3JpZ2luSWQgIT09IGluZGV4ZWRPcmlnaW4uaWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBEdXBsaWNhdGUgb3JpZ2luIGZvciAke2luZGV4ZWRPcmlnaW4uaWR9IGFuZCAke29yaWdpbklkfS5gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGluZGV4ZWRPcmlnaW4uaWQ7XG4gICAgfVxuICAgIGNvbnN0IG5leHRJbmRleCA9IHRoaXMuX29yaWdpbnMubGVuZ3RoO1xuICAgIGNvbnN0IGlkID0gb3JpZ2luSWQgPz8gYG9yaWdpbi0ke25leHRJbmRleH1gO1xuICAgIC8vIGVuc3VyZSBpZCAoaWYgcHJvdmlkZWQpIGlzIHVuaXF1ZSB3aXRoaW4gRGlzdHJpYnV0aW9uXG4gICAgaWYgKHRoaXMuX29yaWdpbnMuc29tZSgob3JpZ2luSW5kZXgpID0+IG9yaWdpbkluZGV4LmlkID09PSBpZCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYER1cGxpY2F0ZSBvcmlnaW4gaWQgJHtpZH0uIE9yaWdpbklkcyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gYSBkaXN0cmlidXRpb25gLFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5fb3JpZ2lucy5wdXNoKHsgb3JpZ2luLCBpZCB9KTtcbiAgICByZXR1cm4gaWQ7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlckVycm9yUmVzcG9uc2VzKCk6XG4gICAgfCBjbG91ZGZyb250RGlzdHJpYnV0aW9uLkNsb3VkZnJvbnREaXN0cmlidXRpb25DdXN0b21FcnJvclJlc3BvbnNlW11cbiAgICB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRoaXMuZXJyb3JSZXNwb25zZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmVycm9yUmVzcG9uc2VzLm1hcCgoZXJyb3JDb25maWcpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgIWVycm9yQ29uZmlnLnJlc3BvbnNlSHR0cFN0YXR1cyAmJlxuICAgICAgICAhZXJyb3JDb25maWcudHRsICYmXG4gICAgICAgICFlcnJvckNvbmZpZy5yZXNwb25zZVBhZ2VQYXRoXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiQSBjdXN0b20gZXJyb3IgcmVzcG9uc2Ugd2l0aG91dCBlaXRoZXIgYSAncmVzcG9uc2VIdHRwU3RhdHVzJywgJ3R0bCcgb3IgJ3Jlc3BvbnNlUGFnZVBhdGgnIGlzIG5vdCB2YWxpZC5cIixcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZXJyb3JDYWNoaW5nTWluVHRsOiBlcnJvckNvbmZpZy50dGw/LnRvU2Vjb25kcygpLFxuICAgICAgICBlcnJvckNvZGU6IGVycm9yQ29uZmlnLmh0dHBTdGF0dXMsXG4gICAgICAgIHJlc3BvbnNlQ29kZTogZXJyb3JDb25maWcucmVzcG9uc2VQYWdlUGF0aFxuICAgICAgICAgID8gKGVycm9yQ29uZmlnLnJlc3BvbnNlSHR0cFN0YXR1cyA/PyBlcnJvckNvbmZpZy5odHRwU3RhdHVzKVxuICAgICAgICAgIDogZXJyb3JDb25maWcucmVzcG9uc2VIdHRwU3RhdHVzLFxuICAgICAgICByZXNwb25zZVBhZ2VQYXRoOiBlcnJvckNvbmZpZy5yZXNwb25zZVBhZ2VQYXRoLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgbmV3IGJlaGF2aW9yIHRvIHRoaXMgZGlzdHJpYnV0aW9uIGZvciB0aGUgZ2l2ZW4gcGF0aFBhdHRlcm4uXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoUGF0dGVybiB0aGUgcGF0aCBwYXR0ZXJuIChlLmcuLCAnaW1hZ2VzLyonKSB0aGF0IHNwZWNpZmllcyB3aGljaCByZXF1ZXN0cyB0byBhcHBseSB0aGUgYmVoYXZpb3IgdG8uXG4gICAqIEBwYXJhbSBvcmlnaW4gdGhlIG9yaWdpbiB0byB1c2UgZm9yIHRoaXMgYmVoYXZpb3JcbiAgICogQHBhcmFtIGJlaGF2aW9yT3B0aW9ucyB0aGUgb3B0aW9ucyBmb3IgdGhlIGJlaGF2aW9yIGF0IHRoaXMgcGF0aC5cbiAgICovXG4gIHB1YmxpYyBhZGRCZWhhdmlvcihcbiAgICBwYXRoUGF0dGVybjogc3RyaW5nLFxuICAgIG9yaWdpbjogSU9yaWdpbixcbiAgICBiZWhhdmlvck9wdGlvbnM6IEFkZEJlaGF2aW9yT3B0aW9ucyA9IHt9LFxuICApIHtcbiAgICBpZiAocGF0aFBhdHRlcm4gPT09IFwiKlwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiT25seSB0aGUgZGVmYXVsdCBiZWhhdmlvciBjYW4gaGF2ZSBhIHBhdGggcGF0dGVybiBvZiAnKidcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHRhcmdldE9yaWdpbklkID0gdGhpcy5hZGRPcmlnaW4ob3JpZ2luKTtcbiAgICB0aGlzLmFkZGl0aW9uYWxCZWhhdmlvcnMucHVzaCh7XG4gICAgICBwYXRoUGF0dGVybixcbiAgICAgIG9yaWdpbixcbiAgICAgIHRhcmdldE9yaWdpbklkLFxuICAgICAgLi4uYmVoYXZpb3JPcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW5kIHJldHVybnMgdGhlIFRlcnJhZm9ybSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIGJlaGF2aW9yLlxuICAgKiBUaGlzIHJlbmRlcnMgYXMgYSBcIkNsb3VkZnJvbnREaXN0cmlidXRpb25EZWZhdWx0Q2FjaGVCZWhhdmlvclwiXG4gICAqIHJlZ2FyZGxlc3MgaWYgdGhpcyBpcyBhIGRlZmF1bHQgY2FjaGUgYmVoYXZpb3Igb3Igbm90LCBhcyB0aGUgdHdvXG4gICAqIGFyZSBpZGVudGljYWwgZXhjZXB0IHRoZSBgcGF0aFBhdHRlcm5gIGlzIG9taXR0ZWQgZm9yIHRoZSBkZWZhdWx0XG4gICAqIGNhY2hlIGJlaGF2aW9yLlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgX3JlbmRlckRlZmF1bHRDYWNoZUJlaGF2aW9yKFxuICAgIHByb3BzOiBDYWNoZUJlaGF2aW9yLFxuICApOiBjbG91ZGZyb250RGlzdHJpYnV0aW9uLkNsb3VkZnJvbnREaXN0cmlidXRpb25EZWZhdWx0Q2FjaGVCZWhhdmlvciB7XG4gICAgLy8gVE9ETzogc2hvdWxkIGl0IGJlIHBvc3NpYmxlIHRvIGxlYXZlIGNhY2hlUG9saWN5IGJlIHVuZGVmaW5lZD9cbiAgICBjb25zdCBtYW5hZ2VkQ2FjaGVQb2xpY3lOYW1lID1cbiAgICAgIHByb3BzLmNhY2hlUG9saWN5ID8/IE1hbmFnZWRDYWNoZVBvbGljeS5DQUNISU5HX09QVElNSVpFRDtcbiAgICBjb25zdCBjYWNoZVBvbGljeSA9IHRoaXMuZGF0YUxvb2t1cChcbiAgICAgIG1hbmFnZWRDYWNoZVBvbGljeU5hbWUsXG4gICAgICBkYXRhQXdzQ2xvdWRmcm9udENhY2hlUG9saWN5LkRhdGFBd3NDbG91ZGZyb250Q2FjaGVQb2xpY3ksXG4gICAgICB7IG5hbWU6IG1hbmFnZWRDYWNoZVBvbGljeU5hbWUgfSxcbiAgICApO1xuICAgIGNvbnN0IG9yaWdpblJlcXVlc3RQb2xpY3kgPSB0aGlzLmRhdGFMb29rdXAoXG4gICAgICBwcm9wcy5vcmlnaW5SZXF1ZXN0UG9saWN5LFxuICAgICAgZGF0YUF3c0Nsb3VkZnJvbnRPcmlnaW5SZXF1ZXN0UG9saWN5LkRhdGFBd3NDbG91ZGZyb250T3JpZ2luUmVxdWVzdFBvbGljeSxcbiAgICAgIHsgbmFtZTogcHJvcHMub3JpZ2luUmVxdWVzdFBvbGljeSB9LFxuICAgICk7XG4gICAgY29uc3QgcmVzcG9uc2VIZWFkZXJzUG9saWN5ID0gdGhpcy5kYXRhTG9va3VwKFxuICAgICAgcHJvcHMucmVzcG9uc2VIZWFkZXJzUG9saWN5LFxuICAgICAgZGF0YUF3c0Nsb3VkZnJvbnRSZXNwb25zZUhlYWRlcnNQb2xpY3kuRGF0YUF3c0Nsb3VkZnJvbnRSZXNwb25zZUhlYWRlcnNQb2xpY3ksXG4gICAgICB7IG5hbWU6IHByb3BzLnJlc3BvbnNlSGVhZGVyc1BvbGljeSB9LFxuICAgICk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRhcmdldE9yaWdpbklkOiBwcm9wcy50YXJnZXRPcmlnaW5JZCxcbiAgICAgIGFsbG93ZWRNZXRob2RzOlxuICAgICAgICBwcm9wcy5hbGxvd2VkTWV0aG9kcz8ubWV0aG9kcyA/PyBBbGxvd2VkTWV0aG9kcy5BTExPV19HRVRfSEVBRC5tZXRob2RzLFxuICAgICAgY2FjaGVkTWV0aG9kczpcbiAgICAgICAgcHJvcHMuY2FjaGVkTWV0aG9kcz8ubWV0aG9kcyA/PyBDYWNoZWRNZXRob2RzLkNBQ0hFX0dFVF9IRUFELm1ldGhvZHMsXG4gICAgICBjYWNoZVBvbGljeUlkOiBjYWNoZVBvbGljeT8uaWQsXG4gICAgICBjb21wcmVzczogcHJvcHMuY29tcHJlc3MgPz8gdHJ1ZSxcbiAgICAgIG9yaWdpblJlcXVlc3RQb2xpY3lJZDogb3JpZ2luUmVxdWVzdFBvbGljeT8uaWQsXG4gICAgICByZXNwb25zZUhlYWRlcnNQb2xpY3lJZDogcmVzcG9uc2VIZWFkZXJzUG9saWN5Py5pZCxcbiAgICAgIHNtb290aFN0cmVhbWluZzogcHJvcHMuc21vb3RoU3RyZWFtaW5nLFxuICAgICAgdmlld2VyUHJvdG9jb2xQb2xpY3k6XG4gICAgICAgIHByb3BzLnZpZXdlclByb3RvY29sUG9saWN5ID8/IFZpZXdlclByb3RvY29sUG9saWN5LkFMTE9XX0FMTCxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJSZXN0cmljdGlvbnMoZ2VvUmVzdHJpY3Rpb24/OiBHZW9SZXN0cmljdGlvbikge1xuICAgIHJldHVybiBnZW9SZXN0cmljdGlvblxuICAgICAgPyB7XG4gICAgICAgICAgZ2VvUmVzdHJpY3Rpb246IHtcbiAgICAgICAgICAgIHJlc3RyaWN0aW9uVHlwZTogZ2VvUmVzdHJpY3Rpb24ucmVzdHJpY3Rpb25UeXBlLFxuICAgICAgICAgICAgbG9jYXRpb25zOlxuICAgICAgICAgICAgICBnZW9SZXN0cmljdGlvbi5yZXN0cmljdGlvblR5cGUgIT09IEdlb1Jlc3RyaWN0aW9uVHlwZS5OT05FXG4gICAgICAgICAgICAgICAgPyB0aGlzLnZhbGlkYXRlTG9jYXRpb25zKGdlb1Jlc3RyaWN0aW9uLmxvY2F0aW9ucylcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB9LFxuICAgICAgICB9XG4gICAgICA6IHtcbiAgICAgICAgICBnZW9SZXN0cmljdGlvbjoge1xuICAgICAgICAgICAgcmVzdHJpY3Rpb25UeXBlOiBHZW9SZXN0cmljdGlvblR5cGUuTk9ORSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZUxvY2F0aW9ucyhsb2NhdGlvbnM6IHN0cmluZ1tdKSB7XG4gICAgY29uc3QgTE9DQVRJT05fUkVHRVggPSAvXltBLVpdezJ9JC87XG4gICAgaWYgKGxvY2F0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlNob3VsZCBwcm92aWRlIGF0IGxlYXN0IDEgbG9jYXRpb25cIik7XG4gICAgfVxuICAgIGxvY2F0aW9ucy5mb3JFYWNoKChsb2NhdGlvbikgPT4ge1xuICAgICAgaWYgKCFMT0NBVElPTl9SRUdFWC50ZXN0KGxvY2F0aW9uKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEludmFsaWQgbG9jYXRpb24gZm9ybWF0IGZvciBsb2NhdGlvbjogJHtsb2NhdGlvbn0sIGxvY2F0aW9uIHNob3VsZCBiZSB0d28tbGV0dGVyIGFuZCB1cHBlcmNhc2UgY291bnRyeSBJU08gMzE2Ni0xLWFscGhhLTIgY29kZWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGxvY2F0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyVmlld2VyQ2VydGlmaWNhdGUoXG4gICAgY2VydGlmaWNhdGU/OiBJQ2VydGlmaWNhdGUsXG4gICAgbWluaW11bVByb3RvY29sVmVyc2lvblByb3A/OiBTZWN1cml0eVBvbGljeVByb3RvY29sLFxuICAgIHNzbFN1cHBvcnRNZXRob2RQcm9wPzogU1NMTWV0aG9kLFxuICApOiBjbG91ZGZyb250RGlzdHJpYnV0aW9uLkNsb3VkZnJvbnREaXN0cmlidXRpb25WaWV3ZXJDZXJ0aWZpY2F0ZSB7XG4gICAgY29uc3QgbWluaW11bVByb3RvY29sVmVyc2lvbiA9XG4gICAgICBtaW5pbXVtUHJvdG9jb2xWZXJzaW9uUHJvcCA/PyBTZWN1cml0eVBvbGljeVByb3RvY29sLlRMU19WMV8yXzIwMjE7XG4gICAgY29uc3Qgc3NsU3VwcG9ydE1ldGhvZCA9IHNzbFN1cHBvcnRNZXRob2RQcm9wID8/IFNTTE1ldGhvZC5TTkk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uKGNlcnRpZmljYXRlXG4gICAgICAgID8geyBhY21DZXJ0aWZpY2F0ZUFybjogY2VydGlmaWNhdGUuY2VydGlmaWNhdGVBcm4gfVxuICAgICAgICA6IHsgY2xvdWRmcm9udERlZmF1bHRDZXJ0aWZpY2F0ZTogdHJ1ZSB9KSxcbiAgICAgIG1pbmltdW1Qcm90b2NvbFZlcnNpb246IG1pbmltdW1Qcm90b2NvbFZlcnNpb24sXG4gICAgICBzc2xTdXBwb3J0TWV0aG9kOiBzc2xTdXBwb3J0TWV0aG9kLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ29uZGl0aW9uYWxseSBsb29rdXAgb3IgY3JlYXRlIGEgY2hpbGQgYmFzZWQgb24gdGhlIGlkIHByb3ZpZGVkLlxuICAgKiBJZiB0aGUgaWQgaXMgdW5kZWZpbmVkLCBpdCB3aWxsIHJldHVybiB1bmRlZmluZWQuXG4gICAqXG4gICAqIEBwYXJhbSBpZCB0aGUgaWQgb2YgdGhlIGNoaWxkIHRvIGxvb2t1cCBvciBjcmVhdGVcbiAgICogQHBhcmFtIGNvbnN0cnVjdFR5cGUgdGhlIHR5cGUgb2YgdGhlIGNoaWxkIHRvIGNyZWF0ZVxuICAgKiBAcGFyYW0gY29uZmlnIHRoZSBjb25maWd1cmF0aW9uIHRvIHBhc3MgdG8gdGhlIGNoaWxkXG4gICAqL1xuICBwcml2YXRlIGRhdGFMb29rdXA8VENvbnN0cnVjdCBleHRlbmRzIENvbnN0cnVjdD4oXG4gICAgaWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBjb25zdHJ1Y3RUeXBlOiBuZXcgKFxuICAgICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICAgIGlkSW5wdXQ6IHN0cmluZyxcbiAgICAgIGNvbmZpZzogYW55LFxuICAgICkgPT4gVENvbnN0cnVjdCxcbiAgICBjb25maWc/OiBhbnksXG4gICk6IFRDb25zdHJ1Y3QgfCB1bmRlZmluZWQge1xuICAgIGlmICghaWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGxldCBjaGlsZCA9IHRoaXMubm9kZS50cnlGaW5kQ2hpbGQoaWQpIGFzIFRDb25zdHJ1Y3QgfCB1bmRlZmluZWQ7XG4gICAgaWYgKCFjaGlsZCkge1xuICAgICAgY2hpbGQgPSBuZXcgY29uc3RydWN0VHlwZSh0aGlzLCBpZCwgY29uZmlnKTtcbiAgICB9XG4gICAgcmV0dXJuIGNoaWxkO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VvUmVzdHJpY3Rpb24ge1xuICByZWFkb25seSBsb2NhdGlvbnM6IHN0cmluZ1tdO1xuICByZWFkb25seSByZXN0cmljdGlvblR5cGU6IEdlb1Jlc3RyaWN0aW9uVHlwZTtcbn1cblxuZXhwb3J0IGVudW0gR2VvUmVzdHJpY3Rpb25UeXBlIHtcbiAgTk9ORSA9IFwibm9uZVwiLFxuICBXSElURUxJU1QgPSBcIndoaXRlbGlzdFwiLFxuICBCTEFDS0xJU1QgPSBcImJsYWNrbGlzdFwiLFxufVxuXG4vLyByZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE1Ni4wL3BhY2thZ2VzL2F3cy1jZGstbGliL2F3cy1jbG91ZGZyb250L2xpYi9kaXN0cmlidXRpb24udHNcblxuLyoqIE1heGltdW0gSFRUUCB2ZXJzaW9uIHRvIHN1cHBvcnQgKi9cbmV4cG9ydCBlbnVtIEh0dHBWZXJzaW9uIHtcbiAgLyoqIEhUVFAgMS4xICovXG4gIEhUVFAxXzEgPSBcImh0dHAxLjFcIixcbiAgLyoqIEhUVFAgMiAqL1xuICBIVFRQMiA9IFwiaHR0cDJcIixcbiAgLyoqIEhUVFAgMiBhbmQgSFRUUCAzICovXG4gIEhUVFAyX0FORF8zID0gXCJodHRwMmFuZDNcIixcbiAgLyoqIEhUVFAgMyAqL1xuICBIVFRQMyA9IFwiaHR0cDNcIixcbn1cblxuLyoqXG4gKiBUaGUgcHJpY2UgY2xhc3MgZGV0ZXJtaW5lcyBob3cgbWFueSBlZGdlIGxvY2F0aW9ucyBDbG91ZEZyb250IHdpbGwgdXNlIGZvciB5b3VyIGRpc3RyaWJ1dGlvbi5cbiAqIFNlZSBodHRwczovL2F3cy5hbWF6b24uY29tL2Nsb3VkZnJvbnQvcHJpY2luZy8gZm9yIGZ1bGwgbGlzdCBvZiBzdXBwb3J0ZWQgcmVnaW9ucy5cbiAqL1xuZXhwb3J0IGVudW0gUHJpY2VDbGFzcyB7XG4gIC8qKiBVU0EsIENhbmFkYSwgRXVyb3BlLCAmIElzcmFlbCAqL1xuICBQUklDRV9DTEFTU18xMDAgPSBcIlByaWNlQ2xhc3NfMTAwXCIsXG4gIC8qKiBQUklDRV9DTEFTU18xMDAgKyBTb3V0aCBBZnJpY2EsIEtlbnlhLCBNaWRkbGUgRWFzdCwgSmFwYW4sIFNpbmdhcG9yZSwgU291dGggS29yZWEsIFRhaXdhbiwgSG9uZyBLb25nLCAmIFBoaWxpcHBpbmVzICovXG4gIFBSSUNFX0NMQVNTXzIwMCA9IFwiUHJpY2VDbGFzc18yMDBcIixcbiAgLyoqIEFsbCBsb2NhdGlvbnMgKi9cbiAgUFJJQ0VfQ0xBU1NfQUxMID0gXCJQcmljZUNsYXNzX0FsbFwiLFxufVxuXG4vKipcbiAqIFRoZSBTU0wgbWV0aG9kIENsb3VkRnJvbnQgd2lsbCB1c2UgZm9yIHlvdXIgZGlzdHJpYnV0aW9uLlxuICpcbiAqIFNlcnZlciBOYW1lIEluZGljYXRpb24gKFNOSSkgLSBpcyBhbiBleHRlbnNpb24gdG8gdGhlIFRMUyBjb21wdXRlciBuZXR3b3JraW5nIHByb3RvY29sIGJ5IHdoaWNoIGEgY2xpZW50IGluZGljYXRlc1xuICogIHdoaWNoIGhvc3RuYW1lIGl0IGlzIGF0dGVtcHRpbmcgdG8gY29ubmVjdCB0byBhdCB0aGUgc3RhcnQgb2YgdGhlIGhhbmRzaGFraW5nIHByb2Nlc3MuIFRoaXMgYWxsb3dzIGEgc2VydmVyIHRvIHByZXNlbnRcbiAqICBtdWx0aXBsZSBjZXJ0aWZpY2F0ZXMgb24gdGhlIHNhbWUgSVAgYWRkcmVzcyBhbmQgVENQIHBvcnQgbnVtYmVyIGFuZCBoZW5jZSBhbGxvd3MgbXVsdGlwbGUgc2VjdXJlIChIVFRQUykgd2Vic2l0ZXNcbiAqIChvciBhbnkgb3RoZXIgc2VydmljZSBvdmVyIFRMUykgdG8gYmUgc2VydmVkIGJ5IHRoZSBzYW1lIElQIGFkZHJlc3Mgd2l0aG91dCByZXF1aXJpbmcgYWxsIHRob3NlIHNpdGVzIHRvIHVzZSB0aGUgc2FtZSBjZXJ0aWZpY2F0ZS5cbiAqXG4gKiBDbG91ZEZyb250IGNhbiB1c2UgU05JIHRvIGhvc3QgbXVsdGlwbGUgZGlzdHJpYnV0aW9ucyBvbiB0aGUgc2FtZSBJUCAtIHdoaWNoIGEgbGFyZ2UgbWFqb3JpdHkgb2YgY2xpZW50cyB3aWxsIHN1cHBvcnQuXG4gKlxuICogSWYgeW91ciBjbGllbnRzIGNhbm5vdCBzdXBwb3J0IFNOSSBob3dldmVyIC0gQ2xvdWRGcm9udCBjYW4gdXNlIGRlZGljYXRlZCBJUHMgZm9yIHlvdXIgZGlzdHJpYnV0aW9uIC0gYnV0IHRoZXJlIGlzIGEgcHJvcmF0ZWQgbW9udGhseSBjaGFyZ2UgZm9yXG4gKiB1c2luZyB0aGlzIGZlYXR1cmUuIEJ5IGRlZmF1bHQsIHdlIHVzZSBTTkkgLSBidXQgeW91IGNhbiBvcHRpb25hbGx5IGVuYWJsZSBkZWRpY2F0ZWQgSVBzIChWSVApLlxuICpcbiAqIFNlZSB0aGUgQ2xvdWRGcm9udCBTU0wgZm9yIG1vcmUgZGV0YWlscyBhYm91dCBwcmljaW5nIDogaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9jbG91ZGZyb250L2N1c3RvbS1zc2wtZG9tYWlucy9cbiAqXG4gKi9cbmV4cG9ydCBlbnVtIFNTTE1ldGhvZCB7XG4gIFNOSSA9IFwic25pLW9ubHlcIixcbiAgVklQID0gXCJ2aXBcIixcbn1cblxuLyoqXG4gKiBUaGUgbWluaW11bSB2ZXJzaW9uIG9mIHRoZSBTU0wgcHJvdG9jb2wgdGhhdCB5b3Ugd2FudCBDbG91ZEZyb250IHRvIHVzZSBmb3IgSFRUUFMgY29ubmVjdGlvbnMuXG4gKiBDbG91ZEZyb250IHNlcnZlcyB5b3VyIG9iamVjdHMgb25seSB0byBicm93c2VycyBvciBkZXZpY2VzIHRoYXQgc3VwcG9ydCBhdCBsZWFzdCB0aGUgU1NMIHZlcnNpb24gdGhhdCB5b3Ugc3BlY2lmeS5cbiAqL1xuZXhwb3J0IGVudW0gU2VjdXJpdHlQb2xpY3lQcm90b2NvbCB7XG4gIFNTTF9WMyA9IFwiU1NMdjNcIixcbiAgVExTX1YxID0gXCJUTFN2MVwiLFxuICBUTFNfVjFfMjAxNiA9IFwiVExTdjFfMjAxNlwiLFxuICBUTFNfVjFfMV8yMDE2ID0gXCJUTFN2MS4xXzIwMTZcIixcbiAgVExTX1YxXzJfMjAxOCA9IFwiVExTdjEuMl8yMDE4XCIsXG4gIFRMU19WMV8yXzIwMTkgPSBcIlRMU3YxLjJfMjAxOVwiLFxuICBUTFNfVjFfMl8yMDIxID0gXCJUTFN2MS4yXzIwMjFcIixcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBjb25maWd1cmluZyBjdXN0b20gZXJyb3IgcmVzcG9uc2VzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVycm9yUmVzcG9uc2Uge1xuICAvKipcbiAgICogVGhlIG1pbmltdW0gYW1vdW50IG9mIHRpbWUsIGluIHNlY29uZHMsIHRoYXQgeW91IHdhbnQgQ2xvdWRGcm9udCB0byBjYWNoZSB0aGUgSFRUUCBzdGF0dXMgY29kZSBzcGVjaWZpZWQgaW4gRXJyb3JDb2RlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBkZWZhdWx0IGNhY2hpbmcgVFRMIGJlaGF2aW9yIGFwcGxpZXNcbiAgICovXG4gIHJlYWRvbmx5IHR0bD86IER1cmF0aW9uO1xuICAvKipcbiAgICogVGhlIEhUVFAgc3RhdHVzIGNvZGUgZm9yIHdoaWNoIHlvdSB3YW50IHRvIHNwZWNpZnkgYSBjdXN0b20gZXJyb3IgcGFnZSBhbmQvb3IgYSBjYWNoaW5nIGR1cmF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgaHR0cFN0YXR1czogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIEhUVFAgc3RhdHVzIGNvZGUgdGhhdCB5b3Ugd2FudCBDbG91ZEZyb250IHRvIHJldHVybiB0byB0aGUgdmlld2VyIGFsb25nIHdpdGggdGhlIGN1c3RvbSBlcnJvciBwYWdlLlxuICAgKlxuICAgKiBJZiB5b3Ugc3BlY2lmeSBhIHZhbHVlIGZvciBgcmVzcG9uc2VIdHRwU3RhdHVzYCwgeW91IG11c3QgYWxzbyBzcGVjaWZ5IGEgdmFsdWUgZm9yIGByZXNwb25zZVBhZ2VQYXRoYC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgZXJyb3IgY29kZSB3aWxsIGJlIHJldHVybmVkIGFzIHRoZSByZXNwb25zZSBjb2RlLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVzcG9uc2VIdHRwU3RhdHVzPzogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIHBhdGggdG8gdGhlIGN1c3RvbSBlcnJvciBwYWdlIHRoYXQgeW91IHdhbnQgQ2xvdWRGcm9udCB0byByZXR1cm4gdG8gYSB2aWV3ZXIgd2hlbiB5b3VyIG9yaWdpbiByZXR1cm5zIHRoZVxuICAgKiBgaHR0cFN0YXR1c2AsIGZvciBleGFtcGxlLCAvNHh4LWVycm9ycy80MDMtZm9yYmlkZGVuLmh0bWxcbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgZGVmYXVsdCBDbG91ZEZyb250IHJlc3BvbnNlIGlzIHNob3duLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVzcG9uc2VQYWdlUGF0aD86IHN0cmluZztcbn1cblxuLy8gcHJpdmF0ZSBpbnRlcmZhY2UgdG8ga2VlcCB0cmFjayBvZiBDYWNoZUJlaGF2aW9yc1xuaW50ZXJmYWNlIENhY2hlQmVoYXZpb3IgZXh0ZW5kcyBCZWhhdmlvck9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHBhdHRlcm4gKGUuZy4sIGBpbWFnZXMvKi5qcGdgKSB0aGF0IHNwZWNpZmllcyB3aGljaCByZXF1ZXN0cyB0byBhcHBseSB0aGUgYmVoYXZpb3IgdG8uXG4gICAqIFRoZXJlIG11c3QgYmUgZXhhY3RseSBvbmUgYmVoYXZpb3IgYXNzb2NpYXRlZCB3aXRoIGVhY2ggYERpc3RyaWJ1dGlvbmAgdGhhdCBoYXMgYSBwYXRoIHBhdHRlcm5cbiAgICogb2YgJyonLCB3aGljaCBhY3RzIGFzIHRoZSBjYXRjaC1hbGwgZGVmYXVsdCBiZWhhdmlvci5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGhQYXR0ZXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFZhbHVlIG9mIElEIGZvciB0aGUgb3JpZ2luIHRoYXQgeW91IHdhbnQgQ2xvdWRGcm9udCB0byByb3V0ZSByZXF1ZXN0cyB0byB3aGVuIGEgcmVxdWVzdCBtYXRjaGVzXG4gICAqIHRoZSBwYXRoIHBhdHRlcm4gZWl0aGVyIGZvciBhIGNhY2hlIGJlaGF2aW9yIG9yIGZvciB0aGUgZGVmYXVsdCBjYWNoZSBiZWhhdmlvci5cbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldE9yaWdpbklkOiBzdHJpbmc7XG59XG5cbi8vIHByaXZhdGUgaW50ZXJmYWNlIHRvIGluZGV4IG9yaWdpbnMgYnkgaWRcbmludGVyZmFjZSBPcmlnaW5JbmRleCB7XG4gIG9yaWdpbjogSU9yaWdpbjtcbiAgaWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBjcmVhdGluZyBhIG5ldyBiZWhhdmlvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCZWhhdmlvck9wdGlvbnMgZXh0ZW5kcyBBZGRCZWhhdmlvck9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIG9yaWdpbiB0aGF0IHlvdSB3YW50IENsb3VkRnJvbnQgdG8gcm91dGUgcmVxdWVzdHMgdG8gd2hlbiB0aGV5IG1hdGNoIHRoaXMgYmVoYXZpb3IuXG4gICAqL1xuICByZWFkb25seSBvcmlnaW46IElPcmlnaW47XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYWRkaW5nIGEgbmV3IGJlaGF2aW9yIHRvIGEgRGlzdHJpYnV0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFkZEJlaGF2aW9yT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBIVFRQIG1ldGhvZHMgdG8gYWxsb3cgZm9yIHRoaXMgYmVoYXZpb3IuXG4gICAqXG4gICAqIEBkZWZhdWx0IEFsbG93ZWRNZXRob2RzLkFMTE9XX0dFVF9IRUFEXG4gICAqL1xuICByZWFkb25seSBhbGxvd2VkTWV0aG9kcz86IEFsbG93ZWRNZXRob2RzO1xuXG4gIC8qKlxuICAgKiBIVFRQIG1ldGhvZHMgdG8gY2FjaGUgZm9yIHRoaXMgYmVoYXZpb3IuXG4gICAqXG4gICAqIEBkZWZhdWx0IENhY2hlZE1ldGhvZHMuQ0FDSEVfR0VUX0hFQURcbiAgICovXG4gIHJlYWRvbmx5IGNhY2hlZE1ldGhvZHM/OiBDYWNoZWRNZXRob2RzO1xuXG4gIC8qKlxuICAgKiBUaGUgY2FjaGUgcG9saWN5IGZvciB0aGlzIGJlaGF2aW9yLiBUaGUgY2FjaGUgcG9saWN5IGRldGVybWluZXMgd2hhdCB2YWx1ZXMgYXJlIGluY2x1ZGVkIGluIHRoZSBjYWNoZSBrZXksXG4gICAqIGFuZCB0aGUgdGltZS10by1saXZlIChUVEwpIHZhbHVlcyBmb3IgdGhlIGNhY2hlLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jb250cm9sbGluZy10aGUtY2FjaGUta2V5Lmh0bWwuXG4gICAqIEBkZWZhdWx0IE1hbmFnZWRDYWNoZVBvbGljeS5DQUNISU5HX09QVElNSVpFRFxuICAgKi9cbiAgcmVhZG9ubHkgY2FjaGVQb2xpY3k/OiBNYW5hZ2VkQ2FjaGVQb2xpY3k7IC8vVE9ETzogc3VwcG9ydCBjdXN0b20gY2FjaGUgcG9saWNpZXNcblxuICAvKipcbiAgICogV2hldGhlciB5b3Ugd2FudCBDbG91ZEZyb250IHRvIGF1dG9tYXRpY2FsbHkgY29tcHJlc3MgY2VydGFpbiBmaWxlcyBmb3IgdGhpcyBjYWNoZSBiZWhhdmlvci5cbiAgICogU2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9TZXJ2aW5nQ29tcHJlc3NlZEZpbGVzLmh0bWwjY29tcHJlc3NlZC1jb250ZW50LWNsb3VkZnJvbnQtZmlsZS10eXBlc1xuICAgKiBmb3IgZmlsZSB0eXBlcyBDbG91ZEZyb250IHdpbGwgY29tcHJlc3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGNvbXByZXNzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIG9yaWdpbiByZXF1ZXN0IHBvbGljeSBmb3IgdGhpcyBiZWhhdmlvci4gVGhlIG9yaWdpbiByZXF1ZXN0IHBvbGljeSBkZXRlcm1pbmVzIHdoaWNoIHZhbHVlcyAoZS5nLiwgaGVhZGVycywgY29va2llcylcbiAgICogYXJlIGluY2x1ZGVkIGluIHJlcXVlc3RzIHRoYXQgQ2xvdWRGcm9udCBzZW5kcyB0byB0aGUgb3JpZ2luLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IG9yaWdpblJlcXVlc3RQb2xpY3k/OiBNYW5hZ2VkT3JpZ2luUmVxdWVzdFBvbGljeTsgLy9UT0RPOiBzdXBwb3J0IGN1c3RvbSBvcmlnaW4gcmVxdWVzdCBwb2xpY2llc1xuXG4gIC8qKlxuICAgKiBUaGUgcmVzcG9uc2UgaGVhZGVycyBwb2xpY3kgZm9yIHRoaXMgYmVoYXZpb3IuIFRoZSByZXNwb25zZSBoZWFkZXJzIHBvbGljeSBkZXRlcm1pbmVzIHdoaWNoIGhlYWRlcnMgYXJlIGluY2x1ZGVkIGluIHJlc3BvbnNlc1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IHJlc3BvbnNlSGVhZGVyc1BvbGljeT86IE1hbmFnZWRSZXNwb25zZUhlYWRlcnNQb2xpY3k7XG5cbiAgLyoqXG4gICAqIFNldCB0aGlzIHRvIHRydWUgdG8gaW5kaWNhdGUgeW91IHdhbnQgdG8gZGlzdHJpYnV0ZSBtZWRpYSBmaWxlcyBpbiB0aGUgTWljcm9zb2Z0IFNtb290aCBTdHJlYW1pbmcgZm9ybWF0IHVzaW5nIHRoaXMgYmVoYXZpb3IuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBzbW9vdGhTdHJlYW1pbmc/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJvdG9jb2wgdGhhdCB2aWV3ZXJzIGNhbiB1c2UgdG8gYWNjZXNzIHRoZSBmaWxlcyBjb250cm9sbGVkIGJ5IHRoaXMgYmVoYXZpb3IuXG4gICAqXG4gICAqIEBkZWZhdWx0IFZpZXdlclByb3RvY29sUG9saWN5LkFMTE9XX0FMTFxuICAgKi9cbiAgcmVhZG9ubHkgdmlld2VyUHJvdG9jb2xQb2xpY3k/OiBWaWV3ZXJQcm90b2NvbFBvbGljeTtcblxuICAvKipcbiAgICogVGhlIENsb3VkRnJvbnQgZnVuY3Rpb25zIHRvIGludm9rZSBiZWZvcmUgc2VydmluZyB0aGUgY29udGVudHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gZnVuY3Rpb25zIHdpbGwgYmUgaW52b2tlZFxuICAgKi9cbiAgcmVhZG9ubHkgZnVuY3Rpb25Bc3NvY2lhdGlvbnM/OiBGdW5jdGlvbkFzc29jaWF0aW9uW107XG59XG5cbi8qKlxuICogVGhlIEhUVFAgbWV0aG9kcyB0aGF0IHRoZSBCZWhhdmlvciB3aWxsIGFjY2VwdCByZXF1ZXN0cyBvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIEFsbG93ZWRNZXRob2RzIHtcbiAgLyoqIEhFQUQgYW5kIEdFVCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFMTE9XX0dFVF9IRUFEID0gbmV3IEFsbG93ZWRNZXRob2RzKFtcIkdFVFwiLCBcIkhFQURcIl0pO1xuICAvKiogSEVBRCwgR0VULCBhbmQgT1BUSU9OUyAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFMTE9XX0dFVF9IRUFEX09QVElPTlMgPSBuZXcgQWxsb3dlZE1ldGhvZHMoW1xuICAgIFwiR0VUXCIsXG4gICAgXCJIRUFEXCIsXG4gICAgXCJPUFRJT05TXCIsXG4gIF0pO1xuICAvKiogQWxsIHN1cHBvcnRlZCBIVFRQIG1ldGhvZHMgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBBTExPV19BTEwgPSBuZXcgQWxsb3dlZE1ldGhvZHMoW1xuICAgIFwiR0VUXCIsXG4gICAgXCJIRUFEXCIsXG4gICAgXCJPUFRJT05TXCIsXG4gICAgXCJQVVRcIixcbiAgICBcIlBBVENIXCIsXG4gICAgXCJQT1NUXCIsXG4gICAgXCJERUxFVEVcIixcbiAgXSk7XG5cbiAgLyoqIEhUVFAgbWV0aG9kcyBzdXBwb3J0ZWQgKi9cbiAgcHVibGljIHJlYWRvbmx5IG1ldGhvZHM6IHN0cmluZ1tdO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IobWV0aG9kczogc3RyaW5nW10pIHtcbiAgICB0aGlzLm1ldGhvZHMgPSBtZXRob2RzO1xuICB9XG59XG5cbi8qKlxuICogVGhlIEhUVFAgbWV0aG9kcyB0aGF0IHRoZSBCZWhhdmlvciB3aWxsIGNhY2hlIHJlcXVlc3RzIG9uLlxuICovXG5leHBvcnQgY2xhc3MgQ2FjaGVkTWV0aG9kcyB7XG4gIC8qKiBIRUFEIGFuZCBHRVQgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDQUNIRV9HRVRfSEVBRCA9IG5ldyBDYWNoZWRNZXRob2RzKFtcIkdFVFwiLCBcIkhFQURcIl0pO1xuICAvKiogSEVBRCwgR0VULCBhbmQgT1BUSU9OUyAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENBQ0hFX0dFVF9IRUFEX09QVElPTlMgPSBuZXcgQ2FjaGVkTWV0aG9kcyhbXG4gICAgXCJHRVRcIixcbiAgICBcIkhFQURcIixcbiAgICBcIk9QVElPTlNcIixcbiAgXSk7XG5cbiAgLyoqIEhUVFAgbWV0aG9kcyBzdXBwb3J0ZWQgKi9cbiAgcHVibGljIHJlYWRvbmx5IG1ldGhvZHM6IHN0cmluZ1tdO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IobWV0aG9kczogc3RyaW5nW10pIHtcbiAgICB0aGlzLm1ldGhvZHMgPSBtZXRob2RzO1xuICB9XG59XG5cbi8qKlxuICogSG93IEhUVFBzIHNob3VsZCBiZSBoYW5kbGVkIHdpdGggeW91ciBkaXN0cmlidXRpb24uXG4gKi9cbmV4cG9ydCBlbnVtIFZpZXdlclByb3RvY29sUG9saWN5IHtcbiAgLyoqIEhUVFBTIG9ubHkgKi9cbiAgSFRUUFNfT05MWSA9IFwiaHR0cHMtb25seVwiLFxuICAvKiogV2lsbCByZWRpcmVjdCBIVFRQIHJlcXVlc3RzIHRvIEhUVFBTICovXG4gIFJFRElSRUNUX1RPX0hUVFBTID0gXCJyZWRpcmVjdC10by1odHRwc1wiLFxuICAvKiogQm90aCBIVFRQIGFuZCBIVFRQUyBzdXBwb3J0ZWQgKi9cbiAgQUxMT1dfQUxMID0gXCJhbGxvdy1hbGxcIixcbn1cblxuLyoqXG4gKiBDbG91ZEZyb250IHByb3ZpZGVzIGEgc2V0IG9mIG1hbmFnZWQgY2FjaGUgcG9saWNpZXMgdGhhdCB5b3UgY2FuIGF0dGFjaCB0byBhbnkgb2YgeW91ciBkaXN0cmlidXRpb24ncyBjYWNoZSBiZWhhdmlvcnMuXG4gKiBXaXRoIGEgbWFuYWdlZCBjYWNoZSBwb2xpY3ksIHlvdSBkb24ndCBuZWVkIHRvIHdyaXRlIG9yIG1haW50YWluIHlvdXIgb3duIGNhY2hlIHBvbGljeS4gVGhlIG1hbmFnZWQgcG9saWNpZXMgdXNlIHNldHRpbmdzIHRoYXQgYXJlIG9wdGltaXplZCBmb3Igc3BlY2lmaWMgdXNlIGNhc2VzLlxuICpcbiAqIEBsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS91c2luZy1tYW5hZ2VkLWNhY2hlLXBvbGljaWVzLmh0bWxcbiAqIEBsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXdzLzUuNjAuMC9kb2NzL2RhdGEtc291cmNlcy9jbG91ZGZyb250X2NhY2hlX3BvbGljeSNhd3MtbWFuYWdlZC1wb2xpY2llc1xuICovXG5leHBvcnQgZW51bSBNYW5hZ2VkQ2FjaGVQb2xpY3kge1xuICAvKipcbiAgICogVGhpcyBwb2xpY3kgaXMgZGVzaWduZWQgZm9yIHVzZSB3aXRoIGFuIG9yaWdpbiB0aGF0IGlzIGFuIEFXUyBBbXBsaWZ5IHdlYiBhcHAuXG4gICAqL1xuICBBTVBMSUZZID0gXCJNYW5hZ2VkLUFtcGxpZnlcIixcbiAgLyoqXG4gICAqIE9wdGltaXplIGNhY2hlIGVmZmljaWVuY3kgYnkgbWluaW1pemluZyB0aGUgdmFsdWVzIHRoYXQgQ2xvdWRGcm9udCBpbmNsdWRlcyBpbiB0aGUgY2FjaGUga2V5LlxuICAgKiBRdWVyeSBzdHJpbmdzIGFuZCBjb29raWVzIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIGNhY2hlIGtleSwgYW5kIG9ubHkgdGhlIG5vcm1hbGl6ZWQgJ0FjY2VwdC1FbmNvZGluZycgaGVhZGVyIGlzIGluY2x1ZGVkLlxuICAgKi9cbiAgQ0FDSElOR19PUFRJTUlaRUQgPSBcIk1hbmFnZWQtQ2FjaGluZ09wdGltaXplZFwiLFxuICAvKipcbiAgICogT3B0aW1pemUgY2FjaGUgZWZmaWNpZW5jeSBieSBtaW5pbWl6aW5nIHRoZSB2YWx1ZXMgdGhhdCBDbG91ZEZyb250IGluY2x1ZGVzIGluIHRoZSBjYWNoZSBrZXkuXG4gICAqIFF1ZXJ5IHN0cmluZ3MgYW5kIGNvb2tpZXMgYXJlIG5vdCBpbmNsdWRlZCBpbiB0aGUgY2FjaGUga2V5LCBhbmQgb25seSB0aGUgbm9ybWFsaXplZCAnQWNjZXB0LUVuY29kaW5nJyBoZWFkZXIgaXMgaW5jbHVkZWQuXG4gICAqIERpc2FibGVzIGNhY2hlIGNvbXByZXNzaW9uLlxuICAgKi9cbiAgQ0FDSElOR19PUFRJTUlaRURfRk9SX1VOQ09NUFJFU1NFRF9PQkpFQ1RTID0gXCJNYW5hZ2VkLUNhY2hpbmdPcHRpbWl6ZWRGb3JVbmNvbXByZXNzZWRPYmplY3RzXCIsXG4gIC8qKiBEaXNhYmxlcyBjYWNoaW5nLiBUaGlzIHBvbGljeSBpcyB1c2VmdWwgZm9yIGR5bmFtaWMgY29udGVudCBhbmQgZm9yIHJlcXVlc3RzIHRoYXQgYXJlIG5vdCBjYWNoZWFibGUuICovXG4gIENBQ0hJTkdfRElTQUJMRUQgPSBcIk1hbmFnZWQtQ2FjaGluZ0Rpc2FibGVkXCIsXG4gIC8qKiBEZXNpZ25lZCBmb3IgdXNlIHdpdGggYW4gb3JpZ2luIHRoYXQgaXMgYW4gQVdTIEVsZW1lbnRhbCBNZWRpYVBhY2thZ2UgZW5kcG9pbnQuICovXG4gIEVMRU1FTlRBTF9NRURJQV9QQUNLQUdFID0gXCJNYW5hZ2VkLUVsZW1lbnRhbC1NZWRpYVBhY2thZ2VcIixcbiAgLyoqXG4gICAqIERlc2lnbmVkIGZvciB1c2Ugd2l0aCBhbiBvcmlnaW4gdGhhdCByZXR1cm5zIENhY2hlLUNvbnRyb2wgSFRUUCByZXNwb25zZSBoZWFkZXJzIGFuZCBkb2VzIG5vdCBzZXJ2ZSBkaWZmZXJlbnQgY29udGVudCBiYXNlZCBvbiB2YWx1ZXMgcHJlc2VudCBpbiB0aGUgcXVlcnkgc3RyaW5nLlxuICAgKi9cbiAgVVNFX09SSUdJTl9DQUNIRV9DT05UUk9MX0hFQURFUlMgPSBcIk1hbmFnZWQtVXNlT3JpZ2luQ2FjaGVDb250cm9sSGVhZGVyc1wiLFxuICAvKipcbiAgICogRGVzaWduZWQgZm9yIHVzZSB3aXRoIGFuIG9yaWdpbiB0aGF0IHJldHVybnMgQ2FjaGUtQ29udHJvbCBIVFRQIHJlc3BvbnNlIGhlYWRlcnMgYW5kIHNlcnZlcyBkaWZmZXJlbnQgY29udGVudCBiYXNlZCBvbiB2YWx1ZXMgcHJlc2VudCBpbiB0aGUgcXVlcnkgc3RyaW5nLlxuICAgKi9cbiAgVVNFX09SSUdJTl9DQUNIRV9DT05UUk9MX0hFQURFUlNfUVVFUllfU1RSSU5HUyA9IFwiTWFuYWdlZC1Vc2VPcmlnaW5DYWNoZUNvbnRyb2xIZWFkZXJzLVF1ZXJ5U3RyaW5nc1wiLFxufVxuXG4vKipcbiAqIE9yaWdpbiBSZXF1ZXN0IFBvbGljeSBjb25maWd1cmF0aW9uLlxuICpcbiAqIEBsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS91c2luZy1tYW5hZ2VkLW9yaWdpbi1yZXF1ZXN0LXBvbGljaWVzLmh0bWxcbiAqIEBsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXdzLzUuNjAuMC9kb2NzL2RhdGEtc291cmNlcy9jbG91ZGZyb250X29yaWdpbl9yZXF1ZXN0X3BvbGljeSNhd3MtbWFuYWdlZC1wb2xpY2llc1xuICovXG5leHBvcnQgZW51bSBNYW5hZ2VkT3JpZ2luUmVxdWVzdFBvbGljeSB7XG4gIC8qKiBUaGlzIHBvbGljeSBpbmNsdWRlcyBvbmx5IHRoZSBVc2VyLUFnZW50IGFuZCBSZWZlcmVyIGhlYWRlcnMuIEl0IGRvZXNu4oCZdCBpbmNsdWRlIGFueSBxdWVyeSBzdHJpbmdzIG9yIGNvb2tpZXMuICovXG4gIFVTRVJfQUdFTlRfUkVGRVJFUl9IRUFERVJTID0gXCJNYW5hZ2VkLVVzZXJBZ2VudFJlZmVyZXJIZWFkZXJzXCIsXG4gIC8qKiBUaGlzIHBvbGljeSBpbmNsdWRlcyB0aGUgaGVhZGVyIHRoYXQgZW5hYmxlcyBjcm9zcy1vcmlnaW4gcmVzb3VyY2Ugc2hhcmluZyAoQ09SUykgcmVxdWVzdHMgd2hlbiB0aGUgb3JpZ2luIGlzIGEgY3VzdG9tIG9yaWdpbi4gKi9cbiAgQ09SU19DVVNUT01fT1JJR0lOID0gXCJNYW5hZ2VkLUNPUlMtQ3VzdG9tT3JpZ2luXCIsXG4gIC8qKiBUaGlzIHBvbGljeSBpbmNsdWRlcyB0aGUgaGVhZGVycyB0aGF0IGVuYWJsZSBjcm9zcy1vcmlnaW4gcmVzb3VyY2Ugc2hhcmluZyAoQ09SUykgcmVxdWVzdHMgd2hlbiB0aGUgb3JpZ2luIGlzIGFuIEFtYXpvbiBTMyBidWNrZXQuICovXG4gIENPUlNfUzNfT1JJR0lOID0gXCJNYW5hZ2VkLUNPUlMtUzNPcmlnaW5cIixcbiAgLyoqIFRoaXMgcG9saWN5IGluY2x1ZGVzIGFsbCB2YWx1ZXMgKHF1ZXJ5IHN0cmluZ3MsIGhlYWRlcnMsIGFuZCBjb29raWVzKSBpbiB0aGUgdmlld2VyIHJlcXVlc3QuICovXG4gIEFMTF9WSUVXRVIgPSBcIk1hbmFnZWQtQWxsVmlld2VyXCIsXG4gIC8qKiBUaGlzIHBvbGljeSBpcyBkZXNpZ25lZCBmb3IgdXNlIHdpdGggYW4gb3JpZ2luIHRoYXQgaXMgYW4gQVdTIEVsZW1lbnRhbCBNZWRpYVRhaWxvciBlbmRwb2ludC4gKi9cbiAgRUxFTUVOVEFMX01FRElBX1RBSUxPUiA9IFwiTWFuYWdlZC1FbGVtZW50YWwtTWVkaWFUYWlsb3ItUGVyc29uYWxpemVkTWFuaWZlc3RzXCIsXG4gIC8qKiBUaGlzIHBvbGljeSBpbmNsdWRlcyBhbGwgdmFsdWVzIChoZWFkZXJzLCBjb29raWVzLCBhbmQgcXVlcnkgc3RyaW5ncykgaW4gdGhlIHZpZXdlciByZXF1ZXN0LCBhbmQgYWxsIENsb3VkRnJvbnQgaGVhZGVycyB0aGF0IHdlcmUgcmVsZWFzZWQgdGhyb3VnaCBKdW5lIDIwMjIgKENsb3VkRnJvbnQgaGVhZGVycyByZWxlYXNlZCBhZnRlciBKdW5lIDIwMjIgYXJlIG5vdCBpbmNsdWRlZCkuICovXG4gIEFMTF9WSUVXRVJfQU5EX0NMT1VERlJPTlRfMjAyMiA9IFwiTWFuYWdlZC1BbGxWaWV3ZXJBbmRDbG91ZEZyb250SGVhZGVycy0yMDIyLTA2XCIsXG4gIC8qKiBUaGlzIHBvbGljeSBpbmNsdWRlcyBhbGwgdmFsdWVzIChxdWVyeSBzdHJpbmdzLCBhbmQgY29va2llcykgZXhjZXB0IHRoZSBoZWFkZXIgaW4gdGhlIHZpZXdlciByZXF1ZXN0LiAqL1xuICBBTExfVklFV0VSX0VYQ0VQVF9IT1NUX0hFQURFUiA9IFwiTWFuYWdlZC1BbGxWaWV3ZXJFeGNlcHRIb3N0SGVhZGVyXCIsXG59XG5cbi8qKlxuICogQSBSZXNwb25zZSBIZWFkZXJzIFBvbGljeSBjb25maWd1cmF0aW9uXG4gKlxuICogQGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL3VzaW5nLW1hbmFnZWQtcmVzcG9uc2UtaGVhZGVycy1wb2xpY2llcy5odG1sXG4gKiBAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2F3cy81LjYwLjAvZG9jcy9kYXRhLXNvdXJjZXMvY2xvdWRmcm9udF9yZXNwb25zZV9oZWFkZXJzX3BvbGljeSNhd3MtbWFuYWdlZC1wb2xpY2llc1xuICovXG5leHBvcnQgZW51bSBNYW5hZ2VkUmVzcG9uc2VIZWFkZXJzUG9saWN5IHtcbiAgLyoqIFVzZSB0aGlzIG1hbmFnZWQgcG9saWN5IHRvIGFsbG93IHNpbXBsZSBDT1JTIHJlcXVlc3RzIGZyb20gYW55IG9yaWdpbi4gKi9cbiAgQ09SU19BTExPV19BTExfT1JJR0lOUyA9IFwiTWFuYWdlZC1TaW1wbGVDT1JTXCIsIC8vNjA2Njk2NTItNDU1Yi00YWU5LTg1YTQtYzRjMDIzOTNmODZjXG4gIC8qKiBVc2UgdGhpcyBtYW5hZ2VkIHBvbGljeSB0byBhbGxvdyBDT1JTIHJlcXVlc3RzIGZyb20gYW55IG9yaWdpbiwgaW5jbHVkaW5nIHByZWZsaWdodCByZXF1ZXN0cy4gKi9cbiAgQ09SU19BTExPV19BTExfT1JJR0lOU19XSVRIX1BSRUZMSUdIVCA9IFwiTWFuYWdlZC1DT1JTLVdpdGgtUHJlZmxpZ2h0XCIsIC8vNWNjM2I5MDgtZTYxOS00Yjk5LTg4ZTUtMmNmN2Y0NTk2NWJkXG4gIC8qKiBVc2UgdGhpcyBtYW5hZ2VkIHBvbGljeSB0byBhZGQgYSBzZXQgb2Ygc2VjdXJpdHkgaGVhZGVycyB0byBhbGwgcmVzcG9uc2VzIHRoYXQgQ2xvdWRGcm9udCBzZW5kcyB0byB2aWV3ZXJzLiAqL1xuICBTRUNVUklUWV9IRUFERVJTID0gXCJNYW5hZ2VkLVNlY3VyaXR5SGVhZGVyc1BvbGljeVwiLCAvLzY3Zjc3MjVjLTZmOTctNDIxMC04MmQ3LTU1MTJiMzFlOWQwM1xuICAvKiogVXNlIHRoaXMgbWFuYWdlZCBwb2xpY3kgdG8gYWxsb3cgc2ltcGxlIENPUlMgcmVxdWVzdHMgZnJvbSBhbnkgb3JpZ2luIGFuZCBhZGQgYSBzZXQgb2Ygc2VjdXJpdHkgaGVhZGVycyB0byBhbGwgcmVzcG9uc2VzIHRoYXQgQ2xvdWRGcm9udCBzZW5kcyB0byB2aWV3ZXJzLiAqL1xuICBDT1JTX0FMTE9XX0FMTF9PUklHSU5TX0FORF9TRUNVUklUWV9IRUFERVJTID0gXCJNYW5hZ2VkLUNPUlMtYW5kLVNlY3VyaXR5SGVhZGVyc1BvbGljeVwiLCAvL2U2MWViNjBjLTljMzUtNGQyMC1hOTI4LTJiODRlMDJhZjg5Y1xuICAvKiogVXNlIHRoaXMgbWFuYWdlZCBwb2xpY3kgdG8gYWxsb3cgQ09SUyByZXF1ZXN0cyBmcm9tIGFueSBvcmlnaW4sIGluY2x1ZGluZyBwcmVmbGlnaHQgcmVxdWVzdHMsIGFuZCBhZGQgYSBzZXQgb2Ygc2VjdXJpdHkgaGVhZGVycyB0byBhbGwgcmVzcG9uc2VzIHRoYXQgQ2xvdWRGcm9udCBzZW5kcyB0byB2aWV3ZXJzLiAqL1xuICBDT1JTX0FMTE9XX0FMTF9PUklHSU5TX1dJVEhfUFJFRkxJR0hUX0FORF9TRUNVUklUWV9IRUFERVJTID0gXCJNYW5hZ2VkLUNPUlMtd2l0aC1wcmVmbGlnaHQtYW5kLVNlY3VyaXR5SGVhZGVyc1BvbGljeVwiLCAvL2VhYWI0MzgxLWVkMzMtNGE4Ni04OGNhLWQ5NTU4ZGM2Y2Q2M1xufVxuIl19
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { route53Record } from "@cdktf/provider-aws";
|
|
2
|
+
import { IRecordSet, IDnsZone, IDistribution } from ".";
|
|
3
|
+
import { IBucket } from "../storage";
|
|
4
|
+
/**
|
|
5
|
+
* Classes that are valid alias record targets, like CloudFront distributions and load
|
|
6
|
+
* balancers, should implement this interface.
|
|
7
|
+
*/
|
|
8
|
+
export interface IAliasRecordTarget {
|
|
9
|
+
/**
|
|
10
|
+
* Return hosted zone ID and DNS name, usable for Route53 alias targets
|
|
11
|
+
*/
|
|
12
|
+
bind(record: IRecordSet, zone?: IDnsZone): route53Record.Route53RecordAlias;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Use a CloudFront Distribution as an alias record target
|
|
16
|
+
*/
|
|
17
|
+
export declare class DistributionTarget implements IAliasRecordTarget {
|
|
18
|
+
private readonly distribution;
|
|
19
|
+
constructor(distribution: IDistribution);
|
|
20
|
+
bind(_record: IRecordSet, _zone?: IDnsZone): route53Record.Route53RecordAlias;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Use Bucket as an alias record target
|
|
24
|
+
*/
|
|
25
|
+
export declare class BucketWebsiteTarget implements IAliasRecordTarget {
|
|
26
|
+
private readonly bucket;
|
|
27
|
+
constructor(bucket: IBucket);
|
|
28
|
+
bind(_record: IRecordSet, _zone?: IDnsZone): route53Record.Route53RecordAlias;
|
|
29
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a, _b;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.BucketWebsiteTarget = exports.DistributionTarget = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
/**
|
|
7
|
+
* Use a CloudFront Distribution as an alias record target
|
|
8
|
+
*/
|
|
9
|
+
class DistributionTarget {
|
|
10
|
+
constructor(distribution) {
|
|
11
|
+
this.distribution = distribution;
|
|
12
|
+
}
|
|
13
|
+
bind(_record, _zone) {
|
|
14
|
+
return {
|
|
15
|
+
zoneId: this.distribution.hostedZoneId,
|
|
16
|
+
name: this.distribution.domainName,
|
|
17
|
+
evaluateTargetHealth: false,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.DistributionTarget = DistributionTarget;
|
|
22
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
23
|
+
DistributionTarget[_a] = { fqn: "terraconstructs.aws.edge.DistributionTarget", version: "0.0.8" };
|
|
24
|
+
/**
|
|
25
|
+
* Use Bucket as an alias record target
|
|
26
|
+
*/
|
|
27
|
+
class BucketWebsiteTarget {
|
|
28
|
+
constructor(bucket) {
|
|
29
|
+
this.bucket = bucket;
|
|
30
|
+
}
|
|
31
|
+
bind(_record, _zone) {
|
|
32
|
+
if (!this.bucket.isWebsite()) {
|
|
33
|
+
throw new Error("Cannot use a non-website bucket as an alias record target");
|
|
34
|
+
}
|
|
35
|
+
this.bucket.bucketOutputs.websiteDomainName;
|
|
36
|
+
return {
|
|
37
|
+
zoneId: this.bucket.hostedZoneId,
|
|
38
|
+
name: this.bucket.websiteDomainName,
|
|
39
|
+
evaluateTargetHealth: true,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
exports.BucketWebsiteTarget = BucketWebsiteTarget;
|
|
44
|
+
_b = JSII_RTTI_SYMBOL_1;
|
|
45
|
+
BucketWebsiteTarget[_b] = { fqn: "terraconstructs.aws.edge.BucketWebsiteTarget", version: "0.0.8" };
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5zLWFsaWFzLXJlY29yZC10YXJnZXRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F3cy9lZGdlL2Rucy1hbGlhcy1yZWNvcmQtdGFyZ2V0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQWVBOztHQUVHO0FBQ0gsTUFBYSxrQkFBa0I7SUFDN0IsWUFBNkIsWUFBMkI7UUFBM0IsaUJBQVksR0FBWixZQUFZLENBQWU7SUFBRyxDQUFDO0lBRXJELElBQUksQ0FDVCxPQUFtQixFQUNuQixLQUFnQjtRQUVoQixPQUFPO1lBQ0wsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWTtZQUN0QyxJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVO1lBQ2xDLG9CQUFvQixFQUFFLEtBQUs7U0FDNUIsQ0FBQztJQUNKLENBQUM7O0FBWkgsZ0RBYUM7OztBQUVEOztHQUVHO0FBQ0gsTUFBYSxtQkFBbUI7SUFDOUIsWUFBNkIsTUFBZTtRQUFmLFdBQU0sR0FBTixNQUFNLENBQVM7SUFBRyxDQUFDO0lBRXpDLElBQUksQ0FDVCxPQUFtQixFQUNuQixLQUFnQjtRQUVoQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO1lBQzdCLE1BQU0sSUFBSSxLQUFLLENBQ2IsMkRBQTJELENBQzVELENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUM7UUFFNUMsT0FBTztZQUNMLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVk7WUFDaEMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCO1lBQ25DLG9CQUFvQixFQUFFLElBQUk7U0FDM0IsQ0FBQztJQUNKLENBQUM7O0FBbkJILGtEQW9CQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJvdXRlNTNSZWNvcmQgfSBmcm9tIFwiQGNka3RmL3Byb3ZpZGVyLWF3c1wiO1xuaW1wb3J0IHsgSVJlY29yZFNldCwgSURuc1pvbmUsIElEaXN0cmlidXRpb24gfSBmcm9tIFwiLlwiO1xuaW1wb3J0IHsgSUJ1Y2tldCB9IGZyb20gXCIuLi9zdG9yYWdlXCI7XG5cbi8qKlxuICogQ2xhc3NlcyB0aGF0IGFyZSB2YWxpZCBhbGlhcyByZWNvcmQgdGFyZ2V0cywgbGlrZSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbnMgYW5kIGxvYWRcbiAqIGJhbGFuY2Vycywgc2hvdWxkIGltcGxlbWVudCB0aGlzIGludGVyZmFjZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQWxpYXNSZWNvcmRUYXJnZXQge1xuICAvKipcbiAgICogUmV0dXJuIGhvc3RlZCB6b25lIElEIGFuZCBETlMgbmFtZSwgdXNhYmxlIGZvciBSb3V0ZTUzIGFsaWFzIHRhcmdldHNcbiAgICovXG4gIGJpbmQocmVjb3JkOiBJUmVjb3JkU2V0LCB6b25lPzogSURuc1pvbmUpOiByb3V0ZTUzUmVjb3JkLlJvdXRlNTNSZWNvcmRBbGlhcztcbn1cblxuLyoqXG4gKiBVc2UgYSBDbG91ZEZyb250IERpc3RyaWJ1dGlvbiBhcyBhbiBhbGlhcyByZWNvcmQgdGFyZ2V0XG4gKi9cbmV4cG9ydCBjbGFzcyBEaXN0cmlidXRpb25UYXJnZXQgaW1wbGVtZW50cyBJQWxpYXNSZWNvcmRUYXJnZXQge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGRpc3RyaWJ1dGlvbjogSURpc3RyaWJ1dGlvbikge31cblxuICBwdWJsaWMgYmluZChcbiAgICBfcmVjb3JkOiBJUmVjb3JkU2V0LFxuICAgIF96b25lPzogSURuc1pvbmUsXG4gICk6IHJvdXRlNTNSZWNvcmQuUm91dGU1M1JlY29yZEFsaWFzIHtcbiAgICByZXR1cm4ge1xuICAgICAgem9uZUlkOiB0aGlzLmRpc3RyaWJ1dGlvbi5ob3N0ZWRab25lSWQsXG4gICAgICBuYW1lOiB0aGlzLmRpc3RyaWJ1dGlvbi5kb21haW5OYW1lLFxuICAgICAgZXZhbHVhdGVUYXJnZXRIZWFsdGg6IGZhbHNlLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBVc2UgQnVja2V0IGFzIGFuIGFsaWFzIHJlY29yZCB0YXJnZXRcbiAqL1xuZXhwb3J0IGNsYXNzIEJ1Y2tldFdlYnNpdGVUYXJnZXQgaW1wbGVtZW50cyBJQWxpYXNSZWNvcmRUYXJnZXQge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGJ1Y2tldDogSUJ1Y2tldCkge31cblxuICBwdWJsaWMgYmluZChcbiAgICBfcmVjb3JkOiBJUmVjb3JkU2V0LFxuICAgIF96b25lPzogSURuc1pvbmUsXG4gICk6IHJvdXRlNTNSZWNvcmQuUm91dGU1M1JlY29yZEFsaWFzIHtcbiAgICBpZiAoIXRoaXMuYnVja2V0LmlzV2Vic2l0ZSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiQ2Fubm90IHVzZSBhIG5vbi13ZWJzaXRlIGJ1Y2tldCBhcyBhbiBhbGlhcyByZWNvcmQgdGFyZ2V0XCIsXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmJ1Y2tldC5idWNrZXRPdXRwdXRzLndlYnNpdGVEb21haW5OYW1lO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHpvbmVJZDogdGhpcy5idWNrZXQuaG9zdGVkWm9uZUlkLFxuICAgICAgbmFtZTogdGhpcy5idWNrZXQud2Vic2l0ZURvbWFpbk5hbWUsXG4gICAgICBldmFsdWF0ZVRhcmdldEhlYWx0aDogdHJ1ZSxcbiAgICB9O1xuICB9XG59XG4iXX0=
|