@ez4/aws-topic 0.30.0 → 0.32.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 CHANGED
@@ -1,36 +1,36 @@
1
- "use strict";var I=Object.defineProperty;var it=Object.getOwnPropertyDescriptor;var nt=Object.getOwnPropertyNames;var st=Object.prototype.hasOwnProperty;var i=(e,t)=>I(e,"name",{value:t,configurable:!0});var pt=(e,t)=>{for(var r in t)I(e,r,{get:t[r],enumerable:!0})},ct=(e,t,r,o)=>{if(t&&
2
- typeof t=="object"||typeof t=="function")for(let n of nt(t))!st.call(e,n)&&n!==r&&
3
- I(e,n,{get:()=>t[n],enumerable:!(o=it(t,n))||o.enumerable});return e};var at=e=>ct(I({},"__esModule",{value:!0}),e);var Ct={};pt(Ct,{SubscriptionServiceName:()=>a,SubscriptionServiceType:()=>d,TopicServiceName:()=>S,
4
- TopicServiceType:()=>y,createSubscription:()=>$,createSubscriptionFunction:()=>V,
5
- createTopic:()=>A,createTopicStateId:()=>O,getTopic:()=>vt,getTopicArn:()=>W,getTopicState:()=>Z,
6
- isSubscriptionState:()=>Pt,isTopicState:()=>k,registerTriggers:()=>Et});module.exports=
1
+ "use strict";var I=Object.defineProperty;var it=Object.getOwnPropertyDescriptor;var nt=Object.getOwnPropertyNames;var pt=Object.prototype.hasOwnProperty;var i=(e,t)=>I(e,"name",{value:t,configurable:!0});var st=(e,t)=>{for(var r in t)I(e,r,{get:t[r],enumerable:!0})},ct=(e,t,r,o)=>{if(t&&
2
+ typeof t=="object"||typeof t=="function")for(let n of nt(t))!pt.call(e,n)&&n!==r&&
3
+ I(e,n,{get:()=>t[n],enumerable:!(o=it(t,n))||o.enumerable});return e};var at=e=>ct(I({},"__esModule",{value:!0}),e);var Ct={};st(Ct,{SubscriptionServiceName:()=>a,SubscriptionServiceType:()=>d,TopicServiceName:()=>S,
4
+ TopicServiceType:()=>y,createSubscription:()=>k,createSubscriptionFunction:()=>W,
5
+ createTopic:()=>A,createTopicStateId:()=>M,getTopic:()=>vt,getTopicArn:()=>Z,getTopicState:()=>J,
6
+ isSubscriptionState:()=>Pt,isTopicState:()=>O,registerTriggers:()=>Et});module.exports=
7
7
  at(Ct);var We=require("@ez4/aws-common"),Ve=require("@ez4/aws-identity"),Xe=require("@ez4/aws-function"),
