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