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