8
- Ye=require("@ez4/aws-queue"),et=require("@ez4/topic/library"),tt=require("@ez4/project/library");var ue=require("@ez4/aws-common");var z=require("@ez4/aws-common"),D=require("@ez4/aws-identity"),ce=require("@ez4/utils");var x=require("@ez4/aws-identity");var v=i((e,t,r)=>`arn:aws:sns:${t}:${r}:${e}`,"buildTopicArn"),oe=i(async e=>{let[
8
+ Ye=require("@ez4/aws-queue"),et=require("@ez4/topic/library"),tt=require("@ez4/project/library");var ue=require("@ez4/aws-common");var F=require("@ez4/aws-common"),z=require("@ez4/aws-identity"),ce=require("@ez4/utils");var x=require("@ez4/aws-identity");var v=i((e,t,r)=>`arn:aws:sns:${t}:${r}:${e}`,"buildTopicArn"),oe=i(async e=>{let[
9
9
  t,r]=await Promise.all([(0,x.getRegion)(),(0,x.getAccountId)()]);return(0,x.createPolicyDocument)(
10
10
  [{permissions:["sns:Publish"],resourceIds:e.map(o=>v(`${o}-*`,t,r))}])},"getPoli\
11
- cyDocument");var m=require("@aws-sdk/client-sns"),u=require("@ez4/aws-common");var S="AWS:SNS/Topic",y="aws:sns.topic";var F=new m.SNSClient({}),ie=i(async e=>{let{topicName:t,fifoMode:r}=e;return u.Logger.
12
- logCreate(S,t),{topicArn:(await F.send(new m.CreateTopicCommand({Name:t,Attributes:{
11
+ cyDocument");var m=require("@aws-sdk/client-sns"),u=require("@ez4/aws-common");var S="AWS:SNS/Topic",y="aws:sns.topic";var h=new m.SNSClient({}),ie=i(async e=>{let{topicName:t,fifoMode:r}=e;return u.Logger.
12
+ logCreate(S,t),{topicArn:(await h.send(new m.CreateTopicCommand({Name:t,Attributes:{
13
13
  ...r&&{ContentBasedDeduplication:"true",FifoThroughputScope:"MessageGroup",FifoTopic:"\
14
14
  true"}},Tags:(0,u.getTagList)({...e.tags,ManagedBy:"EZ4"})}))).TopicArn}},"creat\
15
15
  eTopic"),ne=i(async e=>{let t=(0,u.tryParseArn)(e)?.resourceName??e;u.Logger.logDelete(
16
- S,t);try{return await F.send(new m.DeleteTopicCommand({TopicArn:e})),!0}catch(r){
17
- if(!(r instanceof m.NotFoundException))throw r;return!1}},"deleteTopic"),se=i(async(e,t)=>{
18
- let r=(0,u.tryParseArn)(e)?.resourceName??e;u.Logger.logTag(S,r),await F.send(new m.TagResourceCommand(
19
- {ResourceArn:e,Tags:(0,u.getTagList)({...t,ManagedBy:"EZ4"})}))},"tagTopic"),pe=i(
16
+ S,t);try{return await h.send(new m.DeleteTopicCommand({TopicArn:e})),!0}catch(r){
17
+ if(!(r instanceof m.NotFoundException))throw r;return!1}},"deleteTopic"),pe=i(async(e,t)=>{
18
+ let r=(0,u.tryParseArn)(e)?.resourceName??e;u.Logger.logTag(S,r),await h.send(new m.TagResourceCommand(
19
+ {ResourceArn:e,Tags:(0,u.getTagList)({...t,ManagedBy:"EZ4"})}))},"tagTopic"),se=i(
20
20
  async(e,t)=>{let r=(0,u.tryParseArn)(e)?.resourceName??e;u.Logger.logUntag(S,r),
21
- await F.send(new m.UntagResourceCommand({ResourceArn:e,TagKeys:t}))},"untagTopic");var ae=i(()=>({equals:mt,create:me,replace:St,preview:ut,update:ft,delete:lt}),"\
21
+ await h.send(new m.UntagResourceCommand({ResourceArn:e,TagKeys:t}))},"untagTopic");var ae=i(()=>({equals:mt,create:me,replace:St,preview:ut,update:ft,delete:lt}),"\
22
22
  getTopicHandler"),mt=i((e,t)=>!!e.result&&e.result.topicArn===t.result?.topicArn,
23
23
  "equalsResource"),ut=i((e,t)=>{let r={...e.parameters,dependencies:e.dependencies},
24
24
  o={...t.parameters,dependencies:t.dependencies},n=(0,ce.deepCompare)(r,o);if(n.counts)
25
25
  return{...n,name:r.topicName}},"previewResource"),St=i(async(e,t)=>{if(t.result)
26
- throw new z.ReplaceResourceError(S,e.entryId,t.entryId);return me(e)},"replaceRe\
26
+ throw new F.ReplaceResourceError(S,e.entryId,t.entryId);return me(e)},"replaceRe\
27
27
  source"),me=i(async e=>{let t=e.parameters;if(t.import){let[o,n]=await Promise.all(
28
- [(0,D.getRegion)(),(0,D.getAccountId)()]);return{topicArn:v(t.topicName,o,n)}}let{
28
+ [(0,z.getRegion)(),(0,z.getAccountId)()]);return{topicArn:v(t.topicName,o,n)}}let{
29
29
  topicArn:r}=await ie(t);return{topicArn:r}},"createResource"),ft=i(async(e,t)=>{
30
30
  let{result:r,parameters:o}=e;r&&!o.import&&await yt(r.topicArn,o,t.parameters)},
31
31
  "updateResource"),lt=i(async e=>{let{result:t,parameters:r}=e;t&&!r.import&&await ne(
32
- t.topicArn)},"deleteResource"),yt=i(async(e,t,r)=>{await(0,z.applyTagUpdates)(t.
33
- tags,r.tags,o=>se(e,o),o=>pe(e,o))},"checkTagUpdates");var Se=i(()=>{(0,ue.registerProvider)(y,ae())},"registerTopicProvider");var ve=require("@ez4/aws-common");var de=require("@ez4/aws-common"),Te=require("@ez4/utils");var b=require("@ez4/aws-common");var T=require("@aws-sdk/client-sns"),E=require("@ez4/aws-common");var a="AWS:SNS/Subscription",d="aws:sns.subscription";var fe=new T.SNSClient({});var le=i(async e=>{let t=(0,E.tryParseArn)(e.topicArn)?.resourceName??e.topicArn;
32
+ t.topicArn)},"deleteResource"),yt=i(async(e,t,r)=>{await(0,F.applyTagUpdates)(t.
33
+ tags,r.tags,o=>pe(e,o),o=>se(e,o))},"checkTagUpdates");var Se=i(()=>{(0,ue.registerProvider)(y,ae())},"registerTopicProvider");var ve=require("@ez4/aws-common");var de=require("@ez4/aws-common"),Te=require("@ez4/utils");var b=require("@ez4/aws-common");var T=require("@aws-sdk/client-sns"),E=require("@ez4/aws-common");var a="AWS:SNS/Subscription",d="aws:sns.subscription";var fe=new T.SNSClient({});var le=i(async e=>{let t=(0,E.tryParseArn)(e.topicArn)?.resourceName??e.topicArn;
34
34
  E.Logger.logCreate(a,t);let{topicArn:r,protocol:o,endpoint:n}=e;return{subscriptionArn:(await fe.
35
35
  send(new T.SubscribeCommand({TopicArn:r,Protocol:o,Endpoint:n,ReturnSubscriptionArn:!0,
36
36
  Attributes:{...o==="sqs"&&{RawMessageDelivery:"true"}}}))).SubscriptionArn}},"cr\
@@ -47,92 +47,90 @@ dependencies},o={...t.parameters,dependencies:t.dependencies},n=(0,Te.deepCompar
47
47
  r,o,{exclude:{getTopicArn:!0,getEndpoint:!0}});if(n.counts)return{...n,name:r.fromService}},
48
48
  "previewResource"),Tt=i(async(e,t,r)=>{if(t.result)throw new de.ReplaceResourceError(
49
49
  a,e.entryId,t.entryId);return xe(e,r)},"replaceResource"),xe=i(async(e,t)=>{let r=e.
50
- parameters,[o,n]=await Promise.all([r.getTopicArn(t),r.getEndpoint(t)]),{subscriptionArn:s}=await le(
51
- {protocol:ge(a,n),topicArn:o,endpoint:n});return{subscriptionArn:s,topicArn:o,endpoint:n}},
50
+ parameters,[o,n]=await Promise.all([r.getTopicArn(t),r.getEndpoint(t)]),{subscriptionArn:p}=await le(
51
+ {protocol:ge(a,n),topicArn:o,endpoint:n});return{subscriptionArn:p,topicArn:o,endpoint:n}},
52
52
  "createResource"),bt=i(async()=>{},"updateResource"),xt=i(async e=>{let{result:t}=e;
53
- t&&await ye(t.subscriptionArn)},"deleteResource");var Ee=i(()=>{(0,ve.registerProvider)(d,be())},"registerSubscriptionProvider");var U=require("@ez4/topic/library"),je=require("@ez4/project/library");var Re=require("@ez4/stateful"),Ae=require("@ez4/utils");var we=require("@ez4/aws-common"),M=require("@ez4/utils");var L=class extends Error{static{i(this,"TopicNotFoundError")}constructor(t){super(
54
- `Topic service ${t} wasn't found.`)}};var O=i((e,t=!0)=>(0,M.hashData)(y,t?(0,M.toKebabCase)(e):e),"createTopicStateId"),
55
- k=i(e=>e.type===y,"isTopicState"),Z=i((e,t,r)=>{let o=e.getServiceState(t,r);if(!k(
56
- o))throw new L(t);return o},"getTopicState"),W=i((e,t,r)=>{let o=r.getDependencies(
53
+ t&&await ye(t.subscriptionArn)},"deleteResource");var Ee=i(()=>{(0,ve.registerProvider)(d,be())},"registerSubscriptionProvider");var _=require("@ez4/topic/library"),je=require("@ez4/project/library");var Re=require("@ez4/stateful"),Ae=require("@ez4/utils");var we=require("@ez4/aws-common"),L=require("@ez4/utils");var D=class extends Error{static{i(this,"TopicNotFoundError")}constructor(t){super(
54
+ `Topic service ${t} wasn't found.`)}};var M=i((e,t=!0)=>(0,L.hashData)(y,t?(0,L.toKebabCase)(e):e),"createTopicStateId"),
55
+ O=i(e=>e.type===y,"isTopicState"),J=i((e,t,r)=>{let o=e.getServiceState(t,r);if(!O(
56
+ o))throw new D(t);return o},"getTopicState"),Z=i((e,t,r)=>{let o=r.getDependencies(
57
57
  y).at(0)?.result;if(!o?.topicArn)throw new we.IncompleteResourceError(e,t,"topic\
58
58
  Arn");return o.topicArn},"getTopicArn");var A=i((e,t)=>{let r=(0,Ae.toKebabCase)(t.topicName),o=t.fifoMode?`${r}.fifo`:r,
59
- n=O(o,!1);return(0,Re.attachEntry)(e,{type:y,entryId:n,dependencies:[],parameters:{
60
- ...t,topicName:o}})},"createTopic"),vt=i((e,t)=>{let r=O(t),o=e[r];return o&&k(o)?
61
- o:null},"getTopic");var Y=require("@ez4/project/library"),h=require("@ez4/topic/library"),q=require("@ez4/aws-function"),
62
- Q=require("@ez4/aws-common"),ee=require("@ez4/aws-identity"),ke=require("@ez4/aws-logs"),
63
- te=require("@ez4/aws-queue");var Fe=require("@ez4/aws-function"),ze=require("@ez4/utils");var Pe=require("node:path"),Ce=require("@ez4/project/library"),Ne=require("@ez4/aws-function"),
64
- he=require("@ez4/aws-common");var Ie=i(async(e,t)=>{let{extras:r,debug:o,handler:n,listener:s,messageSchema:p}=e,
65
- c=(0,Ce.getDefinitionsObject)(t);return(0,he.getFunctionBundle)(Ne.MappingServiceName,
59
+ n=M(o,!1);return(0,Re.attachEntry)(e,{type:y,entryId:n,dependencies:[],parameters:{
60
+ ...t,topicName:o}})},"createTopic"),vt=i((e,t)=>{let r=M(t),o=e[r];return o&&O(o)?
61
+ o:null},"getTopic");var X=require("@ez4/project/library"),N=require("@ez4/topic/library"),Q=require("@ez4/aws-function"),
62
+ j=require("@ez4/aws-common"),Y=require("@ez4/aws-identity"),ke=require("@ez4/aws-logs"),
63
+ ee=require("@ez4/aws-queue");var Fe=require("@ez4/aws-function"),ze=require("@ez4/utils");var Pe=require("node:path"),Ce=require("@ez4/project/library"),Ne=require("@ez4/aws-function"),
64
+ Ie=require("@ez4/aws-common");var he=i(async(e,t)=>{let{handler:r,listener:o,messageSchema:n,context:p,debug:s}=e,
65
+ c=(0,Ce.getDefinitionsObject)(t);return(0,Ie.getFunctionBundle)(Ne.MappingServiceName,
66
66
  {templateFile:(0,Pe.join)(__dirname,"../lib/message.ts"),filePrefix:"sns",define:{
67
- ...c,__EZ4_SCHEMA:p?JSON.stringify(p):"undefined"},handler:n,listener:s,extras:r,
68
- debug:o})},"bundleSubscriptionFunction");var V=i((e,t,r,o)=>{let{handler:n,messageSchema:s}=o;return(0,Fe.createFunction)(
67
+ ...c,__EZ4_SCHEMA:n?JSON.stringify(n):"undefined"},handler:r,listener:o,context:p,
68
+ debug:s})},"bundleSubscriptionFunction");var W=i((e,t,r,o)=>{let{handler:n,messageSchema:p}=o;return(0,Fe.createFunction)(
69
69
  e,t,r,{handlerName:"snsEntryPoint",sourceFile:n.sourceFile,functionName:o.functionName,
70
70
  description:o.description,variables:o.variables,timeout:o.timeout,memory:o.memory,
71
71
  debug:o.debug,tags:o.tags,getFunctionFiles:i(()=>[n.sourceFile,n.dependencies],"\
72
- getFunctionFiles"),getFunctionBundle:i(p=>Ie(o,p.getConnections()),"getFunctionB\
73
- undle"),getFunctionHash:i(()=>(0,ze.hashObject)({messageSchema:s}),"getFunctionH\
74
- ash")})},"createSubscriptionFunction");var g=require("@ez4/aws-function"),R=require("@ez4/aws-queue"),w=require("@ez4/aws-identity"),
75
- De=require("@ez4/stateful"),Le=require("@ez4/utils");var $=i((e,t,r,o)=>{let n=t.parameters.topicName,s=[t.entryId,r.entryId];if((0,g.isFunctionState)(
72
+ getFunctionFiles"),getFunctionBundle:i(s=>he(o,[...s.getDependencies(),...s.getConnections()]),
73
+ "getFunctionBundle"),getFunctionHash:i(()=>(0,ze.hashObject)({messageSchema:p}),
74
+ "getFunctionHash")})},"createSubscriptionFunction");var g=require("@ez4/aws-function"),R=require("@ez4/aws-queue"),w=require("@ez4/aws-identity"),
75
+ De=require("@ez4/stateful"),Le=require("@ez4/utils");var k=i((e,t,r,o)=>{let n=t.parameters.topicName,p=[t.entryId,r.entryId];if((0,g.isFunctionState)(
76
76
  r)){let c=(0,g.getPermission)(e,t,r)??(0,g.createPermission)(e,t,r,{fromService:o.
77
77
  fromService,getPermission:i(async()=>{let[f,l]=await Promise.all([(0,w.getRegion)(),
78
78
  (0,w.getAccountId)()]);return{sourceArn:v(n,f,l),principal:"sns.amazonaws.com"}},
79
- "getPermission")});s.push(c.entryId)}if((0,R.isQueueState)(r)){let c=(0,R.attachQueuePolicy)(
79
+ "getPermission")});p.push(c.entryId)}if((0,R.isQueueState)(r)){let c=(0,R.attachQueuePolicy)(
80
80
  e,r,t,{fromService:o.fromService,policyGetters:[async()=>{let[f,l]=await Promise.
81
81
  all([(0,w.getRegion)(),(0,w.getAccountId)()]);return{principal:"sns.amazonaws.co\
82
- m",sourceArn:v(n,f,l)}}]});s.push(c.entryId)}let p=(0,Le.hashData)(d,t.entryId,r.
83
- entryId);return(0,De.attachEntry)(e,{type:d,entryId:p,dependencies:s,parameters:{
84
- ...o,getTopicArn:i(c=>W(S,p,c),"getTopicArn"),getEndpoint:i(c=>(0,g.isFunctionState)(
85
- r)?(0,g.getFunctionArn)(a,p,c):(0,R.getQueueArn)(a,p,c),"getEndpoint")}})},"crea\
86
- teSubscription");var Me=require("@ez4/project/library"),j=require("@ez4/utils");var X=i((e,t)=>`${(0,j.toKebabCase)(e.name)}-${(0,j.toKebabCase)(t)}`,"getIntern\
87
- alName"),Oe=i((e,t,r)=>`${(0,Me.getServiceName)(e,r)}-${(0,j.toKebabCase)(t)}`,"\
82
+ m",sourceArn:v(n,f,l)}}]});p.push(c.entryId)}let s=(0,Le.hashData)(d,t.entryId,r.
83
+ entryId);return(0,De.attachEntry)(e,{type:d,entryId:s,dependencies:p,parameters:{
84
+ ...o,getTopicArn:i(c=>Z(S,s,c),"getTopicArn"),getEndpoint:i(c=>(0,g.isFunctionState)(
85
+ r)?(0,g.getFunctionArn)(a,s,c):(0,R.getQueueArn)(a,s,c),"getEndpoint")}})},"crea\
86
+ teSubscription");var Me=require("@ez4/project/library"),$=require("@ez4/utils");var V=i((e,t)=>`${(0,$.toKebabCase)(e.name)}-${(0,$.toKebabCase)(t)}`,"getIntern\
87
+ alName"),Oe=i((e,t,r)=>`${(0,Me.getServiceName)(e,r)}-${(0,$.toKebabCase)(t)}`,"\
88
88
  getFunctionName");var P=class extends Error{static{i(this,"RoleMissingError")}constructor(){super(
89
- "Execution role for SNS is missing.")}},C=class extends Error{constructor(r){super(
90
- `Imported project ${r} wasn't found.`);this.projectName=r}static{i(this,"Project\
91
- MissingError")}};var N;(o=>(o.LogRetention=90,o.Timeout=90,o.Memory=192))(N||={});var G=i((e,t,r,o,n)=>{if(!n.role||!(0,ee.isRoleState)(n.role))throw new P;for(let s of t.
92
- subscriptions)switch(s.type){default:throw new Q.InvalidParameterError(a,"subscr\
93
- iption not supported.");case h.TopicSubscriptionType.Lambda:{if(t.fifoMode)throw new Q.InvalidParameterError(
94
- a,"lambda subscription not supported for FIFO topics.");let{handler:p,listener:c}=s,
95
- f=X(t,p.name),l=(0,q.tryGetFunctionState)(n,f,o);if(!l){let re=Oe(t,p.name,o),rt=n.
96
- getDependencyFiles(p.file),ot=(0,ke.createLogGroup)(e,{retention:s.logRetention??
97
- N.LogRetention,groupName:re,tags:o.tags});l=V(e,n.role,ot,{functionName:re,description:p.
98
- description,messageSchema:t.schema,timeout:s.timeout??N.Timeout,memory:s.memory??
99
- N.Memory,extras:t.extras,debug:o.debug,tags:o.tags,handler:{sourceFile:p.file,functionName:p.
100
- name,module:p.module,dependencies:rt},listener:c&&{functionName:c.name,sourceFile:c.
101
- file,module:c.module},variables:{...o.variables,...t.variables,...s.variables}}),
102
- n.setServiceState(l,f,o)}$(e,r,l,{fromService:l.parameters.functionName});break}case h.TopicSubscriptionType.
103
- Queue:{let p=(0,te.getQueueState)(n,s.service,o);$(e,r,p,{fromService:p.parameters.
104
- queueName});break}}},"prepareSubscriptions"),H=i((e,t,r,o)=>{if(!o.role||!(0,ee.isRoleState)(
105
- o.role))throw new P;for(let n of t.subscriptions)switch(n.type){default:throw new Q.InvalidParameterError(
106
- a,"subscription not supported.");case h.TopicSubscriptionType.Lambda:{let s=X(t,
107
- n.handler.name),p=(0,q.getFunctionState)(o,s,r);(0,Y.linkServiceExtras)(e,p.entryId,
108
- t.extras);break}case h.TopicSubscriptionType.Queue:{let s=(0,te.getQueueState)(o,
109
- n.service,r);(0,Y.linkServiceExtras)(e,s.entryId,t.extras);break}}},"connectSubs\
110
- criptions");var $e=require("@ez4/project/library");var _=i((e,t,r)=>{let n=Z(e,t.name,r).entryId,s=(0,$e.getDefinitionName)(n,"topi\
111
- cArn"),p=JSON.stringify(t.fifoMode??null),c=JSON.stringify(t.schema);return{entryIds:[
112
- n],constructor:`make(${s}, ${c}, ${p})`,from:"@ez4/aws-topic/client",module:"Cli\
113
- ent"}},"prepareLinkedClient");var Qe=i(e=>{let{service:t,options:r,context:o}=e;return(0,U.isTopicService)(t)?
114
- _(o,t,r):null},"prepareLinkedServices"),qe=i(async e=>{let{state:t,service:r,options:o,
115
- context:n}=e;if(!(0,U.isTopicService)(r))return!1;let{fifoMode:s}=r,p=A(t,{topicName:(0,je.getServiceName)(
116
- r,o),fifoMode:!!s,tags:o.tags});return n.setServiceState(p,r,o),await G(t,r,p,o,
117
- n),!0},"prepareServices"),Ge=i(e=>{let{state:t,service:r,options:o,context:n}=e;
118
- (0,U.isTopicService)(r)&&H(t,r,o,n)},"connectServices");var B=require("@ez4/topic/library"),He=require("@ez4/project/library");var _e=i(e=>{let{service:t,options:r,context:o}=e;if(!(0,B.isTopicImport)(t))return null;
119
- let{project:n}=t,{imports:s}=r;if(!s||!s[n])throw new C(n);return _(o,t,s[n])},"\
120
- prepareLinkedImports"),Ue=i(async e=>{let{state:t,service:r,options:o,context:n}=e;
121
- if(!(0,B.isTopicImport)(r))return!1;let{reference:s,project:p}=r,{imports:c}=o;if(!c||
122
- !c[p])throw new C(p);let f=A(t,{topicName:(0,He.getServiceName)(s,c[p]),fifoMode:!!r.
123
- fifoMode,import:!0});return n.setServiceState(f,r,o),await G(t,r,f,o,n),!0},"pre\
124
- pareImports"),Be=i(e=>{let{state:t,service:r,options:o,context:n}=e;(0,B.isTopicImport)(
125
- r)&&H(t,r,o,n)},"connectImports");var K=require("@ez4/topic/library"),J=require("@ez4/aws-identity"),Ke=require("@ez4/project/library");var Je=i(async e=>{let{state:t,serviceType:r,options:o}=e;if(r!==K.ServiceType&&
126
- r!==K.ImportType)return null;let n=Object.values({options:o,...o.imports}).map(c=>(0,Ke.getServiceName)(
127
- "",c)),[s]=n,p=`${s}-topic-policy`;return(0,J.tryGetPolicy)(t,p)??(0,J.createPolicy)(
128
- t,{tags:o.tags,policyDocument:await oe(n),policyName:p})},"prepareExecutionPolic\
89
+ "Execution role for SNS is missing.")}};var C;(o=>(o.LogRetention=90,o.Timeout=90,o.Memory=192))(C||={});var q=i((e,t,r,o,n)=>{if(!n.role||!(0,Y.isRoleState)(n.role))throw new P;for(let p of t.
90
+ subscriptions)switch(p.type){default:throw new j.InvalidParameterError(a,"subscr\
91
+ iption not supported.");case N.TopicSubscriptionType.Lambda:{if(t.fifoMode)throw new j.InvalidParameterError(
92
+ a,"lambda subscription not supported for FIFO topics.");let{handler:s,listener:c}=p,
93
+ f=V(t,s.name),l=(0,Q.tryGetFunctionState)(n,f,o);if(!l){let re=Oe(t,s.name,o),rt=n.
94
+ getDependencyFiles(s.file),ot=(0,ke.createLogGroup)(e,{retention:p.logRetention??
95
+ C.LogRetention,groupName:re,tags:o.tags});l=W(e,n.role,ot,{functionName:re,description:s.
96
+ description,messageSchema:t.schema,timeout:p.timeout??C.Timeout,memory:p.memory??
97
+ C.Memory,context:t.context,debug:o.debug,tags:o.tags,handler:{sourceFile:s.file,
98
+ functionName:s.name,module:s.module,dependencies:rt},listener:c&&{functionName:c.
99
+ name,sourceFile:c.file,module:c.module},variables:{...o.variables,...t.variables,
100
+ ...p.variables}}),n.setServiceState(l,f,o)}k(e,r,l,{fromService:l.parameters.functionName});
101
+ break}case N.TopicSubscriptionType.Queue:{let s=(0,ee.getQueueState)(n,p.service,
102
+ o);k(e,r,s,{fromService:s.parameters.queueName});break}}},"prepareSubscriptions"),
103
+ G=i((e,t,r,o)=>{if(!o.role||!(0,Y.isRoleState)(o.role))throw new P;for(let n of t.
104
+ subscriptions)switch(n.type){default:throw new j.InvalidParameterError(a,"subscr\
105
+ iption not supported.");case N.TopicSubscriptionType.Lambda:{let p=V(t,n.handler.
106
+ name),s=(0,Q.getFunctionState)(o,p,r);(0,X.linkServiceContext)(e,s.entryId,t.context);
107
+ break}case N.TopicSubscriptionType.Queue:{let p=(0,ee.getQueueState)(o,n.service,
108
+ r);(0,X.linkServiceContext)(e,p.entryId,t.context);break}}},"connectSubscription\
109
+ s");var $e=require("@ez4/project/library");var H=i((e,t,r)=>{let n=J(e,t.name,r).entryId,p=(0,$e.getDefinitionName)(n,"topi\
110
+ cArn"),s=JSON.stringify(t.fifoMode??null),c=JSON.stringify(t.schema);return{connectionIds:[
111
+ n],dependencyIds:[n],constructor:`make(${p}, ${c}, ${s})`,from:"@ez4/aws-topic/c\
112
+ lient",module:"Client"}},"prepareLinkedClient");var Qe=i(e=>{let{service:t,options:r,context:o}=e;return(0,_.isTopicService)(t)?
113
+ H(o,t,r):null},"prepareLinkedServices"),qe=i(e=>{let{state:t,service:r,options:o,
114
+ context:n}=e;if(!(0,_.isTopicService)(r))return!1;let{fifoMode:p}=r,s=A(t,{topicName:(0,je.getServiceName)(
115
+ r,o),fifoMode:!!p,tags:o.tags});return n.setServiceState(s,r,o),q(t,r,s,o,n),!0},
116
+ "prepareServices"),Ge=i(e=>{let{state:t,service:r,options:o,context:n}=e;(0,_.isTopicService)(
117
+ r)&&G(t,r,o,n)},"connectServices");var te=require("@ez4/project/library"),He=require("@ez4/project/library"),U=require("@ez4/topic/library");var _e=i(e=>{let{service:t,options:r,context:o}=e;if(!(0,U.isTopicImport)(t))return null;
118
+ let{project:n}=t,{imports:p}=r;if(!p||!p[n])throw new te.MissingImportedProjectError(
119
+ n);return H(o,t,p[n])},"prepareLinkedImports"),Ue=i(e=>{let{state:t,service:r,options:o,
120
+ context:n}=e;if(!(0,U.isTopicImport)(r))return!1;let{reference:p,project:s}=r,{imports:c}=o;
121
+ if(!c||!c[s])throw new te.MissingImportedProjectError(s);let f=A(t,{topicName:(0,He.getServiceName)(
122
+ p,c[s]),fifoMode:!!r.fifoMode,import:!0});return n.setServiceState(f,r,o),q(t,r,
123
+ f,o,n),!0},"prepareImports"),Be=i(e=>{let{state:t,service:r,options:o,context:n}=e;
124
+ (0,U.isTopicImport)(r)&&G(t,r,o,n)},"connectImports");var B=require("@ez4/topic/library"),K=require("@ez4/aws-identity"),Ke=require("@ez4/project/library");var Je=i(async e=>{let{state:t,serviceType:r,options:o}=e;if(r!==B.ServiceType&&
125
+ r!==B.ImportType)return null;let n=Object.values({options:o,...o.imports}).map(c=>(0,Ke.getServiceName)(
126
+ "",c)),[p]=n,s=`${p}-topic-policy`;return(0,K.tryGetPolicy)(t,s)??(0,K.createPolicy)(
127
+ t,{tags:o.tags,policyDocument:await oe(n),policyName:s})},"prepareExecutionPolic\
129
128
  y");var Ze=!1,Et=i(()=>{Ze||((0,We.registerTriggers)(),(0,Ve.registerTriggers)(),(0,Xe.registerTriggers)(),
130
129
  (0,Ye.registerTriggers)(),(0,et.registerTriggers)(),(0,tt.createTrigger)("@ez4/a\
131
130
  ws-topic",{"deploy:prepareExecutionPolicy":Je,"deploy:prepareLinkedService":wt,"\
132
131
  deploy:prepareResources":Rt,"deploy:connectResources":At}),Se(),Ee(),Ze=!0)},"re\
133
- gisterTriggers"),wt=i(e=>Qe(e)??_e(e)??null,"prepareLinkedService"),Rt=i(async e=>await qe(
134
- e)||await Ue(e),"prepareQueueResources"),At=i(async e=>{await Promise.all([Ge(e),
135
- Be(e)])},"connectQueueResources");var Pt=i(e=>e.type===d,"isSubscriptionState");0&&(module.exports={SubscriptionServiceName,SubscriptionServiceType,TopicServiceName,
132
+ gisterTriggers"),wt=i(e=>Qe(e)??_e(e)??null,"prepareLinkedService"),Rt=i(e=>qe(e)||
133
+ Ue(e),"prepareQueueResources"),At=i(e=>{Ge(e),Be(e)},"connectQueueResources");var Pt=i(e=>e.type===d,"isSubscriptionState");0&&(module.exports={SubscriptionServiceName,SubscriptionServiceType,TopicServiceName,
136
134
  TopicServiceType,createSubscription,createSubscriptionFunction,createTopic,createTopicStateId,
137
135
  getTopic,getTopicArn,getTopicState,isSubscriptionState,isTopicState,registerTriggers});
138
136
  //# sourceMappingURL=main.cjs.map
package/dist/main.mjs CHANGED
@@ -1,123 +1,121 @@
1
1
  var we=Object.defineProperty;var i=(e,t)=>we(e,"name",{value:t,configurable:!0});import{registerTriggers as Ot}from"@ez4/aws-common";import{registerTriggers as kt}from"@ez4/aws-identity";
2
2
  import{registerTriggers as $t}from"@ez4/aws-function";import{registerTriggers as jt}from"@ez4/aws-queue";
3
3
  import{registerTriggers as Qt}from"@ez4/topic/library";import{createTrigger as qt}from"@ez4/project/library";import{registerProvider as _e}from"@ez4/aws-common";import{applyTagUpdates as De,ReplaceResourceError as Le}from"@ez4/aws-common";import{
4
- getAccountId as Me,getRegion as Oe}from"@ez4/aws-identity";import{deepCompare as ke}from"@ez4/utils";import{getAccountId as Re,getRegion as Ae,createPolicyDocument as Pe}from"@ez4/aws-identity";var y=i((e,t,r)=>`arn:aws:sns:${t}:${r}:${e}`,"buildTopicArn"),k=i(async e=>{let[
4
+ getAccountId as Me,getRegion as Oe}from"@ez4/aws-identity";import{deepCompare as ke}from"@ez4/utils";import{getAccountId as Re,getRegion as Ae,createPolicyDocument as Pe}from"@ez4/aws-identity";var y=i((e,t,r)=>`arn:aws:sns:${t}:${r}:${e}`,"buildTopicArn"),O=i(async e=>{let[
5
5
  t,r]=await Promise.all([Ae(),Re()]);return Pe([{permissions:["sns:Publish"],resourceIds:e.
6
- map(o=>y(`${o}-*`,t,r))}])},"getPolicyDocument");import{SNSClient as Ce,CreateTopicCommand as Ne,DeleteTopicCommand as he,TagResourceCommand as Ie,
6
+ map(o=>y(`${o}-*`,t,r))}])},"getPolicyDocument");import{SNSClient as Ce,CreateTopicCommand as Ne,DeleteTopicCommand as Ie,TagResourceCommand as he,
7
7
  UntagResourceCommand as Fe,NotFoundException as ze}from"@aws-sdk/client-sns";import{
8
- getTagList as $,Logger as b,tryParseArn as C}from"@ez4/aws-common";var S="AWS:SNS/Topic",f="aws:sns.topic";var x=new Ce({}),j=i(async e=>{let{topicName:t,fifoMode:r}=e;return b.logCreate(
9
- S,t),{topicArn:(await x.send(new Ne({Name:t,Attributes:{...r&&{ContentBasedDeduplication:"\
10
- true",FifoThroughputScope:"MessageGroup",FifoTopic:"true"}},Tags:$({...e.tags,ManagedBy:"\
11
- EZ4"})}))).TopicArn}},"createTopic"),Q=i(async e=>{let t=C(e)?.resourceName??e;b.
12
- logDelete(S,t);try{return await x.send(new he({TopicArn:e})),!0}catch(r){if(!(r instanceof
13
- ze))throw r;return!1}},"deleteTopic"),q=i(async(e,t)=>{let r=C(e)?.resourceName??
14
- e;b.logTag(S,r),await x.send(new Ie({ResourceArn:e,Tags:$({...t,ManagedBy:"EZ4"})}))},
15
- "tagTopic"),G=i(async(e,t)=>{let r=C(e)?.resourceName??e;b.logUntag(S,r),await x.
16
- send(new Fe({ResourceArn:e,TagKeys:t}))},"untagTopic");var H=i(()=>({equals:$e,create:_,replace:Qe,preview:je,update:qe,delete:Ge}),"ge\
8
+ getTagList as k,Logger as T,tryParseArn as P}from"@ez4/aws-common";var S="AWS:SNS/Topic",f="aws:sns.topic";var b=new Ce({}),$=i(async e=>{let{topicName:t,fifoMode:r}=e;return T.logCreate(
9
+ S,t),{topicArn:(await b.send(new Ne({Name:t,Attributes:{...r&&{ContentBasedDeduplication:"\
10
+ true",FifoThroughputScope:"MessageGroup",FifoTopic:"true"}},Tags:k({...e.tags,ManagedBy:"\
11
+ EZ4"})}))).TopicArn}},"createTopic"),j=i(async e=>{let t=P(e)?.resourceName??e;T.
12
+ logDelete(S,t);try{return await b.send(new Ie({TopicArn:e})),!0}catch(r){if(!(r instanceof
13
+ ze))throw r;return!1}},"deleteTopic"),Q=i(async(e,t)=>{let r=P(e)?.resourceName??
14
+ e;T.logTag(S,r),await b.send(new he({ResourceArn:e,Tags:k({...t,ManagedBy:"EZ4"})}))},
15
+ "tagTopic"),q=i(async(e,t)=>{let r=P(e)?.resourceName??e;T.logUntag(S,r),await b.
16
+ send(new Fe({ResourceArn:e,TagKeys:t}))},"untagTopic");var G=i(()=>({equals:$e,create:H,replace:Qe,preview:je,update:qe,delete:Ge}),"ge\
17
17
  tTopicHandler"),$e=i((e,t)=>!!e.result&&e.result.topicArn===t.result?.topicArn,"\
18
18
  equalsResource"),je=i((e,t)=>{let r={...e.parameters,dependencies:e.dependencies},
19
19
  o={...t.parameters,dependencies:t.dependencies},n=ke(r,o);if(n.counts)return{...n,
20
20
  name:r.topicName}},"previewResource"),Qe=i(async(e,t)=>{if(t.result)throw new Le(
21
- S,e.entryId,t.entryId);return _(e)},"replaceResource"),_=i(async e=>{let t=e.parameters;
21
+ S,e.entryId,t.entryId);return H(e)},"replaceResource"),H=i(async e=>{let t=e.parameters;
22
22
  if(t.import){let[o,n]=await Promise.all([Oe(),Me()]);return{topicArn:y(t.topicName,
23
- o,n)}}let{topicArn:r}=await j(t);return{topicArn:r}},"createResource"),qe=i(async(e,t)=>{
23
+ o,n)}}let{topicArn:r}=await $(t);return{topicArn:r}},"createResource"),qe=i(async(e,t)=>{
24
24
  let{result:r,parameters:o}=e;r&&!o.import&&await He(r.topicArn,o,t.parameters)},
25
- "updateResource"),Ge=i(async e=>{let{result:t,parameters:r}=e;t&&!r.import&&await Q(
26
- t.topicArn)},"deleteResource"),He=i(async(e,t,r)=>{await De(t.tags,r.tags,o=>q(e,
27
- o),o=>G(e,o))},"checkTagUpdates");var U=i(()=>{_e(f,H())},"registerTopicProvider");import{registerProvider as it}from"@ez4/aws-common";import{ReplaceResourceError as Ve}from"@ez4/aws-common";import{deepCompare as Xe}from"@ez4/utils";import{InvalidParameterError as V,isArn as Ze,parseArn as We}from"@ez4/aws-common";import{NotFoundException as Ue,SNSClient as Be,SubscribeCommand as Ke,UnsubscribeCommand as Je}from"@aws-sdk/client-sns";
28
- import{Logger as B,tryParseArn as K}from"@ez4/aws-common";var a="AWS:SNS/Subscription",l="aws:sns.subscription";var J=new Be({});var Z=i(async e=>{let t=K(e.topicArn)?.resourceName??e.topicArn;B.logCreate(a,t);
29
- let{topicArn:r,protocol:o,endpoint:n}=e;return{subscriptionArn:(await J.send(new Ke(
25
+ "updateResource"),Ge=i(async e=>{let{result:t,parameters:r}=e;t&&!r.import&&await j(
26
+ t.topicArn)},"deleteResource"),He=i(async(e,t,r)=>{await De(t.tags,r.tags,o=>Q(e,
27
+ o),o=>q(e,o))},"checkTagUpdates");var _=i(()=>{_e(f,G())},"registerTopicProvider");import{registerProvider as it}from"@ez4/aws-common";import{ReplaceResourceError as Ve}from"@ez4/aws-common";import{deepCompare as Xe}from"@ez4/utils";import{InvalidParameterError as W,isArn as Ze,parseArn as We}from"@ez4/aws-common";import{NotFoundException as Ue,SNSClient as Be,SubscribeCommand as Ke,UnsubscribeCommand as Je}from"@aws-sdk/client-sns";
28
+ import{Logger as U,tryParseArn as B}from"@ez4/aws-common";var a="AWS:SNS/Subscription",l="aws:sns.subscription";var K=new Be({});var J=i(async e=>{let t=B(e.topicArn)?.resourceName??e.topicArn;U.logCreate(a,t);
29
+ let{topicArn:r,protocol:o,endpoint:n}=e;return{subscriptionArn:(await K.send(new Ke(
30
30
  {TopicArn:r,Protocol:o,Endpoint:n,ReturnSubscriptionArn:!0,Attributes:{...o==="s\
31
- qs"&&{RawMessageDelivery:"true"}}}))).SubscriptionArn}},"createSubscription"),W=i(
32
- async e=>{let t=K(e)?.resourceName??e;B.logDelete(a,t);try{return await J.send(new Je(
31
+ qs"&&{RawMessageDelivery:"true"}}}))).SubscriptionArn}},"createSubscription"),Z=i(
32
+ async e=>{let t=B(e)?.resourceName??e;U.logDelete(a,t);try{return await K.send(new Je(
33
33
  {SubscriptionArn:e})),!0}catch(r){if(!(r instanceof Ue))throw r;return!1}},"dele\
34
- teSubscription");var X=i((e,t)=>{if(!Ze(t))throw new V(e,`endpoint ${t} is not supported.`);let{service:r}=We(
35
- t);switch(r){case"lambda":case"sqs":return r}throw new V(e,`protocol ${r} is not\
36
- supported.`)},"getSubscriptionProtocol");var Y=i(()=>({equals:Ye,create:ee,replace:tt,preview:et,update:rt,delete:ot}),"g\
37
- etSubscriptionHandler"),Ye=i((e,t)=>!!e.result&&e.result.subscriptionArn===t.result?.
34
+ teSubscription");var V=i((e,t)=>{if(!Ze(t))throw new W(e,`endpoint ${t} is not supported.`);let{service:r}=We(
35
+ t);switch(r){case"lambda":case"sqs":return r}throw new W(e,`protocol ${r} is not\
36
+ supported.`)},"getSubscriptionProtocol");var X=i(()=>({equals:Ye,create:Y,replace:tt,preview:et,update:rt,delete:ot}),"ge\
37
+ tSubscriptionHandler"),Ye=i((e,t)=>!!e.result&&e.result.subscriptionArn===t.result?.
38
38
  subscriptionArn,"equalsResource"),et=i((e,t)=>{let r={...e.parameters,dependencies:e.
39
39
  dependencies},o={...t.parameters,dependencies:t.dependencies},n=Xe(r,o,{exclude:{
40
40
  getTopicArn:!0,getEndpoint:!0}});if(n.counts)return{...n,name:r.fromService}},"p\
41
41
  reviewResource"),tt=i(async(e,t,r)=>{if(t.result)throw new Ve(a,e.entryId,t.entryId);
42
- return ee(e,r)},"replaceResource"),ee=i(async(e,t)=>{let r=e.parameters,[o,n]=await Promise.
43
- all([r.getTopicArn(t),r.getEndpoint(t)]),{subscriptionArn:s}=await Z({protocol:X(
44
- a,n),topicArn:o,endpoint:n});return{subscriptionArn:s,topicArn:o,endpoint:n}},"c\
42
+ return Y(e,r)},"replaceResource"),Y=i(async(e,t)=>{let r=e.parameters,[o,n]=await Promise.
43
+ all([r.getTopicArn(t),r.getEndpoint(t)]),{subscriptionArn:p}=await J({protocol:V(
44
+ a,n),topicArn:o,endpoint:n});return{subscriptionArn:p,topicArn:o,endpoint:n}},"c\
45
45
  reateResource"),rt=i(async()=>{},"updateResource"),ot=i(async e=>{let{result:t}=e;
46
- t&&await W(t.subscriptionArn)},"deleteResource");var te=i(()=>{it(l,Y())},"registerSubscriptionProvider");import{isTopicService as L}from"@ez4/topic/library";import{getServiceName as ht}from"@ez4/project/library";import{attachEntry as ct}from"@ez4/stateful";import{toKebabCase as at}from"@ez4/utils";import{IncompleteResourceError as nt}from"@ez4/aws-common";import{hashData as st,
47
- toKebabCase as pt}from"@ez4/utils";var v=class extends Error{static{i(this,"TopicNotFoundError")}constructor(t){super(
48
- `Topic service ${t} wasn't found.`)}};var N=i((e,t=!0)=>st(f,t?pt(e):e),"createTopicStateId"),h=i(e=>e.type===f,"isTop\
49
- icState"),re=i((e,t,r)=>{let o=e.getServiceState(t,r);if(!h(o))throw new v(t);return o},
50
- "getTopicState"),oe=i((e,t,r)=>{let o=r.getDependencies(f).at(0)?.result;if(!o?.
51
- topicArn)throw new nt(e,t,"topicArn");return o.topicArn},"getTopicArn");var E=i((e,t)=>{let r=at(t.topicName),o=t.fifoMode?`${r}.fifo`:r,n=N(o,!1);return ct(
46
+ t&&await Z(t.subscriptionArn)},"deleteResource");var ee=i(()=>{it(l,X())},"registerSubscriptionProvider");import{isTopicService as D}from"@ez4/topic/library";import{getServiceName as It}from"@ez4/project/library";import{attachEntry as ct}from"@ez4/stateful";import{toKebabCase as at}from"@ez4/utils";import{IncompleteResourceError as nt}from"@ez4/aws-common";import{hashData as pt,
47
+ toKebabCase as st}from"@ez4/utils";var x=class extends Error{static{i(this,"TopicNotFoundError")}constructor(t){super(
48
+ `Topic service ${t} wasn't found.`)}};var C=i((e,t=!0)=>pt(f,t?st(e):e),"createTopicStateId"),N=i(e=>e.type===f,"isTop\
49
+ icState"),te=i((e,t,r)=>{let o=e.getServiceState(t,r);if(!N(o))throw new x(t);return o},
50
+ "getTopicState"),re=i((e,t,r)=>{let o=r.getDependencies(f).at(0)?.result;if(!o?.
51
+ topicArn)throw new nt(e,t,"topicArn");return o.topicArn},"getTopicArn");var v=i((e,t)=>{let r=at(t.topicName),o=t.fifoMode?`${r}.fifo`:r,n=C(o,!1);return ct(
52
52
  e,{type:f,entryId:n,dependencies:[],parameters:{...t,topicName:o}})},"createTopi\
53
- c"),Kr=i((e,t)=>{let r=N(t),o=e[r];return o&&h(o)?o:null},"getTopic");import{linkServiceExtras as me}from"@ez4/project/library";import{TopicSubscriptionType as w}from"@ez4/topic/library";
53
+ c"),Kr=i((e,t)=>{let r=C(t),o=e[r];return o&&N(o)?o:null},"getTopic");import{linkServiceContext as ae}from"@ez4/project/library";import{TopicSubscriptionType as E}from"@ez4/topic/library";
54
54
  import{getFunctionState as At,tryGetFunctionState as Pt}from"@ez4/aws-function";
55
- import{InvalidParameterError as D}from"@ez4/aws-common";import{isRoleState as ue}from"@ez4/aws-identity";
56
- import{createLogGroup as Ct}from"@ez4/aws-logs";import{getQueueState as Se}from"@ez4/aws-queue";import{createFunction as lt}from"@ez4/aws-function";import{hashObject as yt}from"@ez4/utils";import{join as mt}from"node:path";import{getDefinitionsObject as ut}from"@ez4/project/library";
57
- import{MappingServiceName as St}from"@ez4/aws-function";import{getFunctionBundle as ft}from"@ez4/aws-common";var ie=i(async(e,t)=>{let{extras:r,debug:o,handler:n,listener:s,messageSchema:p}=e,
55
+ import{InvalidParameterError as z}from"@ez4/aws-common";import{isRoleState as me}from"@ez4/aws-identity";
56
+ import{createLogGroup as Ct}from"@ez4/aws-logs";import{getQueueState as ue}from"@ez4/aws-queue";import{createFunction as lt}from"@ez4/aws-function";import{hashObject as yt}from"@ez4/utils";import{join as mt}from"node:path";import{getDefinitionsObject as ut}from"@ez4/project/library";
57
+ import{MappingServiceName as St}from"@ez4/aws-function";import{getFunctionBundle as ft}from"@ez4/aws-common";var oe=i(async(e,t)=>{let{handler:r,listener:o,messageSchema:n,context:p,debug:s}=e,
58
58
  c=ut(t);return ft(St,{templateFile:mt(import.meta.dirname,"../lib/message.ts"),filePrefix:"\
59
- sns",define:{...c,__EZ4_SCHEMA:p?JSON.stringify(p):"undefined"},handler:n,listener:s,
60
- extras:r,debug:o})},"bundleSubscriptionFunction");var ne=i((e,t,r,o)=>{let{handler:n,messageSchema:s}=o;return lt(e,t,r,{handlerName:"\
59
+ sns",define:{...c,__EZ4_SCHEMA:n?JSON.stringify(n):"undefined"},handler:r,listener:o,
60
+ context:p,debug:s})},"bundleSubscriptionFunction");var ie=i((e,t,r,o)=>{let{handler:n,messageSchema:p}=o;return lt(e,t,r,{handlerName:"\
61
61
  snsEntryPoint",sourceFile:n.sourceFile,functionName:o.functionName,description:o.
62
62
  description,variables:o.variables,timeout:o.timeout,memory:o.memory,debug:o.debug,
63
63
  tags:o.tags,getFunctionFiles:i(()=>[n.sourceFile,n.dependencies],"getFunctionFil\
64
- es"),getFunctionBundle:i(p=>ie(o,p.getConnections()),"getFunctionBundle"),getFunctionHash:i(
65
- ()=>yt({messageSchema:s}),"getFunctionHash")})},"createSubscriptionFunction");import{createPermission as gt,getFunctionArn as dt,getPermission as Tt,isFunctionState as se}from"@ez4/aws-function";
64
+ es"),getFunctionBundle:i(s=>oe(o,[...s.getDependencies(),...s.getConnections()]),
65
+ "getFunctionBundle"),getFunctionHash:i(()=>yt({messageSchema:p}),"getFunctionHas\
66
+ h")})},"createSubscriptionFunction");import{createPermission as gt,getFunctionArn as dt,getPermission as Tt,isFunctionState as ne}from"@ez4/aws-function";
66
67
  import{attachQueuePolicy as bt,getQueueArn as xt,isQueueState as vt}from"@ez4/aws-queue";
67
- import{getAccountId as pe,getRegion as ce}from"@ez4/aws-identity";import{attachEntry as Et}from"@ez4/stateful";
68
- import{hashData as wt}from"@ez4/utils";var I=i((e,t,r,o)=>{let n=t.parameters.topicName,s=[t.entryId,r.entryId];if(se(r)){
68
+ import{getAccountId as pe,getRegion as se}from"@ez4/aws-identity";import{attachEntry as Et}from"@ez4/stateful";
69
+ import{hashData as wt}from"@ez4/utils";var I=i((e,t,r,o)=>{let n=t.parameters.topicName,p=[t.entryId,r.entryId];if(ne(r)){
69
70
  let c=Tt(e,t,r)??gt(e,t,r,{fromService:o.fromService,getPermission:i(async()=>{let[
70
- m,u]=await Promise.all([ce(),pe()]);return{sourceArn:y(n,m,u),principal:"sns.ama\
71
- zonaws.com"}},"getPermission")});s.push(c.entryId)}if(vt(r)){let c=bt(e,r,t,{fromService:o.
72
- fromService,policyGetters:[async()=>{let[m,u]=await Promise.all([ce(),pe()]);return{
73
- principal:"sns.amazonaws.com",sourceArn:y(n,m,u)}}]});s.push(c.entryId)}let p=wt(
74
- l,t.entryId,r.entryId);return Et(e,{type:l,entryId:p,dependencies:s,parameters:{
75
- ...o,getTopicArn:i(c=>oe(S,p,c),"getTopicArn"),getEndpoint:i(c=>se(r)?dt(a,p,c):
76
- xt(a,p,c),"getEndpoint")}})},"createSubscription");import{getServiceName as Rt}from"@ez4/project/library";import{toKebabCase as F}from"@ez4/utils";var z=i((e,t)=>`${F(e.name)}-${F(t)}`,"getInternalName"),ae=i((e,t,r)=>`${Rt(e,r)}\
77
- -${F(t)}`,"getFunctionName");var g=class extends Error{static{i(this,"RoleMissingError")}constructor(){super(
78
- "Execution role for SNS is missing.")}},d=class extends Error{constructor(r){super(
79
- `Imported project ${r} wasn't found.`);this.projectName=r}static{i(this,"Project\
80
- MissingError")}};var T;(o=>(o.LogRetention=90,o.Timeout=90,o.Memory=192))(T||={});var R=i((e,t,r,o,n)=>{if(!n.role||!ue(n.role))throw new g;for(let s of t.subscriptions)
81
- switch(s.type){default:throw new D(a,"subscription not supported.");case w.Lambda:{
82
- if(t.fifoMode)throw new D(a,"lambda subscription not supported for FIFO topics.");
83
- let{handler:p,listener:c}=s,m=z(t,p.name),u=Pt(n,m,o);if(!u){let O=ae(t,p.name,o),
84
- ve=n.getDependencyFiles(p.file),Ee=Ct(e,{retention:s.logRetention??T.LogRetention,
85
- groupName:O,tags:o.tags});u=ne(e,n.role,Ee,{functionName:O,description:p.description,
86
- messageSchema:t.schema,timeout:s.timeout??T.Timeout,memory:s.memory??T.Memory,extras:t.
87
- extras,debug:o.debug,tags:o.tags,handler:{sourceFile:p.file,functionName:p.name,
88
- module:p.module,dependencies:ve},listener:c&&{functionName:c.name,sourceFile:c.file,
89
- module:c.module},variables:{...o.variables,...t.variables,...s.variables}}),n.setServiceState(
90
- u,m,o)}I(e,r,u,{fromService:u.parameters.functionName});break}case w.Queue:{let p=Se(
91
- n,s.service,o);I(e,r,p,{fromService:p.parameters.queueName});break}}},"prepareSu\
92
- bscriptions"),A=i((e,t,r,o)=>{if(!o.role||!ue(o.role))throw new g;for(let n of t.
93
- subscriptions)switch(n.type){default:throw new D(a,"subscription not supported.");case w.
94
- Lambda:{let s=z(t,n.handler.name),p=At(o,s,r);me(e,p.entryId,t.extras);break}case w.
95
- Queue:{let s=Se(o,n.service,r);me(e,s.entryId,t.extras);break}}},"connectSubscri\
96
- ptions");import{getDefinitionName as Nt}from"@ez4/project/library";var P=i((e,t,r)=>{let n=re(e,t.name,r).entryId,s=Nt(n,"topicArn"),p=JSON.stringify(
97
- t.fifoMode??null),c=JSON.stringify(t.schema);return{entryIds:[n],constructor:`ma\
98
- ke(${s}, ${c}, ${p})`,from:"@ez4/aws-topic/client",module:"Client"}},"prepareLin\
99
- kedClient");var fe=i(e=>{let{service:t,options:r,context:o}=e;return L(t)?P(o,t,r):null},"pr\
100
- epareLinkedServices"),le=i(async e=>{let{state:t,service:r,options:o,context:n}=e;
101
- if(!L(r))return!1;let{fifoMode:s}=r,p=E(t,{topicName:ht(r,o),fifoMode:!!s,tags:o.
102
- tags});return n.setServiceState(p,r,o),await R(t,r,p,o,n),!0},"prepareServices"),
103
- ye=i(e=>{let{state:t,service:r,options:o,context:n}=e;L(r)&&A(t,r,o,n)},"connect\
104
- Services");import{isTopicImport as M}from"@ez4/topic/library";import{getServiceName as It}from"@ez4/project/library";var ge=i(e=>{let{service:t,options:r,context:o}=e;if(!M(t))return null;let{project:n}=t,
105
- {imports:s}=r;if(!s||!s[n])throw new d(n);return P(o,t,s[n])},"prepareLinkedImpo\
106
- rts"),de=i(async e=>{let{state:t,service:r,options:o,context:n}=e;if(!M(r))return!1;
107
- let{reference:s,project:p}=r,{imports:c}=o;if(!c||!c[p])throw new d(p);let m=E(t,
108
- {topicName:It(s,c[p]),fifoMode:!!r.fifoMode,import:!0});return n.setServiceState(
109
- m,r,o),await R(t,r,m,o,n),!0},"prepareImports"),Te=i(e=>{let{state:t,service:r,options:o,
110
- context:n}=e;M(r)&&A(t,r,o,n)},"connectImports");import{ServiceType as Ft,ImportType as zt}from"@ez4/topic/library";import{createPolicy as Dt,
71
+ m,u]=await Promise.all([se(),pe()]);return{sourceArn:y(n,m,u),principal:"sns.ama\
72
+ zonaws.com"}},"getPermission")});p.push(c.entryId)}if(vt(r)){let c=bt(e,r,t,{fromService:o.
73
+ fromService,policyGetters:[async()=>{let[m,u]=await Promise.all([se(),pe()]);return{
74
+ principal:"sns.amazonaws.com",sourceArn:y(n,m,u)}}]});p.push(c.entryId)}let s=wt(
75
+ l,t.entryId,r.entryId);return Et(e,{type:l,entryId:s,dependencies:p,parameters:{
76
+ ...o,getTopicArn:i(c=>re(S,s,c),"getTopicArn"),getEndpoint:i(c=>ne(r)?dt(a,s,c):
77
+ xt(a,s,c),"getEndpoint")}})},"createSubscription");import{getServiceName as Rt}from"@ez4/project/library";import{toKebabCase as h}from"@ez4/utils";var F=i((e,t)=>`${h(e.name)}-${h(t)}`,"getInternalName"),ce=i((e,t,r)=>`${Rt(e,r)}\
78
+ -${h(t)}`,"getFunctionName");var g=class extends Error{static{i(this,"RoleMissingError")}constructor(){super(
79
+ "Execution role for SNS is missing.")}};var d;(o=>(o.LogRetention=90,o.Timeout=90,o.Memory=192))(d||={});var w=i((e,t,r,o,n)=>{if(!n.role||!me(n.role))throw new g;for(let p of t.subscriptions)
80
+ switch(p.type){default:throw new z(a,"subscription not supported.");case E.Lambda:{
81
+ if(t.fifoMode)throw new z(a,"lambda subscription not supported for FIFO topics.");
82
+ let{handler:s,listener:c}=p,m=F(t,s.name),u=Pt(n,m,o);if(!u){let M=ce(t,s.name,o),
83
+ ve=n.getDependencyFiles(s.file),Ee=Ct(e,{retention:p.logRetention??d.LogRetention,
84
+ groupName:M,tags:o.tags});u=ie(e,n.role,Ee,{functionName:M,description:s.description,
85
+ messageSchema:t.schema,timeout:p.timeout??d.Timeout,memory:p.memory??d.Memory,context:t.
86
+ context,debug:o.debug,tags:o.tags,handler:{sourceFile:s.file,functionName:s.name,
87
+ module:s.module,dependencies:ve},listener:c&&{functionName:c.name,sourceFile:c.file,
88
+ module:c.module},variables:{...o.variables,...t.variables,...p.variables}}),n.setServiceState(
89
+ u,m,o)}I(e,r,u,{fromService:u.parameters.functionName});break}case E.Queue:{let s=ue(
90
+ n,p.service,o);I(e,r,s,{fromService:s.parameters.queueName});break}}},"prepareSu\
91
+ bscriptions"),R=i((e,t,r,o)=>{if(!o.role||!me(o.role))throw new g;for(let n of t.
92
+ subscriptions)switch(n.type){default:throw new z(a,"subscription not supported.");case E.
93
+ Lambda:{let p=F(t,n.handler.name),s=At(o,p,r);ae(e,s.entryId,t.context);break}case E.
94
+ Queue:{let p=ue(o,n.service,r);ae(e,p.entryId,t.context);break}}},"connectSubscr\
95
+ iptions");import{getDefinitionName as Nt}from"@ez4/project/library";var A=i((e,t,r)=>{let n=te(e,t.name,r).entryId,p=Nt(n,"topicArn"),s=JSON.stringify(
96
+ t.fifoMode??null),c=JSON.stringify(t.schema);return{connectionIds:[n],dependencyIds:[
97
+ n],constructor:`make(${p}, ${c}, ${s})`,from:"@ez4/aws-topic/client",module:"Cli\
98
+ ent"}},"prepareLinkedClient");var Se=i(e=>{let{service:t,options:r,context:o}=e;return D(t)?A(o,t,r):null},"pr\
99
+ epareLinkedServices"),fe=i(e=>{let{state:t,service:r,options:o,context:n}=e;if(!D(
100
+ r))return!1;let{fifoMode:p}=r,s=v(t,{topicName:It(r,o),fifoMode:!!p,tags:o.tags});
101
+ return n.setServiceState(s,r,o),w(t,r,s,o,n),!0},"prepareServices"),le=i(e=>{let{
102
+ state:t,service:r,options:o,context:n}=e;D(r)&&R(t,r,o,n)},"connectServices");import{MissingImportedProjectError as ye}from"@ez4/project/library";import{getServiceName as ht}from"@ez4/project/library";
103
+ import{isTopicImport as L}from"@ez4/topic/library";var ge=i(e=>{let{service:t,options:r,context:o}=e;if(!L(t))return null;let{project:n}=t,
104
+ {imports:p}=r;if(!p||!p[n])throw new ye(n);return A(o,t,p[n])},"prepareLinkedImp\
105
+ orts"),de=i(e=>{let{state:t,service:r,options:o,context:n}=e;if(!L(r))return!1;let{
106
+ reference:p,project:s}=r,{imports:c}=o;if(!c||!c[s])throw new ye(s);let m=v(t,{topicName:ht(
107
+ p,c[s]),fifoMode:!!r.fifoMode,import:!0});return n.setServiceState(m,r,o),w(t,r,
108
+ m,o,n),!0},"prepareImports"),Te=i(e=>{let{state:t,service:r,options:o,context:n}=e;
109
+ L(r)&&R(t,r,o,n)},"connectImports");import{ServiceType as Ft,ImportType as zt}from"@ez4/topic/library";import{createPolicy as Dt,
111
110
  tryGetPolicy as Lt}from"@ez4/aws-identity";import{getServiceName as Mt}from"@ez4/project/library";var be=i(async e=>{let{state:t,serviceType:r,options:o}=e;if(r!==Ft&&r!==zt)return null;
112
- let n=Object.values({options:o,...o.imports}).map(c=>Mt("",c)),[s]=n,p=`${s}-top\
113
- ic-policy`;return Lt(t,p)??Dt(t,{tags:o.tags,policyDocument:await k(n),policyName:p})},
111
+ let n=Object.values({options:o,...o.imports}).map(c=>Mt("",c)),[p]=n,s=`${p}-top\
112
+ ic-policy`;return Lt(t,s)??Dt(t,{tags:o.tags,policyDocument:await O(n),policyName:s})},
114
113
  "prepareExecutionPolicy");var xe=!1,wi=i(()=>{xe||(Ot(),kt(),$t(),jt(),Qt(),qt("@ez4/aws-topic",{"deploy:p\
115
114
  repareExecutionPolicy":be,"deploy:prepareLinkedService":Gt,"deploy:prepareResour\
116
- ces":Ht,"deploy:connectResources":_t}),U(),te(),xe=!0)},"registerTriggers"),Gt=i(
117
- e=>fe(e)??ge(e)??null,"prepareLinkedService"),Ht=i(async e=>await le(e)||await de(
118
- e),"prepareQueueResources"),_t=i(async e=>{await Promise.all([ye(e),Te(e)])},"co\
119
- nnectQueueResources");var Ci=i(e=>e.type===l,"isSubscriptionState");export{a as SubscriptionServiceName,l as SubscriptionServiceType,S as TopicServiceName,
120
- f as TopicServiceType,I as createSubscription,ne as createSubscriptionFunction,E as createTopic,
121
- N as createTopicStateId,Kr as getTopic,oe as getTopicArn,re as getTopicState,Ci as isSubscriptionState,
122
- h as isTopicState,wi as registerTriggers};
115
+ ces":Ht,"deploy:connectResources":_t}),_(),ee(),xe=!0)},"registerTriggers"),Gt=i(
116
+ e=>Se(e)??ge(e)??null,"prepareLinkedService"),Ht=i(e=>fe(e)||de(e),"prepareQueue\
117
+ Resources"),_t=i(e=>{le(e),Te(e)},"connectQueueResources");var Ci=i(e=>e.type===l,"isSubscriptionState");export{a as SubscriptionServiceName,l as SubscriptionServiceType,S as TopicServiceName,
118
+ f as TopicServiceType,I as createSubscription,ie as createSubscriptionFunction,v as createTopic,
119
+ C as createTopicStateId,Kr as getTopic,re as getTopicArn,te as getTopicState,Ci as isSubscriptionState,
120
+ N as isTopicState,wi as registerTriggers};
123
121
  //# sourceMappingURL=main.mjs.map
@@ -1,6 +1,6 @@
1
1
  import type { TopicMessageSchema } from '@ez4/topic/library';
2
2
  import type { FunctionParameters } from '@ez4/aws-function';
3
- import type { ExtraSource } from '@ez4/project/library';
3
+ import type { ContextSource } from '@ez4/project/library';
4
4
  export type SubscriptionFunction = {
5
5
  functionName: string;
6
6
  sourceFile: string;
@@ -12,7 +12,7 @@ export type SubscriptionEntryPoint = SubscriptionFunction & {
12
12
  export type SubscriptionFunctionParameters = Omit<FunctionParameters, 'getFunctionFiles' | 'getFunctionBundle' | 'getFunctionHash' | 'sourceFile' | 'handlerName'> & {
13
13
  handler: SubscriptionEntryPoint;
14
14
  listener?: SubscriptionFunction;
15
- messageSchema?: TopicMessageSchema | null;
16
- extras?: Record<string, ExtraSource>;
15
+ messageSchema?: TopicMessageSchema;
16
+ context?: Record<string, ContextSource>;
17
17
  debug?: boolean;
18
18
  };
@@ -1,3 +1,3 @@
1
+ import type { DeployOptions, EventContext, ContextSource } from '@ez4/project/library';
1
2
  import type { TopicImport, TopicService } from '@ez4/topic/library';
2
- import type { DeployOptions, EventContext, ExtraSource } from '@ez4/project/library';
3
- export declare const prepareLinkedClient: (context: EventContext, service: TopicService | TopicImport, options: DeployOptions) => ExtraSource;
3
+ export declare const prepareLinkedClient: (context: EventContext, service: TopicService | TopicImport, options: DeployOptions) => ContextSource;
@@ -1,7 +1,3 @@
1
1
  export declare class RoleMissingError extends Error {
2
2
  constructor();
3
3
  }
4
- export declare class ProjectMissingError extends Error {
5
- projectName: string;
6
- constructor(projectName: string);
7
- }
@@ -1,4 +1,4 @@
1
1
  import type { ConnectResourceEvent, PrepareResourceEvent, ServiceEvent } from '@ez4/project/library';
2
- export declare const prepareLinkedImports: (event: ServiceEvent) => import("@ez4/project/library").ExtraSource | null;
3
- export declare const prepareImports: (event: PrepareResourceEvent) => Promise<boolean>;
2
+ export declare const prepareLinkedImports: (event: ServiceEvent) => import("@ez4/project/library").ContextSource | null;
3
+ export declare const prepareImports: (event: PrepareResourceEvent) => boolean;
4
4
  export declare const connectImports: (event: ConnectResourceEvent) => void;
@@ -1,4 +1,4 @@
1
1
  import type { ConnectResourceEvent, PrepareResourceEvent, ServiceEvent } from '@ez4/project/library';
2
- export declare const prepareLinkedServices: (event: ServiceEvent) => import("@ez4/project/library").ExtraSource | null;
3
- export declare const prepareServices: (event: PrepareResourceEvent) => Promise<boolean>;
2
+ export declare const prepareLinkedServices: (event: ServiceEvent) => import("@ez4/project/library").ContextSource | null;
3
+ export declare const prepareServices: (event: PrepareResourceEvent) => boolean;
4
4
  export declare const connectServices: (event: ConnectResourceEvent) => void;
package/lib/message.ts CHANGED
@@ -39,8 +39,8 @@ export async function snsEntryPoint(event: SNSEvent, context: Context): Promise<
39
39
  };
40
40
 
41
41
  await onReady(currentRequest);
42
-
43
42
  await handle(currentRequest, __EZ4_CONTEXT);
43
+ await onDone(currentRequest);
44
44
  }
45
45
  } catch (error) {
46
46
  await onError(error, currentRequest ?? request);
@@ -69,6 +69,16 @@ const onReady = async (request: Topic.Incoming<Topic.Message>) => {
69
69
  );
70
70
  };
71
71
 
72
+ const onDone = async (request: Topic.Incoming<Topic.Message>) => {
73
+ return dispatch(
74
+ {
75
+ type: ServiceEventType.Done,
76
+ request
77
+ },
78
+ __EZ4_CONTEXT
79
+ );
80
+ };
81
+
72
82
  const onError = async (error: unknown, request: Topic.Request | Topic.Incoming<Topic.Message>) => {
73
83
  console.error(error);
74
84
 
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.30.0",
4
+ "version": "0.32.0",
5
5
  "author": "Silas B.",
6
6
  "license": "MIT",
7
7
  "type": "module",
@@ -51,18 +51,18 @@
51
51
  },
52
52
  "dependencies": {
53
53
  "@aws-sdk/client-sns": "^3.913.0",
54
- "@ez4/aws-common": "^0.30.0",
55
- "@ez4/aws-identity": "^0.30.0",
56
- "@ez4/aws-function": "^0.30.0",
57
- "@ez4/aws-logs": "^0.30.0",
58
- "@ez4/aws-queue": "^0.30.0",
59
- "@ez4/topic": "^0.30.0",
60
- "@ez4/project": "^0.30.0",
61
- "@ez4/queue": "^0.30.0",
62
- "@ez4/schema": "^0.30.0",
63
- "@ez4/stateful": "^0.30.0",
64
- "@ez4/transform": "^0.30.0",
65
- "@ez4/validator": "^0.30.0",
66
- "@ez4/utils": "^0.30.0"
54
+ "@ez4/aws-common": "^0.32.0",
55
+ "@ez4/aws-identity": "^0.32.0",
56
+ "@ez4/aws-function": "^0.32.0",
57
+ "@ez4/aws-logs": "^0.32.0",
58
+ "@ez4/aws-queue": "^0.32.0",
59
+ "@ez4/topic": "^0.32.0",
60
+ "@ez4/project": "^0.32.0",
61
+ "@ez4/queue": "^0.32.0",
62
+ "@ez4/schema": "^0.32.0",
63
+ "@ez4/stateful": "^0.32.0",
64
+ "@ez4/transform": "^0.32.0",
65
+ "@ez4/validator": "^0.32.0",
66
+ "@ez4/utils": "^0.32.0"
67
67
  }
68
68
  }