@ez4/aws-topic 0.36.0 → 0.38.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 +10 -9
- package/dist/client.mjs +8 -6
- package/dist/main.cjs +129 -124
- package/dist/main.mjs +122 -116
- package/dist/subscription/function/types.d.ts +3 -2
- package/dist/triggers/defaults.d.ts +10 -2
- package/lib/message.ts +15 -7
- package/package.json +16 -15
package/dist/client.cjs
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
"use strict";var
|
|
2
|
-
typeof
|
|
3
|
-
|
|
4
|
-
a=require("@aws-sdk/client-sns");var
|
|
5
|
-
let
|
|
6
|
-
Message:
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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
|
|
2
|
-
import{PublishCommand as
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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
|
|
2
|
-
typeof t=="object"||typeof t=="function")for(let n of
|
|
3
|
-
I(e,n,{get:()=>t[n],enumerable:!(o=
|
|
4
|
-
TopicServiceType:()=>y,createSubscription:()=>
|
|
5
|
-
createTopic:()=>
|
|
6
|
-
isSubscriptionState:()=>
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
t,r]=await Promise.all([(0,
|
|
10
|
-
[{permissions:["sns:Publish"],resourceIds:e.map(o=>
|
|
11
|
-
cyDocument");var
|
|
12
|
-
logCreate(
|
|
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,
|
|
15
|
-
eTopic"),
|
|
16
|
-
|
|
17
|
-
if(!(r instanceof
|
|
18
|
-
let r=(0,
|
|
19
|
-
{ResourceArn:e,Tags:(0,
|
|
20
|
-
async(e,t)=>{let r=(0,
|
|
21
|
-
await
|
|
22
|
-
getTopicHandler"),
|
|
23
|
-
"equalsResource"),
|
|
24
|
-
o={...t.parameters,dependencies:t.dependencies},n=(0,
|
|
25
|
-
return{...n,name:r.topicName}},"previewResource"),
|
|
26
|
-
throw new
|
|
27
|
-
source"),
|
|
28
|
-
[(0,
|
|
29
|
-
topicArn:r}=await
|
|
30
|
-
let{result:r,parameters:o}=e;r&&!o.import&&await
|
|
31
|
-
"updateResource"),
|
|
32
|
-
t.topicArn)},"deleteResource"),
|
|
33
|
-
tags,r.tags,o=>
|
|
34
|
-
|
|
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"),
|
|
38
|
-
logDelete(
|
|
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
|
|
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
|
|
44
|
-
getSubscriptionHandler"),
|
|
45
|
-
subscriptionArn,"equalsResource"),
|
|
46
|
-
dependencies},o={...t.parameters,dependencies:t.dependencies},n=(0,
|
|
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"),
|
|
49
|
-
|
|
50
|
-
parameters,[o,n]=await Promise.all([r.getTopicArn(t),r.getEndpoint(t)]),{subscriptionArn:p}=await
|
|
51
|
-
{protocol:
|
|
52
|
-
"createResource"),
|
|
53
|
-
t&&await
|
|
54
|
-
`Topic service ${t} wasn't found.`)}};var
|
|
55
|
-
|
|
56
|
-
o))throw new D(t);return o},"getTopicState"),
|
|
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
|
|
59
|
-
n=
|
|
60
|
-
...t,topicName:o}})},"createTopic"),
|
|
61
|
-
o:null},"getTopic");var
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
Ie=require("@ez4/aws-common");var
|
|
65
|
-
|
|
66
|
-
{templateFile:(0,
|
|
67
|
-
...
|
|
68
|
-
debug:
|
|
69
|
-
e,t,r,{handlerName:"snsEntryPoint",sourceFile:n.sourceFile,
|
|
70
|
-
|
|
71
|
-
debug:o.debug,tags:o.tags,
|
|
72
|
-
|
|
73
|
-
"
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
(0,
|
|
79
|
-
|
|
80
|
-
|
|
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,timeout:o.timeout,memory:o.memory,debug:o.debug,tags:o.tags,getFunctionVariables:i(
|
|
72
|
+
()=>p.reduce((a,f)=>({...a,...f}),{}),"getFunctionVariables"),getFunctionFiles:i(
|
|
73
|
+
()=>[n.sourceFile,n.dependencies],"getFunctionFiles"),getFunctionBundle:i(a=>Fe(
|
|
74
|
+
o,[...a.getDependencies(),...a.getConnections()]),"getFunctionBundle"),getFunctionHash:i(
|
|
75
|
+
()=>(0,Le.hashObject)({architecture:c,messageSchema:s}),"getFunctionHash")})},"c\
|
|
76
|
+
reateSubscriptionFunction");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.
|
|
81
83
|
all([(0,w.getRegion)(),(0,w.getAccountId)()]);return{principal:"sns.amazonaws.co\
|
|
82
|
-
m",sourceArn:
|
|
83
|
-
entryId);return(0,De.attachEntry)(e,{type:d,entryId:
|
|
84
|
-
...o,getTopicArn:i(
|
|
85
|
-
r)?(0,g.getFunctionArn)(
|
|
86
|
-
teSubscription");var
|
|
87
|
-
alName"),
|
|
88
|
-
getFunctionName");var
|
|
89
|
-
"Execution role for SNS is missing.")}};var
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
"
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
context:
|
|
121
|
-
if(!
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
(
|
|
125
|
-
r
|
|
126
|
-
|
|
127
|
-
t,
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
"
|
|
132
|
-
|
|
133
|
-
|
|
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,debug:o.debug,tags:o.tags,variables:[
|
|
103
|
+
o.variables,t.variables,p.variables],architecture:it,runtime:ot,timeout:ct,memory:pt,
|
|
104
|
+
handler:{sourceFile:c.file,functionName:c.name,module:c.module,dependencies:rt},
|
|
105
|
+
listener:s&&{functionName:s.name,sourceFile:s.file,module:s.module}}),n.setServiceState(
|
|
106
|
+
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:"\
|
|
116
|
+
Client",from:"@ez4/aws-topic/client",constructor:`@{EZ4_MODULE_IMPORT}.make(${p}\
|
|
117
|
+
, ${s}, ${c})`,connectionIds:[n],dependencyIds:[n]}},"prepareLinkedClient");var qe=i(e=>{let{service:t,options:r,context:o}=e;return(0,U.isTopicService)(t)?
|
|
118
|
+
_(o,t,r):null},"prepareLinkedServices"),Ge=i(e=>{let{state:t,service:r,options:o,
|
|
119
|
+
context:n}=e;if(!(0,U.isTopicService)(r))return!1;let{fifoMode:p}=r,c=C(t,{topicName:(0,Qe.getServiceName)(
|
|
120
|
+
r,o),fifoMode:!!p,tags:o.tags});return n.setServiceState(c,r,o),G(t,r,c,o,n),!0},
|
|
121
|
+
"prepareServices"),He=i(e=>{let{state:t,service:r,options:o,context:n}=e;(0,U.isTopicService)(
|
|
122
|
+
r)&&H(t,r,o,n)},"connectServices");var re=require("@ez4/project/library"),_e=require("@ez4/project/library"),B=require("@ez4/topic/library");var Ue=i(e=>{let{service:t,options:r,context:o}=e;if(!(0,B.isTopicImport)(t))return null;
|
|
123
|
+
let{project:n}=t,{imports:p}=r;if(!p||!p[n])throw new re.MissingImportedProjectError(
|
|
124
|
+
n);return _(o,t,p[n])},"prepareLinkedImports"),Be=i(e=>{let{state:t,service:r,options:o,
|
|
125
|
+
context:n}=e;if(!(0,B.isTopicImport)(r))return!1;let{reference:p,project:c}=r,{imports:s}=o;
|
|
126
|
+
if(!s||!s[c])throw new re.MissingImportedProjectError(c);let a=C(t,{topicName:(0,_e.getServiceName)(
|
|
127
|
+
p,s[c]),fifoMode:!!r.fifoMode,import:!0});return n.setServiceState(a,r,o),G(t,r,
|
|
128
|
+
a,o,n),!0},"prepareImports"),Ke=i(e=>{let{state:t,service:r,options:o,context:n}=e;
|
|
129
|
+
(0,B.isTopicImport)(r)&&H(t,r,o,n)},"connectImports");var K=require("@ez4/topic/library"),Z=require("@ez4/aws-identity"),Ze=require("@ez4/project/library");var Je=i(async e=>{let{state:t,serviceType:r,options:o}=e;if(r!==K.ServiceType&&
|
|
130
|
+
r!==K.ImportType)return null;let n=Object.values({options:o,...o.imports}).map(s=>(0,Ze.getServiceName)(
|
|
131
|
+
"",s)),[p]=n,c=`${p}-topic-policy`;return(0,Z.tryGetPolicy)(t,c)??(0,Z.createPolicy)(
|
|
132
|
+
t,{tags:o.tags,policyDocument:await ie(n),policyName:c})},"prepareExecutionPolic\
|
|
133
|
+
y");var Ct=i(()=>{(0,Ve.registerTriggers)(),(0,We.registerTriggers)(),(0,Xe.registerTriggers)(),
|
|
134
|
+
(0,Ye.registerTriggers)(),(0,et.registerTriggers)(),(0,tt.tryCreateTrigger)("@ez\
|
|
135
|
+
4/aws-topic",{"deploy:prepareExecutionPolicy":Je,"deploy:prepareLinkedService":Nt,
|
|
136
|
+
"deploy:prepareResources":ht,"deploy:connectResources":It}),fe(),Re()},"register\
|
|
137
|
+
Triggers"),Nt=i(e=>qe(e)??Ue(e)??null,"prepareLinkedService"),ht=i(e=>Ge(e)||Be(
|
|
138
|
+
e),"prepareQueueResources"),It=i(e=>{He(e),Ke(e)},"connectQueueResources");var Ft=i(e=>e.type===d,"isSubscriptionState");0&&(module.exports={SubscriptionServiceName,SubscriptionServiceType,TopicServiceName,
|
|
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,121 +1,127 @@
|
|
|
1
|
-
var
|
|
2
|
-
import{registerTriggers as
|
|
3
|
-
import{registerTriggers as
|
|
4
|
-
getAccountId as
|
|
5
|
-
t,r]=await Promise.all([
|
|
6
|
-
map(o=>
|
|
7
|
-
UntagResourceCommand as
|
|
8
|
-
getTagList as
|
|
9
|
-
S,t),{topicArn:(await
|
|
10
|
-
true",FifoThroughputScope:"MessageGroup",FifoTopic:"true"}},Tags:
|
|
11
|
-
EZ4"})}))).TopicArn}},"createTopic"),
|
|
12
|
-
logDelete(S,t);try{return await
|
|
13
|
-
|
|
14
|
-
e;
|
|
15
|
-
"tagTopic"),
|
|
16
|
-
send(new
|
|
17
|
-
tTopicHandler"),
|
|
18
|
-
equalsResource")
|
|
19
|
-
o={...t.parameters,dependencies:t.dependencies},n=
|
|
20
|
-
name:r.topicName}},"previewResource"),
|
|
21
|
-
S,e.entryId,t.entryId);return
|
|
22
|
-
if(t.import){let[o,n]=await Promise.all([
|
|
23
|
-
o,n)}}let{topicArn:r}=await $(t);return{topicArn:r}},"createResource"),
|
|
24
|
-
let{result:r,parameters:o}=e;r&&!o.import&&await
|
|
25
|
-
"updateResource"),
|
|
26
|
-
t.topicArn)},"deleteResource"),
|
|
27
|
-
o),o=>
|
|
28
|
-
import{Logger as
|
|
29
|
-
let{topicArn:r,protocol:o,endpoint:n}=e;return{subscriptionArn:(await
|
|
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"),
|
|
32
|
-
async e=>{let t=
|
|
33
|
-
{SubscriptionArn:e})),!0}catch(r){if(!(r instanceof
|
|
34
|
-
teSubscription");var
|
|
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
35
|
t);switch(r){case"lambda":case"sqs":return r}throw new W(e,`protocol ${r} is not\
|
|
36
|
-
supported.`)},"getSubscriptionProtocol");var
|
|
37
|
-
|
|
38
|
-
subscriptionArn,"equalsResource"),
|
|
39
|
-
dependencies},o={...t.parameters,dependencies:t.dependencies},n=
|
|
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"),
|
|
42
|
-
return
|
|
43
|
-
all([r.getTopicArn(t),r.getEndpoint(t)]),{subscriptionArn:p}=await J({protocol:
|
|
44
|
-
|
|
45
|
-
reateResource"),
|
|
46
|
-
t&&await
|
|
47
|
-
toKebabCase as
|
|
48
|
-
`Topic service ${t} wasn't found.`)}};var
|
|
49
|
-
icState"),
|
|
50
|
-
"getTopicState"),
|
|
51
|
-
topicArn)throw new
|
|
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"),
|
|
54
|
-
import{getFunctionState as
|
|
55
|
-
import{InvalidParameterError as
|
|
56
|
-
import{createLogGroup as
|
|
57
|
-
import{MappingServiceName as
|
|
58
|
-
|
|
59
|
-
sns",define:{...
|
|
60
|
-
context:p,debug:
|
|
61
|
-
snsEntryPoint",sourceFile:n.sourceFile,functionName:o.
|
|
62
|
-
description
|
|
63
|
-
tags:o.tags,
|
|
64
|
-
|
|
65
|
-
"
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
import{
|
|
69
|
-
import{
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
"
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
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
|
+
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,debug:o.debug,tags:o.tags,variables:[
|
|
92
|
+
o.variables,t.variables,p.variables],architecture:Re,runtime:Ee,timeout:Pe,memory:Ae,
|
|
93
|
+
handler:{sourceFile:c.file,functionName:c.name,module:c.module,dependencies:ve},
|
|
94
|
+
listener:s&&{functionName:s.name,sourceFile:s.file,module:s.module}}),n.setServiceState(
|
|
95
|
+
u,a,o)}I(e,r,u,{fromService:u.parameters.functionName});break}case R.Queue:{let c=Se(
|
|
96
|
+
n,p.service,o);I(e,r,c,{fromService:c.parameters.queueName});break}}},"prepareSu\
|
|
97
|
+
bscriptions"),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};
|
|
121
127
|
//# sourceMappingURL=main.mjs.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import type { ContextSource, LinkedVariables } from '@ez4/project/library';
|
|
1
2
|
import type { TopicMessageSchema } from '@ez4/topic/library';
|
|
2
3
|
import type { FunctionParameters } from '@ez4/aws-function';
|
|
3
|
-
import type { ContextSource } from '@ez4/project/library';
|
|
4
4
|
export type SubscriptionFunction = {
|
|
5
5
|
functionName: string;
|
|
6
6
|
sourceFile: string;
|
|
@@ -9,10 +9,11 @@ export type SubscriptionFunction = {
|
|
|
9
9
|
export type SubscriptionEntryPoint = SubscriptionFunction & {
|
|
10
10
|
dependencies: string[];
|
|
11
11
|
};
|
|
12
|
-
export type SubscriptionFunctionParameters = Omit<FunctionParameters, 'getFunctionFiles' | 'getFunctionBundle' | 'getFunctionHash' | 'sourceFile' | 'handlerName'> & {
|
|
12
|
+
export type SubscriptionFunctionParameters = Omit<FunctionParameters, 'getFunctionFiles' | 'getFunctionBundle' | 'getFunctionHash' | 'getFunctionVariables' | 'sourceFile' | 'handlerName'> & {
|
|
13
13
|
handler: SubscriptionEntryPoint;
|
|
14
14
|
listener?: SubscriptionFunction;
|
|
15
15
|
messageSchema?: TopicMessageSchema;
|
|
16
16
|
context?: Record<string, ContextSource>;
|
|
17
|
+
variables: (LinkedVariables | undefined)[];
|
|
17
18
|
debug?: boolean;
|
|
18
19
|
};
|
|
@@ -4,11 +4,19 @@ export declare namespace Defaults {
|
|
|
4
4
|
*/
|
|
5
5
|
const LogRetention = 90;
|
|
6
6
|
/**
|
|
7
|
-
* Default
|
|
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
|
|
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
|
|
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
|
|
30
|
+
throw new Error(`Validation schema for SNS message wasn't found.`);
|
|
30
31
|
}
|
|
31
32
|
|
|
32
|
-
for (const
|
|
33
|
-
const payload = JSON.parse(
|
|
34
|
-
const message = await
|
|
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.
|
|
4
|
+
"version": "0.38.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.
|
|
54
|
-
"@ez4/aws-common": "^0.
|
|
55
|
-
"@ez4/aws-identity": "^0.
|
|
56
|
-
"@ez4/aws-function": "^0.
|
|
57
|
-
"@ez4/aws-logs": "^0.
|
|
58
|
-
"@ez4/aws-queue": "^0.
|
|
59
|
-
"@ez4/
|
|
60
|
-
"@ez4/project": "^0.
|
|
61
|
-
"@ez4/queue": "^0.
|
|
62
|
-
"@ez4/schema": "^0.
|
|
63
|
-
"@ez4/stateful": "^0.
|
|
64
|
-
"@ez4/
|
|
65
|
-
"@ez4/
|
|
66
|
-
"@ez4/utils": "^0.
|
|
53
|
+
"@aws-sdk/client-sns": "^3.958.0",
|
|
54
|
+
"@ez4/aws-common": "^0.38.0",
|
|
55
|
+
"@ez4/aws-identity": "^0.38.0",
|
|
56
|
+
"@ez4/aws-function": "^0.38.0",
|
|
57
|
+
"@ez4/aws-logs": "^0.38.0",
|
|
58
|
+
"@ez4/aws-queue": "^0.38.0",
|
|
59
|
+
"@ez4/common": "^0.38.0",
|
|
60
|
+
"@ez4/project": "^0.38.0",
|
|
61
|
+
"@ez4/queue": "^0.38.0",
|
|
62
|
+
"@ez4/schema": "^0.38.0",
|
|
63
|
+
"@ez4/stateful": "^0.38.0",
|
|
64
|
+
"@ez4/topic": "^0.38.0",
|
|
65
|
+
"@ez4/transform": "^0.38.0",
|
|
66
|
+
"@ez4/utils": "^0.38.0",
|
|
67
|
+
"@ez4/validator": "^0.38.0"
|
|
67
68
|
}
|
|
68
69
|
}
|