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