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