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