@ez4/aws-bucket 0.21.0 → 0.22.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,17 @@
1
- "use strict";var u=Object.create;var p=Object.defineProperty;var f=Object.getOwnPropertyDescriptor;var B=Object.getOwnPropertyNames;var C=Object.getPrototypeOf,l=Object.prototype.hasOwnProperty;var O=(r,s)=>{for(var o in s)p(r,o,{get:s[o],enumerable:!0})},m=(r,s,o,t)=>{if(s&&
2
- typeof s=="object"||typeof s=="function")for(let e of B(s))!l.call(r,e)&&e!==o&&
3
- p(r,e,{get:()=>s[e],enumerable:!(t=f(s,e))||t.enumerable});return r};var S=(r,s,o)=>(o=r!=null?u(C(r)):{},m(s||!r||!r.__esModule?p(o,"default",{value:r,
4
- enumerable:!0}):o,r)),T=r=>m(p({},"__esModule",{value:!0}),r);var K={};O(K,{Client:()=>d});module.exports=T(K);var y=require("@aws-sdk/s3-request-presigner"),
5
- n=require("@aws-sdk/client-s3"),g=S(require("mime/lite"),1),c=new n.S3Client({}),
6
- d;(s=>s.make=o=>new class{async exists(t){return!!await this.getStats(t)}async write(t,e,i){
7
- let a=i?.contentType??g.default.getType(t);await c.send(new n.PutObjectCommand({
8
- Bucket:o,Key:t,Body:e,...a&&{ContentType:a}}))}async read(t){let i=await(await c.
9
- send(new n.GetObjectCommand({Bucket:o,Key:t}))).Body.transformToByteArray();return Buffer.
10
- from(i)}async delete(t){await c.send(new n.DeleteObjectCommand({Bucket:o,Key:t}))}async getWriteUrl(t,e){
11
- let{expiresIn:i,contentType:a}=e,w=new n.PutObjectCommand({Bucket:o,ContentType:a,
12
- Key:t});return(0,y.getSignedUrl)(c,w,{signableHeaders:new Set(["content-type"]),
13
- expiresIn:i})}async getReadUrl(t,e){let{expiresIn:i}=e,a=new n.GetObjectCommand(
14
- {Bucket:o,Key:t});return(0,y.getSignedUrl)(c,a,{expiresIn:i})}async getStats(t){
15
- try{let e=await c.send(new n.HeadObjectCommand({Bucket:o,Key:t}));return{type:e?.
16
- ContentType,size:e?.ContentLength??0}}catch(e){if(!(e instanceof n.NotFound)&&!(e instanceof
17
- n.NoSuchKey))throw e;return}}})(d||={});0&&(module.exports={Client});
1
+ "use strict";var f=Object.create;var p=Object.defineProperty;var B=Object.getOwnPropertyDescriptor;var C=Object.getOwnPropertyNames;var l=Object.getPrototypeOf,O=Object.prototype.hasOwnProperty;var m=(t,o)=>p(t,"name",{value:o,configurable:!0});var S=(t,o)=>{for(var s in o)p(t,s,{get:o[s],enumerable:!0})},g=(t,o,s,n)=>{if(o&&
2
+ typeof o=="object"||typeof o=="function")for(let e of C(o))!O.call(t,e)&&e!==s&&
3
+ p(t,e,{get:()=>o[e],enumerable:!(n=B(o,e))||n.enumerable});return t};var T=(t,o,s)=>(s=t!=null?f(l(t)):{},g(o||!t||!t.__esModule?p(s,"default",{value:t,
4
+ enumerable:!0}):s,t)),K=t=>g(p({},"__esModule",{value:!0}),t);var h={};S(h,{Client:()=>w});module.exports=K(h);var y=require("@aws-sdk/s3-request-presigner"),
5
+ r=require("@aws-sdk/client-s3"),d=T(require("mime/lite.js"),1);var c=new r.S3Client({}),w;(o=>o.make=m(s=>new class{async exists(n){return!!await this.
6
+ getStats(n)}async write(n,e,i){let a=i?.contentType??d.default.getType(n);await c.
7
+ send(new r.PutObjectCommand({Bucket:s,Key:n,Body:e,...a&&{ContentType:a}}))}async read(n){
8
+ let i=await(await c.send(new r.GetObjectCommand({Bucket:s,Key:n}))).Body.transformToByteArray();
9
+ return Buffer.from(i)}async delete(n){await c.send(new r.DeleteObjectCommand({Bucket:s,
10
+ Key:n}))}async getWriteUrl(n,e){let{expiresIn:i,contentType:a}=e,u=new r.PutObjectCommand(
11
+ {Bucket:s,ContentType:a,Key:n});return(0,y.getSignedUrl)(c,u,{signableHeaders:new Set(
12
+ ["content-type"]),expiresIn:i})}async getReadUrl(n,e){let{expiresIn:i}=e,a=new r.GetObjectCommand(
13
+ {Bucket:s,Key:n});return(0,y.getSignedUrl)(c,a,{expiresIn:i})}async getStats(n){
14
+ try{let e=await c.send(new r.HeadObjectCommand({Bucket:s,Key:n}));return{type:e?.
15
+ ContentType,size:e?.ContentLength??0}}catch(e){if(!(e instanceof r.NotFound)&&!(e instanceof
16
+ r.NoSuchKey))throw e;return}}},"make"))(w||={});0&&(module.exports={Client});
18
17
  //# sourceMappingURL=client.cjs.map
package/dist/client.mjs CHANGED
@@ -1,14 +1,14 @@
1
- import{getSignedUrl as i}from"@aws-sdk/s3-request-presigner";import{HeadObjectCommand as m,
2
- PutObjectCommand as a,GetObjectCommand as c,DeleteObjectCommand as g,NotFound as d,
3
- S3Client as w,NoSuchKey as u}from"@aws-sdk/client-s3";import f from"mime/lite";var s=new w(
4
- {}),B;(p=>p.make=r=>new class{async exists(e){return!!await this.getStats(e)}async write(e,t,n){
5
- let o=n?.contentType??f.getType(e);await s.send(new a({Bucket:r,Key:e,Body:t,...o&&
6
- {ContentType:o}}))}async read(e){let n=await(await s.send(new c({Bucket:r,Key:e}))).
7
- Body.transformToByteArray();return Buffer.from(n)}async delete(e){await s.send(new g(
8
- {Bucket:r,Key:e}))}async getWriteUrl(e,t){let{expiresIn:n,contentType:o}=t,y=new a(
9
- {Bucket:r,ContentType:o,Key:e});return i(s,y,{signableHeaders:new Set(["content-\
10
- type"]),expiresIn:n})}async getReadUrl(e,t){let{expiresIn:n}=t,o=new c({Bucket:r,
11
- Key:e});return i(s,o,{expiresIn:n})}async getStats(e){try{let t=await s.send(new m(
12
- {Bucket:r,Key:e}));return{type:t?.ContentType,size:t?.ContentLength??0}}catch(t){
13
- if(!(t instanceof d)&&!(t instanceof u))throw t;return}}})(B||={});export{B as Client};
1
+ var d=Object.defineProperty;var c=(a,i)=>d(a,"name",{value:i,configurable:!0});import{getSignedUrl as p}from"@aws-sdk/s3-request-presigner";import{HeadObjectCommand as w,
2
+ PutObjectCommand as y,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/lite.js";var s=new B({}),O;(i=>i.make=c(r=>new class{async exists(e){return!!await this.getStats(
4
+ e)}async write(e,t,n){let o=n?.contentType??l.getType(e);await s.send(new y({Bucket:r,
5
+ Key:e,Body:t,...o&&{ContentType:o}}))}async read(e){let n=await(await s.send(new m(
6
+ {Bucket:r,Key:e}))).Body.transformToByteArray();return Buffer.from(n)}async delete(e){
7
+ await s.send(new u({Bucket:r,Key:e}))}async getWriteUrl(e,t){let{expiresIn:n,contentType:o}=t,
8
+ g=new y({Bucket:r,ContentType:o,Key:e});return p(s,g,{signableHeaders:new Set(["\
9
+ content-type"]),expiresIn:n})}async getReadUrl(e,t){let{expiresIn:n}=t,o=new m({
10
+ Bucket:r,Key:e});return p(s,o,{expiresIn:n})}async getStats(e){try{let t=await s.
11
+ send(new w({Bucket:r,Key:e}));return{type:t?.ContentType,size:t?.ContentLength??
12
+ 0}}catch(t){if(!(t instanceof f)&&!(t instanceof C))throw t;return}}},"make"))(O||=
13
+ {});export{O as Client};
14
14
  //# sourceMappingURL=client.mjs.map
