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