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