@ez4/aws-topic 0.39.0 → 0.41.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/client.cjs CHANGED
@@ -1,10 +1,10 @@
1
1
  "use strict";var r=Object.defineProperty;var T=Object.getOwnPropertyDescriptor;var f=Object.getOwnPropertyNames;var I=Object.prototype.hasOwnProperty;var p=(e,t)=>r(e,"name",{value:t,configurable:!0});var S=(e,t)=>{for(var s in t)r(e,s,{get:t[s],enumerable:!0})},y=(e,t,s,i)=>{if(t&&
2
2
  typeof t=="object"||typeof t=="function")for(let o of f(t))!I.call(e,o)&&o!==s&&
3
3
  r(e,o,{get:()=>t[o],enumerable:!(i=T(t,o))||i.enumerable});return e};var w=e=>y(r({},"__esModule",{value:!0}),e);var b={};S(b,{Client:()=>d});module.exports=w(b);var n=require("@ez4/topic/utils"),
4
- a=require("@aws-sdk/client-sns"),g=require("@ez4/common/runtime"),u=require("@ez4/utils");var d;(s=>{let e=new a.SNSClient;s.make=p((i,o,c)=>new class{async sendMessage(m){
5
- let M=await(0,n.getJsonStringMessage)(m,o),l=g.Runtime.getScope();await e.send(new a.PublishCommand(
4
+ a=require("@aws-sdk/client-sns"),g=require("@ez4/utils"),u=require("@ez4/common");var d;(s=>{let e=new a.SNSClient;s.make=p((i,o,c)=>new class{async sendMessage(m){
5
+ let M=await(0,n.getJsonStringMessage)(m,o),l=u.Runtime.getScope();await e.send(new a.PublishCommand(
6
6
  {TargetArn:i,Message:M,...c&&{...P(m,c)},MessageAttributes:{"EZ4.TRACE_ID":{StringValue:l?.
7
- traceId??(0,u.getRandomUUID)(),DataType:"String"}}}))}},"make")})(d||={});var P=p(
7
+ traceId??(0,g.getRandomUUID)(),DataType:"String"}}}))}},"make")})(d||={});var P=p(
8
8
  (e,t)=>{let s={};if(t){let{groupId:i,uniqueId:o}=t;if(s.MessageGroupId=`${e[i]}`,
9
9
  !s.MessageGroupId)throw new n.MissingMessageGroupError(i.toString());o&&e[o]&&(s.
10
10
  MessageDeduplicationId=`${e[o]}`)}return s},"getFifoParameters");0&&(module.exports={Client});
package/dist/client.mjs CHANGED
@@ -1,8 +1,8 @@
1
1
  var m=Object.defineProperty;var r=(e,s)=>m(e,"name",{value:s,configurable:!0});import{getJsonStringMessage as g,MissingMessageGroupError as u}from"@ez4/topic/utils";
