@ez4/aws-topic 0.51.0 → 0.52.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/main.cjs +1 -1
- package/dist/main.mjs +1 -1
- package/dist/subscription/function/bundler.d.ts +1 -1
- package/dist/subscription/function/service.d.ts +1 -1
- package/dist/subscription/handler.d.ts +1 -1
- package/dist/subscription/service.d.ts +1 -1
- package/dist/subscription/types.d.ts +1 -1
- package/dist/subscription/utils.d.ts +1 -1
- package/dist/topic/handler.d.ts +1 -1
- package/dist/topic/service.d.ts +1 -1
- package/dist/topic/types.d.ts +1 -1
- package/dist/topic/utils.d.ts +1 -1
- package/dist/triggers/policy.d.ts +1 -1
- package/dist/triggers/subscription.d.ts +1 -1
- package/lib/event.ts +16 -0
- package/package.json +15 -15
package/dist/main.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var z=Object.defineProperty;var Tt=Object.getOwnPropertyDescriptor;var bt=Object.getOwnPropertyNames;var vt=Object.prototype.hasOwnProperty;var i=(t,e)=>z(t,"name",{value:e,configurable:!0});var xt=(t,e)=>{for(var r in e)z(t,r,{get:e[r],enumerable:!0})},Et=(t,e,r,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of bt(e))!vt.call(t,n)&&n!==r&&z(t,n,{get:()=>e[n],enumerable:!(o=Tt(e,n))||o.enumerable});return t};var wt=t=>Et(z({},"__esModule",{value:!0}),t);var Qt={};xt(Qt,{SubscriptionServiceName:()=>u,SubscriptionServiceType:()=>T,TopicServiceName:()=>l,TopicServiceType:()=>y,createSubscription:()=>q,createSubscriptionFunction:()=>Y,createTopic:()=>L,createTopicStateId:()=>k,getTopic:()=>Dt,getTopicArn:()=>X,getTopicState:()=>W,isSubscriptionState:()=>$t,isTopicState:()=>j,registerTriggers:()=>Mt});module.exports=wt(Qt);var et=require("@ez4/aws-common"),tt=require("@ez4/aws-identity"),rt=require("@ez4/aws-function"),ot=require("@ez4/aws-queue"),it=require("@ez4/topic/library"),nt=require("@ez4/project/library");var ge=require("@ez4/aws-common");var S=require("@ez4/aws-common"),O=require("@ez4/aws-identity"),Se=require("@ez4/utils");var w=require("@ez4/aws-identity");var R=i((t,e,r)=>`arn:aws:sns:${e}:${r}:${t}`,"buildTopicArn"),pe=i(async t=>{let[e,r]=await Promise.all([(0,w.getRegion)(),(0,w.getAccountId)()]);return(0,w.createPolicyDocument)([{permissions:["sns:Publish"],resourceIds:t.map(o=>R(`${o}-*`,e,r))}])},"getPolicyDocument");var f=require("@aws-sdk/client-sns"),J=require("@ez4/aws-common");var ce=require("@ez4/aws-common"),se=require("@aws-sdk/client-sns");var d=i(()=>new se.SNSClient((0,ce.getAwsClientOptions)()),"getSNSClient");var ae=i(async(t,e)=>{t.update("Creating topic");let{topicName:r,fifoMode:o}=e;return{topicArn:(await d().send(new f.CreateTopicCommand({Name:r,Attributes:{...o&&{ContentBasedDeduplication:"true",FifoThroughputScope:"MessageGroup",FifoTopic:"true"}},Tags:(0,J.getTagList)({...e.tags,ManagedBy:"EZ4"})}))).TopicArn}},"createTopic"),me=i(async(t,e)=>{t.update("Deleting topic");try{return await d().send(new f.DeleteTopicCommand({TopicArn:e})),!0}catch(r){if(!(r instanceof f.NotFoundException))throw r;return!1}},"deleteTopic"),ue=i(async(t,e,r)=>{t.update("Tag topic"),await d().send(new f.TagResourceCommand({ResourceArn:e,Tags:(0,J.getTagList)({...r,ManagedBy:"EZ4"})}))},"tagTopic"),fe=i(async(t,e,r)=>{t.update("Untag topic"),await d().send(new f.UntagResourceCommand({ResourceArn:e,TagKeys:r}))},"untagTopic");var l="AWS:SNS/Topic",y="aws:sns.topic";var le=i(()=>({equals:Rt,create:ye,replace:Ct,preview:At,update:Pt,delete:ht}),"getTopicHandler"),Rt=i((t,e)=>!!t.result&&t.result.topicArn===e.result?.topicArn,"equalsResource"),At=i((t,e)=>{let r={...t.parameters,dependencies:t.dependencies},o={...e.parameters,dependencies:e.dependencies},n=(0,Se.deepCompare)(r,o);if(n.counts)return{...n,name:r.topicName}},"previewResource"),Ct=i(async(t,e)=>{if(e.result)throw new S.ReplaceResourceError(l,t.entryId,e.entryId);return ye(t)},"replaceResource"),ye=i(t=>{let{parameters:e}=t;return S.OperationLogger.logExecution(l,e.topicName,"creation",async r=>{if(e.import){let[n,c]=await Promise.all([(0,O.getRegion)(),(0,O.getAccountId)()]);return{topicArn:R(e.topicName,n,c)}}let{topicArn:o}=await ae(r,e);return{topicArn:o}})},"createResource"),Pt=i((t,e)=>{let{result:r,parameters:o}=t,{topicName:n}=o;if(!r)throw new S.CorruptedResourceError(l,n);return o.import?Promise.resolve(r):S.OperationLogger.logExecution(l,n,"updates",async c=>(await Lt(c,r.topicArn,o,e.parameters),r))},"updateResource"),ht=i(async t=>{let{result:e,parameters:r}=t;!e||r.import||await S.OperationLogger.logExecution(l,r.topicName,"deletion",async o=>{await me(o,e.topicArn)})},"deleteResource"),Lt=i(async(t,e,r,o)=>{await(0,S.applyTagUpdates)(r.tags,o.tags,n=>ue(t,e,n),n=>fe(t,e,n))},"checkTagUpdates");var de=i(()=>{(0,ge.tryRegisterProvider)(y,le())},"registerTopicProvider");var Re=require("@ez4/aws-common");var h=require("@ez4/aws-common"),xe=require("@ez4/utils");var x=require("@ez4/aws-common");var A=require("@aws-sdk/client-sns");var Te=i(async(t,e)=>{t.update("Creating topic subscription");let{topicArn:r,protocol:o,endpoint:n}=e;return{subscriptionArn:(await d().send(new A.SubscribeCommand({TopicArn:r,Protocol:o,Endpoint:n,ReturnSubscriptionArn:!0,Attributes:{...o==="sqs"&&{RawMessageDelivery:"true"}}}))).SubscriptionArn}},"createSubscription"),be=i(async(t,e)=>{t.update("Deleting topic subscription");try{return await d().send(new A.UnsubscribeCommand({SubscriptionArn:e})),!0}catch(r){if(!(r instanceof A.NotFoundException))throw r;return!1}},"deleteSubscription");var ve=i((t,e)=>{if(!(0,x.isArn)(e))throw new x.InvalidParameterError(t,`endpoint ${e} is not supported.`);let{service:r}=(0,x.parseArn)(e);switch(r){case"lambda":case"sqs":return r}throw new x.InvalidParameterError(t,`protocol ${r} is not supported.`)},"getSubscriptionProtocol");var u="AWS:SNS/Subscription",T="aws:sns.subscription";var Ee=i(()=>({equals:Nt,create:we,replace:Ft,preview:It,update:zt,delete:Ot}),"getSubscriptionHandler"),Nt=i((t,e)=>!!t.result&&t.result.subscriptionArn===e.result?.subscriptionArn,"equalsResource"),It=i((t,e)=>{let r={...t.parameters,dependencies:t.dependencies},o={...e.parameters,dependencies:e.dependencies},n=(0,xe.deepCompare)(r,o,{exclude:{getTopicArn:!0,getEndpoint:!0}});if(n.counts)return{...n,name:r.fromService}},"previewResource"),Ft=i(async(t,e,r)=>{if(e.result)throw new h.ReplaceResourceError(u,t.entryId,e.entryId);return we(t,r)},"replaceResource"),we=i((t,e)=>{let{parameters:r}=t;return h.OperationLogger.logExecution(u,r.fromService,"creation",async o=>{let[n,c]=await Promise.all([r.getTopicArn(e),r.getEndpoint(e)]),{subscriptionArn:p}=await Te(o,{protocol:ve(u,c),topicArn:n,endpoint:c});return{subscriptionArn:p,topicArn:n,endpoint:c}})},"createResource"),zt=i(async()=>{},"updateResource"),Ot=i(async t=>{let{result:e,parameters:r}=t;e&&await h.OperationLogger.logExecution(u,r.fromService,"deletion",async o=>{await be(o,e.subscriptionArn)})},"deleteResource");var Ae=i(()=>{(0,Re.tryRegisterProvider)(T,Ee())},"registerSubscriptionProvider");var B=require("@ez4/topic/library"),_e=require("@ez4/project/library");var Pe=require("@ez4/stateful"),he=require("@ez4/utils");var Ce=require("@ez4/aws-common"),M=require("@ez4/utils");var D=class extends Error{static{i(this,"TopicNotFoundError")}constructor(e){super(`Topic service ${e} wasn't found.`)}};var k=i((t,e=!0)=>(0,M.hashData)(y,e?(0,M.toKebabCase)(t):t),"createTopicStateId"),j=i(t=>t.type===y,"isTopicState"),W=i((t,e,r)=>{let o=t.getServiceState(e,r);if(!j(o))throw new D(e);return o},"getTopicState"),X=i((t,e,r)=>{let o=r.getDependencies(y).at(0)?.result;if(!o?.topicArn)throw new Ce.IncompleteResourceError(t,e,"topicArn");return o.topicArn},"getTopicArn");var L=i((t,e)=>{let r=(0,he.toKebabCase)(e.topicName),o=e.fifoMode?`${r}.fifo`:r,n=k(o,!1);return(0,Pe.attachEntry)(t,{type:y,entryId:n,dependencies:[],parameters:{...e,topicName:o}})},"createTopic"),Dt=i((t,e)=>{let r=k(e),o=t[r];return o&&j(o)?o:null},"getTopic");var I=require("@ez4/project/library"),G=require("@ez4/aws-function"),F=require("@ez4/topic/library"),Q=require("@ez4/aws-common"),te=require("@ez4/aws-identity"),Ge=require("@ez4/aws-logs"),re=require("@ez4/aws-queue");var De=require("@ez4/aws-function"),Me=require("@ez4/utils"),ke=require("@ez4/project");var Le=require("node:path"),Ne=require("@ez4/aws-function"),Ie=require("@ez4/project/library"),Fe=require("@ez4/aws-common"),ze=require("@ez4/utils");var Oe=i(async(t,e)=>{let{handler:r,listener:o,functionName:n,eventSchema:c,context:p,references:s,debug:m}=t,a=(0,Ie.getDefinitionsObject)(e);return(0,Fe.getFunctionBundle)(Ne.MappingServiceName,{context:p&&s?(0,ze.pickObject)(p,s):p,templateFile:(0,Le.join)(__dirname,"../lib/event.ts"),resourceName:n,filePrefix:"sns",define:{...a,__EZ4_SCHEMA:c?JSON.stringify(c):"undefined"},handler:r,listener:o,debug:m})},"bundleSubscriptionFunction");var Y=i((t,e,r,o)=>{let{handler:n,variables:c,debug:p,architecture:s,eventSchema:m}=o;return(0,De.createFunction)(t,e,r,{handlerName:"snsEntryPoint",sourceFile:n.sourceFile,functionName:o.functionName,description:o.description,logLevel:p?ke.LogLevel.Debug:o.logLevel,architecture:o.architecture,runtime:o.runtime,release:o.release,timeout:o.timeout,memory:o.memory,files:o.files,tags:o.tags,vpc:o.vpc,getFunctionVariables:i(()=>c.reduce((a,v)=>({...a,...v}),{}),"getFunctionVariables"),getFunctionBundle:i(a=>Oe(o,[...a.getDependencies(),...a.getConnections()]),"getFunctionBundle"),getFunctionFiles:i(()=>[n.sourceFile,n.dependencies],"getFunctionFiles"),getFunctionHash:i(()=>(0,Me.hashObject)({architecture:s,eventSchema:m,debug:p}),"getFunctionHash")})},"createSubscriptionFunction");var g=require("@ez4/aws-function"),P=require("@ez4/aws-queue"),C=require("@ez4/aws-identity"),je=require("@ez4/stateful"),qe=require("@ez4/utils");var q=i((t,e,r,o)=>{let n=e.parameters.topicName,c=[e.entryId,r.entryId];if((0,g.isFunctionState)(r)){let s=(0,g.getPermission)(t,e,r)??(0,g.createPermission)(t,e,r,{fromService:o.fromService,getPermission:i(async()=>{let[m,a]=await Promise.all([(0,C.getRegion)(),(0,C.getAccountId)()]);return{sourceArn:R(n,m,a),principal:"sns.amazonaws.com"}},"getPermission")});c.push(s.entryId)}if((0,P.isQueueState)(r)){let s=(0,P.attachQueuePolicy)(t,r,e,{fromService:o.fromService,toService:n,policyGetters:[async()=>{let[m,a]=await Promise.all([(0,C.getRegion)(),(0,C.getAccountId)()]);return{principal:"sns.amazonaws.com",sourceArn:R(n,m,a)}}]});c.push(s.entryId)}let p=(0,qe.hashData)(T,e.entryId,r.entryId);return(0,je.attachEntry)(t,{type:T,entryId:p,dependencies:c,parameters:{...o,getTopicArn:i(s=>X(l,p,s),"getTopicArn"),getEndpoint:i(s=>(0,g.isFunctionState)(r)?(0,g.getFunctionArn)(u,p,s):(0,P.getQueueArn)(u,p,s),"getEndpoint")}})},"createSubscription");var $e=require("@ez4/project/library"),$=require("@ez4/utils");var ee=i((t,e)=>`${(0,$.toKebabCase)(t.name)}-${(0,$.toKebabCase)(e)}`,"getInternalName"),Qe=i((t,e,r)=>`${(0,$e.getServiceName)(t,r)}-${(0,$.toKebabCase)(e)}`,"getFunctionName");var N=class extends Error{static{i(this,"RoleMissingError")}constructor(){super("Execution role for SNS is missing.")}};var E=require("@ez4/aws-function"),b;(p=>(p.LogLevel=E.FunctionDefaults.LogLevel,p.LogRetention=E.FunctionDefaults.LogRetention,p.Architecture=E.FunctionDefaults.Architecture,p.Runtime=E.FunctionDefaults.Runtime,p.Timeout=E.FunctionDefaults.Timeout,p.Memory=E.FunctionDefaults.Memory))(b||={});var H=i((t,e,r,o,n)=>{if(!n.role||!(0,te.isRoleState)(n.role))throw new N;for(let c of e.subscriptions)switch(c.type){default:throw new Q.InvalidParameterError(u,"subscription not supported.");case F.TopicSubscriptionType.Lambda:{if(e.fifoMode)throw new Q.InvalidParameterError(u,"lambda subscription not supported for FIFO topics.");let{handler:p,listener:s}=c,m=ee(e,p.name),a=(0,G.tryGetFunctionState)(n,m,o);if(!a){let{defaults:v,release:pt,tags:ie}=o,ne=Qe(e,p.name,o),ct=n.getDependencyFiles(p.file),{runtime:st=v?.runtime??b.Runtime,architecture:at=v?.architecture??b.Architecture,logRetention:mt=v?.logRetention??b.LogRetention,logLevel:ut=v?.logLevel??b.LogLevel,memory:ft=v?.memory??b.Memory,timeout:St=b.Timeout,debug:lt=o.debug,files:yt,vpc:gt}=c,dt=(0,Ge.createLogGroup)(t,{groupName:ne,retention:mt,tags:ie});a=Y(t,n.role,dt,{functionName:ne,eventSchema:e.schema,description:p.summary??p.description,variables:[o.variables,e.variables,c.variables],references:c.handler.references,context:e.context,handler:{sourceFile:p.file,functionName:p.name,module:p.module,dependencies:ct},listener:s&&{functionName:s.name,sourceFile:s.file,module:s.module},architecture:at,logLevel:ut,runtime:st,release:pt,timeout:St,memory:ft,files:yt,debug:lt,tags:ie,vpc:gt}),n.setServiceState(m,o,a)}q(t,r,a,{fromService:a.parameters.functionName});break}case F.TopicSubscriptionType.Queue:{let p=(0,re.getQueueState)(n,c.service,o);q(t,r,p,{fromService:p.parameters.queueName});break}}},"prepareSubscriptions"),_=i((t,e,r,o)=>{if(!o.role||!(0,te.isRoleState)(o.role))throw new N;let n=(0,I.isLinkedContextVpcRequired)(e.context);for(let c of e.subscriptions)switch(c.type){default:throw new Q.InvalidParameterError(u,"subscription not supported.");case F.TopicSubscriptionType.Lambda:{let p=ee(e,c.handler.name),s=(0,G.getFunctionState)(o,p,r);(0,I.linkServiceContext)(t,s.entryId,e.context),s.parameters.vpc||(s.parameters.vpc=n);break}case F.TopicSubscriptionType.Queue:{let p=(0,re.getQueueState)(o,c.service,r);(0,I.linkServiceContext)(t,p.entryId,e.context);break}}},"connectSubscriptions");var He=require("@ez4/project/library");var U=i((t,e,r)=>{let n=W(t,e.name,r).entryId,c=(0,He.getDefinitionName)(n,"topicArn"),p=JSON.stringify(e.fifoMode??null),s=JSON.stringify(e.schema);return{module:"Client",from:"@ez4/aws-topic/client",constructor:`@{EZ4_MODULE_IMPORT}.make(${c}, ${s}, ${p})`,dependencyIds:[n],connectionIds:[n]}},"prepareLinkedClient");var Ue=i(t=>{let{service:e,options:r,context:o}=t;return(0,B.isTopicService)(e)?U(o,e,r):null},"prepareLinkedServices"),Be=i(t=>{let{state:e,service:r,options:o,context:n}=t;if(!(0,B.isTopicService)(r))return!1;let{fifoMode:c}=r,p=L(e,{topicName:(0,_e.getServiceName)(r,o),fifoMode:!!c,tags:o.tags});return n.setServiceState(r,o,p),H(e,r,p,o,n),!0},"prepareServices"),Ke=i(t=>{let{state:e,service:r,options:o,context:n}=t;(0,B.isTopicService)(r)&&_(e,r,o,n)},"connectServices");var oe=require("@ez4/project/library"),Ve=require("@ez4/project/library"),K=require("@ez4/topic/library");var Ze=i(t=>{let{service:e,options:r,context:o}=t;if(!(0,K.isTopicImport)(e))return null;let{project:n}=e,{imports:c}=r;if(!c||!c[n])throw new oe.MissingImportedProjectError(n);return U(o,e,r)},"prepareLinkedImports"),Je=i(t=>{let{state:e,service:r,options:o,context:n}=t;if(!(0,K.isTopicImport)(r))return!1;let{reference:c,project:p}=r,{imports:s}=o;if(!s||!s[p])throw new oe.MissingImportedProjectError(p);let m=L(e,{topicName:(0,Ve.getServiceName)(c,s[p]),fifoMode:!!r.fifoMode,import:!0});return n.setServiceState(r,o,m),H(e,r,m,o,n),!0},"prepareImports"),We=i(t=>{let{state:e,service:r,options:o,context:n}=t;(0,K.isTopicImport)(r)&&_(e,r,o,n)},"connectImports");var V=require("@ez4/topic/library"),Z=require("@ez4/aws-identity"),Xe=require("@ez4/project/library");var Ye=i(async t=>{let{state:e,serviceType:r,options:o}=t;if(r!==V.ServiceType&&r!==V.ImportType)return null;let n=Object.values({options:o,...o.imports}).map(s=>(0,Xe.getServiceName)("",s)),[c]=n,p=`${c}-topic-policy`;return(0,Z.tryGetPolicy)(e,p)??(0,Z.createPolicy)(e,{tags:o.tags,policyDocument:await pe(n),policyName:p})},"prepareExecutionPolicy");var Mt=i(()=>{(0,et.registerTriggers)(),(0,tt.registerTriggers)(),(0,rt.registerTriggers)(),(0,ot.registerTriggers)(),(0,it.registerTriggers)(),(0,nt.tryCreateTrigger)("@ez4/aws-topic",{"deploy:prepareExecutionPolicy":Ye,"deploy:prepareLinkedService":kt,"deploy:prepareResources":jt,"deploy:connectResources":qt}),de(),Ae()},"registerTriggers"),kt=i(t=>Ue(t)??Ze(t)??null,"prepareLinkedService"),jt=i(t=>Be(t)||Je(t),"prepareQueueResources"),qt=i(t=>{Ke(t),We(t)},"connectQueueResources");var $t=i(t=>t.type===T,"isSubscriptionState");0&&(module.exports={SubscriptionServiceName,SubscriptionServiceType,TopicServiceName,TopicServiceType,createSubscription,createSubscriptionFunction,createTopic,createTopicStateId,getTopic,getTopicArn,getTopicState,isSubscriptionState,isTopicState,registerTriggers});
|
|
1
|
+
var z=Object.defineProperty;var Tt=Object.getOwnPropertyDescriptor;var bt=Object.getOwnPropertyNames;var vt=Object.prototype.hasOwnProperty;var i=(t,e)=>z(t,"name",{value:e,configurable:!0});var xt=(t,e)=>{for(var r in e)z(t,r,{get:e[r],enumerable:!0})},Et=(t,e,r,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of bt(e))!vt.call(t,n)&&n!==r&&z(t,n,{get:()=>e[n],enumerable:!(o=Tt(e,n))||o.enumerable});return t};var Rt=t=>Et(z({},"__esModule",{value:!0}),t);var Qt={};xt(Qt,{SubscriptionServiceName:()=>u,SubscriptionServiceType:()=>T,TopicServiceName:()=>l,TopicServiceType:()=>y,createSubscription:()=>q,createSubscriptionFunction:()=>Y,createTopic:()=>L,createTopicStateId:()=>k,getTopic:()=>Dt,getTopicArn:()=>X,getTopicState:()=>W,isSubscriptionState:()=>$t,isTopicState:()=>j,registerTriggers:()=>Mt});module.exports=Rt(Qt);var et=require("@ez4/aws-common"),tt=require("@ez4/aws-identity"),rt=require("@ez4/aws-function"),ot=require("@ez4/aws-queue"),it=require("@ez4/topic/library"),nt=require("@ez4/project/library");var ge=require("@ez4/aws-common");var f=require("@ez4/aws-common"),O=require("@ez4/aws-identity"),fe=require("@ez4/utils");var R=require("@ez4/aws-identity");var w=i((t,e,r)=>`arn:aws:sns:${e}:${r}:${t}`,"buildTopicArn"),pe=i(async t=>{let[e,r]=await Promise.all([(0,R.getRegion)(),(0,R.getAccountId)()]);return(0,R.createPolicyDocument)([{permissions:["sns:Publish"],resourceIds:t.map(o=>w(`${o}-*`,e,r))}])},"getPolicyDocument");var S=require("@aws-sdk/client-sns"),J=require("@ez4/aws-common");var ce=require("@ez4/aws-common"),se=require("@aws-sdk/client-sns");var d=i(()=>new se.SNSClient((0,ce.getAwsClientOptions)()),"getSNSClient");var ae=i(async(t,e)=>{t.update("Creating topic");let{topicName:r,fifoMode:o}=e;return{topicArn:(await d().send(new S.CreateTopicCommand({Name:r,Attributes:{...o&&{ContentBasedDeduplication:"true",FifoThroughputScope:"MessageGroup",FifoTopic:"true"}},Tags:(0,J.getTagList)({...e.tags,ManagedBy:"EZ4"})}))).TopicArn}},"createTopic"),me=i(async(t,e)=>{t.update("Deleting topic");try{return await d().send(new S.DeleteTopicCommand({TopicArn:e})),!0}catch(r){if(!(r instanceof S.NotFoundException))throw r;return!1}},"deleteTopic"),ue=i(async(t,e,r)=>{t.update("Tag topic"),await d().send(new S.TagResourceCommand({ResourceArn:e,Tags:(0,J.getTagList)({...r,ManagedBy:"EZ4"})}))},"tagTopic"),Se=i(async(t,e,r)=>{t.update("Untag topic"),await d().send(new S.UntagResourceCommand({ResourceArn:e,TagKeys:r}))},"untagTopic");var l="AWS:SNS/Topic",y="aws:sns.topic";var le=i(()=>({equals:wt,create:ye,replace:Ct,preview:At,update:Pt,delete:ht}),"getTopicHandler"),wt=i((t,e)=>!!t.result&&t.result.topicArn===e.result?.topicArn,"equalsResource"),At=i((t,e)=>{let r={...t.parameters,dependencies:t.dependencies},o={...e.parameters,dependencies:e.dependencies},n=(0,fe.deepCompare)(r,o);if(n.counts)return{...n,name:r.topicName}},"previewResource"),Ct=i(async(t,e)=>{if(e.result)throw new f.ReplaceResourceError(l,t.entryId,e.entryId);return ye(t)},"replaceResource"),ye=i(t=>{let{parameters:e}=t;return f.OperationLogger.logExecution(l,e.topicName,"creation",async r=>{if(e.import){let[n,c]=await Promise.all([(0,O.getRegion)(),(0,O.getAccountId)()]);return{topicArn:w(e.topicName,n,c)}}let{topicArn:o}=await ae(r,e);return{topicArn:o}})},"createResource"),Pt=i(async(t,e)=>{let{result:r,parameters:o}=t,{topicName:n}=o;if(!o.import)return f.OperationLogger.logExecution(l,n,"updates",async c=>{if(!r)throw new f.CorruptedResourceError(l,n);await Lt(c,r.topicArn,o,e.parameters)})},"updateResource"),ht=i(async t=>{let{result:e,parameters:r}=t;if(e&&!r.import)return f.OperationLogger.logExecution(l,r.topicName,"deletion",async o=>{await me(o,e.topicArn)})},"deleteResource"),Lt=i(async(t,e,r,o)=>{await(0,f.applyTagUpdates)(r.tags,o.tags,n=>ue(t,e,n),n=>Se(t,e,n))},"checkTagUpdates");var de=i(()=>{(0,ge.tryRegisterProvider)(y,le())},"registerTopicProvider");var we=require("@ez4/aws-common");var h=require("@ez4/aws-common"),xe=require("@ez4/utils");var x=require("@ez4/aws-common");var A=require("@aws-sdk/client-sns");var Te=i(async(t,e)=>{t.update("Creating topic subscription");let{topicArn:r,protocol:o,endpoint:n}=e;return{subscriptionArn:(await d().send(new A.SubscribeCommand({TopicArn:r,Protocol:o,Endpoint:n,ReturnSubscriptionArn:!0,Attributes:{...o==="sqs"&&{RawMessageDelivery:"true"}}}))).SubscriptionArn}},"createSubscription"),be=i(async(t,e)=>{t.update("Deleting topic subscription");try{return await d().send(new A.UnsubscribeCommand({SubscriptionArn:e})),!0}catch(r){if(!(r instanceof A.NotFoundException))throw r;return!1}},"deleteSubscription");var ve=i((t,e)=>{if(!(0,x.isArn)(e))throw new x.InvalidParameterError(t,`endpoint ${e} is not supported.`);let{service:r}=(0,x.parseArn)(e);switch(r){case"lambda":case"sqs":return r}throw new x.InvalidParameterError(t,`protocol ${r} is not supported.`)},"getSubscriptionProtocol");var u="AWS:SNS/Subscription",T="aws:sns.subscription";var Ee=i(()=>({equals:It,create:Re,replace:Ft,preview:Nt,update:zt,delete:Ot}),"getSubscriptionHandler"),It=i((t,e)=>!!t.result&&t.result.subscriptionArn===e.result?.subscriptionArn,"equalsResource"),Nt=i((t,e)=>{let r={...t.parameters,dependencies:t.dependencies},o={...e.parameters,dependencies:e.dependencies},n=(0,xe.deepCompare)(r,o,{exclude:{getTopicArn:!0,getEndpoint:!0}});if(n.counts)return{...n,name:r.fromService}},"previewResource"),Ft=i(async(t,e,r)=>{if(e.result)throw new h.ReplaceResourceError(u,t.entryId,e.entryId);return Re(t,r)},"replaceResource"),Re=i((t,e)=>{let{parameters:r}=t;return h.OperationLogger.logExecution(u,r.fromService,"creation",async o=>{let[n,c]=await Promise.all([r.getTopicArn(e),r.getEndpoint(e)]),{subscriptionArn:p}=await Te(o,{protocol:ve(u,c),topicArn:n,endpoint:c});return{subscriptionArn:p,topicArn:n,endpoint:c}})},"createResource"),zt=i(async()=>{},"updateResource"),Ot=i(async t=>{let{result:e,parameters:r}=t;if(e)return h.OperationLogger.logExecution(u,r.fromService,"deletion",async o=>{await be(o,e.subscriptionArn)})},"deleteResource");var Ae=i(()=>{(0,we.tryRegisterProvider)(T,Ee())},"registerSubscriptionProvider");var B=require("@ez4/topic/library"),_e=require("@ez4/project/library");var Pe=require("@ez4/state"),he=require("@ez4/utils");var Ce=require("@ez4/aws-common"),M=require("@ez4/utils");var D=class extends Error{static{i(this,"TopicNotFoundError")}constructor(e){super(`Topic service ${e} wasn't found.`)}};var k=i((t,e=!0)=>(0,M.hashData)(y,e?(0,M.toKebabCase)(t):t),"createTopicStateId"),j=i(t=>t.type===y,"isTopicState"),W=i((t,e,r)=>{let o=t.getServiceState(e,r);if(!j(o))throw new D(e);return o},"getTopicState"),X=i((t,e,r)=>{let o=r.getDependencies(y).at(0)?.result;if(!o?.topicArn)throw new Ce.IncompleteResourceError(t,e,"topicArn");return o.topicArn},"getTopicArn");var L=i((t,e)=>{let r=(0,he.toKebabCase)(e.topicName),o=e.fifoMode?`${r}.fifo`:r,n=k(o,!1);return(0,Pe.attachEntry)(t,{type:y,entryId:n,dependencies:[],parameters:{...e,topicName:o}})},"createTopic"),Dt=i((t,e)=>{let r=k(e),o=t[r];return o&&j(o)?o:null},"getTopic");var N=require("@ez4/project/library"),G=require("@ez4/aws-function"),F=require("@ez4/topic/library"),Q=require("@ez4/aws-common"),te=require("@ez4/aws-identity"),Ge=require("@ez4/aws-logs"),re=require("@ez4/aws-queue");var De=require("@ez4/aws-function"),Me=require("@ez4/utils"),ke=require("@ez4/project");var Le=require("node:path"),Ie=require("@ez4/aws-function"),Ne=require("@ez4/project/library"),Fe=require("@ez4/aws-common"),ze=require("@ez4/utils");var Oe=i(async(t,e)=>{let{handler:r,listener:o,functionName:n,eventSchema:c,context:p,references:s,debug:m}=t,a=(0,Ne.getDefinitionsObject)(e);return(0,Fe.getFunctionBundle)(Ie.MappingServiceName,{context:p&&s?(0,ze.pickObject)(p,s):p,templateFile:(0,Le.join)(__dirname,"../lib/event.ts"),resourceName:n,filePrefix:"sns",define:{...a,__EZ4_SCHEMA:c?JSON.stringify(c):"undefined"},handler:r,listener:o,debug:m})},"bundleSubscriptionFunction");var Y=i((t,e,r,o)=>{let{handler:n,variables:c,debug:p,architecture:s,eventSchema:m}=o;return(0,De.createFunction)(t,e,r,{handlerName:"snsEntryPoint",sourceFile:n.sourceFile,dependencies:o.dependencies,functionName:o.functionName,description:o.description,logLevel:p?ke.LogLevel.Debug:o.logLevel,architecture:o.architecture,runtime:o.runtime,release:o.release,timeout:o.timeout,memory:o.memory,files:o.files,tags:o.tags,vpc:o.vpc,getFunctionVariables:i(()=>c.reduce((a,v)=>({...a,...v}),{}),"getFunctionVariables"),getFunctionBundle:i(a=>Oe(o,[...a.getDependencies(),...a.getConnections()]),"getFunctionBundle"),getFunctionFiles:i(()=>[n.sourceFile,n.dependencies],"getFunctionFiles"),getFunctionHash:i(()=>(0,Me.hashObject)({architecture:s,eventSchema:m,debug:p}),"getFunctionHash")})},"createSubscriptionFunction");var g=require("@ez4/aws-function"),P=require("@ez4/aws-queue"),C=require("@ez4/aws-identity"),je=require("@ez4/state"),qe=require("@ez4/utils");var q=i((t,e,r,o)=>{let n=e.parameters.topicName,c=[e.entryId,r.entryId];if((0,g.isFunctionState)(r)){let s=(0,g.getPermission)(t,e,r)??(0,g.createPermission)(t,e,r,{fromService:o.fromService,getPermission:i(async()=>{let[m,a]=await Promise.all([(0,C.getRegion)(),(0,C.getAccountId)()]);return{sourceArn:w(n,m,a),principal:"sns.amazonaws.com"}},"getPermission")});c.push(s.entryId)}if((0,P.isQueueState)(r)){let s=(0,P.attachQueuePolicy)(t,r,e,{fromService:o.fromService,toService:n,policyGetters:[async()=>{let[m,a]=await Promise.all([(0,C.getRegion)(),(0,C.getAccountId)()]);return{principal:"sns.amazonaws.com",sourceArn:w(n,m,a)}}]});c.push(s.entryId)}let p=(0,qe.hashData)(T,e.entryId,r.entryId);return(0,je.attachEntry)(t,{type:T,entryId:p,dependencies:c,parameters:{...o,getTopicArn:i(s=>X(l,p,s),"getTopicArn"),getEndpoint:i(s=>(0,g.isFunctionState)(r)?(0,g.getFunctionAliasArn)(u,p,s):(0,P.getQueueArn)(u,p,s),"getEndpoint")}})},"createSubscription");var $e=require("@ez4/project/library"),$=require("@ez4/utils");var ee=i((t,e)=>`${(0,$.toKebabCase)(t.name)}-${(0,$.toKebabCase)(e)}`,"getInternalName"),Qe=i((t,e,r)=>`${(0,$e.getServiceName)(t,r)}-${(0,$.toKebabCase)(e)}`,"getFunctionName");var I=class extends Error{static{i(this,"RoleMissingError")}constructor(){super("Execution role for SNS is missing.")}};var E=require("@ez4/aws-function"),b;(p=>(p.LogLevel=E.FunctionDefaults.LogLevel,p.LogRetention=E.FunctionDefaults.LogRetention,p.Architecture=E.FunctionDefaults.Architecture,p.Runtime=E.FunctionDefaults.Runtime,p.Timeout=E.FunctionDefaults.Timeout,p.Memory=E.FunctionDefaults.Memory))(b||={});var H=i((t,e,r,o,n)=>{if(!n.role||!(0,te.isRoleState)(n.role))throw new I;for(let c of e.subscriptions)switch(c.type){default:throw new Q.InvalidParameterError(u,"subscription not supported.");case F.TopicSubscriptionType.Lambda:{if(e.fifoMode)throw new Q.InvalidParameterError(u,"lambda subscription not supported for FIFO topics.");let{handler:p,listener:s}=c,m=ee(e,p.name),a=(0,G.tryGetFunctionState)(n,m,o);if(!a){let{defaults:v,release:pt,tags:ie}=o,ne=Qe(e,p.name,o),ct=n.getDependencyFiles(p.file),{runtime:st=v?.runtime??b.Runtime,architecture:at=v?.architecture??b.Architecture,logRetention:mt=v?.logRetention??b.LogRetention,logLevel:ut=v?.logLevel??b.LogLevel,memory:St=v?.memory??b.Memory,timeout:ft=b.Timeout,debug:lt=o.debug,files:yt,vpc:gt}=c,dt=(0,Ge.createLogGroup)(t,{dependencies:[r.entryId],groupName:ne,retention:mt,tags:ie});a=Y(t,n.role,dt,{functionName:ne,eventSchema:e.schema,description:p.summary??p.description,variables:[o.variables,e.variables,c.variables],references:c.handler.references,dependencies:[r.entryId],context:e.context,handler:{sourceFile:p.file,functionName:p.name,module:p.module,dependencies:ct},listener:s&&{functionName:s.name,sourceFile:s.file,module:s.module},architecture:at,logLevel:ut,runtime:st,release:pt,timeout:ft,memory:St,files:yt,debug:lt,tags:ie,vpc:gt}),n.setServiceState(m,o,a)}q(t,r,a,{fromService:a.parameters.functionName});break}case F.TopicSubscriptionType.Queue:{let p=(0,re.getQueueState)(n,c.service,o);q(t,r,p,{fromService:p.parameters.queueName});break}}},"prepareSubscriptions"),_=i((t,e,r,o)=>{if(!o.role||!(0,te.isRoleState)(o.role))throw new I;let n=(0,N.isLinkedContextVpcRequired)(e.context);for(let c of e.subscriptions)switch(c.type){default:throw new Q.InvalidParameterError(u,"subscription not supported.");case F.TopicSubscriptionType.Lambda:{let p=ee(e,c.handler.name),s=(0,G.getFunctionState)(o,p,r);(0,N.linkServiceContext)(t,s.entryId,e.context),s.parameters.vpc||(s.parameters.vpc=n);break}case F.TopicSubscriptionType.Queue:{let p=(0,re.getQueueState)(o,c.service,r);(0,N.linkServiceContext)(t,p.entryId,e.context);break}}},"connectSubscriptions");var He=require("@ez4/project/library");var U=i((t,e,r)=>{let n=W(t,e.name,r).entryId,c=(0,He.getDefinitionName)(n,"topicArn"),p=JSON.stringify(e.fifoMode??null),s=JSON.stringify(e.schema);return{module:"Client",from:"@ez4/aws-topic/client",constructor:`@{EZ4_MODULE_IMPORT}.make(${c}, ${s}, ${p})`,dependencyIds:[n],connectionIds:[n]}},"prepareLinkedClient");var Ue=i(t=>{let{service:e,options:r,context:o}=t;return(0,B.isTopicService)(e)?U(o,e,r):null},"prepareLinkedServices"),Be=i(t=>{let{state:e,service:r,options:o,context:n}=t;if(!(0,B.isTopicService)(r))return!1;let{fifoMode:c}=r,p=L(e,{topicName:(0,_e.getServiceName)(r,o),fifoMode:!!c,tags:{...r.tags,...o.tags}});return n.setServiceState(r,o,p),H(e,r,p,o,n),!0},"prepareServices"),Ke=i(t=>{let{state:e,service:r,options:o,context:n}=t;(0,B.isTopicService)(r)&&_(e,r,o,n)},"connectServices");var oe=require("@ez4/project/library"),Ve=require("@ez4/project/library"),K=require("@ez4/topic/library");var Ze=i(t=>{let{service:e,options:r,context:o}=t;if(!(0,K.isTopicImport)(e))return null;let{project:n}=e,{imports:c}=r;if(!c||!c[n])throw new oe.MissingImportedProjectError(n);return U(o,e,r)},"prepareLinkedImports"),Je=i(t=>{let{state:e,service:r,options:o,context:n}=t;if(!(0,K.isTopicImport)(r))return!1;let{reference:c,project:p}=r,{imports:s}=o;if(!s||!s[p])throw new oe.MissingImportedProjectError(p);let m=L(e,{topicName:(0,Ve.getServiceName)(c,s[p]),fifoMode:!!r.fifoMode,import:!0});return n.setServiceState(r,o,m),H(e,r,m,o,n),!0},"prepareImports"),We=i(t=>{let{state:e,service:r,options:o,context:n}=t;(0,K.isTopicImport)(r)&&_(e,r,o,n)},"connectImports");var V=require("@ez4/topic/library"),Z=require("@ez4/aws-identity"),Xe=require("@ez4/project/library");var Ye=i(async t=>{let{state:e,serviceType:r,options:o}=t;if(r!==V.ServiceType&&r!==V.ImportType)return null;let n=Object.values({options:o,...o.imports}).map(s=>(0,Xe.getServiceName)("",s)),[c]=n,p=`${c}-topic-policy`;return(0,Z.tryGetPolicy)(e,p)??(0,Z.createPolicy)(e,{tags:o.tags,policyDocument:await pe(n),policyName:p})},"prepareExecutionPolicy");var Mt=i(()=>{(0,et.registerTriggers)(),(0,tt.registerTriggers)(),(0,rt.registerTriggers)(),(0,ot.registerTriggers)(),(0,it.registerTriggers)(),(0,nt.tryCreateTrigger)("@ez4/aws-topic",{"deploy:prepareExecutionPolicy":Ye,"deploy:prepareLinkedService":kt,"deploy:prepareResources":jt,"deploy:connectResources":qt}),de(),Ae()},"registerTriggers"),kt=i(t=>Ue(t)??Ze(t)??null,"prepareLinkedService"),jt=i(t=>Be(t)||Je(t),"prepareQueueResources"),qt=i(t=>{Ke(t),We(t)},"connectQueueResources");var $t=i(t=>t.type===T,"isSubscriptionState");0&&(module.exports={SubscriptionServiceName,SubscriptionServiceType,TopicServiceName,TopicServiceType,createSubscription,createSubscriptionFunction,createTopic,createTopicStateId,getTopic,getTopicArn,getTopicState,isSubscriptionState,isTopicState,registerTriggers});
|
|
2
2
|
//# sourceMappingURL=main.cjs.map
|
package/dist/main.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var Fe=Object.defineProperty;var i=(t,e)=>Fe(t,"name",{value:e,configurable:!0});import{registerTriggers as Zt}from"@ez4/aws-common";import{registerTriggers as Jt}from"@ez4/aws-identity";import{registerTriggers as Wt}from"@ez4/aws-function";import{registerTriggers as Xt}from"@ez4/aws-queue";import{registerTriggers as Yt}from"@ez4/topic/library";import{tryCreateTrigger as er}from"@ez4/project/library";import{tryRegisterProvider as tt}from"@ez4/aws-common";import{applyTagUpdates as He,CorruptedResourceError as _e,OperationLogger as P,ReplaceResourceError as Ue}from"@ez4/aws-common";import{getAccountId as Be,getRegion as Ke}from"@ez4/aws-identity";import{deepCompare as Ve}from"@ez4/utils";import{getAccountId as ze,getRegion as Oe,createPolicyDocument as De}from"@ez4/aws-identity";var T=i((t,e,r)=>`arn:aws:sns:${e}:${r}:${t}`,"buildTopicArn"),j=i(async t=>{let[e,r]=await Promise.all([Oe(),ze()]);return De([{permissions:["sns:Publish"],resourceIds:t.map(o=>T(`${o}-*`,e,r))}])},"getPolicyDocument");import{CreateTopicCommand as je,DeleteTopicCommand as qe,TagResourceCommand as $e,UntagResourceCommand as Qe,NotFoundException as Ge}from"@aws-sdk/client-sns";import{getTagList as q}from"@ez4/aws-common";import{getAwsClientOptions as Me}from"@ez4/aws-common";import{SNSClient as ke}from"@aws-sdk/client-sns";var f=i(()=>new ke(Me()),"getSNSClient");var $=i(async(t,e)=>{t.update("Creating topic");let{topicName:r,fifoMode:o}=e;return{topicArn:(await f().send(new je({Name:r,Attributes:{...o&&{ContentBasedDeduplication:"true",FifoThroughputScope:"MessageGroup",FifoTopic:"true"}},Tags:q({...e.tags,ManagedBy:"EZ4"})}))).TopicArn}},"createTopic"),Q=i(async(t,e)=>{t.update("Deleting topic");try{return await f().send(new qe({TopicArn:e})),!0}catch(r){if(!(r instanceof Ge))throw r;return!1}},"deleteTopic"),G=i(async(t,e,r)=>{t.update("Tag topic"),await f().send(new $e({ResourceArn:e,Tags:q({...r,ManagedBy:"EZ4"})}))},"tagTopic"),H=i(async(t,e,r)=>{t.update("Untag topic"),await f().send(new Qe({ResourceArn:e,TagKeys:r}))},"untagTopic");var S="AWS:SNS/Topic",l="aws:sns.topic";var _=i(()=>({equals:Ze,create:U,replace:We,preview:Je,update:Xe,delete:Ye}),"getTopicHandler"),Ze=i((t,e)=>!!t.result&&t.result.topicArn===e.result?.topicArn,"equalsResource"),Je=i((t,e)=>{let r={...t.parameters,dependencies:t.dependencies},o={...e.parameters,dependencies:e.dependencies},n=Ve(r,o);if(n.counts)return{...n,name:r.topicName}},"previewResource"),We=i(async(t,e)=>{if(e.result)throw new Ue(S,t.entryId,e.entryId);return U(t)},"replaceResource"),U=i(t=>{let{parameters:e}=t;return P.logExecution(S,e.topicName,"creation",async r=>{if(e.import){let[n,c]=await Promise.all([Ke(),Be()]);return{topicArn:T(e.topicName,n,c)}}let{topicArn:o}=await $(r,e);return{topicArn:o}})},"createResource"),Xe=i((t,e)=>{let{result:r,parameters:o}=t,{topicName:n}=o;if(!r)throw new _e(S,n);return o.import?Promise.resolve(r):P.logExecution(S,n,"updates",async c=>(await et(c,r.topicArn,o,e.parameters),r))},"updateResource"),Ye=i(async t=>{let{result:e,parameters:r}=t;!e||r.import||await P.logExecution(S,r.topicName,"deletion",async o=>{await Q(o,e.topicArn)})},"deleteResource"),et=i(async(t,e,r,o)=>{await He(r.tags,o.tags,n=>G(t,e,n),n=>H(t,e,n))},"checkTagUpdates");var B=i(()=>{tt(l,_())},"registerTopicProvider");import{tryRegisterProvider as lt}from"@ez4/aws-common";import{OperationLogger as W,ReplaceResourceError as ct}from"@ez4/aws-common";import{deepCompare as st}from"@ez4/utils";import{InvalidParameterError as Z,isArn as nt,parseArn as pt}from"@ez4/aws-common";import{NotFoundException as rt,SubscribeCommand as ot,UnsubscribeCommand as it}from"@aws-sdk/client-sns";var K=i(async(t,e)=>{t.update("Creating topic subscription");let{topicArn:r,protocol:o,endpoint:n}=e;return{subscriptionArn:(await f().send(new ot({TopicArn:r,Protocol:o,Endpoint:n,ReturnSubscriptionArn:!0,Attributes:{...o==="sqs"&&{RawMessageDelivery:"true"}}}))).SubscriptionArn}},"createSubscription"),V=i(async(t,e)=>{t.update("Deleting topic subscription");try{return await f().send(new it({SubscriptionArn:e})),!0}catch(r){if(!(r instanceof rt))throw r;return!1}},"deleteSubscription");var J=i((t,e)=>{if(!nt(e))throw new Z(t,`endpoint ${e} is not supported.`);let{service:r}=pt(e);switch(r){case"lambda":case"sqs":return r}throw new Z(t,`protocol ${r} is not supported.`)},"getSubscriptionProtocol");var u="AWS:SNS/Subscription",d="aws:sns.subscription";var X=i(()=>({equals:at,create:Y,replace:ut,preview:mt,update:ft,delete:St}),"getSubscriptionHandler"),at=i((t,e)=>!!t.result&&t.result.subscriptionArn===e.result?.subscriptionArn,"equalsResource"),mt=i((t,e)=>{let r={...t.parameters,dependencies:t.dependencies},o={...e.parameters,dependencies:e.dependencies},n=st(r,o,{exclude:{getTopicArn:!0,getEndpoint:!0}});if(n.counts)return{...n,name:r.fromService}},"previewResource"),ut=i(async(t,e,r)=>{if(e.result)throw new ct(u,t.entryId,e.entryId);return Y(t,r)},"replaceResource"),Y=i((t,e)=>{let{parameters:r}=t;return W.logExecution(u,r.fromService,"creation",async o=>{let[n,c]=await Promise.all([r.getTopicArn(e),r.getEndpoint(e)]),{subscriptionArn:p}=await K(o,{protocol:J(u,c),topicArn:n,endpoint:c});return{subscriptionArn:p,topicArn:n,endpoint:c}})},"createResource"),ft=i(async()=>{},"updateResource"),St=i(async t=>{let{result:e,parameters:r}=t;e&&await W.logExecution(u,r.fromService,"deletion",async o=>{await V(o,e.subscriptionArn)})},"deleteResource");var ee=i(()=>{lt(d,X())},"registerSubscriptionProvider");import{isTopicService as O}from"@ez4/topic/library";import{getServiceName as Gt}from"@ez4/project/library";import{attachEntry as Tt}from"@ez4/stateful";import{toKebabCase as bt}from"@ez4/utils";import{IncompleteResourceError as yt}from"@ez4/aws-common";import{hashData as gt,toKebabCase as dt}from"@ez4/utils";var x=class extends Error{static{i(this,"TopicNotFoundError")}constructor(e){super(`Topic service ${e} wasn't found.`)}};var h=i((t,e=!0)=>gt(l,e?dt(t):t),"createTopicStateId"),L=i(t=>t.type===l,"isTopicState"),te=i((t,e,r)=>{let o=t.getServiceState(e,r);if(!L(o))throw new x(e);return o},"getTopicState"),re=i((t,e,r)=>{let o=r.getDependencies(l).at(0)?.result;if(!o?.topicArn)throw new yt(t,e,"topicArn");return o.topicArn},"getTopicArn");var E=i((t,e)=>{let r=bt(e.topicName),o=e.fifoMode?`${r}.fifo`:r,n=h(o,!1);return Tt(t,{type:l,entryId:n,dependencies:[],parameters:{...e,topicName:o}})},"createTopic"),ao=i((t,e)=>{let r=h(e),o=t[r];return o&&L(o)?o:null},"getTopic");import{isLinkedContextVpcRequired as kt,linkServiceContext as ae}from"@ez4/project/library";import{getFunctionState as jt,tryGetFunctionState as qt}from"@ez4/aws-function";import{TopicSubscriptionType as w}from"@ez4/topic/library";import{InvalidParameterError as z}from"@ez4/aws-common";import{isRoleState as me}from"@ez4/aws-identity";import{createLogGroup as $t}from"@ez4/aws-logs";import{getQueueState as ue}from"@ez4/aws-queue";import{createFunction as At}from"@ez4/aws-function";import{hashObject as Ct}from"@ez4/utils";import{LogLevel as Pt}from"@ez4/project";import{join as vt}from"node:path";import{MappingServiceName as xt}from"@ez4/aws-function";import{getDefinitionsObject as Et}from"@ez4/project/library";import{getFunctionBundle as wt}from"@ez4/aws-common";import{pickObject as Rt}from"@ez4/utils";var oe=i(async(t,e)=>{let{handler:r,listener:o,functionName:n,eventSchema:c,context:p,references:s,debug:m}=t,a=Et(e);return wt(xt,{context:p&&s?Rt(p,s):p,templateFile:vt(import.meta.dirname,"../lib/event.ts"),resourceName:n,filePrefix:"sns",define:{...a,__EZ4_SCHEMA:c?JSON.stringify(c):"undefined"},handler:r,listener:o,debug:m})},"bundleSubscriptionFunction");var ie=i((t,e,r,o)=>{let{handler:n,variables:c,debug:p,architecture:s,eventSchema:m}=o;return At(t,e,r,{handlerName:"snsEntryPoint",sourceFile:n.sourceFile,functionName:o.functionName,description:o.description,logLevel:p?Pt.Debug:o.logLevel,architecture:o.architecture,runtime:o.runtime,release:o.release,timeout:o.timeout,memory:o.memory,files:o.files,tags:o.tags,vpc:o.vpc,getFunctionVariables:i(()=>c.reduce((a,g)=>({...a,...g}),{}),"getFunctionVariables"),getFunctionBundle:i(a=>oe(o,[...a.getDependencies(),...a.getConnections()]),"getFunctionBundle"),getFunctionFiles:i(()=>[n.sourceFile,n.dependencies],"getFunctionFiles"),getFunctionHash:i(()=>Ct({architecture:s,eventSchema:m,debug:p}),"getFunctionHash")})},"createSubscriptionFunction");import{createPermission as ht,getFunctionArn as Lt,getPermission as Nt,isFunctionState as ne}from"@ez4/aws-function";import{attachQueuePolicy as It,getQueueArn as Ft,isQueueState as zt}from"@ez4/aws-queue";import{getAccountId as pe,getRegion as ce}from"@ez4/aws-identity";import{attachEntry as Ot}from"@ez4/stateful";import{hashData as Dt}from"@ez4/utils";var N=i((t,e,r,o)=>{let n=e.parameters.topicName,c=[e.entryId,r.entryId];if(ne(r)){let s=Nt(t,e,r)??ht(t,e,r,{fromService:o.fromService,getPermission:i(async()=>{let[m,a]=await Promise.all([ce(),pe()]);return{sourceArn:T(n,m,a),principal:"sns.amazonaws.com"}},"getPermission")});c.push(s.entryId)}if(zt(r)){let s=It(t,r,e,{fromService:o.fromService,toService:n,policyGetters:[async()=>{let[m,a]=await Promise.all([ce(),pe()]);return{principal:"sns.amazonaws.com",sourceArn:T(n,m,a)}}]});c.push(s.entryId)}let p=Dt(d,e.entryId,r.entryId);return Ot(t,{type:d,entryId:p,dependencies:c,parameters:{...o,getTopicArn:i(s=>re(S,p,s),"getTopicArn"),getEndpoint:i(s=>ne(r)?Lt(u,p,s):Ft(u,p,s),"getEndpoint")}})},"createSubscription");import{getServiceName as Mt}from"@ez4/project/library";import{toKebabCase as I}from"@ez4/utils";var F=i((t,e)=>`${I(t.name)}-${I(e)}`,"getInternalName"),se=i((t,e,r)=>`${Mt(t,r)}-${I(e)}`,"getFunctionName");var v=class extends Error{static{i(this,"RoleMissingError")}constructor(){super("Execution role for SNS is missing.")}};import{FunctionDefaults as b}from"@ez4/aws-function";var y;(p=>(p.LogLevel=b.LogLevel,p.LogRetention=b.LogRetention,p.Architecture=b.Architecture,p.Runtime=b.Runtime,p.Timeout=b.Timeout,p.Memory=b.Memory))(y||={});var R=i((t,e,r,o,n)=>{if(!n.role||!me(n.role))throw new v;for(let c of e.subscriptions)switch(c.type){default:throw new z(u,"subscription not supported.");case w.Lambda:{if(e.fifoMode)throw new z(u,"lambda subscription not supported for FIFO topics.");let{handler:p,listener:s}=c,m=F(e,p.name),a=qt(n,m,o);if(!a){let{defaults:g,release:ve,tags:M}=o,k=se(e,p.name,o),xe=n.getDependencyFiles(p.file),{runtime:Ee=g?.runtime??y.Runtime,architecture:we=g?.architecture??y.Architecture,logRetention:Re=g?.logRetention??y.LogRetention,logLevel:Ae=g?.logLevel??y.LogLevel,memory:Ce=g?.memory??y.Memory,timeout:Pe=y.Timeout,debug:he=o.debug,files:Le,vpc:Ne}=c,Ie=$t(t,{groupName:k,retention:Re,tags:M});a=ie(t,n.role,Ie,{functionName:k,eventSchema:e.schema,description:p.summary??p.description,variables:[o.variables,e.variables,c.variables],references:c.handler.references,context:e.context,handler:{sourceFile:p.file,functionName:p.name,module:p.module,dependencies:xe},listener:s&&{functionName:s.name,sourceFile:s.file,module:s.module},architecture:we,logLevel:Ae,runtime:Ee,release:ve,timeout:Pe,memory:Ce,files:Le,debug:he,tags:M,vpc:Ne}),n.setServiceState(m,o,a)}N(t,r,a,{fromService:a.parameters.functionName});break}case w.Queue:{let p=ue(n,c.service,o);N(t,r,p,{fromService:p.parameters.queueName});break}}},"prepareSubscriptions"),A=i((t,e,r,o)=>{if(!o.role||!me(o.role))throw new v;let n=kt(e.context);for(let c of e.subscriptions)switch(c.type){default:throw new z(u,"subscription not supported.");case w.Lambda:{let p=F(e,c.handler.name),s=jt(o,p,r);ae(t,s.entryId,e.context),s.parameters.vpc||(s.parameters.vpc=n);break}case w.Queue:{let p=ue(o,c.service,r);ae(t,p.entryId,e.context);break}}},"connectSubscriptions");import{getDefinitionName as Qt}from"@ez4/project/library";var C=i((t,e,r)=>{let n=te(t,e.name,r).entryId,c=Qt(n,"topicArn"),p=JSON.stringify(e.fifoMode??null),s=JSON.stringify(e.schema);return{module:"Client",from:"@ez4/aws-topic/client",constructor:`@{EZ4_MODULE_IMPORT}.make(${c}, ${s}, ${p})`,dependencyIds:[n],connectionIds:[n]}},"prepareLinkedClient");var fe=i(t=>{let{service:e,options:r,context:o}=t;return O(e)?C(o,e,r):null},"prepareLinkedServices"),Se=i(t=>{let{state:e,service:r,options:o,context:n}=t;if(!O(r))return!1;let{fifoMode:c}=r,p=E(e,{topicName:Gt(r,o),fifoMode:!!c,tags:o.tags});return n.setServiceState(r,o,p),R(e,r,p,o,n),!0},"prepareServices"),le=i(t=>{let{state:e,service:r,options:o,context:n}=t;O(r)&&A(e,r,o,n)},"connectServices");import{MissingImportedProjectError as ye}from"@ez4/project/library";import{getServiceName as Ht}from"@ez4/project/library";import{isTopicImport as D}from"@ez4/topic/library";var ge=i(t=>{let{service:e,options:r,context:o}=t;if(!D(e))return null;let{project:n}=e,{imports:c}=r;if(!c||!c[n])throw new ye(n);return C(o,e,r)},"prepareLinkedImports"),de=i(t=>{let{state:e,service:r,options:o,context:n}=t;if(!D(r))return!1;let{reference:c,project:p}=r,{imports:s}=o;if(!s||!s[p])throw new ye(p);let m=E(e,{topicName:Ht(c,s[p]),fifoMode:!!r.fifoMode,import:!0});return n.setServiceState(r,o,m),R(e,r,m,o,n),!0},"prepareImports"),Te=i(t=>{let{state:e,service:r,options:o,context:n}=t;D(r)&&A(e,r,o,n)},"connectImports");import{ServiceType as _t,ImportType as Ut}from"@ez4/topic/library";import{createPolicy as Bt,tryGetPolicy as Kt}from"@ez4/aws-identity";import{getServiceName as Vt}from"@ez4/project/library";var be=i(async t=>{let{state:e,serviceType:r,options:o}=t;if(r!==_t&&r!==Ut)return null;let n=Object.values({options:o,...o.imports}).map(s=>Vt("",s)),[c]=n,p=`${c}-topic-policy`;return Kt(e,p)??Bt(e,{tags:o.tags,policyDocument:await j(n),policyName:p})},"prepareExecutionPolicy");var Gi=i(()=>{Zt(),Jt(),Wt(),Xt(),Yt(),er("@ez4/aws-topic",{"deploy:prepareExecutionPolicy":be,"deploy:prepareLinkedService":tr,"deploy:prepareResources":rr,"deploy:connectResources":or}),B(),ee()},"registerTriggers"),tr=i(t=>fe(t)??ge(t)??null,"prepareLinkedService"),rr=i(t=>Se(t)||de(t),"prepareQueueResources"),or=i(t=>{le(t),Te(t)},"connectQueueResources");var Bi=i(t=>t.type===d,"isSubscriptionState");export{u as SubscriptionServiceName,d as SubscriptionServiceType,S as TopicServiceName,l as TopicServiceType,N as createSubscription,ie as createSubscriptionFunction,E as createTopic,h as createTopicStateId,ao as getTopic,re as getTopicArn,te as getTopicState,Bi as isSubscriptionState,L as isTopicState,Gi as registerTriggers};
|
|
1
|
+
var Fe=Object.defineProperty;var i=(t,e)=>Fe(t,"name",{value:e,configurable:!0});import{registerTriggers as Zt}from"@ez4/aws-common";import{registerTriggers as Jt}from"@ez4/aws-identity";import{registerTriggers as Wt}from"@ez4/aws-function";import{registerTriggers as Xt}from"@ez4/aws-queue";import{registerTriggers as Yt}from"@ez4/topic/library";import{tryCreateTrigger as er}from"@ez4/project/library";import{tryRegisterProvider as tt}from"@ez4/aws-common";import{applyTagUpdates as He,CorruptedResourceError as _e,OperationLogger as P,ReplaceResourceError as Ue}from"@ez4/aws-common";import{getAccountId as Be,getRegion as Ke}from"@ez4/aws-identity";import{deepCompare as Ve}from"@ez4/utils";import{getAccountId as ze,getRegion as Oe,createPolicyDocument as De}from"@ez4/aws-identity";var T=i((t,e,r)=>`arn:aws:sns:${e}:${r}:${t}`,"buildTopicArn"),j=i(async t=>{let[e,r]=await Promise.all([Oe(),ze()]);return De([{permissions:["sns:Publish"],resourceIds:t.map(o=>T(`${o}-*`,e,r))}])},"getPolicyDocument");import{CreateTopicCommand as je,DeleteTopicCommand as qe,TagResourceCommand as $e,UntagResourceCommand as Qe,NotFoundException as Ge}from"@aws-sdk/client-sns";import{getTagList as q}from"@ez4/aws-common";import{getAwsClientOptions as Me}from"@ez4/aws-common";import{SNSClient as ke}from"@aws-sdk/client-sns";var S=i(()=>new ke(Me()),"getSNSClient");var $=i(async(t,e)=>{t.update("Creating topic");let{topicName:r,fifoMode:o}=e;return{topicArn:(await S().send(new je({Name:r,Attributes:{...o&&{ContentBasedDeduplication:"true",FifoThroughputScope:"MessageGroup",FifoTopic:"true"}},Tags:q({...e.tags,ManagedBy:"EZ4"})}))).TopicArn}},"createTopic"),Q=i(async(t,e)=>{t.update("Deleting topic");try{return await S().send(new qe({TopicArn:e})),!0}catch(r){if(!(r instanceof Ge))throw r;return!1}},"deleteTopic"),G=i(async(t,e,r)=>{t.update("Tag topic"),await S().send(new $e({ResourceArn:e,Tags:q({...r,ManagedBy:"EZ4"})}))},"tagTopic"),H=i(async(t,e,r)=>{t.update("Untag topic"),await S().send(new Qe({ResourceArn:e,TagKeys:r}))},"untagTopic");var f="AWS:SNS/Topic",l="aws:sns.topic";var _=i(()=>({equals:Ze,create:U,replace:We,preview:Je,update:Xe,delete:Ye}),"getTopicHandler"),Ze=i((t,e)=>!!t.result&&t.result.topicArn===e.result?.topicArn,"equalsResource"),Je=i((t,e)=>{let r={...t.parameters,dependencies:t.dependencies},o={...e.parameters,dependencies:e.dependencies},n=Ve(r,o);if(n.counts)return{...n,name:r.topicName}},"previewResource"),We=i(async(t,e)=>{if(e.result)throw new Ue(f,t.entryId,e.entryId);return U(t)},"replaceResource"),U=i(t=>{let{parameters:e}=t;return P.logExecution(f,e.topicName,"creation",async r=>{if(e.import){let[n,c]=await Promise.all([Ke(),Be()]);return{topicArn:T(e.topicName,n,c)}}let{topicArn:o}=await $(r,e);return{topicArn:o}})},"createResource"),Xe=i(async(t,e)=>{let{result:r,parameters:o}=t,{topicName:n}=o;if(!o.import)return P.logExecution(f,n,"updates",async c=>{if(!r)throw new _e(f,n);await et(c,r.topicArn,o,e.parameters)})},"updateResource"),Ye=i(async t=>{let{result:e,parameters:r}=t;if(e&&!r.import)return P.logExecution(f,r.topicName,"deletion",async o=>{await Q(o,e.topicArn)})},"deleteResource"),et=i(async(t,e,r,o)=>{await He(r.tags,o.tags,n=>G(t,e,n),n=>H(t,e,n))},"checkTagUpdates");var B=i(()=>{tt(l,_())},"registerTopicProvider");import{tryRegisterProvider as lt}from"@ez4/aws-common";import{OperationLogger as W,ReplaceResourceError as ct}from"@ez4/aws-common";import{deepCompare as st}from"@ez4/utils";import{InvalidParameterError as Z,isArn as nt,parseArn as pt}from"@ez4/aws-common";import{NotFoundException as rt,SubscribeCommand as ot,UnsubscribeCommand as it}from"@aws-sdk/client-sns";var K=i(async(t,e)=>{t.update("Creating topic subscription");let{topicArn:r,protocol:o,endpoint:n}=e;return{subscriptionArn:(await S().send(new ot({TopicArn:r,Protocol:o,Endpoint:n,ReturnSubscriptionArn:!0,Attributes:{...o==="sqs"&&{RawMessageDelivery:"true"}}}))).SubscriptionArn}},"createSubscription"),V=i(async(t,e)=>{t.update("Deleting topic subscription");try{return await S().send(new it({SubscriptionArn:e})),!0}catch(r){if(!(r instanceof rt))throw r;return!1}},"deleteSubscription");var J=i((t,e)=>{if(!nt(e))throw new Z(t,`endpoint ${e} is not supported.`);let{service:r}=pt(e);switch(r){case"lambda":case"sqs":return r}throw new Z(t,`protocol ${r} is not supported.`)},"getSubscriptionProtocol");var u="AWS:SNS/Subscription",d="aws:sns.subscription";var X=i(()=>({equals:at,create:Y,replace:ut,preview:mt,update:St,delete:ft}),"getSubscriptionHandler"),at=i((t,e)=>!!t.result&&t.result.subscriptionArn===e.result?.subscriptionArn,"equalsResource"),mt=i((t,e)=>{let r={...t.parameters,dependencies:t.dependencies},o={...e.parameters,dependencies:e.dependencies},n=st(r,o,{exclude:{getTopicArn:!0,getEndpoint:!0}});if(n.counts)return{...n,name:r.fromService}},"previewResource"),ut=i(async(t,e,r)=>{if(e.result)throw new ct(u,t.entryId,e.entryId);return Y(t,r)},"replaceResource"),Y=i((t,e)=>{let{parameters:r}=t;return W.logExecution(u,r.fromService,"creation",async o=>{let[n,c]=await Promise.all([r.getTopicArn(e),r.getEndpoint(e)]),{subscriptionArn:p}=await K(o,{protocol:J(u,c),topicArn:n,endpoint:c});return{subscriptionArn:p,topicArn:n,endpoint:c}})},"createResource"),St=i(async()=>{},"updateResource"),ft=i(async t=>{let{result:e,parameters:r}=t;if(e)return W.logExecution(u,r.fromService,"deletion",async o=>{await V(o,e.subscriptionArn)})},"deleteResource");var ee=i(()=>{lt(d,X())},"registerSubscriptionProvider");import{isTopicService as O}from"@ez4/topic/library";import{getServiceName as Gt}from"@ez4/project/library";import{attachEntry as Tt}from"@ez4/state";import{toKebabCase as bt}from"@ez4/utils";import{IncompleteResourceError as yt}from"@ez4/aws-common";import{hashData as gt,toKebabCase as dt}from"@ez4/utils";var x=class extends Error{static{i(this,"TopicNotFoundError")}constructor(e){super(`Topic service ${e} wasn't found.`)}};var h=i((t,e=!0)=>gt(l,e?dt(t):t),"createTopicStateId"),L=i(t=>t.type===l,"isTopicState"),te=i((t,e,r)=>{let o=t.getServiceState(e,r);if(!L(o))throw new x(e);return o},"getTopicState"),re=i((t,e,r)=>{let o=r.getDependencies(l).at(0)?.result;if(!o?.topicArn)throw new yt(t,e,"topicArn");return o.topicArn},"getTopicArn");var E=i((t,e)=>{let r=bt(e.topicName),o=e.fifoMode?`${r}.fifo`:r,n=h(o,!1);return Tt(t,{type:l,entryId:n,dependencies:[],parameters:{...e,topicName:o}})},"createTopic"),ao=i((t,e)=>{let r=h(e),o=t[r];return o&&L(o)?o:null},"getTopic");import{isLinkedContextVpcRequired as kt,linkServiceContext as ae}from"@ez4/project/library";import{getFunctionState as jt,tryGetFunctionState as qt}from"@ez4/aws-function";import{TopicSubscriptionType as R}from"@ez4/topic/library";import{InvalidParameterError as z}from"@ez4/aws-common";import{isRoleState as me}from"@ez4/aws-identity";import{createLogGroup as $t}from"@ez4/aws-logs";import{getQueueState as ue}from"@ez4/aws-queue";import{createFunction as At}from"@ez4/aws-function";import{hashObject as Ct}from"@ez4/utils";import{LogLevel as Pt}from"@ez4/project";import{join as vt}from"node:path";import{MappingServiceName as xt}from"@ez4/aws-function";import{getDefinitionsObject as Et}from"@ez4/project/library";import{getFunctionBundle as Rt}from"@ez4/aws-common";import{pickObject as wt}from"@ez4/utils";var oe=i(async(t,e)=>{let{handler:r,listener:o,functionName:n,eventSchema:c,context:p,references:s,debug:m}=t,a=Et(e);return Rt(xt,{context:p&&s?wt(p,s):p,templateFile:vt(import.meta.dirname,"../lib/event.ts"),resourceName:n,filePrefix:"sns",define:{...a,__EZ4_SCHEMA:c?JSON.stringify(c):"undefined"},handler:r,listener:o,debug:m})},"bundleSubscriptionFunction");var ie=i((t,e,r,o)=>{let{handler:n,variables:c,debug:p,architecture:s,eventSchema:m}=o;return At(t,e,r,{handlerName:"snsEntryPoint",sourceFile:n.sourceFile,dependencies:o.dependencies,functionName:o.functionName,description:o.description,logLevel:p?Pt.Debug:o.logLevel,architecture:o.architecture,runtime:o.runtime,release:o.release,timeout:o.timeout,memory:o.memory,files:o.files,tags:o.tags,vpc:o.vpc,getFunctionVariables:i(()=>c.reduce((a,g)=>({...a,...g}),{}),"getFunctionVariables"),getFunctionBundle:i(a=>oe(o,[...a.getDependencies(),...a.getConnections()]),"getFunctionBundle"),getFunctionFiles:i(()=>[n.sourceFile,n.dependencies],"getFunctionFiles"),getFunctionHash:i(()=>Ct({architecture:s,eventSchema:m,debug:p}),"getFunctionHash")})},"createSubscriptionFunction");import{createPermission as ht,getFunctionAliasArn as Lt,getPermission as It,isFunctionState as ne}from"@ez4/aws-function";import{attachQueuePolicy as Nt,getQueueArn as Ft,isQueueState as zt}from"@ez4/aws-queue";import{getAccountId as pe,getRegion as ce}from"@ez4/aws-identity";import{attachEntry as Ot}from"@ez4/state";import{hashData as Dt}from"@ez4/utils";var I=i((t,e,r,o)=>{let n=e.parameters.topicName,c=[e.entryId,r.entryId];if(ne(r)){let s=It(t,e,r)??ht(t,e,r,{fromService:o.fromService,getPermission:i(async()=>{let[m,a]=await Promise.all([ce(),pe()]);return{sourceArn:T(n,m,a),principal:"sns.amazonaws.com"}},"getPermission")});c.push(s.entryId)}if(zt(r)){let s=Nt(t,r,e,{fromService:o.fromService,toService:n,policyGetters:[async()=>{let[m,a]=await Promise.all([ce(),pe()]);return{principal:"sns.amazonaws.com",sourceArn:T(n,m,a)}}]});c.push(s.entryId)}let p=Dt(d,e.entryId,r.entryId);return Ot(t,{type:d,entryId:p,dependencies:c,parameters:{...o,getTopicArn:i(s=>re(f,p,s),"getTopicArn"),getEndpoint:i(s=>ne(r)?Lt(u,p,s):Ft(u,p,s),"getEndpoint")}})},"createSubscription");import{getServiceName as Mt}from"@ez4/project/library";import{toKebabCase as N}from"@ez4/utils";var F=i((t,e)=>`${N(t.name)}-${N(e)}`,"getInternalName"),se=i((t,e,r)=>`${Mt(t,r)}-${N(e)}`,"getFunctionName");var v=class extends Error{static{i(this,"RoleMissingError")}constructor(){super("Execution role for SNS is missing.")}};import{FunctionDefaults as b}from"@ez4/aws-function";var y;(p=>(p.LogLevel=b.LogLevel,p.LogRetention=b.LogRetention,p.Architecture=b.Architecture,p.Runtime=b.Runtime,p.Timeout=b.Timeout,p.Memory=b.Memory))(y||={});var w=i((t,e,r,o,n)=>{if(!n.role||!me(n.role))throw new v;for(let c of e.subscriptions)switch(c.type){default:throw new z(u,"subscription not supported.");case R.Lambda:{if(e.fifoMode)throw new z(u,"lambda subscription not supported for FIFO topics.");let{handler:p,listener:s}=c,m=F(e,p.name),a=qt(n,m,o);if(!a){let{defaults:g,release:ve,tags:M}=o,k=se(e,p.name,o),xe=n.getDependencyFiles(p.file),{runtime:Ee=g?.runtime??y.Runtime,architecture:Re=g?.architecture??y.Architecture,logRetention:we=g?.logRetention??y.LogRetention,logLevel:Ae=g?.logLevel??y.LogLevel,memory:Ce=g?.memory??y.Memory,timeout:Pe=y.Timeout,debug:he=o.debug,files:Le,vpc:Ie}=c,Ne=$t(t,{dependencies:[r.entryId],groupName:k,retention:we,tags:M});a=ie(t,n.role,Ne,{functionName:k,eventSchema:e.schema,description:p.summary??p.description,variables:[o.variables,e.variables,c.variables],references:c.handler.references,dependencies:[r.entryId],context:e.context,handler:{sourceFile:p.file,functionName:p.name,module:p.module,dependencies:xe},listener:s&&{functionName:s.name,sourceFile:s.file,module:s.module},architecture:Re,logLevel:Ae,runtime:Ee,release:ve,timeout:Pe,memory:Ce,files:Le,debug:he,tags:M,vpc:Ie}),n.setServiceState(m,o,a)}I(t,r,a,{fromService:a.parameters.functionName});break}case R.Queue:{let p=ue(n,c.service,o);I(t,r,p,{fromService:p.parameters.queueName});break}}},"prepareSubscriptions"),A=i((t,e,r,o)=>{if(!o.role||!me(o.role))throw new v;let n=kt(e.context);for(let c of e.subscriptions)switch(c.type){default:throw new z(u,"subscription not supported.");case R.Lambda:{let p=F(e,c.handler.name),s=jt(o,p,r);ae(t,s.entryId,e.context),s.parameters.vpc||(s.parameters.vpc=n);break}case R.Queue:{let p=ue(o,c.service,r);ae(t,p.entryId,e.context);break}}},"connectSubscriptions");import{getDefinitionName as Qt}from"@ez4/project/library";var C=i((t,e,r)=>{let n=te(t,e.name,r).entryId,c=Qt(n,"topicArn"),p=JSON.stringify(e.fifoMode??null),s=JSON.stringify(e.schema);return{module:"Client",from:"@ez4/aws-topic/client",constructor:`@{EZ4_MODULE_IMPORT}.make(${c}, ${s}, ${p})`,dependencyIds:[n],connectionIds:[n]}},"prepareLinkedClient");var Se=i(t=>{let{service:e,options:r,context:o}=t;return O(e)?C(o,e,r):null},"prepareLinkedServices"),fe=i(t=>{let{state:e,service:r,options:o,context:n}=t;if(!O(r))return!1;let{fifoMode:c}=r,p=E(e,{topicName:Gt(r,o),fifoMode:!!c,tags:{...r.tags,...o.tags}});return n.setServiceState(r,o,p),w(e,r,p,o,n),!0},"prepareServices"),le=i(t=>{let{state:e,service:r,options:o,context:n}=t;O(r)&&A(e,r,o,n)},"connectServices");import{MissingImportedProjectError as ye}from"@ez4/project/library";import{getServiceName as Ht}from"@ez4/project/library";import{isTopicImport as D}from"@ez4/topic/library";var ge=i(t=>{let{service:e,options:r,context:o}=t;if(!D(e))return null;let{project:n}=e,{imports:c}=r;if(!c||!c[n])throw new ye(n);return C(o,e,r)},"prepareLinkedImports"),de=i(t=>{let{state:e,service:r,options:o,context:n}=t;if(!D(r))return!1;let{reference:c,project:p}=r,{imports:s}=o;if(!s||!s[p])throw new ye(p);let m=E(e,{topicName:Ht(c,s[p]),fifoMode:!!r.fifoMode,import:!0});return n.setServiceState(r,o,m),w(e,r,m,o,n),!0},"prepareImports"),Te=i(t=>{let{state:e,service:r,options:o,context:n}=t;D(r)&&A(e,r,o,n)},"connectImports");import{ServiceType as _t,ImportType as Ut}from"@ez4/topic/library";import{createPolicy as Bt,tryGetPolicy as Kt}from"@ez4/aws-identity";import{getServiceName as Vt}from"@ez4/project/library";var be=i(async t=>{let{state:e,serviceType:r,options:o}=t;if(r!==_t&&r!==Ut)return null;let n=Object.values({options:o,...o.imports}).map(s=>Vt("",s)),[c]=n,p=`${c}-topic-policy`;return Kt(e,p)??Bt(e,{tags:o.tags,policyDocument:await j(n),policyName:p})},"prepareExecutionPolicy");var Gi=i(()=>{Zt(),Jt(),Wt(),Xt(),Yt(),er("@ez4/aws-topic",{"deploy:prepareExecutionPolicy":be,"deploy:prepareLinkedService":tr,"deploy:prepareResources":rr,"deploy:connectResources":or}),B(),ee()},"registerTriggers"),tr=i(t=>Se(t)??ge(t)??null,"prepareLinkedService"),rr=i(t=>fe(t)||de(t),"prepareQueueResources"),or=i(t=>{le(t),Te(t)},"connectQueueResources");var Bi=i(t=>t.type===d,"isSubscriptionState");export{u as SubscriptionServiceName,d as SubscriptionServiceType,f as TopicServiceName,l as TopicServiceType,I as createSubscription,ie as createSubscriptionFunction,E as createTopic,h as createTopicStateId,ao as getTopic,re as getTopicArn,te as getTopicState,Bi as isSubscriptionState,L as isTopicState,Gi as registerTriggers};
|
|
2
2
|
//# sourceMappingURL=main.mjs.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type { EntryState } from '@ez4/
|
|
1
|
+
import type { EntryState } from '@ez4/state';
|
|
2
2
|
import type { SubscriptionFunctionParameters } from './types';
|
|
3
3
|
export declare const bundleSubscriptionFunction: (parameters: SubscriptionFunctionParameters, connections: EntryState[]) => Promise<string>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { EntryState, EntryStates } from '@ez4/
|
|
1
|
+
import type { EntryState, EntryStates } from '@ez4/state';
|
|
2
2
|
import type { LogGroupState } from '@ez4/aws-logs';
|
|
3
3
|
import type { RoleState } from '@ez4/aws-identity';
|
|
4
4
|
import type { SubscriptionFunctionParameters } from './types';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { EntryState, EntryStates } from '@ez4/
|
|
1
|
+
import type { EntryState, EntryStates } from '@ez4/state';
|
|
2
2
|
import type { FunctionState } from '@ez4/aws-function';
|
|
3
3
|
import type { QueueState } from '@ez4/aws-queue';
|
|
4
4
|
import type { TopicState } from '../topic/types';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Arn } from '@ez4/aws-common';
|
|
2
|
-
import type { EntryState, StepContext } from '@ez4/
|
|
2
|
+
import type { EntryState, StepContext } from '@ez4/state';
|
|
3
3
|
import type { CreateResponse } from './client';
|
|
4
4
|
export declare const SubscriptionServiceName = "AWS:SNS/Subscription";
|
|
5
5
|
export declare const SubscriptionServiceType = "aws:sns.subscription";
|
package/dist/topic/handler.d.ts
CHANGED
package/dist/topic/service.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { EntryState, EntryStates } from '@ez4/
|
|
1
|
+
import type { EntryState, EntryStates } from '@ez4/state';
|
|
2
2
|
import type { TopicParameters, TopicState } from './types';
|
|
3
3
|
import { TopicServiceType } from './types';
|
|
4
4
|
export declare const createTopic: <E extends EntryState>(state: EntryStates<E>, parameters: TopicParameters) => TopicState;
|
package/dist/topic/types.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { EntryState } from '@ez4/
|
|
1
|
+
import type { EntryState } from '@ez4/state';
|
|
2
2
|
import type { CreateRequest, CreateResponse } from './client';
|
|
3
3
|
export declare const TopicServiceName = "AWS:SNS/Topic";
|
|
4
4
|
export declare const TopicServiceType = "aws:sns.topic";
|
package/dist/topic/utils.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { DeployOptions, EventContext } from '@ez4/project/library';
|
|
2
|
-
import type { EntryState, StepContext } from '@ez4/
|
|
2
|
+
import type { EntryState, StepContext } from '@ez4/state';
|
|
3
3
|
import type { TopicState } from './types';
|
|
4
4
|
export declare const createTopicStateId: (topicName: string, normalize?: boolean) => string;
|
|
5
5
|
export declare const isTopicState: (resource: EntryState) => resource is TopicState;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { PolicyResourceEvent } from '@ez4/project/library';
|
|
2
|
-
export declare const prepareExecutionPolicy: (event: PolicyResourceEvent) => Promise<import("@ez4/
|
|
2
|
+
export declare const prepareExecutionPolicy: (event: PolicyResourceEvent) => Promise<import("@ez4/state").EntryState<string> | null>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { TopicService, TopicImport } from '@ez4/topic/library';
|
|
2
2
|
import type { DeployOptions, EventContext } from '@ez4/project/library';
|
|
3
|
-
import type { EntryStates } from '@ez4/
|
|
3
|
+
import type { EntryStates } from '@ez4/state';
|
|
4
4
|
import type { TopicState } from '../topic/types';
|
|
5
5
|
export declare const prepareSubscriptions: (state: EntryStates, service: TopicService | TopicImport, topicState: TopicState, options: DeployOptions, context: EventContext) => void;
|
|
6
6
|
export declare const connectSubscriptions: (state: EntryStates, service: TopicService | TopicImport, options: DeployOptions, context: EventContext) => void;
|
package/lib/event.ts
CHANGED
|
@@ -18,6 +18,9 @@ declare function handle(event: Topic.Incoming<Topic.Event>, context: object): Pr
|
|
|
18
18
|
export async function snsEntryPoint(event: SNSEvent, context: Context): Promise<void> {
|
|
19
19
|
let currentRequest: Topic.Incoming<Topic.Event> | undefined;
|
|
20
20
|
|
|
21
|
+
const milliseconds = Math.max(0, context.getRemainingTimeInMillis() - 1000);
|
|
22
|
+
const timeoutEvent = setTimeout(() => onTimeout(currentRequest ?? request, milliseconds), milliseconds);
|
|
23
|
+
|
|
21
24
|
const request = {
|
|
22
25
|
requestId: context.awsRequestId
|
|
23
26
|
};
|
|
@@ -52,6 +55,7 @@ export async function snsEntryPoint(event: SNSEvent, context: Context): Promise<
|
|
|
52
55
|
} catch (error) {
|
|
53
56
|
await onError(error, currentRequest ?? request);
|
|
54
57
|
} finally {
|
|
58
|
+
clearTimeout(timeoutEvent);
|
|
55
59
|
await onEnd(request);
|
|
56
60
|
}
|
|
57
61
|
}
|
|
@@ -86,6 +90,18 @@ const onDone = (request: Partial<Topic.Incoming<Topic.Event>>) => {
|
|
|
86
90
|
);
|
|
87
91
|
};
|
|
88
92
|
|
|
93
|
+
const onTimeout = (request: Partial<Topic.Incoming<Topic.Event>>, timeoutAfter: number) => {
|
|
94
|
+
console.warn({ ...Runtime.getScope(), timeoutAfter });
|
|
95
|
+
|
|
96
|
+
return dispatch(
|
|
97
|
+
{
|
|
98
|
+
type: ServiceEventType.Timeout,
|
|
99
|
+
request
|
|
100
|
+
},
|
|
101
|
+
__EZ4_CONTEXT
|
|
102
|
+
);
|
|
103
|
+
};
|
|
104
|
+
|
|
89
105
|
const onError = (error: unknown, request: Partial<Topic.Request | Topic.Incoming<Topic.Event>>) => {
|
|
90
106
|
console.error({ ...Runtime.getScope(), error });
|
|
91
107
|
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ez4/aws-topic",
|
|
3
3
|
"description": "EZ4: Self-managed AWS SNS topics provider",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.52.0",
|
|
5
5
|
"author": "Silas B.",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"type": "module",
|
|
@@ -54,19 +54,19 @@
|
|
|
54
54
|
},
|
|
55
55
|
"dependencies": {
|
|
56
56
|
"@aws-sdk/client-sns": "^3.996.0",
|
|
57
|
-
"@ez4/aws-common": "^0.
|
|
58
|
-
"@ez4/aws-identity": "^0.
|
|
59
|
-
"@ez4/aws-function": "^0.
|
|
60
|
-
"@ez4/aws-logs": "^0.
|
|
61
|
-
"@ez4/aws-queue": "^0.
|
|
62
|
-
"@ez4/common": "^0.
|
|
63
|
-
"@ez4/project": "^0.
|
|
64
|
-
"@ez4/queue": "^0.
|
|
65
|
-
"@ez4/schema": "^0.
|
|
66
|
-
"@ez4/
|
|
67
|
-
"@ez4/topic": "^0.
|
|
68
|
-
"@ez4/transform": "^0.
|
|
69
|
-
"@ez4/utils": "^0.
|
|
70
|
-
"@ez4/validator": "^0.
|
|
57
|
+
"@ez4/aws-common": "^0.52.0",
|
|
58
|
+
"@ez4/aws-identity": "^0.52.0",
|
|
59
|
+
"@ez4/aws-function": "^0.52.0",
|
|
60
|
+
"@ez4/aws-logs": "^0.52.0",
|
|
61
|
+
"@ez4/aws-queue": "^0.52.0",
|
|
62
|
+
"@ez4/common": "^0.52.0",
|
|
63
|
+
"@ez4/project": "^0.52.0",
|
|
64
|
+
"@ez4/queue": "^0.52.0",
|
|
65
|
+
"@ez4/schema": "^0.52.0",
|
|
66
|
+
"@ez4/state": "^0.52.0",
|
|
67
|
+
"@ez4/topic": "^0.52.0",
|
|
68
|
+
"@ez4/transform": "^0.52.0",
|
|
69
|
+
"@ez4/utils": "^0.52.0",
|
|
70
|
+
"@ez4/validator": "^0.52.0"
|
|
71
71
|
}
|
|
72
72
|
}
|