@ez4/aws-bucket 0.44.0 → 0.46.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 Ft=Object.create;var j=Object.defineProperty;var At=Object.getOwnPropertyDescriptor;var It=Object.getOwnPropertyNames;var Mt=Object.getPrototypeOf,qt=Object.prototype.hasOwnProperty;var n=(t,e)=>j(t,"name",{value:e,configurable:!0});var Kt=(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 It(e))!qt.call(t,c)&&c!==r&&
3
- j(t,c,{get:()=>e[c],enumerable:!(o=At(e,c))||o.enumerable});return t};var Ht=(t,e,r)=>(r=t!=null?Ft(Mt(t)):{},ae(e||!t||!t.__esModule?j(r,"default",{value:t,
4
- enumerable:!0}):r,t)),$t=t=>ae(j({},"__esModule",{value:!0}),t);var fr={};Kt(fr,{BucketServiceName:()=>B,BucketServiceType:()=>l,ObjectServiceName:()=>S,
5
- ObjectServiceType:()=>y,PolicyServiceName:()=>R,PolicyServiceType:()=>g,buildBucketArn:()=>X,
6
- createBucket:()=>ee,createBucketEventFunction:()=>te,createBucketObject:()=>yr,createBucketPolicy:()=>mr,
7
- createBucketStateId:()=>W,getBucketDomain:()=>ur,getBucketName:()=>L,getBucketObjectFiles:()=>tr,
8
- getBucketObjectPath:()=>T,getBucketState:()=>Z,getPolicyDocument:()=>Y,isBucketDomain:()=>pr,
9
- isBucketObjectState:()=>er,isBucketPolicyState:()=>lr,isBucketState:()=>Oe,registerTriggers:()=>sr});
10
- module.exports=$t(fr);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:Ut,create:xe,replace:_t,preview:Gt,update:Vt,delete:Wt}),"\
36
- getBucketHandler"),Ut=n((t,e)=>!!t.result&&t.result.bucketName===e.result?.bucketName,
37
- "equalsResource"),Gt=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"),_t=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"),Vt=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
- Wt=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:Zt,create:De,replace:Qt,preview:Jt,update:Xt,delete:Yt}),"\
70
- getPolicyHandler"),Zt=n((t,e)=>!!t.result&&t.result.bucketName===e.result?.bucketName,
71
- "equalsResource"),Jt=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"),Qt=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"),Xt=n(async()=>{},"updateResource"),Yt=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=Ht(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 er=n(t=>t.type===y,"isBucketObjectState"),T=n((t,e)=>`${t}/${e}`,"getBucketO\
88
- bjectPath"),tr=n(t=>t.getDependencies(y).map(({result:r,parameters:o})=>({lastModified:r?.
89
- lastModified,objectKey:o.objectKey})),"getBucketObjectFiles");var $e=n(()=>({equals:rr,create:Ue,replace:nr,preview:or,update:cr,delete:ar}),"\
90
- getObjectHandler"),rr=n((t,e)=>!!t.result&&t.result.lastModified===e.result?.lastModified,
91
- "equalsResource"),or=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"),nr=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
- cr=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=ir(p,r,o,e.parameters);return await Ge(p,r.bucketName,c,a,e.parameters.
102
- tags),m})},"updateResource"),ar=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"),ir=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,debug:jt=r.
141
- debug,variables:Lt,listener:F,handler:P,files:Nt,vpc:Tt}=e.events,ne=re(e,P.name),
142
- h=(0,$.tryGetFunctionState)(o,ne,r);if(h)return h;let ce=at(e,P.name,r),Dt=o.getDependencyFiles(
143
- P.file),zt=(0,it.createLogGroup)(t,{retention:m,groupName:ce,tags:r.tags});return h=
144
- te(t,o.role,zt,{functionName:ce,description:P.description,context:e.context,tags:r.
145
- tags,variables:[r.variables,e.variables,Lt],architecture:p,logLevel:x,runtime:i,
146
- release:a,timeout:z,memory:O,files:Nt,debug:jt,vpc:Tt,handler:{sourceFile:P.file,
147
- functionName:P.name,module:P.module,dependencies:Dt},listener:F&&{functionName:F.
148
- name,sourceFile:F.file,module:F.module}}),o.setServiceState(ne,r,h),h},"prepareE\
149
- vents"),pt=n((t,e,r,o)=>{if(!e.events)return;if(!o.role||!(0,oe.isRoleState)(o.role))
150
- throw new D;let{handler:c}=e.events,a=re(e,c.name),i=(0,$.getFunctionState)(o,a,
151
- r);(0,U.linkServiceContext)(t,i.entryId,e.context),i.parameters.vpc||(i.parameters.
152
- vpc=(0,U.isLinkedContextVpcRequired)(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 sr=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 pr=n(t=>/(.+)\.s3\.(.+)\.amazonaws\.com/i.test(t),"isBucketDomain"),ur=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 mr=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 lr=n(t=>t.type===g,"isBucketPolicyState");var Ot=require("@ez4/stateful"),ht=require("@ez4/utils");var yr=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 $e=Object.defineProperty;var n=(r,e)=>$e(r,"name",{value:e,configurable:!0});import{registerTriggers as gr}from"@ez4/aws-common";import{registerTriggers as dr}from"@ez4/aws-identity";
2
- import{registerTriggers as Sr}from"@ez4/aws-function";import{registerTriggers as kr}from"@ez4/storage/library";
3
- import{tryCreateTrigger as br}from"@ez4/project/library";import{tryRegisterProvider as mt}from"@ez4/aws-common";import{CorruptedResourceError as ot,OperationLogger as j,ReplaceResourceError as nt}from"@ez4/aws-common";
4
- import{tryGetFunctionArn as J}from"@ez4/aws-function";import{deepCompare as ct,deepEqual as L}from"@ez4/utils";import{getTagList as _e}from"@ez4/aws-common";import{ListObjectsV2Command as Ve,
5
- CreateBucketCommand as We,DeleteBucketCommand as Ze,PutBucketTaggingCommand as Je,
6
- PutBucketCorsCommand as Qe,PutBucketLifecycleConfigurationCommand as Xe,PutBucketNotificationConfigurationCommand as Ye,
7
- DeleteBucketLifecycleCommand as et,DeleteBucketCorsCommand as tt,ExpirationStatus as rt,
8
- NoSuchBucket as R}from"@aws-sdk/client-s3";import{getAwsClientOptions as Ue}from"@ez4/aws-common";import{S3Client as Ge}from"@aws-sdk/client-s3";var p=n(()=>new Ge(Ue()),"getS3Client");var K=n(async(r,e)=>{r.update("Fetching bucket");try{return!(await p().send(new Ve(
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 We({Bucket:t})),{bucketName:t}},"createBucket"),$=n(async(r,e)=>{
12
- r.update("Deleting bucket");try{return await p().send(new Ze({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 Je({Bucket:e,Tagging:{TagSet:_e({...t,ManagedBy:"\
15
- EZ4"})}}))},"tagBucket"),G=n(async(r,e,t)=>{r.update("Updating bucket CORS"),await p().
16
- send(new Qe({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 tt({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 Xe({Bucket:e,LifecycleConfiguration:{
22
- Rules:[{ID:"ID0",Status:rt.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 et({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 Ye({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:at,create:X,replace:st,preview:it,update:pt,delete:ut}),"ge\
30
- tBucketHandler"),at=n((r,e)=>!!r.result&&r.result.bucketName===e.result?.bucketName,
31
- "equalsResource"),it=n((r,e)=>{let t={...r.parameters,dependencies:r.dependencies},
32
- o={...e.parameters,dependencies:e.dependencies},c=ct(t,o);if(c.counts)return{...c,
33
- name:t.bucketName}},"previewResource"),st=n(async(r,e,t)=>{if(e.result)throw new nt(
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"),pt=n((r,e,t)=>{let{result:o,parameters:c}=r,{bucketName:a}=c;if(!o)
39
- throw new ot(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"),ut=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(()=>{mt(m,Q())},"registerBucketProvider");import{tryRegisterProvider as Rt}from"@ez4/aws-common";import{ReplaceResourceError as bt,OperationLogger as pe}from"@ez4/aws-common";import{
52
- deepCompare as xt}from"@ez4/utils";import{IncompleteResourceError as lt}from"@ez4/aws-common";import{hashData as yt,
53
- toKebabCase as ft}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=>yt(m,ft(r)),"createBucketStateId"),gt=n(r=>r.type===m,"isBucketState"),
55
- ce=n((r,e,t)=>{let o=r.getServiceState(e,t);if(!gt(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 lt(r,e,"bucketName");return o.bucketName},"getBucketName");import{PutBucketPolicyCommand as dt,DeleteBucketPolicyCommand as St,NoSuchBucket as kt}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 dt({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 St({Bucket:e})),!0}catch(t){if(!(t instanceof kt))throw t;return!1}},"d\
61
- eletePolicy");var B="AWS:S3/Policy",d="aws:s3.policy";var ue=n(()=>({equals:Pt,create:me,replace:wt,preview:Bt,update:vt,delete:Et}),"\
62
- getPolicyHandler"),Pt=n((r,e)=>!!r.result&&r.result.bucketName===e.result?.bucketName,
63
- "equalsResource"),Bt=n((r,e)=>{let t={...r.parameters,dependencies:r.dependencies},
64
- o={...e.parameters,dependencies:e.dependencies},c=xt(t,o,{exclude:{getRole:!0}});
65
- if(c.counts)return{...c,name:t.fromService}},"previewResource"),wt=n(async(r,e,t)=>{
66
- if(e.result)throw new bt(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"),vt=n(async()=>{},"updateResource"),Et=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(()=>{Rt(d,ue())},"registerPolicyProvider");import{tryRegisterProvider as Gt}from"@ez4/aws-common";import{stat as Dt}from"node:fs/promises";import{CorruptedResourceError as zt,OperationLogger as T,
72
- ReplaceResourceError as Ft}from"@ez4/aws-common";import{deepCompare as At,deepEqual as It}from"@ez4/utils";import{createReadStream as Ct}from"node:fs";import{PutObjectCommand as Ot,PutObjectTaggingCommand as ht,
73
- DeleteObjectCommand as jt,NoSuchBucket as Lt}from"@aws-sdk/client-s3";import{getTagList as Nt}from"@ez4/aws-common";import Tt from"mime";var N=n(async(r,e,t)=>{r.update("Creating object");let{objectKey:o,filePath:c}=t,
74
- a=Tt.getType(c);return await p().send(new Ot({Bucket:e,Key:o,Body:Ct(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 ht({Bucket:e,Key:t,Tagging:{TagSet:Nt({...o,ManagedBy:"EZ4"})}}))},
77
- "updateTags"),fe=n(async(r,e,t)=>{r.update("Deleting object");try{return await p().
78
- send(new jt({Bucket:e,Key:t})),!0}catch(o){if(!(o instanceof Lt))throw o;return!1}},
79
- "deleteObject");var S="AWS:S3/Object",l="aws:s3.object";var ho=n(r=>r.type===l,"isBucketObjectState"),h=n((r,e)=>`${r}/${e}`,"getBucketO\
80
- bjectPath"),jo=n(r=>r.getDependencies(l).map(({result:t,parameters:o})=>({lastModified:t?.
81
- lastModified,objectKey:o.objectKey})),"getBucketObjectFiles");var ge=n(()=>({equals:Mt,create:de,replace:Kt,preview:qt,update:Ht,delete:$t}),"\
82
- getObjectHandler"),Mt=n((r,e)=>!!r.result&&r.result.lastModified===e.result?.lastModified,
83
- "equalsResource"),qt=n(async(r,e)=>{let t=r.parameters,o=e.parameters,c=At({...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"),Kt=n(async(r,e,t)=>{if(e.result)throw new Ft(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"),Ht=n((r,e)=>{
91
- let{result:t,parameters:o}=r,{objectKey:c,tags:a}=o;if(!t)throw new zt(S,c);let i=h(
92
- t.bucketName,c);return T.logExecution(S,i,"updates",async s=>{let u=Ut(s,t,o,e.parameters);
93
- return await Se(s,t.bucketName,c,a,e.parameters.tags),u})},"updateResource"),$t=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 Dt(r);return e.getTime()},"ge\
97
- tLastModifiedTime"),Ut=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??{};!It(a,c??{})&&await ye(r,e,t,a)},"checkTagUpdates");var ke=n(()=>{Gt(l,ge())},"registerObjectProvider");import{isBucketService as I}from"@ez4/storage/library";import{attachEntry as Vt,linkEntryDependency as Wt}from"@ez4/stateful";import{createPermission as Zt}from"@ez4/aws-function";import{createPolicyDocument as _t}from"@ez4/aws-identity";var be=n(r=>`arn:aws:s3:::${r}`,"buildBucketArn"),xe=n(r=>_t([{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=Vt(r,{type:m,entryId:c,dependencies:[],
103
- parameters:t});return e&&(Zt(r,a,e,{fromService:t.bucketName,getPermission:n(()=>({
104
- principal:"s3.amazonaws.com",sourceArn:be(o)}),"getPermission")}),Wt(r,a.entryId,
105
- e.entryId)),a},"createBucket");import{getFunctionState as nr,tryGetFunctionState as cr}from"@ez4/aws-function";
106
- import{isLinkedContextVpcRequired as ar,linkServiceContext as ir}from"@ez4/project/library";
107
- import{isRoleState as Re}from"@ez4/aws-identity";import{createLogGroup as sr}from"@ez4/aws-logs";import{createFunction as er}from"@ez4/aws-function";import{hashObject as tr}from"@ez4/utils";
108
- import{LogLevel as rr}from"@ez4/project";import{join as Jt}from"node:path";import{getDefinitionsObject as Qt}from"@ez4/project/library";
109
- import{MappingServiceName as Xt}from"@ez4/aws-function";import{getFunctionBundle as Yt}from"@ez4/aws-common";var Be=n(async(r,e)=>{let{handler:t,listener:o,context:c,debug:a}=r,i=Qt(e);return Yt(
110
- Xt,{templateFile:Jt(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 er(
112
- r,e,t,{handlerName:"s3EntryPoint",sourceFile:c.sourceFile,functionName:o.functionName,
113
- description:o.description,logLevel:i?rr.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(()=>tr({architecture:s,debug:i}),"getFunctionHas\
119
- h")})},"createBucketEventFunction");import{getServiceName as z}from"@ez4/project/library";import{getRandomName as or}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 or(
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,debug:Ae=t.debug,variables:Ie,
129
- listener:E,handler:g,files:Me,vpc:qe}=e.events,M=A(e,g.name),P=cr(o,M,t);if(P)return P;
130
- let q=Ee(e,g.name,t),Ke=o.getDependencyFiles(g.file),He=sr(r,{retention:u,groupName:q,
131
- tags:t.tags});return P=we(r,o.role,He,{functionName:q,description:g.description,
132
- context:e.context,tags:t.tags,variables:[t.variables,e.variables,Ie],architecture:s,
133
- logLevel:f,runtime:i,release:a,timeout:v,memory:x,files:Me,debug:Ae,vpc:qe,handler:{
134
- sourceFile:g.file,functionName:g.name,module:g.module,dependencies:Ke},listener:E&&
135
- {functionName:E.name,sourceFile:E.file,module:E.module}}),o.setServiceState(M,t,
136
- P),P},"prepareEvents"),Oe=n((r,e,t,o)=>{if(!e.events)return;if(!o.role||!Re(o.role))
137
- throw new w;let{handler:c}=e.events,a=A(e,c.name),i=nr(o,a,t);ir(r,i.entryId,e.context),
138
- i.parameters.vpc||(i.parameters.vpc=ar(e.context))},"connectEvents");import{readdir as pr}from"node:fs/promises";import{join as he,relative as je}from"node:path";
139
- import{createBucketObject as ur}from"@ez4/aws-bucket";var Le=n(async(r,e,t)=>{let o=process.cwd(),c=he(o,t),a=await pr(c,{withFileTypes:!0,
140
- recursive:!0});for(let i of a){if(!i.isFile())continue;let s=he(i.parentPath,i.name);
141
- ur(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 mr}from"@ez4/storage/library";import{createPolicy as lr,tryGetPolicy as yr}from"@ez4/aws-identity";
150
- import{getServiceName as fr}from"@ez4/project/library";var Fe=n(r=>{let{state:e,serviceType:t,options:o}=r;if(t!==mr)return null;let c=fr(
151
- "",o),a=`${c}-bucket-policy`;return yr(e,a)??lr(e,{tags:o.tags,policyDocument:xe(
152
- c),policyName:a})},"prepareExecutionPolicy");var yc=n(()=>{gr(),dr(),Sr(),kr(),br("@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 xr}from"@ez4/aws-identity";var Sc=n(r=>/(.+)\.s3\.(.+)\.amazonaws\.com/i.test(r),"isBucketDomain"),kc=n(async r=>{
155
- let e=await xr();return`${r}.s3.${e}.amazonaws.com`},"getBucketDomain");import{attachEntry as Pr}from"@ez4/stateful";import{hashData as Br}from"@ez4/utils";var vc=n((r,e,t,o)=>{let c=Br(d,e.entryId,t.entryId);return Pr(r,{type:d,entryId:c,
156
- dependencies:[e.entryId,t.entryId],parameters:o})},"createBucketPolicy");var Oc=n(r=>r.type===d,"isBucketPolicyState");import{attachEntry as wr}from"@ez4/stateful";import{hashData as vr}from"@ez4/utils";var Dc=n((r,e,t)=>{let o=t.objectKey,c=vr(l,e.entryId,o);return wr(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,Dc as createBucketObject,vc as createBucketPolicy,
160
- ne as createBucketStateId,kc as getBucketDomain,O as getBucketName,jo as getBucketObjectFiles,
161
- h as getBucketObjectPath,ce as getBucketState,xe as getPolicyDocument,Sc as isBucketDomain,
162
- ho as isBucketObjectState,Oc as isBucketPolicyState,gt as isBucketState,yc 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,12 +1,16 @@
1
1
  {
2
2
  "name": "@ez4/aws-bucket",
3
3
  "description": "EZ4: Self-managed AWS S3 bucket provider",
4
- "version": "0.44.0",
4
+ "version": "0.46.0",
5
5
  "author": "Silas B.",
6
6
  "license": "MIT",
7
7
  "type": "module",
8
8
  "keywords": [
9
- "ez4"
9
+ "ez4",
10
+ "bucket",
11
+ "storage",
12
+ "aws",
13
+ "s3"
10
14
  ],
11
15
  "repository": {
12
16
  "type": "git",
@@ -53,15 +57,15 @@
53
57
  "dependencies": {
54
58
  "@aws-sdk/client-s3": "^3.996.0",
55
59
  "@aws-sdk/s3-request-presigner": "^3.996.0",
56
- "@ez4/aws-common": "^0.44.0",
57
- "@ez4/aws-function": "^0.44.0",
58
- "@ez4/aws-identity": "^0.44.0",
59
- "@ez4/aws-logs": "^0.44.0",
60
- "@ez4/common": "^0.44.0",
61
- "@ez4/project": "^0.44.0",
62
- "@ez4/stateful": "^0.44.0",
63
- "@ez4/storage": "^0.44.0",
64
- "@ez4/utils": "^0.44.0",
60
+ "@ez4/aws-common": "^0.46.0",
61
+ "@ez4/aws-function": "^0.46.0",
62
+ "@ez4/aws-identity": "^0.46.0",
63
+ "@ez4/aws-logs": "^0.46.0",
64
+ "@ez4/common": "^0.46.0",
65
+ "@ez4/project": "^0.46.0",
66
+ "@ez4/stateful": "^0.46.0",
67
+ "@ez4/storage": "^0.46.0",
68
+ "@ez4/utils": "^0.46.0",
65
69
  "mime": "^3.0.0"
66
70
  }
67
71
  }