2
- import{PublishCommand as d,SNSClient as M}from"@aws-sdk/client-sns";import{Runtime as l}from"@ez4/common/runtime";
3
- import{getRandomUUID as T}from"@ez4/utils";var f;(t=>{let e=new M;t.make=r((i,o,n)=>new class{async sendMessage(a){let p=await g(
4
- a,o),c=l.getScope();await e.send(new d({TargetArn:i,Message:p,...n&&{...I(a,n)},
5
- MessageAttributes:{"EZ4.TRACE_ID":{StringValue:c?.traceId??T(),DataType:"String"}}}))}},
2
+ import{PublishCommand as d,SNSClient as M}from"@aws-sdk/client-sns";import{getRandomUUID as l}from"@ez4/utils";
3
+ import{Runtime as T}from"@ez4/common";var f;(t=>{let e=new M;t.make=r((i,o,n)=>new class{async sendMessage(a){let p=await g(
4
+ a,o),c=T.getScope();await e.send(new d({TargetArn:i,Message:p,...n&&{...I(a,n)},
5
+ MessageAttributes:{"EZ4.TRACE_ID":{StringValue:c?.traceId??l(),DataType:"String"}}}))}},
6
6
  "make")})(f||={});var I=r((e,s)=>{let t={};if(s){let{groupId:i,uniqueId:o}=s;if(t.
7
7
  MessageGroupId=`${e[i]}`,!t.MessageGroupId)throw new u(i.toString());o&&e[o]&&(t.
8
8
  MessageDeduplicationId=`${e[o]}`)}return t},"getFifoParameters");export{f as Client};
package/dist/main.cjs CHANGED
@@ -1,141 +1,144 @@
1
- "use strict";var I=Object.defineProperty;var at=Object.getOwnPropertyDescriptor;var mt=Object.getOwnPropertyNames;var ut=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})},ft=(e,t,r,o)=>{if(t&&
2
- typeof t=="object"||typeof t=="function")for(let n of mt(t))!ut.call(e,n)&&n!==r&&
3
- I(e,n,{get:()=>t[n],enumerable:!(o=at(t,n))||o.enumerable});return e};var lt=e=>ft(I({},"__esModule",{value:!0}),e);var zt={};St(zt,{SubscriptionServiceName:()=>m,SubscriptionServiceType:()=>d,TopicServiceName:()=>l,
4
- TopicServiceType:()=>y,createSubscription:()=>j,createSubscriptionFunction:()=>W,
5
- createTopic:()=>C,createTopicStateId:()=>O,getTopic:()=>Pt,getTopicArn:()=>V,getTopicState:()=>J,
6
- isSubscriptionState:()=>Ft,isTopicState:()=>k,registerTriggers:()=>Ct});module.exports=
7
- lt(zt);var Ve=require("@ez4/aws-common"),We=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 Se=require("@ez4/aws-common");var z=require("@ez4/aws-common"),L=require("@ez4/aws-identity"),ae=require("@ez4/utils");var v=require("@ez4/aws-identity");var E=i((e,t,r)=>`arn:aws:sns:${t}:${r}:${e}`,"buildTopicArn"),ie=i(async e=>{let[
9
- t,r]=await Promise.all([(0,v.getRegion)(),(0,v.getAccountId)()]);return(0,v.createPolicyDocument)(
10
- [{permissions:["sns:Publish"],resourceIds:e.map(o=>E(`${o}-*`,t,r))}])},"getPoli\
11
- cyDocument");var u=require("@aws-sdk/client-sns"),S=require("@ez4/aws-common");var l="AWS:SNS/Topic",y="aws:sns.topic";var F=new u.SNSClient({}),ne=i(async e=>{let{topicName:t,fifoMode:r}=e;return S.Logger.
12
- logCreate(l,t),{topicArn:(await F.send(new u.CreateTopicCommand({Name:t,Attributes:{
13
- ...r&&{ContentBasedDeduplication:"true",FifoThroughputScope:"MessageGroup",FifoTopic:"\
14
- true"}},Tags:(0,S.getTagList)({...e.tags,ManagedBy:"EZ4"})}))).TopicArn}},"creat\
15
- eTopic"),pe=i(async e=>{let t=(0,S.tryParseArn)(e)?.resourceName??e;S.Logger.logDelete(
16
- l,t);try{return await F.send(new u.DeleteTopicCommand({TopicArn:e})),!0}catch(r){
17
- if(!(r instanceof u.NotFoundException))throw r;return!1}},"deleteTopic"),ce=i(async(e,t)=>{
18
- let r=(0,S.tryParseArn)(e)?.resourceName??e;S.Logger.logTag(l,r),await F.send(new u.TagResourceCommand(
19
- {ResourceArn:e,Tags:(0,S.getTagList)({...t,ManagedBy:"EZ4"})}))},"tagTopic"),se=i(
20
- async(e,t)=>{let r=(0,S.tryParseArn)(e)?.resourceName??e;S.Logger.logUntag(l,r),
21
- await F.send(new u.UntagResourceCommand({ResourceArn:e,TagKeys:t}))},"untagTopic");var me=i(()=>({equals:yt,create:ue,replace:dt,preview:gt,update:Tt,delete:bt}),"\
22
- getTopicHandler"),yt=i((e,t)=>!!e.result&&e.result.topicArn===t.result?.topicArn,
23
- "equalsResource"),gt=i((e,t)=>{let r={...e.parameters,dependencies:e.dependencies},
24
- o={...t.parameters,dependencies:t.dependencies},n=(0,ae.deepCompare)(r,o);if(n.counts)
25
- return{...n,name:r.topicName}},"previewResource"),dt=i(async(e,t)=>{if(t.result)
26
- throw new z.ReplaceResourceError(l,e.entryId,t.entryId);return ue(e)},"replaceRe\
27
- source"),ue=i(async e=>{let t=e.parameters;if(t.import){let[o,n]=await Promise.all(
28
- [(0,L.getRegion)(),(0,L.getAccountId)()]);return{topicArn:E(t.topicName,o,n)}}let{
29
- topicArn:r}=await ne(t);return{topicArn:r}},"createResource"),Tt=i(async(e,t)=>{
30
- let{result:r,parameters:o}=e;r&&!o.import&&await xt(r.topicArn,o,t.parameters)},
31
- "updateResource"),bt=i(async e=>{let{result:t,parameters:r}=e;t&&!r.import&&await pe(
32
- t.topicArn)},"deleteResource"),xt=i(async(e,t,r)=>{await(0,z.applyTagUpdates)(t.
33
- tags,r.tags,o=>ce(e,o),o=>se(e,o))},"checkTagUpdates");var fe=i(()=>{(0,Se.tryRegisterProvider)(y,me())},"registerTopicProvider");var Ee=require("@ez4/aws-common");var Te=require("@ez4/aws-common"),be=require("@ez4/utils");var b=require("@ez4/aws-common");var T=require("@aws-sdk/client-sns"),R=require("@ez4/aws-common");var m="AWS:SNS/Subscription",d="aws:sns.subscription";var le=new T.SNSClient({});var ye=i(async e=>{let t=(0,R.tryParseArn)(e.topicArn)?.resourceName??e.topicArn;
34
- R.Logger.logCreate(m,t);let{topicArn:r,protocol:o,endpoint:n}=e;return{subscriptionArn:(await le.
35
- send(new T.SubscribeCommand({TopicArn:r,Protocol:o,Endpoint:n,ReturnSubscriptionArn:!0,
36
- Attributes:{...o==="sqs"&&{RawMessageDelivery:"true"}}}))).SubscriptionArn}},"cr\
37
- eateSubscription"),ge=i(async e=>{let t=(0,R.tryParseArn)(e)?.resourceName??e;R.Logger.
38
- logDelete(m,t);try{return await le.send(new T.UnsubscribeCommand({SubscriptionArn:e})),
39
- !0}catch(r){if(!(r instanceof T.NotFoundException))throw r;return!1}},"deleteSub\
40
- scription");var de=i((e,t)=>{if(!(0,b.isArn)(t))throw new b.InvalidParameterError(e,`endpoin\
41
- t ${t} is not supported.`);let{service:r}=(0,b.parseArn)(t);switch(r){case"lambd\
42
- a":case"sqs":return r}throw new b.InvalidParameterError(e,`protocol ${r} is not \
43
- supported.`)},"getSubscriptionProtocol");var xe=i(()=>({equals:vt,create:ve,replace:Rt,preview:Et,update:wt,delete:At}),"\
44
- getSubscriptionHandler"),vt=i((e,t)=>!!e.result&&e.result.subscriptionArn===t.result?.
45
- subscriptionArn,"equalsResource"),Et=i((e,t)=>{let r={...e.parameters,dependencies:e.
46
- dependencies},o={...t.parameters,dependencies:t.dependencies},n=(0,be.deepCompare)(
1
+ "use strict";var F=Object.defineProperty;var mt=Object.getOwnPropertyDescriptor;var ut=Object.getOwnPropertyNames;var St=Object.prototype.hasOwnProperty;var i=(t,e)=>F(t,"name",{value:e,configurable:!0});var ft=(t,e)=>{for(var r in e)F(t,r,{get:e[r],enumerable:!0})},lt=(t,e,r,o)=>{if(e&&
2
+ typeof e=="object"||typeof e=="function")for(let n of ut(e))!St.call(t,n)&&n!==r&&
3
+ F(t,n,{get:()=>e[n],enumerable:!(o=mt(e,n))||o.enumerable});return t};var yt=t=>lt(F({},"__esModule",{value:!0}),t);var zt={};ft(zt,{SubscriptionServiceName:()=>m,SubscriptionServiceType:()=>T,TopicServiceName:()=>l,
4
+ TopicServiceType:()=>y,createSubscription:()=>j,createSubscriptionFunction:()=>X,
5
+ createTopic:()=>h,createTopicStateId:()=>M,getTopic:()=>Pt,getTopicArn:()=>W,getTopicState:()=>V,
6
+ isSubscriptionState:()=>Ft,isTopicState:()=>k,registerTriggers:()=>ht});module.exports=
7
+ yt(zt);var We=require("@ez4/aws-common"),Xe=require("@ez4/aws-identity"),Ye=require("@ez4/aws-function"),
8
+ et=require("@ez4/aws-queue"),tt=require("@ez4/topic/library"),rt=require("@ez4/project/library");var ye=require("@ez4/aws-common");var f=require("@ez4/aws-common"),z=require("@ez4/aws-identity"),Se=require("@ez4/utils");var v=require("@ez4/aws-identity");var E=i((t,e,r)=>`arn:aws:sns:${e}:${r}:${t}`,"buildTopicArn"),ne=i(async t=>{let[
9
+ e,r]=await Promise.all([(0,v.getRegion)(),(0,v.getAccountId)()]);return(0,v.createPolicyDocument)(
10
+ [{permissions:["sns:Publish"],resourceIds:t.map(o=>E(`${o}-*`,e,r))}])},"getPoli\
11
+ cyDocument");var S=require("@aws-sdk/client-sns"),J=require("@ez4/aws-common");var pe=require("@ez4/aws-common"),ce=require("@aws-sdk/client-sns");var d=i(()=>new ce.SNSClient((0,pe.getAwsClientOptions)()),"getSNSClient");var se=i(async(t,e)=>{t.update("Creating topic");let{topicName:r,fifoMode:o}=e;return{
12
+ topicArn:(await d().send(new S.CreateTopicCommand({Name:r,Attributes:{...o&&{ContentBasedDeduplication:"\
13
+ true",FifoThroughputScope:"MessageGroup",FifoTopic:"true"}},Tags:(0,J.getTagList)(
14
+ {...e.tags,ManagedBy:"EZ4"})}))).TopicArn}},"createTopic"),ae=i(async(t,e)=>{t.update(
15
+ "Deleting topic");try{return await d().send(new S.DeleteTopicCommand({TopicArn:e})),
16
+ !0}catch(r){if(!(r instanceof S.NotFoundException))throw r;return!1}},"deleteTop\
17
+ ic"),me=i(async(t,e,r)=>{t.update("Tag topic"),await d().send(new S.TagResourceCommand(
18
+ {ResourceArn:e,Tags:(0,J.getTagList)({...r,ManagedBy:"EZ4"})}))},"tagTopic"),ue=i(
19
+ async(t,e,r)=>{t.update("Untag topic"),await d().send(new S.UntagResourceCommand(
20
+ {ResourceArn:e,TagKeys:r}))},"untagTopic");var l="AWS:SNS/Topic",y="aws:sns.topic";var fe=i(()=>({equals:gt,create:le,replace:Tt,preview:dt,update:bt,delete:xt}),"\
21
+ getTopicHandler"),gt=i((t,e)=>!!t.result&&t.result.topicArn===e.result?.topicArn,
22
+ "equalsResource"),dt=i((t,e)=>{let r={...t.parameters,dependencies:t.dependencies},
23
+ o={...e.parameters,dependencies:e.dependencies},n=(0,Se.deepCompare)(r,o);if(n.counts)
24
+ return{...n,name:r.topicName}},"previewResource"),Tt=i(async(t,e)=>{if(e.result)
25
+ throw new f.ReplaceResourceError(l,t.entryId,e.entryId);return le(t)},"replaceRe\
26
+ source"),le=i(t=>{let{parameters:e}=t;return f.OperationLogger.logExecution(l,e.
27
+ topicName,"creation",async r=>{if(e.import){let[n,p]=await Promise.all([(0,z.getRegion)(),
28
+ (0,z.getAccountId)()]);return{topicArn:E(e.topicName,n,p)}}let{topicArn:o}=await se(
29
+ r,e);return{topicArn:o}})},"createResource"),bt=i((t,e)=>{let{result:r,parameters:o}=t,
30
+ {topicName:n}=o;if(!r)throw new f.CorruptedResourceError(l,n);return o.import?Promise.
31
+ resolve(r):f.OperationLogger.logExecution(l,n,"updates",async p=>(await vt(p,r.topicArn,
32
+ o,e.parameters),r))},"updateResource"),xt=i(async t=>{let{result:e,parameters:r}=t;
33
+ !e||r.import||await f.OperationLogger.logExecution(l,r.topicName,"deletion",async o=>{
34
+ await ae(o,e.topicArn)})},"deleteResource"),vt=i(async(t,e,r,o)=>{await(0,f.applyTagUpdates)(
35
+ r.tags,o.tags,n=>me(t,e,n),n=>ue(t,e,n))},"checkTagUpdates");var ge=i(()=>{(0,ye.tryRegisterProvider)(y,fe())},"registerTopicProvider");var we=require("@ez4/aws-common");var P=require("@ez4/aws-common"),xe=require("@ez4/utils");var b=require("@ez4/aws-common");var w=require("@aws-sdk/client-sns");var de=i(async(t,e)=>{t.update("Creating topic subscription");let{topicArn:r,protocol:o,
36
+ endpoint:n}=e;return{subscriptionArn:(await d().send(new w.SubscribeCommand({TopicArn:r,
37
+ Protocol:o,Endpoint:n,ReturnSubscriptionArn:!0,Attributes:{...o==="sqs"&&{RawMessageDelivery:"\
38
+ true"}}}))).SubscriptionArn}},"createSubscription"),Te=i(async(t,e)=>{t.update("\
39
+ Deleting topic subscription");try{return await d().send(new w.UnsubscribeCommand(
40
+ {SubscriptionArn:e})),!0}catch(r){if(!(r instanceof w.NotFoundException))throw r;
41
+ return!1}},"deleteSubscription");var be=i((t,e)=>{if(!(0,b.isArn)(e))throw new b.InvalidParameterError(t,`endpoin\
42
+ t ${e} is not supported.`);let{service:r}=(0,b.parseArn)(e);switch(r){case"lambd\
43
+ a":case"sqs":return r}throw new b.InvalidParameterError(t,`protocol ${r} is not \
44
+ supported.`)},"getSubscriptionProtocol");var m="AWS:SNS/Subscription",T="aws:sns.subscription";var ve=i(()=>({equals:Et,create:Ee,replace:Rt,preview:wt,update:At,delete:Ct}),"\
45
+ getSubscriptionHandler"),Et=i((t,e)=>!!t.result&&t.result.subscriptionArn===e.result?.
46
+ subscriptionArn,"equalsResource"),wt=i((t,e)=>{let r={...t.parameters,dependencies:t.
47
+ dependencies},o={...e.parameters,dependencies:e.dependencies},n=(0,xe.deepCompare)(
47
48
  r,o,{exclude:{getTopicArn:!0,getEndpoint:!0}});if(n.counts)return{...n,name:r.fromService}},
48
- "previewResource"),Rt=i(async(e,t,r)=>{if(t.result)throw new Te.ReplaceResourceError(
49
- m,e.entryId,t.entryId);return ve(e,r)},"replaceResource"),ve=i(async(e,t)=>{let r=e.
50
- parameters,[o,n]=await Promise.all([r.getTopicArn(t),r.getEndpoint(t)]),{subscriptionArn:p}=await ye(
51
- {protocol:de(m,n),topicArn:o,endpoint:n});return{subscriptionArn:p,topicArn:o,endpoint:n}},
52
- "createResource"),wt=i(async()=>{},"updateResource"),At=i(async e=>{let{result:t}=e;
53
- t&&await ge(t.subscriptionArn)},"deleteResource");var Re=i(()=>{(0,Ee.tryRegisterProvider)(d,xe())},"registerSubscriptionProvider");var U=require("@ez4/topic/library"),Qe=require("@ez4/project/library");var Ae=require("@ez4/stateful"),Pe=require("@ez4/utils");var we=require("@ez4/aws-common"),M=require("@ez4/utils");var D=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"),J=i((e,t,r)=>{let o=e.getServiceState(t,r);if(!k(
56
- o))throw new D(t);return o},"getTopicState"),V=i((e,t,r)=>{let o=r.getDependencies(
57
- y).at(0)?.result;if(!o?.topicArn)throw new we.IncompleteResourceError(e,t,"topic\
58
- Arn");return o.topicArn},"getTopicArn");var C=i((e,t)=>{let r=(0,Pe.toKebabCase)(t.topicName),o=t.fifoMode?`${r}.fifo`:r,
59
- n=O(o,!1);return(0,Ae.attachEntry)(e,{type:y,entryId:n,dependencies:[],parameters:{
60
- ...t,topicName:o}})},"createTopic"),Pt=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"),je=require("@ez4/aws-logs"),
63
- te=require("@ez4/aws-queue");var ze=require("@ez4/aws-function"),Le=require("@ez4/utils");var Ce=require("node:path"),Ne=require("@ez4/project/library"),he=require("@ez4/aws-function"),
64
- Ie=require("@ez4/aws-common");var Fe=i(async(e,t)=>{let{handler:r,listener:o,messageSchema:n,context:p,debug:c}=e,
65
- s=(0,Ne.getDefinitionsObject)(t);return(0,Ie.getFunctionBundle)(he.MappingServiceName,
66
- {templateFile:(0,Ce.join)(__dirname,"../lib/message.ts"),filePrefix:"sns",define:{
49
+ "previewResource"),Rt=i(async(t,e,r)=>{if(e.result)throw new P.ReplaceResourceError(
50
+ m,t.entryId,e.entryId);return Ee(t,r)},"replaceResource"),Ee=i((t,e)=>{let{parameters:r}=t;
51
+ return P.OperationLogger.logExecution(m,r.fromService,"creation",async o=>{let[n,
52
+ p]=await Promise.all([r.getTopicArn(e),r.getEndpoint(e)]),{subscriptionArn:c}=await de(
53
+ o,{protocol:be(m,p),topicArn:n,endpoint:p});return{subscriptionArn:c,topicArn:n,
54
+ endpoint:p}})},"createResource"),At=i(async()=>{},"updateResource"),Ct=i(async t=>{
55
+ let{result:e,parameters:r}=t;e&&await P.OperationLogger.logExecution(m,r.fromService,
56
+ "deletion",async o=>{await Te(o,e.subscriptionArn)})},"deleteResource");var Re=i(()=>{(0,we.tryRegisterProvider)(T,ve())},"registerSubscriptionProvider");var U=require("@ez4/topic/library"),Qe=require("@ez4/project/library");var Ce=require("@ez4/stateful"),Pe=require("@ez4/utils");var Ae=require("@ez4/aws-common"),D=require("@ez4/utils");var O=class extends Error{static{i(this,"TopicNotFoundError")}constructor(e){super(
57
+ `Topic service ${e} wasn't found.`)}};var M=i((t,e=!0)=>(0,D.hashData)(y,e?(0,D.toKebabCase)(t):t),"createTopicStateId"),
58
+ k=i(t=>t.type===y,"isTopicState"),V=i((t,e,r)=>{let o=t.getServiceState(e,r);if(!k(
59
+ o))throw new O(e);return o},"getTopicState"),W=i((t,e,r)=>{let o=r.getDependencies(
60
+ y).at(0)?.result;if(!o?.topicArn)throw new Ae.IncompleteResourceError(t,e,"topic\
61
+ Arn");return o.topicArn},"getTopicArn");var h=i((t,e)=>{let r=(0,Pe.toKebabCase)(e.topicName),o=e.fifoMode?`${r}.fifo`:r,
62
+ n=M(o,!1);return(0,Ce.attachEntry)(t,{type:y,entryId:n,dependencies:[],parameters:{
63
+ ...e,topicName:o}})},"createTopic"),Pt=i((t,e)=>{let r=M(e),o=t[r];return o&&k(o)?
64
+ o:null},"getTopic");var ee=require("@ez4/project/library"),N=require("@ez4/topic/library"),Q=require("@ez4/aws-function"),
65
+ q=require("@ez4/aws-common"),te=require("@ez4/aws-identity"),$e=require("@ez4/aws-logs"),
66
+ re=require("@ez4/aws-queue");var ze=require("@ez4/aws-function"),Oe=require("@ez4/utils");var he=require("node:path"),Ie=require("@ez4/project/library"),Ne=require("@ez4/aws-function"),
67
+ Le=require("@ez4/aws-common");var Fe=i(async(t,e)=>{let{handler:r,listener:o,messageSchema:n,context:p,debug:c}=t,
68
+ s=(0,Ie.getDefinitionsObject)(e);return(0,Le.getFunctionBundle)(Ne.MappingServiceName,
69
+ {templateFile:(0,he.join)(__dirname,"../lib/message.ts"),filePrefix:"sns",define:{
67
70
  ...s,__EZ4_SCHEMA:n?JSON.stringify(n):"undefined"},handler:r,listener:o,context:p,
68
- debug:c})},"bundleSubscriptionFunction");var W=i((e,t,r,o)=>{let{handler:n,variables:p,architecture:c,messageSchema:s}=o;
69
- return(0,ze.createFunction)(e,t,r,{handlerName:"snsEntryPoint",sourceFile:n.sourceFile,
71
+ debug:c})},"bundleSubscriptionFunction");var X=i((t,e,r,o)=>{let{handler:n,variables:p,architecture:c,messageSchema:s}=o;
72
+ return(0,ze.createFunction)(t,e,r,{handlerName:"snsEntryPoint",sourceFile:n.sourceFile,
70
73
  functionName:o.functionName,description:o.description,architecture:o.architecture,
71
74
  runtime:o.runtime,release:o.release,timeout:o.timeout,memory:o.memory,debug:o.debug,
72
- tags:o.tags,getFunctionVariables:i(()=>p.reduce((a,f)=>({...a,...f}),{}),"getFun\
75
+ tags:o.tags,getFunctionVariables:i(()=>p.reduce((a,u)=>({...a,...u}),{}),"getFun\
73
76
  ctionVariables"),getFunctionFiles:i(()=>[n.sourceFile,n.dependencies],"getFuncti\
74
77
  onFiles"),getFunctionBundle:i(a=>Fe(o,[...a.getDependencies(),...a.getConnections()]),
75
- "getFunctionBundle"),getFunctionHash:i(()=>(0,Le.hashObject)({architecture:c,messageSchema:s}),
76
- "getFunctionHash")})},"createSubscriptionFunction");var g=require("@ez4/aws-function"),A=require("@ez4/aws-queue"),w=require("@ez4/aws-identity"),
77
- De=require("@ez4/stateful"),Me=require("@ez4/utils");var j=i((e,t,r,o)=>{let n=t.parameters.topicName,p=[t.entryId,r.entryId];if((0,g.isFunctionState)(
78
- r)){let s=(0,g.getPermission)(e,t,r)??(0,g.createPermission)(e,t,r,{fromService:o.
79
- fromService,getPermission:i(async()=>{let[a,f]=await Promise.all([(0,w.getRegion)(),
80
- (0,w.getAccountId)()]);return{sourceArn:E(n,a,f),principal:"sns.amazonaws.com"}},
78
+ "getFunctionBundle"),getFunctionHash:i(()=>(0,Oe.hashObject)({architecture:c,messageSchema:s}),
79
+ "getFunctionHash")})},"createSubscriptionFunction");var g=require("@ez4/aws-function"),A=require("@ez4/aws-queue"),R=require("@ez4/aws-identity"),
80
+ De=require("@ez4/stateful"),Me=require("@ez4/utils");var j=i((t,e,r,o)=>{let n=e.parameters.topicName,p=[e.entryId,r.entryId];if((0,g.isFunctionState)(
81
+ r)){let s=(0,g.getPermission)(t,e,r)??(0,g.createPermission)(t,e,r,{fromService:o.
82
+ fromService,getPermission:i(async()=>{let[a,u]=await Promise.all([(0,R.getRegion)(),
83
+ (0,R.getAccountId)()]);return{sourceArn:E(n,a,u),principal:"sns.amazonaws.com"}},
81
84
  "getPermission")});p.push(s.entryId)}if((0,A.isQueueState)(r)){let s=(0,A.attachQueuePolicy)(
82
- e,r,t,{fromService:o.fromService,policyGetters:[async()=>{let[a,f]=await Promise.
83
- all([(0,w.getRegion)(),(0,w.getAccountId)()]);return{principal:"sns.amazonaws.co\
84
- m",sourceArn:E(n,a,f)}}]});p.push(s.entryId)}let c=(0,Me.hashData)(d,t.entryId,r.
85
- entryId);return(0,De.attachEntry)(e,{type:d,entryId:c,dependencies:p,parameters:{
86
- ...o,getTopicArn:i(s=>V(l,c,s),"getTopicArn"),getEndpoint:i(s=>(0,g.isFunctionState)(
85
+ t,r,e,{fromService:o.fromService,policyGetters:[async()=>{let[a,u]=await Promise.
86
+ all([(0,R.getRegion)(),(0,R.getAccountId)()]);return{principal:"sns.amazonaws.co\
87
+ m",sourceArn:E(n,a,u)}}]});p.push(s.entryId)}let c=(0,Me.hashData)(T,e.entryId,r.
88
+ entryId);return(0,De.attachEntry)(t,{type:T,entryId:c,dependencies:p,parameters:{
89
+ ...o,getTopicArn:i(s=>W(l,c,s),"getTopicArn"),getEndpoint:i(s=>(0,g.isFunctionState)(
87
90
  r)?(0,g.getFunctionArn)(m,c,s):(0,A.getQueueArn)(m,c,s),"getEndpoint")}})},"crea\
88
- teSubscription");var Oe=require("@ez4/project/library"),$=require("@ez4/utils");var X=i((e,t)=>`${(0,$.toKebabCase)(e.name)}-${(0,$.toKebabCase)(t)}`,"getIntern\
89
- alName"),ke=i((e,t,r)=>`${(0,Oe.getServiceName)(e,r)}-${(0,$.toKebabCase)(t)}`,"\
90
- getFunctionName");var N=class extends Error{static{i(this,"RoleMissingError")}constructor(){super(
91
- "Execution role for SNS is missing.")}};var P=require("@ez4/aws-function"),x;(p=>(p.LogRetention=P.FunctionDefaults.LogRetention,
92
- p.Architecture=P.FunctionDefaults.Architecture,p.Runtime=P.FunctionDefaults.Runtime,
93
- p.Timeout=P.FunctionDefaults.Timeout,p.Memory=P.FunctionDefaults.Memory))(x||={});var G=i((e,t,r,o,n)=>{if(!n.role||!(0,ee.isRoleState)(n.role))throw new N;for(let p of t.
94
- subscriptions)switch(p.type){default:throw new Q.InvalidParameterError(m,"subscr\
95
- iption not supported.");case h.TopicSubscriptionType.Lambda:{if(t.fifoMode)throw new Q.InvalidParameterError(
91
+ teSubscription");var ke=require("@ez4/project/library"),$=require("@ez4/utils");var Y=i((t,e)=>`${(0,$.toKebabCase)(t.name)}-${(0,$.toKebabCase)(e)}`,"getIntern\
92
+ alName"),je=i((t,e,r)=>`${(0,ke.getServiceName)(t,r)}-${(0,$.toKebabCase)(e)}`,"\
93
+ getFunctionName");var I=class extends Error{static{i(this,"RoleMissingError")}constructor(){super(
94
+ "Execution role for SNS is missing.")}};var C=require("@ez4/aws-function"),x;(p=>(p.LogRetention=C.FunctionDefaults.LogRetention,
95
+ p.Architecture=C.FunctionDefaults.Architecture,p.Runtime=C.FunctionDefaults.Runtime,
96
+ p.Timeout=C.FunctionDefaults.Timeout,p.Memory=C.FunctionDefaults.Memory))(x||={});var G=i((t,e,r,o,n)=>{if(!n.role||!(0,te.isRoleState)(n.role))throw new I;for(let p of e.
97
+ subscriptions)switch(p.type){default:throw new q.InvalidParameterError(m,"subscr\
98
+ iption not supported.");case N.TopicSubscriptionType.Lambda:{if(e.fifoMode)throw new q.InvalidParameterError(
96
99
  m,"lambda subscription not supported for FIFO topics.");let{handler:c,listener:s}=p,
97
- a=X(t,c.name),f=(0,q.tryGetFunctionState)(n,a,o);if(!f){let oe=ke(t,c.name,o),rt=n.
98
- getDependencyFiles(c.file),{runtime:ot=o.defaults?.runtime??x.Runtime,architecture:it=o.
99
- defaults?.architecture??x.Architecture,logRetention:nt=o.defaults?.logRetention??
100
- x.LogRetention,memory:pt=o.defaults?.memory??x.Memory,timeout:ct=x.Timeout}=p,st=(0,je.createLogGroup)(
101
- e,{groupName:oe,retention:nt,tags:o.tags});f=W(e,n.role,st,{functionName:oe,description:c.
102
- description,messageSchema:t.schema,context:t.context,release:o.release,debug:o.debug,
103
- tags:o.tags,variables:[o.variables,t.variables,p.variables],architecture:it,runtime:ot,
104
- timeout:ct,memory:pt,handler:{sourceFile:c.file,functionName:c.name,module:c.module,
105
- dependencies:rt},listener:s&&{functionName:s.name,sourceFile:s.file,module:s.module}}),
106
- n.setServiceState(f,a,o)}j(e,r,f,{fromService:f.parameters.functionName});break}case h.TopicSubscriptionType.
107
- Queue:{let c=(0,te.getQueueState)(n,p.service,o);j(e,r,c,{fromService:c.parameters.
108
- queueName});break}}},"prepareSubscriptions"),H=i((e,t,r,o)=>{if(!o.role||!(0,ee.isRoleState)(
109
- o.role))throw new N;for(let n of t.subscriptions)switch(n.type){default:throw new Q.InvalidParameterError(
110
- m,"subscription not supported.");case h.TopicSubscriptionType.Lambda:{let p=X(t,
111
- n.handler.name),c=(0,q.getFunctionState)(o,p,r);(0,Y.linkServiceContext)(e,c.entryId,
112
- t.context);break}case h.TopicSubscriptionType.Queue:{let p=(0,te.getQueueState)(
113
- o,n.service,r);(0,Y.linkServiceContext)(e,p.entryId,t.context);break}}},"connect\
114
- Subscriptions");var $e=require("@ez4/project/library");var _=i((e,t,r)=>{let n=J(e,t.name,r).entryId,p=(0,$e.getDefinitionName)(n,"topi\
115
- cArn"),c=JSON.stringify(t.fifoMode??null),s=JSON.stringify(t.schema);return{module:"\
100
+ a=Y(e,c.name),u=(0,Q.tryGetFunctionState)(n,a,o);if(!u){let ie=je(e,c.name,o),ot=n.
101
+ getDependencyFiles(c.file),L=o.defaults,{runtime:it=L?.runtime??x.Runtime,architecture:nt=L?.
102
+ architecture??x.Architecture,logRetention:pt=L?.logRetention??x.LogRetention,memory:ct=L?.
103
+ memory??x.Memory,timeout:st=x.Timeout}=p,at=(0,$e.createLogGroup)(t,{groupName:ie,
104
+ retention:pt,tags:o.tags});u=X(t,n.role,at,{functionName:ie,description:c.description,
105
+ messageSchema:e.schema,context:e.context,release:o.release,debug:o.debug,tags:o.
106
+ tags,variables:[o.variables,e.variables,p.variables],architecture:nt,runtime:it,
107
+ timeout:st,memory:ct,handler:{sourceFile:c.file,functionName:c.name,module:c.module,
108
+ dependencies:ot},listener:s&&{functionName:s.name,sourceFile:s.file,module:s.module}}),
109
+ n.setServiceState(a,o,u)}j(t,r,u,{fromService:u.parameters.functionName});break}case N.TopicSubscriptionType.
110
+ Queue:{let c=(0,re.getQueueState)(n,p.service,o);j(t,r,c,{fromService:c.parameters.
111
+ queueName});break}}},"prepareSubscriptions"),H=i((t,e,r,o)=>{if(!o.role||!(0,te.isRoleState)(
112
+ o.role))throw new I;for(let n of e.subscriptions)switch(n.type){default:throw new q.InvalidParameterError(
113
+ m,"subscription not supported.");case N.TopicSubscriptionType.Lambda:{let p=Y(e,
114
+ n.handler.name),c=(0,Q.getFunctionState)(o,p,r);(0,ee.linkServiceContext)(t,c.entryId,
115
+ e.context);break}case N.TopicSubscriptionType.Queue:{let p=(0,re.getQueueState)(
116
+ o,n.service,r);(0,ee.linkServiceContext)(t,p.entryId,e.context);break}}},"connec\
117
+ tSubscriptions");var qe=require("@ez4/project/library");var _=i((t,e,r)=>{let n=V(t,e.name,r).entryId,p=(0,qe.getDefinitionName)(n,"topi\
118
+ cArn"),c=JSON.stringify(e.fifoMode??null),s=JSON.stringify(e.schema);return{module:"\
116
119
  Client",from:"@ez4/aws-topic/client",constructor:`@{EZ4_MODULE_IMPORT}.make(${p}\
117
- , ${s}, ${c})`,connectionIds:[n],dependencyIds:[n]}},"prepareLinkedClient");var qe=i(e=>{let{service:t,options:r,context:o}=e;return(0,U.isTopicService)(t)?
118
- _(o,t,r):null},"prepareLinkedServices"),Ge=i(e=>{let{state:t,service:r,options:o,
119
- context:n}=e;if(!(0,U.isTopicService)(r))return!1;let{fifoMode:p}=r,c=C(t,{topicName:(0,Qe.getServiceName)(
120
- r,o),fifoMode:!!p,tags:o.tags});return n.setServiceState(c,r,o),G(t,r,c,o,n),!0},
121
- "prepareServices"),He=i(e=>{let{state:t,service:r,options:o,context:n}=e;(0,U.isTopicService)(
122
- r)&&H(t,r,o,n)},"connectServices");var re=require("@ez4/project/library"),_e=require("@ez4/project/library"),B=require("@ez4/topic/library");var Ue=i(e=>{let{service:t,options:r,context:o}=e;if(!(0,B.isTopicImport)(t))return null;
123
- let{project:n}=t,{imports:p}=r;if(!p||!p[n])throw new re.MissingImportedProjectError(
124
- n);return _(o,t,p[n])},"prepareLinkedImports"),Be=i(e=>{let{state:t,service:r,options:o,
125
- context:n}=e;if(!(0,B.isTopicImport)(r))return!1;let{reference:p,project:c}=r,{imports:s}=o;
126
- if(!s||!s[c])throw new re.MissingImportedProjectError(c);let a=C(t,{topicName:(0,_e.getServiceName)(
127
- p,s[c]),fifoMode:!!r.fifoMode,import:!0});return n.setServiceState(a,r,o),G(t,r,
128
- a,o,n),!0},"prepareImports"),Ke=i(e=>{let{state:t,service:r,options:o,context:n}=e;
129
- (0,B.isTopicImport)(r)&&H(t,r,o,n)},"connectImports");var K=require("@ez4/topic/library"),Z=require("@ez4/aws-identity"),Ze=require("@ez4/project/library");var Je=i(async e=>{let{state:t,serviceType:r,options:o}=e;if(r!==K.ServiceType&&
130
- r!==K.ImportType)return null;let n=Object.values({options:o,...o.imports}).map(s=>(0,Ze.getServiceName)(
131
- "",s)),[p]=n,c=`${p}-topic-policy`;return(0,Z.tryGetPolicy)(t,c)??(0,Z.createPolicy)(
132
- t,{tags:o.tags,policyDocument:await ie(n),policyName:c})},"prepareExecutionPolic\
133
- y");var Ct=i(()=>{(0,Ve.registerTriggers)(),(0,We.registerTriggers)(),(0,Xe.registerTriggers)(),
134
- (0,Ye.registerTriggers)(),(0,et.registerTriggers)(),(0,tt.tryCreateTrigger)("@ez\
135
- 4/aws-topic",{"deploy:prepareExecutionPolicy":Je,"deploy:prepareLinkedService":Nt,
136
- "deploy:prepareResources":ht,"deploy:connectResources":It}),fe(),Re()},"register\
137
- Triggers"),Nt=i(e=>qe(e)??Ue(e)??null,"prepareLinkedService"),ht=i(e=>Ge(e)||Be(
138
- e),"prepareQueueResources"),It=i(e=>{He(e),Ke(e)},"connectQueueResources");var Ft=i(e=>e.type===d,"isSubscriptionState");0&&(module.exports={SubscriptionServiceName,SubscriptionServiceType,TopicServiceName,
120
+ , ${s}, ${c})`,dependencyIds:[n],connectionIds:[n]}},"prepareLinkedClient");var Ge=i(t=>{let{service:e,options:r,context:o}=t;return(0,U.isTopicService)(e)?
121
+ _(o,e,r):null},"prepareLinkedServices"),He=i(t=>{let{state:e,service:r,options:o,
122
+ context:n}=t;if(!(0,U.isTopicService)(r))return!1;let{fifoMode:p}=r,c=h(e,{topicName:(0,Qe.getServiceName)(
123
+ r,o),fifoMode:!!p,tags:o.tags});return n.setServiceState(r,o,c),G(e,r,c,o,n),!0},
124
+ "prepareServices"),_e=i(t=>{let{state:e,service:r,options:o,context:n}=t;(0,U.isTopicService)(
125
+ r)&&H(e,r,o,n)},"connectServices");var oe=require("@ez4/project/library"),Ue=require("@ez4/project/library"),B=require("@ez4/topic/library");var Be=i(t=>{let{service:e,options:r,context:o}=t;if(!(0,B.isTopicImport)(e))return null;
126
+ let{project:n}=e,{imports:p}=r;if(!p||!p[n])throw new oe.MissingImportedProjectError(
127
+ n);return _(o,e,r)},"prepareLinkedImports"),Ke=i(t=>{let{state:e,service:r,options:o,
128
+ context:n}=t;if(!(0,B.isTopicImport)(r))return!1;let{reference:p,project:c}=r,{imports:s}=o;
129
+ if(!s||!s[c])throw new oe.MissingImportedProjectError(c);let a=h(e,{topicName:(0,Ue.getServiceName)(
130
+ p,s[c]),fifoMode:!!r.fifoMode,import:!0});return n.setServiceState(r,o,a),G(e,r,
131
+ a,o,n),!0},"prepareImports"),Ze=i(t=>{let{state:e,service:r,options:o,context:n}=t;
132
+ (0,B.isTopicImport)(r)&&H(e,r,o,n)},"connectImports");var K=require("@ez4/topic/library"),Z=require("@ez4/aws-identity"),Je=require("@ez4/project/library");var Ve=i(async t=>{let{state:e,serviceType:r,options:o}=t;if(r!==K.ServiceType&&
133
+ r!==K.ImportType)return null;let n=Object.values({options:o,...o.imports}).map(s=>(0,Je.getServiceName)(
134
+ "",s)),[p]=n,c=`${p}-topic-policy`;return(0,Z.tryGetPolicy)(e,c)??(0,Z.createPolicy)(
135
+ e,{tags:o.tags,policyDocument:await ne(n),policyName:c})},"prepareExecutionPolic\
136
+ y");var ht=i(()=>{(0,We.registerTriggers)(),(0,Xe.registerTriggers)(),(0,Ye.registerTriggers)(),
137
+ (0,et.registerTriggers)(),(0,tt.registerTriggers)(),(0,rt.tryCreateTrigger)("@ez\
138
+ 4/aws-topic",{"deploy:prepareExecutionPolicy":Ve,"deploy:prepareLinkedService":It,
139
+ "deploy:prepareResources":Nt,"deploy:connectResources":Lt}),ge(),Re()},"register\
140
+ Triggers"),It=i(t=>Ge(t)??Be(t)??null,"prepareLinkedService"),Nt=i(t=>He(t)||Ke(
141
+ t),"prepareQueueResources"),Lt=i(t=>{_e(t),Ze(t)},"connectQueueResources");var Ft=i(t=>t.type===T,"isSubscriptionState");0&&(module.exports={SubscriptionServiceName,SubscriptionServiceType,TopicServiceName,
139
142
  TopicServiceType,createSubscription,createSubscriptionFunction,createTopic,createTopicStateId,
140
143
  getTopic,getTopicArn,getTopicState,isSubscriptionState,isTopicState,registerTriggers});
141
144
  //# sourceMappingURL=main.cjs.map
package/dist/main.mjs CHANGED
@@ -1,127 +1,131 @@
1
- var Ne=Object.defineProperty;var i=(e,t)=>Ne(e,"name",{value:t,configurable:!0});import{registerTriggers as qt}from"@ez4/aws-common";import{registerTriggers as Gt}from"@ez4/aws-identity";
2
- import{registerTriggers as Ht}from"@ez4/aws-function";import{registerTriggers as _t}from"@ez4/aws-queue";
3
- import{registerTriggers as Ut}from"@ez4/topic/library";import{tryCreateTrigger as Bt}from"@ez4/project/library";import{tryRegisterProvider as Je}from"@ez4/aws-common";import{applyTagUpdates as je,ReplaceResourceError as $e}from"@ez4/aws-common";import{
4
- getAccountId as Qe,getRegion as qe}from"@ez4/aws-identity";import{deepCompare as Ge}from"@ez4/utils";import{getAccountId as he,getRegion as Ie,createPolicyDocument as Fe}from"@ez4/aws-identity";var g=i((e,t,r)=>`arn:aws:sns:${t}:${r}:${e}`,"buildTopicArn"),k=i(async e=>{let[
5
- t,r]=await Promise.all([Ie(),he()]);return Fe([{permissions:["sns:Publish"],resourceIds:e.
6
- map(o=>g(`${o}-*`,t,r))}])},"getPolicyDocument");import{SNSClient as ze,CreateTopicCommand as Le,DeleteTopicCommand as De,TagResourceCommand as Me,
7
- UntagResourceCommand as Oe,NotFoundException as ke}from"@aws-sdk/client-sns";import{
8
- getTagList as j,Logger as b,tryParseArn as C}from"@ez4/aws-common";var S="AWS:SNS/Topic",f="aws:sns.topic";var x=new ze({}),$=i(async e=>{let{topicName:t,fifoMode:r}=e;return b.logCreate(
9
- S,t),{topicArn:(await x.send(new Le({Name:t,Attributes:{...r&&{ContentBasedDeduplication:"\
1
+ var Ce=Object.defineProperty;var i=(t,e)=>Ce(t,"name",{value:e,configurable:!0});import{registerTriggers as qt}from"@ez4/aws-common";import{registerTriggers as Qt}from"@ez4/aws-identity";
2
+ import{registerTriggers as Gt}from"@ez4/aws-function";import{registerTriggers as Ht}from"@ez4/aws-queue";
3
+ import{registerTriggers as _t}from"@ez4/topic/library";import{tryCreateTrigger as Ut}from"@ez4/project/library";import{tryRegisterProvider as Je}from"@ez4/aws-common";import{applyTagUpdates as ke,CorruptedResourceError as je,OperationLogger as P,ReplaceResourceError as $e}from"@ez4/aws-common";
4
+ import{getAccountId as qe,getRegion as Qe}from"@ez4/aws-identity";import{deepCompare as Ge}from"@ez4/utils";import{getAccountId as Pe,getRegion as he,createPolicyDocument as Ie}from"@ez4/aws-identity";var d=i((t,e,r)=>`arn:aws:sns:${e}:${r}:${t}`,"buildTopicArn"),k=i(async t=>{let[
5
+ e,r]=await Promise.all([he(),Pe()]);return Ie([{permissions:["sns:Publish"],resourceIds:t.
6
+ map(o=>d(`${o}-*`,e,r))}])},"getPolicyDocument");import{CreateTopicCommand as Fe,DeleteTopicCommand as ze,TagResourceCommand as Oe,
7
+ UntagResourceCommand as De,NotFoundException as Me}from"@aws-sdk/client-sns";import{
8
+ getTagList as j}from"@ez4/aws-common";import{getAwsClientOptions as Ne}from"@ez4/aws-common";import{SNSClient as Le}from"@aws-sdk/client-sns";var S=i(()=>new Le(Ne()),"getSNSClient");var $=i(async(t,e)=>{t.update("Creating topic");let{topicName:r,fifoMode:o}=e;return{
9
+ topicArn:(await S().send(new Fe({Name:r,Attributes:{...o&&{ContentBasedDeduplication:"\
10
10
  true",FifoThroughputScope:"MessageGroup",FifoTopic:"true"}},Tags:j({...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 De({TopicArn:e})),!0}catch(r){if(!(r instanceof
13
- ke))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 Me({ResourceArn:e,Tags:j({...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 Oe({ResourceArn:e,TagKeys:t}))},"untagTopic");var H=i(()=>({equals:He,create:_,replace:Ue,preview:_e,update:Be,delete:Ke}),"ge\
17
- tTopicHandler"),He=i((e,t)=>!!e.result&&e.result.topicArn===t.result?.topicArn,"\
18
- equalsResource"),_e=i((e,t)=>{let r={...e.parameters,dependencies:e.dependencies},
19
- o={...t.parameters,dependencies:t.dependencies},n=Ge(r,o);if(n.counts)return{...n,
20
- name:r.topicName}},"previewResource"),Ue=i(async(e,t)=>{if(t.result)throw new $e(
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([qe(),Qe()]);return{topicArn:g(t.topicName,
23
- o,n)}}let{topicArn:r}=await $(t);return{topicArn:r}},"createResource"),Be=i(async(e,t)=>{
24
- let{result:r,parameters:o}=e;r&&!o.import&&await Ze(r.topicArn,o,t.parameters)},
25
- "updateResource"),Ke=i(async e=>{let{result:t,parameters:r}=e;t&&!r.import&&await Q(
26
- t.topicArn)},"deleteResource"),Ze=i(async(e,t,r)=>{await je(t.tags,r.tags,o=>q(e,
27
- o),o=>G(e,o))},"checkTagUpdates");var U=i(()=>{Je(f,H())},"registerTopicProvider");import{tryRegisterProvider as at}from"@ez4/aws-common";import{ReplaceResourceError as rt}from"@ez4/aws-common";import{deepCompare as ot}from"@ez4/utils";import{InvalidParameterError as W,isArn as et,parseArn as tt}from"@ez4/aws-common";import{NotFoundException as Ve,SNSClient as We,SubscribeCommand as Xe,UnsubscribeCommand as Ye}from"@aws-sdk/client-sns";
28
- import{Logger as B,tryParseArn as K}from"@ez4/aws-common";var m="AWS:SNS/Subscription",l="aws:sns.subscription";var Z=new We({});var J=i(async e=>{let t=K(e.topicArn)?.resourceName??e.topicArn;B.logCreate(m,t);
29
- let{topicArn:r,protocol:o,endpoint:n}=e;return{subscriptionArn:(await Z.send(new Xe(
30
- {TopicArn:r,Protocol:o,Endpoint:n,ReturnSubscriptionArn:!0,Attributes:{...o==="s\
31
- qs"&&{RawMessageDelivery:"true"}}}))).SubscriptionArn}},"createSubscription"),V=i(
32
- async e=>{let t=K(e)?.resourceName??e;B.logDelete(m,t);try{return await Z.send(new Ye(
33
- {SubscriptionArn:e})),!0}catch(r){if(!(r instanceof Ve))throw r;return!1}},"dele\
34
- teSubscription");var X=i((e,t)=>{if(!et(t))throw new W(e,`endpoint ${t} is not supported.`);let{service:r}=tt(
35
- t);switch(r){case"lambda":case"sqs":return r}throw new W(e,`protocol ${r} is not\
36
- supported.`)},"getSubscriptionProtocol");var Y=i(()=>({equals:it,create:ee,replace:pt,preview:nt,update:ct,delete:st}),"g\
37
- etSubscriptionHandler"),it=i((e,t)=>!!e.result&&e.result.subscriptionArn===t.result?.
38
- subscriptionArn,"equalsResource"),nt=i((e,t)=>{let r={...e.parameters,dependencies:e.
39
- dependencies},o={...t.parameters,dependencies:t.dependencies},n=ot(r,o,{exclude:{
11
+ EZ4"})}))).TopicArn}},"createTopic"),q=i(async(t,e)=>{t.update("Deleting topic");
12
+ try{return await S().send(new ze({TopicArn:e})),!0}catch(r){if(!(r instanceof Me))
13
+ throw r;return!1}},"deleteTopic"),Q=i(async(t,e,r)=>{t.update("Tag topic"),await S().
14
+ send(new Oe({ResourceArn:e,Tags:j({...r,ManagedBy:"EZ4"})}))},"tagTopic"),G=i(async(t,e,r)=>{
15
+ t.update("Untag topic"),await S().send(new De({ResourceArn:e,TagKeys:r}))},"unta\
16
+ gTopic");var f="AWS:SNS/Topic",l="aws:sns.topic";var H=i(()=>({equals:He,create:_,replace:Ue,preview:_e,update:Be,delete:Ke}),"ge\
17
+ tTopicHandler"),He=i((t,e)=>!!t.result&&t.result.topicArn===e.result?.topicArn,"\
18
+ equalsResource"),_e=i((t,e)=>{let r={...t.parameters,dependencies:t.dependencies},
19
+ o={...e.parameters,dependencies:e.dependencies},n=Ge(r,o);if(n.counts)return{...n,
20
+ name:r.topicName}},"previewResource"),Ue=i(async(t,e)=>{if(e.result)throw new $e(
21
+ f,t.entryId,e.entryId);return _(t)},"replaceResource"),_=i(t=>{let{parameters:e}=t;
22
+ return P.logExecution(f,e.topicName,"creation",async r=>{if(e.import){let[n,p]=await Promise.
23
+ all([Qe(),qe()]);return{topicArn:d(e.topicName,n,p)}}let{topicArn:o}=await $(r,e);
24
+ return{topicArn:o}})},"createResource"),Be=i((t,e)=>{let{result:r,parameters:o}=t,
25
+ {topicName:n}=o;if(!r)throw new je(f,n);return o.import?Promise.resolve(r):P.logExecution(
26
+ f,n,"updates",async p=>(await Ze(p,r.topicArn,o,e.parameters),r))},"updateResour\
27
+ ce"),Ke=i(async t=>{let{result:e,parameters:r}=t;!e||r.import||await P.logExecution(
28
+ f,r.topicName,"deletion",async o=>{await q(o,e.topicArn)})},"deleteResource"),Ze=i(
29
+ async(t,e,r,o)=>{await ke(r.tags,o.tags,n=>Q(t,e,n),n=>G(t,e,n))},"checkTagUpdat\
30
+ es");var U=i(()=>{Je(l,H())},"registerTopicProvider");import{tryRegisterProvider as st}from"@ez4/aws-common";import{OperationLogger as V,ReplaceResourceError as tt}from"@ez4/aws-common";import{
31
+ deepCompare as rt}from"@ez4/utils";import{InvalidParameterError as Z,isArn as Ye,parseArn as et}from"@ez4/aws-common";import{NotFoundException as Ve,SubscribeCommand as We,UnsubscribeCommand as Xe}from"@aws-sdk/client-sns";var B=i(async(t,e)=>{t.update("Creating topic subscription");let{topicArn:r,protocol:o,
32
+ endpoint:n}=e;return{subscriptionArn:(await S().send(new We({TopicArn:r,Protocol:o,
33
+ Endpoint:n,ReturnSubscriptionArn:!0,Attributes:{...o==="sqs"&&{RawMessageDelivery:"\
34
+ true"}}}))).SubscriptionArn}},"createSubscription"),K=i(async(t,e)=>{t.update("D\
35
+ eleting topic subscription");try{return await S().send(new Xe({SubscriptionArn:e})),
36
+ !0}catch(r){if(!(r instanceof Ve))throw r;return!1}},"deleteSubscription");var J=i((t,e)=>{if(!Ye(e))throw new Z(t,`endpoint ${e} is not supported.`);let{service:r}=et(
37
+ e);switch(r){case"lambda":case"sqs":return r}throw new Z(t,`protocol ${r} is not\
38
+ supported.`)},"getSubscriptionProtocol");var m="AWS:SNS/Subscription",y="aws:sns.subscription";var W=i(()=>({equals:ot,create:X,replace:nt,preview:it,update:pt,delete:ct}),"ge\
39
+ tSubscriptionHandler"),ot=i((t,e)=>!!t.result&&t.result.subscriptionArn===e.result?.
40
+ subscriptionArn,"equalsResource"),it=i((t,e)=>{let r={...t.parameters,dependencies:t.
41
+ dependencies},o={...e.parameters,dependencies:e.dependencies},n=rt(r,o,{exclude:{
40
42
  getTopicArn:!0,getEndpoint:!0}});if(n.counts)return{...n,name:r.fromService}},"p\
41
- reviewResource"),pt=i(async(e,t,r)=>{if(t.result)throw new rt(m,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:p}=await J({protocol:X(
44
- m,n),topicArn:o,endpoint:n});return{subscriptionArn:p,topicArn:o,endpoint:n}},"c\
45
- reateResource"),ct=i(async()=>{},"updateResource"),st=i(async e=>{let{result:t}=e;
46
- t&&await V(t.subscriptionArn)},"deleteResource");var te=i(()=>{at(l,Y())},"registerSubscriptionProvider");import{isTopicService as D}from"@ez4/topic/library";import{getServiceName as Dt}from"@ez4/project/library";import{attachEntry as ft}from"@ez4/stateful";import{toKebabCase as lt}from"@ez4/utils";import{IncompleteResourceError as mt}from"@ez4/aws-common";import{hashData as ut,
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 N=i((e,t=!0)=>ut(f,t?St(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 mt(e,t,"topicArn");return o.topicArn},"getTopicArn");var E=i((e,t)=>{let r=lt(t.topicName),o=t.fifoMode?`${r}.fifo`:r,n=N(o,!1);return ft(
52
- e,{type:f,entryId:n,dependencies:[],parameters:{...t,topicName:o}})},"createTopi\
53
- c"),Xr=i((e,t)=>{let r=N(t),o=e[r];return o&&h(o)?o:null},"getTopic");import{linkServiceContext as me}from"@ez4/project/library";import{TopicSubscriptionType as R}from"@ez4/topic/library";
54
- import{getFunctionState as It,tryGetFunctionState as Ft}from"@ez4/aws-function";
55
- import{InvalidParameterError as L}from"@ez4/aws-common";import{isRoleState as ue}from"@ez4/aws-identity";
56
- import{createLogGroup as zt}from"@ez4/aws-logs";import{getQueueState as Se}from"@ez4/aws-queue";import{createFunction as bt}from"@ez4/aws-function";import{hashObject as xt}from"@ez4/utils";import{join as yt}from"node:path";import{getDefinitionsObject as gt}from"@ez4/project/library";
57
- import{MappingServiceName as dt}from"@ez4/aws-function";import{getFunctionBundle as Tt}from"@ez4/aws-common";var ie=i(async(e,t)=>{let{handler:r,listener:o,messageSchema:n,context:p,debug:c}=e,
58
- s=gt(t);return Tt(dt,{templateFile:yt(import.meta.dirname,"../lib/message.ts"),filePrefix:"\
43
+ reviewResource"),nt=i(async(t,e,r)=>{if(e.result)throw new tt(m,t.entryId,e.entryId);
44
+ return X(t,r)},"replaceResource"),X=i((t,e)=>{let{parameters:r}=t;return V.logExecution(
45
+ m,r.fromService,"creation",async o=>{let[n,p]=await Promise.all([r.getTopicArn(e),
46
+ r.getEndpoint(e)]),{subscriptionArn:c}=await B(o,{protocol:J(m,p),topicArn:n,endpoint:p});
47
+ return{subscriptionArn:c,topicArn:n,endpoint:p}})},"createResource"),pt=i(async()=>{},
48
+ "updateResource"),ct=i(async t=>{let{result:e,parameters:r}=t;e&&await V.logExecution(
49
+ m,r.fromService,"deletion",async o=>{await K(o,e.subscriptionArn)})},"deleteReso\
50
+ urce");var Y=i(()=>{st(y,W())},"registerSubscriptionProvider");import{isTopicService as O}from"@ez4/topic/library";import{getServiceName as zt}from"@ez4/project/library";import{attachEntry as St}from"@ez4/stateful";import{toKebabCase as ft}from"@ez4/utils";import{IncompleteResourceError as at}from"@ez4/aws-common";import{hashData as mt,
51
+ toKebabCase as ut}from"@ez4/utils";var v=class extends Error{static{i(this,"TopicNotFoundError")}constructor(e){super(
52
+ `Topic service ${e} wasn't found.`)}};var h=i((t,e=!0)=>mt(l,e?ut(t):t),"createTopicStateId"),I=i(t=>t.type===l,"isTop\
53
+ icState"),ee=i((t,e,r)=>{let o=t.getServiceState(e,r);if(!I(o))throw new v(e);return o},
54
+ "getTopicState"),te=i((t,e,r)=>{let o=r.getDependencies(l).at(0)?.result;if(!o?.
55
+ topicArn)throw new at(t,e,"topicArn");return o.topicArn},"getTopicArn");var E=i((t,e)=>{let r=ft(e.topicName),o=e.fifoMode?`${r}.fifo`:r,n=h(o,!1);return St(
56
+ t,{type:l,entryId:n,dependencies:[],parameters:{...e,topicName:o}})},"createTopi\
57
+ c"),eo=i((t,e)=>{let r=h(e),o=t[r];return o&&I(o)?o:null},"getTopic");import{linkServiceContext as se}from"@ez4/project/library";import{TopicSubscriptionType as w}from"@ez4/topic/library";
58
+ import{getFunctionState as It,tryGetFunctionState as Nt}from"@ez4/aws-function";
59
+ import{InvalidParameterError as z}from"@ez4/aws-common";import{isRoleState as ae}from"@ez4/aws-identity";
60
+ import{createLogGroup as Lt}from"@ez4/aws-logs";import{getQueueState as me}from"@ez4/aws-queue";import{createFunction as Tt}from"@ez4/aws-function";import{hashObject as bt}from"@ez4/utils";import{join as lt}from"node:path";import{getDefinitionsObject as yt}from"@ez4/project/library";
61
+ import{MappingServiceName as gt}from"@ez4/aws-function";import{getFunctionBundle as dt}from"@ez4/aws-common";var re=i(async(t,e)=>{let{handler:r,listener:o,messageSchema:n,context:p,debug:c}=t,
62
+ s=yt(e);return dt(gt,{templateFile:lt(import.meta.dirname,"../lib/message.ts"),filePrefix:"\
59
63
  sns",define:{...s,__EZ4_SCHEMA:n?JSON.stringify(n):"undefined"},handler:r,listener:o,
60
- context:p,debug:c})},"bundleSubscriptionFunction");var ne=i((e,t,r,o)=>{let{handler:n,variables:p,architecture:c,messageSchema:s}=o;
61
- return bt(e,t,r,{handlerName:"snsEntryPoint",sourceFile:n.sourceFile,functionName:o.
64
+ context:p,debug:c})},"bundleSubscriptionFunction");var oe=i((t,e,r,o)=>{let{handler:n,variables:p,architecture:c,messageSchema:s}=o;
65
+ return Tt(t,e,r,{handlerName:"snsEntryPoint",sourceFile:n.sourceFile,functionName:o.
62
66
  functionName,description:o.description,architecture:o.architecture,runtime:o.runtime,
63
67
  release:o.release,timeout:o.timeout,memory:o.memory,debug:o.debug,tags:o.tags,getFunctionVariables:i(
64
68
  ()=>p.reduce((a,u)=>({...a,...u}),{}),"getFunctionVariables"),getFunctionFiles:i(
65
- ()=>[n.sourceFile,n.dependencies],"getFunctionFiles"),getFunctionBundle:i(a=>ie(
69
+ ()=>[n.sourceFile,n.dependencies],"getFunctionFiles"),getFunctionBundle:i(a=>re(
66
70
  o,[...a.getDependencies(),...a.getConnections()]),"getFunctionBundle"),getFunctionHash:i(
67
- ()=>xt({architecture:c,messageSchema:s}),"getFunctionHash")})},"createSubscripti\
68
- onFunction");import{createPermission as vt,getFunctionArn as Et,getPermission as Rt,isFunctionState as pe}from"@ez4/aws-function";
69
- import{attachQueuePolicy as wt,getQueueArn as At,isQueueState as Pt}from"@ez4/aws-queue";
70
- import{getAccountId as ce,getRegion as se}from"@ez4/aws-identity";import{attachEntry as Ct}from"@ez4/stateful";
71
- import{hashData as Nt}from"@ez4/utils";var I=i((e,t,r,o)=>{let n=t.parameters.topicName,p=[t.entryId,r.entryId];if(pe(r)){
72
- let s=Rt(e,t,r)??vt(e,t,r,{fromService:o.fromService,getPermission:i(async()=>{let[
73
- a,u]=await Promise.all([se(),ce()]);return{sourceArn:g(n,a,u),principal:"sns.ama\
74
- zonaws.com"}},"getPermission")});p.push(s.entryId)}if(Pt(r)){let s=wt(e,r,t,{fromService:o.
75
- fromService,policyGetters:[async()=>{let[a,u]=await Promise.all([se(),ce()]);return{
76
- principal:"sns.amazonaws.com",sourceArn:g(n,a,u)}}]});p.push(s.entryId)}let c=Nt(
77
- l,t.entryId,r.entryId);return Ct(e,{type:l,entryId:c,dependencies:p,parameters:{
78
- ...o,getTopicArn:i(s=>oe(S,c,s),"getTopicArn"),getEndpoint:i(s=>pe(r)?Et(m,c,s):
79
- At(m,c,s),"getEndpoint")}})},"createSubscription");import{getServiceName as ht}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)=>`${ht(e,r)}\
80
- -${F(t)}`,"getFunctionName");var d=class extends Error{static{i(this,"RoleMissingError")}constructor(){super(
81
- "Execution role for SNS is missing.")}};import{FunctionDefaults as T}from"@ez4/aws-function";var y;(p=>(p.LogRetention=T.
82
- LogRetention,p.Architecture=T.Architecture,p.Runtime=T.Runtime,p.Timeout=T.Timeout,
83
- p.Memory=T.Memory))(y||={});var w=i((e,t,r,o,n)=>{if(!n.role||!ue(n.role))throw new d;for(let p of t.subscriptions)
84
- switch(p.type){default:throw new L(m,"subscription not supported.");case R.Lambda:{
85
- if(t.fifoMode)throw new L(m,"lambda subscription not supported for FIFO topics.");
86
- let{handler:c,listener:s}=p,a=z(t,c.name),u=Ft(n,a,o);if(!u){let O=ae(t,c.name,o),
87
- ve=n.getDependencyFiles(c.file),{runtime:Ee=o.defaults?.runtime??y.Runtime,architecture:Re=o.
88
- defaults?.architecture??y.Architecture,logRetention:we=o.defaults?.logRetention??
89
- y.LogRetention,memory:Ae=o.defaults?.memory??y.Memory,timeout:Pe=y.Timeout}=p,Ce=zt(
90
- e,{groupName:O,retention:we,tags:o.tags});u=ne(e,n.role,Ce,{functionName:O,description:c.
91
- description,messageSchema:t.schema,context:t.context,release:o.release,debug:o.debug,
92
- tags:o.tags,variables:[o.variables,t.variables,p.variables],architecture:Re,runtime:Ee,
93
- timeout:Pe,memory:Ae,handler:{sourceFile:c.file,functionName:c.name,module:c.module,
94
- dependencies:ve},listener:s&&{functionName:s.name,sourceFile:s.file,module:s.module}}),
95
- n.setServiceState(u,a,o)}I(e,r,u,{fromService:u.parameters.functionName});break}case R.
96
- Queue:{let c=Se(n,p.service,o);I(e,r,c,{fromService:c.parameters.queueName});break}}},
97
- "prepareSubscriptions"),A=i((e,t,r,o)=>{if(!o.role||!ue(o.role))throw new d;for(let n of t.
98
- subscriptions)switch(n.type){default:throw new L(m,"subscription not supported.");case R.
99
- Lambda:{let p=z(t,n.handler.name),c=It(o,p,r);me(e,c.entryId,t.context);break}case R.
100
- Queue:{let p=Se(o,n.service,r);me(e,p.entryId,t.context);break}}},"connectSubscr\
101
- iptions");import{getDefinitionName as Lt}from"@ez4/project/library";var P=i((e,t,r)=>{let n=re(e,t.name,r).entryId,p=Lt(n,"topicArn"),c=JSON.stringify(
102
- t.fifoMode??null),s=JSON.stringify(t.schema);return{module:"Client",from:"@ez4/a\
103
- ws-topic/client",constructor:`@{EZ4_MODULE_IMPORT}.make(${p}, ${s}, ${c})`,connectionIds:[
104
- n],dependencyIds:[n]}},"prepareLinkedClient");var fe=i(e=>{let{service:t,options:r,context:o}=e;return D(t)?P(o,t,r):null},"pr\
105
- epareLinkedServices"),le=i(e=>{let{state:t,service:r,options:o,context:n}=e;if(!D(
106
- r))return!1;let{fifoMode:p}=r,c=E(t,{topicName:Dt(r,o),fifoMode:!!p,tags:o.tags});
107
- return n.setServiceState(c,r,o),w(t,r,c,o,n),!0},"prepareServices"),ye=i(e=>{let{
108
- state:t,service:r,options:o,context:n}=e;D(r)&&A(t,r,o,n)},"connectServices");import{MissingImportedProjectError as ge}from"@ez4/project/library";import{getServiceName as Mt}from"@ez4/project/library";
109
- import{isTopicImport as M}from"@ez4/topic/library";var de=i(e=>{let{service:t,options:r,context:o}=e;if(!M(t))return null;let{project:n}=t,
110
- {imports:p}=r;if(!p||!p[n])throw new ge(n);return P(o,t,p[n])},"prepareLinkedImp\
111
- orts"),Te=i(e=>{let{state:t,service:r,options:o,context:n}=e;if(!M(r))return!1;let{
112
- reference:p,project:c}=r,{imports:s}=o;if(!s||!s[c])throw new ge(c);let a=E(t,{topicName:Mt(
113
- p,s[c]),fifoMode:!!r.fifoMode,import:!0});return n.setServiceState(a,r,o),w(t,r,
114
- a,o,n),!0},"prepareImports"),be=i(e=>{let{state:t,service:r,options:o,context:n}=e;
115
- M(r)&&A(t,r,o,n)},"connectImports");import{ServiceType as Ot,ImportType as kt}from"@ez4/topic/library";import{createPolicy as jt,
116
- tryGetPolicy as $t}from"@ez4/aws-identity";import{getServiceName as Qt}from"@ez4/project/library";var xe=i(async e=>{let{state:t,serviceType:r,options:o}=e;if(r!==Ot&&r!==kt)return null;
117
- let n=Object.values({options:o,...o.imports}).map(s=>Qt("",s)),[p]=n,c=`${p}-top\
118
- ic-policy`;return $t(t,c)??jt(t,{tags:o.tags,policyDocument:await k(n),policyName:c})},
119
- "prepareExecutionPolicy");var hi=i(()=>{qt(),Gt(),Ht(),_t(),Ut(),Bt("@ez4/aws-topic",{"deploy:prepareExecu\
120
- tionPolicy":xe,"deploy:prepareLinkedService":Kt,"deploy:prepareResources":Zt,"de\
121
- ploy:connectResources":Jt}),U(),te()},"registerTriggers"),Kt=i(e=>fe(e)??de(e)??
122
- null,"prepareLinkedService"),Zt=i(e=>le(e)||Te(e),"prepareQueueResources"),Jt=i(
123
- e=>{ye(e),be(e)},"connectQueueResources");var Li=i(e=>e.type===l,"isSubscriptionState");export{m as SubscriptionServiceName,l as SubscriptionServiceType,S as TopicServiceName,
124
- f as TopicServiceType,I as createSubscription,ne as createSubscriptionFunction,E as createTopic,
125
- N as createTopicStateId,Xr as getTopic,oe as getTopicArn,re as getTopicState,Li as isSubscriptionState,
126
- h as isTopicState,hi as registerTriggers};
71
+ ()=>bt({architecture:c,messageSchema:s}),"getFunctionHash")})},"createSubscripti\
72
+ onFunction");import{createPermission as xt,getFunctionArn as vt,getPermission as Et,isFunctionState as ie}from"@ez4/aws-function";
73
+ import{attachQueuePolicy as wt,getQueueArn as Rt,isQueueState as At}from"@ez4/aws-queue";
74
+ import{getAccountId as ne,getRegion as pe}from"@ez4/aws-identity";import{attachEntry as Ct}from"@ez4/stateful";
75
+ import{hashData as Pt}from"@ez4/utils";var N=i((t,e,r,o)=>{let n=e.parameters.topicName,p=[e.entryId,r.entryId];if(ie(r)){
76
+ let s=Et(t,e,r)??xt(t,e,r,{fromService:o.fromService,getPermission:i(async()=>{let[
77
+ a,u]=await Promise.all([pe(),ne()]);return{sourceArn:d(n,a,u),principal:"sns.ama\
78
+ zonaws.com"}},"getPermission")});p.push(s.entryId)}if(At(r)){let s=wt(t,r,e,{fromService:o.
79
+ fromService,policyGetters:[async()=>{let[a,u]=await Promise.all([pe(),ne()]);return{
80
+ principal:"sns.amazonaws.com",sourceArn:d(n,a,u)}}]});p.push(s.entryId)}let c=Pt(
81
+ y,e.entryId,r.entryId);return Ct(t,{type:y,entryId:c,dependencies:p,parameters:{
82
+ ...o,getTopicArn:i(s=>te(f,c,s),"getTopicArn"),getEndpoint:i(s=>ie(r)?vt(m,c,s):
83
+ Rt(m,c,s),"getEndpoint")}})},"createSubscription");import{getServiceName as ht}from"@ez4/project/library";import{toKebabCase as L}from"@ez4/utils";var F=i((t,e)=>`${L(t.name)}-${L(e)}`,"getInternalName"),ce=i((t,e,r)=>`${ht(t,r)}\
84
+ -${L(e)}`,"getFunctionName");var T=class extends Error{static{i(this,"RoleMissingError")}constructor(){super(
85
+ "Execution role for SNS is missing.")}};import{FunctionDefaults as b}from"@ez4/aws-function";var g;(p=>(p.LogRetention=b.
86
+ LogRetention,p.Architecture=b.Architecture,p.Runtime=b.Runtime,p.Timeout=b.Timeout,
87
+ p.Memory=b.Memory))(g||={});var R=i((t,e,r,o,n)=>{if(!n.role||!ae(n.role))throw new T;for(let p of e.subscriptions)
88
+ switch(p.type){default:throw new z(m,"subscription not supported.");case w.Lambda:{
89
+ if(e.fifoMode)throw new z(m,"lambda subscription not supported for FIFO topics.");
90
+ let{handler:c,listener:s}=p,a=F(e,c.name),u=Nt(n,a,o);if(!u){let M=ce(e,c.name,o),
91
+ be=n.getDependencyFiles(c.file),x=o.defaults,{runtime:xe=x?.runtime??g.Runtime,architecture:ve=x?.
92
+ architecture??g.Architecture,logRetention:Ee=x?.logRetention??g.LogRetention,memory:we=x?.
93
+ memory??g.Memory,timeout:Re=g.Timeout}=p,Ae=Lt(t,{groupName:M,retention:Ee,tags:o.
94
+ tags});u=oe(t,n.role,Ae,{functionName:M,description:c.description,messageSchema:e.
95
+ schema,context:e.context,release:o.release,debug:o.debug,tags:o.tags,variables:[
96
+ o.variables,e.variables,p.variables],architecture:ve,runtime:xe,timeout:Re,memory:we,
97
+ handler:{sourceFile:c.file,functionName:c.name,module:c.module,dependencies:be},
98
+ listener:s&&{functionName:s.name,sourceFile:s.file,module:s.module}}),n.setServiceState(
99
+ a,o,u)}N(t,r,u,{fromService:u.parameters.functionName});break}case w.Queue:{let c=me(
100
+ n,p.service,o);N(t,r,c,{fromService:c.parameters.queueName});break}}},"prepareSu\
101
+ bscriptions"),A=i((t,e,r,o)=>{if(!o.role||!ae(o.role))throw new T;for(let n of e.
102
+ subscriptions)switch(n.type){default:throw new z(m,"subscription not supported.");case w.
103
+ Lambda:{let p=F(e,n.handler.name),c=It(o,p,r);se(t,c.entryId,e.context);break}case w.
104
+ Queue:{let p=me(o,n.service,r);se(t,p.entryId,e.context);break}}},"connectSubscr\
105
+ iptions");import{getDefinitionName as Ft}from"@ez4/project/library";var C=i((t,e,r)=>{let n=ee(t,e.name,r).entryId,p=Ft(n,"topicArn"),c=JSON.stringify(
106
+ e.fifoMode??null),s=JSON.stringify(e.schema);return{module:"Client",from:"@ez4/a\
107
+ ws-topic/client",constructor:`@{EZ4_MODULE_IMPORT}.make(${p}, ${s}, ${c})`,dependencyIds:[
108
+ n],connectionIds:[n]}},"prepareLinkedClient");var ue=i(t=>{let{service:e,options:r,context:o}=t;return O(e)?C(o,e,r):null},"pr\
109
+ epareLinkedServices"),Se=i(t=>{let{state:e,service:r,options:o,context:n}=t;if(!O(
110
+ r))return!1;let{fifoMode:p}=r,c=E(e,{topicName:zt(r,o),fifoMode:!!p,tags:o.tags});
111
+ return n.setServiceState(r,o,c),R(e,r,c,o,n),!0},"prepareServices"),fe=i(t=>{let{
112
+ state:e,service:r,options:o,context:n}=t;O(r)&&A(e,r,o,n)},"connectServices");import{MissingImportedProjectError as le}from"@ez4/project/library";import{getServiceName as Ot}from"@ez4/project/library";
113
+ import{isTopicImport as D}from"@ez4/topic/library";var ye=i(t=>{let{service:e,options:r,context:o}=t;if(!D(e))return null;let{project:n}=e,
114
+ {imports:p}=r;if(!p||!p[n])throw new le(n);return C(o,e,r)},"prepareLinkedImport\
115
+ s"),ge=i(t=>{let{state:e,service:r,options:o,context:n}=t;if(!D(r))return!1;let{
116
+ reference:p,project:c}=r,{imports:s}=o;if(!s||!s[c])throw new le(c);let a=E(e,{topicName:Ot(
117
+ p,s[c]),fifoMode:!!r.fifoMode,import:!0});return n.setServiceState(r,o,a),R(e,r,
118
+ a,o,n),!0},"prepareImports"),de=i(t=>{let{state:e,service:r,options:o,context:n}=t;
119
+ D(r)&&A(e,r,o,n)},"connectImports");import{ServiceType as Dt,ImportType as Mt}from"@ez4/topic/library";import{createPolicy as kt,
120
+ tryGetPolicy as jt}from"@ez4/aws-identity";import{getServiceName as $t}from"@ez4/project/library";var Te=i(async t=>{let{state:e,serviceType:r,options:o}=t;if(r!==Dt&&r!==Mt)return null;
121
+ let n=Object.values({options:o,...o.imports}).map(s=>$t("",s)),[p]=n,c=`${p}-top\
122
+ ic-policy`;return jt(e,c)??kt(e,{tags:o.tags,policyDocument:await k(n),policyName:c})},
123
+ "prepareExecutionPolicy");var Li=i(()=>{qt(),Qt(),Gt(),Ht(),_t(),Ut("@ez4/aws-topic",{"deploy:prepareExecu\
124
+ tionPolicy":Te,"deploy:prepareLinkedService":Bt,"deploy:prepareResources":Kt,"de\
125
+ ploy:connectResources":Zt}),U(),Y()},"registerTriggers"),Bt=i(t=>ue(t)??ye(t)??null,
126
+ "prepareLinkedService"),Kt=i(t=>Se(t)||ge(t),"prepareQueueResources"),Zt=i(t=>{fe(
127
+ t),de(t)},"connectQueueResources");var Di=i(t=>t.type===y,"isSubscriptionState");export{m as SubscriptionServiceName,y as SubscriptionServiceType,f as TopicServiceName,
128
+ l as TopicServiceType,N as createSubscription,oe as createSubscriptionFunction,E as createTopic,
129
+ h as createTopicStateId,eo as getTopic,te as getTopicArn,ee as getTopicState,Di as isSubscriptionState,
130
+ I as isTopicState,Li as registerTriggers};
127
131
  //# sourceMappingURL=main.mjs.map
@@ -1,4 +1,4 @@
1
- import type { Arn } from '@ez4/aws-common';
1
+ import type { Arn, OperationLogLine } from '@ez4/aws-common';
2
2
  export declare const enum SubscriptionProtocol {
3
3
  Lambda = "lambda",
4
4
  SQS = "sqs"
@@ -11,5 +11,5 @@ export type CreateRequest = {
11
11
  export type CreateResponse = {
12
12
  subscriptionArn: Arn;
13
13
  };
14
- export declare const createSubscription: (request: CreateRequest) => Promise<CreateResponse>;
15
- export declare const deleteSubscription: (subscriptionArn: string) => Promise<boolean>;
14
+ export declare const createSubscription: (logger: OperationLogLine, request: CreateRequest) => Promise<CreateResponse>;
15
+ export declare const deleteSubscription: (logger: OperationLogLine, subscriptionArn: string) => Promise<boolean>;
@@ -1,4 +1,4 @@
1
- import type { Arn, ResourceTags } from '@ez4/aws-common';
1
+ import type { Arn, OperationLogLine, ResourceTags } from '@ez4/aws-common';
2
2
  export type CreateRequest = {
3
3
  topicName: string;
4
4
  fifoMode: boolean;
@@ -7,7 +7,7 @@ export type CreateRequest = {
7
7
  export type CreateResponse = {
8
8
  topicArn: Arn;
9
9
  };
10
- export declare const createTopic: (request: CreateRequest) => Promise<CreateResponse>;
11
- export declare const deleteTopic: (topicArn: string) => Promise<boolean>;
12
- export declare const tagTopic: (topicArn: string, tags: ResourceTags) => Promise<void>;
13
- export declare const untagTopic: (topicArn: string, tagKeys: string[]) => Promise<void>;
10
+ export declare const createTopic: (logger: OperationLogLine, request: CreateRequest) => Promise<CreateResponse>;
11
+ export declare const deleteTopic: (logger: OperationLogLine, topicArn: string) => Promise<boolean>;
12
+ export declare const tagTopic: (logger: OperationLogLine, topicArn: string, tags: ResourceTags) => Promise<void>;
13
+ export declare const untagTopic: (logger: OperationLogLine, topicArn: string, tagKeys: string[]) => Promise<void>;
@@ -2,7 +2,7 @@ export declare namespace Defaults {
2
2
  /**
3
3
  * Default log retention in days.
4
4
  */
5
- const LogRetention = 15;
5
+ const LogRetention = 90;
6
6
  /**
7
7
  * Default function architecture.
8
8
  */
@@ -0,0 +1,2 @@
1
+ import { SNSClient } from '@aws-sdk/client-sns';
2
+ export declare const getSNSClient: () => SNSClient;
package/lib/message.ts CHANGED
@@ -3,8 +3,7 @@ import type { MessageSchema } from '@ez4/topic/utils';
3
3
  import type { Topic } from '@ez4/topic';
4
4
 
5
5
  import { getJsonMessage } from '@ez4/topic/utils';
6
- import { ServiceEventType } from '@ez4/common';
7
- import { Runtime } from '@ez4/common/runtime';
6
+ import { ServiceEventType, Runtime } from '@ez4/common';
8
7
  import { getRandomUUID } from '@ez4/utils';
9
8
 
10
9
  declare const __EZ4_SCHEMA: MessageSchema | 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.39.0",
4
+ "version": "0.41.0",
5
5
  "author": "Silas B.",
6
6
  "license": "MIT",
7
7
  "type": "module",
@@ -39,7 +39,7 @@
39
39
  ],
40
40
  "scripts": {
41
41
  "lint": "eslint --cache",
42
- "clean": "rm -f *.tsbuildinfo && rm -rf dist/*",
42
+ "clean": "rm -rf dist/* *.tsbuildinfo .eslintcache",
43
43
  "build": "tsc && node tools/bundler.mjs",
44
44
  "test": "npm run build && tsc -p tsconfig.test.json && ez4 test -e ../../../local.env",
45
45
  "local:publish": "npm run build && npm run clean:registry && npm publish --registry http://localhost:4873",
@@ -51,19 +51,19 @@
51
51
  },
52
52
  "dependencies": {
53
53
  "@aws-sdk/client-sns": "^3.958.0",
54
- "@ez4/aws-common": "^0.39.0",
55
- "@ez4/aws-identity": "^0.39.0",
56
- "@ez4/aws-function": "^0.39.0",
57
- "@ez4/aws-logs": "^0.39.0",
58
- "@ez4/aws-queue": "^0.39.0",
59
- "@ez4/common": "^0.39.0",
60
- "@ez4/project": "^0.39.0",
61
- "@ez4/queue": "^0.39.0",
62
- "@ez4/schema": "^0.39.0",
63
- "@ez4/stateful": "^0.39.0",
64
- "@ez4/topic": "^0.39.0",
65
- "@ez4/transform": "^0.39.0",
66
- "@ez4/utils": "^0.39.0",
67
- "@ez4/validator": "^0.39.0"
54
+ "@ez4/aws-common": "^0.41.0",
55
+ "@ez4/aws-identity": "^0.41.0",
56
+ "@ez4/aws-function": "^0.41.0",
57
+ "@ez4/aws-logs": "^0.41.0",
58
+ "@ez4/aws-queue": "^0.41.0",
59
+ "@ez4/common": "^0.41.0",
60
+ "@ez4/project": "^0.41.0",
61
+ "@ez4/queue": "^0.41.0",
62
+ "@ez4/schema": "^0.41.0",
63
+ "@ez4/stateful": "^0.41.0",
64
+ "@ez4/topic": "^0.41.0",
65
+ "@ez4/transform": "^0.41.0",
66
+ "@ez4/utils": "^0.41.0",
67
+ "@ez4/validator": "^0.41.0"
68
68
  }
69
69
  }