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