@ez4/aws-function 0.2.0 → 0.4.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/README.md +12 -0
- package/dist/function/client.d.ts +0 -1
- package/dist/function/types.d.ts +0 -1
- package/dist/main.cjs +94 -97
- package/dist/main.mjs +91 -92
- package/package.json +9 -6
package/README.md
CHANGED
package/dist/function/types.d.ts
CHANGED
|
@@ -5,7 +5,6 @@ export declare const FunctionServiceName = "AWS:Lambda/Function";
|
|
|
5
5
|
export declare const FunctionServiceType = "aws:lambda.function";
|
|
6
6
|
export type FunctionParameters = Omit<CreateRequest, 'roleArn'>;
|
|
7
7
|
export type FunctionResult = CreateResponse & {
|
|
8
|
-
sourceTime: number;
|
|
9
8
|
sourceHash: string;
|
|
10
9
|
roleArn: Arn;
|
|
11
10
|
};
|
package/dist/main.cjs
CHANGED
|
@@ -1,105 +1,102 @@
|
|
|
1
|
-
"use strict";var
|
|
2
|
-
typeof t=="object"||typeof t=="function")for(let o of
|
|
3
|
-
|
|
4
|
-
enumerable:!0}):n,e)),
|
|
5
|
-
MappingServiceType:()=>F,PermissionServiceName:()=>w,PermissionServiceType:()=>
|
|
6
|
-
createFunction:()=>
|
|
7
|
-
getFunctionArn:()=>
|
|
8
|
-
isMapping:()=>
|
|
9
|
-
dt);var
|
|
10
|
-
|
|
11
|
-
i,`${t} is an invalid variable name .`)},
|
|
12
|
-
e[n]);return t};var
|
|
13
|
-
r=await(0,
|
|
14
|
-
i,
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
nodejs20.x",Code:{ZipFile:await
|
|
18
|
-
Tags:{...
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
f.Logger.logUpdate(i,`${e} configuration`),
|
|
26
|
-
await S.send(new
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
let{parameters:t}=e;return t.variables&&(t.variables=
|
|
32
|
-
result&&e.result.functionArn===t.result?.functionArn,
|
|
33
|
-
r=t.parameters,o=(0,
|
|
34
|
-
n.sourceFile),...n.variables&&{variables:
|
|
1
|
+
"use strict";var Ne=Object.create;var b=Object.defineProperty;var Ie=Object.getOwnPropertyDescriptor;var he=Object.getOwnPropertyNames;var Me=Object.getPrototypeOf,Te=Object.prototype.hasOwnProperty;var ze=(e,t)=>{for(var n in t)b(e,n,{get:t[n],enumerable:!0})},L=(e,t,n,r)=>{if(t&&
|
|
2
|
+
typeof t=="object"||typeof t=="function")for(let o of he(t))!Te.call(e,o)&&o!==n&&
|
|
3
|
+
b(e,o,{get:()=>t[o],enumerable:!(r=Ie(t,o))||r.enumerable});return e};var Ue=(e,t,n)=>(n=e!=null?Ne(Me(e)):{},L(t||!e||!e.__esModule?b(n,"default",{value:e,
|
|
4
|
+
enumerable:!0}):n,e)),De=e=>L(b({},"__esModule",{value:!0}),e);var dt={};ze(dt,{FunctionServiceName:()=>i,FunctionServiceType:()=>u,MappingServiceName:()=>y,
|
|
5
|
+
MappingServiceType:()=>F,PermissionServiceName:()=>w,PermissionServiceType:()=>d,
|
|
6
|
+
createFunction:()=>at,createMapping:()=>mt,createPermission:()=>it,getFunction:()=>st,
|
|
7
|
+
getFunctionArn:()=>Ge,getFunctionName:()=>R,getPermission:()=>pt,isFunction:()=>Fe,
|
|
8
|
+
isMapping:()=>ct,isPermission:()=>Pe,registerTriggers:()=>ut});module.exports=De(
|
|
9
|
+
dt);var T=require("@ez4/aws-common");var ee=require("@aws-sdk/client-lambda"),P=require("@ez4/aws-common"),l=require("@ez4/utils"),
|
|
10
|
+
D=require("@ez4/aws-identity");var s=require("@aws-sdk/client-lambda"),f=require("@ez4/aws-common");var B=require("@ez4/aws-common"),$=require("@ez4/utils");var i="AWS:Lambda/Function",u="aws:lambda.function";var He=/[a-z][\w]+/i,je=e=>He.test(e),z=e=>{for(let t in e)if(!je(t))throw new B.InvalidParameterError(
|
|
11
|
+
i,`${t} is an invalid variable name .`)},N=e=>{let t={};for(let n in e)t[n]=(0,$.hashData)(
|
|
12
|
+
e[n]);return t};var W=Ue(require("adm-zip"),1),Z=require("node:fs/promises"),k=async(e,t)=>{let n=new W.default,
|
|
13
|
+
r=await(0,Z.readFile)(e);return n.addFile(t,r),n.toBufferPromise()};var S=new s.LambdaClient({}),U={maxWaitTime:90,client:S},G=async e=>{let{functionName:t,
|
|
14
|
+
variables:n}=e;f.Logger.logCreate(i,t),n&&z(n);let{description:r,memory:o,timeout:a,
|
|
15
|
+
roleArn:c,handlerName:m,sourceFile:x,tags:g}=e,be=(await S.send(new s.CreateFunctionCommand(
|
|
16
|
+
{Publish:!0,FunctionName:t,Description:r,MemorySize:o,Timeout:a,Role:c,PackageType:"\
|
|
17
|
+
Zip",Handler:Y(m),Runtime:"nodejs20.x",Code:{ZipFile:await X(x)},Environment:{Variables:n},
|
|
18
|
+
Tags:{...g,ManagedBy:"EZ4"}}))).FunctionArn;return await(0,s.waitUntilFunctionActive)(
|
|
19
|
+
U,{FunctionName:t}),{functionArn:be}},O=async(e,t)=>{f.Logger.logTag(i,e),await S.
|
|
20
|
+
send(new s.TagResourceCommand({Resource:e,Tags:{...t,ManagedBy:"EZ4"}}))},K=async(e,t)=>{
|
|
21
|
+
f.Logger.logUntag(i,e),await S.send(new s.UntagResourceCommand({Resource:e,TagKeys:t}))},
|
|
22
|
+
_=async(e,t)=>{f.Logger.logUpdate(i,`${e} source code`);let{sourceFile:n}=t;await S.
|
|
23
|
+
send(new s.UpdateFunctionCodeCommand({FunctionName:e,ZipFile:await X(n),Publish:!0})),
|
|
24
|
+
await(0,s.waitUntilFunctionUpdated)(U,{FunctionName:e})},J=async(e,t)=>{let{variables:n}=t;
|
|
25
|
+
f.Logger.logUpdate(i,`${e} configuration`),n&&z(n);let{description:r,memory:o,timeout:a,
|
|
26
|
+
roleArn:c,handlerName:m}=t;await S.send(new s.UpdateFunctionConfigurationCommand(
|
|
27
|
+
{FunctionName:e,Description:r,MemorySize:o,Timeout:a,Role:c,...m&&{Handler:Y(m)},
|
|
28
|
+
Environment:{Variables:n}})),await(0,s.waitUntilFunctionUpdated)(U,{FunctionName:e})},
|
|
29
|
+
Q=async e=>{f.Logger.logDelete(i,e),await S.send(new s.DeleteFunctionCommand({FunctionName:e}))},
|
|
30
|
+
X=e=>k(e,"main.mjs"),Y=e=>`main.${e}`;var te=()=>({equals:qe,create:re,replace:Le,preview:Ve,update:Be,delete:$e}),ne=e=>{
|
|
31
|
+
let{parameters:t}=e;return t.variables&&(t.variables=N(t.variables)),e},qe=(e,t)=>!!e.
|
|
32
|
+
result&&e.result.functionArn===t.result?.functionArn,Ve=async(e,t)=>{let n=e.parameters,
|
|
33
|
+
r=t.parameters,o=(0,l.deepCompare)({...n,dependencies:e.dependencies,sourceHash:await(0,l.hashFile)(
|
|
34
|
+
n.sourceFile),...n.variables&&{variables:N(n.variables)}},{...r,dependencies:t.dependencies,
|
|
35
35
|
sourceHash:t.result?.sourceHash});if(o.counts)return{...o,name:n.functionName}},
|
|
36
|
-
|
|
37
|
-
return
|
|
38
|
-
i,r,t),
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
result
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
e
|
|
54
|
-
p).at(0)?.result;if(!r?.functionArn)throw new V.IncompleteResourceError(e,t,"fun\
|
|
55
|
-
ctionArn");return r.functionArn};var R=require("@aws-sdk/client-lambda"),L=require("@ez4/aws-common");var w="AWS:Lambda/Permission",g="aws:lambda.permission";var se=new R.LambdaClient({}),ie=async e=>{L.Logger.logCreate(w,e.functionName);
|
|
56
|
-
let t=e.statementId??`SID${Date.now()}`;return await se.send(new R.AddPermissionCommand(
|
|
36
|
+
Le=async(e,t,n)=>{if(t.result)throw new P.ReplaceResourceError(i,e.entryId,t.entryId);
|
|
37
|
+
return re(e,n)},re=async(e,t)=>{let n=e.parameters,r=n.functionName,o=(0,D.getRoleArn)(
|
|
38
|
+
i,r,t),a=n.sourceFile,c=await(0,l.hashFile)(a),m,x=await(0,l.waitFor)(async()=>{
|
|
39
|
+
try{return await G({...n,sourceFile:a,roleArn:o})}catch(g){if(!(g instanceof ee.InvalidParameterValueException))
|
|
40
|
+
throw g;return m=g,null}});if(!x)throw m;return ne(e),{functionArn:x.functionArn,
|
|
41
|
+
sourceHash:c,roleArn:o}},Be=async(e,t,n)=>{let{parameters:r,result:o}=e;if(!o)return;
|
|
42
|
+
let a=r.functionName,c=(0,D.getRoleArn)(i,a,n),m={...r,roleArn:c},x={...t.parameters,
|
|
43
|
+
roleArn:t.result?.roleArn??c};await Promise.all([We(a,m,x),Ze(o.functionArn,r,t.
|
|
44
|
+
parameters)]);let g=await ke(a,r,t.result);return ne(e),{...o,sourceHash:g,roleArn:c}},
|
|
45
|
+
$e=async e=>{let{result:t,parameters:n}=e;t&&await(0,P.waitDeletion)(()=>Q(n.functionName))},
|
|
46
|
+
We=async(e,t,n)=>{let r={...t,...t.variables&&{variables:N(t.variables)}};!(0,l.deepEqual)(
|
|
47
|
+
r,n,{sourceFile:!0,functionName:!0,tags:!0})&&await J(e,t)},Ze=async(e,t,n)=>{await(0,P.applyTagUpdates)(
|
|
48
|
+
t.tags,n.tags,r=>O(e,r),r=>K(e,r))},ke=async(e,t,n)=>{let r=t.sourceFile,o=await(0,l.hashFile)(
|
|
49
|
+
r),a=n?.sourceHash;return o!==a?(await _(e,t),o):a};var ie=require("@ez4/aws-common");var H=require("@ez4/aws-common");var R=(e,t,n)=>{let r=n.getDependencies(u).at(0);if(!r?.parameters.functionName)
|
|
50
|
+
throw new H.IncompleteResourceError(e,t,"functionName");return r.parameters.functionName},
|
|
51
|
+
Ge=(e,t,n)=>{let r=n.getDependencies(u).at(0)?.result;if(!r?.functionArn)throw new H.IncompleteResourceError(
|
|
52
|
+
e,t,"functionArn");return r.functionArn};var C=require("@aws-sdk/client-lambda"),j=require("@ez4/aws-common");var w="AWS:Lambda/Permission",d="aws:lambda.permission";var oe=new C.LambdaClient({}),ae=async e=>{j.Logger.logCreate(w,e.functionName);
|
|
53
|
+
let t=e.statementId??`SID${Date.now()}`;return await oe.send(new C.AddPermissionCommand(
|
|
57
54
|
{StatementId:t,FunctionName:e.functionName,SourceArn:e.sourceArn,Principal:e.principal,
|
|
58
|
-
Action:e.action})),{statementId:t}},
|
|
59
|
-
send(new
|
|
60
|
-
result&&e.result.functionName===t.result?.functionName,
|
|
61
|
-
if(t.result)throw new
|
|
62
|
-
n)},
|
|
63
|
-
t);return{statementId:(await
|
|
64
|
-
sourceArn,action:"lambda:InvokeFunction"})).statementId,functionName:r}},
|
|
65
|
-
|
|
66
|
-
service:t}=(0,
|
|
55
|
+
Action:e.action})),{statementId:t}},se=async(e,t)=>{j.Logger.logDelete(w,e),await oe.
|
|
56
|
+
send(new C.RemovePermissionCommand({FunctionName:e,StatementId:t}))};var pe=()=>({equals:Oe,create:ce,replace:_e,preview:Ke,update:Je,delete:Qe}),Oe=(e,t)=>!!e.
|
|
57
|
+
result&&e.result.functionName===t.result?.functionName,Ke=async(e,t)=>{},_e=async(e,t,n)=>{
|
|
58
|
+
if(t.result)throw new ie.ReplaceResourceError(w,e.entryId,t.entryId);return ce(e,
|
|
59
|
+
n)},ce=async(e,t)=>{let n=e.parameters,r=R(w,"permission",t),o=await n.getPermission(
|
|
60
|
+
t);return{statementId:(await ae({functionName:r,principal:o.principal,sourceArn:o.
|
|
61
|
+
sourceArn,action:"lambda:InvokeFunction"})).statementId,functionName:r}},Je=async()=>{},
|
|
62
|
+
Qe=async e=>{let t=e.result;t&&await se(t.functionName,t.statementId)};var ge=require("@ez4/aws-common"),h=require("@ez4/utils");var p=require("@aws-sdk/client-lambda"),E=require("@ez4/aws-common"),me=require("@ez4/utils");var y="AWS:Lambda/Mapping",F="aws:lambda.mapping";var I=new p.LambdaClient({}),ue=async e=>{E.Logger.logCreate(y,e.functionName);let{
|
|
63
|
+
service:t}=(0,E.parseArn)(e.sourceArn),{batch:n}=e,o=(await I.send(new p.CreateEventSourceMappingCommand(
|
|
67
64
|
{FunctionName:e.functionName,EventSourceArn:e.sourceArn,Enabled:e.enabled,...t===
|
|
68
|
-
"dynamodb"&&{StartingPosition:
|
|
69
|
-
MaximumBatchingWindowInSeconds:n.maxWindow}}))).UUID;return await
|
|
70
|
-
|
|
65
|
+
"dynamodb"&&{StartingPosition:p.EventSourcePosition.LATEST},...n&&{BatchSize:n.batchSize,
|
|
66
|
+
MaximumBatchingWindowInSeconds:n.maxWindow}}))).UUID;return await de(o),{eventId:o}},
|
|
67
|
+
le=async(e,t)=>{E.Logger.logUpdate(y,e);let{batch:n}=t;await I.send(new p.UpdateEventSourceMappingCommand(
|
|
71
68
|
{UUID:e,FunctionName:t.functionName,Enabled:t.enabled,...n&&{BatchSize:n.batchSize,
|
|
72
|
-
MaximumBatchingWindowInSeconds:n.maxWindow}})),await
|
|
73
|
-
logDelete(
|
|
74
|
-
send(new
|
|
75
|
-
["Enabled","Disabled"]);await(0,
|
|
76
|
-
has(n)})};var
|
|
77
|
-
result&&e.result.eventId===t.result?.eventId,
|
|
78
|
-
dependencies:e.dependencies},r={...t.parameters,dependencies:t.dependencies},o=(0,
|
|
79
|
-
n,r,{getSourceArn:!0});return o.counts?o:void 0},
|
|
80
|
-
|
|
81
|
-
"mapping",t),o=await n.getSourceArn(t);return{eventId:(await
|
|
82
|
-
functionName:r,sourceArn:o})).eventId,functionName:r,sourceArn:o}},
|
|
83
|
-
let r=e.result;if(!r)return;let o=
|
|
84
|
-
|
|
85
|
-
r.eventId,
|
|
86
|
-
eventId)},
|
|
87
|
-
|
|
88
|
-
parameters:{...n,functionName:r}})},
|
|
89
|
-
|
|
90
|
-
return(0,
|
|
91
|
-
parameters:r})},pt=(e,t,n)=>{let r=(0,
|
|
92
|
-
return o&&
|
|
93
|
-
return(0,
|
|
94
|
-
parameters:r})};var
|
|
95
|
-
(0,
|
|
69
|
+
MaximumBatchingWindowInSeconds:n.maxWindow}})),await de(e)},ye=async e=>{E.Logger.
|
|
70
|
+
logDelete(y,e),await I.send(new p.DeleteEventSourceMappingCommand({UUID:e}))},Xe=async e=>(await I.
|
|
71
|
+
send(new p.GetEventSourceMappingCommand({UUID:e}))).State,de=async e=>{let t=new Set(
|
|
72
|
+
["Enabled","Disabled"]);await(0,me.waitFor)(async()=>{let n=await Xe(e);return t.
|
|
73
|
+
has(n)})};var fe=()=>({equals:Ye,create:Se,replace:tt,preview:et,update:nt,delete:rt}),Ye=(e,t)=>!!e.
|
|
74
|
+
result&&e.result.eventId===t.result?.eventId,et=async(e,t)=>{let n={...e.parameters,
|
|
75
|
+
dependencies:e.dependencies},r={...t.parameters,dependencies:t.dependencies},o=(0,h.deepCompare)(
|
|
76
|
+
n,r,{getSourceArn:!0});return o.counts?o:void 0},tt=async(e,t,n)=>{if(t.result)throw new ge.ReplaceResourceError(
|
|
77
|
+
y,e.entryId,t.entryId);return Se(e,n)},Se=async(e,t)=>{let n=e.parameters,r=R(y,
|
|
78
|
+
"mapping",t),o=await n.getSourceArn(t);return{eventId:(await ue({...e.parameters,
|
|
79
|
+
functionName:r,sourceArn:o})).eventId,functionName:r,sourceArn:o}},nt=async(e,t,n)=>{
|
|
80
|
+
let r=e.result;if(!r)return;let o=R(y,"mapping",n),a=t.result?.functionName??r.functionName,
|
|
81
|
+
c={...e.parameters,functionName:o},m={...t.parameters,functionName:a};return await ot(
|
|
82
|
+
r.eventId,c,m),{...r,functionName:o}},rt=async e=>{let t=e.result;t&&await ye(t.
|
|
83
|
+
eventId)},ot=async(e,t,n)=>{(0,h.deepEqual)(t,n,{getSourceArn:!0})||await le(e,t)};var A=require("@ez4/utils"),we=require("@ez4/stateful");var Fe=e=>e.type===u,at=(e,t,n)=>{let r=(0,A.toKebabCase)(n.functionName),o=(0,A.hashData)(
|
|
84
|
+
u,t.entryId,r);return(0,we.attachEntry)(e,{type:u,entryId:o,dependencies:[t.entryId],
|
|
85
|
+
parameters:{...n,functionName:r}})},st=(e,t,n)=>{let r=(0,A.toKebabCase)(n),o=(0,A.hashData)(
|
|
86
|
+
u,t.entryId,r),a=e[o];return a&&Fe(a)?a:null};var q=require("@ez4/utils"),xe=require("@ez4/stateful");var Pe=e=>e.type===d,it=(e,t,n,r)=>{let o=(0,q.hashData)(d,t.entryId,n.entryId);
|
|
87
|
+
return(0,xe.attachEntry)(e,{type:d,entryId:o,dependencies:[t.entryId,n.entryId],
|
|
88
|
+
parameters:r})},pt=(e,t,n)=>{let r=(0,q.hashData)(d,t.entryId,n.entryId),o=e[r];
|
|
89
|
+
return o&&Pe(o)?o:null};var Re=require("@ez4/utils"),Ce=require("@ez4/stateful");var ct=e=>e.type===F,mt=(e,t,n,r)=>{let o=(0,Re.hashData)(F,t.entryId,n.entryId);
|
|
90
|
+
return(0,Ce.attachEntry)(e,{type:F,entryId:o,dependencies:[t.entryId,n.entryId],
|
|
91
|
+
parameters:r})};var Ae=require("@ez4/aws-common"),M=require("@ez4/aws-identity"),ve=require("@ez4/project/library");var v=require("@ez4/aws-identity"),Ee=async e=>{let[t,n]=await Promise.all([(0,v.getRegion)(),
|
|
92
|
+
(0,v.getAccountId)()]);return(0,v.createPolicyDocument)([{permissions:["logs:Cre\
|
|
96
93
|
ateLogGroup","logs:CreateLogStream","logs:PutLogEvents"],resourceIds:[`arn:aws:l\
|
|
97
|
-
ogs:${t}:${n}:log-group:/aws/lambda/${e}-*:*`]}])};var
|
|
98
|
-
"@ez4/aws-function",{"deploy:prepareIdentityAccount":
|
|
99
|
-
Policy":
|
|
100
|
-
state:t,options:n}=e,{resourcePrefix:r,projectName:o}=n
|
|
101
|
-
t,{policyName:`${
|
|
102
|
-
F,
|
|
94
|
+
ogs:${t}:${n}:log-group:/aws/lambda/${e}-*:*`]}])};var V=!1,ut=()=>(V||((0,Ae.registerTriggers)(),(0,M.registerTriggers)(),(0,ve.createTrigger)(
|
|
95
|
+
"@ez4/aws-function",{"deploy:prepareIdentityAccount":lt,"deploy:prepareExecution\
|
|
96
|
+
Policy":yt}),V=!0),V),lt=()=>[{account:"lambda.amazonaws.com"}],yt=async e=>{let{
|
|
97
|
+
state:t,options:n}=e,{resourcePrefix:r,projectName:o}=n,a=`${r}-${o}`;return(0,M.createPolicy)(
|
|
98
|
+
t,{policyName:`${a}-lambda-policy`,policyDocument:await Ee(a)})};(0,T.registerProvider)(u,te());(0,T.registerProvider)(d,pe());(0,T.registerProvider)(
|
|
99
|
+
F,fe());0&&(module.exports={FunctionServiceName,FunctionServiceType,MappingServiceName,MappingServiceType,
|
|
103
100
|
PermissionServiceName,PermissionServiceType,createFunction,createMapping,createPermission,
|
|
104
101
|
getFunction,getFunctionArn,getFunctionName,getPermission,isFunction,isMapping,isPermission,
|
|
105
102
|
registerTriggers});
|
package/dist/main.mjs
CHANGED
|
@@ -1,96 +1,95 @@
|
|
|
1
|
-
import{registerProvider as v}from"@ez4/aws-common";import{
|
|
2
|
-
|
|
3
|
-
import{deepCompare as
|
|
4
|
-
import{getRoleArn as
|
|
5
|
-
TagResourceCommand as de,UntagResourceCommand as
|
|
6
|
-
UpdateFunctionConfigurationCommand as
|
|
7
|
-
import{Logger as g}from"@ez4/aws-common";import{InvalidParameterError as
|
|
8
|
-
s,`${t} is an invalid variable name .`)},
|
|
9
|
-
return t};import
|
|
10
|
-
let n=new
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
result
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
roleArn
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
import{Logger as k}from"@ez4/aws-common";var d="AWS:Lambda/Permission",y="aws:lambda.permission";var G=new He({}),O=async e=>{k.logCreate(d,e.functionName);let t=e.statementId??
|
|
49
|
-
`SID${Date.now()}`;return await G.send(new De({StatementId:t,FunctionName:e.functionName,
|
|
1
|
+
import{registerProvider as v}from"@ez4/aws-common";import{InvalidParameterValueException as Fe}from"@aws-sdk/client-lambda";import{
|
|
2
|
+
applyTagUpdates as xe,ReplaceResourceError as Pe,waitDeletion as Re}from"@ez4/aws-common";
|
|
3
|
+
import{deepCompare as Ce,deepEqual as Ee,hashFile as C,waitFor as Ae}from"@ez4/utils";
|
|
4
|
+
import{getRoleArn as j}from"@ez4/aws-identity";import{CreateFunctionCommand as ue,DeleteFunctionCommand as le,LambdaClient as ye,
|
|
5
|
+
TagResourceCommand as de,UntagResourceCommand as ge,UpdateFunctionCodeCommand as fe,
|
|
6
|
+
UpdateFunctionConfigurationCommand as Se,waitUntilFunctionActive as we,waitUntilFunctionUpdated as N}from"@aws-sdk/client-lambda";
|
|
7
|
+
import{Logger as g}from"@ez4/aws-common";import{InvalidParameterError as ae}from"@ez4/aws-common";import{hashData as se}from"@ez4/utils";var s="AWS:Lambda/Function",c="aws:lambda.function";var ie=/[a-z][\w]+/i,pe=e=>ie.test(e),P=e=>{for(let t in e)if(!pe(t))throw new ae(
|
|
8
|
+
s,`${t} is an invalid variable name .`)},F=e=>{let t={};for(let n in e)t[n]=se(e[n]);
|
|
9
|
+
return t};import ce from"adm-zip";import{readFile as me}from"node:fs/promises";var b=async(e,t)=>{
|
|
10
|
+
let n=new ce,r=await me(e);return n.addFile(t,r),n.toBufferPromise()};var l=new ye({}),R={maxWaitTime:90,client:l},I=async e=>{let{functionName:t,variables:n}=e;
|
|
11
|
+
g.logCreate(s,t),n&&P(n);let{description:r,memory:o,timeout:a,roleArn:i,handlerName:p,
|
|
12
|
+
sourceFile:d,tags:u}=e,oe=(await l.send(new ue({Publish:!0,FunctionName:t,Description:r,
|
|
13
|
+
MemorySize:o,Timeout:a,Role:i,PackageType:"Zip",Handler:H(p),Runtime:"nodejs20.x",
|
|
14
|
+
Code:{ZipFile:await D(d)},Environment:{Variables:n},Tags:{...u,ManagedBy:"EZ4"}}))).
|
|
15
|
+
FunctionArn;return await we(R,{FunctionName:t}),{functionArn:oe}},h=async(e,t)=>{
|
|
16
|
+
g.logTag(s,e),await l.send(new de({Resource:e,Tags:{...t,ManagedBy:"EZ4"}}))},M=async(e,t)=>{
|
|
17
|
+
g.logUntag(s,e),await l.send(new ge({Resource:e,TagKeys:t}))},T=async(e,t)=>{g.logUpdate(
|
|
18
|
+
s,`${e} source code`);let{sourceFile:n}=t;await l.send(new fe({FunctionName:e,ZipFile:await D(
|
|
19
|
+
n),Publish:!0})),await N(R,{FunctionName:e})},z=async(e,t)=>{let{variables:n}=t;
|
|
20
|
+
g.logUpdate(s,`${e} configuration`),n&&P(n);let{description:r,memory:o,timeout:a,
|
|
21
|
+
roleArn:i,handlerName:p}=t;await l.send(new Se({FunctionName:e,Description:r,MemorySize:o,
|
|
22
|
+
Timeout:a,Role:i,...p&&{Handler:H(p)},Environment:{Variables:n}})),await N(R,{FunctionName:e})},
|
|
23
|
+
U=async e=>{g.logDelete(s,e),await l.send(new le({FunctionName:e}))},D=e=>b(e,"m\
|
|
24
|
+
ain.mjs"),H=e=>`main.${e}`;var q=()=>({equals:ve,create:L,replace:Ne,preview:be,update:Ie,delete:he}),V=e=>{
|
|
25
|
+
let{parameters:t}=e;return t.variables&&(t.variables=F(t.variables)),e},ve=(e,t)=>!!e.
|
|
26
|
+
result&&e.result.functionArn===t.result?.functionArn,be=async(e,t)=>{let n=e.parameters,
|
|
27
|
+
r=t.parameters,o=Ce({...n,dependencies:e.dependencies,sourceHash:await C(n.sourceFile),
|
|
28
|
+
...n.variables&&{variables:F(n.variables)}},{...r,dependencies:t.dependencies,sourceHash:t.
|
|
29
|
+
result?.sourceHash});if(o.counts)return{...o,name:n.functionName}},Ne=async(e,t,n)=>{
|
|
30
|
+
if(t.result)throw new Pe(s,e.entryId,t.entryId);return L(e,n)},L=async(e,t)=>{let n=e.
|
|
31
|
+
parameters,r=n.functionName,o=j(s,r,t),a=n.sourceFile,i=await C(a),p,d=await Ae(
|
|
32
|
+
async()=>{try{return await I({...n,sourceFile:a,roleArn:o})}catch(u){if(!(u instanceof
|
|
33
|
+
Fe))throw u;return p=u,null}});if(!d)throw p;return V(e),{functionArn:d.functionArn,
|
|
34
|
+
sourceHash:i,roleArn:o}},Ie=async(e,t,n)=>{let{parameters:r,result:o}=e;if(!o)return;
|
|
35
|
+
let a=r.functionName,i=j(s,a,n),p={...r,roleArn:i},d={...t.parameters,roleArn:t.
|
|
36
|
+
result?.roleArn??i};await Promise.all([Me(a,p,d),Te(o.functionArn,r,t.parameters)]);
|
|
37
|
+
let u=await ze(a,r,t.result);return V(e),{...o,sourceHash:u,roleArn:i}},he=async e=>{
|
|
38
|
+
let{result:t,parameters:n}=e;t&&await Re(()=>U(n.functionName))},Me=async(e,t,n)=>{
|
|
39
|
+
let r={...t,...t.variables&&{variables:F(t.variables)}};!Ee(r,n,{sourceFile:!0,functionName:!0,
|
|
40
|
+
tags:!0})&&await z(e,t)},Te=async(e,t,n)=>{await xe(t.tags,n.tags,r=>h(e,r),r=>M(
|
|
41
|
+
e,r))},ze=async(e,t,n)=>{let r=t.sourceFile,o=await C(r),a=n?.sourceHash;return o!==
|
|
42
|
+
a?(await T(e,t),o):a};import{ReplaceResourceError as je}from"@ez4/aws-common";import{IncompleteResourceError as B}from"@ez4/aws-common";var w=(e,t,n)=>{let r=n.getDependencies(c).at(0);if(!r?.parameters.functionName)
|
|
43
|
+
throw new B(e,t,"functionName");return r.parameters.functionName},Ot=(e,t,n)=>{let r=n.
|
|
44
|
+
getDependencies(c).at(0)?.result;if(!r?.functionArn)throw new B(e,t,"functionArn");
|
|
45
|
+
return r.functionArn};import{AddPermissionCommand as Ue,LambdaClient as De,RemovePermissionCommand as He}from"@aws-sdk/client-lambda";
|
|
46
|
+
import{Logger as $}from"@ez4/aws-common";var f="AWS:Lambda/Permission",y="aws:lambda.permission";var W=new De({}),Z=async e=>{$.logCreate(f,e.functionName);let t=e.statementId??
|
|
47
|
+
`SID${Date.now()}`;return await W.send(new Ue({StatementId:t,FunctionName:e.functionName,
|
|
50
48
|
SourceArn:e.sourceArn,Principal:e.principal,Action:e.action})),{statementId:t}},
|
|
51
|
-
|
|
52
|
-
result&&e.result.functionName===t.result?.functionName,
|
|
53
|
-
if(t.result)throw new
|
|
54
|
-
parameters,r=
|
|
49
|
+
k=async(e,t)=>{$.logDelete(f,e),await W.send(new He({FunctionName:e,StatementId:t}))};var G=()=>({equals:qe,create:O,replace:Le,preview:Ve,update:Be,delete:$e}),qe=(e,t)=>!!e.
|
|
50
|
+
result&&e.result.functionName===t.result?.functionName,Ve=async(e,t)=>{},Le=async(e,t,n)=>{
|
|
51
|
+
if(t.result)throw new je(f,e.entryId,t.entryId);return O(e,n)},O=async(e,t)=>{let n=e.
|
|
52
|
+
parameters,r=w(f,"permission",t),o=await n.getPermission(t);return{statementId:(await Z(
|
|
55
53
|
{functionName:r,principal:o.principal,sourceArn:o.sourceArn,action:"lambda:Invok\
|
|
56
|
-
eFunction"})).statementId,functionName:r}},
|
|
57
|
-
t&&await
|
|
58
|
-
deepEqual as
|
|
59
|
-
DeleteEventSourceMappingCommand as
|
|
60
|
-
LambdaClient as
|
|
61
|
-
import{waitFor as
|
|
62
|
-
{batch:n}=e,o=(await x.send(new
|
|
63
|
-
sourceArn,Enabled:e.enabled,...t==="dynamodb"&&{StartingPosition:
|
|
64
|
-
{BatchSize:n.batchSize,MaximumBatchingWindowInSeconds:n.maxWindow}}))).UUID;return await
|
|
65
|
-
o),{eventId:o}},
|
|
54
|
+
eFunction"})).statementId,functionName:r}},Be=async()=>{},$e=async e=>{let t=e.result;
|
|
55
|
+
t&&await k(t.functionName,t.statementId)};import{ReplaceResourceError as Xe}from"@ez4/aws-common";import{deepCompare as Ye,
|
|
56
|
+
deepEqual as et}from"@ez4/utils";import{CreateEventSourceMappingCommand as We,UpdateEventSourceMappingCommand as Ze,
|
|
57
|
+
DeleteEventSourceMappingCommand as ke,GetEventSourceMappingCommand as Ge,EventSourcePosition as Oe,
|
|
58
|
+
LambdaClient as Ke}from"@aws-sdk/client-lambda";import{Logger as E,parseArn as _e}from"@ez4/aws-common";
|
|
59
|
+
import{waitFor as Je}from"@ez4/utils";var m="AWS:Lambda/Mapping",S="aws:lambda.mapping";var x=new Ke({}),K=async e=>{E.logCreate(m,e.functionName);let{service:t}=_e(e.sourceArn),
|
|
60
|
+
{batch:n}=e,o=(await x.send(new We({FunctionName:e.functionName,EventSourceArn:e.
|
|
61
|
+
sourceArn,Enabled:e.enabled,...t==="dynamodb"&&{StartingPosition:Oe.LATEST},...n&&
|
|
62
|
+
{BatchSize:n.batchSize,MaximumBatchingWindowInSeconds:n.maxWindow}}))).UUID;return await Q(
|
|
63
|
+
o),{eventId:o}},_=async(e,t)=>{E.logUpdate(m,e);let{batch:n}=t;await x.send(new Ze(
|
|
66
64
|
{UUID:e,FunctionName:t.functionName,Enabled:t.enabled,...n&&{BatchSize:n.batchSize,
|
|
67
|
-
MaximumBatchingWindowInSeconds:n.maxWindow}})),await
|
|
68
|
-
m,e),await x.send(new
|
|
69
|
-
State,
|
|
70
|
-
e);return t.has(n)})};var
|
|
71
|
-
result&&e.result.eventId===t.result?.eventId,
|
|
72
|
-
dependencies:e.dependencies},r={...t.parameters,dependencies:t.dependencies},o=
|
|
73
|
-
n,r,{getSourceArn:!0});return o.counts?o:void 0},
|
|
74
|
-
m,e.entryId,t.entryId);return
|
|
75
|
-
"
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
r.eventId,
|
|
80
|
-
|
|
81
|
-
e,{type:
|
|
82
|
-
|
|
83
|
-
{type:y,entryId:o,dependencies:[t.entryId,n.entryId],parameters:r})},
|
|
84
|
-
let r=
|
|
85
|
-
{type:
|
|
86
|
-
import{createTrigger as
|
|
87
|
-
var
|
|
65
|
+
MaximumBatchingWindowInSeconds:n.maxWindow}})),await Q(e)},J=async e=>{E.logDelete(
|
|
66
|
+
m,e),await x.send(new ke({UUID:e}))},Qe=async e=>(await x.send(new Ge({UUID:e}))).
|
|
67
|
+
State,Q=async e=>{let t=new Set(["Enabled","Disabled"]);await Je(async()=>{let n=await Qe(
|
|
68
|
+
e);return t.has(n)})};var X=()=>({equals:tt,create:Y,replace:rt,preview:nt,update:ot,delete:at}),tt=(e,t)=>!!e.
|
|
69
|
+
result&&e.result.eventId===t.result?.eventId,nt=async(e,t)=>{let n={...e.parameters,
|
|
70
|
+
dependencies:e.dependencies},r={...t.parameters,dependencies:t.dependencies},o=Ye(
|
|
71
|
+
n,r,{getSourceArn:!0});return o.counts?o:void 0},rt=async(e,t,n)=>{if(t.result)throw new Xe(
|
|
72
|
+
m,e.entryId,t.entryId);return Y(e,n)},Y=async(e,t)=>{let n=e.parameters,r=w(m,"m\
|
|
73
|
+
apping",t),o=await n.getSourceArn(t);return{eventId:(await K({...e.parameters,functionName:r,
|
|
74
|
+
sourceArn:o})).eventId,functionName:r,sourceArn:o}},ot=async(e,t,n)=>{let r=e.result;
|
|
75
|
+
if(!r)return;let o=w(m,"mapping",n),a=t.result?.functionName??r.functionName,i={
|
|
76
|
+
...e.parameters,functionName:o},p={...t.parameters,functionName:a};return await st(
|
|
77
|
+
r.eventId,i,p),{...r,functionName:o}},at=async e=>{let t=e.result;t&&await J(t.eventId)},
|
|
78
|
+
st=async(e,t,n)=>{et(t,n,{getSourceArn:!0})||await _(e,t)};import{toKebabCase as ee,hashData as te}from"@ez4/utils";import{attachEntry as it}from"@ez4/stateful";var pt=e=>e.type===c,Pn=(e,t,n)=>{let r=ee(n.functionName),o=te(c,t.entryId,r);return it(
|
|
79
|
+
e,{type:c,entryId:o,dependencies:[t.entryId],parameters:{...n,functionName:r}})},
|
|
80
|
+
Rn=(e,t,n)=>{let r=ee(n),o=te(c,t.entryId,r),a=e[o];return a&&pt(a)?a:null};import{hashData as ne}from"@ez4/utils";import{attachEntry as ct}from"@ez4/stateful";var mt=e=>e.type===y,bn=(e,t,n,r)=>{let o=ne(y,t.entryId,n.entryId);return ct(e,
|
|
81
|
+
{type:y,entryId:o,dependencies:[t.entryId,n.entryId],parameters:r})},Nn=(e,t,n)=>{
|
|
82
|
+
let r=ne(y,t.entryId,n.entryId),o=e[r];return o&&mt(o)?o:null};import{hashData as ut}from"@ez4/utils";import{attachEntry as lt}from"@ez4/stateful";var zn=e=>e.type===S,Un=(e,t,n,r)=>{let o=ut(S,t.entryId,n.entryId);return lt(e,
|
|
83
|
+
{type:S,entryId:o,dependencies:[t.entryId,n.entryId],parameters:r})};import{registerTriggers as ft}from"@ez4/aws-common";import{createPolicy as St,registerTriggers as wt}from"@ez4/aws-identity";
|
|
84
|
+
import{createTrigger as Ft}from"@ez4/project/library";import{getAccountId as yt,getRegion as dt,createPolicyDocument as gt}from"@ez4/aws-identity";
|
|
85
|
+
var re=async e=>{let[t,n]=await Promise.all([dt(),yt()]);return gt([{permissions:[
|
|
88
86
|
"logs:CreateLogGroup","logs:CreateLogStream","logs:PutLogEvents"],resourceIds:[`\
|
|
89
|
-
arn:aws:logs:${t}:${n}:log-group:/aws/lambda/${e}-*:*`]}])};var
|
|
90
|
-
count":xt,"deploy:prepareExecutionPolicy":
|
|
91
|
-
.amazonaws.com"}],
|
|
92
|
-
return
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
87
|
+
arn:aws:logs:${t}:${n}:log-group:/aws/lambda/${e}-*:*`]}])};var A=!1,$n=()=>(A||(ft(),wt(),Ft("@ez4/aws-function",{"deploy:prepareIdentityAc\
|
|
88
|
+
count":xt,"deploy:prepareExecutionPolicy":Pt}),A=!0),A),xt=()=>[{account:"lambda\
|
|
89
|
+
.amazonaws.com"}],Pt=async e=>{let{state:t,options:n}=e,{resourcePrefix:r,projectName:o}=n,
|
|
90
|
+
a=`${r}-${o}`;return St(t,{policyName:`${a}-lambda-policy`,policyDocument:await re(
|
|
91
|
+
a)})};v(c,q());v(y,G());v(S,X());export{s as FunctionServiceName,c as FunctionServiceType,m as MappingServiceName,
|
|
92
|
+
S as MappingServiceType,f as PermissionServiceName,y as PermissionServiceType,Pn as createFunction,
|
|
93
|
+
Un as createMapping,bn as createPermission,Rn as getFunction,Ot as getFunctionArn,
|
|
94
|
+
w as getFunctionName,Nn as getPermission,pt as isFunction,zn as isMapping,mt as isPermission,
|
|
95
|
+
$n as registerTriggers};
|
package/package.json
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ez4/aws-function",
|
|
3
3
|
"description": "EZ4: Self-managed AWS lambda functions",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.4.0",
|
|
5
5
|
"author": "Silas B.",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"type": "module",
|
|
8
|
+
"engines": {
|
|
9
|
+
"node": ">=20.15.0"
|
|
10
|
+
},
|
|
8
11
|
"exports": {
|
|
9
12
|
".": {
|
|
10
13
|
"types": "./dist/main.d.ts",
|
|
@@ -27,11 +30,11 @@
|
|
|
27
30
|
},
|
|
28
31
|
"dependencies": {
|
|
29
32
|
"@aws-sdk/client-lambda": "^3.614.0",
|
|
30
|
-
"@ez4/aws-common": "^0.
|
|
31
|
-
"@ez4/aws-identity": "^0.
|
|
32
|
-
"@ez4/project": "^0.
|
|
33
|
-
"@ez4/stateful": "^0.
|
|
34
|
-
"@ez4/utils": "^0.
|
|
33
|
+
"@ez4/aws-common": "^0.4.0",
|
|
34
|
+
"@ez4/aws-identity": "^0.4.0",
|
|
35
|
+
"@ez4/project": "^0.4.0",
|
|
36
|
+
"@ez4/stateful": "^0.4.0",
|
|
37
|
+
"@ez4/utils": "^0.4.0",
|
|
35
38
|
"@types/adm-zip": "^0.5.5",
|
|
36
39
|
"adm-zip": "^0.5.14"
|
|
37
40
|
}
|