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