@ez4/aws-function 0.37.0 → 0.39.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/dist/function/client.d.ts +8 -3
- package/dist/function/helpers/variables.d.ts +3 -3
- package/dist/function/types.d.ts +7 -2
- package/dist/main.cjs +164 -149
- package/dist/main.d.ts +5 -1
- package/dist/main.mjs +151 -137
- package/dist/types/architecture.d.ts +4 -0
- package/dist/types/runtime.d.ts +4 -0
- package/dist/utils/architecture.d.ts +3 -0
- package/dist/utils/defaults.d.ts +23 -0
- package/dist/utils/runtime.d.ts +3 -0
- package/package.json +9 -8
- package/dist/types/variables.d.ts +0 -3
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import type { ArchitectureType, RuntimeType } from '@ez4/project';
|
|
2
|
+
import type { LinkedVariables } from '@ez4/project/library';
|
|
1
3
|
import type { Arn, ResourceTags } from '@ez4/aws-common';
|
|
2
|
-
import type { FunctionVariables } from '../types/variables';
|
|
3
4
|
export type CreateRequest = {
|
|
4
5
|
roleArn: Arn;
|
|
5
6
|
sourceFile: string;
|
|
@@ -7,7 +8,9 @@ export type CreateRequest = {
|
|
|
7
8
|
handlerName: string;
|
|
8
9
|
description?: string;
|
|
9
10
|
logGroup?: string;
|
|
10
|
-
variables?:
|
|
11
|
+
variables?: LinkedVariables;
|
|
12
|
+
architecture: ArchitectureType;
|
|
13
|
+
runtime: RuntimeType;
|
|
11
14
|
timeout?: number;
|
|
12
15
|
memory?: number;
|
|
13
16
|
publish?: boolean;
|
|
@@ -23,12 +26,14 @@ export type UpdateConfigurationRequest = {
|
|
|
23
26
|
handlerName?: string;
|
|
24
27
|
description?: string;
|
|
25
28
|
logGroup?: string;
|
|
26
|
-
variables?:
|
|
29
|
+
variables?: LinkedVariables;
|
|
30
|
+
runtime?: RuntimeType;
|
|
27
31
|
timeout?: number;
|
|
28
32
|
memory?: number;
|
|
29
33
|
debug?: boolean;
|
|
30
34
|
};
|
|
31
35
|
export type UpdateSourceCodeRequest = {
|
|
36
|
+
architecture?: ArchitectureType;
|
|
32
37
|
sourceFile: string;
|
|
33
38
|
publish?: boolean;
|
|
34
39
|
};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare const assertVariables: (variables:
|
|
3
|
-
export declare const protectVariables: (variables:
|
|
1
|
+
import type { LinkedVariables } from '@ez4/project/library';
|
|
2
|
+
export declare const assertVariables: (variables: LinkedVariables) => void;
|
|
3
|
+
export declare const protectVariables: (variables: LinkedVariables) => LinkedVariables;
|
package/dist/function/types.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { EntryState, StepContext } from '@ez4/stateful';
|
|
2
2
|
import type { LinkedVariables } from '@ez4/project/library';
|
|
3
3
|
import type { Arn } from '@ez4/aws-common';
|
|
4
|
-
import type { FunctionVariables } from '../types/variables';
|
|
5
4
|
import type { CreateRequest, ImportOrCreateResponse } from './client';
|
|
6
5
|
export declare const FunctionServiceName = "AWS:Lambda/Function";
|
|
7
6
|
export declare const FunctionServiceType = "aws:lambda.function";
|
|
@@ -9,14 +8,20 @@ export type GetFunctionFiles = () => [string, string[]];
|
|
|
9
8
|
export type GetFunctionVariables = () => Promise<LinkedVariables> | LinkedVariables;
|
|
10
9
|
export type GetFunctionBundle = (context: StepContext) => Promise<string> | string;
|
|
11
10
|
export type GetFunctionHash = () => Promise<string | undefined> | string | undefined;
|
|
11
|
+
export type FunctionRelease = {
|
|
12
|
+
tagName?: string;
|
|
13
|
+
variableName?: string;
|
|
14
|
+
version: string;
|
|
15
|
+
};
|
|
12
16
|
export type FunctionParameters = Omit<CreateRequest, 'roleArn' | 'publish' | 'variables'> & {
|
|
13
17
|
getFunctionFiles: GetFunctionFiles;
|
|
14
18
|
getFunctionVariables: GetFunctionVariables;
|
|
15
19
|
getFunctionBundle: GetFunctionBundle;
|
|
16
20
|
getFunctionHash: GetFunctionHash;
|
|
21
|
+
release?: FunctionRelease;
|
|
17
22
|
};
|
|
18
23
|
export type FunctionResult = ImportOrCreateResponse & {
|
|
19
|
-
variables:
|
|
24
|
+
variables: LinkedVariables;
|
|
20
25
|
valuesHash?: string;
|
|
21
26
|
sourceHash: string;
|
|
22
27
|
bundleHash: string;
|
package/dist/main.cjs
CHANGED
|
@@ -1,157 +1,172 @@
|
|
|
1
|
-
"use strict";var
|
|
2
|
-
typeof t=="object"||typeof t=="function")for(let i of
|
|
3
|
-
|
|
4
|
-
enumerable:!0}):
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
"
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
{
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
p,
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
{FunctionName:e,
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
{
|
|
45
|
-
|
|
46
|
-
e)
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
{
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
"
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
1
|
+
"use strict";var nt=Object.create;var T=Object.defineProperty;var ot=Object.getOwnPropertyDescriptor;var it=Object.getOwnPropertyNames;var at=Object.getPrototypeOf,st=Object.prototype.hasOwnProperty;var n=(e,t)=>T(e,"name",{value:t,configurable:!0});var pt=(e,t)=>{for(var r in t)T(e,r,{get:t[r],enumerable:!0})},oe=(e,t,r,o)=>{if(t&&
|
|
2
|
+
typeof t=="object"||typeof t=="function")for(let i of it(t))!st.call(e,i)&&i!==r&&
|
|
3
|
+
T(e,i,{get:()=>t[i],enumerable:!(o=ot(t,i))||o.enumerable});return e};var ct=(e,t,r)=>(r=e!=null?nt(at(e)):{},oe(t||!e||!e.__esModule?T(r,"default",{value:e,
|
|
4
|
+
enumerable:!0}):r,e)),mt=e=>oe(T({},"__esModule",{value:!0}),e);var $t={};pt($t,{FunctionArchitecture:()=>ae,FunctionDefaults:()=>rt,FunctionRuntime:()=>ie,
|
|
5
|
+
FunctionServiceName:()=>c,FunctionServiceType:()=>S,MappingService:()=>ee,MappingServiceName:()=>x,
|
|
6
|
+
MappingServiceType:()=>h,PermissionServiceName:()=>C,PermissionServiceType:()=>v,
|
|
7
|
+
buildFunctionArn:()=>Wt,createFunction:()=>Dt,createMapping:()=>Ot,createPermission:()=>qt,
|
|
8
|
+
getFunctionArchitecture:()=>U,getFunctionArn:()=>Pt,getFunctionName:()=>I,getFunctionRuntime:()=>H,
|
|
9
|
+
getFunctionState:()=>bt,getPermission:()=>kt,isFunctionState:()=>X,isMappingState:()=>Bt,
|
|
10
|
+
registerTriggers:()=>Gt,tryGetFunctionArn:()=>he,tryGetFunctionState:()=>ht});module.
|
|
11
|
+
exports=mt($t);var Ze=require("@ez4/aws-common"),Qe=require("@ez4/aws-identity"),_e=require("@ez4/aws-logs"),
|
|
12
|
+
Je=require("@ez4/project/library");var ve=require("@ez4/aws-common");var F=require("@ez4/aws-common"),P=require("@ez4/utils"),_=require("@ez4/aws-logs"),
|
|
13
|
+
J=require("@ez4/aws-identity");var s=require("@aws-sdk/client-lambda"),u=require("@ez4/aws-common");var B=require("@ez4/project");var ie=(r=>(r.Node22="nodejs22.x",r.Node24="nodejs24.x",r))(ie||{});var ut={[B.RuntimeType.Node22]:"nodejs22.x",[B.RuntimeType.Node24]:"nodejs24.x"},
|
|
14
|
+
H=n(e=>ut[e],"getFunctionRuntime");var W=require("@ez4/project");var ae=(r=>(r.Arm="arm64",r.x86="x86_64",r))(ae||{});var lt={[W.ArchitectureType.Arm]:"arm64",[W.ArchitectureType.x86]:"x86_64"},U=n(
|
|
15
|
+
e=>lt[e],"getFunctionArchitecture");var se=require("@ez4/aws-common"),pe=require("@ez4/utils");var c="AWS:Lambda/Function",S="aws:lambda.function";var gt=/[a-z][\w]+/i,dt=n(e=>gt.test(e),"isValidName"),$=n(e=>{for(let t in e)if(!dt(
|
|
16
|
+
t))throw new se.InvalidParameterError(c,`${t} is an invalid variable name .`)},"\
|
|
17
|
+
assertVariables"),E=n(e=>{let t={};for(let r in e)t[r]=(0,pe.hashData)(e[r]);return t},
|
|
18
|
+
"protectVariables");var ce=ct(require("adm-zip"),1),me=require("node:fs/promises");var ue=n(async(e,t)=>{let r=new ce.default,o=await(0,me.readFile)(e);return r.addFile(
|
|
19
|
+
t,o),r.toBufferPromise()},"getZipBuffer");var w=new s.LambdaClient({}),z={minDelay:15,maxWaitTime:1800,maxDelay:60,client:w},
|
|
20
|
+
le=n(async(e,t)=>{u.Logger.logImport(c,e);try{let r=await w.send(new s.GetFunctionCommand(
|
|
21
|
+
{FunctionName:e,Qualifier:t})),o=r.Configuration.Version,i=r.Configuration.FunctionArn;
|
|
22
|
+
return{functionVersion:o,functionArn:i}}catch(r){if(!(r instanceof s.ResourceNotFoundException))
|
|
23
|
+
throw r;return}},"importFunction"),ge=n(async e=>{let{functionName:t,variables:r}=e;
|
|
24
|
+
u.Logger.logCreate(c,t),r&&$(r);let o=Fe(e.handlerName),i=await Se(e.sourceFile),
|
|
25
|
+
{description:a,memory:p,timeout:m,architecture:l,runtime:d,debug:y,roleArn:f,logGroup:b}=e,
|
|
26
|
+
N=await(0,u.waitCreation)(()=>w.send(new s.CreateFunctionCommand({FunctionName:t,
|
|
27
|
+
Description:a,MemorySize:p,Timeout:m,Role:f,Handler:o,Architectures:[U(l)],Runtime:H(
|
|
28
|
+
d),PackageType:"Zip",LoggingConfig:{LogGroup:b,ApplicationLogLevel:y?s.ApplicationLogLevel.
|
|
29
|
+
Debug:s.ApplicationLogLevel.Warn,SystemLogLevel:s.SystemLogLevel.Warn,LogFormat:s.LogFormat.
|
|
30
|
+
Json},Code:{ZipFile:i},Environment:{Variables:r},Tags:{...e.tags,ManagedBy:"EZ4"}})));
|
|
31
|
+
u.Logger.logWait(c,t),await(0,s.waitUntilFunctionActive)(z,{FunctionName:t});let V=N.
|
|
32
|
+
FunctionArn;return e.publish?{functionVersion:await ye(t),functionArn:V}:{functionArn:V}},
|
|
33
|
+
"createFunction"),j=n(async(e,t)=>{u.Logger.logUpdate(c,`${e} source code`);let r=await Se(
|
|
34
|
+
t.sourceFile),{publish:o,architecture:i}=t,a=await w.send(new s.UpdateFunctionCodeCommand(
|
|
35
|
+
{Architectures:i&&[U(i)],FunctionName:e,ZipFile:r,Publish:o}));u.Logger.logWait(
|
|
36
|
+
c,e),await(0,s.waitUntilFunctionUpdated)(z,{FunctionName:e});let p=a.FunctionArn;
|
|
37
|
+
return t.publish?{functionVersion:await ye(e),functionArn:p}:{functionArn:p}},"u\
|
|
38
|
+
pdateSourceCode"),Z=n(async(e,t)=>{let{handlerName:r,variables:o}=t;u.Logger.logUpdate(
|
|
39
|
+
c,`${e} configuration`),o&&$(o);let{description:i,memory:a,timeout:p,runtime:m,debug:l,
|
|
40
|
+
roleArn:d,logGroup:y}=t;await w.send(new s.UpdateFunctionConfigurationCommand({Runtime:m&&
|
|
41
|
+
H(m),FunctionName:e,Description:i,MemorySize:a,Timeout:p,Role:d,...r&&{Handler:Fe(
|
|
42
|
+
r)},LoggingConfig:{LogGroup:y,ApplicationLogLevel:l?s.ApplicationLogLevel.Debug:
|
|
43
|
+
s.ApplicationLogLevel.Warn,SystemLogLevel:s.SystemLogLevel.Warn,LogFormat:s.LogFormat.
|
|
44
|
+
Json},Environment:{Variables:o}})),u.Logger.logWait(c,e),await(0,s.waitUntilFunctionUpdated)(
|
|
45
|
+
z,{FunctionName:e})},"updateConfiguration"),de=n(async e=>{u.Logger.logDelete(c,
|
|
46
|
+
e),await(0,u.waitDeletion)(async()=>{try{await w.send(new s.DeleteFunctionCommand(
|
|
47
|
+
{FunctionName:e}))}catch(t){if(!(t instanceof s.ResourceNotFoundException))throw t}})},
|
|
48
|
+
"deleteFunction"),ye=n(async e=>{u.Logger.logPublish(c,e);let t=await w.send(new s.PublishVersionCommand(
|
|
49
|
+
{FunctionName:e}));u.Logger.logWait(c,e);let r=t.Version;return await(0,s.waitUntilPublishedVersionActive)(
|
|
50
|
+
z,{FunctionName:e,Qualifier:r}),r},"publishFunction"),Q=n(async(e,t)=>{let r=(0,u.tryParseArn)(
|
|
51
|
+
e)?.resourceName??e;u.Logger.logTag(c,r),await w.send(new s.TagResourceCommand({
|
|
52
|
+
Resource:e,Tags:{...t,ManagedBy:"EZ4"}}))},"tagFunction"),fe=n(async(e,t)=>{let r=(0,u.tryParseArn)(
|
|
53
|
+
e)?.resourceName??e;u.Logger.logUntag(c,r),await w.send(new s.UntagResourceCommand(
|
|
54
|
+
{Resource:e,TagKeys:t}))},"untagFunction"),Se=n(e=>ue(e,"main.mjs"),"getSourceZi\
|
|
55
|
+
pFile"),Fe=n(e=>`main.${e}`,"getSourceHandlerName");var xe=n(()=>({equals:yt,create:we,replace:St,preview:ft,update:Ft,delete:xt}),"\
|
|
56
|
+
getFunctionHandler"),yt=n((e,t)=>!!e.result&&e.result.functionArn===t.result?.functionArn,
|
|
57
|
+
"equalsResource"),ft=n(async(e,t)=>{let r=e.parameters,o=t.parameters,i=(0,P.deepCompare)(
|
|
58
|
+
{...r,connections:e.connections,dependencies:e.dependencies,variables:E(await r.
|
|
59
|
+
getFunctionVariables()),sourceHash:await(0,F.getBundleHash)(...r.getFunctionFiles()),
|
|
60
|
+
valuesHash:r.getFunctionHash()},{...o,connections:t.connections,dependencies:t.dependencies,
|
|
56
61
|
variables:t.result?.variables,sourceHash:t.result?.sourceHash,valuesHash:t.result?.
|
|
57
|
-
valuesHash});if(i.counts)return{...i,name:
|
|
58
|
-
async(e,t,
|
|
59
|
-
return
|
|
60
|
-
|
|
61
|
-
all([(0,
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
await
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
logGroup:
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
a,
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
62
|
+
valuesHash},{exclude:{release:!0}});if(i.counts)return{...i,name:r.functionName}},
|
|
63
|
+
"previewResource"),St=n(async(e,t,r)=>{if(t.result)throw new F.ReplaceResourceError(
|
|
64
|
+
c,e.entryId,t.entryId);return we(e,r)},"replaceResource"),we=n(async(e,t)=>{let{
|
|
65
|
+
functionName:r,release:o,...i}=e.parameters,a=(0,_.getLogGroupName)(c,r,t),p=(0,J.getRoleArn)(
|
|
66
|
+
c,r,t),[m,l,d,y]=await Promise.all([(0,F.getBundleHash)(...i.getFunctionFiles()),
|
|
67
|
+
i.getFunctionBundle(t),i.getFunctionHash(),i.getFunctionVariables()]),f=await le(
|
|
68
|
+
r),b=await(0,P.hashFile)(l);if(f)return await j(r,{architecture:i.architecture,publish:!1,
|
|
69
|
+
sourceFile:l}),await Z(r,{...i,logGroup:a,roleArn:p,variables:{...y,...o?.variableName&&
|
|
70
|
+
{[o.variableName]:o.version}}}),await Q(f.functionArn,{...i.tags,...o?.tagName&&
|
|
71
|
+
{[o.tagName]:o.version}}),{functionArn:f.functionArn,functionVersion:f.functionVersion,
|
|
72
|
+
variables:E(y),valuesHash:d,sourceHash:m,bundleHash:b,logGroup:a,roleArn:p};let N=await ge(
|
|
73
|
+
{...i,publish:!0,functionName:r,sourceFile:l,logGroup:a,roleArn:p,variables:{...y,
|
|
74
|
+
...o?.variableName&&{[o.variableName]:o.version}},tags:{...i.tags,...o?.tagName&&
|
|
75
|
+
{[o.tagName]:o.version}}});return{functionArn:N.functionArn,functionVersion:N.functionVersion,
|
|
76
|
+
variables:E(y),valuesHash:d,sourceHash:m,bundleHash:b,logGroup:a,roleArn:p}},"cr\
|
|
77
|
+
eateResource"),Ft=n(async(e,t,r)=>{let{parameters:o,result:i}=e;if(!i)return;let{
|
|
78
|
+
functionName:a}=o,p=await o.getFunctionVariables(),m=t.result?.variables??p,l=(0,J.getRoleArn)(
|
|
79
|
+
c,a,r),d=t.result?.roleArn??l,y=(0,_.getLogGroupName)(c,a,r),f=t.result?.logGroup??
|
|
80
|
+
y,{isUpdated:b,...N}=await Rt(a,o,t.result,r),V={...o,variables:p,roleArn:l,logGroup:y},
|
|
81
|
+
ne={...t.parameters,variables:m,roleArn:d,logGroup:f};return await wt(a,V,ne,b,r),
|
|
82
|
+
await vt(i.functionArn,o,t.parameters,b),{...i,...N,variables:E(p),logGroup:y,roleArn:l}},
|
|
83
|
+
"updateResource"),xt=n(async e=>{let{result:t,parameters:r}=e;t&&await de(r.functionName)},
|
|
84
|
+
"deleteResource"),wt=n(async(e,t,r,o,i)=>{let{variables:a,...p}=t,m={variables:E(
|
|
85
|
+
a),...p},l=!(0,P.deepEqual)(m,r,{exclude:{sourceFile:!0,functionName:!0,architecture:!0,
|
|
86
|
+
release:!0,tags:!0}}),d=o?t.release:r.release,y=o&&d?.variableName;(l||y||i.force)&&
|
|
87
|
+
await Z(e,{...t,variables:{...t.variables,...d?.variableName&&{[d.variableName]:d.
|
|
88
|
+
version}}})},"checkConfigurationUpdates"),vt=n(async(e,t,r,o)=>{let a=o&&t.release?.
|
|
89
|
+
version!==r.release?.version?t.release:void 0,p={...t.tags,...a?.tagName&&{[a.tagName]:a.
|
|
90
|
+
version}};await(0,F.applyTagUpdates)(p,r.tags,m=>Q(e,m),m=>fe(e,m))},"checkTagUp\
|
|
91
|
+
dates"),Rt=n(async(e,t,r,o)=>{let[i,a]=await Promise.all([(0,F.getBundleHash)(...t.
|
|
92
|
+
getFunctionFiles()),t.getFunctionHash()]),p=r?.sourceHash,m=r?.valuesHash;if(i!==
|
|
93
|
+
p||a!==m||o.force){let l=await t.getFunctionBundle(o),d=await(0,P.hashFile)(l),y=r?.
|
|
94
|
+
bundleHash;if(d===y&&a===m)return F.Logger.logSkip(c,`${e} source code`),{isUpdated:!1,
|
|
95
|
+
valuesHash:a,sourceHash:i};let{functionVersion:f}=await j(e,{architecture:t.architecture,
|
|
96
|
+
publish:!r?.functionVersion,sourceFile:l});return{isUpdated:!0,valuesHash:a,sourceHash:i,
|
|
97
|
+
bundleHash:d,...f&&{functionVersion:f}}}return{isUpdated:!1}},"checkSourceCodeUp\
|
|
98
|
+
dates");var Re=n(()=>{(0,ve.tryRegisterProvider)(S,xe())},"registerFunctionProvider");var Ie=require("@ez4/aws-common");var Ae=require("@ez4/aws-common");var K=require("@ez4/aws-common");var G=class extends Error{static{n(this,"FunctionNotFoundError")}constructor(t){
|
|
99
|
+
super(`Function ${t} wasn't found.`)}};var X=n(e=>e.type===S,"isFunctionState"),ht=n((e,t,r)=>{try{let o=e.getServiceState(
|
|
100
|
+
t,r);if(X(o))return o}catch{}},"tryGetFunctionState"),bt=n((e,t,r)=>{let o=e.getServiceState(
|
|
101
|
+
t,r);if(!X(o))throw new G(t);return o},"getFunctionState"),I=n((e,t,r)=>{let o=r.
|
|
102
|
+
getDependencies(S).at(0)?.parameters;if(!o?.functionName)throw new K.IncompleteResourceError(
|
|
103
|
+
e,t,"functionName");return o.functionName},"getFunctionName"),he=n(e=>e.getDependencies(
|
|
104
|
+
S)[0]?.result?.functionArn,"tryGetFunctionArn"),Pt=n((e,t,r)=>{let o=he(r);if(!o)
|
|
105
|
+
throw new K.IncompleteResourceError(e,t,"functionArn");return o},"getFunctionArn");var R=require("@aws-sdk/client-lambda"),Y=require("@ez4/aws-common");var C="AWS:Lambda/Permission",v="aws:lambda.permission";var be=new R.LambdaClient({}),Pe=n(async e=>{Y.Logger.logCreate(C,e.functionName);
|
|
106
|
+
let t=e.statementId??`ID${Date.now()}`;return await be.send(new R.AddPermissionCommand(
|
|
94
107
|
{StatementId:t,FunctionName:e.functionName,SourceArn:e.sourceArn,Principal:e.principal,
|
|
95
|
-
Action:e.action})),{statementId:t}},"createPermission"),
|
|
96
|
-
logDelete(C,e);try{return await
|
|
97
|
-
StatementId:t})),!0}catch(
|
|
98
|
-
return!1}},"deletePermission");var
|
|
99
|
-
getPermissionHandler"),
|
|
100
|
-
functionName,"equalsResource"),
|
|
101
|
-
if(t.result)throw new
|
|
102
|
-
|
|
103
|
-
i=await
|
|
108
|
+
Action:e.action})),{statementId:t}},"createPermission"),Ce=n(async(e,t)=>{Y.Logger.
|
|
109
|
+
logDelete(C,e);try{return await be.send(new R.RemovePermissionCommand({FunctionName:e,
|
|
110
|
+
StatementId:t})),!0}catch(r){if(!(r instanceof R.ResourceNotFoundException))throw r;
|
|
111
|
+
return!1}},"deletePermission");var Ne=n(()=>({equals:Ct,create:Ee,replace:Nt,preview:At,update:Et,delete:It}),"\
|
|
112
|
+
getPermissionHandler"),Ct=n((e,t)=>!!e.result&&e.result.functionName===t.result?.
|
|
113
|
+
functionName,"equalsResource"),At=n((e,t)=>{},"previewResource"),Nt=n(async(e,t,r)=>{
|
|
114
|
+
if(t.result)throw new Ae.ReplaceResourceError(C,e.entryId,t.entryId);return Ee(e,
|
|
115
|
+
r)},"replaceResource"),Ee=n(async(e,t)=>{let r=e.parameters,o=I(C,"permission",t),
|
|
116
|
+
i=await r.getPermission(t);return{statementId:(await Pe({action:"lambda:InvokeFu\
|
|
104
117
|
nction",sourceArn:i.sourceArn,principal:i.principal,functionName:o})).statementId,
|
|
105
|
-
functionName:o}},"createResource"),
|
|
106
|
-
let t=e.result;t&&await
|
|
107
|
-
Queue="sqs",
|
|
108
|
-
send(new
|
|
109
|
-
EventSourceMappings;return o?{eventId:o.UUID}:void 0},"importMapping"),
|
|
110
|
-
let{sourceArn:t,functionName:
|
|
111
|
-
{FunctionName:
|
|
112
|
-
"createMapping"),
|
|
113
|
-
(${e})`),await
|
|
114
|
-
...
|
|
115
|
-
try{return await
|
|
116
|
-
if(!(t instanceof
|
|
117
|
-
|
|
118
|
-
"getMappingState"),
|
|
119
|
-
until(async()=>{let
|
|
120
|
-
|
|
121
|
-
t);return{Enabled:
|
|
118
|
+
functionName:o}},"createResource"),Et=n(async()=>{},"updateResource"),It=n(async e=>{
|
|
119
|
+
let t=e.result;t&&await Ce(t.functionName,t.statementId)},"deleteResource");var Me=n(()=>{(0,Ie.tryRegisterProvider)(v,Ne())},"registerPermissionProvider");var ke=require("@ez4/aws-common");var Ge=require("@ez4/aws-common"),D=require("@ez4/utils");var g=require("@aws-sdk/client-lambda"),A=require("@ez4/aws-common"),te=require("@ez4/utils");var x="AWS:Lambda/Mapping",h="aws:lambda.mapping",ee=(r=>(r.DynamoDB="dynamodb",
|
|
120
|
+
r.Queue="sqs",r))(ee||{});var L=new g.LambdaClient({}),Te=n(async(e,t)=>{A.Logger.logImport(x,e);let r=await L.
|
|
121
|
+
send(new g.ListEventSourceMappingsCommand({FunctionName:e,EventSourceArn:t})),[o]=r.
|
|
122
|
+
EventSourceMappings;return o?{eventId:o.UUID}:void 0},"importMapping"),Le=n(async e=>{
|
|
123
|
+
let{sourceArn:t,functionName:r}=e;A.Logger.logCreate(x,r);let i=(await L.send(new g.CreateEventSourceMappingCommand(
|
|
124
|
+
{FunctionName:r,EventSourceArn:t,...ze(e)}))).UUID;return await Ue(i),{eventId:i}},
|
|
125
|
+
"createMapping"),Ve=n(async(e,t)=>{let{functionName:r}=t;A.Logger.logUpdate(x,`${r}\
|
|
126
|
+
(${e})`),await L.send(new g.UpdateEventSourceMappingCommand({UUID:e,FunctionName:r,
|
|
127
|
+
...ze(t)})),await Ue(e)},"updateMapping"),He=n(async e=>{A.Logger.logDelete(x,e);
|
|
128
|
+
try{return await L.send(new g.DeleteEventSourceMappingCommand({UUID:e})),!0}catch(t){
|
|
129
|
+
if(!(t instanceof g.ResourceNotFoundException))throw t;return!1}},"deleteMapping"),
|
|
130
|
+
Mt=n(async e=>(await L.send(new g.GetEventSourceMappingCommand({UUID:e}))).State,
|
|
131
|
+
"getMappingState"),Ue=n(async e=>{let t=new Set(["Enabled","Disabled"]);await te.Wait.
|
|
132
|
+
until(async()=>{let r=await Mt(e);return t.has(r)?!0:te.Wait.RetryAttempt})},"wa\
|
|
133
|
+
itForReadyState"),ze=n(e=>{let{sourceArn:t,enabled:r,concurrency:o,batch:i}=e,{service:a}=(0,A.parseArn)(
|
|
134
|
+
t);return{Enabled:r,FunctionResponseTypes:[g.FunctionResponseType.ReportBatchItemFailures],
|
|
122
135
|
MaximumBatchingWindowInSeconds:i?.maxWait,BatchSize:i?.size,...a==="dynamodb"&&{
|
|
123
|
-
StartingPosition:
|
|
124
|
-
"upsertMappingRequest");var
|
|
125
|
-
getMappingHandler"),
|
|
126
|
-
"equalsResource"),
|
|
127
|
-
o={...t.parameters,dependencies:t.dependencies},i=(0,
|
|
128
|
-
getSourceArn:!0}});if(i.counts)return{...i,name:
|
|
129
|
-
|
|
130
|
-
entryId);return
|
|
131
|
-
o=
|
|
136
|
+
StartingPosition:g.EventSourcePosition.LATEST},...a==="sqs"&&{ScalingConfig:{MaximumConcurrency:o}}}},
|
|
137
|
+
"upsertMappingRequest");var De=n(()=>({equals:Tt,create:qe,replace:Vt,preview:Lt,update:Ht,delete:Ut}),"\
|
|
138
|
+
getMappingHandler"),Tt=n((e,t)=>!!e.result&&e.result.eventId===t.result?.eventId,
|
|
139
|
+
"equalsResource"),Lt=n((e,t)=>{let r={...e.parameters,dependencies:e.dependencies},
|
|
140
|
+
o={...t.parameters,dependencies:t.dependencies},i=(0,D.deepCompare)(r,o,{exclude:{
|
|
141
|
+
getSourceArn:!0}});if(i.counts)return{...i,name:r.fromService}},"previewResource"),
|
|
142
|
+
Vt=n(async(e,t,r)=>{if(t.result)throw new Ge.ReplaceResourceError(x,e.entryId,t.
|
|
143
|
+
entryId);return qe(e,r)},"replaceResource"),qe=n(async(e,t)=>{let r=e.parameters,
|
|
144
|
+
o=I(x,"mapping",t),i=await r.getSourceArn(t);return{eventId:(await Te(o,i)??await Le(
|
|
132
145
|
{...e.parameters,functionName:o,sourceArn:i})).eventId,functionName:o,sourceArn:i}},
|
|
133
|
-
"createResource"),
|
|
134
|
-
a=
|
|
135
|
-
sourceArn:i},l={...t.parameters,functionName:
|
|
136
|
-
|
|
137
|
-
t.eventId)},"deleteResource"),
|
|
138
|
-
getSourceArn:!0,fromService:!0}})&&await
|
|
139
|
-
return(0,
|
|
140
|
-
LogEvents"],resourceIds:[`arn:aws:logs:${t}:${
|
|
141
|
-
licyDocument");var
|
|
142
|
-
-lambda-policy`;return(0,
|
|
143
|
-
policyDocument:await
|
|
144
|
-
(0,
|
|
145
|
-
"deploy:prepareExecutionPolicy":
|
|
146
|
-
t.entryId,i),
|
|
147
|
-
entryId:a,dependencies:
|
|
148
|
-
e,{type:
|
|
149
|
-
rmission"),
|
|
150
|
-
|
|
151
|
-
e,{type:
|
|
152
|
-
pping");var
|
|
153
|
-
|
|
154
|
-
|
|
146
|
+
"createResource"),Ht=n(async(e,t,r)=>{let o=e.result;if(!o)return;let i=o.sourceArn,
|
|
147
|
+
a=I(x,"mapping",r),p=t.result?.functionName??o.functionName,m={...e.parameters,functionName:a,
|
|
148
|
+
sourceArn:i},l={...t.parameters,functionName:p,sourceArn:i};return await zt(o.eventId,
|
|
149
|
+
m,l),{...o,functionName:a}},"updateResource"),Ut=n(async e=>{let t=e.result;t&&await He(
|
|
150
|
+
t.eventId)},"deleteResource"),zt=n(async(e,t,r)=>{!(0,D.deepEqual)(t,r,{exclude:{
|
|
151
|
+
getSourceArn:!0,fromService:!0}})&&await Ve(e,t)},"checkGeneralUpdates");var Oe=n(()=>{(0,ke.tryRegisterProvider)(h,De())},"registerMappingProvider");var Be=n(()=>[{account:"lambda.amazonaws.com"}],"prepareIdentityAccount");var q=require("@ez4/aws-identity"),$e=require("@ez4/project/library");var M=require("@ez4/aws-identity");var We=n(async e=>{let[t,r]=await Promise.all([(0,M.getRegion)(),(0,M.getAccountId)()]);
|
|
152
|
+
return(0,M.createPolicyDocument)([{permissions:["logs:CreateLogStream","logs:Put\
|
|
153
|
+
LogEvents"],resourceIds:[`arn:aws:logs:${t}:${r}:log-group:${e}-*:*`]}])},"getPo\
|
|
154
|
+
licyDocument");var je=n(async e=>{let{state:t,options:r}=e,o=(0,$e.getServiceName)("",r),i=`${o}\
|
|
155
|
+
-lambda-policy`;return(0,q.tryGetPolicy)(t,i)??(0,q.createPolicy)(t,{tags:r.tags,
|
|
156
|
+
policyDocument:await We(o),policyName:i})},"prepareExecutionPolicy");var Gt=n(()=>{(0,Ze.registerTriggers)(),(0,Qe.registerTriggers)(),(0,_e.registerTriggers)(),
|
|
157
|
+
(0,Je.tryCreateTrigger)("@ez4/aws-function",{"deploy:prepareIdentityAccount":Be,
|
|
158
|
+
"deploy:prepareExecutionPolicy":je}),Re(),Me(),Oe()},"registerTriggers");var k=require("@ez4/utils"),Ke=require("@ez4/stateful");var Dt=n((e,t,r,o)=>{let i=(0,k.toKebabCase)(o.functionName),a=(0,k.hashData)(S,
|
|
159
|
+
t.entryId,i),p=[t.entryId];return r&&p.push(r.entryId),(0,Ke.attachEntry)(e,{type:S,
|
|
160
|
+
entryId:a,dependencies:p,parameters:{...o,functionName:i}})},"createFunction");var Ye=require("@ez4/stateful"),re=require("@ez4/utils");var Xe=n(e=>e.type===v,"isPermissionState");var qt=n((e,t,r,o)=>{let i=(0,re.hashData)(v,t.entryId,r.entryId);return(0,Ye.attachEntry)(
|
|
161
|
+
e,{type:v,entryId:i,dependencies:[t.entryId,r.entryId],parameters:o})},"createPe\
|
|
162
|
+
rmission"),kt=n((e,t,r)=>{let o=(0,re.hashData)(v,t.entryId,r.entryId),i=e[o];return i&&
|
|
163
|
+
Xe(i)?i:null},"getPermission");var et=require("@ez4/utils"),tt=require("@ez4/stateful");var Ot=n((e,t,r,o)=>{let i=(0,et.hashData)(h,t.entryId,r.entryId);return(0,tt.attachEntry)(
|
|
164
|
+
e,{type:h,entryId:i,dependencies:[t.entryId,r.entryId],parameters:o})},"createMa\
|
|
165
|
+
pping");var Bt=n(e=>e.type===h,"isMappingState");var Wt=n((e,t,r)=>`arn:aws:lambda:${e}:${t}:function:${r}`,"buildFunctionArn");var O=require("@ez4/project"),rt;(a=>(a.LogRetention=90,a.Architecture=O.ArchitectureType.
|
|
166
|
+
x86,a.Runtime=O.RuntimeType.Node24,a.Timeout=90,a.Memory=192))(rt||={});0&&(module.exports={FunctionArchitecture,FunctionDefaults,FunctionRuntime,FunctionServiceName,
|
|
167
|
+
FunctionServiceType,MappingService,MappingServiceName,MappingServiceType,PermissionServiceName,
|
|
168
|
+
PermissionServiceType,buildFunctionArn,createFunction,createMapping,createPermission,
|
|
169
|
+
getFunctionArchitecture,getFunctionArn,getFunctionName,getFunctionRuntime,getFunctionState,
|
|
155
170
|
getPermission,isFunctionState,isMappingState,registerTriggers,tryGetFunctionArn,
|
|
156
171
|
tryGetFunctionState});
|
|
157
172
|
//# sourceMappingURL=main.cjs.map
|
package/dist/main.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export * from './triggers/register';
|
|
2
|
-
export * from './types/
|
|
2
|
+
export * from './types/architecture';
|
|
3
|
+
export * from './types/runtime';
|
|
3
4
|
export * from './function/service';
|
|
4
5
|
export * from './function/types';
|
|
5
6
|
export * from './function/utils';
|
|
@@ -9,3 +10,6 @@ export * from './mapping/service';
|
|
|
9
10
|
export * from './mapping/types';
|
|
10
11
|
export * from './mapping/utils';
|
|
11
12
|
export * from './utils/arn';
|
|
13
|
+
export * from './utils/defaults';
|
|
14
|
+
export * from './utils/architecture';
|
|
15
|
+
export * from './utils/runtime';
|
package/dist/main.mjs
CHANGED
|
@@ -1,141 +1,155 @@
|
|
|
1
|
-
var
|
|
2
|
-
import{registerTriggers as
|
|
3
|
-
import{deepCompare as
|
|
4
|
-
import{getRoleArn as
|
|
5
|
-
UpdateFunctionCodeCommand as
|
|
6
|
-
TagResourceCommand as
|
|
7
|
-
waitUntilFunctionUpdated as
|
|
8
|
-
ApplicationLogLevel as
|
|
9
|
-
import{Logger as
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
"
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
.
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
e)
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
"
|
|
43
|
-
|
|
44
|
-
|
|
1
|
+
var Me=Object.defineProperty;var n=(e,t)=>Me(e,"name",{value:t,configurable:!0});import{registerTriggers as er}from"@ez4/aws-common";import{registerTriggers as tr}from"@ez4/aws-identity";
|
|
2
|
+
import{registerTriggers as rr}from"@ez4/aws-logs";import{tryCreateTrigger as nr}from"@ez4/project/library";import{tryRegisterProvider as dt}from"@ez4/aws-common";import{applyTagUpdates as tt,getBundleHash as z,Logger as rt,ReplaceResourceError as nt}from"@ez4/aws-common";
|
|
3
|
+
import{deepCompare as ot,deepEqual as it,hashFile as ee}from"@ez4/utils";import{
|
|
4
|
+
getLogGroupName as te}from"@ez4/aws-logs";import{getRoleArn as re}from"@ez4/aws-identity";import{LambdaClient as Oe,GetFunctionCommand as Be,CreateFunctionCommand as We,DeleteFunctionCommand as $e,
|
|
5
|
+
UpdateFunctionCodeCommand as je,UpdateFunctionConfigurationCommand as Ze,PublishVersionCommand as Qe,
|
|
6
|
+
TagResourceCommand as _e,UntagResourceCommand as Je,waitUntilFunctionActive as Ke,
|
|
7
|
+
waitUntilFunctionUpdated as O,waitUntilPublishedVersionActive as Xe,ResourceNotFoundException as B,
|
|
8
|
+
ApplicationLogLevel as A,SystemLogLevel as W,LogFormat as $}from"@aws-sdk/client-lambda";
|
|
9
|
+
import{Logger as g,tryParseArn as j,waitCreation as Ye,waitDeletion as et}from"@ez4/aws-common";import{RuntimeType as D}from"@ez4/project";var Te=(r=>(r.Node22="nodejs22.x",r.Node24="nodejs24.x",r))(Te||{});var Le={[D.Node22]:"nodejs22.x",[D.Node24]:"nodejs24.x"},M=n(e=>Le[e],"getFuncti\
|
|
10
|
+
onRuntime");import{ArchitectureType as q}from"@ez4/project";var Ve=(r=>(r.Arm="arm64",r.x86="x86_64",r))(Ve||{});var He={[q.Arm]:"arm64",[q.x86]:"x86_64"},T=n(e=>He[e],"getFunctionArchitecture");import{InvalidParameterError as Ue}from"@ez4/aws-common";import{hashData as ze}from"@ez4/utils";var p="AWS:Lambda/Function",y="aws:lambda.function";var Ge=/[a-z][\w]+/i,De=n(e=>Ge.test(e),"isValidName"),L=n(e=>{for(let t in e)if(!De(
|
|
11
|
+
t))throw new Ue(p,`${t} is an invalid variable name .`)},"assertVariables"),R=n(
|
|
12
|
+
e=>{let t={};for(let r in e)t[r]=ze(e[r]);return t},"protectVariables");import qe from"adm-zip";import{readFile as ke}from"node:fs/promises";var k=n(async(e,t)=>{let r=new qe,o=await ke(e);return r.addFile(t,o),r.toBufferPromise()},
|
|
13
|
+
"getZipBuffer");var f=new Oe({}),N={minDelay:15,maxWaitTime:1800,maxDelay:60,client:f},Z=n(async(e,t)=>{
|
|
14
|
+
g.logImport(p,e);try{let r=await f.send(new Be({FunctionName:e,Qualifier:t})),o=r.
|
|
15
|
+
Configuration.Version,i=r.Configuration.FunctionArn;return{functionVersion:o,functionArn:i}}catch(r){
|
|
16
|
+
if(!(r instanceof B))throw r;return}},"importFunction"),Q=n(async e=>{let{functionName:t,
|
|
17
|
+
variables:r}=e;g.logCreate(p,t),r&&L(r);let o=Y(e.handlerName),i=await X(e.sourceFile),
|
|
18
|
+
{description:a,memory:s,timeout:c,architecture:m,runtime:u,debug:l,roleArn:d,logGroup:x}=e,
|
|
19
|
+
v=await Ye(()=>f.send(new We({FunctionName:t,Description:a,MemorySize:s,Timeout:c,
|
|
20
|
+
Role:d,Handler:o,Architectures:[T(m)],Runtime:M(u),PackageType:"Zip",LoggingConfig:{
|
|
21
|
+
LogGroup:x,ApplicationLogLevel:l?A.Debug:A.Warn,SystemLogLevel:W.Warn,LogFormat:$.
|
|
22
|
+
Json},Code:{ZipFile:i},Environment:{Variables:r},Tags:{...e.tags,ManagedBy:"EZ4"}})));
|
|
23
|
+
g.logWait(p,t),await Ke(N,{FunctionName:t});let C=v.FunctionArn;return e.publish?
|
|
24
|
+
{functionVersion:await J(t),functionArn:C}:{functionArn:C}},"createFunction"),V=n(
|
|
25
|
+
async(e,t)=>{g.logUpdate(p,`${e} source code`);let r=await X(t.sourceFile),{publish:o,
|
|
26
|
+
architecture:i}=t,a=await f.send(new je({Architectures:i&&[T(i)],FunctionName:e,
|
|
27
|
+
ZipFile:r,Publish:o}));g.logWait(p,e),await O(N,{FunctionName:e});let s=a.FunctionArn;
|
|
28
|
+
return t.publish?{functionVersion:await J(e),functionArn:s}:{functionArn:s}},"up\
|
|
29
|
+
dateSourceCode"),H=n(async(e,t)=>{let{handlerName:r,variables:o}=t;g.logUpdate(p,
|
|
30
|
+
`${e} configuration`),o&&L(o);let{description:i,memory:a,timeout:s,runtime:c,debug:m,
|
|
31
|
+
roleArn:u,logGroup:l}=t;await f.send(new Ze({Runtime:c&&M(c),FunctionName:e,Description:i,
|
|
32
|
+
MemorySize:a,Timeout:s,Role:u,...r&&{Handler:Y(r)},LoggingConfig:{LogGroup:l,ApplicationLogLevel:m?
|
|
33
|
+
A.Debug:A.Warn,SystemLogLevel:W.Warn,LogFormat:$.Json},Environment:{Variables:o}})),
|
|
34
|
+
g.logWait(p,e),await O(N,{FunctionName:e})},"updateConfiguration"),_=n(async e=>{
|
|
35
|
+
g.logDelete(p,e),await et(async()=>{try{await f.send(new $e({FunctionName:e}))}catch(t){
|
|
36
|
+
if(!(t instanceof B))throw t}})},"deleteFunction"),J=n(async e=>{g.logPublish(p,
|
|
37
|
+
e);let t=await f.send(new Qe({FunctionName:e}));g.logWait(p,e);let r=t.Version;return await Xe(
|
|
38
|
+
N,{FunctionName:e,Qualifier:r}),r},"publishFunction"),U=n(async(e,t)=>{let r=j(e)?.
|
|
39
|
+
resourceName??e;g.logTag(p,r),await f.send(new _e({Resource:e,Tags:{...t,ManagedBy:"\
|
|
40
|
+
EZ4"}}))},"tagFunction"),K=n(async(e,t)=>{let r=j(e)?.resourceName??e;g.logUntag(
|
|
41
|
+
p,r),await f.send(new Je({Resource:e,TagKeys:t}))},"untagFunction"),X=n(e=>k(e,"\
|
|
42
|
+
main.mjs"),"getSourceZipFile"),Y=n(e=>`main.${e}`,"getSourceHandlerName");var ne=n(()=>({equals:at,create:oe,replace:pt,preview:st,update:ct,delete:mt}),"\
|
|
43
|
+
getFunctionHandler"),at=n((e,t)=>!!e.result&&e.result.functionArn===t.result?.functionArn,
|
|
44
|
+
"equalsResource"),st=n(async(e,t)=>{let r=e.parameters,o=t.parameters,i=ot({...r,
|
|
45
|
+
connections:e.connections,dependencies:e.dependencies,variables:R(await r.getFunctionVariables()),
|
|
46
|
+
sourceHash:await z(...r.getFunctionFiles()),valuesHash:r.getFunctionHash()},{...o,
|
|
45
47
|
connections:t.connections,dependencies:t.dependencies,variables:t.result?.variables,
|
|
46
|
-
sourceHash:t.result?.sourceHash,valuesHash:t.result?.valuesHash});
|
|
47
|
-
...i,name:
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
roleArn:s
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
`
|
|
48
|
+
sourceHash:t.result?.sourceHash,valuesHash:t.result?.valuesHash},{exclude:{release:!0}});
|
|
49
|
+
if(i.counts)return{...i,name:r.functionName}},"previewResource"),pt=n(async(e,t,r)=>{
|
|
50
|
+
if(t.result)throw new nt(p,e.entryId,t.entryId);return oe(e,r)},"replaceResource"),
|
|
51
|
+
oe=n(async(e,t)=>{let{functionName:r,release:o,...i}=e.parameters,a=te(p,r,t),s=re(
|
|
52
|
+
p,r,t),[c,m,u,l]=await Promise.all([z(...i.getFunctionFiles()),i.getFunctionBundle(
|
|
53
|
+
t),i.getFunctionHash(),i.getFunctionVariables()]),d=await Z(r),x=await ee(m);if(d)
|
|
54
|
+
return await V(r,{architecture:i.architecture,publish:!1,sourceFile:m}),await H(
|
|
55
|
+
r,{...i,logGroup:a,roleArn:s,variables:{...l,...o?.variableName&&{[o.variableName]:o.
|
|
56
|
+
version}}}),await U(d.functionArn,{...i.tags,...o?.tagName&&{[o.tagName]:o.version}}),
|
|
57
|
+
{functionArn:d.functionArn,functionVersion:d.functionVersion,variables:R(l),valuesHash:u,
|
|
58
|
+
sourceHash:c,bundleHash:x,logGroup:a,roleArn:s};let v=await Q({...i,publish:!0,functionName:r,
|
|
59
|
+
sourceFile:m,logGroup:a,roleArn:s,variables:{...l,...o?.variableName&&{[o.variableName]:o.
|
|
60
|
+
version}},tags:{...i.tags,...o?.tagName&&{[o.tagName]:o.version}}});return{functionArn:v.
|
|
61
|
+
functionArn,functionVersion:v.functionVersion,variables:R(l),valuesHash:u,sourceHash:c,
|
|
62
|
+
bundleHash:x,logGroup:a,roleArn:s}},"createResource"),ct=n(async(e,t,r)=>{let{parameters:o,
|
|
63
|
+
result:i}=e;if(!i)return;let{functionName:a}=o,s=await o.getFunctionVariables(),
|
|
64
|
+
c=t.result?.variables??s,m=re(p,a,r),u=t.result?.roleArn??m,l=te(p,a,r),d=t.result?.
|
|
65
|
+
logGroup??l,{isUpdated:x,...v}=await gt(a,o,t.result,r),C={...o,variables:s,roleArn:m,
|
|
66
|
+
logGroup:l},G={...t.parameters,variables:c,roleArn:u,logGroup:d};return await ut(
|
|
67
|
+
a,C,G,x,r),await lt(i.functionArn,o,t.parameters,x),{...i,...v,variables:R(s),logGroup:l,
|
|
68
|
+
roleArn:m}},"updateResource"),mt=n(async e=>{let{result:t,parameters:r}=e;t&&await _(
|
|
69
|
+
r.functionName)},"deleteResource"),ut=n(async(e,t,r,o,i)=>{let{variables:a,...s}=t,
|
|
70
|
+
c={variables:R(a),...s},m=!it(c,r,{exclude:{sourceFile:!0,functionName:!0,architecture:!0,
|
|
71
|
+
release:!0,tags:!0}}),u=o?t.release:r.release,l=o&&u?.variableName;(m||l||i.force)&&
|
|
72
|
+
await H(e,{...t,variables:{...t.variables,...u?.variableName&&{[u.variableName]:u.
|
|
73
|
+
version}}})},"checkConfigurationUpdates"),lt=n(async(e,t,r,o)=>{let a=o&&t.release?.
|
|
74
|
+
version!==r.release?.version?t.release:void 0,s={...t.tags,...a?.tagName&&{[a.tagName]:a.
|
|
75
|
+
version}};await tt(s,r.tags,c=>U(e,c),c=>K(e,c))},"checkTagUpdates"),gt=n(async(e,t,r,o)=>{
|
|
76
|
+
let[i,a]=await Promise.all([z(...t.getFunctionFiles()),t.getFunctionHash()]),s=r?.
|
|
77
|
+
sourceHash,c=r?.valuesHash;if(i!==s||a!==c||o.force){let m=await t.getFunctionBundle(
|
|
78
|
+
o),u=await ee(m),l=r?.bundleHash;if(u===l&&a===c)return rt.logSkip(p,`${e} sourc\
|
|
79
|
+
e code`),{isUpdated:!1,valuesHash:a,sourceHash:i};let{functionVersion:d}=await V(
|
|
80
|
+
e,{architecture:t.architecture,publish:!r?.functionVersion,sourceFile:m});return{
|
|
81
|
+
isUpdated:!0,valuesHash:a,sourceHash:i,bundleHash:u,...d&&{functionVersion:d}}}return{
|
|
82
|
+
isUpdated:!1}},"checkSourceCodeUpdates");var ie=n(()=>{dt(y,ne())},"registerFunctionProvider");import{tryRegisterProvider as Ct}from"@ez4/aws-common";import{ReplaceResourceError as wt}from"@ez4/aws-common";import{IncompleteResourceError as ae}from"@ez4/aws-common";var E=class extends Error{static{n(this,"FunctionNotFoundError")}constructor(t){
|
|
83
|
+
super(`Function ${t} wasn't found.`)}};var se=n(e=>e.type===y,"isFunctionState"),sn=n((e,t,r)=>{try{let o=e.getServiceState(
|
|
84
|
+
t,r);if(se(o))return o}catch{}},"tryGetFunctionState"),pn=n((e,t,r)=>{let o=e.getServiceState(
|
|
85
|
+
t,r);if(!se(o))throw new E(t);return o},"getFunctionState"),b=n((e,t,r)=>{let o=r.
|
|
86
|
+
getDependencies(y).at(0)?.parameters;if(!o?.functionName)throw new ae(e,t,"funct\
|
|
87
|
+
ionName");return o.functionName},"getFunctionName"),yt=n(e=>e.getDependencies(y)[0]?.
|
|
88
|
+
result?.functionArn,"tryGetFunctionArn"),cn=n((e,t,r)=>{let o=yt(r);if(!o)throw new ae(
|
|
89
|
+
e,t,"functionArn");return o},"getFunctionArn");import{LambdaClient as ft,AddPermissionCommand as St,RemovePermissionCommand as Ft,
|
|
90
|
+
ResourceNotFoundException as xt}from"@aws-sdk/client-lambda";import{Logger as pe}from"@ez4/aws-common";var h="AWS:Lambda/Permission",F="aws:lambda.permission";var ce=new ft({}),me=n(async e=>{pe.logCreate(h,e.functionName);let t=e.statementId??
|
|
91
|
+
`ID${Date.now()}`;return await ce.send(new St({StatementId:t,FunctionName:e.functionName,
|
|
82
92
|
SourceArn:e.sourceArn,Principal:e.principal,Action:e.action})),{statementId:t}},
|
|
83
|
-
"createPermission"),
|
|
84
|
-
new
|
|
85
|
-
return!1}},"deletePermission");var
|
|
86
|
-
getPermissionHandler"),
|
|
87
|
-
functionName,"equalsResource"),
|
|
88
|
-
if(t.result)throw new
|
|
89
|
-
|
|
90
|
-
t);return{statementId:(await
|
|
93
|
+
"createPermission"),ue=n(async(e,t)=>{pe.logDelete(h,e);try{return await ce.send(
|
|
94
|
+
new Ft({FunctionName:e,StatementId:t})),!0}catch(r){if(!(r instanceof xt))throw r;
|
|
95
|
+
return!1}},"deletePermission");var le=n(()=>({equals:vt,create:ge,replace:ht,preview:Rt,update:bt,delete:Pt}),"\
|
|
96
|
+
getPermissionHandler"),vt=n((e,t)=>!!e.result&&e.result.functionName===t.result?.
|
|
97
|
+
functionName,"equalsResource"),Rt=n((e,t)=>{},"previewResource"),ht=n(async(e,t,r)=>{
|
|
98
|
+
if(t.result)throw new wt(h,e.entryId,t.entryId);return ge(e,r)},"replaceResource"),
|
|
99
|
+
ge=n(async(e,t)=>{let r=e.parameters,o=b(h,"permission",t),i=await r.getPermission(
|
|
100
|
+
t);return{statementId:(await me({action:"lambda:InvokeFunction",sourceArn:i.sourceArn,
|
|
91
101
|
principal:i.principal,functionName:o})).statementId,functionName:o}},"createReso\
|
|
92
|
-
urce"),
|
|
93
|
-
t.functionName,t.statementId)},"deleteResource");var
|
|
94
|
-
deepEqual as
|
|
95
|
-
UpdateEventSourceMappingCommand as
|
|
96
|
-
FunctionResponseType as
|
|
97
|
-
import{Logger as
|
|
98
|
-
|
|
99
|
-
EventSourceArn:t})),[o]=
|
|
100
|
-
"importMapping"),
|
|
101
|
-
|
|
102
|
-
return await
|
|
103
|
-
|
|
104
|
-
await
|
|
105
|
-
send(new
|
|
106
|
-
eteMapping"),
|
|
107
|
-
te"),
|
|
108
|
-
let
|
|
109
|
-
e=>{let{sourceArn:t,enabled:
|
|
110
|
-
Enabled:
|
|
111
|
-
maxWait,BatchSize:i?.size,...
|
|
112
|
-
"sqs"&&{ScalingConfig:{MaximumConcurrency:o}}}},"upsertMappingRequest");var
|
|
113
|
-
getMappingHandler"),
|
|
114
|
-
"equalsResource"),
|
|
115
|
-
o={...t.parameters,dependencies:t.dependencies},i=
|
|
116
|
-
if(i.counts)return{...i,name:
|
|
117
|
-
if(t.result)throw new
|
|
118
|
-
|
|
119
|
-
return{eventId:(await
|
|
120
|
-
eventId,functionName:o,sourceArn:i}},"createResource"),
|
|
121
|
-
result;if(!o)return;let i=o.sourceArn,
|
|
122
|
-
o.functionName,
|
|
123
|
-
functionName:
|
|
124
|
-
"updateResource")
|
|
125
|
-
esource"),
|
|
126
|
-
await
|
|
127
|
-
"logs:CreateLogStream","logs:PutLogEvents"],resourceIds:[`arn:aws:logs:${t}:${
|
|
128
|
-
:log-group:${e}-*:*`]}])},"getPolicyDocument");var
|
|
129
|
-
t,i)??
|
|
130
|
-
tionPolicy");var
|
|
131
|
-
unt":
|
|
132
|
-
return
|
|
133
|
-
functionName:i}})},"createFunction");import{attachEntry as
|
|
134
|
-
dependencies:[t.entryId,
|
|
135
|
-
let o=
|
|
136
|
-
dependencies:[t.entryId,
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
102
|
+
urce"),bt=n(async()=>{},"updateResource"),Pt=n(async e=>{let t=e.result;t&&await ue(
|
|
103
|
+
t.functionName,t.statementId)},"deleteResource");var de=n(()=>{Ct(F,le())},"registerPermissionProvider");import{tryRegisterProvider as Zt}from"@ez4/aws-common";import{ReplaceResourceError as Gt}from"@ez4/aws-common";import{deepCompare as Dt,
|
|
104
|
+
deepEqual as qt}from"@ez4/utils";import{LambdaClient as At,GetEventSourceMappingCommand as Nt,CreateEventSourceMappingCommand as Et,
|
|
105
|
+
UpdateEventSourceMappingCommand as It,DeleteEventSourceMappingCommand as Mt,ListEventSourceMappingsCommand as Tt,
|
|
106
|
+
FunctionResponseType as Lt,EventSourcePosition as Vt,ResourceNotFoundException as Ht}from"@aws-sdk/client-lambda";
|
|
107
|
+
import{Logger as I,parseArn as Ut}from"@ez4/aws-common";import{Wait as fe}from"@ez4/utils";var S="AWS:Lambda/Mapping",w="aws:lambda.mapping",ye=(r=>(r.DynamoDB="dynamodb",
|
|
108
|
+
r.Queue="sqs",r))(ye||{});var P=new At({}),Se=n(async(e,t)=>{I.logImport(S,e);let r=await P.send(new Tt({FunctionName:e,
|
|
109
|
+
EventSourceArn:t})),[o]=r.EventSourceMappings;return o?{eventId:o.UUID}:void 0},
|
|
110
|
+
"importMapping"),Fe=n(async e=>{let{sourceArn:t,functionName:r}=e;I.logCreate(S,
|
|
111
|
+
r);let i=(await P.send(new Et({FunctionName:r,EventSourceArn:t,...Re(e)}))).UUID;
|
|
112
|
+
return await ve(i),{eventId:i}},"createMapping"),xe=n(async(e,t)=>{let{functionName:r}=t;
|
|
113
|
+
I.logUpdate(S,`${r} (${e})`),await P.send(new It({UUID:e,FunctionName:r,...Re(t)})),
|
|
114
|
+
await ve(e)},"updateMapping"),we=n(async e=>{I.logDelete(S,e);try{return await P.
|
|
115
|
+
send(new Mt({UUID:e})),!0}catch(t){if(!(t instanceof Ht))throw t;return!1}},"del\
|
|
116
|
+
eteMapping"),zt=n(async e=>(await P.send(new Nt({UUID:e}))).State,"getMappingSta\
|
|
117
|
+
te"),ve=n(async e=>{let t=new Set(["Enabled","Disabled"]);await fe.until(async()=>{
|
|
118
|
+
let r=await zt(e);return t.has(r)?!0:fe.RetryAttempt})},"waitForReadyState"),Re=n(
|
|
119
|
+
e=>{let{sourceArn:t,enabled:r,concurrency:o,batch:i}=e,{service:a}=Ut(t);return{
|
|
120
|
+
Enabled:r,FunctionResponseTypes:[Lt.ReportBatchItemFailures],MaximumBatchingWindowInSeconds:i?.
|
|
121
|
+
maxWait,BatchSize:i?.size,...a==="dynamodb"&&{StartingPosition:Vt.LATEST},...a===
|
|
122
|
+
"sqs"&&{ScalingConfig:{MaximumConcurrency:o}}}},"upsertMappingRequest");var he=n(()=>({equals:kt,create:be,replace:Bt,preview:Ot,update:Wt,delete:$t}),"\
|
|
123
|
+
getMappingHandler"),kt=n((e,t)=>!!e.result&&e.result.eventId===t.result?.eventId,
|
|
124
|
+
"equalsResource"),Ot=n((e,t)=>{let r={...e.parameters,dependencies:e.dependencies},
|
|
125
|
+
o={...t.parameters,dependencies:t.dependencies},i=Dt(r,o,{exclude:{getSourceArn:!0}});
|
|
126
|
+
if(i.counts)return{...i,name:r.fromService}},"previewResource"),Bt=n(async(e,t,r)=>{
|
|
127
|
+
if(t.result)throw new Gt(S,e.entryId,t.entryId);return be(e,r)},"replaceResource"),
|
|
128
|
+
be=n(async(e,t)=>{let r=e.parameters,o=b(S,"mapping",t),i=await r.getSourceArn(t);
|
|
129
|
+
return{eventId:(await Se(o,i)??await Fe({...e.parameters,functionName:o,sourceArn:i})).
|
|
130
|
+
eventId,functionName:o,sourceArn:i}},"createResource"),Wt=n(async(e,t,r)=>{let o=e.
|
|
131
|
+
result;if(!o)return;let i=o.sourceArn,a=b(S,"mapping",r),s=t.result?.functionName??
|
|
132
|
+
o.functionName,c={...e.parameters,functionName:a,sourceArn:i},m={...t.parameters,
|
|
133
|
+
functionName:s,sourceArn:i};return await jt(o.eventId,c,m),{...o,functionName:a}},
|
|
134
|
+
"updateResource"),$t=n(async e=>{let t=e.result;t&&await we(t.eventId)},"deleteR\
|
|
135
|
+
esource"),jt=n(async(e,t,r)=>{!qt(t,r,{exclude:{getSourceArn:!0,fromService:!0}})&&
|
|
136
|
+
await xe(e,t)},"checkGeneralUpdates");var Pe=n(()=>{Zt(w,he())},"registerMappingProvider");var Ce=n(()=>[{account:"lambda.amazonaws.com"}],"prepareIdentityAccount");import{createPolicy as Kt,tryGetPolicy as Xt}from"@ez4/aws-identity";import{getServiceName as Yt}from"@ez4/project/library";import{getAccountId as Qt,getRegion as _t,createPolicyDocument as Jt}from"@ez4/aws-identity";var Ae=n(async e=>{let[t,r]=await Promise.all([_t(),Qt()]);return Jt([{permissions:[
|
|
137
|
+
"logs:CreateLogStream","logs:PutLogEvents"],resourceIds:[`arn:aws:logs:${t}:${r}\
|
|
138
|
+
:log-group:${e}-*:*`]}])},"getPolicyDocument");var Ne=n(async e=>{let{state:t,options:r}=e,o=Yt("",r),i=`${o}-lambda-policy`;return Xt(
|
|
139
|
+
t,i)??Kt(t,{tags:r.tags,policyDocument:await Ae(o),policyName:i})},"prepareExecu\
|
|
140
|
+
tionPolicy");var go=n(()=>{er(),tr(),rr(),nr("@ez4/aws-function",{"deploy:prepareIdentityAcco\
|
|
141
|
+
unt":Ce,"deploy:prepareExecutionPolicy":Ne}),ie(),de(),Pe()},"registerTriggers");import{toKebabCase as or,hashData as ir}from"@ez4/utils";import{attachEntry as ar}from"@ez4/stateful";var wo=n((e,t,r,o)=>{let i=or(o.functionName),a=ir(y,t.entryId,i),s=[t.entryId];
|
|
142
|
+
return r&&s.push(r.entryId),ar(e,{type:y,entryId:a,dependencies:s,parameters:{...o,
|
|
143
|
+
functionName:i}})},"createFunction");import{attachEntry as sr}from"@ez4/stateful";import{hashData as Ie}from"@ez4/utils";var Ee=n(e=>e.type===F,"isPermissionState");var Io=n((e,t,r,o)=>{let i=Ie(F,t.entryId,r.entryId);return sr(e,{type:F,entryId:i,
|
|
144
|
+
dependencies:[t.entryId,r.entryId],parameters:o})},"createPermission"),Mo=n((e,t,r)=>{
|
|
145
|
+
let o=Ie(F,t.entryId,r.entryId),i=e[o];return i&&Ee(i)?i:null},"getPermission");import{hashData as pr}from"@ez4/utils";import{attachEntry as cr}from"@ez4/stateful";var zo=n((e,t,r,o)=>{let i=pr(w,t.entryId,r.entryId);return cr(e,{type:w,entryId:i,
|
|
146
|
+
dependencies:[t.entryId,r.entryId],parameters:o})},"createMapping");var ko=n(e=>e.type===w,"isMappingState");var Wo=n((e,t,r)=>`arn:aws:lambda:${e}:${t}:function:${r}`,"buildFunctionArn");import{ArchitectureType as mr,RuntimeType as ur}from"@ez4/project";var lr;(a=>(a.
|
|
147
|
+
LogRetention=90,a.Architecture=mr.x86,a.Runtime=ur.Node24,a.Timeout=90,a.Memory=
|
|
148
|
+
192))(lr||={});export{Ve as FunctionArchitecture,lr as FunctionDefaults,Te as FunctionRuntime,p as FunctionServiceName,
|
|
149
|
+
y as FunctionServiceType,ye as MappingService,S as MappingServiceName,w as MappingServiceType,
|
|
150
|
+
h as PermissionServiceName,F as PermissionServiceType,Wo as buildFunctionArn,wo as createFunction,
|
|
151
|
+
zo as createMapping,Io as createPermission,T as getFunctionArchitecture,cn as getFunctionArn,
|
|
152
|
+
b as getFunctionName,M as getFunctionRuntime,pn as getFunctionState,Mo as getPermission,
|
|
153
|
+
se as isFunctionState,ko as isMappingState,go as registerTriggers,yt as tryGetFunctionArn,
|
|
154
|
+
sn as tryGetFunctionState};
|
|
141
155
|
//# sourceMappingURL=main.mjs.map
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ArchitectureType, RuntimeType } from '@ez4/project';
|
|
2
|
+
export declare namespace FunctionDefaults {
|
|
3
|
+
/**
|
|
4
|
+
* Default log retention in days.
|
|
5
|
+
*/
|
|
6
|
+
const LogRetention = 15;
|
|
7
|
+
/**
|
|
8
|
+
* Default function architecture.
|
|
9
|
+
*/
|
|
10
|
+
const Architecture = ArchitectureType.x86;
|
|
11
|
+
/**
|
|
12
|
+
* Default function runtime.
|
|
13
|
+
*/
|
|
14
|
+
const Runtime = RuntimeType.Node24;
|
|
15
|
+
/**
|
|
16
|
+
* Default function timeout.
|
|
17
|
+
*/
|
|
18
|
+
const Timeout = 90;
|
|
19
|
+
/**
|
|
20
|
+
* Default function memory.
|
|
21
|
+
*/
|
|
22
|
+
const Memory = 192;
|
|
23
|
+
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ez4/aws-function",
|
|
3
3
|
"description": "EZ4: Self-managed AWS lambda function provider",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.39.0",
|
|
5
5
|
"author": "Silas B.",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"type": "module",
|
|
@@ -42,13 +42,14 @@
|
|
|
42
42
|
"live:publish": "npm run build && npm publish --access public"
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"@aws-sdk/client-lambda": "^3.
|
|
46
|
-
"@ez4/aws-common": "^0.
|
|
47
|
-
"@ez4/aws-identity": "^0.
|
|
48
|
-
"@ez4/aws-logs": "^0.
|
|
49
|
-
"@ez4/project": "^0.
|
|
50
|
-
"@ez4/
|
|
51
|
-
"@ez4/
|
|
45
|
+
"@aws-sdk/client-lambda": "^3.958.0",
|
|
46
|
+
"@ez4/aws-common": "^0.39.0",
|
|
47
|
+
"@ez4/aws-identity": "^0.39.0",
|
|
48
|
+
"@ez4/aws-logs": "^0.39.0",
|
|
49
|
+
"@ez4/project": "^0.39.0",
|
|
50
|
+
"@ez4/common": "^0.39.0",
|
|
51
|
+
"@ez4/stateful": "^0.39.0",
|
|
52
|
+
"@ez4/utils": "^0.39.0",
|
|
52
53
|
"@types/adm-zip": "^0.5.5",
|
|
53
54
|
"adm-zip": "^0.5.14"
|
|
54
55
|
}
|