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