aws-cdk-lib
Version:
Version 2 of the AWS Cloud Development Kit library
2 lines (1 loc) • 2.39 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:!0});var aws_iam_1=()=>{var tmp=require("../../../aws-iam");return aws_iam_1=()=>tmp,tmp},aws_kms_1=()=>{var tmp=require("../../../aws-kms");return aws_kms_1=()=>tmp,tmp},core_1=()=>{var tmp=require("../../../core");return core_1=()=>tmp,tmp},helpers_internal_1=()=>{var tmp=require("../../../core/lib/helpers-internal");return helpers_internal_1=()=>tmp,tmp},literal_string_1=()=>{var tmp=require("../../../core/lib/private/literal-string");return literal_string_1=()=>tmp,tmp},sns_generated_1=()=>{var tmp=require("../sns.generated");return sns_generated_1=()=>tmp,tmp};class TopicWithPolicyFactory{forResource(resource){return ifCfnTopic(resource,r=>new CfnTopicWithPolicy(r))}}class CfnTopicWithPolicy{topic;env;policy;policyDocument;constructor(topic){this.topic=topic,this.env=topic.env}addToResourcePolicy(statement){return this.policy||(this.policy=new(sns_generated_1()).CfnTopicPolicy(this.topic,"TopicPolicy",{topics:[this.topic.ref],policyDocument:{Statement:[]}})),this.policyDocument||(this.policyDocument=aws_iam_1().PolicyDocument.fromJson(this.policy.policyDocument??{Statement:[]})),this.policyDocument.addStatements(statement),this.policy.policyDocument=this.policyDocument.toJSON(),{statementAdded:!0,policyDependable:this.policy}}}class EncryptedTopicFactory{forResource(resource){return ifCfnTopic(resource,r=>new EncryptedCfnTopic(r))}}class EncryptedCfnTopic{topic;env;constructor(topic){this.topic=topic,this.env=topic.env}grantOnKey(grantee,...actions){const key=tryFindKmsKeyForTopic(this.topic);return{grant:key?aws_kms_1().KeyGrants.fromKey(key).actions(grantee,...actions):void 0}}}function ifCfnTopic(resource,factory){if(!sns_generated_1().CfnTopic.isCfnTopic(resource))throw new(core_1()).ValidationError((0,literal_string_1().lit)`Construct`,`Construct ${resource.node.path} is not of type CfnTopic`,resource);return factory(resource)}function tryFindKmsKeyForTopic(topic){const kmsMasterKeyId=topic.kmsMasterKeyId;if(kmsMasterKeyId)return(0,helpers_internal_1().findClosestRelatedResource)(topic,"AWS::KMS::Key",(_,key)=>key.ref===kmsMasterKeyId||key.attrKeyId===kmsMasterKeyId||key.attrArn===kmsMasterKeyId)}aws_iam_1().DefaultPolicyFactories.set("AWS::SNS::Topic",new TopicWithPolicyFactory),aws_iam_1().DefaultEncryptedResourceFactories.set("AWS::SNS::Topic",new EncryptedTopicFactory);