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