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,58 @@
|
|
|
1
|
+
import { s3BucketNotification } from "@cdktf/provider-aws";
|
|
2
|
+
import { Construct } from "constructs";
|
|
3
|
+
import { AwsConstructBase, AwsConstructProps } from "../aws-construct";
|
|
4
|
+
import { IBucket, EventType, NotificationKeyFilter } from "./bucket";
|
|
5
|
+
import { IBucketNotificationDestination } from "./bucket-destination";
|
|
6
|
+
export interface NotificationsProps extends AwsConstructProps {
|
|
7
|
+
/**
|
|
8
|
+
* The bucket to manage notifications for.
|
|
9
|
+
*/
|
|
10
|
+
readonly bucket: IBucket;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* A custom CloudFormation resource that updates bucket notifications for a
|
|
14
|
+
* bucket. The reason we need it is because the AWS::S3::Bucket notification
|
|
15
|
+
* configuration is defined on the bucket itself, which makes it impossible to
|
|
16
|
+
* provision notifications at the same time as the target (since
|
|
17
|
+
* PutBucketNotifications validates the targets).
|
|
18
|
+
*
|
|
19
|
+
* Since only a single BucketNotifications resource is allowed for each Bucket,
|
|
20
|
+
* this construct is not exported in the public API of this module. Instead, it
|
|
21
|
+
* is created just-in-time by `s3.Bucket.onEvent`, so a 1:1 relationship is
|
|
22
|
+
* ensured.
|
|
23
|
+
*
|
|
24
|
+
* @see
|
|
25
|
+
* https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig.html
|
|
26
|
+
*/
|
|
27
|
+
export declare class BucketNotifications extends AwsConstructBase {
|
|
28
|
+
resource?: s3BucketNotification.S3BucketNotification;
|
|
29
|
+
get outputs(): Record<string, any>;
|
|
30
|
+
private eventBridgeEnabled;
|
|
31
|
+
private readonly lambdaNotifications;
|
|
32
|
+
private readonly queueNotifications;
|
|
33
|
+
private readonly topicNotifications;
|
|
34
|
+
private readonly bucket;
|
|
35
|
+
constructor(scope: Construct, id: string, props: NotificationsProps);
|
|
36
|
+
/**
|
|
37
|
+
* Adds a notification subscription for this bucket.
|
|
38
|
+
* If this is the first notification, a BucketNotification resource is added to the stack.
|
|
39
|
+
*
|
|
40
|
+
* @param event The type of event
|
|
41
|
+
* @param target The target construct
|
|
42
|
+
* @param filters A set of S3 key filters
|
|
43
|
+
*/
|
|
44
|
+
addNotification(event: EventType, target: IBucketNotificationDestination, ...filters: NotificationKeyFilter[]): void;
|
|
45
|
+
enableEventBridgeNotification(): void;
|
|
46
|
+
/**
|
|
47
|
+
* Defines the bucket notifications resources in the stack only once.
|
|
48
|
+
* This is called lazily as we add notifications, so that if notifications are not added,
|
|
49
|
+
* there is no notifications resource.
|
|
50
|
+
*/
|
|
51
|
+
private createResourceOnce;
|
|
52
|
+
/**
|
|
53
|
+
* Adds resource to the Terraform JSON output at Synth time.
|
|
54
|
+
*
|
|
55
|
+
* called by TerraformStack.prepareStack()
|
|
56
|
+
*/
|
|
57
|
+
toTerraform(): any;
|
|
58
|
+
}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.BucketNotifications = 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 aws_construct_1 = require("../aws-construct");
|
|
9
|
+
const bucket_destination_1 = require("./bucket-destination");
|
|
10
|
+
/**
|
|
11
|
+
* A custom CloudFormation resource that updates bucket notifications for a
|
|
12
|
+
* bucket. The reason we need it is because the AWS::S3::Bucket notification
|
|
13
|
+
* configuration is defined on the bucket itself, which makes it impossible to
|
|
14
|
+
* provision notifications at the same time as the target (since
|
|
15
|
+
* PutBucketNotifications validates the targets).
|
|
16
|
+
*
|
|
17
|
+
* Since only a single BucketNotifications resource is allowed for each Bucket,
|
|
18
|
+
* this construct is not exported in the public API of this module. Instead, it
|
|
19
|
+
* is created just-in-time by `s3.Bucket.onEvent`, so a 1:1 relationship is
|
|
20
|
+
* ensured.
|
|
21
|
+
*
|
|
22
|
+
* @see
|
|
23
|
+
* https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig.html
|
|
24
|
+
*/
|
|
25
|
+
class BucketNotifications extends aws_construct_1.AwsConstructBase {
|
|
26
|
+
get outputs() {
|
|
27
|
+
return {};
|
|
28
|
+
}
|
|
29
|
+
constructor(scope, id, props) {
|
|
30
|
+
super(scope, id);
|
|
31
|
+
this.eventBridgeEnabled = false;
|
|
32
|
+
this.lambdaNotifications = new Array();
|
|
33
|
+
this.queueNotifications = new Array();
|
|
34
|
+
this.topicNotifications = new Array();
|
|
35
|
+
this.bucket = props.bucket;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Adds a notification subscription for this bucket.
|
|
39
|
+
* If this is the first notification, a BucketNotification resource is added to the stack.
|
|
40
|
+
*
|
|
41
|
+
* @param event The type of event
|
|
42
|
+
* @param target The target construct
|
|
43
|
+
* @param filters A set of S3 key filters
|
|
44
|
+
*/
|
|
45
|
+
addNotification(event, target, ...filters) {
|
|
46
|
+
const resource = this.createResourceOnce();
|
|
47
|
+
// TODO: Seems Terraform provider does not have limitations on prefix and suffix?
|
|
48
|
+
// let hasPrefix = false;
|
|
49
|
+
// let hasSuffix = false;
|
|
50
|
+
for (const filter of filters) {
|
|
51
|
+
// if (!filter.suffix && !filter.prefix) {
|
|
52
|
+
// throw new Error(
|
|
53
|
+
// "NotificationKeyFilter must specify `prefix` and/or `suffix`",
|
|
54
|
+
// );
|
|
55
|
+
// }
|
|
56
|
+
// if (filter.suffix) {
|
|
57
|
+
// if (hasSuffix) {
|
|
58
|
+
// throw new Error(
|
|
59
|
+
// "Cannot specify more than one suffix rule in a filter.",
|
|
60
|
+
// );
|
|
61
|
+
// }
|
|
62
|
+
// hasSuffix = true;
|
|
63
|
+
// }
|
|
64
|
+
// if (filter.prefix) {
|
|
65
|
+
// if (hasPrefix) {
|
|
66
|
+
// throw new Error(
|
|
67
|
+
// "Cannot specify more than one prefix rule in a filter.",
|
|
68
|
+
// );
|
|
69
|
+
// }
|
|
70
|
+
// hasPrefix = true;
|
|
71
|
+
// }
|
|
72
|
+
// resolve target. this also provides an opportunity for the target to e.g. update
|
|
73
|
+
// policies to allow this notification to happen.
|
|
74
|
+
const targetProps = target.bind(this, this.bucket);
|
|
75
|
+
const commonConfig = {
|
|
76
|
+
events: [event],
|
|
77
|
+
id: filter.id,
|
|
78
|
+
filterPrefix: filter.prefix,
|
|
79
|
+
filterSuffix: filter.suffix,
|
|
80
|
+
};
|
|
81
|
+
// if the target specifies any dependencies, add them here.
|
|
82
|
+
// for example, the SNS topic policy must be created /before/ the notification resource.
|
|
83
|
+
// otherwise, S3 won't be able to confirm the subscription.
|
|
84
|
+
if (targetProps.dependencies) {
|
|
85
|
+
resource.node.addDependency(...targetProps.dependencies);
|
|
86
|
+
}
|
|
87
|
+
// based on the target type, add the the correct configurations array
|
|
88
|
+
switch (targetProps.type) {
|
|
89
|
+
case bucket_destination_1.BucketNotificationDestinationType.LAMBDA:
|
|
90
|
+
this.lambdaNotifications.push({
|
|
91
|
+
...commonConfig,
|
|
92
|
+
lambdaFunctionArn: targetProps.arn,
|
|
93
|
+
});
|
|
94
|
+
break;
|
|
95
|
+
case bucket_destination_1.BucketNotificationDestinationType.QUEUE:
|
|
96
|
+
this.queueNotifications.push({
|
|
97
|
+
...commonConfig,
|
|
98
|
+
queueArn: targetProps.arn,
|
|
99
|
+
});
|
|
100
|
+
break;
|
|
101
|
+
// TODO: re-add SNS support
|
|
102
|
+
case bucket_destination_1.BucketNotificationDestinationType.TOPIC:
|
|
103
|
+
this.topicNotifications.push({
|
|
104
|
+
...commonConfig,
|
|
105
|
+
topicArn: targetProps.arn,
|
|
106
|
+
});
|
|
107
|
+
break;
|
|
108
|
+
default:
|
|
109
|
+
throw new Error("Unsupported notification target type:" +
|
|
110
|
+
bucket_destination_1.BucketNotificationDestinationType[targetProps.type]);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
enableEventBridgeNotification() {
|
|
115
|
+
this.createResourceOnce();
|
|
116
|
+
this.eventBridgeEnabled = true;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Defines the bucket notifications resources in the stack only once.
|
|
120
|
+
* This is called lazily as we add notifications, so that if notifications are not added,
|
|
121
|
+
* there is no notifications resource.
|
|
122
|
+
*/
|
|
123
|
+
createResourceOnce() {
|
|
124
|
+
if (!this.resource) {
|
|
125
|
+
this.resource = new provider_aws_1.s3BucketNotification.S3BucketNotification(this, "Resource", {
|
|
126
|
+
bucket: this.bucket.bucketName,
|
|
127
|
+
eventbridge: cdktf_1.Lazy.anyValue({
|
|
128
|
+
produce: () => this.eventBridgeEnabled,
|
|
129
|
+
}),
|
|
130
|
+
lambdaFunction: cdktf_1.Lazy.anyValue({
|
|
131
|
+
produce: () => this.lambdaNotifications.length > 0
|
|
132
|
+
? this.lambdaNotifications.map((l) => provider_aws_1.s3BucketNotification.s3BucketNotificationLambdaFunctionToTerraform(l))
|
|
133
|
+
: undefined,
|
|
134
|
+
}),
|
|
135
|
+
queue: cdktf_1.Lazy.anyValue({
|
|
136
|
+
produce: () => this.queueNotifications.length > 0
|
|
137
|
+
? this.queueNotifications.map((q) => provider_aws_1.s3BucketNotification.s3BucketNotificationQueueToTerraform(q))
|
|
138
|
+
: undefined,
|
|
139
|
+
}),
|
|
140
|
+
topic: cdktf_1.Lazy.anyValue({
|
|
141
|
+
produce: () => this.topicNotifications.length > 0
|
|
142
|
+
? this.topicNotifications.map((t) => provider_aws_1.s3BucketNotification.s3BucketNotificationTopicToTerraform(t))
|
|
143
|
+
: undefined,
|
|
144
|
+
}),
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
return this.resource;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Adds resource to the Terraform JSON output at Synth time.
|
|
151
|
+
*
|
|
152
|
+
* called by TerraformStack.prepareStack()
|
|
153
|
+
*/
|
|
154
|
+
toTerraform() {
|
|
155
|
+
// Add dependency on bucket policy if it exists to avoid race conditions
|
|
156
|
+
// S3 does not allow calling PutBucketPolicy and PutBucketNotification APIs at the same time
|
|
157
|
+
// See https://github.com/aws/aws-cdk/issues/27600
|
|
158
|
+
// prepareStack are used here because bucket policy maybe added to construct after addition of notification resource.
|
|
159
|
+
// but we need this defined before stack Aspect maps construct dependencies to Terraform dependsOn
|
|
160
|
+
if (this.bucket.policy) {
|
|
161
|
+
this.node.addDependency(this.bucket.policy);
|
|
162
|
+
}
|
|
163
|
+
return {};
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
exports.BucketNotifications = BucketNotifications;
|
|
167
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
168
|
+
BucketNotifications[_a] = { fqn: "terraconstructs.aws.storage.BucketNotifications", version: "0.0.8" };
|
|
169
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVja2V0LW5vdGlmaWNhdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzL3N0b3JhZ2UvYnVja2V0LW5vdGlmaWNhdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxzREFBMkQ7QUFDM0QsaUNBQTZCO0FBRTdCLG9EQUF1RTtBQUV2RSw2REFHOEI7QUFTOUI7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFhLG1CQUFvQixTQUFRLGdDQUFnQjtJQUV2RCxJQUFXLE9BQU87UUFDaEIsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBV0QsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF5QjtRQUNqRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBVlgsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLHdCQUFtQixHQUNsQyxJQUFJLEtBQUssRUFBMkQsQ0FBQztRQUN0RCx1QkFBa0IsR0FDakMsSUFBSSxLQUFLLEVBQWtELENBQUM7UUFDN0MsdUJBQWtCLEdBQ2pDLElBQUksS0FBSyxFQUFrRCxDQUFDO1FBSzVELElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUM3QixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLGVBQWUsQ0FDcEIsS0FBZ0IsRUFDaEIsTUFBc0MsRUFDdEMsR0FBRyxPQUFnQztRQUVuQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMzQyxpRkFBaUY7UUFDakYseUJBQXlCO1FBQ3pCLHlCQUF5QjtRQUN6QixLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQzdCLDBDQUEwQztZQUMxQyxxQkFBcUI7WUFDckIscUVBQXFFO1lBQ3JFLE9BQU87WUFDUCxJQUFJO1lBQ0osdUJBQXVCO1lBQ3ZCLHFCQUFxQjtZQUNyQix1QkFBdUI7WUFDdkIsaUVBQWlFO1lBQ2pFLFNBQVM7WUFDVCxNQUFNO1lBQ04sc0JBQXNCO1lBQ3RCLElBQUk7WUFDSix1QkFBdUI7WUFDdkIscUJBQXFCO1lBQ3JCLHVCQUF1QjtZQUN2QixpRUFBaUU7WUFDakUsU0FBUztZQUNULE1BQU07WUFDTixzQkFBc0I7WUFDdEIsSUFBSTtZQUNKLGtGQUFrRjtZQUNsRixpREFBaUQ7WUFDakQsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ25ELE1BQU0sWUFBWSxHQUF3QjtnQkFDeEMsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDO2dCQUNmLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRTtnQkFDYixZQUFZLEVBQUUsTUFBTSxDQUFDLE1BQU07Z0JBQzNCLFlBQVksRUFBRSxNQUFNLENBQUMsTUFBTTthQUM1QixDQUFDO1lBRUYsMkRBQTJEO1lBQzNELHdGQUF3RjtZQUN4RiwyREFBMkQ7WUFDM0QsSUFBSSxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQzdCLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzNELENBQUM7WUFFRCxxRUFBcUU7WUFDckUsUUFBUSxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3pCLEtBQUssc0RBQWlDLENBQUMsTUFBTTtvQkFDM0MsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQzt3QkFDNUIsR0FBRyxZQUFZO3dCQUNmLGlCQUFpQixFQUFFLFdBQVcsQ0FBQyxHQUFHO3FCQUNuQyxDQUFDLENBQUM7b0JBQ0gsTUFBTTtnQkFFUixLQUFLLHNEQUFpQyxDQUFDLEtBQUs7b0JBQzFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUM7d0JBQzNCLEdBQUcsWUFBWTt3QkFDZixRQUFRLEVBQUUsV0FBVyxDQUFDLEdBQUc7cUJBQzFCLENBQUMsQ0FBQztvQkFDSCxNQUFNO2dCQUVSLDJCQUEyQjtnQkFDM0IsS0FBSyxzREFBaUMsQ0FBQyxLQUFLO29CQUMxQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDO3dCQUMzQixHQUFHLFlBQVk7d0JBQ2YsUUFBUSxFQUFFLFdBQVcsQ0FBQyxHQUFHO3FCQUMxQixDQUFDLENBQUM7b0JBQ0gsTUFBTTtnQkFFUjtvQkFDRSxNQUFNLElBQUksS0FBSyxDQUNiLHVDQUF1Qzt3QkFDckMsc0RBQWlDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUN0RCxDQUFDO1lBQ04sQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRU0sNkJBQTZCO1FBQ2xDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7SUFDakMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxrQkFBa0I7UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksbUNBQW9CLENBQUMsb0JBQW9CLENBQzNELElBQUksRUFDSixVQUFVLEVBQ1Y7Z0JBQ0UsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVTtnQkFDOUIsV0FBVyxFQUFFLFlBQUksQ0FBQyxRQUFRLENBQUM7b0JBQ3pCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCO2lCQUN2QyxDQUFDO2dCQUNGLGNBQWMsRUFBRSxZQUFJLENBQUMsUUFBUSxDQUFDO29CQUM1QixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQ1osSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sR0FBRyxDQUFDO3dCQUNqQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ2pDLG1DQUFvQixDQUFDLDZDQUE2QyxDQUNoRSxDQUFDLENBQ0YsQ0FDRjt3QkFDSCxDQUFDLENBQUMsU0FBUztpQkFDaEIsQ0FBQztnQkFDRixLQUFLLEVBQUUsWUFBSSxDQUFDLFFBQVEsQ0FBQztvQkFDbkIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUNaLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQzt3QkFDaEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNoQyxtQ0FBb0IsQ0FBQyxvQ0FBb0MsQ0FDdkQsQ0FBQyxDQUNGLENBQ0Y7d0JBQ0gsQ0FBQyxDQUFDLFNBQVM7aUJBQ2hCLENBQUM7Z0JBQ0YsS0FBSyxFQUFFLFlBQUksQ0FBQyxRQUFRLENBQUM7b0JBQ25CLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FDWixJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxHQUFHLENBQUM7d0JBQ2hDLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDaEMsbUNBQW9CLENBQUMsb0NBQW9DLENBQ3ZELENBQUMsQ0FDRixDQUNGO3dCQUNILENBQUMsQ0FBQyxTQUFTO2lCQUNoQixDQUFDO2FBQ0gsQ0FDRixDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFdBQVc7UUFDaEIsd0VBQXdFO1FBQ3hFLDRGQUE0RjtRQUM1RixrREFBa0Q7UUFDbEQscUhBQXFIO1FBQ3JILGtHQUFrRztRQUNsRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDOztBQXBMSCxrREFxTEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzM0J1Y2tldE5vdGlmaWNhdGlvbiB9IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItYXdzXCI7XG5pbXBvcnQgeyBMYXp5IH0gZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgQXdzQ29uc3RydWN0QmFzZSwgQXdzQ29uc3RydWN0UHJvcHMgfSBmcm9tIFwiLi4vYXdzLWNvbnN0cnVjdFwiO1xuaW1wb3J0IHsgSUJ1Y2tldCwgRXZlbnRUeXBlLCBOb3RpZmljYXRpb25LZXlGaWx0ZXIgfSBmcm9tIFwiLi9idWNrZXRcIjtcbmltcG9ydCB7XG4gIEJ1Y2tldE5vdGlmaWNhdGlvbkRlc3RpbmF0aW9uVHlwZSxcbiAgSUJ1Y2tldE5vdGlmaWNhdGlvbkRlc3RpbmF0aW9uLFxufSBmcm9tIFwiLi9idWNrZXQtZGVzdGluYXRpb25cIjtcblxuZXhwb3J0IGludGVyZmFjZSBOb3RpZmljYXRpb25zUHJvcHMgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgYnVja2V0IHRvIG1hbmFnZSBub3RpZmljYXRpb25zIGZvci5cbiAgICovXG4gIHJlYWRvbmx5IGJ1Y2tldDogSUJ1Y2tldDtcbn1cblxuLyoqXG4gKiBBIGN1c3RvbSBDbG91ZEZvcm1hdGlvbiByZXNvdXJjZSB0aGF0IHVwZGF0ZXMgYnVja2V0IG5vdGlmaWNhdGlvbnMgZm9yIGFcbiAqIGJ1Y2tldC4gVGhlIHJlYXNvbiB3ZSBuZWVkIGl0IGlzIGJlY2F1c2UgdGhlIEFXUzo6UzM6OkJ1Y2tldCBub3RpZmljYXRpb25cbiAqIGNvbmZpZ3VyYXRpb24gaXMgZGVmaW5lZCBvbiB0aGUgYnVja2V0IGl0c2VsZiwgd2hpY2ggbWFrZXMgaXQgaW1wb3NzaWJsZSB0b1xuICogcHJvdmlzaW9uIG5vdGlmaWNhdGlvbnMgYXQgdGhlIHNhbWUgdGltZSBhcyB0aGUgdGFyZ2V0IChzaW5jZVxuICogUHV0QnVja2V0Tm90aWZpY2F0aW9ucyB2YWxpZGF0ZXMgdGhlIHRhcmdldHMpLlxuICpcbiAqIFNpbmNlIG9ubHkgYSBzaW5nbGUgQnVja2V0Tm90aWZpY2F0aW9ucyByZXNvdXJjZSBpcyBhbGxvd2VkIGZvciBlYWNoIEJ1Y2tldCxcbiAqIHRoaXMgY29uc3RydWN0IGlzIG5vdCBleHBvcnRlZCBpbiB0aGUgcHVibGljIEFQSSBvZiB0aGlzIG1vZHVsZS4gSW5zdGVhZCwgaXRcbiAqIGlzIGNyZWF0ZWQganVzdC1pbi10aW1lIGJ5IGBzMy5CdWNrZXQub25FdmVudGAsIHNvIGEgMToxIHJlbGF0aW9uc2hpcCBpc1xuICogZW5zdXJlZC5cbiAqXG4gKiBAc2VlXG4gKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1zMy1idWNrZXQtbm90aWZpY2F0aW9uY29uZmlnLmh0bWxcbiAqL1xuZXhwb3J0IGNsYXNzIEJ1Y2tldE5vdGlmaWNhdGlvbnMgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RCYXNlIHtcbiAgcHVibGljIHJlc291cmNlPzogczNCdWNrZXROb3RpZmljYXRpb24uUzNCdWNrZXROb3RpZmljYXRpb247XG4gIHB1YmxpYyBnZXQgb3V0cHV0cygpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBwcml2YXRlIGV2ZW50QnJpZGdlRW5hYmxlZCA9IGZhbHNlO1xuICBwcml2YXRlIHJlYWRvbmx5IGxhbWJkYU5vdGlmaWNhdGlvbnMgPVxuICAgIG5ldyBBcnJheTxzM0J1Y2tldE5vdGlmaWNhdGlvbi5TM0J1Y2tldE5vdGlmaWNhdGlvbkxhbWJkYUZ1bmN0aW9uPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IHF1ZXVlTm90aWZpY2F0aW9ucyA9XG4gICAgbmV3IEFycmF5PHMzQnVja2V0Tm90aWZpY2F0aW9uLlMzQnVja2V0Tm90aWZpY2F0aW9uUXVldWU+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdG9waWNOb3RpZmljYXRpb25zID1cbiAgICBuZXcgQXJyYXk8czNCdWNrZXROb3RpZmljYXRpb24uUzNCdWNrZXROb3RpZmljYXRpb25Ub3BpYz4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBidWNrZXQ6IElCdWNrZXQ7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE5vdGlmaWNhdGlvbnNQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgdGhpcy5idWNrZXQgPSBwcm9wcy5idWNrZXQ7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIG5vdGlmaWNhdGlvbiBzdWJzY3JpcHRpb24gZm9yIHRoaXMgYnVja2V0LlxuICAgKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCBub3RpZmljYXRpb24sIGEgQnVja2V0Tm90aWZpY2F0aW9uIHJlc291cmNlIGlzIGFkZGVkIHRvIHRoZSBzdGFjay5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IFRoZSB0eXBlIG9mIGV2ZW50XG4gICAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBjb25zdHJ1Y3RcbiAgICogQHBhcmFtIGZpbHRlcnMgQSBzZXQgb2YgUzMga2V5IGZpbHRlcnNcbiAgICovXG4gIHB1YmxpYyBhZGROb3RpZmljYXRpb24oXG4gICAgZXZlbnQ6IEV2ZW50VHlwZSxcbiAgICB0YXJnZXQ6IElCdWNrZXROb3RpZmljYXRpb25EZXN0aW5hdGlvbixcbiAgICAuLi5maWx0ZXJzOiBOb3RpZmljYXRpb25LZXlGaWx0ZXJbXVxuICApIHtcbiAgICBjb25zdCByZXNvdXJjZSA9IHRoaXMuY3JlYXRlUmVzb3VyY2VPbmNlKCk7XG4gICAgLy8gVE9ETzogU2VlbXMgVGVycmFmb3JtIHByb3ZpZGVyIGRvZXMgbm90IGhhdmUgbGltaXRhdGlvbnMgb24gcHJlZml4IGFuZCBzdWZmaXg/XG4gICAgLy8gbGV0IGhhc1ByZWZpeCA9IGZhbHNlO1xuICAgIC8vIGxldCBoYXNTdWZmaXggPSBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJzKSB7XG4gICAgICAvLyBpZiAoIWZpbHRlci5zdWZmaXggJiYgIWZpbHRlci5wcmVmaXgpIHtcbiAgICAgIC8vICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgLy8gICAgIFwiTm90aWZpY2F0aW9uS2V5RmlsdGVyIG11c3Qgc3BlY2lmeSBgcHJlZml4YCBhbmQvb3IgYHN1ZmZpeGBcIixcbiAgICAgIC8vICAgKTtcbiAgICAgIC8vIH1cbiAgICAgIC8vIGlmIChmaWx0ZXIuc3VmZml4KSB7XG4gICAgICAvLyAgIGlmIChoYXNTdWZmaXgpIHtcbiAgICAgIC8vICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAvLyAgICAgICBcIkNhbm5vdCBzcGVjaWZ5IG1vcmUgdGhhbiBvbmUgc3VmZml4IHJ1bGUgaW4gYSBmaWx0ZXIuXCIsXG4gICAgICAvLyAgICAgKTtcbiAgICAgIC8vICAgfVxuICAgICAgLy8gICBoYXNTdWZmaXggPSB0cnVlO1xuICAgICAgLy8gfVxuICAgICAgLy8gaWYgKGZpbHRlci5wcmVmaXgpIHtcbiAgICAgIC8vICAgaWYgKGhhc1ByZWZpeCkge1xuICAgICAgLy8gICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIC8vICAgICAgIFwiQ2Fubm90IHNwZWNpZnkgbW9yZSB0aGFuIG9uZSBwcmVmaXggcnVsZSBpbiBhIGZpbHRlci5cIixcbiAgICAgIC8vICAgICApO1xuICAgICAgLy8gICB9XG4gICAgICAvLyAgIGhhc1ByZWZpeCA9IHRydWU7XG4gICAgICAvLyB9XG4gICAgICAvLyByZXNvbHZlIHRhcmdldC4gdGhpcyBhbHNvIHByb3ZpZGVzIGFuIG9wcG9ydHVuaXR5IGZvciB0aGUgdGFyZ2V0IHRvIGUuZy4gdXBkYXRlXG4gICAgICAvLyBwb2xpY2llcyB0byBhbGxvdyB0aGlzIG5vdGlmaWNhdGlvbiB0byBoYXBwZW4uXG4gICAgICBjb25zdCB0YXJnZXRQcm9wcyA9IHRhcmdldC5iaW5kKHRoaXMsIHRoaXMuYnVja2V0KTtcbiAgICAgIGNvbnN0IGNvbW1vbkNvbmZpZzogQ29tbW9uQ29uZmlndXJhdGlvbiA9IHtcbiAgICAgICAgZXZlbnRzOiBbZXZlbnRdLFxuICAgICAgICBpZDogZmlsdGVyLmlkLFxuICAgICAgICBmaWx0ZXJQcmVmaXg6IGZpbHRlci5wcmVmaXgsXG4gICAgICAgIGZpbHRlclN1ZmZpeDogZmlsdGVyLnN1ZmZpeCxcbiAgICAgIH07XG5cbiAgICAgIC8vIGlmIHRoZSB0YXJnZXQgc3BlY2lmaWVzIGFueSBkZXBlbmRlbmNpZXMsIGFkZCB0aGVtIGhlcmUuXG4gICAgICAvLyBmb3IgZXhhbXBsZSwgdGhlIFNOUyB0b3BpYyBwb2xpY3kgbXVzdCBiZSBjcmVhdGVkIC9iZWZvcmUvIHRoZSBub3RpZmljYXRpb24gcmVzb3VyY2UuXG4gICAgICAvLyBvdGhlcndpc2UsIFMzIHdvbid0IGJlIGFibGUgdG8gY29uZmlybSB0aGUgc3Vic2NyaXB0aW9uLlxuICAgICAgaWYgKHRhcmdldFByb3BzLmRlcGVuZGVuY2llcykge1xuICAgICAgICByZXNvdXJjZS5ub2RlLmFkZERlcGVuZGVuY3koLi4udGFyZ2V0UHJvcHMuZGVwZW5kZW5jaWVzKTtcbiAgICAgIH1cblxuICAgICAgLy8gYmFzZWQgb24gdGhlIHRhcmdldCB0eXBlLCBhZGQgdGhlIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb25zIGFycmF5XG4gICAgICBzd2l0Y2ggKHRhcmdldFByb3BzLnR5cGUpIHtcbiAgICAgICAgY2FzZSBCdWNrZXROb3RpZmljYXRpb25EZXN0aW5hdGlvblR5cGUuTEFNQkRBOlxuICAgICAgICAgIHRoaXMubGFtYmRhTm90aWZpY2F0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgIC4uLmNvbW1vbkNvbmZpZyxcbiAgICAgICAgICAgIGxhbWJkYUZ1bmN0aW9uQXJuOiB0YXJnZXRQcm9wcy5hcm4sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBCdWNrZXROb3RpZmljYXRpb25EZXN0aW5hdGlvblR5cGUuUVVFVUU6XG4gICAgICAgICAgdGhpcy5xdWV1ZU5vdGlmaWNhdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAuLi5jb21tb25Db25maWcsXG4gICAgICAgICAgICBxdWV1ZUFybjogdGFyZ2V0UHJvcHMuYXJuLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIFRPRE86IHJlLWFkZCBTTlMgc3VwcG9ydFxuICAgICAgICBjYXNlIEJ1Y2tldE5vdGlmaWNhdGlvbkRlc3RpbmF0aW9uVHlwZS5UT1BJQzpcbiAgICAgICAgICB0aGlzLnRvcGljTm90aWZpY2F0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgIC4uLmNvbW1vbkNvbmZpZyxcbiAgICAgICAgICAgIHRvcGljQXJuOiB0YXJnZXRQcm9wcy5hcm4sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBcIlVuc3VwcG9ydGVkIG5vdGlmaWNhdGlvbiB0YXJnZXQgdHlwZTpcIiArXG4gICAgICAgICAgICAgIEJ1Y2tldE5vdGlmaWNhdGlvbkRlc3RpbmF0aW9uVHlwZVt0YXJnZXRQcm9wcy50eXBlXSxcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBlbmFibGVFdmVudEJyaWRnZU5vdGlmaWNhdGlvbigpIHtcbiAgICB0aGlzLmNyZWF0ZVJlc291cmNlT25jZSgpO1xuICAgIHRoaXMuZXZlbnRCcmlkZ2VFbmFibGVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIHRoZSBidWNrZXQgbm90aWZpY2F0aW9ucyByZXNvdXJjZXMgaW4gdGhlIHN0YWNrIG9ubHkgb25jZS5cbiAgICogVGhpcyBpcyBjYWxsZWQgbGF6aWx5IGFzIHdlIGFkZCBub3RpZmljYXRpb25zLCBzbyB0aGF0IGlmIG5vdGlmaWNhdGlvbnMgYXJlIG5vdCBhZGRlZCxcbiAgICogdGhlcmUgaXMgbm8gbm90aWZpY2F0aW9ucyByZXNvdXJjZS5cbiAgICovXG4gIHByaXZhdGUgY3JlYXRlUmVzb3VyY2VPbmNlKCkge1xuICAgIGlmICghdGhpcy5yZXNvdXJjZSkge1xuICAgICAgdGhpcy5yZXNvdXJjZSA9IG5ldyBzM0J1Y2tldE5vdGlmaWNhdGlvbi5TM0J1Y2tldE5vdGlmaWNhdGlvbihcbiAgICAgICAgdGhpcyxcbiAgICAgICAgXCJSZXNvdXJjZVwiLFxuICAgICAgICB7XG4gICAgICAgICAgYnVja2V0OiB0aGlzLmJ1Y2tldC5idWNrZXROYW1lLFxuICAgICAgICAgIGV2ZW50YnJpZGdlOiBMYXp5LmFueVZhbHVlKHtcbiAgICAgICAgICAgIHByb2R1Y2U6ICgpID0+IHRoaXMuZXZlbnRCcmlkZ2VFbmFibGVkLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGxhbWJkYUZ1bmN0aW9uOiBMYXp5LmFueVZhbHVlKHtcbiAgICAgICAgICAgIHByb2R1Y2U6ICgpID0+XG4gICAgICAgICAgICAgIHRoaXMubGFtYmRhTm90aWZpY2F0aW9ucy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyB0aGlzLmxhbWJkYU5vdGlmaWNhdGlvbnMubWFwKChsKSA9PlxuICAgICAgICAgICAgICAgICAgICBzM0J1Y2tldE5vdGlmaWNhdGlvbi5zM0J1Y2tldE5vdGlmaWNhdGlvbkxhbWJkYUZ1bmN0aW9uVG9UZXJyYWZvcm0oXG4gICAgICAgICAgICAgICAgICAgICAgbCxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBxdWV1ZTogTGF6eS5hbnlWYWx1ZSh7XG4gICAgICAgICAgICBwcm9kdWNlOiAoKSA9PlxuICAgICAgICAgICAgICB0aGlzLnF1ZXVlTm90aWZpY2F0aW9ucy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyB0aGlzLnF1ZXVlTm90aWZpY2F0aW9ucy5tYXAoKHEpID0+XG4gICAgICAgICAgICAgICAgICAgIHMzQnVja2V0Tm90aWZpY2F0aW9uLnMzQnVja2V0Tm90aWZpY2F0aW9uUXVldWVUb1RlcnJhZm9ybShcbiAgICAgICAgICAgICAgICAgICAgICBxLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRvcGljOiBMYXp5LmFueVZhbHVlKHtcbiAgICAgICAgICAgIHByb2R1Y2U6ICgpID0+XG4gICAgICAgICAgICAgIHRoaXMudG9waWNOb3RpZmljYXRpb25zLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICA/IHRoaXMudG9waWNOb3RpZmljYXRpb25zLm1hcCgodCkgPT5cbiAgICAgICAgICAgICAgICAgICAgczNCdWNrZXROb3RpZmljYXRpb24uczNCdWNrZXROb3RpZmljYXRpb25Ub3BpY1RvVGVycmFmb3JtKFxuICAgICAgICAgICAgICAgICAgICAgIHQsXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgfSksXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIHJlc291cmNlIHRvIHRoZSBUZXJyYWZvcm0gSlNPTiBvdXRwdXQgYXQgU3ludGggdGltZS5cbiAgICpcbiAgICogY2FsbGVkIGJ5IFRlcnJhZm9ybVN0YWNrLnByZXBhcmVTdGFjaygpXG4gICAqL1xuICBwdWJsaWMgdG9UZXJyYWZvcm0oKTogYW55IHtcbiAgICAvLyBBZGQgZGVwZW5kZW5jeSBvbiBidWNrZXQgcG9saWN5IGlmIGl0IGV4aXN0cyB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnNcbiAgICAvLyBTMyBkb2VzIG5vdCBhbGxvdyBjYWxsaW5nIFB1dEJ1Y2tldFBvbGljeSBhbmQgUHV0QnVja2V0Tm90aWZpY2F0aW9uIEFQSXMgYXQgdGhlIHNhbWUgdGltZVxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzI3NjAwXG4gICAgLy8gcHJlcGFyZVN0YWNrIGFyZSB1c2VkIGhlcmUgYmVjYXVzZSBidWNrZXQgcG9saWN5IG1heWJlIGFkZGVkIHRvIGNvbnN0cnVjdCBhZnRlciBhZGRpdGlvbiBvZiBub3RpZmljYXRpb24gcmVzb3VyY2UuXG4gICAgLy8gYnV0IHdlIG5lZWQgdGhpcyBkZWZpbmVkIGJlZm9yZSBzdGFjayBBc3BlY3QgbWFwcyBjb25zdHJ1Y3QgZGVwZW5kZW5jaWVzIHRvIFRlcnJhZm9ybSBkZXBlbmRzT25cbiAgICBpZiAodGhpcy5idWNrZXQucG9saWN5KSB7XG4gICAgICB0aGlzLm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLmJ1Y2tldC5wb2xpY3kpO1xuICAgIH1cbiAgICByZXR1cm4ge307XG4gIH1cbn1cblxuaW50ZXJmYWNlIENvbW1vbkNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2F3cy81LjY4LjAvZG9jcy9yZXNvdXJjZXMvczNfYnVja2V0X25vdGlmaWNhdGlvbiNpZCBTM0J1Y2tldE5vdGlmaWNhdGlvbiNpZH1cbiAgICpcbiAgICogUGxlYXNlIGJlIGF3YXJlIHRoYXQgdGhlIGlkIGZpZWxkIGlzIGF1dG9tYXRpY2FsbHkgYWRkZWQgdG8gYWxsIHJlc291cmNlcyBpbiBUZXJyYWZvcm0gcHJvdmlkZXJzIHVzaW5nIGEgVGVycmFmb3JtIHByb3ZpZGVyIFNESyB2ZXJzaW9uIGJlbG93IDIuXG4gICAqIElmIHlvdSBleHBlcmllbmNlIHByb2JsZW1zIHNldHRpbmcgdGhpcyB2YWx1ZSBpdCBtaWdodCBub3QgYmUgc2V0dGFibGUuIFBsZWFzZSB0YWtlIGEgbG9vayBhdCB0aGUgcHJvdmlkZXIgZG9jdW1lbnRhdGlvbiB0byBlbnN1cmUgaXQgc2hvdWxkIGJlIHNldHRhYmxlLlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGV2ZW50czogc3RyaW5nW107XG4gIC8qKlxuICAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXdzLzUuNjguMC9kb2NzL3Jlc291cmNlcy9zM19idWNrZXRfbm90aWZpY2F0aW9uI2ZpbHRlcl9wcmVmaXggUzNCdWNrZXROb3RpZmljYXRpb24jZmlsdGVyX3ByZWZpeH1cbiAgICovXG4gIHJlYWRvbmx5IGZpbHRlclByZWZpeD86IHN0cmluZztcbiAgLyoqXG4gICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9hd3MvNS42OC4wL2RvY3MvcmVzb3VyY2VzL3MzX2J1Y2tldF9ub3RpZmljYXRpb24jZmlsdGVyX3N1ZmZpeCBTM0J1Y2tldE5vdGlmaWNhdGlvbiNmaWx0ZXJfc3VmZml4fVxuICAgKi9cbiAgcmVhZG9ubHkgZmlsdGVyU3VmZml4Pzogc3RyaW5nO1xufVxuIl19
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const BUCKET_READ_ACTIONS: string[];
|
|
2
|
+
export declare const BUCKET_READ_METADATA_ACTIONS: string[];
|
|
3
|
+
export declare const LEGACY_BUCKET_PUT_ACTIONS: string[];
|
|
4
|
+
export declare const BUCKET_PUT_ACTIONS: string[];
|
|
5
|
+
export declare const BUCKET_PUT_ACL_ACTIONS: string[];
|
|
6
|
+
export declare const BUCKET_PUT_POLICY_ACTIONS: string[];
|
|
7
|
+
export declare const BUCKET_DELETE_ACTIONS: string[];
|
|
8
|
+
export declare const KEY_READ_ACTIONS: string[];
|
|
9
|
+
export declare const KEY_WRITE_ACTIONS: string[];
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.KEY_WRITE_ACTIONS = exports.KEY_READ_ACTIONS = exports.BUCKET_DELETE_ACTIONS = exports.BUCKET_PUT_POLICY_ACTIONS = exports.BUCKET_PUT_ACL_ACTIONS = exports.BUCKET_PUT_ACTIONS = exports.LEGACY_BUCKET_PUT_ACTIONS = exports.BUCKET_READ_METADATA_ACTIONS = exports.BUCKET_READ_ACTIONS = void 0;
|
|
4
|
+
// ref: https://github.com/aws/aws-cdk/blob/v2.160.0/packages/aws-cdk-lib/aws-s3/lib/perms.ts
|
|
5
|
+
exports.BUCKET_READ_ACTIONS = [
|
|
6
|
+
"s3:GetObject*",
|
|
7
|
+
"s3:GetBucket*",
|
|
8
|
+
"s3:List*",
|
|
9
|
+
];
|
|
10
|
+
exports.BUCKET_READ_METADATA_ACTIONS = ["s3:GetBucket*", "s3:List*"];
|
|
11
|
+
exports.LEGACY_BUCKET_PUT_ACTIONS = ["s3:PutObject*", "s3:Abort*"];
|
|
12
|
+
exports.BUCKET_PUT_ACTIONS = [
|
|
13
|
+
"s3:PutObject",
|
|
14
|
+
"s3:PutObjectLegalHold",
|
|
15
|
+
"s3:PutObjectRetention",
|
|
16
|
+
"s3:PutObjectTagging",
|
|
17
|
+
"s3:PutObjectVersionTagging",
|
|
18
|
+
"s3:Abort*",
|
|
19
|
+
];
|
|
20
|
+
exports.BUCKET_PUT_ACL_ACTIONS = [
|
|
21
|
+
"s3:PutObjectAcl",
|
|
22
|
+
"s3:PutObjectVersionAcl",
|
|
23
|
+
];
|
|
24
|
+
exports.BUCKET_PUT_POLICY_ACTIONS = ["s3:PutBucketPolicy"];
|
|
25
|
+
exports.BUCKET_DELETE_ACTIONS = ["s3:DeleteObject*"];
|
|
26
|
+
exports.KEY_READ_ACTIONS = ["kms:Decrypt", "kms:DescribeKey"];
|
|
27
|
+
exports.KEY_WRITE_ACTIONS = [
|
|
28
|
+
"kms:Encrypt",
|
|
29
|
+
"kms:ReEncrypt*",
|
|
30
|
+
"kms:GenerateDataKey*",
|
|
31
|
+
"kms:Decrypt", // required for multipart uploads. Refer https://aws.amazon.com/premiumsupport/knowledge-center/s3-multipart-kms-decrypt/
|
|
32
|
+
];
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVja2V0LXBlcm1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F3cy9zdG9yYWdlL2J1Y2tldC1wZXJtcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2RkFBNkY7QUFDaEYsUUFBQSxtQkFBbUIsR0FBRztJQUNqQyxlQUFlO0lBQ2YsZUFBZTtJQUNmLFVBQVU7Q0FDWCxDQUFDO0FBRVcsUUFBQSw0QkFBNEIsR0FBRyxDQUFDLGVBQWUsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUU3RCxRQUFBLHlCQUF5QixHQUFHLENBQUMsZUFBZSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBRTNELFFBQUEsa0JBQWtCLEdBQUc7SUFDaEMsY0FBYztJQUNkLHVCQUF1QjtJQUN2Qix1QkFBdUI7SUFDdkIscUJBQXFCO0lBQ3JCLDRCQUE0QjtJQUM1QixXQUFXO0NBQ1osQ0FBQztBQUVXLFFBQUEsc0JBQXNCLEdBQUc7SUFDcEMsaUJBQWlCO0lBQ2pCLHdCQUF3QjtDQUN6QixDQUFDO0FBRVcsUUFBQSx5QkFBeUIsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFFbkQsUUFBQSxxQkFBcUIsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFFN0MsUUFBQSxnQkFBZ0IsR0FBRyxDQUFDLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0FBRXRELFFBQUEsaUJBQWlCLEdBQUc7SUFDL0IsYUFBYTtJQUNiLGdCQUFnQjtJQUNoQixzQkFBc0I7SUFDdEIsYUFBYSxFQUFFLHlIQUF5SDtDQUN6SSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gcmVmOiBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi92Mi4xNjAuMC9wYWNrYWdlcy9hd3MtY2RrLWxpYi9hd3MtczMvbGliL3Blcm1zLnRzXG5leHBvcnQgY29uc3QgQlVDS0VUX1JFQURfQUNUSU9OUyA9IFtcbiAgXCJzMzpHZXRPYmplY3QqXCIsXG4gIFwiczM6R2V0QnVja2V0KlwiLFxuICBcInMzOkxpc3QqXCIsXG5dO1xuXG5leHBvcnQgY29uc3QgQlVDS0VUX1JFQURfTUVUQURBVEFfQUNUSU9OUyA9IFtcInMzOkdldEJ1Y2tldCpcIiwgXCJzMzpMaXN0KlwiXTtcblxuZXhwb3J0IGNvbnN0IExFR0FDWV9CVUNLRVRfUFVUX0FDVElPTlMgPSBbXCJzMzpQdXRPYmplY3QqXCIsIFwiczM6QWJvcnQqXCJdO1xuXG5leHBvcnQgY29uc3QgQlVDS0VUX1BVVF9BQ1RJT05TID0gW1xuICBcInMzOlB1dE9iamVjdFwiLFxuICBcInMzOlB1dE9iamVjdExlZ2FsSG9sZFwiLFxuICBcInMzOlB1dE9iamVjdFJldGVudGlvblwiLFxuICBcInMzOlB1dE9iamVjdFRhZ2dpbmdcIixcbiAgXCJzMzpQdXRPYmplY3RWZXJzaW9uVGFnZ2luZ1wiLFxuICBcInMzOkFib3J0KlwiLFxuXTtcblxuZXhwb3J0IGNvbnN0IEJVQ0tFVF9QVVRfQUNMX0FDVElPTlMgPSBbXG4gIFwiczM6UHV0T2JqZWN0QWNsXCIsXG4gIFwiczM6UHV0T2JqZWN0VmVyc2lvbkFjbFwiLFxuXTtcblxuZXhwb3J0IGNvbnN0IEJVQ0tFVF9QVVRfUE9MSUNZX0FDVElPTlMgPSBbXCJzMzpQdXRCdWNrZXRQb2xpY3lcIl07XG5cbmV4cG9ydCBjb25zdCBCVUNLRVRfREVMRVRFX0FDVElPTlMgPSBbXCJzMzpEZWxldGVPYmplY3QqXCJdO1xuXG5leHBvcnQgY29uc3QgS0VZX1JFQURfQUNUSU9OUyA9IFtcImttczpEZWNyeXB0XCIsIFwia21zOkRlc2NyaWJlS2V5XCJdO1xuXG5leHBvcnQgY29uc3QgS0VZX1dSSVRFX0FDVElPTlMgPSBbXG4gIFwia21zOkVuY3J5cHRcIixcbiAgXCJrbXM6UmVFbmNyeXB0KlwiLFxuICBcImttczpHZW5lcmF0ZURhdGFLZXkqXCIsXG4gIFwia21zOkRlY3J5cHRcIiwgLy8gcmVxdWlyZWQgZm9yIG11bHRpcGFydCB1cGxvYWRzLiBSZWZlciBodHRwczovL2F3cy5hbWF6b24uY29tL3ByZW1pdW1zdXBwb3J0L2tub3dsZWRnZS1jZW50ZXIvczMtbXVsdGlwYXJ0LWttcy1kZWNyeXB0L1xuXTtcbiJdfQ==
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { s3BucketPolicy } from "@cdktf/provider-aws";
|
|
2
|
+
import { Construct } from "constructs";
|
|
3
|
+
import { AwsConstructProps, AwsConstructBase } from "../aws-construct";
|
|
4
|
+
import { IBucket } from "./bucket";
|
|
5
|
+
import { PolicyDocument } from "../iam";
|
|
6
|
+
export interface BucketPolicyProps extends AwsConstructProps {
|
|
7
|
+
/**
|
|
8
|
+
* The Amazon S3 bucket that the policy applies to.
|
|
9
|
+
*/
|
|
10
|
+
readonly bucket: IBucket;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* The bucket policy for an Amazon S3 bucket
|
|
14
|
+
*
|
|
15
|
+
* Policies define the operations that are allowed on this resource.
|
|
16
|
+
*
|
|
17
|
+
* You almost never need to define this construct directly.
|
|
18
|
+
*
|
|
19
|
+
* All AWS resources that support resource policies have a method called
|
|
20
|
+
* `addToResourcePolicy()`, which will automatically create a new resource
|
|
21
|
+
* policy if one doesn't exist yet, otherwise it will add to the existing
|
|
22
|
+
* policy.
|
|
23
|
+
*
|
|
24
|
+
* The bucket policy method is implemented differently than `addToResourcePolicy()`
|
|
25
|
+
* as `BucketPolicy()` creates a new policy without knowing one earlier existed.
|
|
26
|
+
* e.g. if during Bucket creation, if `autoDeleteObject:true`, these policies are
|
|
27
|
+
* added to the bucket policy:
|
|
28
|
+
* ["s3:DeleteObject*", "s3:GetBucket*", "s3:List*", "s3:PutBucketPolicy"],
|
|
29
|
+
* and when you add a new BucketPolicy with ["s3:GetObject", "s3:ListBucket"] on
|
|
30
|
+
* this existing bucket, invoking `BucketPolicy()` will create a new Policy
|
|
31
|
+
* without knowing one earlier exists already, so it creates a new one.
|
|
32
|
+
* In this case, the custom resource handler will not have access to
|
|
33
|
+
* `s3:GetBucketTagging` action which will cause failure during deletion of stack.
|
|
34
|
+
*
|
|
35
|
+
* Hence its strongly recommended to use `addToResourcePolicy()` method to add
|
|
36
|
+
* new permissions to existing policy.
|
|
37
|
+
*
|
|
38
|
+
*/
|
|
39
|
+
export declare class BucketPolicy extends AwsConstructBase {
|
|
40
|
+
readonly resource: s3BucketPolicy.S3BucketPolicy;
|
|
41
|
+
get outputs(): Record<string, any>;
|
|
42
|
+
/**
|
|
43
|
+
* A policy document containing permissions to add to the specified bucket.
|
|
44
|
+
* For more information, see Access Policy Language Overview in the Amazon
|
|
45
|
+
* Simple Storage Service Developer Guide.
|
|
46
|
+
*/
|
|
47
|
+
readonly document: PolicyDocument;
|
|
48
|
+
/** The Bucket this Policy applies to. */
|
|
49
|
+
readonly bucket: IBucket;
|
|
50
|
+
constructor(scope: Construct, id: string, props: BucketPolicyProps);
|
|
51
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.BucketPolicy = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
const provider_aws_1 = require("@cdktf/provider-aws");
|
|
7
|
+
const aws_construct_1 = require("../aws-construct");
|
|
8
|
+
const iam_1 = require("../iam");
|
|
9
|
+
/**
|
|
10
|
+
* The bucket policy for an Amazon S3 bucket
|
|
11
|
+
*
|
|
12
|
+
* Policies define the operations that are allowed on this resource.
|
|
13
|
+
*
|
|
14
|
+
* You almost never need to define this construct directly.
|
|
15
|
+
*
|
|
16
|
+
* All AWS resources that support resource policies have a method called
|
|
17
|
+
* `addToResourcePolicy()`, which will automatically create a new resource
|
|
18
|
+
* policy if one doesn't exist yet, otherwise it will add to the existing
|
|
19
|
+
* policy.
|
|
20
|
+
*
|
|
21
|
+
* The bucket policy method is implemented differently than `addToResourcePolicy()`
|
|
22
|
+
* as `BucketPolicy()` creates a new policy without knowing one earlier existed.
|
|
23
|
+
* e.g. if during Bucket creation, if `autoDeleteObject:true`, these policies are
|
|
24
|
+
* added to the bucket policy:
|
|
25
|
+
* ["s3:DeleteObject*", "s3:GetBucket*", "s3:List*", "s3:PutBucketPolicy"],
|
|
26
|
+
* and when you add a new BucketPolicy with ["s3:GetObject", "s3:ListBucket"] on
|
|
27
|
+
* this existing bucket, invoking `BucketPolicy()` will create a new Policy
|
|
28
|
+
* without knowing one earlier exists already, so it creates a new one.
|
|
29
|
+
* In this case, the custom resource handler will not have access to
|
|
30
|
+
* `s3:GetBucketTagging` action which will cause failure during deletion of stack.
|
|
31
|
+
*
|
|
32
|
+
* Hence its strongly recommended to use `addToResourcePolicy()` method to add
|
|
33
|
+
* new permissions to existing policy.
|
|
34
|
+
*
|
|
35
|
+
*/
|
|
36
|
+
class BucketPolicy extends aws_construct_1.AwsConstructBase {
|
|
37
|
+
get outputs() {
|
|
38
|
+
return {};
|
|
39
|
+
}
|
|
40
|
+
constructor(scope, id, props) {
|
|
41
|
+
super(scope, id);
|
|
42
|
+
this.bucket = props.bucket;
|
|
43
|
+
this.document = new iam_1.PolicyDocument(this, "Policy");
|
|
44
|
+
this.resource = new provider_aws_1.s3BucketPolicy.S3BucketPolicy(this, "Resource", {
|
|
45
|
+
bucket: this.bucket.bucketName,
|
|
46
|
+
policy: this.document.json,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
exports.BucketPolicy = BucketPolicy;
|
|
51
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
52
|
+
BucketPolicy[_a] = { fqn: "terraconstructs.aws.storage.BucketPolicy", version: "0.0.8" };
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVja2V0LXBvbGljeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hd3Mvc3RvcmFnZS9idWNrZXQtcG9saWN5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsc0RBQXFEO0FBRXJELG9EQUF1RTtBQUV2RSxnQ0FBd0M7QUFTeEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEJHO0FBQ0gsTUFBYSxZQUFhLFNBQVEsZ0NBQWdCO0lBR2hELElBQVcsT0FBTztRQUNoQixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFZRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXdCO1FBQ2hFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxvQkFBYyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUVuRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksNkJBQWMsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRTtZQUNsRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVO1lBQzlCLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUk7U0FDM0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUEzQkgsb0NBNEJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgczNCdWNrZXRQb2xpY3kgfSBmcm9tIFwiQGNka3RmL3Byb3ZpZGVyLWF3c1wiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IEF3c0NvbnN0cnVjdFByb3BzLCBBd3NDb25zdHJ1Y3RCYXNlIH0gZnJvbSBcIi4uL2F3cy1jb25zdHJ1Y3RcIjtcbmltcG9ydCB7IElCdWNrZXQgfSBmcm9tIFwiLi9idWNrZXRcIjtcbmltcG9ydCB7IFBvbGljeURvY3VtZW50IH0gZnJvbSBcIi4uL2lhbVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFBvbGljeVByb3BzIGV4dGVuZHMgQXdzQ29uc3RydWN0UHJvcHMge1xuICAvKipcbiAgICogVGhlIEFtYXpvbiBTMyBidWNrZXQgdGhhdCB0aGUgcG9saWN5IGFwcGxpZXMgdG8uXG4gICAqL1xuICByZWFkb25seSBidWNrZXQ6IElCdWNrZXQ7XG59XG5cbi8qKlxuICogVGhlIGJ1Y2tldCBwb2xpY3kgZm9yIGFuIEFtYXpvbiBTMyBidWNrZXRcbiAqXG4gKiBQb2xpY2llcyBkZWZpbmUgdGhlIG9wZXJhdGlvbnMgdGhhdCBhcmUgYWxsb3dlZCBvbiB0aGlzIHJlc291cmNlLlxuICpcbiAqIFlvdSBhbG1vc3QgbmV2ZXIgbmVlZCB0byBkZWZpbmUgdGhpcyBjb25zdHJ1Y3QgZGlyZWN0bHkuXG4gKlxuICogQWxsIEFXUyByZXNvdXJjZXMgdGhhdCBzdXBwb3J0IHJlc291cmNlIHBvbGljaWVzIGhhdmUgYSBtZXRob2QgY2FsbGVkXG4gKiBgYWRkVG9SZXNvdXJjZVBvbGljeSgpYCwgd2hpY2ggd2lsbCBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBhIG5ldyByZXNvdXJjZVxuICogcG9saWN5IGlmIG9uZSBkb2Vzbid0IGV4aXN0IHlldCwgb3RoZXJ3aXNlIGl0IHdpbGwgYWRkIHRvIHRoZSBleGlzdGluZ1xuICogcG9saWN5LlxuICpcbiAqIFRoZSBidWNrZXQgcG9saWN5IG1ldGhvZCBpcyBpbXBsZW1lbnRlZCBkaWZmZXJlbnRseSB0aGFuIGBhZGRUb1Jlc291cmNlUG9saWN5KClgXG4gKiBhcyBgQnVja2V0UG9saWN5KClgIGNyZWF0ZXMgYSBuZXcgcG9saWN5IHdpdGhvdXQga25vd2luZyBvbmUgZWFybGllciBleGlzdGVkLlxuICogZS5nLiBpZiBkdXJpbmcgQnVja2V0IGNyZWF0aW9uLCBpZiBgYXV0b0RlbGV0ZU9iamVjdDp0cnVlYCwgdGhlc2UgcG9saWNpZXMgYXJlXG4gKiBhZGRlZCB0byB0aGUgYnVja2V0IHBvbGljeTpcbiAqICAgIFtcInMzOkRlbGV0ZU9iamVjdCpcIiwgXCJzMzpHZXRCdWNrZXQqXCIsIFwiczM6TGlzdCpcIiwgXCJzMzpQdXRCdWNrZXRQb2xpY3lcIl0sXG4gKiBhbmQgd2hlbiB5b3UgYWRkIGEgbmV3IEJ1Y2tldFBvbGljeSB3aXRoIFtcInMzOkdldE9iamVjdFwiLCBcInMzOkxpc3RCdWNrZXRcIl0gb25cbiAqIHRoaXMgZXhpc3RpbmcgYnVja2V0LCBpbnZva2luZyBgQnVja2V0UG9saWN5KClgIHdpbGwgY3JlYXRlIGEgbmV3IFBvbGljeVxuICogd2l0aG91dCBrbm93aW5nIG9uZSBlYXJsaWVyIGV4aXN0cyBhbHJlYWR5LCBzbyBpdCBjcmVhdGVzIGEgbmV3IG9uZS5cbiAqIEluIHRoaXMgY2FzZSwgdGhlIGN1c3RvbSByZXNvdXJjZSBoYW5kbGVyIHdpbGwgbm90IGhhdmUgYWNjZXNzIHRvXG4gKiBgczM6R2V0QnVja2V0VGFnZ2luZ2AgYWN0aW9uIHdoaWNoIHdpbGwgY2F1c2UgZmFpbHVyZSBkdXJpbmcgZGVsZXRpb24gb2Ygc3RhY2suXG4gKlxuICogSGVuY2UgaXRzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRvIHVzZSBgYWRkVG9SZXNvdXJjZVBvbGljeSgpYCBtZXRob2QgdG8gYWRkXG4gKiBuZXcgcGVybWlzc2lvbnMgdG8gZXhpc3RpbmcgcG9saWN5LlxuICpcbiAqL1xuZXhwb3J0IGNsYXNzIEJ1Y2tldFBvbGljeSBleHRlbmRzIEF3c0NvbnN0cnVjdEJhc2Uge1xuICAvLyBUT0RPOiByZS1hZGQgc3RhdGljIGZyb20gTWV0aG9kXG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZTogczNCdWNrZXRQb2xpY3kuUzNCdWNrZXRQb2xpY3k7XG4gIHB1YmxpYyBnZXQgb3V0cHV0cygpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICAvKipcbiAgICogQSBwb2xpY3kgZG9jdW1lbnQgY29udGFpbmluZyBwZXJtaXNzaW9ucyB0byBhZGQgdG8gdGhlIHNwZWNpZmllZCBidWNrZXQuXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgQWNjZXNzIFBvbGljeSBMYW5ndWFnZSBPdmVydmlldyBpbiB0aGUgQW1hem9uXG4gICAqIFNpbXBsZSBTdG9yYWdlIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRvY3VtZW50OiBQb2xpY3lEb2N1bWVudDtcblxuICAvKiogVGhlIEJ1Y2tldCB0aGlzIFBvbGljeSBhcHBsaWVzIHRvLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYnVja2V0OiBJQnVja2V0O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBCdWNrZXRQb2xpY3lQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLmJ1Y2tldCA9IHByb3BzLmJ1Y2tldDtcbiAgICB0aGlzLmRvY3VtZW50ID0gbmV3IFBvbGljeURvY3VtZW50KHRoaXMsIFwiUG9saWN5XCIpO1xuXG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyBzM0J1Y2tldFBvbGljeS5TM0J1Y2tldFBvbGljeSh0aGlzLCBcIlJlc291cmNlXCIsIHtcbiAgICAgIGJ1Y2tldDogdGhpcy5idWNrZXQuYnVja2V0TmFtZSxcbiAgICAgIHBvbGljeTogdGhpcy5kb2N1bWVudC5qc29uLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { s3Object } from "@cdktf/provider-aws";
|
|
2
|
+
import { Construct } from "constructs";
|
|
3
|
+
import { IBucket, AddSourceOptions } from ".";
|
|
4
|
+
import { AwsConstructBase, IAwsConstruct, AwsConstructProps } from "../aws-construct";
|
|
5
|
+
export interface BucketSourceProps extends AddSourceOptions, AwsConstructProps {
|
|
6
|
+
/**
|
|
7
|
+
* Target bucket to upload to
|
|
8
|
+
*/
|
|
9
|
+
readonly bucket: IBucket;
|
|
10
|
+
}
|
|
11
|
+
export interface BucketObjectOutput {
|
|
12
|
+
/**
|
|
13
|
+
* The object source Hash
|
|
14
|
+
*/
|
|
15
|
+
readonly sourceHash: string;
|
|
16
|
+
}
|
|
17
|
+
export interface BucketSourceOutputs {
|
|
18
|
+
/**
|
|
19
|
+
* The objects uploaded to the bucket indexed by key
|
|
20
|
+
*/
|
|
21
|
+
readonly objects: Record<string, BucketObjectOutput>;
|
|
22
|
+
}
|
|
23
|
+
export interface IBucketSource extends IAwsConstruct {
|
|
24
|
+
readonly bucketSourceOutputs: BucketSourceOutputs;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* A Bucket Source which reads files from disk and creates uploads to s3.
|
|
28
|
+
*/
|
|
29
|
+
export declare class BucketSource extends AwsConstructBase implements IBucketSource {
|
|
30
|
+
readonly objects: s3Object.S3Object[];
|
|
31
|
+
private readonly _bucketSourceOutputs;
|
|
32
|
+
get bucketSourceOutputs(): BucketSourceOutputs;
|
|
33
|
+
get outputs(): Record<string, any>;
|
|
34
|
+
private readonly dependsOn;
|
|
35
|
+
private readonly resolvedPath;
|
|
36
|
+
private readonly prefix;
|
|
37
|
+
private _bucket;
|
|
38
|
+
constructor(scope: Construct, id: string, props: BucketSourceProps);
|
|
39
|
+
private uploadAssetDir;
|
|
40
|
+
private uploadAssetFile;
|
|
41
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.BucketSource = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
const fs = require("fs");
|
|
7
|
+
const path = require("path");
|
|
8
|
+
const provider_aws_1 = require("@cdktf/provider-aws");
|
|
9
|
+
const cdktf_1 = require("cdktf");
|
|
10
|
+
const mime = require("mime-types");
|
|
11
|
+
const _1 = require(".");
|
|
12
|
+
const aws_construct_1 = require("../aws-construct");
|
|
13
|
+
/**
|
|
14
|
+
* A Bucket Source which reads files from disk and creates uploads to s3.
|
|
15
|
+
*/
|
|
16
|
+
class BucketSource extends aws_construct_1.AwsConstructBase {
|
|
17
|
+
get bucketSourceOutputs() {
|
|
18
|
+
return this._bucketSourceOutputs;
|
|
19
|
+
}
|
|
20
|
+
get outputs() {
|
|
21
|
+
return this.bucketSourceOutputs;
|
|
22
|
+
}
|
|
23
|
+
constructor(scope, id, props) {
|
|
24
|
+
super(scope, id, props);
|
|
25
|
+
this.objects = [];
|
|
26
|
+
this.dependsOn = [];
|
|
27
|
+
const { bucket, path: sourcePath, prefix } = props;
|
|
28
|
+
this._bucket = bucket;
|
|
29
|
+
this.dependsOn = props.dependsOn ?? [];
|
|
30
|
+
// should we support absolute paths? path.isAbsolute(props.path)?
|
|
31
|
+
this.resolvedPath = path.resolve(sourcePath);
|
|
32
|
+
this.prefix = prefix ?? "";
|
|
33
|
+
const asset = new cdktf_1.TerraformAsset(this, "PathAsset", {
|
|
34
|
+
path: this.resolvedPath,
|
|
35
|
+
type: cdktf_1.AssetType.DIRECTORY,
|
|
36
|
+
});
|
|
37
|
+
this.uploadAssetDir(sourcePath, asset.path);
|
|
38
|
+
this._bucketSourceOutputs = {
|
|
39
|
+
objects: this.objects.reduce((acc, obj) => {
|
|
40
|
+
acc[obj.key] = {
|
|
41
|
+
sourceHash: obj.sourceHash,
|
|
42
|
+
};
|
|
43
|
+
return acc;
|
|
44
|
+
}, {}),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
// TODO: Handle deployments with custom lambdas instead?
|
|
48
|
+
// https://github.com/aws/aws-cdk/blob/9946ab03672bf6664e8ec95a81ddb67c3bb2f63b/packages/%40aws-cdk/custom-resource-handlers/lib/aws-s3-deployment/bucket-deployment-handler/index.py
|
|
49
|
+
uploadAssetDir(basePath, assetPath) {
|
|
50
|
+
const files = fs.readdirSync(basePath, { withFileTypes: true });
|
|
51
|
+
for (const file of files) {
|
|
52
|
+
const baseFilename = path.join(basePath, file.name);
|
|
53
|
+
const assetFilename = path.join(assetPath, file.name);
|
|
54
|
+
if (file.isDirectory()) {
|
|
55
|
+
this.uploadAssetDir(baseFilename, assetFilename);
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
this.uploadAssetFile(baseFilename, assetFilename);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
uploadAssetFile(basePath, assetPath) {
|
|
63
|
+
let relativePath = path.join(this.prefix, basePath.replace(this.resolvedPath, ""));
|
|
64
|
+
const fileKey = (0, _1.normalPath)(relativePath);
|
|
65
|
+
// copy from asset directory
|
|
66
|
+
this.objects.push(new provider_aws_1.s3Object.S3Object(this, `File${fileKey.replace(/\//g, "--")}`, {
|
|
67
|
+
key: fileKey,
|
|
68
|
+
bucket: this._bucket.bucketOutputs.name,
|
|
69
|
+
source: assetPath,
|
|
70
|
+
sourceHash: cdktf_1.Fn.filemd5(assetPath),
|
|
71
|
+
contentType: mime.contentType(path.extname(assetPath)) || undefined,
|
|
72
|
+
dependsOn: this.dependsOn.length > 0 ? this.dependsOn : undefined,
|
|
73
|
+
}));
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
exports.BucketSource = BucketSource;
|
|
77
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
78
|
+
BucketSource[_a] = { fqn: "terraconstructs.aws.storage.BucketSource", version: "0.0.8" };
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVja2V0LXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hd3Mvc3RvcmFnZS9idWNrZXQtc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3QixzREFBK0M7QUFDL0MsaUNBQTRFO0FBRTVFLG1DQUFtQztBQUNuQyx3QkFBMEQ7QUFDMUQsb0RBSTBCO0FBMkIxQjs7R0FFRztBQUNILE1BQWEsWUFBYSxTQUFRLGdDQUFnQjtJQUloRCxJQUFXLG1CQUFtQjtRQUM1QixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztJQUNuQyxDQUFDO0lBRUQsSUFBVyxPQUFPO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQ2xDLENBQUM7SUFPRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXdCO1FBQ2hFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBakJWLFlBQU8sR0FBd0IsRUFBRSxDQUFDO1FBV2pDLGNBQVMsR0FBMkIsRUFBRSxDQUFDO1FBUXRELE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFFbkQsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQztRQUN2QyxpRUFBaUU7UUFFakUsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUUzQixNQUFNLEtBQUssR0FBRyxJQUFJLHNCQUFjLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRTtZQUNsRCxJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVk7WUFDdkIsSUFBSSxFQUFFLGlCQUFTLENBQUMsU0FBUztTQUMxQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFNUMsSUFBSSxDQUFDLG9CQUFvQixHQUFHO1lBQzFCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FDMUIsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUU7Z0JBQ1gsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRztvQkFDYixVQUFVLEVBQUUsR0FBRyxDQUFDLFVBQVU7aUJBQzNCLENBQUM7Z0JBQ0YsT0FBTyxHQUFHLENBQUM7WUFDYixDQUFDLEVBQ0QsRUFBd0MsQ0FDekM7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELHdEQUF3RDtJQUN4RCxxTEFBcUw7SUFDN0ssY0FBYyxDQUFDLFFBQWdCLEVBQUUsU0FBaUI7UUFDeEQsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNoRSxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3pCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEQsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFDbkQsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQ3BELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVPLGVBQWUsQ0FBQyxRQUFnQixFQUFFLFNBQWlCO1FBQ3pELElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQzFCLElBQUksQ0FBQyxNQUFNLEVBQ1gsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUN4QyxDQUFDO1FBQ0YsTUFBTSxPQUFPLEdBQUcsSUFBQSxhQUFVLEVBQUMsWUFBWSxDQUFDLENBQUM7UUFFekMsNEJBQTRCO1FBQzVCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUNmLElBQUksdUJBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRTtZQUNqRSxHQUFHLEVBQUUsT0FBTztZQUNaLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJO1lBQ3ZDLE1BQU0sRUFBRSxTQUFTO1lBQ2pCLFVBQVUsRUFBRSxVQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztZQUNqQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksU0FBUztZQUNuRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTO1NBQ2xFLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzs7QUFqRkgsb0NBa0ZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBzM09iamVjdCB9IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItYXdzXCI7XG5pbXBvcnQgeyBUZXJyYWZvcm1Bc3NldCwgQXNzZXRUeXBlLCBGbiwgSVRlcnJhZm9ybURlcGVuZGFibGUgfSBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgKiBhcyBtaW1lIGZyb20gXCJtaW1lLXR5cGVzXCI7XG5pbXBvcnQgeyBub3JtYWxQYXRoLCBJQnVja2V0LCBBZGRTb3VyY2VPcHRpb25zIH0gZnJvbSBcIi5cIjtcbmltcG9ydCB7XG4gIEF3c0NvbnN0cnVjdEJhc2UsXG4gIElBd3NDb25zdHJ1Y3QsXG4gIEF3c0NvbnN0cnVjdFByb3BzLFxufSBmcm9tIFwiLi4vYXdzLWNvbnN0cnVjdFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNvdXJjZVByb3BzIGV4dGVuZHMgQWRkU291cmNlT3B0aW9ucywgQXdzQ29uc3RydWN0UHJvcHMge1xuICAvKipcbiAgICogVGFyZ2V0IGJ1Y2tldCB0byB1cGxvYWQgdG9cbiAgICovXG4gIHJlYWRvbmx5IGJ1Y2tldDogSUJ1Y2tldDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRPYmplY3RPdXRwdXQge1xuICAvKipcbiAgICogVGhlIG9iamVjdCBzb3VyY2UgSGFzaFxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlSGFzaDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNvdXJjZU91dHB1dHMge1xuICAvKipcbiAgICogVGhlIG9iamVjdHMgdXBsb2FkZWQgdG8gdGhlIGJ1Y2tldCBpbmRleGVkIGJ5IGtleVxuICAgKi9cbiAgcmVhZG9ubHkgb2JqZWN0czogUmVjb3JkPHN0cmluZywgQnVja2V0T2JqZWN0T3V0cHV0Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQnVja2V0U291cmNlIGV4dGVuZHMgSUF3c0NvbnN0cnVjdCB7XG4gIHJlYWRvbmx5IGJ1Y2tldFNvdXJjZU91dHB1dHM6IEJ1Y2tldFNvdXJjZU91dHB1dHM7XG59XG5cbi8qKlxuICogQSBCdWNrZXQgU291cmNlIHdoaWNoIHJlYWRzIGZpbGVzIGZyb20gZGlzayBhbmQgY3JlYXRlcyB1cGxvYWRzIHRvIHMzLlxuICovXG5leHBvcnQgY2xhc3MgQnVja2V0U291cmNlIGV4dGVuZHMgQXdzQ29uc3RydWN0QmFzZSBpbXBsZW1lbnRzIElCdWNrZXRTb3VyY2Uge1xuICBwdWJsaWMgcmVhZG9ubHkgb2JqZWN0czogczNPYmplY3QuUzNPYmplY3RbXSA9IFtdO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2J1Y2tldFNvdXJjZU91dHB1dHM6IEJ1Y2tldFNvdXJjZU91dHB1dHM7XG4gIHB1YmxpYyBnZXQgYnVja2V0U291cmNlT3V0cHV0cygpOiBCdWNrZXRTb3VyY2VPdXRwdXRzIHtcbiAgICByZXR1cm4gdGhpcy5fYnVja2V0U291cmNlT3V0cHV0cztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgb3V0cHV0cygpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5idWNrZXRTb3VyY2VPdXRwdXRzO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkZXBlbmRzT246IElUZXJyYWZvcm1EZXBlbmRhYmxlW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSByZXNvbHZlZFBhdGg6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBwcmVmaXg6IHN0cmluZztcbiAgcHJpdmF0ZSBfYnVja2V0OiBJQnVja2V0O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBCdWNrZXRTb3VyY2VQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgY29uc3QgeyBidWNrZXQsIHBhdGg6IHNvdXJjZVBhdGgsIHByZWZpeCB9ID0gcHJvcHM7XG5cbiAgICB0aGlzLl9idWNrZXQgPSBidWNrZXQ7XG4gICAgdGhpcy5kZXBlbmRzT24gPSBwcm9wcy5kZXBlbmRzT24gPz8gW107XG4gICAgLy8gc2hvdWxkIHdlIHN1cHBvcnQgYWJzb2x1dGUgcGF0aHM/IHBhdGguaXNBYnNvbHV0ZShwcm9wcy5wYXRoKT9cblxuICAgIHRoaXMucmVzb2x2ZWRQYXRoID0gcGF0aC5yZXNvbHZlKHNvdXJjZVBhdGgpO1xuICAgIHRoaXMucHJlZml4ID0gcHJlZml4ID8/IFwiXCI7XG5cbiAgICBjb25zdCBhc3NldCA9IG5ldyBUZXJyYWZvcm1Bc3NldCh0aGlzLCBcIlBhdGhBc3NldFwiLCB7XG4gICAgICBwYXRoOiB0aGlzLnJlc29sdmVkUGF0aCxcbiAgICAgIHR5cGU6IEFzc2V0VHlwZS5ESVJFQ1RPUlksXG4gICAgfSk7XG4gICAgdGhpcy51cGxvYWRBc3NldERpcihzb3VyY2VQYXRoLCBhc3NldC5wYXRoKTtcblxuICAgIHRoaXMuX2J1Y2tldFNvdXJjZU91dHB1dHMgPSB7XG4gICAgICBvYmplY3RzOiB0aGlzLm9iamVjdHMucmVkdWNlKFxuICAgICAgICAoYWNjLCBvYmopID0+IHtcbiAgICAgICAgICBhY2Nbb2JqLmtleV0gPSB7XG4gICAgICAgICAgICBzb3VyY2VIYXNoOiBvYmouc291cmNlSGFzaCxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sXG4gICAgICAgIHt9IGFzIFJlY29yZDxzdHJpbmcsIEJ1Y2tldE9iamVjdE91dHB1dD4sXG4gICAgICApLFxuICAgIH07XG4gIH1cblxuICAvLyBUT0RPOiBIYW5kbGUgZGVwbG95bWVudHMgd2l0aCBjdXN0b20gbGFtYmRhcyBpbnN0ZWFkP1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi85OTQ2YWIwMzY3MmJmNjY2NGU4ZWM5NWE4MWRkYjY3YzNiYjJmNjNiL3BhY2thZ2VzLyU0MGF3cy1jZGsvY3VzdG9tLXJlc291cmNlLWhhbmRsZXJzL2xpYi9hd3MtczMtZGVwbG95bWVudC9idWNrZXQtZGVwbG95bWVudC1oYW5kbGVyL2luZGV4LnB5XG4gIHByaXZhdGUgdXBsb2FkQXNzZXREaXIoYmFzZVBhdGg6IHN0cmluZywgYXNzZXRQYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKGJhc2VQYXRoLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSk7XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICBjb25zdCBiYXNlRmlsZW5hbWUgPSBwYXRoLmpvaW4oYmFzZVBhdGgsIGZpbGUubmFtZSk7XG4gICAgICBjb25zdCBhc3NldEZpbGVuYW1lID0gcGF0aC5qb2luKGFzc2V0UGF0aCwgZmlsZS5uYW1lKTtcbiAgICAgIGlmIChmaWxlLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgdGhpcy51cGxvYWRBc3NldERpcihiYXNlRmlsZW5hbWUsIGFzc2V0RmlsZW5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy51cGxvYWRBc3NldEZpbGUoYmFzZUZpbGVuYW1lLCBhc3NldEZpbGVuYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwbG9hZEFzc2V0RmlsZShiYXNlUGF0aDogc3RyaW5nLCBhc3NldFBhdGg6IHN0cmluZykge1xuICAgIGxldCByZWxhdGl2ZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICB0aGlzLnByZWZpeCxcbiAgICAgIGJhc2VQYXRoLnJlcGxhY2UodGhpcy5yZXNvbHZlZFBhdGgsIFwiXCIpLFxuICAgICk7XG4gICAgY29uc3QgZmlsZUtleSA9IG5vcm1hbFBhdGgocmVsYXRpdmVQYXRoKTtcblxuICAgIC8vIGNvcHkgZnJvbSBhc3NldCBkaXJlY3RvcnlcbiAgICB0aGlzLm9iamVjdHMucHVzaChcbiAgICAgIG5ldyBzM09iamVjdC5TM09iamVjdCh0aGlzLCBgRmlsZSR7ZmlsZUtleS5yZXBsYWNlKC9cXC8vZywgXCItLVwiKX1gLCB7XG4gICAgICAgIGtleTogZmlsZUtleSxcbiAgICAgICAgYnVja2V0OiB0aGlzLl9idWNrZXQuYnVja2V0T3V0cHV0cy5uYW1lLFxuICAgICAgICBzb3VyY2U6IGFzc2V0UGF0aCxcbiAgICAgICAgc291cmNlSGFzaDogRm4uZmlsZW1kNShhc3NldFBhdGgpLFxuICAgICAgICBjb250ZW50VHlwZTogbWltZS5jb250ZW50VHlwZShwYXRoLmV4dG5hbWUoYXNzZXRQYXRoKSkgfHwgdW5kZWZpbmVkLFxuICAgICAgICBkZXBlbmRzT246IHRoaXMuZGVwZW5kc09uLmxlbmd0aCA+IDAgPyB0aGlzLmRlcGVuZHNPbiA6IHVuZGVmaW5lZCxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
|