@ez4/aws-bucket 0.18.0 → 0.20.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 +6 -3
- package/dist/main.cjs +33 -32
- package/dist/main.mjs +29 -26
- package/package.json +9 -9
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import type { FunctionParameters } from '@ez4/aws-function';
|
|
2
2
|
import type { ExtraSource } from '@ez4/project/library';
|
|
3
|
-
export type
|
|
3
|
+
export type BucketEventFunction = {
|
|
4
4
|
functionName: string;
|
|
5
5
|
sourceFile: string;
|
|
6
6
|
};
|
|
7
|
-
export type
|
|
7
|
+
export type BucketEventEntryPoint = BucketEventFunction & {
|
|
8
|
+
dependencies: string[];
|
|
9
|
+
};
|
|
10
|
+
export type BucketEventFunctionParameters = Omit<FunctionParameters, 'getFunctionBundle' | 'getFunctionFiles' | 'sourceFile' | 'handlerName'> & {
|
|
8
11
|
handler: BucketEventEntryPoint;
|
|
9
|
-
listener?:
|
|
12
|
+
listener?: BucketEventFunction;
|
|
10
13
|
extras?: Record<string, ExtraSource>;
|
|
11
14
|
debug?: boolean;
|
|
12
15
|
};
|
package/dist/main.cjs
CHANGED
|
@@ -30,18 +30,18 @@ p.Logger.logUpdate(i,`${t} event notifications`);let{functionArn:r,eventsPath:o,
|
|
|
30
30
|
eventsType:n}=e;await l.send(new c.PutBucketNotificationConfigurationCommand({Bucket:t,
|
|
31
31
|
SkipDestinationValidation:!0,NotificationConfiguration:{...r&&{LambdaFunctionConfigurations:[
|
|
32
32
|
{Id:"ID0",LambdaFunctionArn:r,Events:n,...o&&{Filter:{Key:{FilterRules:[{Name:"p\
|
|
33
|
-
refix",Value:o}]}}}}]}}}))};var ue=()=>({equals:Nt,create:le,replace:zt,preview:Dt,update:
|
|
33
|
+
refix",Value:o}]}}}}]}}}))};var ue=()=>({equals:Nt,create:le,replace:zt,preview:Dt,update:Ft,delete:At}),Nt=(t,e)=>!!t.
|
|
34
34
|
result&&t.result.bucketName===e.result?.bucketName,Dt=async(t,e)=>{let r={...t.parameters,
|
|
35
35
|
dependencies:t.dependencies},o={...e.parameters,dependencies:e.dependencies},n=(0,x.deepCompare)(
|
|
36
36
|
r,o);if(n.counts)return{...n,name:r.bucketName}},zt=async(t,e,r)=>{if(e.result)throw new me.ReplaceResourceError(
|
|
37
37
|
i,t.entryId,e.entryId);return le(t,r)},le=async(t,e)=>{let r=t.parameters,o=(0,M.tryGetFunctionArn)(
|
|
38
38
|
e),{bucketName:n}=await re(r);await ye(n,r,void 0),await fe(n,r,void 0),await ge(
|
|
39
39
|
n,r.tags,void 0);let s={eventsPath:r.eventsPath,functionArn:o};return await de(n,
|
|
40
|
-
s,{}),{bucketName:n,functionArn:o}},
|
|
40
|
+
s,{}),{bucketName:n,functionArn:o}},Ft=async(t,e,r)=>{let{result:o,parameters:n}=t;
|
|
41
41
|
if(!o)return;let s=o.bucketName,a=(0,M.tryGetFunctionArn)(r),f=e.result?.functionArn;
|
|
42
42
|
await ye(s,n,e.parameters),await fe(s,n,e.parameters),await ge(s,n.tags,e.parameters.
|
|
43
43
|
tags);let w={eventsPath:n.eventsPath,functionArn:a},v={eventsPath:e.parameters.eventsPath,
|
|
44
|
-
functionArn:f};return await de(s,w,v),{...o,functionArn:a}},
|
|
44
|
+
functionArn:f};return await de(s,w,v),{...o,functionArn:a}},At=async t=>{let e=t.
|
|
45
45
|
result;e&&await te(e.bucketName)&&await oe(e.bucketName)},ye=async(t,e,r)=>{if(!(e.
|
|
46
46
|
cors&&r?.cors&&(0,x.deepEqual)(e.cors,r.cors))){if(e.cors)return se(t,e.cors);if(r?.
|
|
47
47
|
cors)return ce(t)}},fe=async(t,e,r)=>{if(e.autoExpireDays!==r?.autoExpireDays){if(e.
|
|
@@ -56,14 +56,14 @@ Name");return o.bucketName};var S=require("@aws-sdk/client-s3"),K=require("@ez4/
|
|
|
56
56
|
logCreate(b,e),await Pe.send(new S.PutBucketPolicyCommand({Bucket:e,Policy:JSON.
|
|
57
57
|
stringify(r)})),{bucketName:e}},we=async t=>{K.Logger.logDelete(b,t);try{return await Pe.
|
|
58
58
|
send(new S.DeleteBucketPolicyCommand({Bucket:t})),!0}catch(e){if(!(e instanceof S.NoSuchBucket))
|
|
59
|
-
throw e;return!1}};var Re=()=>({equals:
|
|
59
|
+
throw e;return!1}};var Re=()=>({equals:It,create:Ce,replace:qt,preview:Lt,update:Mt,delete:$t}),It=(t,e)=>!!t.
|
|
60
60
|
result&&t.result.bucketName===e.result?.bucketName,Lt=async(t,e)=>{let r={...t.parameters,
|
|
61
61
|
dependencies:t.dependencies},o={...e.parameters,dependencies:e.dependencies},n=(0,Ee.deepCompare)(
|
|
62
62
|
r,o,{exclude:{getRole:!0}});if(n.counts)return{...n,name:r.fromService}},qt=async(t,e,r)=>{
|
|
63
63
|
if(e.result)throw new ve.ReplaceResourceError(b,t.entryId,e.entryId);return Ce(t,
|
|
64
64
|
r)},Ce=async(t,e)=>{let r=t.parameters,o=E(b,"policy",e),n=await r.getRole(e);return await Be(
|
|
65
65
|
{bucketName:o,role:n}),{bucketName:o}},Mt=async()=>{},$t=async t=>{let e=t.result;
|
|
66
|
-
e&&await we(e.bucketName)};var he=()=>{(0,je.registerProvider)(d,Re())};var qe=require("@ez4/aws-common");var ze=require("node:fs/promises"),
|
|
66
|
+
e&&await we(e.bucketName)};var he=()=>{(0,je.registerProvider)(d,Re())};var qe=require("@ez4/aws-common");var ze=require("node:fs/promises"),Fe=require("@ez4/aws-common"),D=require("@ez4/utils");var Oe=require("node:fs"),m=require("@aws-sdk/client-s3"),P=require("@ez4/aws-common"),
|
|
67
67
|
Te=Ot(require("mime"),1);var k="AWS:S3/Object",y="aws:s3.object";var Ht=t=>t.type===y,R=(t,e)=>`${t}/${e}`,Kt=t=>t.getDependencies(y).map(({result:r,
|
|
68
68
|
parameters:o})=>({lastModified:r?.lastModified,objectKey:o.objectKey}));var U=new m.S3Client({}),G=async(t,e)=>{let{objectKey:r,filePath:o}=e;P.Logger.logCreate(
|
|
69
69
|
k,R(t,r));let n=Te.default.getType(o);return await U.send(new m.PutObjectCommand(
|
|
@@ -71,12 +71,12 @@ k,R(t,r));let n=Te.default.getType(o);return await U.send(new m.PutObjectCommand
|
|
|
71
71
|
Ne=async(t,e,r)=>{P.Logger.logTag(k,R(t,e)),await U.send(new m.PutObjectTaggingCommand(
|
|
72
72
|
{Bucket:t,Key:e,Tagging:{TagSet:(0,P.getTagList)({...r,ManagedBy:"EZ4"})}}))},De=async(t,e)=>{
|
|
73
73
|
P.Logger.logDelete(k,R(t,e));try{return await U.send(new m.DeleteObjectCommand({
|
|
74
|
-
Bucket:t,Key:e})),!0}catch(r){if(!(r instanceof m.NoSuchBucket))throw r;return!1}};var
|
|
74
|
+
Bucket:t,Key:e})),!0}catch(r){if(!(r instanceof m.NoSuchBucket))throw r;return!1}};var Ae=()=>({equals:Ut,create:Ie,replace:_t,preview:Gt,update:Vt,delete:Wt}),Ut=(t,e)=>!!t.
|
|
75
75
|
result&&t.result.lastModified===e.result?.lastModified,Gt=async(t,e)=>{let r=t.parameters,
|
|
76
76
|
o=e.parameters,n=(0,D.deepCompare)({...r,dependencies:t.dependencies,lastModified:await _(
|
|
77
77
|
r.filePath)},{...o,dependencies:e.dependencies,lastModified:t.result?.lastModified});
|
|
78
|
-
if(n.counts)return{...n,name:r.objectKey}},_t=async(t,e,r)=>{if(e.result)throw new
|
|
79
|
-
k,t.entryId,e.entryId);return
|
|
78
|
+
if(n.counts)return{...n,name:r.objectKey}},_t=async(t,e,r)=>{if(e.result)throw new Fe.ReplaceResourceError(
|
|
79
|
+
k,t.entryId,e.entryId);return Ie(t,r)},Ie=async(t,e)=>{let r=t.parameters,o=E(k,
|
|
80
80
|
"bucket",e),n=await _(r.filePath),{objectKey:s}=await G(o,r);return await Le(o,s,
|
|
81
81
|
r.tags,t.parameters.tags),{lastModified:n,bucketName:o}},Vt=async(t,e)=>{let{result:r,
|
|
82
82
|
parameters:o}=t;if(!r)return;let{objectKey:n,tags:s}=o,a=Zt(r,o,e.parameters);return await Le(
|
|
@@ -85,34 +85,35 @@ e&&await De(e.bucketName,r.objectKey)},_=async t=>{let{mtime:e}=await(0,ze.stat)
|
|
|
85
85
|
t);return e.getTime()},Zt=async(t,e,r)=>{let o=await _(e.filePath);if(o<=t.lastModified&&
|
|
86
86
|
e.filePath===r.filePath)return t;let{bucketName:n}=t,{objectKey:s}=r;return await G(
|
|
87
87
|
n,{...e,objectKey:s}),{lastModified:o,bucketName:n}},Le=async(t,e,r,o)=>{let n=r??
|
|
88
|
-
{};!(0,D.deepEqual)(n,o??{})&&await Ne(t,e,n)};var Me=()=>{(0,qe.registerProvider)(y,
|
|
88
|
+
{};!(0,D.deepEqual)(n,o??{})&&await Ne(t,e,n)};var Me=()=>{(0,qe.registerProvider)(y,Ae())};var L=require("@ez4/storage/library");var He=require("@ez4/aws-function"),z=require("@ez4/stateful");var $e=require("@ez4/aws-identity"),V=t=>`arn:aws:s3:::${t}`,W=t=>(0,$e.createPolicyDocument)(
|
|
89
89
|
[{resourceIds:[`arn:aws:s3:::${t}-*`,`arn:aws:s3:::${t}-*/*`],permissions:["s3:L\
|
|
90
90
|
istBucket","s3:PutObject","s3:GetObject","s3:DeleteObject"]}]);var Z=(t,e,r)=>{let o=r.bucketName,n=$(o),s=(0,z.attachEntry)(t,{type:u,entryId:n,
|
|
91
91
|
dependencies:[],parameters:r});return e&&((0,He.createPermission)(t,s,e,{fromService:r.
|
|
92
92
|
bucketName,getPermission:()=>({principal:"s3.amazonaws.com",sourceArn:V(o)})}),(0,z.linkDependency)(
|
|
93
|
-
t,s.entryId,e.entryId)),s};var
|
|
93
|
+
t,s.entryId,e.entryId)),s};var I=require("@ez4/aws-function"),Xe=require("@ez4/project/library"),X=require("@ez4/aws-identity"),
|
|
94
94
|
Ye=require("@ez4/aws-logs");var We=require("@ez4/aws-function");var Ke=require("node:path"),Ue=require("@ez4/project/library"),Ge=require("@ez4/aws-function"),
|
|
95
95
|
_e=require("@ez4/aws-common"),Ve=async(t,e)=>{let{extras:r,debug:o,handler:n,listener:s}=e,
|
|
96
|
-
a=(0,Ue.getDefinitionsObject)(t);return(0,_e.
|
|
96
|
+
a=(0,Ue.getDefinitionsObject)(t);return(0,_e.getFunctionBundle)(Ge.MappingServiceName,
|
|
97
97
|
{templateFile:(0,Ke.join)(__dirname,"../lib/event.ts"),filePrefix:"s3",define:{...a},
|
|
98
|
-
handler:n,listener:s,extras:r,debug:o})};var J=(t,e,r,o)=>(0,We.createFunction)(t,e,r,{handlerName:"
|
|
99
|
-
|
|
100
|
-
variables,timeout:o.timeout,memory:o.memory,debug:o.debug,
|
|
101
|
-
let s
|
|
102
|
-
|
|
103
|
-
t,e)
|
|
104
|
-
t
|
|
98
|
+
handler:n,listener:s,extras:r,debug:o})};var J=(t,e,r,o)=>{let{handler:n}=o;return(0,We.createFunction)(t,e,r,{handlerName:"\
|
|
99
|
+
s3EntryPoint",sourceFile:n.sourceFile,functionName:o.functionName,description:o.
|
|
100
|
+
description,variables:o.variables,timeout:o.timeout,memory:o.memory,debug:o.debug,
|
|
101
|
+
tags:o.tags,getFunctionBundle:s=>{let a=s.getDependencies();return Ve(a,o)},getFunctionFiles:()=>[
|
|
102
|
+
n.sourceFile,n.dependencies]})};var F=require("@ez4/project/library"),Ze=require("@ez4/aws-common"),A=require("@ez4/utils"),
|
|
103
|
+
Je=async(t,e)=>{if(t.globalName)return(0,F.getServiceName)(t.globalName,e);let r=(0,F.getServiceName)(
|
|
104
|
+
t,e),o=await(0,Ze.getRandomName)(16);return`${r.substring(0,46)}-${o}`},Q=(t,e)=>`${(0,A.toKebabCase)(
|
|
105
|
+
t.name)}-${(0,A.toKebabCase)(e)}`,Qe=(t,e,r)=>`${(0,F.getServiceName)(t,r)}-${(0,A.toKebabCase)(
|
|
105
106
|
e)}`;var C=class extends Error{constructor(){super("Execution role for S3 is missing.")}};var j;(o=>(o.LogRetention=90,o.Timeout=90,o.Memory=192))(j||={});var et=(t,e,r,o)=>{if(!e.events)return;if(!o.role||!(0,X.isRoleState)(o.role))throw new C;
|
|
106
|
-
let{handler:n,listener:s,
|
|
107
|
-
e,n.name),g=(0,
|
|
108
|
-
wt=(0,Ye.createLogGroup)(t,{retention:a??j.LogRetention,groupName:Y});
|
|
109
|
-
t,o.role,wt,{functionName:Y,description:n.description,timeout:f??j.Timeout,
|
|
110
|
-
j.Memory,extras:e.extras,debug:r.debug,variables:{...r.variables
|
|
111
|
-
...v},handler:{
|
|
112
|
-
name,sourceFile:s.file}}}),
|
|
113
|
-
!e.events)return;if(!o.
|
|
114
|
-
|
|
115
|
-
a.entryId,e.extras)};var rt=require("node:fs/promises"),B=require("node:path"),ot=require("@ez4/aws-bucket"),
|
|
107
|
+
let{handler:n,listener:s,logRetention:a,timeout:f,memory:w,variables:v}=e.events,
|
|
108
|
+
h=Q(e,n.name),g=(0,I.tryGetFunctionState)(o,h,r);if(g)return g;let Y=Qe(e,n.name,
|
|
109
|
+
r),wt=(0,Ye.createLogGroup)(t,{retention:a??j.LogRetention,groupName:Y,tags:r.tags});
|
|
110
|
+
return g=J(t,o.role,wt,{functionName:Y,description:n.description,timeout:f??j.Timeout,
|
|
111
|
+
memory:w??j.Memory,extras:e.extras,debug:r.debug,tags:r.tags,variables:{...r.variables,
|
|
112
|
+
...e.variables,...v},handler:{dependencies:o.getDependencies(n.file),functionName:n.
|
|
113
|
+
name,sourceFile:n.file},...s&&{listener:{functionName:s.name,sourceFile:s.file}}}),
|
|
114
|
+
o.setServiceState(g,h,r),g},tt=(t,e,r,o)=>{if(!e.extras||!e.events)return;if(!o.
|
|
115
|
+
role||!(0,X.isRoleState)(o.role))throw new C;let{handler:n}=e.events,s=Q(e,n.name),
|
|
116
|
+
a=(0,I.getFunctionState)(o,s,r);(0,Xe.linkServiceExtras)(t,a.entryId,e.extras)};var rt=require("node:fs/promises"),B=require("node:path"),ot=require("@ez4/aws-bucket"),
|
|
116
117
|
nt=async(t,e,r)=>{let o=process.cwd(),n=(0,B.join)(o,r),s=await(0,rt.readdir)(n,
|
|
117
118
|
{withFileTypes:!0,recursive:!0});for(let a of s){if(!a.isFile())continue;let f=(0,B.join)(
|
|
118
119
|
a.parentPath,a.name);(0,ot.createBucketObject)(t,e,{objectKey:(0,B.relative)(n,f),
|
|
@@ -120,11 +121,11 @@ filePath:(0,B.relative)(o,f)})}};var st=(t,e,r)=>{let o=H(t,e.name,r);return{ent
|
|
|
120
121
|
ke('${o.parameters.bucketName}')`,from:"@ez4/aws-bucket/client",module:"Client"}};var ct=t=>{let{service:e,options:r,context:o}=t;return(0,L.isBucketService)(e)?st(
|
|
121
122
|
o,e,r):null},at=async t=>{let{state:e,service:r,options:o,context:n}=t;if(!(0,L.isBucketService)(
|
|
122
123
|
r))return;let{localPath:s,autoExpireDays:a,events:f,cors:w}=r,v=await Je(r,o),h=et(
|
|
123
|
-
e,r,o,n),g=Z(e,h,{eventsPath:f?.path,bucketName:v,autoExpireDays:a,localPath:s,
|
|
124
|
-
n.setServiceState(g,r,o),s&&await nt(e,g,s)},it=t=>{let{state:e,service:r,
|
|
125
|
-
context:n}=t;(0,L.isBucketService)(r)&&tt(e,r,o,n)};var pt=require("@ez4/storage/library"),q=require("@ez4/aws-identity"),mt=require("@ez4/project/library");var ut=t=>{let{state:e,serviceType:r,options:o}=t;if(r!==pt.ServiceType)return null;
|
|
124
|
+
e,r,o,n),g=Z(e,h,{eventsPath:f?.path,tags:o.tags,bucketName:v,autoExpireDays:a,localPath:s,
|
|
125
|
+
cors:w});n.setServiceState(g,r,o),s&&await nt(e,g,s)},it=t=>{let{state:e,service:r,
|
|
126
|
+
options:o,context:n}=t;(0,L.isBucketService)(r)&&tt(e,r,o,n)};var pt=require("@ez4/storage/library"),q=require("@ez4/aws-identity"),mt=require("@ez4/project/library");var ut=t=>{let{state:e,serviceType:r,options:o}=t;if(r!==pt.ServiceType)return null;
|
|
126
127
|
let n=(0,mt.getServiceName)("",o),s=`${n}-bucket-policy`;return(0,q.tryGetPolicy)(
|
|
127
|
-
e,s)??(0,q.createPolicy)(e,{policyDocument:W(n),policyName:s})};var lt=!1,Jt=()=>{lt||((0,yt.registerTriggers)(),(0,ft.registerTriggers)(),(0,gt.registerTriggers)(),
|
|
128
|
+
e,s)??(0,q.createPolicy)(e,{tags:o.tags,policyDocument:W(n),policyName:s})};var lt=!1,Jt=()=>{lt||((0,yt.registerTriggers)(),(0,ft.registerTriggers)(),(0,gt.registerTriggers)(),
|
|
128
129
|
(0,dt.registerTriggers)(),(0,St.createTrigger)("@ez4/aws-bucket",{"deploy:prepar\
|
|
129
130
|
eExecutionPolicy":ut,"deploy:prepareLinkedService":ct,"deploy:prepareResources":at,
|
|
130
131
|
"deploy:connectResources":it}),ke(),he(),Me(),lt=!0)};var kt=require("@ez4/aws-identity"),Qt=t=>/(.+)\.s3\.(.+)\.amazonaws\.com/i.test(
|
package/dist/main.mjs
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import{registerTriggers as tr}from"@ez4/aws-common";import{registerTriggers as rr}from"@ez4/aws-identity";
|
|
2
2
|
import{registerTriggers as or}from"@ez4/aws-function";import{registerTriggers as nr}from"@ez4/storage/library";
|
|
3
3
|
import{createTrigger as sr}from"@ez4/project/library";import{registerProvider as Ye}from"@ez4/aws-common";import{ReplaceResourceError as _e}from"@ez4/aws-common";import{tryGetFunctionArn as G}from"@ez4/aws-function";
|
|
4
|
-
import{deepCompare as Ve,deepEqual as R}from"@ez4/utils";import{getTagList as ze,Logger as i}from"@ez4/aws-common";import{S3Client as
|
|
5
|
-
ListObjectsV2Command as
|
|
4
|
+
import{deepCompare as Ve,deepEqual as R}from"@ez4/utils";import{getTagList as ze,Logger as i}from"@ez4/aws-common";import{S3Client as Fe,
|
|
5
|
+
ListObjectsV2Command as Ae,CreateBucketCommand as Ie,DeleteBucketCommand as Le,PutBucketTaggingCommand as qe,
|
|
6
6
|
PutBucketCorsCommand as Me,DeleteBucketCorsCommand as $e,PutBucketLifecycleConfigurationCommand as He,
|
|
7
7
|
DeleteBucketLifecycleCommand as Ke,PutBucketNotificationConfigurationCommand as Ue,
|
|
8
|
-
ExpirationStatus as Ge,NoSuchBucket as B}from"@aws-sdk/client-s3";var a="AWS:S3/Bucket",l="aws:s3.bucket";var p=new
|
|
8
|
+
ExpirationStatus as Ge,NoSuchBucket as B}from"@aws-sdk/client-s3";var a="AWS:S3/Bucket",l="aws:s3.bucket";var p=new Fe({}),A=async t=>{i.logFetch(a,t);try{return!(await p.send(new Ae({Bucket:t,
|
|
9
9
|
MaxKeys:1}))).Contents?.length}catch(e){if(!(e instanceof B))throw e;return 0}},
|
|
10
|
-
|
|
10
|
+
I=async t=>{let{bucketName:e}=t;return i.logCreate(a,e),await p.send(new Ie({Bucket:e})),
|
|
11
11
|
{bucketName:e}},L=async t=>{i.logDelete(a,t);try{return await p.send(new Le({Bucket:t})),
|
|
12
12
|
!0}catch(e){if(!(e instanceof B))throw e;return!1}},q=async(t,e)=>{i.logTag(a,t),
|
|
13
13
|
await p.send(new qe({Bucket:t,Tagging:{TagSet:ze({...e,ManagedBy:"EZ4"})}}))},M=async(t,e)=>{
|
|
@@ -27,13 +27,13 @@ result&&t.result.bucketName===e.result?.bucketName,Ze=async(t,e)=>{let r={...t.p
|
|
|
27
27
|
dependencies:t.dependencies},o={...e.parameters,dependencies:e.dependencies},n=Ve(
|
|
28
28
|
r,o);if(n.counts)return{...n,name:r.bucketName}},Je=async(t,e,r)=>{if(e.result)throw new _e(
|
|
29
29
|
a,t.entryId,e.entryId);return V(t,r)},V=async(t,e)=>{let r=t.parameters,o=G(e),{
|
|
30
|
-
bucketName:n}=await
|
|
30
|
+
bucketName:n}=await I(r);await W(n,r,void 0),await Z(n,r,void 0),await J(n,r.tags,
|
|
31
31
|
void 0);let s={eventsPath:r.eventsPath,functionArn:o};return await Q(n,s,{}),{bucketName:n,
|
|
32
32
|
functionArn:o}},Qe=async(t,e,r)=>{let{result:o,parameters:n}=t;if(!o)return;let s=o.
|
|
33
33
|
bucketName,c=G(r),m=e.result?.functionArn;await W(s,n,e.parameters),await Z(s,n,
|
|
34
34
|
e.parameters),await J(s,n.tags,e.parameters.tags);let S={eventsPath:n.eventsPath,
|
|
35
35
|
functionArn:c},k={eventsPath:e.parameters.eventsPath,functionArn:m};return await Q(
|
|
36
|
-
s,S,k),{...o,functionArn:c}},Xe=async t=>{let e=t.result;e&&await
|
|
36
|
+
s,S,k),{...o,functionArn:c}},Xe=async t=>{let e=t.result;e&&await A(e.bucketName)&&
|
|
37
37
|
await L(e.bucketName)},W=async(t,e,r)=>{if(!(e.cors&&r?.cors&&R(e.cors,r.cors))){
|
|
38
38
|
if(e.cors)return M(t,e.cors);if(r?.cors)return $(t)}},Z=async(t,e,r)=>{if(e.autoExpireDays!==
|
|
39
39
|
r?.autoExpireDays){if(e.autoExpireDays)return H(t,e.autoExpireDays);if(r?.autoExpireDays)
|
|
@@ -76,28 +76,29 @@ await pe(e.bucketName,r.objectKey)},O=async t=>{let{mtime:e}=await vt(t);return
|
|
|
76
76
|
getTime()},Dt=async(t,e,r)=>{let o=await O(e.filePath);if(o<=t.lastModified&&e.filePath===
|
|
77
77
|
r.filePath)return t;let{bucketName:n}=t,{objectKey:s}=r;return await h(n,{...e,objectKey:s}),
|
|
78
78
|
{lastModified:o,bucketName:n}},le=async(t,e,r,o)=>{let n=r??{};!Ct(n,o??{})&&await ie(
|
|
79
|
-
t,e,n)};var ye=()=>{zt(y,me())};import{isBucketService as z}from"@ez4/storage/library";import{createPermission as
|
|
80
|
-
::${t}`,ge=t=>
|
|
81
|
-
"s3:ListBucket","s3:PutObject","s3:GetObject","s3:DeleteObject"]}]);var de=(t,e,r)=>{let o=r.bucketName,n=Y(o),s=
|
|
82
|
-
parameters:r});return e&&(
|
|
79
|
+
t,e,n)};var ye=()=>{zt(y,me())};import{isBucketService as z}from"@ez4/storage/library";import{createPermission as At}from"@ez4/aws-function";import{attachEntry as It,linkDependency as Lt}from"@ez4/stateful";import{createPolicyDocument as Ft}from"@ez4/aws-identity";var fe=t=>`arn:aws:s3:\
|
|
80
|
+
::${t}`,ge=t=>Ft([{resourceIds:[`arn:aws:s3:::${t}-*`,`arn:aws:s3:::${t}-*/*`],permissions:[
|
|
81
|
+
"s3:ListBucket","s3:PutObject","s3:GetObject","s3:DeleteObject"]}]);var de=(t,e,r)=>{let o=r.bucketName,n=Y(o),s=It(t,{type:l,entryId:n,dependencies:[],
|
|
82
|
+
parameters:r});return e&&(At(t,s,e,{fromService:r.bucketName,getPermission:()=>({
|
|
83
83
|
principal:"s3.amazonaws.com",sourceArn:fe(o)})}),Lt(t,s.entryId,e.entryId)),s};import{getFunctionState as Gt,tryGetFunctionState as _t}from"@ez4/aws-function";
|
|
84
84
|
import{linkServiceExtras as Vt}from"@ez4/project/library";import{isRoleState as Pe}from"@ez4/aws-identity";
|
|
85
85
|
import{createLogGroup as Wt}from"@ez4/aws-logs";import{createFunction as Kt}from"@ez4/aws-function";import{join as qt}from"node:path";import{getDefinitionsObject as Mt}from"@ez4/project/library";
|
|
86
|
-
import{MappingServiceName as $t}from"@ez4/aws-function";import{
|
|
86
|
+
import{MappingServiceName as $t}from"@ez4/aws-function";import{getFunctionBundle as Ht}from"@ez4/aws-common";
|
|
87
87
|
var Se=async(t,e)=>{let{extras:r,debug:o,handler:n,listener:s}=e,c=Mt(t);return Ht(
|
|
88
88
|
$t,{templateFile:qt(import.meta.dirname,"../lib/event.ts"),filePrefix:"s3",define:{
|
|
89
|
-
...c},handler:n,listener:s,extras:r,debug:o})};var ke=(t,e,r,o)=>Kt(t,e,r,{handlerName:"s3EntryPoint",
|
|
90
|
-
sourceFile:
|
|
91
|
-
timeout:o.timeout,memory:o.memory,debug:o.debug,tags:o.tags,getFunctionBundle:
|
|
92
|
-
let s
|
|
89
|
+
...c},handler:n,listener:s,extras:r,debug:o})};var ke=(t,e,r,o)=>{let{handler:n}=o;return Kt(t,e,r,{handlerName:"s3EntryPoint",
|
|
90
|
+
sourceFile:n.sourceFile,functionName:o.functionName,description:o.description,variables:o.
|
|
91
|
+
variables,timeout:o.timeout,memory:o.memory,debug:o.debug,tags:o.tags,getFunctionBundle:s=>{
|
|
92
|
+
let c=s.getDependencies();return Se(c,o)},getFunctionFiles:()=>[n.sourceFile,n.dependencies]})};import{getServiceName as T}from"@ez4/project/library";import{getRandomName as Ut}from"@ez4/aws-common";
|
|
93
93
|
import{toKebabCase as N}from"@ez4/utils";var be=async(t,e)=>{if(t.globalName)return T(
|
|
94
94
|
t.globalName,e);let r=T(t,e),o=await Ut(16);return`${r.substring(0,46)}-${o}`},D=(t,e)=>`${N(
|
|
95
95
|
t.name)}-${N(e)}`,xe=(t,e,r)=>`${T(t,r)}-${N(e)}`;var b=class extends Error{constructor(){super("Execution role for S3 is missing.")}};var x;(o=>(o.LogRetention=90,o.Timeout=90,o.Memory=192))(x||={});var Be=(t,e,r,o)=>{if(!e.events)return;if(!o.role||!Pe(o.role))throw new b;let{handler:n,
|
|
96
|
-
listener:s,
|
|
97
|
-
o,P,r);if(u)return u;let
|
|
98
|
-
return u=ke(t,o.role,De,{functionName:
|
|
99
|
-
memory:S??x.Memory,extras:e.extras,debug:r.debug,
|
|
100
|
-
variables,...k},handler:{
|
|
96
|
+
listener:s,logRetention:c,timeout:m,memory:S,variables:k}=e.events,P=D(e,n.name),
|
|
97
|
+
u=_t(o,P,r);if(u)return u;let F=xe(e,n.name,r),De=Wt(t,{retention:c??x.LogRetention,
|
|
98
|
+
groupName:F,tags:r.tags});return u=ke(t,o.role,De,{functionName:F,description:n.
|
|
99
|
+
description,timeout:m??x.Timeout,memory:S??x.Memory,extras:e.extras,debug:r.debug,
|
|
100
|
+
tags:r.tags,variables:{...r.variables,...e.variables,...k},handler:{dependencies:o.
|
|
101
|
+
getDependencies(n.file),functionName:n.name,sourceFile:n.file},...s&&{listener:{
|
|
101
102
|
functionName:s.name,sourceFile:s.file}}}),o.setServiceState(u,P,r),u},we=(t,e,r,o)=>{
|
|
102
103
|
if(!e.extras||!e.events)return;if(!o.role||!Pe(o.role))throw new b;let{handler:n}=e.
|
|
103
104
|
events,s=D(e,n.name),c=Gt(o,s,r);Vt(t,c.entryId,e.extras)};import{readdir as Zt}from"node:fs/promises";import{join as ve,relative as Ee}from"node:path";
|
|
@@ -107,19 +108,21 @@ isFile())continue;let m=ve(c.parentPath,c.name);Jt(t,e,{objectKey:Ee(n,m),filePa
|
|
|
107
108
|
o,m)})}};var Ce=(t,e,r)=>{let o=ee(t,e.name,r);return{entryIds:[o.entryId],constructor:`m\
|
|
108
109
|
ake('${o.parameters.bucketName}')`,from:"@ez4/aws-bucket/client",module:"Client"}};var je=t=>{let{service:e,options:r,context:o}=t;return z(e)?Ce(o,e,r):null},he=async t=>{
|
|
109
110
|
let{state:e,service:r,options:o,context:n}=t;if(!z(r))return;let{localPath:s,autoExpireDays:c,
|
|
110
|
-
events:m,cors:S}=r,k=await be(r,o),P=Be(e,r,o,n),u=de(e,P,{eventsPath:m?.path,
|
|
111
|
-
autoExpireDays:c,localPath:s,cors:S});n.setServiceState(u,r,o),
|
|
112
|
-
Oe=t=>{let{state:e,service:r,options:o,context:n}=t;z(r)&&we(
|
|
111
|
+
events:m,cors:S}=r,k=await be(r,o),P=Be(e,r,o,n),u=de(e,P,{eventsPath:m?.path,tags:o.
|
|
112
|
+
tags,bucketName:k,autoExpireDays:c,localPath:s,cors:S});n.setServiceState(u,r,o),
|
|
113
|
+
s&&await Re(e,u,s)},Oe=t=>{let{state:e,service:r,options:o,context:n}=t;z(r)&&we(
|
|
114
|
+
e,r,o,n)};import{ServiceType as Qt}from"@ez4/storage/library";import{createPolicy as Xt,tryGetPolicy as Yt}from"@ez4/aws-identity";
|
|
113
115
|
import{getServiceName as er}from"@ez4/project/library";var Te=t=>{let{state:e,serviceType:r,options:o}=t;if(r!==Qt)return null;let n=er(
|
|
114
|
-
"",o),s=`${n}-bucket-policy`;return Yt(e,s)??Xt(e,{policyDocument:ge(
|
|
116
|
+
"",o),s=`${n}-bucket-policy`;return Yt(e,s)??Xt(e,{tags:o.tags,policyDocument:ge(
|
|
117
|
+
n),policyName:s})};var Ne=!1,En=()=>{Ne||(tr(),rr(),or(),nr(),sr("@ez4/aws-bucket",{"deploy:prepare\
|
|
115
118
|
ExecutionPolicy":Te,"deploy:prepareLinkedService":je,"deploy:prepareResources":he,
|
|
116
119
|
"deploy:connectResources":Oe}),X(),ae(),ye(),Ne=!0)};import{getRegion as cr}from"@ez4/aws-identity";var jn=t=>/(.+)\.s3\.(.+)\.amazonaws\.com/i.
|
|
117
120
|
test(t),hn=async t=>{let e=await cr();return`${t}.s3.${e}.amazonaws.com`};import{attachEntry as ar}from"@ez4/stateful";import{hashData as ir}from"@ez4/utils";var zn=(t,e,r,o)=>{let n=ir(f,e.entryId,r.entryId);return ar(t,{type:f,entryId:n,
|
|
118
|
-
dependencies:[e.entryId,r.entryId],parameters:o})};var
|
|
121
|
+
dependencies:[e.entryId,r.entryId],parameters:o})};var In=t=>t.type===f;import{attachEntry as pr}from"@ez4/stateful";import{hashData as mr}from"@ez4/utils";var Hn=(t,e,r)=>{let o=r.objectKey,n=mr(y,e.entryId,o);return pr(t,{type:y,entryId:n,
|
|
119
122
|
dependencies:[e.entryId],parameters:r})};export{a as BucketServiceName,l as BucketServiceType,g as ObjectServiceName,y as ObjectServiceType,
|
|
120
123
|
d as PolicyServiceName,f as PolicyServiceType,fe as buildBucketArn,de as createBucket,
|
|
121
124
|
ke as createBucketEventFunction,Hn as createBucketObject,zn as createBucketPolicy,
|
|
122
125
|
Y as createBucketStateId,hn as getBucketDomain,v as getBucketName,Xr as getBucketObjectFiles,
|
|
123
126
|
E as getBucketObjectPath,ee as getBucketState,ge as getPolicyDocument,jn as isBucketDomain,
|
|
124
|
-
Qr as isBucketObjectState,
|
|
127
|
+
Qr as isBucketObjectState,In as isBucketPolicyState,ot as isBucketState,En as registerTriggers};
|
|
125
128
|
//# sourceMappingURL=main.mjs.map
|
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.20.0",
|
|
5
5
|
"author": "Silas B.",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"type": "module",
|
|
@@ -48,14 +48,14 @@
|
|
|
48
48
|
"dependencies": {
|
|
49
49
|
"@aws-sdk/client-s3": "^3.758.0",
|
|
50
50
|
"@aws-sdk/s3-request-presigner": "^3.758.0",
|
|
51
|
-
"@ez4/aws-common": "^0.
|
|
52
|
-
"@ez4/aws-function": "^0.
|
|
53
|
-
"@ez4/aws-identity": "^0.
|
|
54
|
-
"@ez4/aws-logs": "^0.
|
|
55
|
-
"@ez4/project": "^0.
|
|
56
|
-
"@ez4/stateful": "^0.
|
|
57
|
-
"@ez4/storage": "^0.
|
|
58
|
-
"@ez4/utils": "^0.
|
|
51
|
+
"@ez4/aws-common": "^0.20.0",
|
|
52
|
+
"@ez4/aws-function": "^0.20.0",
|
|
53
|
+
"@ez4/aws-identity": "^0.20.0",
|
|
54
|
+
"@ez4/aws-logs": "^0.20.0",
|
|
55
|
+
"@ez4/project": "^0.20.0",
|
|
56
|
+
"@ez4/stateful": "^0.20.0",
|
|
57
|
+
"@ez4/storage": "^0.20.0",
|
|
58
|
+
"@ez4/utils": "^0.20.0",
|
|
59
59
|
"mime": "^3.0.0"
|
|
60
60
|
}
|
|
61
61
|
}
|