@ez4/aws-bucket 0.36.0 → 0.37.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/bucket/function/types.d.ts +3 -2
- package/dist/main.cjs +80 -79
- package/dist/main.mjs +51 -50
- package/package.json +9 -9
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { FunctionParameters } from '@ez4/aws-function';
|
|
1
|
+
import type { FunctionParameters, FunctionVariables } from '@ez4/aws-function';
|
|
2
2
|
import type { ContextSource } from '@ez4/project/library';
|
|
3
3
|
export type BucketEventFunction = {
|
|
4
4
|
functionName: string;
|
|
@@ -8,9 +8,10 @@ export type BucketEventFunction = {
|
|
|
8
8
|
export type BucketEventEntryPoint = BucketEventFunction & {
|
|
9
9
|
dependencies: string[];
|
|
10
10
|
};
|
|
11
|
-
export type BucketEventFunctionParameters = Omit<FunctionParameters, 'getFunctionFiles' | 'getFunctionBundle' | 'getFunctionHash' | 'sourceFile' | 'handlerName'> & {
|
|
11
|
+
export type BucketEventFunctionParameters = Omit<FunctionParameters, 'getFunctionFiles' | 'getFunctionBundle' | 'getFunctionHash' | 'getFunctionVariables' | 'sourceFile' | 'handlerName'> & {
|
|
12
12
|
handler: BucketEventEntryPoint;
|
|
13
13
|
listener?: BucketEventFunction;
|
|
14
14
|
context?: Record<string, ContextSource>;
|
|
15
|
+
variables: (FunctionVariables | undefined)[];
|
|
15
16
|
debug?: boolean;
|
|
16
17
|
};
|
package/dist/main.cjs
CHANGED
|
@@ -1,107 +1,107 @@
|
|
|
1
1
|
"use strict";var Et=Object.create;var R=Object.defineProperty;var Rt=Object.getOwnPropertyDescriptor;var Ct=Object.getOwnPropertyNames;var ht=Object.getPrototypeOf,jt=Object.prototype.hasOwnProperty;var o=(t,e)=>R(t,"name",{value:e,configurable:!0});var Ot=(t,e)=>{for(var r in e)R(t,r,{get:e[r],enumerable:!0})},te=(t,e,r,n)=>{if(e&&
|
|
2
2
|
typeof e=="object"||typeof e=="function")for(let s of Ct(e))!jt.call(t,s)&&s!==r&&
|
|
3
3
|
R(t,s,{get:()=>e[s],enumerable:!(n=Rt(e,s))||n.enumerable});return t};var Tt=(t,e,r)=>(r=t!=null?Et(ht(t)):{},te(e||!t||!t.__esModule?R(r,"default",{value:t,
|
|
4
|
-
enumerable:!0}):r,t)),Nt=t=>te(R({},"__esModule",{value:!0}),t);var or={};Ot(or,{BucketServiceName:()=>p,BucketServiceType:()=>
|
|
5
|
-
ObjectServiceType:()=>
|
|
4
|
+
enumerable:!0}):r,t)),Nt=t=>te(R({},"__esModule",{value:!0}),t);var or={};Ot(or,{BucketServiceName:()=>p,BucketServiceType:()=>y,ObjectServiceName:()=>b,
|
|
5
|
+
ObjectServiceType:()=>g,PolicyServiceName:()=>P,PolicyServiceType:()=>S,buildBucketArn:()=>W,
|
|
6
6
|
createBucket:()=>J,createBucketEventFunction:()=>Q,createBucketObject:()=>rr,createBucketPolicy:()=>er,
|
|
7
7
|
createBucketStateId:()=>H,getBucketDomain:()=>Yt,getBucketName:()=>C,getBucketObjectFiles:()=>Ut,
|
|
8
8
|
getBucketObjectPath:()=>h,getBucketState:()=>K,getPolicyDocument:()=>Z,isBucketDomain:()=>Xt,
|
|
9
|
-
isBucketObjectState:()=>Kt,isBucketPolicyState:()=>tr,isBucketState:()=>
|
|
9
|
+
isBucketObjectState:()=>Kt,isBucketPolicyState:()=>tr,isBucketState:()=>xe,registerTriggers:()=>Qt});
|
|
10
10
|
module.exports=Nt(or);var yt=require("@ez4/aws-common"),ft=require("@ez4/aws-identity"),gt=require("@ez4/aws-function"),
|
|
11
|
-
dt=require("@ez4/storage/library"),St=require("@ez4/project/library");var ke=require("@ez4/aws-common");var ue=require("@ez4/aws-common"),$=require("@ez4/aws-function"),
|
|
11
|
+
dt=require("@ez4/storage/library"),St=require("@ez4/project/library");var ke=require("@ez4/aws-common");var ue=require("@ez4/aws-common"),$=require("@ez4/aws-function"),x=require("@ez4/utils");var m=require("@ez4/aws-common"),a=require("@aws-sdk/client-s3");var p="AWS:S3/Bucket",y="aws:s3.bucket";var f=new a.S3Client({}),re=o(async t=>{m.Logger.logFetch(p,t);try{return!(await f.
|
|
12
12
|
send(new a.ListObjectsV2Command({Bucket:t,MaxKeys:1}))).Contents?.length}catch(e){
|
|
13
13
|
if(!(e instanceof a.NoSuchBucket))throw e;return 0}},"isBucketEmpty"),oe=o(async t=>{
|
|
14
|
-
let{bucketName:e}=t;return m.Logger.logCreate(p,e),await
|
|
14
|
+
let{bucketName:e}=t;return m.Logger.logCreate(p,e),await f.send(new a.CreateBucketCommand(
|
|
15
15
|
{Bucket:e})),{bucketName:e}},"createBucket"),ne=o(async t=>{m.Logger.logDelete(p,
|
|
16
|
-
t);try{return await
|
|
16
|
+
t);try{return await f.send(new a.DeleteBucketCommand({Bucket:t})),!0}catch(e){if(!(e instanceof
|
|
17
17
|
a.NoSuchBucket))throw e;return!1}},"deleteBucket"),se=o(async(t,e)=>{m.Logger.logTag(
|
|
18
|
-
p,t),await
|
|
18
|
+
p,t),await f.send(new a.PutBucketTaggingCommand({Bucket:t,Tagging:{TagSet:(0,m.getTagList)(
|
|
19
19
|
{...e,ManagedBy:"EZ4"})}}))},"tagBucket"),ce=o(async(t,e)=>{m.Logger.logUpdate(p,
|
|
20
|
-
`${t} CORS`),await
|
|
20
|
+
`${t} CORS`),await f.send(new a.PutBucketCorsCommand({Bucket:t,CORSConfiguration:{
|
|
21
21
|
CORSRules:[{ID:"ID0",AllowedOrigins:e.allowOrigins,AllowedMethods:e.allowMethods,
|
|
22
22
|
AllowedHeaders:e.allowHeaders,ExposeHeaders:e.exposeHeaders,MaxAgeSeconds:e.maxAge}]}}))},
|
|
23
23
|
"updateCorsConfiguration"),ae=o(async t=>{m.Logger.logDelete(p,`${t} CORS`);try{
|
|
24
|
-
return await
|
|
24
|
+
return await f.send(new a.DeleteBucketCorsCommand({Bucket:t})),!0}catch(e){if(!(e instanceof
|
|
25
25
|
a.NoSuchBucket))throw e;return!1}},"deleteCorsConfiguration"),ie=o(async(t,e)=>{
|
|
26
|
-
m.Logger.logCreate(p,`${t} lifecycle`),await
|
|
26
|
+
m.Logger.logCreate(p,`${t} lifecycle`),await f.send(new a.PutBucketLifecycleConfigurationCommand(
|
|
27
27
|
{Bucket:t,LifecycleConfiguration:{Rules:[{ID:"ID0",Status:a.ExpirationStatus.Enabled,
|
|
28
28
|
Filter:{Prefix:"*"},Expiration:{Days:e}}]}}))},"createLifecycle"),pe=o(async t=>{
|
|
29
|
-
m.Logger.logDelete(p,`${t} lifecycle`);try{return await
|
|
29
|
+
m.Logger.logDelete(p,`${t} lifecycle`);try{return await f.send(new a.DeleteBucketLifecycleCommand(
|
|
30
30
|
{Bucket:t})),!0}catch(e){if(!(e instanceof a.NoSuchBucket))throw e;return!1}},"d\
|
|
31
31
|
eleteLifecycle"),me=o(async(t,e)=>{m.Logger.logUpdate(p,`${t} events`);let{functionArn:r,
|
|
32
|
-
eventsPath:n,eventsType:s}=e;await
|
|
32
|
+
eventsPath:n,eventsType:s}=e;await f.send(new a.PutBucketNotificationConfigurationCommand(
|
|
33
33
|
{Bucket:t,SkipDestinationValidation:!0,NotificationConfiguration:{...r&&{LambdaFunctionConfigurations:[
|
|
34
34
|
{Id:"ID0",LambdaFunctionArn:r,Events:s,...n&&{Filter:{Key:{FilterRules:[{Name:"p\
|
|
35
|
-
refix",Value:n}]}}}}]}}}))},"updateEventNotifications");var le=o(()=>({equals:Dt,create:ye,replace:Ft,preview:zt,update:
|
|
35
|
+
refix",Value:n}]}}}}]}}}))},"updateEventNotifications");var le=o(()=>({equals:Dt,create:ye,replace:Ft,preview:zt,update:It,delete:At}),"\
|
|
36
36
|
getBucketHandler"),Dt=o((t,e)=>!!t.result&&t.result.bucketName===e.result?.bucketName,
|
|
37
37
|
"equalsResource"),zt=o((t,e)=>{let r={...t.parameters,dependencies:t.dependencies},
|
|
38
|
-
n={...e.parameters,dependencies:e.dependencies},s=(0,
|
|
38
|
+
n={...e.parameters,dependencies:e.dependencies},s=(0,x.deepCompare)(r,n);if(s.counts)
|
|
39
39
|
return{...s,name:r.bucketName}},"previewResource"),Ft=o(async(t,e,r)=>{if(e.result)
|
|
40
40
|
throw new ue.ReplaceResourceError(p,t.entryId,e.entryId);return ye(t,r)},"replac\
|
|
41
41
|
eResource"),ye=o(async(t,e)=>{let r=t.parameters,n=(0,$.tryGetFunctionArn)(e),{bucketName:s}=await oe(
|
|
42
42
|
r);await fe(s,r,void 0),await ge(s,r,void 0),await de(s,r.tags,void 0);let c={eventsPath:r.
|
|
43
43
|
eventsPath,functionArn:n};return await Se(s,c,{}),{bucketName:s,functionArn:n}},
|
|
44
|
-
"createResource"),
|
|
45
|
-
let c=n.bucketName,i=(0,$.tryGetFunctionArn)(r),
|
|
44
|
+
"createResource"),It=o(async(t,e,r)=>{let{result:n,parameters:s}=t;if(!n)return;
|
|
45
|
+
let c=n.bucketName,i=(0,$.tryGetFunctionArn)(r),u=e.result?.functionArn;await fe(
|
|
46
46
|
c,s,e.parameters),await ge(c,s,e.parameters),await de(c,s.tags,e.parameters.tags);
|
|
47
47
|
let v={eventsPath:s.eventsPath,functionArn:i},E={eventsPath:e.parameters.eventsPath,
|
|
48
|
-
functionArn:
|
|
48
|
+
functionArn:u};return await Se(c,v,E),{...n,functionArn:i}},"updateResource"),At=o(
|
|
49
49
|
async t=>{let e=t.result;e&&await re(e.bucketName)&&await ne(e.bucketName)},"del\
|
|
50
|
-
eteResource"),fe=o(async(t,e,r)=>{if(!(e.cors&&r?.cors&&(0,
|
|
50
|
+
eteResource"),fe=o(async(t,e,r)=>{if(!(e.cors&&r?.cors&&(0,x.deepEqual)(e.cors,r.
|
|
51
51
|
cors))){if(e.cors)return ce(t,e.cors);if(r?.cors)return ae(t)}},"checkCorsUpdate\
|
|
52
52
|
s"),ge=o(async(t,e,r)=>{if(e.autoExpireDays!==r?.autoExpireDays){if(e.autoExpireDays)
|
|
53
53
|
return ie(t,e.autoExpireDays);if(r?.autoExpireDays)return pe(t)}},"checkLifecycl\
|
|
54
|
-
eUpdates"),de=o(async(t,e,r)=>{let n=e??{};!(0,
|
|
55
|
-
n)},"checkTagUpdates"),Se=o(async(t,e,r)=>{!(0,
|
|
56
|
-
"s3:ObjectCreated:*","s3:ObjectRemoved:*"],...e})},"checkEventUpdates");var be=o(()=>{(0,ke.tryRegisterProvider)(
|
|
57
|
-
`Bucket service ${e} wasn't found.`)}};var H=o(t=>(0,D.hashData)(
|
|
58
|
-
type===
|
|
59
|
-
e);return n},"getBucketState"),C=o((t,e,r)=>{let n=r.getDependencies(
|
|
60
|
-
if(!n?.bucketName)throw new
|
|
61
|
-
bucketName},"getBucketName");var k=require("@aws-sdk/client-s3"),U=require("@ez4/aws-common");var
|
|
62
|
-
logCreate(
|
|
54
|
+
eUpdates"),de=o(async(t,e,r)=>{let n=e??{};!(0,x.deepEqual)(n,r??{})&&await se(t,
|
|
55
|
+
n)},"checkTagUpdates"),Se=o(async(t,e,r)=>{!(0,x.deepEqual)(e,r)&&await me(t,{eventsType:[
|
|
56
|
+
"s3:ObjectCreated:*","s3:ObjectRemoved:*"],...e})},"checkEventUpdates");var be=o(()=>{(0,ke.tryRegisterProvider)(y,le())},"registerBucketProvider");var je=require("@ez4/aws-common");var Ee=require("@ez4/aws-common"),Re=require("@ez4/utils");var Pe=require("@ez4/aws-common"),D=require("@ez4/utils");var N=class extends Error{static{o(this,"BucketNotFoundError")}constructor(e){super(
|
|
57
|
+
`Bucket service ${e} wasn't found.`)}};var H=o(t=>(0,D.hashData)(y,(0,D.toKebabCase)(t)),"createBucketStateId"),xe=o(t=>t.
|
|
58
|
+
type===y,"isBucketState"),K=o((t,e,r)=>{let n=t.getServiceState(e,r);if(!xe(n))throw new N(
|
|
59
|
+
e);return n},"getBucketState"),C=o((t,e,r)=>{let n=r.getDependencies(y)[0]?.result;
|
|
60
|
+
if(!n?.bucketName)throw new Pe.IncompleteResourceError(t,e,"bucketName");return n.
|
|
61
|
+
bucketName},"getBucketName");var k=require("@aws-sdk/client-s3"),U=require("@ez4/aws-common");var P="AWS:S3/Policy",S="aws:s3.policy";var Be=new k.S3Client({}),we=o(async t=>{let{bucketName:e,role:r}=t;return U.Logger.
|
|
62
|
+
logCreate(P,e),await Be.send(new k.PutBucketPolicyCommand({Bucket:e,Policy:JSON.
|
|
63
63
|
stringify(r)})),{bucketName:e}},"createPolicy"),ve=o(async t=>{U.Logger.logDelete(
|
|
64
|
-
|
|
65
|
-
if(!(e instanceof k.NoSuchBucket))throw e;return!1}},"deletePolicy");var Ce=o(()=>({equals:Lt,create:he,replace:
|
|
64
|
+
P,t);try{return await Be.send(new k.DeleteBucketPolicyCommand({Bucket:t})),!0}catch(e){
|
|
65
|
+
if(!(e instanceof k.NoSuchBucket))throw e;return!1}},"deletePolicy");var Ce=o(()=>({equals:Lt,create:he,replace:qt,preview:Mt,update:$t,delete:Ht}),"\
|
|
66
66
|
getPolicyHandler"),Lt=o((t,e)=>!!t.result&&t.result.bucketName===e.result?.bucketName,
|
|
67
|
-
"equalsResource"),
|
|
67
|
+
"equalsResource"),Mt=o((t,e)=>{let r={...t.parameters,dependencies:t.dependencies},
|
|
68
68
|
n={...e.parameters,dependencies:e.dependencies},s=(0,Re.deepCompare)(r,n,{exclude:{
|
|
69
|
-
getRole:!0}});if(s.counts)return{...s,name:r.fromService}},"previewResource"),
|
|
70
|
-
async(t,e,r)=>{if(e.result)throw new Ee.ReplaceResourceError(
|
|
71
|
-
return he(t,r)},"replaceResource"),he=o(async(t,e)=>{let r=t.parameters,n=C(
|
|
69
|
+
getRole:!0}});if(s.counts)return{...s,name:r.fromService}},"previewResource"),qt=o(
|
|
70
|
+
async(t,e,r)=>{if(e.result)throw new Ee.ReplaceResourceError(P,t.entryId,e.entryId);
|
|
71
|
+
return he(t,r)},"replaceResource"),he=o(async(t,e)=>{let r=t.parameters,n=C(P,"p\
|
|
72
72
|
olicy",e),s=await r.getRole(e);return await we({bucketName:n,role:s}),{bucketName:n}},
|
|
73
73
|
"createResource"),$t=o(async()=>{},"updateResource"),Ht=o(async t=>{let e=t.result;
|
|
74
|
-
e&&await ve(e.bucketName)},"deleteResource");var Oe=o(()=>{(0,je.tryRegisterProvider)(S,Ce())},"registerPolicyProvider");var
|
|
75
|
-
Ne=Tt(require("mime"),1);var b="AWS:S3/Object",
|
|
76
|
-
bjectPath"),Ut=o(t=>t.getDependencies(
|
|
77
|
-
lastModified,objectKey:n.objectKey})),"getBucketObjectFiles");var G=new
|
|
78
|
-
logCreate(b,h(t,r));let s=Ne.default.getType(n);return await G.send(new
|
|
74
|
+
e&&await ve(e.bucketName)},"deleteResource");var Oe=o(()=>{(0,je.tryRegisterProvider)(S,Ce())},"registerPolicyProvider");var qe=require("@ez4/aws-common");var Fe=require("node:fs/promises"),Ie=require("@ez4/aws-common"),z=require("@ez4/utils");var Te=require("node:fs"),l=require("@aws-sdk/client-s3"),B=require("@ez4/aws-common"),
|
|
75
|
+
Ne=Tt(require("mime"),1);var b="AWS:S3/Object",g="aws:s3.object";var Kt=o(t=>t.type===g,"isBucketObjectState"),h=o((t,e)=>`${t}/${e}`,"getBucketO\
|
|
76
|
+
bjectPath"),Ut=o(t=>t.getDependencies(g).map(({result:r,parameters:n})=>({lastModified:r?.
|
|
77
|
+
lastModified,objectKey:n.objectKey})),"getBucketObjectFiles");var G=new l.S3Client({}),_=o(async(t,e)=>{let{objectKey:r,filePath:n}=e;B.Logger.
|
|
78
|
+
logCreate(b,h(t,r));let s=Ne.default.getType(n);return await G.send(new l.PutObjectCommand(
|
|
79
79
|
{Bucket:t,Key:r,Body:(0,Te.createReadStream)(n),...s&&{ContentType:s}})),{objectKey:r}},
|
|
80
|
-
"putObject"),De=o(async(t,e,r)=>{B.Logger.logTag(b,h(t,e)),await G.send(new
|
|
80
|
+
"putObject"),De=o(async(t,e,r)=>{B.Logger.logTag(b,h(t,e)),await G.send(new l.PutObjectTaggingCommand(
|
|
81
81
|
{Bucket:t,Key:e,Tagging:{TagSet:(0,B.getTagList)({...r,ManagedBy:"EZ4"})}}))},"t\
|
|
82
82
|
agObject"),ze=o(async(t,e)=>{B.Logger.logDelete(b,h(t,e));try{return await G.send(
|
|
83
|
-
new
|
|
84
|
-
throw r;return!1}},"deleteObject");var
|
|
83
|
+
new l.DeleteObjectCommand({Bucket:t,Key:e})),!0}catch(r){if(!(r instanceof l.NoSuchBucket))
|
|
84
|
+
throw r;return!1}},"deleteObject");var Ae=o(()=>({equals:Gt,create:Le,replace:Vt,preview:_t,update:Wt,delete:Zt}),"\
|
|
85
85
|
getObjectHandler"),Gt=o((t,e)=>!!t.result&&t.result.lastModified===e.result?.lastModified,
|
|
86
86
|
"equalsResource"),_t=o(async(t,e)=>{let r=t.parameters,n=e.parameters,s=(0,z.deepCompare)(
|
|
87
87
|
{...r,dependencies:t.dependencies,lastModified:await V(r.filePath)},{...n,dependencies:e.
|
|
88
88
|
dependencies,lastModified:t.result?.lastModified});if(s.counts)return{...s,name:r.
|
|
89
|
-
objectKey}},"previewResource"),Vt=o(async(t,e,r)=>{if(e.result)throw new
|
|
89
|
+
objectKey}},"previewResource"),Vt=o(async(t,e,r)=>{if(e.result)throw new Ie.ReplaceResourceError(
|
|
90
90
|
b,t.entryId,e.entryId);return Le(t,r)},"replaceResource"),Le=o(async(t,e)=>{let r=t.
|
|
91
|
-
parameters,n=C(b,"bucket",e),s=await V(r.filePath),{objectKey:c}=await _(n,r);return await
|
|
91
|
+
parameters,n=C(b,"bucket",e),s=await V(r.filePath),{objectKey:c}=await _(n,r);return await Me(
|
|
92
92
|
n,c,r.tags,t.parameters.tags),{lastModified:s,bucketName:n}},"createResource"),Wt=o(
|
|
93
93
|
async(t,e)=>{let{result:r,parameters:n}=t;if(!r)return;let{objectKey:s,tags:c}=n,
|
|
94
|
-
i=Jt(r,n,e.parameters);return await
|
|
94
|
+
i=Jt(r,n,e.parameters);return await Me(r.bucketName,s,c,e.parameters.tags),i},"u\
|
|
95
95
|
pdateResource"),Zt=o(async t=>{let{result:e,parameters:r}=t;e&&await ze(e.bucketName,
|
|
96
96
|
r.objectKey)},"deleteResource"),V=o(async t=>{let{mtime:e}=await(0,Fe.stat)(t);return e.
|
|
97
97
|
getTime()},"getLastModifiedTime"),Jt=o(async(t,e,r)=>{let n=await V(e.filePath);
|
|
98
98
|
if(n<=t.lastModified&&e.filePath===r.filePath)return t;let{bucketName:s}=t,{objectKey:c}=r;
|
|
99
99
|
return await _(s,{...e,objectKey:c}),{lastModified:n,bucketName:s}},"checkObject\
|
|
100
|
-
Updates"),
|
|
101
|
-
t,e,s)},"checkTagUpdates");var $e=o(()=>{(0,
|
|
100
|
+
Updates"),Me=o(async(t,e,r,n)=>{let s=r??{};!(0,z.deepEqual)(s,n??{})&&await De(
|
|
101
|
+
t,e,s)},"checkTagUpdates");var $e=o(()=>{(0,qe.tryRegisterProvider)(g,Ae())},"registerObjectProvider");var M=require("@ez4/storage/library");var F=require("@ez4/stateful"),Ke=require("@ez4/aws-function");var He=require("@ez4/aws-identity");var W=o(t=>`arn:aws:s3:::${t}`,"buildBucketArn"),Z=o(t=>(0,He.createPolicyDocument)(
|
|
102
102
|
[{resourceIds:[`arn:aws:s3:::${t}-*`,`arn:aws:s3:::${t}-*/*`],permissions:["s3:L\
|
|
103
103
|
istBucket","s3:PutObject","s3:GetObject","s3:DeleteObject"]}]),"getPolicyDocumen\
|
|
104
|
-
t");var J=o((t,e,r)=>{let n=r.bucketName,s=H(n),c=(0,F.attachEntry)(t,{type:
|
|
104
|
+
t");var J=o((t,e,r)=>{let n=r.bucketName,s=H(n),c=(0,F.attachEntry)(t,{type:y,entryId:s,
|
|
105
105
|
dependencies:[],parameters:r});return e&&((0,Ke.createPermission)(t,c,e,{fromService:r.
|
|
106
106
|
bucketName,getPermission:o(()=>({principal:"s3.amazonaws.com",sourceArn:W(n)}),"\
|
|
107
107
|
getPermission")}),(0,F.linkEntryDependency)(t,c.entryId,e.entryId)),c},"createBu\
|
|
@@ -110,52 +110,53 @@ et=require("@ez4/aws-logs");var Ze=require("@ez4/aws-function");var Ue=require("
|
|
|
110
110
|
Ve=require("@ez4/aws-common");var We=o(async(t,e)=>{let{handler:r,listener:n,context:s,debug:c}=t,i=(0,Ge.getDefinitionsObject)(
|
|
111
111
|
e);return(0,Ve.getFunctionBundle)(_e.MappingServiceName,{templateFile:(0,Ue.join)(
|
|
112
112
|
__dirname,"../lib/event.ts"),define:i,filePrefix:"s3",handler:r,listener:n,context:s,
|
|
113
|
-
debug:c})},"bundleBucketEventFunction");var Q=o((t,e,r,n)=>{let{handler:s}=n;return(0,Ze.createFunction)(t,e,
|
|
114
|
-
s3EntryPoint",sourceFile:s.sourceFile,functionName:n.functionName,
|
|
115
|
-
description
|
|
116
|
-
tags
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
0,
|
|
122
|
-
|
|
113
|
+
debug:c})},"bundleBucketEventFunction");var Q=o((t,e,r,n)=>{let{handler:s,variables:c}=n;return(0,Ze.createFunction)(t,e,
|
|
114
|
+
r,{handlerName:"s3EntryPoint",sourceFile:s.sourceFile,functionName:n.functionName,
|
|
115
|
+
description:n.description,timeout:n.timeout,memory:n.memory,debug:n.debug,tags:n.
|
|
116
|
+
tags,getFunctionVariables:o(()=>c.reduce((i,u)=>({...i,...u}),{}),"getFunctionVa\
|
|
117
|
+
riables"),getFunctionFiles:o(()=>[s.sourceFile,s.dependencies],"getFunctionFiles"),
|
|
118
|
+
getFunctionBundle:o(i=>We(n,[...i.getDependencies(),...i.getConnections()]),"get\
|
|
119
|
+
FunctionBundle"),getFunctionHash:o(()=>{},"getFunctionHash")})},"createBucketEve\
|
|
120
|
+
ntFunction");var I=require("@ez4/project/library"),Je=require("@ez4/aws-common"),A=require("@ez4/utils");var Qe=o(async(t,e)=>{if(t.globalName)return(0,I.getServiceName)(t.globalName,e);
|
|
121
|
+
let r=(0,I.getServiceName)(t,e),n=await(0,Je.getRandomName)(16);return`${r.substring(
|
|
122
|
+
0,46)}-${n}`},"getBucketName"),X=o((t,e)=>`${(0,A.toKebabCase)(t.name)}-${(0,A.toKebabCase)(
|
|
123
|
+
e)}`,"getInternalName"),Xe=o((t,e,r)=>`${(0,I.getServiceName)(t,r)}-${(0,A.toKebabCase)(
|
|
123
124
|
e)}`,"getFunctionName");var j=class extends Error{static{o(this,"RoleMissingError")}constructor(){super(
|
|
124
125
|
"Execution role for S3 is missing.")}};var O;(n=>(n.LogRetention=90,n.Timeout=90,n.Memory=192))(O||={});var tt=o((t,e,r,n)=>{if(!e.events)return;if(!n.role||!(0,Y.isRoleState)(n.role))
|
|
125
|
-
throw new j;let{handler:s,listener:c,logRetention:i,timeout:
|
|
126
|
+
throw new j;let{handler:s,listener:c,logRetention:i,timeout:u,memory:v,variables:E}=e.
|
|
126
127
|
events,T=X(e,s.name),d=(0,L.tryGetFunctionState)(n,T,r);if(d)return d;let ee=Xe(
|
|
127
128
|
e,s.name,r),wt=n.getDependencyFiles(s.file),vt=(0,et.createLogGroup)(t,{retention:i??
|
|
128
129
|
O.LogRetention,groupName:ee,tags:r.tags});return d=Q(t,n.role,vt,{functionName:ee,
|
|
129
|
-
description:s.description,timeout:
|
|
130
|
-
debug:r.debug,tags:r.tags,
|
|
131
|
-
module,dependencies:wt},listener:c&&{functionName:c.
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
s,{withFileTypes:!0,recursive:!0});for(let i of c){if(!i.isFile())continue;let
|
|
137
|
-
i.parentPath,i.name);(0,nt.createBucketObject)(t,e,{objectKey:(0,w.relative)(s,
|
|
138
|
-
filePath:(0,w.relative)(n,
|
|
139
|
-
|
|
140
|
-
|
|
130
|
+
description:s.description,timeout:u??O.Timeout,memory:v??O.Memory,context:e.context,
|
|
131
|
+
debug:r.debug,tags:r.tags,variables:[r.variables,e.variables,E],handler:{sourceFile:s.
|
|
132
|
+
file,functionName:s.name,module:s.module,dependencies:wt},listener:c&&{functionName:c.
|
|
133
|
+
name,sourceFile:c.file,module:c.module}}),n.setServiceState(d,T,r),d},"prepareEv\
|
|
134
|
+
ents"),rt=o((t,e,r,n)=>{if(!e.events)return;if(!n.role||!(0,Y.isRoleState)(n.role))
|
|
135
|
+
throw new j;let{handler:s}=e.events,c=X(e,s.name),i=(0,L.getFunctionState)(n,c,r);
|
|
136
|
+
(0,Ye.linkServiceContext)(t,i.entryId,e.context)},"connectEvents");var ot=require("node:fs/promises"),w=require("node:path"),nt=require("@ez4/aws-bucket");var st=o(async(t,e,r)=>{let n=process.cwd(),s=(0,w.join)(n,r),c=await(0,ot.readdir)(
|
|
137
|
+
s,{withFileTypes:!0,recursive:!0});for(let i of c){if(!i.isFile())continue;let u=(0,w.join)(
|
|
138
|
+
i.parentPath,i.name);(0,nt.createBucketObject)(t,e,{objectKey:(0,w.relative)(s,u),
|
|
139
|
+
filePath:(0,w.relative)(n,u)})}},"prepareLocalContent");var ct=o((t,e,r)=>{let n=K(t,e.name,r),s=n.entryId;return{module:"Client",from:"\
|
|
140
|
+
@ez4/aws-bucket/client",constructor:`@{EZ4_MODULE_IMPORT}.make('${n.parameters.bucketName}\
|
|
141
|
+
')`,connectionIds:[s],dependencyIds:[s]}},"prepareLinkedClient");var at=o(t=>{let{service:e,options:r,context:n}=t;return(0,M.isBucketService)(e)?
|
|
141
142
|
ct(n,e,r):null},"prepareLinkedServices"),it=o(async t=>{let{state:e,service:r,options:n,
|
|
142
|
-
context:s}=t;if(!(0,
|
|
143
|
-
events:
|
|
143
|
+
context:s}=t;if(!(0,M.isBucketService)(r))return!1;let{localPath:c,autoExpireDays:i,
|
|
144
|
+
events:u,cors:v}=r,E=await Qe(r,n),T=tt(e,r,n,s),d=J(e,T,{eventsPath:u?.path,tags:n.
|
|
144
145
|
tags,bucketName:E,autoExpireDays:i,localPath:c,cors:v});return s.setServiceState(
|
|
145
146
|
d,r,n),c&&await st(e,d,c),!0},"prepareBucketServices"),pt=o(t=>{let{state:e,service:r,
|
|
146
|
-
options:n,context:s}=t;(0,
|
|
147
|
-
ices");var mt=require("@ez4/storage/library"),
|
|
148
|
-
let s=(0,ut.getServiceName)("",n),c=`${s}-bucket-policy`;return(0,
|
|
149
|
-
e,c)??(0,
|
|
147
|
+
options:n,context:s}=t;(0,M.isBucketService)(r)&&rt(e,r,n,s)},"connectBucketServ\
|
|
148
|
+
ices");var mt=require("@ez4/storage/library"),q=require("@ez4/aws-identity"),ut=require("@ez4/project/library");var lt=o(t=>{let{state:e,serviceType:r,options:n}=t;if(r!==mt.ServiceType)return null;
|
|
149
|
+
let s=(0,ut.getServiceName)("",n),c=`${s}-bucket-policy`;return(0,q.tryGetPolicy)(
|
|
150
|
+
e,c)??(0,q.createPolicy)(e,{tags:n.tags,policyDocument:Z(s),policyName:c})},"pre\
|
|
150
151
|
pareExecutionPolicy");var Qt=o(()=>{(0,yt.registerTriggers)(),(0,ft.registerTriggers)(),(0,gt.registerTriggers)(),
|
|
151
152
|
(0,dt.registerTriggers)(),(0,St.tryCreateTrigger)("@ez4/aws-bucket",{"deploy:pre\
|
|
152
153
|
pareExecutionPolicy":lt,"deploy:prepareLinkedService":at,"deploy:prepareResource\
|
|
153
154
|
s":it,"deploy:connectResources":pt}),be(),Oe(),$e()},"registerTriggers");var kt=require("@ez4/aws-identity");var Xt=o(t=>/(.+)\.s3\.(.+)\.amazonaws\.com/i.test(t),"isBucketDomain"),Yt=o(async t=>{
|
|
154
155
|
let e=await(0,kt.getRegion)();return`${t}.s3.${e}.amazonaws.com`},"getBucketDoma\
|
|
155
|
-
in");var bt=require("@ez4/stateful"),
|
|
156
|
+
in");var bt=require("@ez4/stateful"),Pt=require("@ez4/utils");var er=o((t,e,r,n)=>{let s=(0,Pt.hashData)(S,e.entryId,r.entryId);return(0,bt.attachEntry)(
|
|
156
157
|
t,{type:S,entryId:s,dependencies:[e.entryId,r.entryId],parameters:n})},"createBu\
|
|
157
|
-
cketPolicy");var tr=o(t=>t.type===S,"isBucketPolicyState");var
|
|
158
|
-
t,{type:
|
|
158
|
+
cketPolicy");var tr=o(t=>t.type===S,"isBucketPolicyState");var xt=require("@ez4/stateful"),Bt=require("@ez4/utils");var rr=o((t,e,r)=>{let n=r.objectKey,s=(0,Bt.hashData)(g,e.entryId,n);return(0,xt.attachEntry)(
|
|
159
|
+
t,{type:g,entryId:s,dependencies:[e.entryId],parameters:r})},"createBucketObject");0&&(module.exports={BucketServiceName,BucketServiceType,ObjectServiceName,ObjectServiceType,
|
|
159
160
|
PolicyServiceName,PolicyServiceType,buildBucketArn,createBucket,createBucketEventFunction,
|
|
160
161
|
createBucketObject,createBucketPolicy,createBucketStateId,getBucketDomain,getBucketName,
|
|
161
162
|
getBucketObjectFiles,getBucketObjectPath,getBucketState,getPolicyDocument,isBucketDomain,
|
package/dist/main.mjs
CHANGED
|
@@ -1,28 +1,28 @@
|
|
|
1
1
|
var Fe=Object.defineProperty;var o=(t,e)=>Fe(t,"name",{value:e,configurable:!0});import{registerTriggers as or}from"@ez4/aws-common";import{registerTriggers as nr}from"@ez4/aws-identity";
|
|
2
2
|
import{registerTriggers as sr}from"@ez4/aws-function";import{registerTriggers as cr}from"@ez4/storage/library";
|
|
3
3
|
import{tryCreateTrigger as ar}from"@ez4/project/library";import{tryRegisterProvider as tt}from"@ez4/aws-common";import{ReplaceResourceError as We}from"@ez4/aws-common";import{tryGetFunctionArn as _}from"@ez4/aws-function";
|
|
4
|
-
import{deepCompare as Ze,deepEqual as C}from"@ez4/utils";import{getTagList as
|
|
5
|
-
ListObjectsV2Command as Le,CreateBucketCommand as
|
|
4
|
+
import{deepCompare as Ze,deepEqual as C}from"@ez4/utils";import{getTagList as Ie,Logger as m}from"@ez4/aws-common";import{S3Client as Ae,
|
|
5
|
+
ListObjectsV2Command as Le,CreateBucketCommand as Me,DeleteBucketCommand as qe,PutBucketTaggingCommand as $e,
|
|
6
6
|
PutBucketCorsCommand as He,DeleteBucketCorsCommand as Ke,PutBucketLifecycleConfigurationCommand as Ue,
|
|
7
7
|
DeleteBucketLifecycleCommand as Ge,PutBucketNotificationConfigurationCommand as _e,
|
|
8
|
-
ExpirationStatus as Ve,NoSuchBucket as w}from"@aws-sdk/client-s3";var i="AWS:S3/Bucket",y="aws:s3.bucket";var
|
|
8
|
+
ExpirationStatus as Ve,NoSuchBucket as w}from"@aws-sdk/client-s3";var i="AWS:S3/Bucket",y="aws:s3.bucket";var u=new Ae({}),A=o(async t=>{m.logFetch(i,t);try{return!(await u.send(new Le({
|
|
9
9
|
Bucket:t,MaxKeys:1}))).Contents?.length}catch(e){if(!(e instanceof w))throw e;return 0}},
|
|
10
|
-
"isBucketEmpty"),L=o(async t=>{let{bucketName:e}=t;return
|
|
11
|
-
send(new
|
|
12
|
-
i,t);try{return await
|
|
13
|
-
throw e;return!1}},"deleteBucket"),
|
|
14
|
-
{Bucket:t,Tagging:{TagSet:
|
|
15
|
-
|
|
10
|
+
"isBucketEmpty"),L=o(async t=>{let{bucketName:e}=t;return m.logCreate(i,e),await u.
|
|
11
|
+
send(new Me({Bucket:e})),{bucketName:e}},"createBucket"),M=o(async t=>{m.logDelete(
|
|
12
|
+
i,t);try{return await u.send(new qe({Bucket:t})),!0}catch(e){if(!(e instanceof w))
|
|
13
|
+
throw e;return!1}},"deleteBucket"),q=o(async(t,e)=>{m.logTag(i,t),await u.send(new $e(
|
|
14
|
+
{Bucket:t,Tagging:{TagSet:Ie({...e,ManagedBy:"EZ4"})}}))},"tagBucket"),$=o(async(t,e)=>{
|
|
15
|
+
m.logUpdate(i,`${t} CORS`),await u.send(new He({Bucket:t,CORSConfiguration:{CORSRules:[
|
|
16
16
|
{ID:"ID0",AllowedOrigins:e.allowOrigins,AllowedMethods:e.allowMethods,AllowedHeaders:e.
|
|
17
17
|
allowHeaders,ExposeHeaders:e.exposeHeaders,MaxAgeSeconds:e.maxAge}]}}))},"update\
|
|
18
|
-
CorsConfiguration"),H=o(async t=>{
|
|
18
|
+
CorsConfiguration"),H=o(async t=>{m.logDelete(i,`${t} CORS`);try{return await u.
|
|
19
19
|
send(new Ke({Bucket:t})),!0}catch(e){if(!(e instanceof w))throw e;return!1}},"de\
|
|
20
|
-
leteCorsConfiguration"),K=o(async(t,e)=>{
|
|
20
|
+
leteCorsConfiguration"),K=o(async(t,e)=>{m.logCreate(i,`${t} lifecycle`),await u.
|
|
21
21
|
send(new Ue({Bucket:t,LifecycleConfiguration:{Rules:[{ID:"ID0",Status:Ve.Enabled,
|
|
22
22
|
Filter:{Prefix:"*"},Expiration:{Days:e}}]}}))},"createLifecycle"),U=o(async t=>{
|
|
23
|
-
|
|
24
|
-
if(!(e instanceof w))throw e;return!1}},"deleteLifecycle"),G=o(async(t,e)=>{
|
|
25
|
-
i,`${t} events`);let{functionArn:r,eventsPath:n,eventsType:s}=e;await
|
|
23
|
+
m.logDelete(i,`${t} lifecycle`);try{return await u.send(new Ge({Bucket:t})),!0}catch(e){
|
|
24
|
+
if(!(e instanceof w))throw e;return!1}},"deleteLifecycle"),G=o(async(t,e)=>{m.logUpdate(
|
|
25
|
+
i,`${t} events`);let{functionArn:r,eventsPath:n,eventsType:s}=e;await u.send(new _e(
|
|
26
26
|
{Bucket:t,SkipDestinationValidation:!0,NotificationConfiguration:{...r&&{LambdaFunctionConfigurations:[
|
|
27
27
|
{Id:"ID0",LambdaFunctionArn:r,Events:s,...n&&{Filter:{Key:{FilterRules:[{Name:"p\
|
|
28
28
|
refix",Value:n}]}}}}]}}}))},"updateEventNotifications");var V=o(()=>({equals:Je,create:W,replace:Xe,preview:Qe,update:Ye,delete:et}),"ge\
|
|
@@ -34,16 +34,16 @@ i,t.entryId,e.entryId);return W(t,r)},"replaceResource"),W=o(async(t,e)=>{let r=
|
|
|
34
34
|
parameters,n=_(e),{bucketName:s}=await L(r);await Z(s,r,void 0),await J(s,r,void 0),
|
|
35
35
|
await Q(s,r.tags,void 0);let c={eventsPath:r.eventsPath,functionArn:n};return await X(
|
|
36
36
|
s,c,{}),{bucketName:s,functionArn:n}},"createResource"),Ye=o(async(t,e,r)=>{let{
|
|
37
|
-
result:n,parameters:s}=t;if(!n)return;let c=n.bucketName,a=_(r),
|
|
37
|
+
result:n,parameters:s}=t;if(!n)return;let c=n.bucketName,a=_(r),p=e.result?.functionArn;
|
|
38
38
|
await Z(c,s,e.parameters),await J(c,s,e.parameters),await Q(c,s.tags,e.parameters.
|
|
39
39
|
tags);let k={eventsPath:s.eventsPath,functionArn:a},b={eventsPath:e.parameters.eventsPath,
|
|
40
|
-
functionArn:
|
|
41
|
-
async t=>{let e=t.result;e&&await
|
|
40
|
+
functionArn:p};return await X(c,k,b),{...n,functionArn:a}},"updateResource"),et=o(
|
|
41
|
+
async t=>{let e=t.result;e&&await A(e.bucketName)&&await M(e.bucketName)},"delet\
|
|
42
42
|
eResource"),Z=o(async(t,e,r)=>{if(!(e.cors&&r?.cors&&C(e.cors,r.cors))){if(e.cors)
|
|
43
43
|
return $(t,e.cors);if(r?.cors)return H(t)}},"checkCorsUpdates"),J=o(async(t,e,r)=>{
|
|
44
44
|
if(e.autoExpireDays!==r?.autoExpireDays){if(e.autoExpireDays)return K(t,e.autoExpireDays);
|
|
45
45
|
if(r?.autoExpireDays)return U(t)}},"checkLifecycleUpdates"),Q=o(async(t,e,r)=>{let n=e??
|
|
46
|
-
{};!C(n,r??{})&&await
|
|
46
|
+
{};!C(n,r??{})&&await q(t,n)},"checkTagUpdates"),X=o(async(t,e,r)=>{!C(e,r)&&await G(
|
|
47
47
|
t,{eventsType:["s3:ObjectCreated:*","s3:ObjectRemoved:*"],...e})},"checkEventUpd\
|
|
48
48
|
ates");var Y=o(()=>{tt(y,V())},"registerBucketProvider");import{tryRegisterProvider as St}from"@ez4/aws-common";import{ReplaceResourceError as mt}from"@ez4/aws-common";import{deepCompare as ut}from"@ez4/utils";import{IncompleteResourceError as rt}from"@ez4/aws-common";import{hashData as ot,
|
|
49
49
|
toKebabCase as nt}from"@ez4/utils";var v=class extends Error{static{o(this,"BucketNotFoundError")}constructor(e){super(
|
|
@@ -63,15 +63,15 @@ if(e.result)throw new mt(S,t.entryId,e.entryId);return ae(t,r)},"replaceResource
|
|
|
63
63
|
ae=o(async(t,e)=>{let r=t.parameters,n=E(S,"policy",e),s=await r.getRole(e);return await ne(
|
|
64
64
|
{bucketName:n,role:s}),{bucketName:n}},"createResource"),gt=o(async()=>{},"updat\
|
|
65
65
|
eResource"),dt=o(async t=>{let e=t.result;e&&await se(e.bucketName)},"deleteReso\
|
|
66
|
-
urce");var ie=o(()=>{St(g,ce())},"registerPolicyProvider");import{tryRegisterProvider as
|
|
67
|
-
import{deepCompare as ht,deepEqual as jt}from"@ez4/utils";import{createReadStream as kt}from"node:fs";import{S3Client as bt,PutObjectCommand as
|
|
68
|
-
PutObjectTaggingCommand as
|
|
66
|
+
urce");var ie=o(()=>{St(g,ce())},"registerPolicyProvider");import{tryRegisterProvider as It}from"@ez4/aws-common";import{stat as Rt}from"node:fs/promises";import{ReplaceResourceError as Ct}from"@ez4/aws-common";
|
|
67
|
+
import{deepCompare as ht,deepEqual as jt}from"@ez4/utils";import{createReadStream as kt}from"node:fs";import{S3Client as bt,PutObjectCommand as Pt,
|
|
68
|
+
PutObjectTaggingCommand as xt,DeleteObjectCommand as Bt,NoSuchBucket as wt}from"@aws-sdk/client-s3";
|
|
69
69
|
import{getTagList as vt,Logger as h}from"@ez4/aws-common";import Et from"mime";var d="AWS:S3/Object",f="aws:s3.object";var co=o(t=>t.type===f,"isBucketObjectState"),R=o((t,e)=>`${t}/${e}`,"getBucketO\
|
|
70
70
|
bjectPath"),ao=o(t=>t.getDependencies(f).map(({result:r,parameters:n})=>({lastModified:r?.
|
|
71
71
|
lastModified,objectKey:n.objectKey})),"getBucketObjectFiles");var j=new bt({}),O=o(async(t,e)=>{let{objectKey:r,filePath:n}=e;h.logCreate(d,R(
|
|
72
|
-
t,r));let s=Et.getType(n);return await j.send(new
|
|
72
|
+
t,r));let s=Et.getType(n);return await j.send(new Pt({Bucket:t,Key:r,Body:kt(n),
|
|
73
73
|
...s&&{ContentType:s}})),{objectKey:r}},"putObject"),pe=o(async(t,e,r)=>{h.logTag(
|
|
74
|
-
d,R(t,e)),await j.send(new
|
|
74
|
+
d,R(t,e)),await j.send(new xt({Bucket:t,Key:e,Tagging:{TagSet:vt({...r,ManagedBy:"\
|
|
75
75
|
EZ4"})}}))},"tagObject"),me=o(async(t,e)=>{h.logDelete(d,R(t,e));try{return await j.
|
|
76
76
|
send(new Bt({Bucket:t,Key:e})),!0}catch(r){if(!(r instanceof wt))throw r;return!1}},
|
|
77
77
|
"deleteObject");var ue=o(()=>({equals:Ot,create:le,replace:Nt,preview:Tt,update:Dt,delete:zt}),"\
|
|
@@ -91,44 +91,45 @@ getTime()},"getLastModifiedTime"),Ft=o(async(t,e,r)=>{let n=await T(e.filePath);
|
|
|
91
91
|
if(n<=t.lastModified&&e.filePath===r.filePath)return t;let{bucketName:s}=t,{objectKey:c}=r;
|
|
92
92
|
return await O(s,{...e,objectKey:c}),{lastModified:n,bucketName:s}},"checkObject\
|
|
93
93
|
Updates"),ye=o(async(t,e,r,n)=>{let s=r??{};!jt(s,n??{})&&await pe(t,e,s)},"chec\
|
|
94
|
-
kTagUpdates");var fe=o(()=>{
|
|
94
|
+
kTagUpdates");var fe=o(()=>{It(f,ue())},"registerObjectProvider");import{isBucketService as F}from"@ez4/storage/library";import{attachEntry as Lt,linkEntryDependency as Mt}from"@ez4/stateful";import{createPermission as qt}from"@ez4/aws-function";import{createPolicyDocument as At}from"@ez4/aws-identity";var ge=o(t=>`arn:aws:s3:::${t}`,"buildBucketArn"),de=o(t=>At([{resourceIds:[`arn\
|
|
95
95
|
:aws:s3:::${t}-*`,`arn:aws:s3:::${t}-*/*`],permissions:["s3:ListBucket","s3:PutO\
|
|
96
96
|
bject","s3:GetObject","s3:DeleteObject"]}]),"getPolicyDocument");var Se=o((t,e,r)=>{let n=r.bucketName,s=ee(n),c=Lt(t,{type:y,entryId:s,dependencies:[],
|
|
97
|
-
parameters:r});return e&&(
|
|
98
|
-
principal:"s3.amazonaws.com",sourceArn:ge(n)}),"getPermission")}),
|
|
97
|
+
parameters:r});return e&&(qt(t,c,e,{fromService:r.bucketName,getPermission:o(()=>({
|
|
98
|
+
principal:"s3.amazonaws.com",sourceArn:ge(n)}),"getPermission")}),Mt(t,c.entryId,
|
|
99
99
|
e.entryId)),c},"createBucket");import{getFunctionState as Vt,tryGetFunctionState as Wt}from"@ez4/aws-function";
|
|
100
100
|
import{linkServiceContext as Zt}from"@ez4/project/library";import{isRoleState as Be}from"@ez4/aws-identity";
|
|
101
101
|
import{createLogGroup as Jt}from"@ez4/aws-logs";import{createFunction as Gt}from"@ez4/aws-function";import{join as $t}from"node:path";import{getDefinitionsObject as Ht}from"@ez4/project/library";
|
|
102
102
|
import{MappingServiceName as Kt}from"@ez4/aws-function";import{getFunctionBundle as Ut}from"@ez4/aws-common";var ke=o(async(t,e)=>{let{handler:r,listener:n,context:s,debug:c}=t,a=Ht(e);return Ut(
|
|
103
103
|
Kt,{templateFile:$t(import.meta.dirname,"../lib/event.ts"),define:a,filePrefix:"\
|
|
104
|
-
s3",handler:r,listener:n,context:s,debug:c})},"bundleBucketEventFunction");var be=o((t,e,r,n)=>{let{handler:s}=n;return Gt(t,e,r,{handlerName:"
|
|
105
|
-
sourceFile:s.sourceFile,functionName:n.functionName,description:n.
|
|
106
|
-
|
|
107
|
-
()=>
|
|
108
|
-
|
|
104
|
+
s3",handler:r,listener:n,context:s,debug:c})},"bundleBucketEventFunction");var be=o((t,e,r,n)=>{let{handler:s,variables:c}=n;return Gt(t,e,r,{handlerName:"\
|
|
105
|
+
s3EntryPoint",sourceFile:s.sourceFile,functionName:n.functionName,description:n.
|
|
106
|
+
description,timeout:n.timeout,memory:n.memory,debug:n.debug,tags:n.tags,getFunctionVariables:o(
|
|
107
|
+
()=>c.reduce((a,p)=>({...a,...p}),{}),"getFunctionVariables"),getFunctionFiles:o(
|
|
108
|
+
()=>[s.sourceFile,s.dependencies],"getFunctionFiles"),getFunctionBundle:o(a=>ke(
|
|
109
|
+
n,[...a.getDependencies(),...a.getConnections()]),"getFunctionBundle"),getFunctionHash:o(
|
|
109
110
|
()=>{},"getFunctionHash")})},"createBucketEventFunction");import{getServiceName as N}from"@ez4/project/library";import{getRandomName as _t}from"@ez4/aws-common";
|
|
110
|
-
import{toKebabCase as D}from"@ez4/utils";var
|
|
111
|
+
import{toKebabCase as D}from"@ez4/utils";var Pe=o(async(t,e)=>{if(t.globalName)return N(t.globalName,e);let r=N(t,e),n=await _t(
|
|
111
112
|
16);return`${r.substring(0,46)}-${n}`},"getBucketName"),z=o((t,e)=>`${D(t.name)}\
|
|
112
|
-
-${D(e)}`,"getInternalName"),
|
|
113
|
-
"Execution role for S3 is missing.")}};var
|
|
114
|
-
handler:s,listener:c,logRetention:a,timeout:
|
|
115
|
-
e,s.name),l=Wt(n,B,r);if(l)return l;let
|
|
116
|
-
s.file),ze=Jt(t,{retention:a??
|
|
117
|
-
be(t,n.role,ze,{functionName:
|
|
118
|
-
|
|
119
|
-
functionName:s.name,module:s.module,dependencies:De},
|
|
120
|
-
name,sourceFile:c.file,module:c.module},
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
113
|
+
-${D(e)}`,"getInternalName"),xe=o((t,e,r)=>`${N(t,r)}-${D(e)}`,"getFunctionName");var P=class extends Error{static{o(this,"RoleMissingError")}constructor(){super(
|
|
114
|
+
"Execution role for S3 is missing.")}};var x;(n=>(n.LogRetention=90,n.Timeout=90,n.Memory=192))(x||={});var we=o((t,e,r,n)=>{if(!e.events)return;if(!n.role||!Be(n.role))throw new P;let{
|
|
115
|
+
handler:s,listener:c,logRetention:a,timeout:p,memory:k,variables:b}=e.events,B=z(
|
|
116
|
+
e,s.name),l=Wt(n,B,r);if(l)return l;let I=xe(e,s.name,r),De=n.getDependencyFiles(
|
|
117
|
+
s.file),ze=Jt(t,{retention:a??x.LogRetention,groupName:I,tags:r.tags});return l=
|
|
118
|
+
be(t,n.role,ze,{functionName:I,description:s.description,timeout:p??x.Timeout,memory:k??
|
|
119
|
+
x.Memory,context:e.context,debug:r.debug,tags:r.tags,variables:[r.variables,e.variables,
|
|
120
|
+
b],handler:{sourceFile:s.file,functionName:s.name,module:s.module,dependencies:De},
|
|
121
|
+
listener:c&&{functionName:c.name,sourceFile:c.file,module:c.module}}),n.setServiceState(
|
|
122
|
+
l,B,r),l},"prepareEvents"),ve=o((t,e,r,n)=>{if(!e.events)return;if(!n.role||!Be(
|
|
123
|
+
n.role))throw new P;let{handler:s}=e.events,c=z(e,s.name),a=Vt(n,c,r);Zt(t,a.entryId,
|
|
124
|
+
e.context)},"connectEvents");import{readdir as Qt}from"node:fs/promises";import{join as Ee,relative as Re}from"node:path";
|
|
124
125
|
import{createBucketObject as Xt}from"@ez4/aws-bucket";var Ce=o(async(t,e,r)=>{let n=process.cwd(),s=Ee(n,r),c=await Qt(s,{withFileTypes:!0,
|
|
125
|
-
recursive:!0});for(let a of c){if(!a.isFile())continue;let
|
|
126
|
-
Xt(t,e,{objectKey:Re(s,
|
|
127
|
-
|
|
128
|
-
|
|
126
|
+
recursive:!0});for(let a of c){if(!a.isFile())continue;let p=Ee(a.parentPath,a.name);
|
|
127
|
+
Xt(t,e,{objectKey:Re(s,p),filePath:Re(n,p)})}},"prepareLocalContent");var he=o((t,e,r)=>{let n=te(t,e.name,r),s=n.entryId;return{module:"Client",from:"\
|
|
128
|
+
@ez4/aws-bucket/client",constructor:`@{EZ4_MODULE_IMPORT}.make('${n.parameters.bucketName}\
|
|
129
|
+
')`,connectionIds:[s],dependencyIds:[s]}},"prepareLinkedClient");var je=o(t=>{let{service:e,options:r,context:n}=t;return F(e)?he(n,e,r):null},"p\
|
|
129
130
|
repareLinkedServices"),Oe=o(async t=>{let{state:e,service:r,options:n,context:s}=t;
|
|
130
|
-
if(!F(r))return!1;let{localPath:c,autoExpireDays:a,events:
|
|
131
|
-
r,n),B=we(e,r,n,s),l=Se(e,B,{eventsPath:
|
|
131
|
+
if(!F(r))return!1;let{localPath:c,autoExpireDays:a,events:p,cors:k}=r,b=await Pe(
|
|
132
|
+
r,n),B=we(e,r,n,s),l=Se(e,B,{eventsPath:p?.path,tags:n.tags,bucketName:b,autoExpireDays:a,
|
|
132
133
|
localPath:c,cors:k});return s.setServiceState(l,r,n),c&&await Ce(e,l,c),!0},"pre\
|
|
133
134
|
pareBucketServices"),Te=o(t=>{let{state:e,service:r,options:n,context:s}=t;F(r)&&
|
|
134
135
|
ve(e,r,n,s)},"connectBucketServices");import{ServiceType as Yt}from"@ez4/storage/library";import{createPolicy as er,tryGetPolicy as tr}from"@ez4/aws-identity";
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ez4/aws-bucket",
|
|
3
3
|
"description": "EZ4: Self-managed AWS S3 bucket provider",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.37.0",
|
|
5
5
|
"author": "Silas B.",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"type": "module",
|
|
@@ -53,14 +53,14 @@
|
|
|
53
53
|
"dependencies": {
|
|
54
54
|
"@aws-sdk/client-s3": "^3.913.0",
|
|
55
55
|
"@aws-sdk/s3-request-presigner": "^3.913.0",
|
|
56
|
-
"@ez4/aws-common": "^0.
|
|
57
|
-
"@ez4/aws-function": "^0.
|
|
58
|
-
"@ez4/aws-identity": "^0.
|
|
59
|
-
"@ez4/aws-logs": "^0.
|
|
60
|
-
"@ez4/project": "^0.
|
|
61
|
-
"@ez4/stateful": "^0.
|
|
62
|
-
"@ez4/storage": "^0.
|
|
63
|
-
"@ez4/utils": "^0.
|
|
56
|
+
"@ez4/aws-common": "^0.37.0",
|
|
57
|
+
"@ez4/aws-function": "^0.37.0",
|
|
58
|
+
"@ez4/aws-identity": "^0.37.0",
|
|
59
|
+
"@ez4/aws-logs": "^0.37.0",
|
|
60
|
+
"@ez4/project": "^0.37.0",
|
|
61
|
+
"@ez4/stateful": "^0.37.0",
|
|
62
|
+
"@ez4/storage": "^0.37.0",
|
|
63
|
+
"@ez4/utils": "^0.37.0",
|
|
64
64
|
"mime": "^3.0.0"
|
|
65
65
|
}
|
|
66
66
|
}
|