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