package/dist/main.cjs CHANGED
@@ -1,137 +1,158 @@
1
- "use strict";var vt=Object.create;var O=Object.defineProperty;var Et=Object.getOwnPropertyDescriptor;var Rt=Object.getOwnPropertyNames;var Ct=Object.getPrototypeOf,jt=Object.prototype.hasOwnProperty;var ht=(t,e)=>{for(var r in e)O(t,r,{get:e[r],enumerable:!0})},ee=(t,e,r,o)=>{if(e&&
2
- typeof e=="object"||typeof e=="function")for(let n of Rt(e))!jt.call(t,n)&&n!==r&&
3
- O(t,n,{get:()=>e[n],enumerable:!(o=Et(e,n))||o.enumerable});return t};var Ot=(t,e,r)=>(r=t!=null?vt(Ct(t)):{},ee(e||!t||!t.__esModule?O(r,"default",{value:t,
4
- enumerable:!0}):r,t)),Tt=t=>ee(O({},"__esModule",{value:!0}),t);var rr={};ht(rr,{BucketServiceName:()=>i,BucketServiceType:()=>u,ObjectServiceName:()=>k,
5
- ObjectServiceType:()=>y,PolicyServiceName:()=>b,PolicyServiceType:()=>d,buildBucketArn:()=>V,
6
- createBucket:()=>Z,createBucketEventFunction:()=>J,createBucketObject:()=>tr,createBucketPolicy:()=>Yt,
7
- createBucketStateId:()=>$,getBucketDomain:()=>Xt,getBucketName:()=>E,getBucketObjectFiles:()=>Kt,
8
- getBucketObjectPath:()=>R,getBucketState:()=>H,getPolicyDocument:()=>W,isBucketDomain:()=>Qt,
9
- isBucketObjectState:()=>Ht,isBucketPolicyState:()=>er,isBucketState:()=>xe,registerTriggers:()=>Jt});
10
- module.exports=Tt(rr);var yt=require("@ez4/aws-common"),ft=require("@ez4/aws-identity"),gt=require("@ez4/aws-function"),
11
- dt=require("@ez4/storage/library"),St=require("@ez4/project/library");var Se=require("@ez4/aws-common");var me=require("@ez4/aws-common"),M=require("@ez4/aws-function"),x=require("@ez4/utils");var p=require("@ez4/aws-common"),c=require("@aws-sdk/client-s3");var i="AWS:S3/Bucket",u="aws:s3.bucket";var l=new c.S3Client({}),te=async t=>{p.Logger.logFetch(i,t);try{return!(await l.
12
- send(new c.ListObjectsV2Command({Bucket:t,MaxKeys:1}))).Contents?.length}catch(e){
13
- if(!(e instanceof c.NoSuchBucket))throw e;return 0}},re=async t=>{let{bucketName:e}=t;
14
- return p.Logger.logCreate(i,e),await l.send(new c.CreateBucketCommand({Bucket:e})),
15
- {bucketName:e}},oe=async t=>{p.Logger.logDelete(i,t);try{return await l.send(new c.DeleteBucketCommand(
16
- {Bucket:t})),!0}catch(e){if(!(e instanceof c.NoSuchBucket))throw e;return!1}},ne=async(t,e)=>{
17
- p.Logger.logTag(i,t),await l.send(new c.PutBucketTaggingCommand({Bucket:t,Tagging:{
18
- TagSet:(0,p.getTagList)({...e,ManagedBy:"EZ4"})}}))},se=async(t,e)=>{p.Logger.logUpdate(
19
- i,`${t} CORS`),await l.send(new c.PutBucketCorsCommand({Bucket:t,CORSConfiguration:{
1
+ "use strict";var Et=Object.create;var R=Object.defineProperty;var Rt=Object.getOwnPropertyDescriptor;var Ct=Object.getOwnPropertyNames;var jt=Object.getPrototypeOf,ht=Object.prototype.hasOwnProperty;var o=(t,e)=>R(t,"name",{value:e,configurable:!0});var Ot=(t,e)=>{for(var r in e)R(t,r,{get:e[r],enumerable:!0})},te=(t,e,r,n)=>{if(e&&
2
+ typeof e=="object"||typeof e=="function")for(let s of Ct(e))!ht.call(t,s)&&s!==r&&
3
+ R(t,s,{get:()=>e[s],enumerable:!(n=Rt(e,s))||n.enumerable});return t};var Tt=(t,e,r)=>(r=t!=null?Et(jt(t)):{},te(e||!t||!t.__esModule?R(r,"default",{value:t,
4
+ enumerable:!0}):r,t)),Nt=t=>te(R({},"__esModule",{value:!0}),t);var or={};Ot(or,{BucketServiceName:()=>p,BucketServiceType:()=>l,ObjectServiceName:()=>b,
5
+ ObjectServiceType:()=>f,PolicyServiceName:()=>x,PolicyServiceType:()=>S,buildBucketArn:()=>W,
6
+ createBucket:()=>J,createBucketEventFunction:()=>Q,createBucketObject:()=>rr,createBucketPolicy:()=>er,
7
+ createBucketStateId:()=>H,getBucketDomain:()=>Yt,getBucketName:()=>C,getBucketObjectFiles:()=>Ut,
8
+ getBucketObjectPath:()=>j,getBucketState:()=>K,getPolicyDocument:()=>Z,isBucketDomain:()=>Xt,
9
+ isBucketObjectState:()=>Kt,isBucketPolicyState:()=>tr,isBucketState:()=>Pe,registerTriggers:()=>Qt});
10
+ module.exports=Nt(or);var ft=require("@ez4/aws-common"),gt=require("@ez4/aws-identity"),dt=require("@ez4/aws-function"),
11
+ St=require("@ez4/storage/library"),kt=require("@ez4/project/library");var ke=require("@ez4/aws-common");var ue=require("@ez4/aws-common"),$=require("@ez4/aws-function"),P=require("@ez4/utils");var m=require("@ez4/aws-common"),a=require("@aws-sdk/client-s3");var p="AWS:S3/Bucket",l="aws:s3.bucket";var y=new a.S3Client({}),re=o(async t=>{m.Logger.logFetch(p,t);try{return!(await y.
12
+ send(new a.ListObjectsV2Command({Bucket:t,MaxKeys:1}))).Contents?.length}catch(e){
13
+ if(!(e instanceof a.NoSuchBucket))throw e;return 0}},"isBucketEmpty"),oe=o(async t=>{
14
+ let{bucketName:e}=t;return m.Logger.logCreate(p,e),await y.send(new a.CreateBucketCommand(
15
+ {Bucket:e})),{bucketName:e}},"createBucket"),ne=o(async t=>{m.Logger.logDelete(p,
16
+ t);try{return await y.send(new a.DeleteBucketCommand({Bucket:t})),!0}catch(e){if(!(e instanceof
17
+ a.NoSuchBucket))throw e;return!1}},"deleteBucket"),se=o(async(t,e)=>{m.Logger.logTag(
18
+ p,t),await y.send(new a.PutBucketTaggingCommand({Bucket:t,Tagging:{TagSet:(0,m.getTagList)(
19
+ {...e,ManagedBy:"EZ4"})}}))},"tagBucket"),ce=o(async(t,e)=>{m.Logger.logUpdate(p,
20
+ `${t} CORS`),await y.send(new a.PutBucketCorsCommand({Bucket:t,CORSConfiguration:{
20
21
  CORSRules:[{ID:"ID0",AllowedOrigins:e.allowOrigins,AllowedMethods:e.allowMethods,
21
22
  AllowedHeaders:e.allowHeaders,ExposeHeaders:e.exposeHeaders,MaxAgeSeconds:e.maxAge}]}}))},
22
- ce=async t=>{p.Logger.logDelete(i,`${t} CORS`);try{return await l.send(new c.DeleteBucketCorsCommand(
23
- {Bucket:t})),!0}catch(e){if(!(e instanceof c.NoSuchBucket))throw e;return!1}},ae=async(t,e)=>{
24
- p.Logger.logCreate(i,`${t} lifecycle`),await l.send(new c.PutBucketLifecycleConfigurationCommand(
25
- {Bucket:t,LifecycleConfiguration:{Rules:[{ID:"ID0",Status:c.ExpirationStatus.Enabled,
26
- Filter:{Prefix:"*"},Expiration:{Days:e}}]}}))},ie=async t=>{p.Logger.logDelete(i,
27
- `${t} lifecycle`);try{return await l.send(new c.DeleteBucketLifecycleCommand({Bucket:t})),
28
- !0}catch(e){if(!(e instanceof c.NoSuchBucket))throw e;return!1}},pe=async(t,e)=>{
29
- p.Logger.logUpdate(i,`${t} event notifications`);let{functionArn:r,eventsPath:o,
30
- eventsType:n}=e;await l.send(new c.PutBucketNotificationConfigurationCommand({Bucket:t,
31
- SkipDestinationValidation:!0,NotificationConfiguration:{...r&&{LambdaFunctionConfigurations:[
32
- {Id:"ID0",LambdaFunctionArn:r,Events:n,...o&&{Filter:{Key:{FilterRules:[{Name:"p\
33
- refix",Value:o}]}}}}]}}}))};var ue=()=>({equals:Nt,create:le,replace:zt,preview:Dt,update:Ft,delete:At}),Nt=(t,e)=>!!t.
34
- result&&t.result.bucketName===e.result?.bucketName,Dt=async(t,e)=>{let r={...t.parameters,
35
- dependencies:t.dependencies},o={...e.parameters,dependencies:e.dependencies},n=(0,x.deepCompare)(
36
- r,o);if(n.counts)return{...n,name:r.bucketName}},zt=async(t,e,r)=>{if(e.result)throw new me.ReplaceResourceError(
37
- i,t.entryId,e.entryId);return le(t,r)},le=async(t,e)=>{let r=t.parameters,o=(0,M.tryGetFunctionArn)(
38
- e),{bucketName:n}=await re(r);await ye(n,r,void 0),await fe(n,r,void 0),await ge(
39
- n,r.tags,void 0);let s={eventsPath:r.eventsPath,functionArn:o};return await de(n,
40
- s,{}),{bucketName:n,functionArn:o}},Ft=async(t,e,r)=>{let{result:o,parameters:n}=t;
41
- if(!o)return;let s=o.bucketName,a=(0,M.tryGetFunctionArn)(r),f=e.result?.functionArn;
42
- await ye(s,n,e.parameters),await fe(s,n,e.parameters),await ge(s,n.tags,e.parameters.
43
- tags);let w={eventsPath:n.eventsPath,functionArn:a},v={eventsPath:e.parameters.eventsPath,
44
- functionArn:f};return await de(s,w,v),{...o,functionArn:a}},At=async t=>{let e=t.
45
- result;e&&await te(e.bucketName)&&await oe(e.bucketName)},ye=async(t,e,r)=>{if(!(e.
46
- cors&&r?.cors&&(0,x.deepEqual)(e.cors,r.cors))){if(e.cors)return se(t,e.cors);if(r?.
47
- cors)return ce(t)}},fe=async(t,e,r)=>{if(e.autoExpireDays!==r?.autoExpireDays){if(e.
48
- autoExpireDays)return ae(t,e.autoExpireDays);if(r?.autoExpireDays)return ie(t)}},
49
- ge=async(t,e,r)=>{let o=e??{};!(0,x.deepEqual)(o,r??{})&&await ne(t,o)},de=async(t,e,r)=>{
50
- !(0,x.deepEqual)(e,r)&&await pe(t,{eventsType:["s3:ObjectCreated:*","s3:ObjectRe\
51
- moved:*"],...e})};var ke=()=>{(0,Se.registerProvider)(u,ue())};var je=require("@ez4/aws-common");var ve=require("@ez4/aws-common"),Ee=require("@ez4/utils");var be=require("@ez4/aws-common"),N=require("@ez4/utils");var T=class extends Error{constructor(e){super(`Bucket service ${e} wasn't found\
52
- .`)}};var $=t=>(0,N.hashData)(u,(0,N.toKebabCase)(t)),xe=t=>t.type===u,H=(t,e,r)=>{let o=t.
53
- getServiceState(e,r);if(!xe(o))throw new T(e);return o},E=(t,e,r)=>{let o=r.getDependencies(
54
- u)[0]?.result;if(!o?.bucketName)throw new be.IncompleteResourceError(t,e,"bucket\
55
- Name");return o.bucketName};var S=require("@aws-sdk/client-s3"),K=require("@ez4/aws-common");var b="AWS:S3/Policy",d="aws:s3.policy";var Pe=new S.S3Client({}),Be=async t=>{let{bucketName:e,role:r}=t;return K.Logger.
56
- logCreate(b,e),await Pe.send(new S.PutBucketPolicyCommand({Bucket:e,Policy:JSON.
57
- stringify(r)})),{bucketName:e}},we=async t=>{K.Logger.logDelete(b,t);try{return await Pe.
58
- send(new S.DeleteBucketPolicyCommand({Bucket:t})),!0}catch(e){if(!(e instanceof S.NoSuchBucket))
59
- throw e;return!1}};var Re=()=>({equals:It,create:Ce,replace:qt,preview:Lt,update:Mt,delete:$t}),It=(t,e)=>!!t.
60
- result&&t.result.bucketName===e.result?.bucketName,Lt=async(t,e)=>{let r={...t.parameters,
61
- dependencies:t.dependencies},o={...e.parameters,dependencies:e.dependencies},n=(0,Ee.deepCompare)(
62
- r,o,{exclude:{getRole:!0}});if(n.counts)return{...n,name:r.fromService}},qt=async(t,e,r)=>{
63
- if(e.result)throw new ve.ReplaceResourceError(b,t.entryId,e.entryId);return Ce(t,
64
- r)},Ce=async(t,e)=>{let r=t.parameters,o=E(b,"policy",e),n=await r.getRole(e);return await Be(
65
- {bucketName:o,role:n}),{bucketName:o}},Mt=async()=>{},$t=async t=>{let e=t.result;
66
- e&&await we(e.bucketName)};var he=()=>{(0,je.registerProvider)(d,Re())};var qe=require("@ez4/aws-common");var ze=require("node:fs/promises"),Fe=require("@ez4/aws-common"),D=require("@ez4/utils");var Oe=require("node:fs"),m=require("@aws-sdk/client-s3"),P=require("@ez4/aws-common"),
67
- Te=Ot(require("mime"),1);var k="AWS:S3/Object",y="aws:s3.object";var Ht=t=>t.type===y,R=(t,e)=>`${t}/${e}`,Kt=t=>t.getDependencies(y).map(({result:r,
68
- parameters:o})=>({lastModified:r?.lastModified,objectKey:o.objectKey}));var U=new m.S3Client({}),G=async(t,e)=>{let{objectKey:r,filePath:o}=e;P.Logger.logCreate(
69
- k,R(t,r));let n=Te.default.getType(o);return await U.send(new m.PutObjectCommand(
70
- {Bucket:t,Key:r,Body:(0,Oe.createReadStream)(o),...n&&{ContentType:n}})),{objectKey:r}},
71
- Ne=async(t,e,r)=>{P.Logger.logTag(k,R(t,e)),await U.send(new m.PutObjectTaggingCommand(
72
- {Bucket:t,Key:e,Tagging:{TagSet:(0,P.getTagList)({...r,ManagedBy:"EZ4"})}}))},De=async(t,e)=>{
73
- P.Logger.logDelete(k,R(t,e));try{return await U.send(new m.DeleteObjectCommand({
74
- Bucket:t,Key:e})),!0}catch(r){if(!(r instanceof m.NoSuchBucket))throw r;return!1}};var Ae=()=>({equals:Ut,create:Ie,replace:_t,preview:Gt,update:Vt,delete:Wt}),Ut=(t,e)=>!!t.
75
- result&&t.result.lastModified===e.result?.lastModified,Gt=async(t,e)=>{let r=t.parameters,
76
- o=e.parameters,n=(0,D.deepCompare)({...r,dependencies:t.dependencies,lastModified:await _(
77
- r.filePath)},{...o,dependencies:e.dependencies,lastModified:t.result?.lastModified});
78
- if(n.counts)return{...n,name:r.objectKey}},_t=async(t,e,r)=>{if(e.result)throw new Fe.ReplaceResourceError(
79
- k,t.entryId,e.entryId);return Ie(t,r)},Ie=async(t,e)=>{let r=t.parameters,o=E(k,
80
- "bucket",e),n=await _(r.filePath),{objectKey:s}=await G(o,r);return await Le(o,s,
81
- r.tags,t.parameters.tags),{lastModified:n,bucketName:o}},Vt=async(t,e)=>{let{result:r,
82
- parameters:o}=t;if(!r)return;let{objectKey:n,tags:s}=o,a=Zt(r,o,e.parameters);return await Le(
83
- r.bucketName,n,s,e.parameters.tags),a},Wt=async t=>{let{result:e,parameters:r}=t;
84
- e&&await De(e.bucketName,r.objectKey)},_=async t=>{let{mtime:e}=await(0,ze.stat)(
85
- t);return e.getTime()},Zt=async(t,e,r)=>{let o=await _(e.filePath);if(o<=t.lastModified&&
86
- e.filePath===r.filePath)return t;let{bucketName:n}=t,{objectKey:s}=r;return await G(
87
- n,{...e,objectKey:s}),{lastModified:o,bucketName:n}},Le=async(t,e,r,o)=>{let n=r??
88
- {};!(0,D.deepEqual)(n,o??{})&&await Ne(t,e,n)};var Me=()=>{(0,qe.registerProvider)(y,Ae())};var L=require("@ez4/storage/library");var He=require("@ez4/aws-function"),z=require("@ez4/stateful");var $e=require("@ez4/aws-identity"),V=t=>`arn:aws:s3:::${t}`,W=t=>(0,$e.createPolicyDocument)(
23
+ "updateCorsConfiguration"),ae=o(async t=>{m.Logger.logDelete(p,`${t} CORS`);try{
24
+ return await y.send(new a.DeleteBucketCorsCommand({Bucket:t})),!0}catch(e){if(!(e instanceof
25
+ a.NoSuchBucket))throw e;return!1}},"deleteCorsConfiguration"),ie=o(async(t,e)=>{
26
+ m.Logger.logCreate(p,`${t} lifecycle`),await y.send(new a.PutBucketLifecycleConfigurationCommand(
27
+ {Bucket:t,LifecycleConfiguration:{Rules:[{ID:"ID0",Status:a.ExpirationStatus.Enabled,
28
+ Filter:{Prefix:"*"},Expiration:{Days:e}}]}}))},"createLifecycle"),pe=o(async t=>{
29
+ m.Logger.logDelete(p,`${t} lifecycle`);try{return await y.send(new a.DeleteBucketLifecycleCommand(
30
+ {Bucket:t})),!0}catch(e){if(!(e instanceof a.NoSuchBucket))throw e;return!1}},"d\
31
+ eleteLifecycle"),me=o(async(t,e)=>{m.Logger.logUpdate(p,`${t} event notification\
32
+ s`);let{functionArn:r,eventsPath:n,eventsType:s}=e;await y.send(new a.PutBucketNotificationConfigurationCommand(
33
+ {Bucket:t,SkipDestinationValidation:!0,NotificationConfiguration:{...r&&{LambdaFunctionConfigurations:[
34
+ {Id:"ID0",LambdaFunctionArn:r,Events:s,...n&&{Filter:{Key:{FilterRules:[{Name:"p\
35
+ refix",Value:n}]}}}}]}}}))},"updateEventNotifications");var le=o(()=>({equals:Dt,create:ye,replace:Ft,preview:zt,update:At,delete:It}),"\
36
+ getBucketHandler"),Dt=o((t,e)=>!!t.result&&t.result.bucketName===e.result?.bucketName,
37
+ "equalsResource"),zt=o(async(t,e)=>{let r={...t.parameters,dependencies:t.dependencies},
38
+ n={...e.parameters,dependencies:e.dependencies},s=(0,P.deepCompare)(r,n);if(s.counts)
39
+ return{...s,name:r.bucketName}},"previewResource"),Ft=o(async(t,e,r)=>{if(e.result)
40
+ throw new ue.ReplaceResourceError(p,t.entryId,e.entryId);return ye(t,r)},"replac\
41
+ eResource"),ye=o(async(t,e)=>{let r=t.parameters,n=(0,$.tryGetFunctionArn)(e),{bucketName:s}=await oe(
42
+ r);await fe(s,r,void 0),await ge(s,r,void 0),await de(s,r.tags,void 0);let c={eventsPath:r.
43
+ eventsPath,functionArn:n};return await Se(s,c,{}),{bucketName:s,functionArn:n}},
44
+ "createResource"),At=o(async(t,e,r)=>{let{result:n,parameters:s}=t;if(!n)return;
45
+ let c=n.bucketName,i=(0,$.tryGetFunctionArn)(r),g=e.result?.functionArn;await fe(
46
+ c,s,e.parameters),await ge(c,s,e.parameters),await de(c,s.tags,e.parameters.tags);
47
+ let v={eventsPath:s.eventsPath,functionArn:i},E={eventsPath:e.parameters.eventsPath,
48
+ functionArn:g};return await Se(c,v,E),{...n,functionArn:i}},"updateResource"),It=o(
49
+ async t=>{let e=t.result;e&&await re(e.bucketName)&&await ne(e.bucketName)},"del\
50
+ eteResource"),fe=o(async(t,e,r)=>{if(!(e.cors&&r?.cors&&(0,P.deepEqual)(e.cors,r.
51
+ cors))){if(e.cors)return ce(t,e.cors);if(r?.cors)return ae(t)}},"checkCorsUpdate\
52
+ s"),ge=o(async(t,e,r)=>{if(e.autoExpireDays!==r?.autoExpireDays){if(e.autoExpireDays)
53
+ return ie(t,e.autoExpireDays);if(r?.autoExpireDays)return pe(t)}},"checkLifecycl\
54
+ eUpdates"),de=o(async(t,e,r)=>{let n=e??{};!(0,P.deepEqual)(n,r??{})&&await se(t,
55
+ n)},"checkTagUpdates"),Se=o(async(t,e,r)=>{!(0,P.deepEqual)(e,r)&&await me(t,{eventsType:[
56
+ "s3:ObjectCreated:*","s3:ObjectRemoved:*"],...e})},"checkEventUpdates");var be=o(()=>{(0,ke.registerProvider)(l,le())},"registerBucketProvider");var he=require("@ez4/aws-common");var Ee=require("@ez4/aws-common"),Re=require("@ez4/utils");var xe=require("@ez4/aws-common"),D=require("@ez4/utils");var N=class extends Error{static{o(this,"BucketNotFoundError")}constructor(e){super(
57
+ `Bucket service ${e} wasn't found.`)}};var H=o(t=>(0,D.hashData)(l,(0,D.toKebabCase)(t)),"createBucketStateId"),Pe=o(t=>t.
58
+ type===l,"isBucketState"),K=o((t,e,r)=>{let n=t.getServiceState(e,r);if(!Pe(n))throw new N(
59
+ e);return n},"getBucketState"),C=o((t,e,r)=>{let n=r.getDependencies(l)[0]?.result;
60
+ if(!n?.bucketName)throw new xe.IncompleteResourceError(t,e,"bucketName");return n.
61
+ bucketName},"getBucketName");var k=require("@aws-sdk/client-s3"),U=require("@ez4/aws-common");var x="AWS:S3/Policy",S="aws:s3.policy";var Be=new k.S3Client({}),we=o(async t=>{let{bucketName:e,role:r}=t;return U.Logger.
62
+ logCreate(x,e),await Be.send(new k.PutBucketPolicyCommand({Bucket:e,Policy:JSON.
63
+ stringify(r)})),{bucketName:e}},"createPolicy"),ve=o(async t=>{U.Logger.logDelete(
64
+ x,t);try{return await Be.send(new k.DeleteBucketPolicyCommand({Bucket:t})),!0}catch(e){
65
+ if(!(e instanceof k.NoSuchBucket))throw e;return!1}},"deletePolicy");var Ce=o(()=>({equals:Lt,create:je,replace:Mt,preview:qt,update:$t,delete:Ht}),"\
66
+ getPolicyHandler"),Lt=o((t,e)=>!!t.result&&t.result.bucketName===e.result?.bucketName,
67
+ "equalsResource"),qt=o(async(t,e)=>{let r={...t.parameters,dependencies:t.dependencies},
68
+ n={...e.parameters,dependencies:e.dependencies},s=(0,Re.deepCompare)(r,n,{exclude:{
69
+ getRole:!0}});if(s.counts)return{...s,name:r.fromService}},"previewResource"),Mt=o(
70
+ async(t,e,r)=>{if(e.result)throw new Ee.ReplaceResourceError(x,t.entryId,e.entryId);
71
+ return je(t,r)},"replaceResource"),je=o(async(t,e)=>{let r=t.parameters,n=C(x,"p\
72
+ olicy",e),s=await r.getRole(e);return await we({bucketName:n,role:s}),{bucketName:n}},
73
+ "createResource"),$t=o(async()=>{},"updateResource"),Ht=o(async t=>{let e=t.result;
74
+ e&&await ve(e.bucketName)},"deleteResource");var Oe=o(()=>{(0,he.registerProvider)(S,Ce())},"registerPolicyProvider");var Me=require("@ez4/aws-common");var Fe=require("node:fs/promises"),Ae=require("@ez4/aws-common"),z=require("@ez4/utils");var Te=require("node:fs"),u=require("@aws-sdk/client-s3"),B=require("@ez4/aws-common"),
75
+ Ne=Tt(require("mime"),1);var b="AWS:S3/Object",f="aws:s3.object";var Kt=o(t=>t.type===f,"isBucketObjectState"),j=o((t,e)=>`${t}/${e}`,"getBucketO\
76
+ bjectPath"),Ut=o(t=>t.getDependencies(f).map(({result:r,parameters:n})=>({lastModified:r?.
77
+ lastModified,objectKey:n.objectKey})),"getBucketObjectFiles");var G=new u.S3Client({}),_=o(async(t,e)=>{let{objectKey:r,filePath:n}=e;B.Logger.
78
+ logCreate(b,j(t,r));let s=Ne.default.getType(n);return await G.send(new u.PutObjectCommand(
79
+ {Bucket:t,Key:r,Body:(0,Te.createReadStream)(n),...s&&{ContentType:s}})),{objectKey:r}},
80
+ "putObject"),De=o(async(t,e,r)=>{B.Logger.logTag(b,j(t,e)),await G.send(new u.PutObjectTaggingCommand(
81
+ {Bucket:t,Key:e,Tagging:{TagSet:(0,B.getTagList)({...r,ManagedBy:"EZ4"})}}))},"t\
82
+ agObject"),ze=o(async(t,e)=>{B.Logger.logDelete(b,j(t,e));try{return await G.send(
83
+ new u.DeleteObjectCommand({Bucket:t,Key:e})),!0}catch(r){if(!(r instanceof u.NoSuchBucket))
84
+ throw r;return!1}},"deleteObject");var Ie=o(()=>({equals:Gt,create:Le,replace:Vt,preview:_t,update:Wt,delete:Zt}),"\
85
+ getObjectHandler"),Gt=o((t,e)=>!!t.result&&t.result.lastModified===e.result?.lastModified,
86
+ "equalsResource"),_t=o(async(t,e)=>{let r=t.parameters,n=e.parameters,s=(0,z.deepCompare)(
87
+ {...r,dependencies:t.dependencies,lastModified:await V(r.filePath)},{...n,dependencies:e.
88
+ dependencies,lastModified:t.result?.lastModified});if(s.counts)return{...s,name:r.
89
+ objectKey}},"previewResource"),Vt=o(async(t,e,r)=>{if(e.result)throw new Ae.ReplaceResourceError(
90
+ b,t.entryId,e.entryId);return Le(t,r)},"replaceResource"),Le=o(async(t,e)=>{let r=t.
91
+ parameters,n=C(b,"bucket",e),s=await V(r.filePath),{objectKey:c}=await _(n,r);return await qe(
92
+ n,c,r.tags,t.parameters.tags),{lastModified:s,bucketName:n}},"createResource"),Wt=o(
93
+ async(t,e)=>{let{result:r,parameters:n}=t;if(!r)return;let{objectKey:s,tags:c}=n,
94
+ i=Jt(r,n,e.parameters);return await qe(r.bucketName,s,c,e.parameters.tags),i},"u\
95
+ pdateResource"),Zt=o(async t=>{let{result:e,parameters:r}=t;e&&await ze(e.bucketName,
96
+ r.objectKey)},"deleteResource"),V=o(async t=>{let{mtime:e}=await(0,Fe.stat)(t);return e.
97
+ getTime()},"getLastModifiedTime"),Jt=o(async(t,e,r)=>{let n=await V(e.filePath);
98
+ if(n<=t.lastModified&&e.filePath===r.filePath)return t;let{bucketName:s}=t,{objectKey:c}=r;
99
+ return await _(s,{...e,objectKey:c}),{lastModified:n,bucketName:s}},"checkObject\
100
+ Updates"),qe=o(async(t,e,r,n)=>{let s=r??{};!(0,z.deepEqual)(s,n??{})&&await De(
101
+ t,e,s)},"checkTagUpdates");var $e=o(()=>{(0,Me.registerProvider)(f,Ie())},"registerObjectProvider");var q=require("@ez4/storage/library");var Ke=require("@ez4/aws-function"),F=require("@ez4/stateful");var He=require("@ez4/aws-identity");var W=o(t=>`arn:aws:s3:::${t}`,"buildBucketArn"),Z=o(t=>(0,He.createPolicyDocument)(
89
102
  [{resourceIds:[`arn:aws:s3:::${t}-*`,`arn:aws:s3:::${t}-*/*`],permissions:["s3:L\
90
- istBucket","s3:PutObject","s3:GetObject","s3:DeleteObject"]}]);var Z=(t,e,r)=>{let o=r.bucketName,n=$(o),s=(0,z.attachEntry)(t,{type:u,entryId:n,
91
- dependencies:[],parameters:r});return e&&((0,He.createPermission)(t,s,e,{fromService:r.
92
- bucketName,getPermission:()=>({principal:"s3.amazonaws.com",sourceArn:V(o)})}),(0,z.linkDependency)(
93
- t,s.entryId,e.entryId)),s};var I=require("@ez4/aws-function"),Xe=require("@ez4/project/library"),X=require("@ez4/aws-identity"),
94
- Ye=require("@ez4/aws-logs");var We=require("@ez4/aws-function");var Ke=require("node:path"),Ue=require("@ez4/project/library"),Ge=require("@ez4/aws-function"),
95
- _e=require("@ez4/aws-common"),Ve=async(t,e)=>{let{extras:r,debug:o,handler:n,listener:s}=e,
96
- a=(0,Ue.getDefinitionsObject)(t);return(0,_e.getFunctionBundle)(Ge.MappingServiceName,
97
- {templateFile:(0,Ke.join)(__dirname,"../lib/event.ts"),filePrefix:"s3",define:{...a},
98
- handler:n,listener:s,extras:r,debug:o})};var J=(t,e,r,o)=>{let{handler:n}=o;return(0,We.createFunction)(t,e,r,{handlerName:"\
99
- s3EntryPoint",sourceFile:n.sourceFile,functionName:o.functionName,description:o.
100
- description,variables:o.variables,timeout:o.timeout,memory:o.memory,debug:o.debug,
101
- tags:o.tags,getFunctionBundle:s=>{let a=s.getDependencies();return Ve(a,o)},getFunctionFiles:()=>[
102
- n.sourceFile,n.dependencies]})};var F=require("@ez4/project/library"),Ze=require("@ez4/aws-common"),A=require("@ez4/utils"),
103
- Je=async(t,e)=>{if(t.globalName)return(0,F.getServiceName)(t.globalName,e);let r=(0,F.getServiceName)(
104
- t,e),o=await(0,Ze.getRandomName)(16);return`${r.substring(0,46)}-${o}`},Q=(t,e)=>`${(0,A.toKebabCase)(
105
- t.name)}-${(0,A.toKebabCase)(e)}`,Qe=(t,e,r)=>`${(0,F.getServiceName)(t,r)}-${(0,A.toKebabCase)(
106
- e)}`;var C=class extends Error{constructor(){super("Execution role for S3 is missing.")}};var j;(o=>(o.LogRetention=90,o.Timeout=90,o.Memory=192))(j||={});var et=(t,e,r,o)=>{if(!e.events)return;if(!o.role||!(0,X.isRoleState)(o.role))throw new C;
107
- let{handler:n,listener:s,logRetention:a,timeout:f,memory:w,variables:v}=e.events,
108
- h=Q(e,n.name),g=(0,I.tryGetFunctionState)(o,h,r);if(g)return g;let Y=Qe(e,n.name,
109
- r),wt=(0,Ye.createLogGroup)(t,{retention:a??j.LogRetention,groupName:Y,tags:r.tags});
110
- return g=J(t,o.role,wt,{functionName:Y,description:n.description,timeout:f??j.Timeout,
111
- memory:w??j.Memory,extras:e.extras,debug:r.debug,tags:r.tags,variables:{...r.variables,
112
- ...e.variables,...v},handler:{dependencies:o.getDependencies(n.file),functionName:n.
113
- name,sourceFile:n.file},...s&&{listener:{functionName:s.name,sourceFile:s.file}}}),
114
- o.setServiceState(g,h,r),g},tt=(t,e,r,o)=>{if(!e.extras||!e.events)return;if(!o.
115
- role||!(0,X.isRoleState)(o.role))throw new C;let{handler:n}=e.events,s=Q(e,n.name),
116
- a=(0,I.getFunctionState)(o,s,r);(0,Xe.linkServiceExtras)(t,a.entryId,e.extras)};var rt=require("node:fs/promises"),B=require("node:path"),ot=require("@ez4/aws-bucket"),
117
- nt=async(t,e,r)=>{let o=process.cwd(),n=(0,B.join)(o,r),s=await(0,rt.readdir)(n,
118
- {withFileTypes:!0,recursive:!0});for(let a of s){if(!a.isFile())continue;let f=(0,B.join)(
119
- a.parentPath,a.name);(0,ot.createBucketObject)(t,e,{objectKey:(0,B.relative)(n,f),
120
- filePath:(0,B.relative)(o,f)})}};var st=(t,e,r)=>{let o=H(t,e.name,r);return{entryIds:[o.entryId],constructor:`ma\
121
- ke('${o.parameters.bucketName}')`,from:"@ez4/aws-bucket/client",module:"Client"}};var ct=t=>{let{service:e,options:r,context:o}=t;return(0,L.isBucketService)(e)?st(
122
- o,e,r):null},at=async t=>{let{state:e,service:r,options:o,context:n}=t;if(!(0,L.isBucketService)(
123
- r))return;let{localPath:s,autoExpireDays:a,events:f,cors:w}=r,v=await Je(r,o),h=et(
124
- e,r,o,n),g=Z(e,h,{eventsPath:f?.path,tags:o.tags,bucketName:v,autoExpireDays:a,localPath:s,
125
- cors:w});n.setServiceState(g,r,o),s&&await nt(e,g,s)},it=t=>{let{state:e,service:r,
126
- options:o,context:n}=t;(0,L.isBucketService)(r)&&tt(e,r,o,n)};var pt=require("@ez4/storage/library"),q=require("@ez4/aws-identity"),mt=require("@ez4/project/library");var ut=t=>{let{state:e,serviceType:r,options:o}=t;if(r!==pt.ServiceType)return null;
127
- let n=(0,mt.getServiceName)("",o),s=`${n}-bucket-policy`;return(0,q.tryGetPolicy)(
128
- e,s)??(0,q.createPolicy)(e,{tags:o.tags,policyDocument:W(n),policyName:s})};var lt=!1,Jt=()=>{lt||((0,yt.registerTriggers)(),(0,ft.registerTriggers)(),(0,gt.registerTriggers)(),
129
- (0,dt.registerTriggers)(),(0,St.createTrigger)("@ez4/aws-bucket",{"deploy:prepar\
130
- eExecutionPolicy":ut,"deploy:prepareLinkedService":ct,"deploy:prepareResources":at,
131
- "deploy:connectResources":it}),ke(),he(),Me(),lt=!0)};var kt=require("@ez4/aws-identity"),Qt=t=>/(.+)\.s3\.(.+)\.amazonaws\.com/i.test(
132
- t),Xt=async t=>{let e=await(0,kt.getRegion)();return`${t}.s3.${e}.amazonaws.com`};var bt=require("@ez4/stateful"),xt=require("@ez4/utils");var Yt=(t,e,r,o)=>{let n=(0,xt.hashData)(d,e.entryId,r.entryId);return(0,bt.attachEntry)(
133
- t,{type:d,entryId:n,dependencies:[e.entryId,r.entryId],parameters:o})};var er=t=>t.type===d;var Pt=require("@ez4/stateful"),Bt=require("@ez4/utils");var tr=(t,e,r)=>{let o=r.objectKey,n=(0,Bt.hashData)(y,e.entryId,o);return(0,Pt.attachEntry)(
134
- t,{type:y,entryId:n,dependencies:[e.entryId],parameters:r})};0&&(module.exports={BucketServiceName,BucketServiceType,ObjectServiceName,ObjectServiceType,
103
+ istBucket","s3:PutObject","s3:GetObject","s3:DeleteObject"]}]),"getPolicyDocumen\
104
+ t");var J=o((t,e,r)=>{let n=r.bucketName,s=H(n),c=(0,F.attachEntry)(t,{type:l,entryId:s,
105
+ dependencies:[],parameters:r});return e&&((0,Ke.createPermission)(t,c,e,{fromService:r.
106
+ bucketName,getPermission:o(()=>({principal:"s3.amazonaws.com",sourceArn:W(n)}),"\
107
+ getPermission")}),(0,F.linkDependency)(t,c.entryId,e.entryId)),c},"createBucket");var L=require("@ez4/aws-function"),Ye=require("@ez4/project/library"),Y=require("@ez4/aws-identity"),
108
+ et=require("@ez4/aws-logs");var Ze=require("@ez4/aws-function");var Ue=require("node:path"),Ge=require("@ez4/project/library"),_e=require("@ez4/aws-function"),
109
+ Ve=require("@ez4/aws-common");var We=o(async(t,e)=>{let{extras:r,debug:n,handler:s,listener:c}=e,i=(0,Ge.getDefinitionsObject)(
110
+ t);return(0,Ve.getFunctionBundle)(_e.MappingServiceName,{templateFile:(0,Ue.join)(
111
+ __dirname,"../lib/event.ts"),filePrefix:"s3",define:{...i},handler:s,listener:c,
112
+ extras:r,debug:n})},"bundleBucketEventFunction");var Q=o((t,e,r,n)=>{let{handler:s}=n;return(0,Ze.createFunction)(t,e,r,{handlerName:"\
113
+ s3EntryPoint",sourceFile:s.sourceFile,functionName:n.functionName,description:n.
114
+ description,variables:n.variables,timeout:n.timeout,memory:n.memory,debug:n.debug,
115
+ tags:n.tags,getFunctionBundle:o(c=>{let i=c.getDependencies();return We(i,n)},"g\
116
+ etFunctionBundle"),getFunctionFiles:o(()=>[s.sourceFile,s.dependencies],"getFunc\
117
+ tionFiles")})},"createBucketEventFunction");var A=require("@ez4/project/library"),Je=require("@ez4/aws-common"),I=require("@ez4/utils");var Qe=o(async(t,e)=>{if(t.globalName)return(0,A.getServiceName)(t.globalName,e);
118
+ let r=(0,A.getServiceName)(t,e),n=await(0,Je.getRandomName)(16);return`${r.substring(
119
+ 0,46)}-${n}`},"getBucketName"),X=o((t,e)=>`${(0,I.toKebabCase)(t.name)}-${(0,I.toKebabCase)(
120
+ e)}`,"getInternalName"),Xe=o((t,e,r)=>`${(0,A.getServiceName)(t,r)}-${(0,I.toKebabCase)(
121
+ e)}`,"getFunctionName");var h=class extends Error{static{o(this,"RoleMissingError")}constructor(){super(
122
+ "Execution role for S3 is missing.")}};var O;(n=>(n.LogRetention=90,n.Timeout=90,n.Memory=192))(O||={});var tt=o((t,e,r,n)=>{if(!e.events)return;if(!n.role||!(0,Y.isRoleState)(n.role))
123
+ throw new h;let{handler:s,listener:c,logRetention:i,timeout:g,memory:v,variables:E}=e.
124
+ events,T=X(e,s.name),d=(0,L.tryGetFunctionState)(n,T,r);if(d)return d;let ee=Xe(
125
+ e,s.name,r),vt=(0,et.createLogGroup)(t,{retention:i??O.LogRetention,groupName:ee,
126
+ tags:r.tags});return d=Q(t,n.role,vt,{functionName:ee,description:s.description,
127
+ timeout:g??O.Timeout,memory:v??O.Memory,extras:e.extras,debug:r.debug,tags:r.tags,
128
+ variables:{...r.variables,...e.variables,...E},handler:{dependencies:n.getDependencies(
129
+ s.file),functionName:s.name,sourceFile:s.file},...c&&{listener:{functionName:c.name,
130
+ sourceFile:c.file}}}),n.setServiceState(d,T,r),d},"prepareEvents"),rt=o((t,e,r,n)=>{
131
+ if(!e.extras||!e.events)return;if(!n.role||!(0,Y.isRoleState)(n.role))throw new h;
132
+ let{handler:s}=e.events,c=X(e,s.name),i=(0,L.getFunctionState)(n,c,r);(0,Ye.linkServiceExtras)(
133
+ t,i.entryId,e.extras)},"connectEvents");var ot=require("node:fs/promises"),w=require("node:path"),nt=require("@ez4/aws-bucket");var st=o(async(t,e,r)=>{let n=process.cwd(),s=(0,w.join)(n,r),c=await(0,ot.readdir)(
134
+ s,{withFileTypes:!0,recursive:!0});for(let i of c){if(!i.isFile())continue;let g=(0,w.join)(
135
+ i.parentPath,i.name);(0,nt.createBucketObject)(t,e,{objectKey:(0,w.relative)(s,g),
136
+ filePath:(0,w.relative)(n,g)})}},"prepareLocalContent");var ct=o((t,e,r)=>{let n=K(t,e.name,r);return{entryIds:[n.entryId],constructor:`\
137
+ make('${n.parameters.bucketName}')`,from:"@ez4/aws-bucket/client",module:"Client"}},
138
+ "prepareLinkedClient");var at=o(t=>{let{service:e,options:r,context:n}=t;return(0,q.isBucketService)(e)?
139
+ ct(n,e,r):null},"prepareLinkedServices"),it=o(async t=>{let{state:e,service:r,options:n,
140
+ context:s}=t;if(!(0,q.isBucketService)(r))return;let{localPath:c,autoExpireDays:i,
141
+ events:g,cors:v}=r,E=await Qe(r,n),T=tt(e,r,n,s),d=J(e,T,{eventsPath:g?.path,tags:n.
142
+ tags,bucketName:E,autoExpireDays:i,localPath:c,cors:v});s.setServiceState(d,r,n),
143
+ c&&await st(e,d,c)},"prepareBucketServices"),pt=o(t=>{let{state:e,service:r,options:n,
144
+ context:s}=t;(0,q.isBucketService)(r)&&rt(e,r,n,s)},"connectBucketServices");var mt=require("@ez4/storage/library"),M=require("@ez4/aws-identity"),ut=require("@ez4/project/library");var lt=o(t=>{let{state:e,serviceType:r,options:n}=t;if(r!==mt.ServiceType)return null;
145
+ let s=(0,ut.getServiceName)("",n),c=`${s}-bucket-policy`;return(0,M.tryGetPolicy)(
146
+ e,c)??(0,M.createPolicy)(e,{tags:n.tags,policyDocument:Z(s),policyName:c})},"pre\
147
+ pareExecutionPolicy");var yt=!1,Qt=o(()=>{yt||((0,ft.registerTriggers)(),(0,gt.registerTriggers)(),(0,dt.registerTriggers)(),
148
+ (0,St.registerTriggers)(),(0,kt.createTrigger)("@ez4/aws-bucket",{"deploy:prepar\
149
+ eExecutionPolicy":lt,"deploy:prepareLinkedService":at,"deploy:prepareResources":it,
150
+ "deploy:connectResources":pt}),be(),Oe(),$e(),yt=!0)},"registerTriggers");var bt=require("@ez4/aws-identity");var Xt=o(t=>/(.+)\.s3\.(.+)\.amazonaws\.com/i.test(t),"isBucketDomain"),Yt=o(async t=>{
151
+ let e=await(0,bt.getRegion)();return`${t}.s3.${e}.amazonaws.com`},"getBucketDoma\
152
+ in");var xt=require("@ez4/stateful"),Pt=require("@ez4/utils");var er=o((t,e,r,n)=>{let s=(0,Pt.hashData)(S,e.entryId,r.entryId);return(0,xt.attachEntry)(
153
+ t,{type:S,entryId:s,dependencies:[e.entryId,r.entryId],parameters:n})},"createBu\
154
+ cketPolicy");var tr=o(t=>t.type===S,"isBucketPolicyState");var Bt=require("@ez4/stateful"),wt=require("@ez4/utils");var rr=o((t,e,r)=>{let n=r.objectKey,s=(0,wt.hashData)(f,e.entryId,n);return(0,Bt.attachEntry)(
155
+ t,{type:f,entryId:s,dependencies:[e.entryId],parameters:r})},"createBucketObject");0&&(module.exports={BucketServiceName,BucketServiceType,ObjectServiceName,ObjectServiceType,
135
156
  PolicyServiceName,PolicyServiceType,buildBucketArn,createBucket,createBucketEventFunction,
136
157
  createBucketObject,createBucketPolicy,createBucketStateId,getBucketDomain,getBucketName,
137
158
  getBucketObjectFiles,getBucketObjectPath,getBucketState,getPolicyDocument,isBucketDomain,
package/dist/main.mjs CHANGED
@@ -1,128 +1,148 @@
1
- import{registerTriggers as tr}from"@ez4/aws-common";import{registerTriggers as rr}from"@ez4/aws-identity";
2
- import{registerTriggers as or}from"@ez4/aws-function";import{registerTriggers as nr}from"@ez4/storage/library";
3
- import{createTrigger as sr}from"@ez4/project/library";import{registerProvider as Ye}from"@ez4/aws-common";import{ReplaceResourceError as _e}from"@ez4/aws-common";import{tryGetFunctionArn as G}from"@ez4/aws-function";
4
- import{deepCompare as Ve,deepEqual as R}from"@ez4/utils";import{getTagList as ze,Logger as i}from"@ez4/aws-common";import{S3Client as Fe,
5
- ListObjectsV2Command as Ae,CreateBucketCommand as Ie,DeleteBucketCommand as Le,PutBucketTaggingCommand as qe,
6
- PutBucketCorsCommand as Me,DeleteBucketCorsCommand as $e,PutBucketLifecycleConfigurationCommand as He,
7
- DeleteBucketLifecycleCommand as Ke,PutBucketNotificationConfigurationCommand as Ue,
8
- ExpirationStatus as Ge,NoSuchBucket as B}from"@aws-sdk/client-s3";var a="AWS:S3/Bucket",l="aws:s3.bucket";var p=new Fe({}),A=async t=>{i.logFetch(a,t);try{return!(await p.send(new Ae({Bucket:t,
9
- MaxKeys:1}))).Contents?.length}catch(e){if(!(e instanceof B))throw e;return 0}},
10
- I=async t=>{let{bucketName:e}=t;return i.logCreate(a,e),await p.send(new Ie({Bucket:e})),
11
- {bucketName:e}},L=async t=>{i.logDelete(a,t);try{return await p.send(new Le({Bucket:t})),
12
- !0}catch(e){if(!(e instanceof B))throw e;return!1}},q=async(t,e)=>{i.logTag(a,t),
13
- await p.send(new qe({Bucket:t,Tagging:{TagSet:ze({...e,ManagedBy:"EZ4"})}}))},M=async(t,e)=>{
14
- i.logUpdate(a,`${t} CORS`),await p.send(new Me({Bucket:t,CORSConfiguration:{CORSRules:[
1
+ var Fe=Object.defineProperty;var o=(t,e)=>Fe(t,"name",{value:e,configurable:!0});import{registerTriggers as or}from"@ez4/aws-common";import{registerTriggers as nr}from"@ez4/aws-identity";
2
+ import{registerTriggers as sr}from"@ez4/aws-function";import{registerTriggers as cr}from"@ez4/storage/library";
3
+ import{createTrigger as ar}from"@ez4/project/library";import{registerProvider as tt}from"@ez4/aws-common";import{ReplaceResourceError as We}from"@ez4/aws-common";import{tryGetFunctionArn as _}from"@ez4/aws-function";
4
+ import{deepCompare as Ze,deepEqual as C}from"@ez4/utils";import{getTagList as Ae,Logger as p}from"@ez4/aws-common";import{S3Client as Ie,
5
+ ListObjectsV2Command as Le,CreateBucketCommand as qe,DeleteBucketCommand as Me,PutBucketTaggingCommand as $e,
6
+ PutBucketCorsCommand as He,DeleteBucketCorsCommand as Ke,PutBucketLifecycleConfigurationCommand as Ue,
7
+ DeleteBucketLifecycleCommand as Ge,PutBucketNotificationConfigurationCommand as _e,
8
+ ExpirationStatus as Ve,NoSuchBucket as w}from"@aws-sdk/client-s3";var i="AWS:S3/Bucket",y="aws:s3.bucket";var m=new Ie({}),I=o(async t=>{p.logFetch(i,t);try{return!(await m.send(new Le({
9
+ Bucket:t,MaxKeys:1}))).Contents?.length}catch(e){if(!(e instanceof w))throw e;return 0}},
10
+ "isBucketEmpty"),L=o(async t=>{let{bucketName:e}=t;return p.logCreate(i,e),await m.
11
+ send(new qe({Bucket:e})),{bucketName:e}},"createBucket"),q=o(async t=>{p.logDelete(
12
+ i,t);try{return await m.send(new Me({Bucket:t})),!0}catch(e){if(!(e instanceof w))
13
+ throw e;return!1}},"deleteBucket"),M=o(async(t,e)=>{p.logTag(i,t),await m.send(new $e(
14
+ {Bucket:t,Tagging:{TagSet:Ae({...e,ManagedBy:"EZ4"})}}))},"tagBucket"),$=o(async(t,e)=>{
15
+ p.logUpdate(i,`${t} CORS`),await m.send(new He({Bucket:t,CORSConfiguration:{CORSRules:[
15
16
  {ID:"ID0",AllowedOrigins:e.allowOrigins,AllowedMethods:e.allowMethods,AllowedHeaders:e.
16
- allowHeaders,ExposeHeaders:e.exposeHeaders,MaxAgeSeconds:e.maxAge}]}}))},$=async t=>{
17
- i.logDelete(a,`${t} CORS`);try{return await p.send(new $e({Bucket:t})),!0}catch(e){
18
- if(!(e instanceof B))throw e;return!1}},H=async(t,e)=>{i.logCreate(a,`${t} lifec\
19
- ycle`),await p.send(new He({Bucket:t,LifecycleConfiguration:{Rules:[{ID:"ID0",Status:Ge.
20
- Enabled,Filter:{Prefix:"*"},Expiration:{Days:e}}]}}))},K=async t=>{i.logDelete(a,
21
- `${t} lifecycle`);try{return await p.send(new Ke({Bucket:t})),!0}catch(e){if(!(e instanceof
22
- B))throw e;return!1}},U=async(t,e)=>{i.logUpdate(a,`${t} event notifications`);let{
23
- functionArn:r,eventsPath:o,eventsType:n}=e;await p.send(new Ue({Bucket:t,SkipDestinationValidation:!0,
24
- NotificationConfiguration:{...r&&{LambdaFunctionConfigurations:[{Id:"ID0",LambdaFunctionArn:r,
25
- Events:n,...o&&{Filter:{Key:{FilterRules:[{Name:"prefix",Value:o}]}}}}]}}}))};var _=()=>({equals:We,create:V,replace:Je,preview:Ze,update:Qe,delete:Xe}),We=(t,e)=>!!t.
26
- result&&t.result.bucketName===e.result?.bucketName,Ze=async(t,e)=>{let r={...t.parameters,
27
- dependencies:t.dependencies},o={...e.parameters,dependencies:e.dependencies},n=Ve(
28
- r,o);if(n.counts)return{...n,name:r.bucketName}},Je=async(t,e,r)=>{if(e.result)throw new _e(
29
- a,t.entryId,e.entryId);return V(t,r)},V=async(t,e)=>{let r=t.parameters,o=G(e),{
30
- bucketName:n}=await I(r);await W(n,r,void 0),await Z(n,r,void 0),await J(n,r.tags,
31
- void 0);let s={eventsPath:r.eventsPath,functionArn:o};return await Q(n,s,{}),{bucketName:n,
32
- functionArn:o}},Qe=async(t,e,r)=>{let{result:o,parameters:n}=t;if(!o)return;let s=o.
33
- bucketName,c=G(r),m=e.result?.functionArn;await W(s,n,e.parameters),await Z(s,n,
34
- e.parameters),await J(s,n.tags,e.parameters.tags);let S={eventsPath:n.eventsPath,
35
- functionArn:c},k={eventsPath:e.parameters.eventsPath,functionArn:m};return await Q(
36
- s,S,k),{...o,functionArn:c}},Xe=async t=>{let e=t.result;e&&await A(e.bucketName)&&
37
- await L(e.bucketName)},W=async(t,e,r)=>{if(!(e.cors&&r?.cors&&R(e.cors,r.cors))){
38
- if(e.cors)return M(t,e.cors);if(r?.cors)return $(t)}},Z=async(t,e,r)=>{if(e.autoExpireDays!==
39
- r?.autoExpireDays){if(e.autoExpireDays)return H(t,e.autoExpireDays);if(r?.autoExpireDays)
40
- return K(t)}},J=async(t,e,r)=>{let o=e??{};!R(o,r??{})&&await q(t,o)},Q=async(t,e,r)=>{
41
- !R(e,r)&&await U(t,{eventsType:["s3:ObjectCreated:*","s3:ObjectRemoved:*"],...e})};var X=()=>{Ye(l,_())};import{registerProvider as gt}from"@ez4/aws-common";import{ReplaceResourceError as it}from"@ez4/aws-common";import{deepCompare as pt}from"@ez4/utils";import{IncompleteResourceError as et}from"@ez4/aws-common";import{hashData as tt,
42
- toKebabCase as rt}from"@ez4/utils";var w=class extends Error{constructor(e){super(`Bucket service ${e} wasn't found\
43
- .`)}};var Y=t=>tt(l,rt(t)),ot=t=>t.type===l,ee=(t,e,r)=>{let o=t.getServiceState(e,r);
44
- if(!ot(o))throw new w(e);return o},v=(t,e,r)=>{let o=r.getDependencies(l)[0]?.result;
45
- if(!o?.bucketName)throw new et(t,e,"bucketName");return o.bucketName};import{S3Client as nt,PutBucketPolicyCommand as st,DeleteBucketPolicyCommand as ct,
46
- NoSuchBucket as at}from"@aws-sdk/client-s3";import{Logger as te}from"@ez4/aws-common";var d="AWS:S3/Policy",f="aws:s3.policy";var re=new nt({}),oe=async t=>{let{bucketName:e,role:r}=t;return te.logCreate(d,
47
- e),await re.send(new st({Bucket:e,Policy:JSON.stringify(r)})),{bucketName:e}},ne=async t=>{
48
- te.logDelete(d,t);try{return await re.send(new ct({Bucket:t})),!0}catch(e){if(!(e instanceof
49
- at))throw e;return!1}};var se=()=>({equals:mt,create:ce,replace:lt,preview:ut,update:yt,delete:ft}),mt=(t,e)=>!!t.
50
- result&&t.result.bucketName===e.result?.bucketName,ut=async(t,e)=>{let r={...t.parameters,
51
- dependencies:t.dependencies},o={...e.parameters,dependencies:e.dependencies},n=pt(
52
- r,o,{exclude:{getRole:!0}});if(n.counts)return{...n,name:r.fromService}},lt=async(t,e,r)=>{
53
- if(e.result)throw new it(d,t.entryId,e.entryId);return ce(t,r)},ce=async(t,e)=>{
54
- let r=t.parameters,o=v(d,"policy",e),n=await r.getRole(e);return await oe({bucketName:o,
55
- role:n}),{bucketName:o}},yt=async()=>{},ft=async t=>{let e=t.result;e&&await ne(
56
- e.bucketName)};var ae=()=>{gt(f,se())};import{registerProvider as zt}from"@ez4/aws-common";import{stat as vt}from"node:fs/promises";import{ReplaceResourceError as Et}from"@ez4/aws-common";
57
- import{deepCompare as Rt,deepEqual as Ct}from"@ez4/utils";import{createReadStream as dt}from"node:fs";import{S3Client as St,PutObjectCommand as kt,
58
- PutObjectTaggingCommand as bt,DeleteObjectCommand as xt,NoSuchBucket as Pt}from"@aws-sdk/client-s3";
59
- import{getTagList as Bt,Logger as C}from"@ez4/aws-common";import wt from"mime";var g="AWS:S3/Object",y="aws:s3.object";var Qr=t=>t.type===y,E=(t,e)=>`${t}/${e}`,Xr=t=>t.getDependencies(y).map(({result:r,
60
- parameters:o})=>({lastModified:r?.lastModified,objectKey:o.objectKey}));var j=new St({}),h=async(t,e)=>{let{objectKey:r,filePath:o}=e;C.logCreate(g,E(t,
61
- r));let n=wt.getType(o);return await j.send(new kt({Bucket:t,Key:r,Body:dt(o),...n&&
62
- {ContentType:n}})),{objectKey:r}},ie=async(t,e,r)=>{C.logTag(g,E(t,e)),await j.send(
63
- new bt({Bucket:t,Key:e,Tagging:{TagSet:Bt({...r,ManagedBy:"EZ4"})}}))},pe=async(t,e)=>{
64
- C.logDelete(g,E(t,e));try{return await j.send(new xt({Bucket:t,Key:e})),!0}catch(r){
65
- if(!(r instanceof Pt))throw r;return!1}};var me=()=>({equals:jt,create:ue,replace:Ot,preview:ht,update:Tt,delete:Nt}),jt=(t,e)=>!!t.
66
- result&&t.result.lastModified===e.result?.lastModified,ht=async(t,e)=>{let r=t.parameters,
67
- o=e.parameters,n=Rt({...r,dependencies:t.dependencies,lastModified:await O(r.filePath)},
68
- {...o,dependencies:e.dependencies,lastModified:t.result?.lastModified});if(n.counts)
69
- return{...n,name:r.objectKey}},Ot=async(t,e,r)=>{if(e.result)throw new Et(g,t.entryId,
70
- e.entryId);return ue(t,r)},ue=async(t,e)=>{let r=t.parameters,o=v(g,"bucket",e),
71
- n=await O(r.filePath),{objectKey:s}=await h(o,r);return await le(o,s,r.tags,t.parameters.
72
- tags),{lastModified:n,bucketName:o}},Tt=async(t,e)=>{let{result:r,parameters:o}=t;
73
- if(!r)return;let{objectKey:n,tags:s}=o,c=Dt(r,o,e.parameters);return await le(r.
74
- bucketName,n,s,e.parameters.tags),c},Nt=async t=>{let{result:e,parameters:r}=t;e&&
75
- await pe(e.bucketName,r.objectKey)},O=async t=>{let{mtime:e}=await vt(t);return e.
76
- getTime()},Dt=async(t,e,r)=>{let o=await O(e.filePath);if(o<=t.lastModified&&e.filePath===
77
- r.filePath)return t;let{bucketName:n}=t,{objectKey:s}=r;return await h(n,{...e,objectKey:s}),
78
- {lastModified:o,bucketName:n}},le=async(t,e,r,o)=>{let n=r??{};!Ct(n,o??{})&&await ie(
79
- t,e,n)};var ye=()=>{zt(y,me())};import{isBucketService as z}from"@ez4/storage/library";import{createPermission as At}from"@ez4/aws-function";import{attachEntry as It,linkDependency as Lt}from"@ez4/stateful";import{createPolicyDocument as Ft}from"@ez4/aws-identity";var fe=t=>`arn:aws:s3:\
80
- ::${t}`,ge=t=>Ft([{resourceIds:[`arn:aws:s3:::${t}-*`,`arn:aws:s3:::${t}-*/*`],permissions:[
81
- "s3:ListBucket","s3:PutObject","s3:GetObject","s3:DeleteObject"]}]);var de=(t,e,r)=>{let o=r.bucketName,n=Y(o),s=It(t,{type:l,entryId:n,dependencies:[],
82
- parameters:r});return e&&(At(t,s,e,{fromService:r.bucketName,getPermission:()=>({
83
- principal:"s3.amazonaws.com",sourceArn:fe(o)})}),Lt(t,s.entryId,e.entryId)),s};import{getFunctionState as Gt,tryGetFunctionState as _t}from"@ez4/aws-function";
84
- import{linkServiceExtras as Vt}from"@ez4/project/library";import{isRoleState as Pe}from"@ez4/aws-identity";
85
- import{createLogGroup as Wt}from"@ez4/aws-logs";import{createFunction as Kt}from"@ez4/aws-function";import{join as qt}from"node:path";import{getDefinitionsObject as Mt}from"@ez4/project/library";
86
- import{MappingServiceName as $t}from"@ez4/aws-function";import{getFunctionBundle as Ht}from"@ez4/aws-common";
87
- var Se=async(t,e)=>{let{extras:r,debug:o,handler:n,listener:s}=e,c=Mt(t);return Ht(
88
- $t,{templateFile:qt(import.meta.dirname,"../lib/event.ts"),filePrefix:"s3",define:{
89
- ...c},handler:n,listener:s,extras:r,debug:o})};var ke=(t,e,r,o)=>{let{handler:n}=o;return Kt(t,e,r,{handlerName:"s3EntryPoint",
90
- sourceFile:n.sourceFile,functionName:o.functionName,description:o.description,variables:o.
91
- variables,timeout:o.timeout,memory:o.memory,debug:o.debug,tags:o.tags,getFunctionBundle:s=>{
92
- let c=s.getDependencies();return Se(c,o)},getFunctionFiles:()=>[n.sourceFile,n.dependencies]})};import{getServiceName as T}from"@ez4/project/library";import{getRandomName as Ut}from"@ez4/aws-common";
93
- import{toKebabCase as N}from"@ez4/utils";var be=async(t,e)=>{if(t.globalName)return T(
94
- t.globalName,e);let r=T(t,e),o=await Ut(16);return`${r.substring(0,46)}-${o}`},D=(t,e)=>`${N(
95
- t.name)}-${N(e)}`,xe=(t,e,r)=>`${T(t,r)}-${N(e)}`;var b=class extends Error{constructor(){super("Execution role for S3 is missing.")}};var x;(o=>(o.LogRetention=90,o.Timeout=90,o.Memory=192))(x||={});var Be=(t,e,r,o)=>{if(!e.events)return;if(!o.role||!Pe(o.role))throw new b;let{handler:n,
96
- listener:s,logRetention:c,timeout:m,memory:S,variables:k}=e.events,P=D(e,n.name),
97
- u=_t(o,P,r);if(u)return u;let F=xe(e,n.name,r),De=Wt(t,{retention:c??x.LogRetention,
98
- groupName:F,tags:r.tags});return u=ke(t,o.role,De,{functionName:F,description:n.
99
- description,timeout:m??x.Timeout,memory:S??x.Memory,extras:e.extras,debug:r.debug,
100
- tags:r.tags,variables:{...r.variables,...e.variables,...k},handler:{dependencies:o.
101
- getDependencies(n.file),functionName:n.name,sourceFile:n.file},...s&&{listener:{
102
- functionName:s.name,sourceFile:s.file}}}),o.setServiceState(u,P,r),u},we=(t,e,r,o)=>{
103
- if(!e.extras||!e.events)return;if(!o.role||!Pe(o.role))throw new b;let{handler:n}=e.
104
- events,s=D(e,n.name),c=Gt(o,s,r);Vt(t,c.entryId,e.extras)};import{readdir as Zt}from"node:fs/promises";import{join as ve,relative as Ee}from"node:path";
105
- import{createBucketObject as Jt}from"@ez4/aws-bucket";var Re=async(t,e,r)=>{let o=process.
106
- cwd(),n=ve(o,r),s=await Zt(n,{withFileTypes:!0,recursive:!0});for(let c of s){if(!c.
107
- isFile())continue;let m=ve(c.parentPath,c.name);Jt(t,e,{objectKey:Ee(n,m),filePath:Ee(
108
- o,m)})}};var Ce=(t,e,r)=>{let o=ee(t,e.name,r);return{entryIds:[o.entryId],constructor:`m\
109
- ake('${o.parameters.bucketName}')`,from:"@ez4/aws-bucket/client",module:"Client"}};var je=t=>{let{service:e,options:r,context:o}=t;return z(e)?Ce(o,e,r):null},he=async t=>{
110
- let{state:e,service:r,options:o,context:n}=t;if(!z(r))return;let{localPath:s,autoExpireDays:c,
111
- events:m,cors:S}=r,k=await be(r,o),P=Be(e,r,o,n),u=de(e,P,{eventsPath:m?.path,tags:o.
112
- tags,bucketName:k,autoExpireDays:c,localPath:s,cors:S});n.setServiceState(u,r,o),
113
- s&&await Re(e,u,s)},Oe=t=>{let{state:e,service:r,options:o,context:n}=t;z(r)&&we(
114
- e,r,o,n)};import{ServiceType as Qt}from"@ez4/storage/library";import{createPolicy as Xt,tryGetPolicy as Yt}from"@ez4/aws-identity";
115
- import{getServiceName as er}from"@ez4/project/library";var Te=t=>{let{state:e,serviceType:r,options:o}=t;if(r!==Qt)return null;let n=er(
116
- "",o),s=`${n}-bucket-policy`;return Yt(e,s)??Xt(e,{tags:o.tags,policyDocument:ge(
117
- n),policyName:s})};var Ne=!1,En=()=>{Ne||(tr(),rr(),or(),nr(),sr("@ez4/aws-bucket",{"deploy:prepare\
118
- ExecutionPolicy":Te,"deploy:prepareLinkedService":je,"deploy:prepareResources":he,
119
- "deploy:connectResources":Oe}),X(),ae(),ye(),Ne=!0)};import{getRegion as cr}from"@ez4/aws-identity";var jn=t=>/(.+)\.s3\.(.+)\.amazonaws\.com/i.
120
- test(t),hn=async t=>{let e=await cr();return`${t}.s3.${e}.amazonaws.com`};import{attachEntry as ar}from"@ez4/stateful";import{hashData as ir}from"@ez4/utils";var zn=(t,e,r,o)=>{let n=ir(f,e.entryId,r.entryId);return ar(t,{type:f,entryId:n,
121
- dependencies:[e.entryId,r.entryId],parameters:o})};var In=t=>t.type===f;import{attachEntry as pr}from"@ez4/stateful";import{hashData as mr}from"@ez4/utils";var Hn=(t,e,r)=>{let o=r.objectKey,n=mr(y,e.entryId,o);return pr(t,{type:y,entryId:n,
122
- dependencies:[e.entryId],parameters:r})};export{a as BucketServiceName,l as BucketServiceType,g as ObjectServiceName,y as ObjectServiceType,
123
- d as PolicyServiceName,f as PolicyServiceType,fe as buildBucketArn,de as createBucket,
124
- ke as createBucketEventFunction,Hn as createBucketObject,zn as createBucketPolicy,
125
- Y as createBucketStateId,hn as getBucketDomain,v as getBucketName,Xr as getBucketObjectFiles,
126
- E as getBucketObjectPath,ee as getBucketState,ge as getPolicyDocument,jn as isBucketDomain,
127
- Qr as isBucketObjectState,In as isBucketPolicyState,ot as isBucketState,En as registerTriggers};
17
+ allowHeaders,ExposeHeaders:e.exposeHeaders,MaxAgeSeconds:e.maxAge}]}}))},"update\
18
+ CorsConfiguration"),H=o(async t=>{p.logDelete(i,`${t} CORS`);try{return await m.
19
+ send(new Ke({Bucket:t})),!0}catch(e){if(!(e instanceof w))throw e;return!1}},"de\
20
+ leteCorsConfiguration"),K=o(async(t,e)=>{p.logCreate(i,`${t} lifecycle`),await m.
21
+ send(new Ue({Bucket:t,LifecycleConfiguration:{Rules:[{ID:"ID0",Status:Ve.Enabled,
22
+ Filter:{Prefix:"*"},Expiration:{Days:e}}]}}))},"createLifecycle"),U=o(async t=>{
23
+ p.logDelete(i,`${t} lifecycle`);try{return await m.send(new Ge({Bucket:t})),!0}catch(e){
24
+ if(!(e instanceof w))throw e;return!1}},"deleteLifecycle"),G=o(async(t,e)=>{p.logUpdate(
25
+ i,`${t} event notifications`);let{functionArn:r,eventsPath:n,eventsType:s}=e;await m.
26
+ send(new _e({Bucket:t,SkipDestinationValidation:!0,NotificationConfiguration:{...r&&
27
+ {LambdaFunctionConfigurations:[{Id:"ID0",LambdaFunctionArn:r,Events:s,...n&&{Filter:{
28
+ Key:{FilterRules:[{Name:"prefix",Value:n}]}}}}]}}}))},"updateEventNotifications");var V=o(()=>({equals:Je,create:W,replace:Xe,preview:Qe,update:Ye,delete:et}),"ge\
29
+ tBucketHandler"),Je=o((t,e)=>!!t.result&&t.result.bucketName===e.result?.bucketName,
30
+ "equalsResource"),Qe=o(async(t,e)=>{let r={...t.parameters,dependencies:t.dependencies},
31
+ n={...e.parameters,dependencies:e.dependencies},s=Ze(r,n);if(s.counts)return{...s,
32
+ name:r.bucketName}},"previewResource"),Xe=o(async(t,e,r)=>{if(e.result)throw new We(
33
+ i,t.entryId,e.entryId);return W(t,r)},"replaceResource"),W=o(async(t,e)=>{let r=t.
34
+ parameters,n=_(e),{bucketName:s}=await L(r);await Z(s,r,void 0),await J(s,r,void 0),
35
+ await Q(s,r.tags,void 0);let c={eventsPath:r.eventsPath,functionArn:n};return await X(
36
+ s,c,{}),{bucketName:s,functionArn:n}},"createResource"),Ye=o(async(t,e,r)=>{let{
37
+ result:n,parameters:s}=t;if(!n)return;let c=n.bucketName,a=_(r),u=e.result?.functionArn;
38
+ await Z(c,s,e.parameters),await J(c,s,e.parameters),await Q(c,s.tags,e.parameters.
39
+ tags);let k={eventsPath:s.eventsPath,functionArn:a},b={eventsPath:e.parameters.eventsPath,
40
+ functionArn:u};return await X(c,k,b),{...n,functionArn:a}},"updateResource"),et=o(
41
+ async t=>{let e=t.result;e&&await I(e.bucketName)&&await q(e.bucketName)},"delet\
42
+ eResource"),Z=o(async(t,e,r)=>{if(!(e.cors&&r?.cors&&C(e.cors,r.cors))){if(e.cors)
43
+ return $(t,e.cors);if(r?.cors)return H(t)}},"checkCorsUpdates"),J=o(async(t,e,r)=>{
44
+ if(e.autoExpireDays!==r?.autoExpireDays){if(e.autoExpireDays)return K(t,e.autoExpireDays);
45
+ if(r?.autoExpireDays)return U(t)}},"checkLifecycleUpdates"),Q=o(async(t,e,r)=>{let n=e??
46
+ {};!C(n,r??{})&&await M(t,n)},"checkTagUpdates"),X=o(async(t,e,r)=>{!C(e,r)&&await G(
47
+ t,{eventsType:["s3:ObjectCreated:*","s3:ObjectRemoved:*"],...e})},"checkEventUpd\
48
+ ates");var Y=o(()=>{tt(y,V())},"registerBucketProvider");import{registerProvider as St}from"@ez4/aws-common";import{ReplaceResourceError as mt}from"@ez4/aws-common";import{deepCompare as ut}from"@ez4/utils";import{IncompleteResourceError as rt}from"@ez4/aws-common";import{hashData as ot,
49
+ toKebabCase as nt}from"@ez4/utils";var v=class extends Error{static{o(this,"BucketNotFoundError")}constructor(e){super(
50
+ `Bucket service ${e} wasn't found.`)}};var ee=o(t=>ot(y,nt(t)),"createBucketStateId"),st=o(t=>t.type===y,"isBucketState"),
51
+ te=o((t,e,r)=>{let n=t.getServiceState(e,r);if(!st(n))throw new v(e);return n},"\
52
+ getBucketState"),E=o((t,e,r)=>{let n=r.getDependencies(y)[0]?.result;if(!n?.bucketName)
53
+ throw new rt(t,e,"bucketName");return n.bucketName},"getBucketName");import{S3Client as ct,PutBucketPolicyCommand as at,DeleteBucketPolicyCommand as it,
54
+ NoSuchBucket as pt}from"@aws-sdk/client-s3";import{Logger as re}from"@ez4/aws-common";var S="AWS:S3/Policy",g="aws:s3.policy";var oe=new ct({}),ne=o(async t=>{let{bucketName:e,role:r}=t;return re.logCreate(
55
+ S,e),await oe.send(new at({Bucket:e,Policy:JSON.stringify(r)})),{bucketName:e}},
56
+ "createPolicy"),se=o(async t=>{re.logDelete(S,t);try{return await oe.send(new it(
57
+ {Bucket:t})),!0}catch(e){if(!(e instanceof pt))throw e;return!1}},"deletePolicy");var ce=o(()=>({equals:lt,create:ae,replace:ft,preview:yt,update:gt,delete:dt}),"\
58
+ getPolicyHandler"),lt=o((t,e)=>!!t.result&&t.result.bucketName===e.result?.bucketName,
59
+ "equalsResource"),yt=o(async(t,e)=>{let r={...t.parameters,dependencies:t.dependencies},
60
+ n={...e.parameters,dependencies:e.dependencies},s=ut(r,n,{exclude:{getRole:!0}});
61
+ if(s.counts)return{...s,name:r.fromService}},"previewResource"),ft=o(async(t,e,r)=>{
62
+ if(e.result)throw new mt(S,t.entryId,e.entryId);return ae(t,r)},"replaceResource"),
63
+ ae=o(async(t,e)=>{let r=t.parameters,n=E(S,"policy",e),s=await r.getRole(e);return await ne(
64
+ {bucketName:n,role:s}),{bucketName:n}},"createResource"),gt=o(async()=>{},"updat\
65
+ eResource"),dt=o(async t=>{let e=t.result;e&&await se(e.bucketName)},"deleteReso\
66
+ urce");var ie=o(()=>{St(g,ce())},"registerPolicyProvider");import{registerProvider as At}from"@ez4/aws-common";import{stat as Rt}from"node:fs/promises";import{ReplaceResourceError as Ct}from"@ez4/aws-common";
67
+ import{deepCompare as jt,deepEqual as ht}from"@ez4/utils";import{createReadStream as kt}from"node:fs";import{S3Client as bt,PutObjectCommand as xt,
68
+ PutObjectTaggingCommand as Pt,DeleteObjectCommand as Bt,NoSuchBucket as wt}from"@aws-sdk/client-s3";
69
+ import{getTagList as vt,Logger as j}from"@ez4/aws-common";import Et from"mime";var d="AWS:S3/Object",f="aws:s3.object";var io=o(t=>t.type===f,"isBucketObjectState"),R=o((t,e)=>`${t}/${e}`,"getBucketO\
70
+ bjectPath"),po=o(t=>t.getDependencies(f).map(({result:r,parameters:n})=>({lastModified:r?.
71
+ lastModified,objectKey:n.objectKey})),"getBucketObjectFiles");var h=new bt({}),O=o(async(t,e)=>{let{objectKey:r,filePath:n}=e;j.logCreate(d,R(
72
+ t,r));let s=Et.getType(n);return await h.send(new xt({Bucket:t,Key:r,Body:kt(n),
73
+ ...s&&{ContentType:s}})),{objectKey:r}},"putObject"),pe=o(async(t,e,r)=>{j.logTag(
74
+ d,R(t,e)),await h.send(new Pt({Bucket:t,Key:e,Tagging:{TagSet:vt({...r,ManagedBy:"\
75
+ EZ4"})}}))},"tagObject"),me=o(async(t,e)=>{j.logDelete(d,R(t,e));try{return await h.
76
+ send(new Bt({Bucket:t,Key:e})),!0}catch(r){if(!(r instanceof wt))throw r;return!1}},
77
+ "deleteObject");var ue=o(()=>({equals:Ot,create:le,replace:Nt,preview:Tt,update:Dt,delete:zt}),"\
78
+ getObjectHandler"),Ot=o((t,e)=>!!t.result&&t.result.lastModified===e.result?.lastModified,
79
+ "equalsResource"),Tt=o(async(t,e)=>{let r=t.parameters,n=e.parameters,s=jt({...r,
80
+ dependencies:t.dependencies,lastModified:await T(r.filePath)},{...n,dependencies:e.
81
+ dependencies,lastModified:t.result?.lastModified});if(s.counts)return{...s,name:r.
82
+ objectKey}},"previewResource"),Nt=o(async(t,e,r)=>{if(e.result)throw new Ct(d,t.
83
+ entryId,e.entryId);return le(t,r)},"replaceResource"),le=o(async(t,e)=>{let r=t.
84
+ parameters,n=E(d,"bucket",e),s=await T(r.filePath),{objectKey:c}=await O(n,r);return await ye(
85
+ n,c,r.tags,t.parameters.tags),{lastModified:s,bucketName:n}},"createResource"),Dt=o(
86
+ async(t,e)=>{let{result:r,parameters:n}=t;if(!r)return;let{objectKey:s,tags:c}=n,
87
+ a=Ft(r,n,e.parameters);return await ye(r.bucketName,s,c,e.parameters.tags),a},"u\
88
+ pdateResource"),zt=o(async t=>{let{result:e,parameters:r}=t;e&&await me(e.bucketName,
89
+ r.objectKey)},"deleteResource"),T=o(async t=>{let{mtime:e}=await Rt(t);return e.
90
+ getTime()},"getLastModifiedTime"),Ft=o(async(t,e,r)=>{let n=await T(e.filePath);
91
+ if(n<=t.lastModified&&e.filePath===r.filePath)return t;let{bucketName:s}=t,{objectKey:c}=r;
92
+ return await O(s,{...e,objectKey:c}),{lastModified:n,bucketName:s}},"checkObject\
93
+ Updates"),ye=o(async(t,e,r,n)=>{let s=r??{};!ht(s,n??{})&&await pe(t,e,s)},"chec\
94
+ kTagUpdates");var fe=o(()=>{At(f,ue())},"registerObjectProvider");import{isBucketService as F}from"@ez4/storage/library";import{createPermission as Lt}from"@ez4/aws-function";import{attachEntry as qt,linkDependency as Mt}from"@ez4/stateful";import{createPolicyDocument as It}from"@ez4/aws-identity";var ge=o(t=>`arn:aws:s3:::${t}`,"buildBucketArn"),de=o(t=>It([{resourceIds:[`arn\
95
+ :aws:s3:::${t}-*`,`arn:aws:s3:::${t}-*/*`],permissions:["s3:ListBucket","s3:PutO\
96
+ bject","s3:GetObject","s3:DeleteObject"]}]),"getPolicyDocument");var Se=o((t,e,r)=>{let n=r.bucketName,s=ee(n),c=qt(t,{type:y,entryId:s,dependencies:[],
97
+ parameters:r});return e&&(Lt(t,c,e,{fromService:r.bucketName,getPermission:o(()=>({
98
+ principal:"s3.amazonaws.com",sourceArn:ge(n)}),"getPermission")}),Mt(t,c.entryId,
99
+ e.entryId)),c},"createBucket");import{getFunctionState as Vt,tryGetFunctionState as Wt}from"@ez4/aws-function";
100
+ import{linkServiceExtras as Zt}from"@ez4/project/library";import{isRoleState as Be}from"@ez4/aws-identity";
101
+ import{createLogGroup as Jt}from"@ez4/aws-logs";import{createFunction as Gt}from"@ez4/aws-function";import{join as $t}from"node:path";import{getDefinitionsObject as Ht}from"@ez4/project/library";
102
+ import{MappingServiceName as Kt}from"@ez4/aws-function";import{getFunctionBundle as Ut}from"@ez4/aws-common";var ke=o(async(t,e)=>{let{extras:r,debug:n,handler:s,listener:c}=e,a=Ht(t);return Ut(
103
+ Kt,{templateFile:$t(import.meta.dirname,"../lib/event.ts"),filePrefix:"s3",define:{
104
+ ...a},handler:s,listener:c,extras:r,debug:n})},"bundleBucketEventFunction");var be=o((t,e,r,n)=>{let{handler:s}=n;return Gt(t,e,r,{handlerName:"s3EntryPoint",
105
+ sourceFile:s.sourceFile,functionName:n.functionName,description:n.description,variables:n.
106
+ variables,timeout:n.timeout,memory:n.memory,debug:n.debug,tags:n.tags,getFunctionBundle:o(
107
+ c=>{let a=c.getDependencies();return ke(a,n)},"getFunctionBundle"),getFunctionFiles:o(
108
+ ()=>[s.sourceFile,s.dependencies],"getFunctionFiles")})},"createBucketEventFunct\
109
+ ion");import{getServiceName as N}from"@ez4/project/library";import{getRandomName as _t}from"@ez4/aws-common";
110
+ import{toKebabCase as D}from"@ez4/utils";var xe=o(async(t,e)=>{if(t.globalName)return N(t.globalName,e);let r=N(t,e),n=await _t(
111
+ 16);return`${r.substring(0,46)}-${n}`},"getBucketName"),z=o((t,e)=>`${D(t.name)}\
112
+ -${D(e)}`,"getInternalName"),Pe=o((t,e,r)=>`${N(t,r)}-${D(e)}`,"getFunctionName");var x=class extends Error{static{o(this,"RoleMissingError")}constructor(){super(
113
+ "Execution role for S3 is missing.")}};var P;(n=>(n.LogRetention=90,n.Timeout=90,n.Memory=192))(P||={});var we=o((t,e,r,n)=>{if(!e.events)return;if(!n.role||!Be(n.role))throw new x;let{
114
+ handler:s,listener:c,logRetention:a,timeout:u,memory:k,variables:b}=e.events,B=z(
115
+ e,s.name),l=Wt(n,B,r);if(l)return l;let A=Pe(e,s.name,r),ze=Jt(t,{retention:a??P.
116
+ LogRetention,groupName:A,tags:r.tags});return l=be(t,n.role,ze,{functionName:A,description:s.
117
+ description,timeout:u??P.Timeout,memory:k??P.Memory,extras:e.extras,debug:r.debug,
118
+ tags:r.tags,variables:{...r.variables,...e.variables,...b},handler:{dependencies:n.
119
+ getDependencies(s.file),functionName:s.name,sourceFile:s.file},...c&&{listener:{
120
+ functionName:c.name,sourceFile:c.file}}}),n.setServiceState(l,B,r),l},"prepareEv\
121
+ ents"),ve=o((t,e,r,n)=>{if(!e.extras||!e.events)return;if(!n.role||!Be(n.role))throw new x;
122
+ let{handler:s}=e.events,c=z(e,s.name),a=Vt(n,c,r);Zt(t,a.entryId,e.extras)},"con\
123
+ nectEvents");import{readdir as Qt}from"node:fs/promises";import{join as Ee,relative as Re}from"node:path";
124
+ import{createBucketObject as Xt}from"@ez4/aws-bucket";var Ce=o(async(t,e,r)=>{let n=process.cwd(),s=Ee(n,r),c=await Qt(s,{withFileTypes:!0,
125
+ recursive:!0});for(let a of c){if(!a.isFile())continue;let u=Ee(a.parentPath,a.name);
126
+ Xt(t,e,{objectKey:Re(s,u),filePath:Re(n,u)})}},"prepareLocalContent");var je=o((t,e,r)=>{let n=te(t,e.name,r);return{entryIds:[n.entryId],constructor:`\
127
+ make('${n.parameters.bucketName}')`,from:"@ez4/aws-bucket/client",module:"Client"}},
128
+ "prepareLinkedClient");var he=o(t=>{let{service:e,options:r,context:n}=t;return F(e)?je(n,e,r):null},"p\
129
+ repareLinkedServices"),Oe=o(async t=>{let{state:e,service:r,options:n,context:s}=t;
130
+ if(!F(r))return;let{localPath:c,autoExpireDays:a,events:u,cors:k}=r,b=await xe(r,
131
+ n),B=we(e,r,n,s),l=Se(e,B,{eventsPath:u?.path,tags:n.tags,bucketName:b,autoExpireDays:a,
132
+ localPath:c,cors:k});s.setServiceState(l,r,n),c&&await Ce(e,l,c)},"prepareBucket\
133
+ Services"),Te=o(t=>{let{state:e,service:r,options:n,context:s}=t;F(r)&&ve(e,r,n,
134
+ s)},"connectBucketServices");import{ServiceType as Yt}from"@ez4/storage/library";import{createPolicy as er,tryGetPolicy as tr}from"@ez4/aws-identity";
135
+ import{getServiceName as rr}from"@ez4/project/library";var Ne=o(t=>{let{state:e,serviceType:r,options:n}=t;if(r!==Yt)return null;let s=rr(
136
+ "",n),c=`${s}-bucket-policy`;return tr(e,c)??er(e,{tags:n.tags,policyDocument:de(
137
+ s),policyName:c})},"prepareExecutionPolicy");var De=!1,Qn=o(()=>{De||(or(),nr(),sr(),cr(),ar("@ez4/aws-bucket",{"deploy:prepa\
138
+ reExecutionPolicy":Ne,"deploy:prepareLinkedService":he,"deploy:prepareResources":Oe,
139
+ "deploy:connectResources":Te}),Y(),ie(),fe(),De=!0)},"registerTriggers");import{getRegion as ir}from"@ez4/aws-identity";var ts=o(t=>/(.+)\.s3\.(.+)\.amazonaws\.com/i.test(t),"isBucketDomain"),rs=o(async t=>{
140
+ let e=await ir();return`${t}.s3.${e}.amazonaws.com`},"getBucketDomain");import{attachEntry as pr}from"@ez4/stateful";import{hashData as mr}from"@ez4/utils";var is=o((t,e,r,n)=>{let s=mr(g,e.entryId,r.entryId);return pr(t,{type:g,entryId:s,
141
+ dependencies:[e.entryId,r.entryId],parameters:n})},"createBucketPolicy");var ls=o(t=>t.type===g,"isBucketPolicyState");import{attachEntry as ur}from"@ez4/stateful";import{hashData as lr}from"@ez4/utils";var ks=o((t,e,r)=>{let n=r.objectKey,s=lr(f,e.entryId,n);return ur(t,{type:f,entryId:s,
142
+ dependencies:[e.entryId],parameters:r})},"createBucketObject");export{i as BucketServiceName,y as BucketServiceType,d as ObjectServiceName,f as ObjectServiceType,
143
+ S as PolicyServiceName,g as PolicyServiceType,ge as buildBucketArn,Se as createBucket,
144
+ be as createBucketEventFunction,ks as createBucketObject,is as createBucketPolicy,
145
+ ee as createBucketStateId,rs as getBucketDomain,E as getBucketName,po as getBucketObjectFiles,
146
+ R as getBucketObjectPath,te as getBucketState,de as getPolicyDocument,ts as isBucketDomain,
147
+ io as isBucketObjectState,ls as isBucketPolicyState,st as isBucketState,Qn as registerTriggers};
128
148
  //# sourceMappingURL=main.mjs.map
package/lib/event.ts CHANGED
@@ -7,8 +7,8 @@ import { BucketEventType } from '@ez4/storage';
7
7
 
8
8
  declare const __EZ4_CONTEXT: object;
9
9
 
10
- declare function handle(event: Bucket.Event, context: object): Promise<any>;
11
10
  declare function dispatch(event: Service.Event<Bucket.Event>, context: object): Promise<void>;
11
+ declare function handle(event: Bucket.Event, context: object): Promise<any>;
12
12
 
13
13
  /**
14
14
  * Entrypoint to handle S3 notifications.
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.21.0",
4
+ "version": "0.22.0",
5
5
  "author": "Silas B.",
6
6
  "license": "MIT",
7
7
  "type": "module",
@@ -11,10 +11,10 @@
11
11
  "repository": {
12
12
  "type": "git",
13
13
  "url": "git+https://github.com/sbalmt/ez4.git",
14
- "directory": "packages/aws-bucket"
14
+ "directory": "providers/aws/aws-bucket"
15
15
  },
16
16
  "engines": {
17
- "node": ">=22.3.0"
17
+ "node": ">=22.7"
18
18
  },
19
19
  "exports": {
20
20
  ".": {
@@ -34,28 +34,26 @@
34
34
  "scripts": {
35
35
  "clean": "rm -f *.tsbuildinfo && rm -rf dist/*",
36
36
  "build": "tsc -p tsconfig.json && node tools/bundler.mjs",
37
- "test": "npm run test:types && node --env-file ../../local.env --test --import ../../tools/tsnode.mjs test/*.spec.ts",
38
- "test:only": "npm run test:types && node --env-file ../../local.env --test-only --test --import ../../tools/tsnode.mjs test/*.spec.ts",
37
+ "test": "npm run test:types && node --env-file ../../../local.env --test --import ../../../tools/tsnode.mjs test/*.spec.ts",
38
+ "test:only": "npm run test:types && node --env-file ../../../local.env --test-only --test --import ../../../tools/tsnode.mjs test/*.spec.ts",
39
39
  "test:types": "npm run build && tsc -p tsconfig.test.json",
40
40
  "local:publish": "npm run build && npm run clean:registry && npm publish --registry http://localhost:4873",
41
- "clean:registry": "rm -rf ../../.registry/@ez4/aws-bucket",
41
+ "clean:registry": "rm -rf ../../../.registry/@ez4/aws-bucket",
42
42
  "live:publish": "npm run test && npm publish --access public"
43
43
  },
44
- "devDependencies": {
45
- "@types/aws-lambda": "^8.10.147",
46
- "@types/mime": "^3.0.0"
47
- },
48
44
  "dependencies": {
49
45
  "@aws-sdk/client-s3": "^3.758.0",
50
46
  "@aws-sdk/s3-request-presigner": "^3.758.0",
51
- "@ez4/aws-common": "^0.21.0",
52
- "@ez4/aws-function": "^0.21.0",
53
- "@ez4/aws-identity": "^0.21.0",
54
- "@ez4/aws-logs": "^0.21.0",
55
- "@ez4/project": "^0.21.0",
56
- "@ez4/stateful": "^0.21.0",
57
- "@ez4/storage": "^0.21.0",
58
- "@ez4/utils": "^0.21.0",
47
+ "@ez4/aws-common": "^0.22.0",
48
+ "@ez4/aws-function": "^0.22.0",
49
+ "@ez4/aws-identity": "^0.22.0",
50
+ "@ez4/aws-logs": "^0.22.0",
51
+ "@ez4/project": "^0.22.0",
52
+ "@ez4/stateful": "^0.22.0",
53
+ "@ez4/storage": "^0.22.0",
54
+ "@ez4/utils": "^0.22.0",
55
+ "@types/aws-lambda": "^8.10.147",
56
+ "@types/mime": "^3.0.0",
59
57
  "mime": "^3.0.0"
60
58
  }
61
59
  }