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