@ez4/aws-bucket 0.39.0 → 0.41.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import type { Arn, ResourceTags } from '@ez4/aws-common';
1
+ import type { Arn, OperationLogLine, ResourceTags } from '@ez4/aws-common';
2
2
  import type { Event } from '@aws-sdk/client-s3';
3
3
  import type { Bucket } from '@ez4/storage';
4
4
  export type CreateRequest = {
@@ -12,12 +12,12 @@ export type UpdateNotificationRequest = {
12
12
  eventsPath?: string;
13
13
  eventsType: Event[];
14
14
  };
15
- export declare const isBucketEmpty: (bucketName: string) => Promise<boolean | 0>;
16
- export declare const createBucket: (request: CreateRequest) => Promise<CreateResponse>;
17
- export declare const deleteBucket: (bucketName: string) => Promise<boolean>;
18
- export declare const tagBucket: (bucketName: string, tags: ResourceTags) => Promise<void>;
19
- export declare const updateCorsConfiguration: (bucketName: string, cors: Bucket.Cors) => Promise<void>;
20
- export declare const deleteCorsConfiguration: (bucketName: string) => Promise<boolean>;
21
- export declare const createLifecycle: (bucketName: string, autoExpireDays: number) => Promise<void>;
22
- export declare const deleteLifecycle: (bucketName: string) => Promise<boolean>;
23
- export declare const updateEventNotifications: (bucketName: string, request: UpdateNotificationRequest) => Promise<void>;
15
+ export declare const isBucketEmpty: (logger: OperationLogLine, bucketName: string) => Promise<boolean | 0>;
16
+ export declare const createBucket: (logger: OperationLogLine, request: CreateRequest) => Promise<CreateResponse>;
17
+ export declare const deleteBucket: (logger: OperationLogLine, bucketName: string) => Promise<boolean>;
18
+ export declare const tagBucket: (logger: OperationLogLine, bucketName: string, tags: ResourceTags) => Promise<void>;
19
+ export declare const updateCorsConfiguration: (logger: OperationLogLine, bucketName: string, cors: Bucket.Cors) => Promise<void>;
20
+ export declare const deleteCorsConfiguration: (logger: OperationLogLine, bucketName: string) => Promise<boolean>;
21
+ export declare const createLifecycle: (logger: OperationLogLine, bucketName: string, autoExpireDays: number) => Promise<void>;
22
+ export declare const deleteLifecycle: (logger: OperationLogLine, bucketName: string) => Promise<boolean>;
23
+ export declare const updateEventNotifications: (logger: OperationLogLine, bucketName: string, request: UpdateNotificationRequest) => Promise<void>;
package/dist/main.cjs CHANGED
@@ -1,167 +1,175 @@
1
- "use strict";var Tt=Object.create;var h=Object.defineProperty;var Nt=Object.getOwnPropertyDescriptor;var Dt=Object.getOwnPropertyNames;var zt=Object.getPrototypeOf,Ft=Object.prototype.hasOwnProperty;var o=(t,e)=>h(t,"name",{value:e,configurable:!0});var At=(t,e)=>{for(var r in e)h(t,r,{get:e[r],enumerable:!0})},ne=(t,e,r,n)=>{if(e&&
2
- typeof e=="object"||typeof e=="function")for(let c of Dt(e))!Ft.call(t,c)&&c!==r&&
3
- h(t,c,{get:()=>e[c],enumerable:!(n=Nt(e,c))||n.enumerable});return t};var It=(t,e,r)=>(r=t!=null?Tt(zt(t)):{},ne(e||!t||!t.__esModule?h(r,"default",{value:t,
4
- enumerable:!0}):r,t)),Lt=t=>ne(h({},"__esModule",{value:!0}),t);var pr={};At(pr,{BucketServiceName:()=>m,BucketServiceType:()=>y,ObjectServiceName:()=>k,
5
- ObjectServiceType:()=>g,PolicyServiceName:()=>x,PolicyServiceType:()=>d,buildBucketArn:()=>J,
6
- createBucket:()=>X,createBucketEventFunction:()=>Y,createBucketObject:()=>ir,createBucketPolicy:()=>sr,
7
- createBucketStateId:()=>U,getBucketDomain:()=>cr,getBucketName:()=>j,getBucketObjectFiles:()=>Jt,
8
- getBucketObjectPath:()=>O,getBucketState:()=>G,getPolicyDocument:()=>Q,isBucketDomain:()=>nr,
9
- isBucketObjectState:()=>Zt,isBucketPolicyState:()=>ar,isBucketState:()=>ve,registerTriggers:()=>or});
10
- module.exports=Lt(pr);var St=require("@ez4/aws-common"),kt=require("@ez4/aws-identity"),bt=require("@ez4/aws-function"),
11
- xt=require("@ez4/storage/library"),Pt=require("@ez4/project/library");var Pe=require("@ez4/aws-common");var fe=require("@ez4/aws-common"),K=require("@ez4/aws-function"),B=require("@ez4/utils");var u=require("@ez4/aws-common"),a=require("@aws-sdk/client-s3");var m="AWS:S3/Bucket",y="aws:s3.bucket";var f=new a.S3Client({}),ce=o(async t=>{u.Logger.logFetch(m,t);try{return!(await f.
12
- send(new a.ListObjectsV2Command({Bucket:t,MaxKeys:1}))).Contents?.length}catch(e){
13
- if(!(e instanceof a.NoSuchBucket))throw e;return 0}},"isBucketEmpty"),se=o(async t=>{
14
- let{bucketName:e}=t;return u.Logger.logCreate(m,e),await f.send(new a.CreateBucketCommand(
15
- {Bucket:e})),{bucketName:e}},"createBucket"),ae=o(async t=>{u.Logger.logDelete(m,
16
- t);try{return await f.send(new a.DeleteBucketCommand({Bucket:t})),!0}catch(e){if(!(e instanceof
17
- a.NoSuchBucket))throw e;return!1}},"deleteBucket"),ie=o(async(t,e)=>{u.Logger.logTag(
18
- m,t),await f.send(new a.PutBucketTaggingCommand({Bucket:t,Tagging:{TagSet:(0,u.getTagList)(
19
- {...e,ManagedBy:"EZ4"})}}))},"tagBucket"),pe=o(async(t,e)=>{u.Logger.logUpdate(m,
20
- `${t} CORS`),await f.send(new a.PutBucketCorsCommand({Bucket:t,CORSConfiguration:{
21
- CORSRules:[{ID:"ID0",AllowedOrigins:e.allowOrigins,AllowedMethods:e.allowMethods,
22
- AllowedHeaders:e.allowHeaders,ExposeHeaders:e.exposeHeaders,MaxAgeSeconds:e.maxAge}]}}))},
23
- "updateCorsConfiguration"),me=o(async t=>{u.Logger.logDelete(m,`${t} CORS`);try{
24
- return await f.send(new a.DeleteBucketCorsCommand({Bucket:t})),!0}catch(e){if(!(e instanceof
25
- a.NoSuchBucket))throw e;return!1}},"deleteCorsConfiguration"),ue=o(async(t,e)=>{
26
- u.Logger.logCreate(m,`${t} lifecycle`),await f.send(new a.PutBucketLifecycleConfigurationCommand(
27
- {Bucket:t,LifecycleConfiguration:{Rules:[{ID:"ID0",Status:a.ExpirationStatus.Enabled,
28
- Filter:{Prefix:"*"},Expiration:{Days:e}}]}}))},"createLifecycle"),le=o(async t=>{
29
- u.Logger.logDelete(m,`${t} lifecycle`);try{return await f.send(new a.DeleteBucketLifecycleCommand(
30
- {Bucket:t})),!0}catch(e){if(!(e instanceof a.NoSuchBucket))throw e;return!1}},"d\
31
- eleteLifecycle"),ye=o(async(t,e)=>{u.Logger.logUpdate(m,`${t} events`);let{functionArn:r,
32
- eventsPath:n,eventsType:c}=e;await f.send(new a.PutBucketNotificationConfigurationCommand(
33
- {Bucket:t,SkipDestinationValidation:!0,NotificationConfiguration:{...r&&{LambdaFunctionConfigurations:[
34
- {Id:"ID0",LambdaFunctionArn:r,Events:c,...n&&{Filter:{Key:{FilterRules:[{Name:"p\
35
- refix",Value:n}]}}}}]}}}))},"updateEventNotifications");var ge=o(()=>({equals:Mt,create:de,replace:$t,preview:qt,update:Ht,delete:Kt}),"\
36
- getBucketHandler"),Mt=o((t,e)=>!!t.result&&t.result.bucketName===e.result?.bucketName,
37
- "equalsResource"),qt=o((t,e)=>{let r={...t.parameters,dependencies:t.dependencies},
38
- n={...e.parameters,dependencies:e.dependencies},c=(0,B.deepCompare)(r,n);if(c.counts)
39
- return{...c,name:r.bucketName}},"previewResource"),$t=o(async(t,e,r)=>{if(e.result)
40
- throw new fe.ReplaceResourceError(m,t.entryId,e.entryId);return de(t,r)},"replac\
41
- eResource"),de=o(async(t,e)=>{let r=t.parameters,n=(0,K.tryGetFunctionArn)(e),{bucketName:c}=await se(
42
- r);await Se(c,r,void 0),await ke(c,r,void 0),await be(c,r.tags,void 0);let s={eventsPath:r.
43
- eventsPath,functionArn:n};return await xe(c,s,{}),{bucketName:c,functionArn:n}},
44
- "createResource"),Ht=o(async(t,e,r)=>{let{result:n,parameters:c}=t;if(!n)return;
45
- let s=n.bucketName,i=(0,K.tryGetFunctionArn)(r),p=e.result?.functionArn;await Se(
46
- s,c,e.parameters),await ke(s,c,e.parameters),await be(s,c.tags,e.parameters.tags);
47
- let b={eventsPath:c.eventsPath,functionArn:i},E={eventsPath:e.parameters.eventsPath,
48
- functionArn:p};return await xe(s,b,E),{...n,functionArn:i}},"updateResource"),Kt=o(
49
- async t=>{let e=t.result;e&&await ce(e.bucketName)&&await ae(e.bucketName)},"del\
50
- eteResource"),Se=o(async(t,e,r)=>{if(!(e.cors&&r?.cors&&(0,B.deepEqual)(e.cors,r.
51
- cors))){if(e.cors)return pe(t,e.cors);if(r?.cors)return me(t)}},"checkCorsUpdate\
52
- s"),ke=o(async(t,e,r)=>{if(e.autoExpireDays!==r?.autoExpireDays){if(e.autoExpireDays)
53
- return ue(t,e.autoExpireDays);if(r?.autoExpireDays)return le(t)}},"checkLifecycl\
54
- eUpdates"),be=o(async(t,e,r)=>{let n=e??{};!(0,B.deepEqual)(n,r??{})&&await ie(t,
55
- n)},"checkTagUpdates"),xe=o(async(t,e,r)=>{!(0,B.deepEqual)(e,r)&&await ye(t,{eventsType:[
56
- "s3:ObjectCreated:*","s3:ObjectRemoved:*"],...e})},"checkEventUpdates");var Be=o(()=>{(0,Pe.tryRegisterProvider)(y,ge())},"registerBucketProvider");var Ne=require("@ez4/aws-common");var he=require("@ez4/aws-common"),je=require("@ez4/utils");var we=require("@ez4/aws-common"),z=require("@ez4/utils");var D=class extends Error{static{o(this,"BucketNotFoundError")}constructor(e){super(
57
- `Bucket service ${e} wasn't found.`)}};var U=o(t=>(0,z.hashData)(y,(0,z.toKebabCase)(t)),"createBucketStateId"),ve=o(t=>t.
58
- type===y,"isBucketState"),G=o((t,e,r)=>{let n=t.getServiceState(e,r);if(!ve(n))throw new D(
59
- e);return n},"getBucketState"),j=o((t,e,r)=>{let n=r.getDependencies(y)[0]?.result;
60
- if(!n?.bucketName)throw new we.IncompleteResourceError(t,e,"bucketName");return n.
61
- bucketName},"getBucketName");var S=require("@aws-sdk/client-s3"),_=require("@ez4/aws-common");var x="AWS:S3/Policy",d="aws:s3.policy";var Re=new S.S3Client({}),Ee=o(async t=>{let{bucketName:e,role:r}=t;return _.Logger.
62
- logCreate(x,e),await Re.send(new S.PutBucketPolicyCommand({Bucket:e,Policy:JSON.
63
- stringify(r)})),{bucketName:e}},"createPolicy"),Ce=o(async t=>{_.Logger.logDelete(
64
- x,t);try{return await Re.send(new S.DeleteBucketPolicyCommand({Bucket:t})),!0}catch(e){
65
- if(!(e instanceof S.NoSuchBucket))throw e;return!1}},"deletePolicy");var Oe=o(()=>({equals:Ut,create:Te,replace:_t,preview:Gt,update:Vt,delete:Wt}),"\
66
- getPolicyHandler"),Ut=o((t,e)=>!!t.result&&t.result.bucketName===e.result?.bucketName,
67
- "equalsResource"),Gt=o((t,e)=>{let r={...t.parameters,dependencies:t.dependencies},
68
- n={...e.parameters,dependencies:e.dependencies},c=(0,je.deepCompare)(r,n,{exclude:{
69
- getRole:!0}});if(c.counts)return{...c,name:r.fromService}},"previewResource"),_t=o(
70
- async(t,e,r)=>{if(e.result)throw new he.ReplaceResourceError(x,t.entryId,e.entryId);
71
- return Te(t,r)},"replaceResource"),Te=o(async(t,e)=>{let r=t.parameters,n=j(x,"p\
72
- olicy",e),c=await r.getRole(e);return await Ee({bucketName:n,role:c}),{bucketName:n}},
73
- "createResource"),Vt=o(async()=>{},"updateResource"),Wt=o(async t=>{let e=t.result;
74
- e&&await Ce(e.bucketName)},"deleteResource");var De=o(()=>{(0,Ne.tryRegisterProvider)(d,Oe())},"registerPolicyProvider");var Ke=require("@ez4/aws-common");var Le=require("node:fs/promises"),Me=require("@ez4/aws-common"),F=require("@ez4/utils");var ze=require("node:fs"),l=require("@aws-sdk/client-s3"),w=require("@ez4/aws-common"),
75
- Fe=It(require("mime"),1);var k="AWS:S3/Object",g="aws:s3.object";var Zt=o(t=>t.type===g,"isBucketObjectState"),O=o((t,e)=>`${t}/${e}`,"getBucketO\
76
- bjectPath"),Jt=o(t=>t.getDependencies(g).map(({result:r,parameters:n})=>({lastModified:r?.
77
- lastModified,objectKey:n.objectKey})),"getBucketObjectFiles");var V=new l.S3Client({}),W=o(async(t,e)=>{let{objectKey:r,filePath:n}=e;w.Logger.
78
- logCreate(k,O(t,r));let c=Fe.default.getType(n);return await V.send(new l.PutObjectCommand(
79
- {Bucket:t,Key:r,Body:(0,ze.createReadStream)(n),...c&&{ContentType:c}})),{objectKey:r}},
80
- "putObject"),Ae=o(async(t,e,r)=>{w.Logger.logTag(k,O(t,e)),await V.send(new l.PutObjectTaggingCommand(
81
- {Bucket:t,Key:e,Tagging:{TagSet:(0,w.getTagList)({...r,ManagedBy:"EZ4"})}}))},"t\
82
- agObject"),Ie=o(async(t,e)=>{w.Logger.logDelete(k,O(t,e));try{return await V.send(
83
- new l.DeleteObjectCommand({Bucket:t,Key:e})),!0}catch(r){if(!(r instanceof l.NoSuchBucket))
84
- throw r;return!1}},"deleteObject");var qe=o(()=>({equals:Qt,create:$e,replace:Yt,preview:Xt,update:er,delete:tr}),"\
85
- getObjectHandler"),Qt=o((t,e)=>!!t.result&&t.result.lastModified===e.result?.lastModified,
86
- "equalsResource"),Xt=o(async(t,e)=>{let r=t.parameters,n=e.parameters,c=(0,F.deepCompare)(
87
- {...r,dependencies:t.dependencies,lastModified:await Z(r.filePath)},{...n,dependencies:e.
1
+ "use strict";var Lt=Object.create;var h=Object.defineProperty;var Nt=Object.getOwnPropertyDescriptor;var Tt=Object.getOwnPropertyNames;var Dt=Object.getPrototypeOf,zt=Object.prototype.hasOwnProperty;var n=(t,e)=>h(t,"name",{value:e,configurable:!0});var Ft=(t,e)=>{for(var r in e)h(t,r,{get:e[r],enumerable:!0})},oe=(t,e,r,o)=>{if(e&&
2
+ typeof e=="object"||typeof e=="function")for(let c of Tt(e))!zt.call(t,c)&&c!==r&&
3
+ h(t,c,{get:()=>e[c],enumerable:!(o=Nt(e,c))||o.enumerable});return t};var At=(t,e,r)=>(r=t!=null?Lt(Dt(t)):{},oe(e||!t||!t.__esModule?h(r,"default",{value:t,
4
+ enumerable:!0}):r,t)),It=t=>oe(h({},"__esModule",{value:!0}),t);var pr={};Ft(pr,{BucketServiceName:()=>b,BucketServiceType:()=>y,ObjectServiceName:()=>S,
5
+ ObjectServiceType:()=>l,PolicyServiceName:()=>w,PolicyServiceType:()=>g,buildBucketArn:()=>Z,
6
+ createBucket:()=>Q,createBucketEventFunction:()=>X,createBucketObject:()=>sr,createBucketPolicy:()=>ar,
7
+ createBucketStateId:()=>G,getBucketDomain:()=>cr,getBucketName:()=>j,getBucketObjectFiles:()=>Jt,
8
+ getBucketObjectPath:()=>N,getBucketState:()=>_,getPolicyDocument:()=>J,isBucketDomain:()=>nr,
9
+ isBucketObjectState:()=>Zt,isBucketPolicyState:()=>ir,isBucketState:()=>Re,registerTriggers:()=>or});
10
+ module.exports=It(pr);var St=require("@ez4/aws-common"),kt=require("@ez4/aws-identity"),bt=require("@ez4/aws-function"),
11
+ xt=require("@ez4/storage/library"),Pt=require("@ez4/project/library");var Be=require("@ez4/aws-common");var f=require("@ez4/aws-common"),U=require("@ez4/aws-function"),P=require("@ez4/utils");var ae=require("@ez4/aws-common"),s=require("@aws-sdk/client-s3");var ne=require("@ez4/aws-common"),ce=require("@aws-sdk/client-s3");var u=n(()=>new ce.S3Client((0,ne.getAwsClientOptions)()),"getS3Client");var ie=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"),se=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"),pe=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"),ue=n(async(t,e,r)=>{t.update(
18
+ "Tag bucket"),await u().send(new s.PutBucketTaggingCommand({Bucket:e,Tagging:{TagSet:(0,ae.getTagList)(
19
+ {...r,ManagedBy:"EZ4"})}}))},"tagBucket"),me=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"),ye=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"),le=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"),fe=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"),ge=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(
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",y="aws:s3.bucket";var de=n(()=>({equals:Mt,create:Se,replace:Kt,preview:qt,update:Ht,delete:$t}),"\
36
+ getBucketHandler"),Mt=n((t,e)=>!!t.result&&t.result.bucketName===e.result?.bucketName,
37
+ "equalsResource"),qt=n((t,e)=>{let r={...t.parameters,dependencies:t.dependencies},
38
+ o={...e.parameters,dependencies:e.dependencies},c=(0,P.deepCompare)(r,o);if(c.counts)
39
+ return{...c,name:r.bucketName}},"previewResource"),Kt=n(async(t,e,r)=>{if(e.result)
40
+ throw new f.ReplaceResourceError(b,t.entryId,e.entryId);return Se(t,r)},"replace\
41
+ Resource"),Se=n((t,e)=>{let r=t.parameters,o=(0,U.tryGetFunctionArn)(e);return f.OperationLogger.
42
+ logExecution(b,r.bucketName,"creation",async c=>{let{bucketName:a}=await se(c,r);
43
+ await ke(c,a,r,void 0),await be(c,a,r,void 0),await xe(c,a,r.tags,void 0);let i={
44
+ eventsPath:r.eventsPath,functionArn:o};return await Pe(c,a,i,{}),{bucketName:a,functionArn:o}})},
45
+ "createResource"),Ht=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,U.tryGetFunctionArn)(r),m=e.result?.functionArn;await ke(
48
+ i,a,c,e.parameters),await be(i,a,c,e.parameters),await xe(i,a,c.tags,e.parameters.
49
+ tags);let v={eventsPath:c.eventsPath,functionArn:p},C={eventsPath:e.parameters.eventsPath,
50
+ functionArn:m};return await Pe(i,a,v,C),{...o,functionArn:p}})},"updateResource"),
51
+ $t=n(async t=>{let e=t.result;if(!e)return;let{bucketName:r}=e;await f.OperationLogger.
52
+ logExecution(b,r,"deletion",async o=>{await ie(o,e.bucketName)&&await pe(o,e.bucketName)})},
53
+ "deleteResource"),ke=n(async(t,e,r,o)=>{if(!(r.cors&&o?.cors&&(0,P.deepEqual)(r.
54
+ cors,o.cors))){if(r.cors)return me(t,e,r.cors);if(o?.cors)return ye(t,e)}},"chec\
55
+ kCorsUpdates"),be=n(async(t,e,r,o)=>{if(r.autoExpireDays!==o?.autoExpireDays){if(r.
56
+ autoExpireDays)return le(t,e,r.autoExpireDays);if(o?.autoExpireDays)return fe(t,
57
+ e)}},"checkLifecycleUpdates"),xe=n(async(t,e,r,o)=>{let c=r??{};!(0,P.deepEqual)(
58
+ c,o??{})&&await ue(t,e,c)},"checkTagUpdates"),Pe=n(async(t,e,r,o)=>{!(0,P.deepEqual)(
59
+ r,o)&&await ge(t,e,{eventsType:["s3:ObjectCreated:*","s3:ObjectRemoved:*"],...r})},
60
+ "checkEventUpdates");var we=n(()=>{(0,Be.tryRegisterProvider)(y,de())},"registerBucketProvider");var Ne=require("@ez4/aws-common");var L=require("@ez4/aws-common"),he=require("@ez4/utils");var Ee=require("@ez4/aws-common"),F=require("@ez4/utils");var z=class extends Error{static{n(this,"BucketNotFoundError")}constructor(e){super(
61
+ `Bucket service ${e} wasn't found.`)}};var G=n(t=>(0,F.hashData)(y,(0,F.toKebabCase)(t)),"createBucketStateId"),Re=n(t=>t.
62
+ type===y,"isBucketState"),_=n((t,e,r)=>{let o=t.getServiceState(e,r);if(!Re(o))throw new z(
63
+ e);return o},"getBucketState"),j=n((t,e,r)=>{let o=r.getDependencies(y)[0]?.result;
64
+ if(!o?.bucketName)throw new Ee.IncompleteResourceError(t,e,"bucketName");return o.
65
+ bucketName},"getBucketName");var B=require("@aws-sdk/client-s3");var ve=u(),Ce=n(async(t,e)=>{t.update("Creating bucket policy");let{bucketName:r,
66
+ role:o}=e;return await ve.send(new B.PutBucketPolicyCommand({Bucket:r,Policy:JSON.
67
+ stringify(o)})),{bucketName:r}},"createPolicy"),Oe=n(async(t,e)=>{t.update("Dele\
68
+ ting bucket policy");try{return await ve.send(new B.DeleteBucketPolicyCommand({Bucket:e})),
69
+ !0}catch(r){if(!(r instanceof B.NoSuchBucket))throw r;return!1}},"deletePolicy");var w="AWS:S3/Policy",g="aws:s3.policy";var je=n(()=>({equals:Ut,create:Le,replace:_t,preview:Gt,update:Vt,delete:Wt}),"\
70
+ getPolicyHandler"),Ut=n((t,e)=>!!t.result&&t.result.bucketName===e.result?.bucketName,
71
+ "equalsResource"),Gt=n((t,e)=>{let r={...t.parameters,dependencies:t.dependencies},
72
+ o={...e.parameters,dependencies:e.dependencies},c=(0,he.deepCompare)(r,o,{exclude:{
73
+ getRole:!0}});if(c.counts)return{...c,name:r.fromService}},"previewResource"),_t=n(
74
+ async(t,e,r)=>{if(e.result)throw new L.ReplaceResourceError(w,t.entryId,e.entryId);
75
+ return Le(t,r)},"replaceResource"),Le=n((t,e)=>{let r=t.parameters,o=j(w,"policy",
76
+ e);return L.OperationLogger.logExecution(w,o,"creation",async c=>{let a=await r.
77
+ getRole(e);return await Ce(c,{bucketName:o,role:a}),{bucketName:o}})},"createRes\
78
+ ource"),Vt=n(async()=>{},"updateResource"),Wt=n(async t=>{let e=t.result;if(!e)return;
79
+ let{bucketName:r}=e;await L.OperationLogger.logExecution(w,r,"deletion",o=>Oe(o,
80
+ r))},"deleteResource");var Te=n(()=>{(0,Ne.tryRegisterProvider)(g,je())},"registerPolicyProvider");var $e=require("@ez4/aws-common");var Me=require("node:fs/promises"),k=require("@ez4/aws-common"),A=require("@ez4/utils");var De=require("node:fs"),d=require("@aws-sdk/client-s3"),ze=require("@ez4/aws-common");var Fe=At(require("mime"),1);var V=n(async(t,e,r)=>{t.update("Creating object");let{objectKey:o,filePath:c}=r,
81
+ a=Fe.default.getType(c);return await u().send(new d.PutObjectCommand({Bucket:e,Key:o,
82
+ Body:(0,De.createReadStream)(c),...a&&{ContentType:a}})),{objectKey:o}},"putObje\
83
+ ct"),Ae=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,ze.getTagList)({...o,ManagedBy:"EZ4"})}}))},"\
85
+ updateTags"),Ie=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",l="aws:s3.object";var Zt=n(t=>t.type===l,"isBucketObjectState"),N=n((t,e)=>`${t}/${e}`,"getBucketO\
88
+ bjectPath"),Jt=n(t=>t.getDependencies(l).map(({result:r,parameters:o})=>({lastModified:r?.
89
+ lastModified,objectKey:o.objectKey})),"getBucketObjectFiles");var qe=n(()=>({equals:Qt,create:Ke,replace:Yt,preview:Xt,update:er,delete:tr}),"\
90
+ getObjectHandler"),Qt=n((t,e)=>!!t.result&&t.result.lastModified===e.result?.lastModified,
91
+ "equalsResource"),Xt=n(async(t,e)=>{let r=t.parameters,o=e.parameters,c=(0,A.deepCompare)(
92
+ {...r,dependencies:t.dependencies,lastModified:await W(r.filePath)},{...o,dependencies:e.
88
93
  dependencies,lastModified:t.result?.lastModified});if(c.counts)return{...c,name:r.
89
- objectKey}},"previewResource"),Yt=o(async(t,e,r)=>{if(e.result)throw new Me.ReplaceResourceError(
90
- k,t.entryId,e.entryId);return $e(t,r)},"replaceResource"),$e=o(async(t,e)=>{let r=t.
91
- parameters,n=j(k,"bucket",e),c=await Z(r.filePath),{objectKey:s}=await W(n,r);return await He(
92
- n,s,r.tags,t.parameters.tags),{lastModified:c,bucketName:n}},"createResource"),er=o(
93
- async(t,e)=>{let{result:r,parameters:n}=t;if(!r)return;let{objectKey:c,tags:s}=n,
94
- i=rr(r,n,e.parameters);return await He(r.bucketName,c,s,e.parameters.tags),i},"u\
95
- pdateResource"),tr=o(async t=>{let{result:e,parameters:r}=t;e&&await Ie(e.bucketName,
96
- r.objectKey)},"deleteResource"),Z=o(async t=>{let{mtime:e}=await(0,Le.stat)(t);return e.
97
- getTime()},"getLastModifiedTime"),rr=o(async(t,e,r)=>{let n=await Z(e.filePath);
98
- if(n<=t.lastModified&&e.filePath===r.filePath)return t;let{bucketName:c}=t,{objectKey:s}=r;
99
- return await W(c,{...e,objectKey:s}),{lastModified:n,bucketName:c}},"checkObject\
100
- Updates"),He=o(async(t,e,r,n)=>{let c=r??{};!(0,F.deepEqual)(c,n??{})&&await Ae(
101
- t,e,c)},"checkTagUpdates");var Ue=o(()=>{(0,Ke.tryRegisterProvider)(g,qe())},"registerObjectProvider");var q=require("@ez4/storage/library");var A=require("@ez4/stateful"),_e=require("@ez4/aws-function");var Ge=require("@ez4/aws-identity");var J=o(t=>`arn:aws:s3:::${t}`,"buildBucketArn"),Q=o(t=>(0,Ge.createPolicyDocument)(
94
+ objectKey}},"previewResource"),Yt=n(async(t,e,r)=>{if(e.result)throw new k.ReplaceResourceError(
95
+ S,t.entryId,e.entryId);return Ke(t,r)},"replaceResource"),Ke=n((t,e)=>{let r=t.parameters,
96
+ o=j(S,"bucket",e),c=N(o,r.objectKey);return k.OperationLogger.logExecution(S,c,"\
97
+ creation",async a=>{let i=await W(r.filePath),{objectKey:p}=await V(a,o,r);return await He(
98
+ a,o,p,r.tags,t.parameters.tags),{lastModified:i,bucketName:o}})},"createResource"),
99
+ er=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=N(r.bucketName,c);return k.OperationLogger.logExecution(S,i,"updates",
101
+ async p=>{let m=rr(p,r,o,e.parameters);return await He(p,r.bucketName,c,a,e.parameters.
102
+ tags),m})},"updateResource"),tr=n(async t=>{let{result:e,parameters:r}=t;if(!e)return;
103
+ let o=N(e.bucketName,r.objectKey);await k.OperationLogger.logExecution(S,o,"dele\
104
+ tion",async c=>{await Ie(c,e.bucketName,r.objectKey)})},"deleteResource"),W=n(async t=>{
105
+ let{mtime:e}=await(0,Me.stat)(t);return e.getTime()},"getLastModifiedTime"),rr=n(
106
+ async(t,e,r,o)=>{let c=await W(r.filePath);if(c<=e.lastModified&&r.filePath===o.
107
+ filePath)return e;let{bucketName:a}=e,{objectKey:i}=o;return await V(t,a,{...r,objectKey:i}),
108
+ {lastModified:c,bucketName:a}},"checkObjectUpdates"),He=n(async(t,e,r,o,c)=>{let a=o??
109
+ {};!(0,A.deepEqual)(a,c??{})&&await Ae(t,e,r,a)},"checkTagUpdates");var Ue=n(()=>{(0,$e.tryRegisterProvider)(l,qe())},"registerObjectProvider");var H=require("@ez4/storage/library");var I=require("@ez4/stateful"),_e=require("@ez4/aws-function");var Ge=require("@ez4/aws-identity");var Z=n(t=>`arn:aws:s3:::${t}`,"buildBucketArn"),J=n(t=>(0,Ge.createPolicyDocument)(
102
110
  [{resourceIds:[`arn:aws:s3:::${t}-*`,`arn:aws:s3:::${t}-*/*`],permissions:["s3:L\
103
111
  istBucket","s3:PutObject","s3:GetObject","s3:DeleteObject"]}]),"getPolicyDocumen\
104
- t");var X=o((t,e,r)=>{let n=r.bucketName,c=U(n),s=(0,A.attachEntry)(t,{type:y,entryId:c,
105
- dependencies:[],parameters:r});return e&&((0,_e.createPermission)(t,s,e,{fromService:r.
106
- bucketName,getPermission:o(()=>({principal:"s3.amazonaws.com",sourceArn:J(n)}),"\
107
- getPermission")}),(0,A.linkEntryDependency)(t,s.entryId,e.entryId)),s},"createBu\
108
- cket");var M=require("@ez4/aws-function"),ot=require("@ez4/project/library"),te=require("@ez4/aws-identity"),
112
+ t");var Q=n((t,e,r)=>{let o=r.bucketName,c=G(o),a=(0,I.attachEntry)(t,{type:y,entryId:c,
113
+ dependencies:[],parameters:r});return e&&((0,_e.createPermission)(t,a,e,{fromService:r.
114
+ bucketName,getPermission:n(()=>({principal:"s3.amazonaws.com",sourceArn:Z(o)}),"\
115
+ getPermission")}),(0,I.linkEntryDependency)(t,a.entryId,e.entryId)),a},"createBu\
116
+ cket");var K=require("@ez4/aws-function"),ot=require("@ez4/project/library"),ee=require("@ez4/aws-identity"),
109
117
  nt=require("@ez4/aws-logs");var Xe=require("@ez4/aws-function"),Ye=require("@ez4/utils");var Ve=require("node:path"),We=require("@ez4/project/library"),Ze=require("@ez4/aws-function"),
110
- Je=require("@ez4/aws-common");var Qe=o(async(t,e)=>{let{handler:r,listener:n,context:c,debug:s}=t,i=(0,We.getDefinitionsObject)(
118
+ Je=require("@ez4/aws-common");var Qe=n(async(t,e)=>{let{handler:r,listener:o,context:c,debug:a}=t,i=(0,We.getDefinitionsObject)(
111
119
  e);return(0,Je.getFunctionBundle)(Ze.MappingServiceName,{templateFile:(0,Ve.join)(
112
- __dirname,"../lib/event.ts"),define:i,filePrefix:"s3",handler:r,listener:n,context:c,
113
- debug:s})},"bundleBucketEventFunction");var Y=o((t,e,r,n)=>{let{handler:c,variables:s,architecture:i}=n;return(0,Xe.createFunction)(
114
- t,e,r,{handlerName:"s3EntryPoint",sourceFile:c.sourceFile,functionName:n.functionName,
115
- description:n.description,architecture:n.architecture,runtime:n.runtime,release:n.
116
- release,timeout:n.timeout,memory:n.memory,debug:n.debug,tags:n.tags,getFunctionVariables:o(
117
- ()=>s.reduce((p,b)=>({...p,...b}),{}),"getFunctionVariables"),getFunctionFiles:o(
118
- ()=>[c.sourceFile,c.dependencies],"getFunctionFiles"),getFunctionBundle:o(p=>Qe(
119
- n,[...p.getDependencies(),...p.getConnections()]),"getFunctionBundle"),getFunctionHash:o(
120
+ __dirname,"../lib/event.ts"),define:i,filePrefix:"s3",handler:r,listener:o,context:c,
121
+ debug:a})},"bundleBucketEventFunction");var X=n((t,e,r,o)=>{let{handler:c,variables:a,architecture:i}=o;return(0,Xe.createFunction)(
122
+ t,e,r,{handlerName:"s3EntryPoint",sourceFile:c.sourceFile,functionName:o.functionName,
123
+ description:o.description,architecture:o.architecture,runtime:o.runtime,release:o.
124
+ release,timeout:o.timeout,memory:o.memory,debug:o.debug,tags:o.tags,getFunctionVariables:n(
125
+ ()=>a.reduce((p,m)=>({...p,...m}),{}),"getFunctionVariables"),getFunctionFiles:n(
126
+ ()=>[c.sourceFile,c.dependencies],"getFunctionFiles"),getFunctionBundle:n(p=>Qe(
127
+ o,[...p.getDependencies(),...p.getConnections()]),"getFunctionBundle"),getFunctionHash:n(
120
128
  ()=>(0,Ye.hashObject)({architecture:i}),"getFunctionHash")})},"createBucketEvent\
121
- Function");var I=require("@ez4/project/library"),et=require("@ez4/aws-common"),L=require("@ez4/utils");var tt=o(async(t,e)=>{if(t.globalName)return(0,I.getServiceName)(t.globalName,e);
122
- let r=(0,I.getServiceName)(t,e),n=await(0,et.getRandomName)(16);return`${r.substring(
123
- 0,46)}-${n}`},"getBucketName"),ee=o((t,e)=>`${(0,L.toKebabCase)(t.name)}-${(0,L.toKebabCase)(
124
- e)}`,"getInternalName"),rt=o((t,e,r)=>`${(0,I.getServiceName)(t,r)}-${(0,L.toKebabCase)(
125
- e)}`,"getFunctionName");var T=class extends Error{static{o(this,"RoleMissingError")}constructor(){super(
126
- "Execution role for S3 is missing.")}};var v=require("@ez4/aws-function"),P;(s=>(s.LogRetention=v.FunctionDefaults.LogRetention,
127
- s.Architecture=v.FunctionDefaults.Architecture,s.Runtime=v.FunctionDefaults.Runtime,
128
- s.Timeout=v.FunctionDefaults.Timeout,s.Memory=v.FunctionDefaults.Memory))(P||={});var ct=o((t,e,r,n)=>{if(!e.events)return;if(!n.role||!(0,te.isRoleState)(n.role))
129
- throw new T;let{defaults:c,release:s}=r,{handler:i,listener:p,variables:b,runtime:E=c?.
130
- runtime??P.Runtime,architecture:H=c?.architecture??P.Architecture,logRetention:N=c?.
131
- logRetention??P.LogRetention,memory:Ct=c?.memory??P.Memory,timeout:ht=P.Timeout}=e.
132
- events,re=ee(e,i.name),C=(0,M.tryGetFunctionState)(n,re,r);if(C)return C;let oe=rt(
133
- e,i.name,r),jt=n.getDependencyFiles(i.file),Ot=(0,nt.createLogGroup)(t,{retention:N,
134
- groupName:oe,tags:r.tags});return C=Y(t,n.role,Ot,{functionName:oe,description:i.
129
+ Function");var M=require("@ez4/project/library"),et=require("@ez4/aws-common"),q=require("@ez4/utils");var tt=n(async(t,e)=>{if(t.globalName)return(0,M.getServiceName)(t.globalName,e);
130
+ let r=(0,M.getServiceName)(t,e),o=await(0,et.getRandomName)(16);return`${r.substring(
131
+ 0,46)}-${o}`},"getBucketName"),Y=n((t,e)=>`${(0,q.toKebabCase)(t.name)}-${(0,q.toKebabCase)(
132
+ e)}`,"getInternalName"),rt=n((t,e,r)=>`${(0,M.getServiceName)(t,r)}-${(0,q.toKebabCase)(
133
+ e)}`,"getFunctionName");var T=class extends Error{static{n(this,"RoleMissingError")}constructor(){super(
134
+ "Execution role for S3 is missing.")}};var E=require("@ez4/aws-function"),x;(a=>(a.LogRetention=E.FunctionDefaults.LogRetention,
135
+ a.Architecture=E.FunctionDefaults.Architecture,a.Runtime=E.FunctionDefaults.Runtime,
136
+ a.Timeout=E.FunctionDefaults.Timeout,a.Memory=E.FunctionDefaults.Memory))(x||={});var ct=n((t,e,r,o)=>{if(!e.events)return;if(!o.role||!(0,ee.isRoleState)(o.role))
137
+ throw new T;let{defaults:c,release:a}=r,{handler:i,listener:p,variables:m,runtime:v=c?.
138
+ runtime??x.Runtime,architecture:C=c?.architecture??x.Architecture,logRetention:D=c?.
139
+ logRetention??x.LogRetention,memory:Ct=c?.memory??x.Memory,timeout:Ot=x.Timeout}=e.
140
+ events,te=Y(e,i.name),O=(0,K.tryGetFunctionState)(o,te,r);if(O)return O;let re=rt(
141
+ e,i.name,r),ht=o.getDependencyFiles(i.file),jt=(0,nt.createLogGroup)(t,{retention:D,
142
+ groupName:re,tags:r.tags});return O=X(t,o.role,jt,{functionName:re,description:i.
135
143
  description,context:e.context,debug:r.debug,tags:r.tags,variables:[r.variables,e.
136
- variables,b],architecture:H,runtime:E,release:s,timeout:ht,memory:Ct,handler:{sourceFile:i.
137
- file,functionName:i.name,module:i.module,dependencies:jt},listener:p&&{functionName:p.
138
- name,sourceFile:p.file,module:p.module}}),n.setServiceState(C,re,r),C},"prepareE\
139
- vents"),st=o((t,e,r,n)=>{if(!e.events)return;if(!n.role||!(0,te.isRoleState)(n.role))
140
- throw new T;let{handler:c}=e.events,s=ee(e,c.name),i=(0,M.getFunctionState)(n,s,
141
- r);(0,ot.linkServiceContext)(t,i.entryId,e.context)},"connectEvents");var at=require("node:fs/promises"),R=require("node:path"),it=require("@ez4/aws-bucket");var pt=o(async(t,e,r)=>{let n=process.cwd(),c=(0,R.join)(n,r),s=await(0,at.readdir)(
142
- c,{withFileTypes:!0,recursive:!0});for(let i of s){if(!i.isFile())continue;let p=(0,R.join)(
143
- i.parentPath,i.name);(0,it.createBucketObject)(t,e,{objectKey:(0,R.relative)(c,p),
144
- filePath:(0,R.relative)(n,p)})}},"prepareLocalContent");var mt=o((t,e,r)=>{let n=G(t,e.name,r),c=n.entryId;return{module:"Client",from:"\
145
- @ez4/aws-bucket/client",constructor:`@{EZ4_MODULE_IMPORT}.make('${n.parameters.bucketName}\
146
- ')`,connectionIds:[c],dependencyIds:[c]}},"prepareLinkedClient");var ut=o(t=>{let{service:e,options:r,context:n}=t;return(0,q.isBucketService)(e)?
147
- mt(n,e,r):null},"prepareLinkedServices"),lt=o(async t=>{let{state:e,service:r,options:n,
148
- context:c}=t;if(!(0,q.isBucketService)(r))return!1;let{localPath:s,autoExpireDays:i,
149
- events:p,cors:b}=r,E=await tt(r,n),H=ct(e,r,n,c),N=X(e,H,{eventsPath:p?.path,tags:n.
150
- tags,bucketName:E,autoExpireDays:i,localPath:s,cors:b});return c.setServiceState(
151
- N,r,n),s&&await pt(e,N,s),!0},"prepareBucketServices"),yt=o(t=>{let{state:e,service:r,
152
- options:n,context:c}=t;(0,q.isBucketService)(r)&&st(e,r,n,c)},"connectBucketServ\
153
- ices");var ft=require("@ez4/storage/library"),$=require("@ez4/aws-identity"),gt=require("@ez4/project/library");var dt=o(t=>{let{state:e,serviceType:r,options:n}=t;if(r!==ft.ServiceType)return null;
154
- let c=(0,gt.getServiceName)("",n),s=`${c}-bucket-policy`;return(0,$.tryGetPolicy)(
155
- e,s)??(0,$.createPolicy)(e,{tags:n.tags,policyDocument:Q(c),policyName:s})},"pre\
156
- pareExecutionPolicy");var or=o(()=>{(0,St.registerTriggers)(),(0,kt.registerTriggers)(),(0,bt.registerTriggers)(),
144
+ variables,m],architecture:C,runtime:v,release:a,timeout:Ot,memory:Ct,handler:{sourceFile:i.
145
+ file,functionName:i.name,module:i.module,dependencies:ht},listener:p&&{functionName:p.
146
+ name,sourceFile:p.file,module:p.module}}),o.setServiceState(te,r,O),O},"prepareE\
147
+ vents"),at=n((t,e,r,o)=>{if(!e.events)return;if(!o.role||!(0,ee.isRoleState)(o.role))
148
+ throw new T;let{handler:c}=e.events,a=Y(e,c.name),i=(0,K.getFunctionState)(o,a,r);
149
+ (0,ot.linkServiceContext)(t,i.entryId,e.context)},"connectEvents");var it=require("node:fs/promises"),R=require("node:path"),st=require("@ez4/aws-bucket");var pt=n(async(t,e,r)=>{let o=process.cwd(),c=(0,R.join)(o,r),a=await(0,it.readdir)(
150
+ c,{withFileTypes:!0,recursive:!0});for(let i of a){if(!i.isFile())continue;let p=(0,R.join)(
151
+ i.parentPath,i.name);(0,st.createBucketObject)(t,e,{objectKey:(0,R.relative)(c,p),
152
+ filePath:(0,R.relative)(o,p)})}},"prepareLocalContent");var ut=n((t,e,r)=>{let o=_(t,e.name,r),c=o.entryId;return{module:"Client",from:"\
153
+ @ez4/aws-bucket/client",constructor:`@{EZ4_MODULE_IMPORT}.make('${o.parameters.bucketName}\
154
+ ')`,dependencyIds:[c],connectionIds:[c]}},"prepareLinkedClient");var mt=n(t=>{let{service:e,options:r,context:o}=t;return(0,H.isBucketService)(e)?
155
+ ut(o,e,r):null},"prepareLinkedServices"),yt=n(async t=>{let{state:e,service:r,options:o,
156
+ context:c}=t;if(!(0,H.isBucketService)(r))return!1;let{localPath:a,autoExpireDays:i,
157
+ events:p,cors:m}=r,v=await tt(r,o),C=ct(e,r,o,c),D=Q(e,C,{eventsPath:p?.path,tags:o.
158
+ tags,bucketName:v,autoExpireDays:i,localPath:a,cors:m});return c.setServiceState(
159
+ r,o,D),a&&await pt(e,D,a),!0},"prepareBucketServices"),lt=n(t=>{let{state:e,service:r,
160
+ options:o,context:c}=t;(0,H.isBucketService)(r)&&at(e,r,o,c)},"connectBucketServ\
161
+ ices");var ft=require("@ez4/storage/library"),$=require("@ez4/aws-identity"),gt=require("@ez4/project/library");var dt=n(t=>{let{state:e,serviceType:r,options:o}=t;if(r!==ft.ServiceType)return null;
162
+ let c=(0,gt.getServiceName)("",o),a=`${c}-bucket-policy`;return(0,$.tryGetPolicy)(
163
+ e,a)??(0,$.createPolicy)(e,{tags:o.tags,policyDocument:J(c),policyName:a})},"pre\
164
+ pareExecutionPolicy");var or=n(()=>{(0,St.registerTriggers)(),(0,kt.registerTriggers)(),(0,bt.registerTriggers)(),
157
165
  (0,xt.registerTriggers)(),(0,Pt.tryCreateTrigger)("@ez4/aws-bucket",{"deploy:pre\
158
- pareExecutionPolicy":dt,"deploy:prepareLinkedService":ut,"deploy:prepareResource\
159
- s":lt,"deploy:connectResources":yt}),Be(),De(),Ue()},"registerTriggers");var Bt=require("@ez4/aws-identity");var nr=o(t=>/(.+)\.s3\.(.+)\.amazonaws\.com/i.test(t),"isBucketDomain"),cr=o(async t=>{
166
+ pareExecutionPolicy":dt,"deploy:prepareLinkedService":mt,"deploy:prepareResource\
167
+ s":yt,"deploy:connectResources":lt}),we(),Te(),Ue()},"registerTriggers");var Bt=require("@ez4/aws-identity");var nr=n(t=>/(.+)\.s3\.(.+)\.amazonaws\.com/i.test(t),"isBucketDomain"),cr=n(async t=>{
160
168
  let e=await(0,Bt.getRegion)();return`${t}.s3.${e}.amazonaws.com`},"getBucketDoma\
161
- in");var wt=require("@ez4/stateful"),vt=require("@ez4/utils");var sr=o((t,e,r,n)=>{let c=(0,vt.hashData)(d,e.entryId,r.entryId);return(0,wt.attachEntry)(
162
- t,{type:d,entryId:c,dependencies:[e.entryId,r.entryId],parameters:n})},"createBu\
163
- cketPolicy");var ar=o(t=>t.type===d,"isBucketPolicyState");var Rt=require("@ez4/stateful"),Et=require("@ez4/utils");var ir=o((t,e,r)=>{let n=r.objectKey,c=(0,Et.hashData)(g,e.entryId,n);return(0,Rt.attachEntry)(
164
- t,{type:g,entryId:c,dependencies:[e.entryId],parameters:r})},"createBucketObject");0&&(module.exports={BucketServiceName,BucketServiceType,ObjectServiceName,ObjectServiceType,
169
+ in");var wt=require("@ez4/stateful"),Et=require("@ez4/utils");var ar=n((t,e,r,o)=>{let c=(0,Et.hashData)(g,e.entryId,r.entryId);return(0,wt.attachEntry)(
170
+ t,{type:g,entryId:c,dependencies:[e.entryId,r.entryId],parameters:o})},"createBu\
171
+ cketPolicy");var ir=n(t=>t.type===g,"isBucketPolicyState");var Rt=require("@ez4/stateful"),vt=require("@ez4/utils");var sr=n((t,e,r)=>{let o=r.objectKey,c=(0,vt.hashData)(l,e.entryId,o);return(0,Rt.attachEntry)(
172
+ t,{type:l,entryId:c,dependencies:[e.entryId],parameters:r})},"createBucketObject");0&&(module.exports={BucketServiceName,BucketServiceType,ObjectServiceName,ObjectServiceType,
165
173
  PolicyServiceName,PolicyServiceType,buildBucketArn,createBucket,createBucketEventFunction,
166
174
  createBucketObject,createBucketPolicy,createBucketStateId,getBucketDomain,getBucketName,
167
175
  getBucketObjectFiles,getBucketObjectPath,getBucketState,getPolicyDocument,isBucketDomain,
package/dist/main.mjs CHANGED
@@ -1,154 +1,160 @@
1
- var qe=Object.defineProperty;var o=(t,e)=>qe(t,"name",{value:e,configurable:!0});import{registerTriggers as pr}from"@ez4/aws-common";import{registerTriggers as mr}from"@ez4/aws-identity";
2
- import{registerTriggers as ur}from"@ez4/aws-function";import{registerTriggers as lr}from"@ez4/storage/library";
3
- import{tryCreateTrigger as yr}from"@ez4/project/library";import{tryRegisterProvider as st}from"@ez4/aws-common";import{ReplaceResourceError as Ye}from"@ez4/aws-common";import{tryGetFunctionArn as Z}from"@ez4/aws-function";
4
- import{deepCompare as et,deepEqual as j}from"@ez4/utils";import{getTagList as $e,Logger as m}from"@ez4/aws-common";import{S3Client as He,
5
- ListObjectsV2Command as Ke,CreateBucketCommand as Ue,DeleteBucketCommand as Ge,PutBucketTaggingCommand as _e,
6
- PutBucketCorsCommand as Ve,DeleteBucketCorsCommand as We,PutBucketLifecycleConfigurationCommand as Ze,
7
- DeleteBucketLifecycleCommand as Je,PutBucketNotificationConfigurationCommand as Qe,
8
- ExpirationStatus as Xe,NoSuchBucket as v}from"@aws-sdk/client-s3";var p="AWS:S3/Bucket",l="aws:s3.bucket";var u=new He({}),q=o(async t=>{m.logFetch(p,t);try{return!(await u.send(new Ke({
9
- Bucket:t,MaxKeys:1}))).Contents?.length}catch(e){if(!(e instanceof v))throw e;return 0}},
10
- "isBucketEmpty"),$=o(async t=>{let{bucketName:e}=t;return m.logCreate(p,e),await u.
11
- send(new Ue({Bucket:e})),{bucketName:e}},"createBucket"),H=o(async t=>{m.logDelete(
12
- p,t);try{return await u.send(new Ge({Bucket:t})),!0}catch(e){if(!(e instanceof v))
13
- throw e;return!1}},"deleteBucket"),K=o(async(t,e)=>{m.logTag(p,t),await u.send(new _e(
14
- {Bucket:t,Tagging:{TagSet:$e({...e,ManagedBy:"EZ4"})}}))},"tagBucket"),U=o(async(t,e)=>{
15
- m.logUpdate(p,`${t} CORS`),await u.send(new Ve({Bucket:t,CORSConfiguration:{CORSRules:[
16
- {ID:"ID0",AllowedOrigins:e.allowOrigins,AllowedMethods:e.allowMethods,AllowedHeaders:e.
17
- allowHeaders,ExposeHeaders:e.exposeHeaders,MaxAgeSeconds:e.maxAge}]}}))},"update\
18
- CorsConfiguration"),G=o(async t=>{m.logDelete(p,`${t} CORS`);try{return await u.
19
- send(new We({Bucket:t})),!0}catch(e){if(!(e instanceof v))throw e;return!1}},"de\
20
- leteCorsConfiguration"),_=o(async(t,e)=>{m.logCreate(p,`${t} lifecycle`),await u.
21
- send(new Ze({Bucket:t,LifecycleConfiguration:{Rules:[{ID:"ID0",Status:Xe.Enabled,
22
- Filter:{Prefix:"*"},Expiration:{Days:e}}]}}))},"createLifecycle"),V=o(async t=>{
23
- m.logDelete(p,`${t} lifecycle`);try{return await u.send(new Je({Bucket:t})),!0}catch(e){
24
- if(!(e instanceof v))throw e;return!1}},"deleteLifecycle"),W=o(async(t,e)=>{m.logUpdate(
25
- p,`${t} events`);let{functionArn:r,eventsPath:n,eventsType:c}=e;await u.send(new Qe(
26
- {Bucket:t,SkipDestinationValidation:!0,NotificationConfiguration:{...r&&{LambdaFunctionConfigurations:[
27
- {Id:"ID0",LambdaFunctionArn:r,Events:c,...n&&{Filter:{Key:{FilterRules:[{Name:"p\
28
- refix",Value:n}]}}}}]}}}))},"updateEventNotifications");var J=o(()=>({equals:tt,create:Q,replace:ot,preview:rt,update:nt,delete:ct}),"ge\
29
- tBucketHandler"),tt=o((t,e)=>!!t.result&&t.result.bucketName===e.result?.bucketName,
30
- "equalsResource"),rt=o((t,e)=>{let r={...t.parameters,dependencies:t.dependencies},
31
- n={...e.parameters,dependencies:e.dependencies},c=et(r,n);if(c.counts)return{...c,
32
- name:r.bucketName}},"previewResource"),ot=o(async(t,e,r)=>{if(e.result)throw new Ye(
33
- p,t.entryId,e.entryId);return Q(t,r)},"replaceResource"),Q=o(async(t,e)=>{let r=t.
34
- parameters,n=Z(e),{bucketName:c}=await $(r);await X(c,r,void 0),await Y(c,r,void 0),
35
- await ee(c,r.tags,void 0);let s={eventsPath:r.eventsPath,functionArn:n};return await te(
36
- c,s,{}),{bucketName:c,functionArn:n}},"createResource"),nt=o(async(t,e,r)=>{let{
37
- result:n,parameters:c}=t;if(!n)return;let s=n.bucketName,a=Z(r),i=e.result?.functionArn;
38
- await X(s,c,e.parameters),await Y(s,c,e.parameters),await ee(s,c.tags,e.parameters.
39
- tags);let f={eventsPath:c.eventsPath,functionArn:a},b={eventsPath:e.parameters.eventsPath,
40
- functionArn:i};return await te(s,f,b),{...n,functionArn:a}},"updateResource"),ct=o(
41
- async t=>{let e=t.result;e&&await q(e.bucketName)&&await H(e.bucketName)},"delet\
42
- eResource"),X=o(async(t,e,r)=>{if(!(e.cors&&r?.cors&&j(e.cors,r.cors))){if(e.cors)
43
- return U(t,e.cors);if(r?.cors)return G(t)}},"checkCorsUpdates"),Y=o(async(t,e,r)=>{
44
- if(e.autoExpireDays!==r?.autoExpireDays){if(e.autoExpireDays)return _(t,e.autoExpireDays);
45
- if(r?.autoExpireDays)return V(t)}},"checkLifecycleUpdates"),ee=o(async(t,e,r)=>{
46
- let n=e??{};!j(n,r??{})&&await K(t,n)},"checkTagUpdates"),te=o(async(t,e,r)=>{!j(
47
- e,r)&&await W(t,{eventsType:["s3:ObjectCreated:*","s3:ObjectRemoved:*"],...e})},
48
- "checkEventUpdates");var re=o(()=>{st(l,J())},"registerBucketProvider");import{tryRegisterProvider as Bt}from"@ez4/aws-common";import{ReplaceResourceError as gt}from"@ez4/aws-common";import{deepCompare as dt}from"@ez4/utils";import{IncompleteResourceError as at}from"@ez4/aws-common";import{hashData as it,
49
- toKebabCase as pt}from"@ez4/utils";var R=class extends Error{static{o(this,"BucketNotFoundError")}constructor(e){super(
50
- `Bucket service ${e} wasn't found.`)}};var oe=o(t=>it(l,pt(t)),"createBucketStateId"),mt=o(t=>t.type===l,"isBucketState"),
51
- ne=o((t,e,r)=>{let n=t.getServiceState(e,r);if(!mt(n))throw new R(e);return n},"\
52
- getBucketState"),E=o((t,e,r)=>{let n=r.getDependencies(l)[0]?.result;if(!n?.bucketName)
53
- throw new at(t,e,"bucketName");return n.bucketName},"getBucketName");import{S3Client as ut,PutBucketPolicyCommand as lt,DeleteBucketPolicyCommand as yt,
54
- NoSuchBucket as ft}from"@aws-sdk/client-s3";import{Logger as ce}from"@ez4/aws-common";var k="AWS:S3/Policy",g="aws:s3.policy";var se=new ut({}),ae=o(async t=>{let{bucketName:e,role:r}=t;return ce.logCreate(
55
- k,e),await se.send(new lt({Bucket:e,Policy:JSON.stringify(r)})),{bucketName:e}},
56
- "createPolicy"),ie=o(async t=>{ce.logDelete(k,t);try{return await se.send(new yt(
57
- {Bucket:t})),!0}catch(e){if(!(e instanceof ft))throw e;return!1}},"deletePolicy");var pe=o(()=>({equals:St,create:me,replace:bt,preview:kt,update:xt,delete:Pt}),"\
58
- getPolicyHandler"),St=o((t,e)=>!!t.result&&t.result.bucketName===e.result?.bucketName,
59
- "equalsResource"),kt=o((t,e)=>{let r={...t.parameters,dependencies:t.dependencies},
60
- n={...e.parameters,dependencies:e.dependencies},c=dt(r,n,{exclude:{getRole:!0}});
61
- if(c.counts)return{...c,name:r.fromService}},"previewResource"),bt=o(async(t,e,r)=>{
62
- if(e.result)throw new gt(k,t.entryId,e.entryId);return me(t,r)},"replaceResource"),
63
- me=o(async(t,e)=>{let r=t.parameters,n=E(k,"policy",e),c=await r.getRole(e);return await ae(
64
- {bucketName:n,role:c}),{bucketName:n}},"createResource"),xt=o(async()=>{},"updat\
65
- eResource"),Pt=o(async t=>{let e=t.result;e&&await ie(e.bucketName)},"deleteReso\
66
- urce");var ue=o(()=>{Bt(g,pe())},"registerPolicyProvider");import{tryRegisterProvider as $t}from"@ez4/aws-common";import{stat as Tt}from"node:fs/promises";import{ReplaceResourceError as Nt}from"@ez4/aws-common";
67
- import{deepCompare as Dt,deepEqual as zt}from"@ez4/utils";import{createReadStream as wt}from"node:fs";import{S3Client as vt,PutObjectCommand as Rt,
68
- PutObjectTaggingCommand as Et,DeleteObjectCommand as Ct,NoSuchBucket as ht}from"@aws-sdk/client-s3";
69
- import{getTagList as jt,Logger as O}from"@ez4/aws-common";import Ot from"mime";var d="AWS:S3/Object",y="aws:s3.object";var lo=o(t=>t.type===y,"isBucketObjectState"),C=o((t,e)=>`${t}/${e}`,"getBucketO\
70
- bjectPath"),yo=o(t=>t.getDependencies(y).map(({result:r,parameters:n})=>({lastModified:r?.
71
- lastModified,objectKey:n.objectKey})),"getBucketObjectFiles");var T=new vt({}),N=o(async(t,e)=>{let{objectKey:r,filePath:n}=e;O.logCreate(d,C(
72
- t,r));let c=Ot.getType(n);return await T.send(new Rt({Bucket:t,Key:r,Body:wt(n),
73
- ...c&&{ContentType:c}})),{objectKey:r}},"putObject"),le=o(async(t,e,r)=>{O.logTag(
74
- d,C(t,e)),await T.send(new Et({Bucket:t,Key:e,Tagging:{TagSet:jt({...r,ManagedBy:"\
75
- EZ4"})}}))},"tagObject"),ye=o(async(t,e)=>{O.logDelete(d,C(t,e));try{return await T.
76
- send(new Ct({Bucket:t,Key:e})),!0}catch(r){if(!(r instanceof ht))throw r;return!1}},
77
- "deleteObject");var fe=o(()=>({equals:Ft,create:ge,replace:It,preview:At,update:Lt,delete:Mt}),"\
78
- getObjectHandler"),Ft=o((t,e)=>!!t.result&&t.result.lastModified===e.result?.lastModified,
79
- "equalsResource"),At=o(async(t,e)=>{let r=t.parameters,n=e.parameters,c=Dt({...r,
80
- dependencies:t.dependencies,lastModified:await D(r.filePath)},{...n,dependencies:e.
81
- dependencies,lastModified:t.result?.lastModified});if(c.counts)return{...c,name:r.
82
- objectKey}},"previewResource"),It=o(async(t,e,r)=>{if(e.result)throw new Nt(d,t.
83
- entryId,e.entryId);return ge(t,r)},"replaceResource"),ge=o(async(t,e)=>{let r=t.
84
- parameters,n=E(d,"bucket",e),c=await D(r.filePath),{objectKey:s}=await N(n,r);return await de(
85
- n,s,r.tags,t.parameters.tags),{lastModified:c,bucketName:n}},"createResource"),Lt=o(
86
- async(t,e)=>{let{result:r,parameters:n}=t;if(!r)return;let{objectKey:c,tags:s}=n,
87
- a=qt(r,n,e.parameters);return await de(r.bucketName,c,s,e.parameters.tags),a},"u\
88
- pdateResource"),Mt=o(async t=>{let{result:e,parameters:r}=t;e&&await ye(e.bucketName,
89
- r.objectKey)},"deleteResource"),D=o(async t=>{let{mtime:e}=await Tt(t);return e.
90
- getTime()},"getLastModifiedTime"),qt=o(async(t,e,r)=>{let n=await D(e.filePath);
91
- if(n<=t.lastModified&&e.filePath===r.filePath)return t;let{bucketName:c}=t,{objectKey:s}=r;
92
- return await N(c,{...e,objectKey:s}),{lastModified:n,bucketName:c}},"checkObject\
93
- Updates"),de=o(async(t,e,r,n)=>{let c=r??{};!zt(c,n??{})&&await le(t,e,c)},"chec\
94
- kTagUpdates");var Se=o(()=>{$t(y,fe())},"registerObjectProvider");import{isBucketService as I}from"@ez4/storage/library";import{attachEntry as Kt,linkEntryDependency as Ut}from"@ez4/stateful";import{createPermission as Gt}from"@ez4/aws-function";import{createPolicyDocument as Ht}from"@ez4/aws-identity";var ke=o(t=>`arn:aws:s3:::${t}`,"buildBucketArn"),be=o(t=>Ht([{resourceIds:[`arn\
95
- :aws:s3:::${t}-*`,`arn:aws:s3:::${t}-*/*`],permissions:["s3:ListBucket","s3:PutO\
96
- bject","s3:GetObject","s3:DeleteObject"]}]),"getPolicyDocument");var xe=o((t,e,r)=>{let n=r.bucketName,c=oe(n),s=Kt(t,{type:l,entryId:c,dependencies:[],
97
- parameters:r});return e&&(Gt(t,s,e,{fromService:r.bucketName,getPermission:o(()=>({
98
- principal:"s3.amazonaws.com",sourceArn:ke(n)}),"getPermission")}),Ut(t,s.entryId,
99
- e.entryId)),s},"createBucket");import{getFunctionState as Yt,tryGetFunctionState as er}from"@ez4/aws-function";
100
- import{linkServiceContext as tr}from"@ez4/project/library";import{isRoleState as Re}from"@ez4/aws-identity";
1
+ var Me=Object.defineProperty;var n=(r,e)=>Me(r,"name",{value:e,configurable:!0});import{registerTriggers as pr}from"@ez4/aws-common";import{registerTriggers as ur}from"@ez4/aws-identity";
2
+ import{registerTriggers as mr}from"@ez4/aws-function";import{registerTriggers as yr}from"@ez4/storage/library";
3
+ import{tryCreateTrigger as lr}from"@ez4/project/library";import{tryRegisterProvider as it}from"@ez4/aws-common";import{CorruptedResourceError as Ye,OperationLogger as O,ReplaceResourceError as et}from"@ez4/aws-common";
4
+ import{tryGetFunctionArn as W}from"@ez4/aws-function";import{deepCompare as tt,deepEqual as h}from"@ez4/utils";import{getTagList as He}from"@ez4/aws-common";import{ListObjectsV2Command as $e,
5
+ CreateBucketCommand as Ue,DeleteBucketCommand as Ge,PutBucketTaggingCommand as _e,
6
+ PutBucketCorsCommand as Ve,PutBucketLifecycleConfigurationCommand as We,PutBucketNotificationConfigurationCommand as Ze,
7
+ DeleteBucketLifecycleCommand as Je,DeleteBucketCorsCommand as Qe,ExpirationStatus as Xe,
8
+ NoSuchBucket as E}from"@aws-sdk/client-s3";import{getAwsClientOptions as qe}from"@ez4/aws-common";import{S3Client as Ke}from"@aws-sdk/client-s3";var p=n(()=>new Ke(qe()),"getS3Client");var M=n(async(r,e)=>{r.update("Fetching bucket");try{return!(await p().send(new $e(
9
+ {Bucket:e,MaxKeys:1}))).Contents?.length}catch(t){if(!(t instanceof E))throw t;return 0}},
10
+ "isBucketEmpty"),q=n(async(r,e)=>{r.update("Creating bucket");let{bucketName:t}=e;
11
+ return await p().send(new Ue({Bucket:t})),{bucketName:t}},"createBucket"),K=n(async(r,e)=>{
12
+ r.update("Deleting bucket");try{return await p().send(new Ge({Bucket:e})),!0}catch(t){
13
+ if(!(t instanceof E))throw t;return!1}},"deleteBucket"),H=n(async(r,e,t)=>{r.update(
14
+ "Tag bucket"),await p().send(new _e({Bucket:e,Tagging:{TagSet:He({...t,ManagedBy:"\
15
+ EZ4"})}}))},"tagBucket"),$=n(async(r,e,t)=>{r.update("Updating bucket CORS"),await p().
16
+ send(new Ve({Bucket:e,CORSConfiguration:{CORSRules:[{ID:"ID0",AllowedOrigins:t.allowOrigins,
17
+ AllowedMethods:t.allowMethods,AllowedHeaders:t.allowHeaders,ExposeHeaders:t.exposeHeaders,
18
+ MaxAgeSeconds:t.maxAge}]}}))},"updateCorsConfiguration"),U=n(async(r,e)=>{r.update(
19
+ "Deleting bucket CORS");try{return await p().send(new Qe({Bucket:e})),!0}catch(t){
20
+ if(!(t instanceof E))throw t;return!1}},"deleteCorsConfiguration"),G=n(async(r,e,t)=>{
21
+ r.update("Creating bucket lifecycle"),await p().send(new We({Bucket:e,LifecycleConfiguration:{
22
+ Rules:[{ID:"ID0",Status:Xe.Enabled,Filter:{Prefix:"*"},Expiration:{Days:t}}]}}))},
23
+ "createLifecycle"),_=n(async(r,e)=>{r.update("Deleting bucket lifecycle");try{return await p().
24
+ send(new Je({Bucket:e})),!0}catch(t){if(!(t instanceof E))throw t;return!1}},"de\
25
+ leteLifecycle"),V=n(async(r,e,t)=>{r.update("Update bucket event stream");let{functionArn:o,
26
+ eventsPath:c,eventsType:a}=t;await p().send(new Ze({Bucket:e,SkipDestinationValidation:!0,
27
+ NotificationConfiguration:{...o&&{LambdaFunctionConfigurations:[{Id:"ID0",LambdaFunctionArn:o,
28
+ Events:a,...c&&{Filter:{Key:{FilterRules:[{Name:"prefix",Value:c}]}}}}]}}}))},"u\
29
+ pdateEventNotifications");var d="AWS:S3/Bucket",m="aws:s3.bucket";var Z=n(()=>({equals:rt,create:J,replace:nt,preview:ot,update:ct,delete:at}),"ge\
30
+ tBucketHandler"),rt=n((r,e)=>!!r.result&&r.result.bucketName===e.result?.bucketName,
31
+ "equalsResource"),ot=n((r,e)=>{let t={...r.parameters,dependencies:r.dependencies},
32
+ o={...e.parameters,dependencies:e.dependencies},c=tt(t,o);if(c.counts)return{...c,
33
+ name:t.bucketName}},"previewResource"),nt=n(async(r,e,t)=>{if(e.result)throw new et(
34
+ d,r.entryId,e.entryId);return J(r,t)},"replaceResource"),J=n((r,e)=>{let t=r.parameters,
35
+ o=W(e);return O.logExecution(d,t.bucketName,"creation",async c=>{let{bucketName:a}=await q(
36
+ c,t);await Q(c,a,t,void 0),await X(c,a,t,void 0),await Y(c,a,t.tags,void 0);let i={
37
+ eventsPath:t.eventsPath,functionArn:o};return await ee(c,a,i,{}),{bucketName:a,functionArn:o}})},
38
+ "createResource"),ct=n((r,e,t)=>{let{result:o,parameters:c}=r,{bucketName:a}=c;if(!o)
39
+ throw new Ye(d,a);return O.logExecution(d,a,"updates",async i=>{let s=W(t),u=e.result?.
40
+ functionArn;await Q(i,a,c,e.parameters),await X(i,a,c,e.parameters),await Y(i,a,
41
+ c.tags,e.parameters.tags);let S={eventsPath:c.eventsPath,functionArn:s},k={eventsPath:e.
42
+ parameters.eventsPath,functionArn:u};return await ee(i,a,S,k),{...o,functionArn:s}})},
43
+ "updateResource"),at=n(async r=>{let e=r.result;if(!e)return;let{bucketName:t}=e;
44
+ await O.logExecution(d,t,"deletion",async o=>{await M(o,e.bucketName)&&await K(o,
45
+ e.bucketName)})},"deleteResource"),Q=n(async(r,e,t,o)=>{if(!(t.cors&&o?.cors&&h(
46
+ t.cors,o.cors))){if(t.cors)return $(r,e,t.cors);if(o?.cors)return U(r,e)}},"chec\
47
+ kCorsUpdates"),X=n(async(r,e,t,o)=>{if(t.autoExpireDays!==o?.autoExpireDays){if(t.
48
+ autoExpireDays)return G(r,e,t.autoExpireDays);if(o?.autoExpireDays)return _(r,e)}},
49
+ "checkLifecycleUpdates"),Y=n(async(r,e,t,o)=>{let c=t??{};!h(c,o??{})&&await H(r,
50
+ e,c)},"checkTagUpdates"),ee=n(async(r,e,t,o)=>{!h(t,o)&&await V(r,e,{eventsType:[
51
+ "s3:ObjectCreated:*","s3:ObjectRemoved:*"],...t})},"checkEventUpdates");var te=n(()=>{it(m,Z())},"registerBucketProvider");import{tryRegisterProvider as Bt}from"@ez4/aws-common";import{ReplaceResourceError as gt,OperationLogger as ie}from"@ez4/aws-common";import{
52
+ deepCompare as dt}from"@ez4/utils";import{IncompleteResourceError as st}from"@ez4/aws-common";import{hashData as pt,
53
+ toKebabCase as ut}from"@ez4/utils";var R=class extends Error{static{n(this,"BucketNotFoundError")}constructor(e){super(
54
+ `Bucket service ${e} wasn't found.`)}};var re=n(r=>pt(m,ut(r)),"createBucketStateId"),mt=n(r=>r.type===m,"isBucketState"),
55
+ oe=n((r,e,t)=>{let o=r.getServiceState(e,t);if(!mt(o))throw new R(e);return o},"\
56
+ getBucketState"),v=n((r,e,t)=>{let o=t.getDependencies(m)[0]?.result;if(!o?.bucketName)
57
+ throw new st(r,e,"bucketName");return o.bucketName},"getBucketName");import{PutBucketPolicyCommand as yt,DeleteBucketPolicyCommand as lt,NoSuchBucket as ft}from"@aws-sdk/client-s3";var ne=p(),ce=n(async(r,e)=>{r.update("Creating bucket policy");let{bucketName:t,
58
+ role:o}=e;return await ne.send(new yt({Bucket:t,Policy:JSON.stringify(o)})),{bucketName:t}},
59
+ "createPolicy"),ae=n(async(r,e)=>{r.update("Deleting bucket policy");try{return await ne.
60
+ send(new lt({Bucket:e})),!0}catch(t){if(!(t instanceof ft))throw t;return!1}},"d\
61
+ eletePolicy");var x="AWS:S3/Policy",l="aws:s3.policy";var se=n(()=>({equals:St,create:pe,replace:bt,preview:kt,update:xt,delete:Pt}),"\
62
+ getPolicyHandler"),St=n((r,e)=>!!r.result&&r.result.bucketName===e.result?.bucketName,
63
+ "equalsResource"),kt=n((r,e)=>{let t={...r.parameters,dependencies:r.dependencies},
64
+ o={...e.parameters,dependencies:e.dependencies},c=dt(t,o,{exclude:{getRole:!0}});
65
+ if(c.counts)return{...c,name:t.fromService}},"previewResource"),bt=n(async(r,e,t)=>{
66
+ if(e.result)throw new gt(x,r.entryId,e.entryId);return pe(r,t)},"replaceResource"),
67
+ pe=n((r,e)=>{let t=r.parameters,o=v(x,"policy",e);return ie.logExecution(x,o,"cr\
68
+ eation",async c=>{let a=await t.getRole(e);return await ce(c,{bucketName:o,role:a}),
69
+ {bucketName:o}})},"createResource"),xt=n(async()=>{},"updateResource"),Pt=n(async r=>{
70
+ let e=r.result;if(!e)return;let{bucketName:t}=e;await ie.logExecution(x,t,"delet\
71
+ ion",o=>ae(o,t))},"deleteResource");var ue=n(()=>{Bt(l,se())},"registerPolicyProvider");import{tryRegisterProvider as Kt}from"@ez4/aws-common";import{stat as jt}from"node:fs/promises";import{CorruptedResourceError as Lt,OperationLogger as L,
72
+ ReplaceResourceError as Nt}from"@ez4/aws-common";import{deepCompare as Tt,deepEqual as Dt}from"@ez4/utils";import{createReadStream as wt}from"node:fs";import{PutObjectCommand as Et,PutObjectTaggingCommand as Rt,
73
+ DeleteObjectCommand as vt,NoSuchBucket as Ct}from"@aws-sdk/client-s3";import{getTagList as Ot}from"@ez4/aws-common";import ht from"mime";var j=n(async(r,e,t)=>{r.update("Creating object");let{objectKey:o,filePath:c}=t,
74
+ a=ht.getType(c);return await p().send(new Et({Bucket:e,Key:o,Body:wt(c),...a&&{ContentType:a}})),
75
+ {objectKey:o}},"putObject"),me=n(async(r,e,t,o)=>{r.update("Updating object tags"),
76
+ await p().send(new Rt({Bucket:e,Key:t,Tagging:{TagSet:Ot({...o,ManagedBy:"EZ4"})}}))},
77
+ "updateTags"),ye=n(async(r,e,t)=>{r.update("Deleting object");try{return await p().
78
+ send(new vt({Bucket:e,Key:t})),!0}catch(o){if(!(o instanceof Ct))throw o;return!1}},
79
+ "deleteObject");var f="AWS:S3/Object",y="aws:s3.object";var wo=n(r=>r.type===y,"isBucketObjectState"),C=n((r,e)=>`${r}/${e}`,"getBucketO\
80
+ bjectPath"),Eo=n(r=>r.getDependencies(y).map(({result:t,parameters:o})=>({lastModified:t?.
81
+ lastModified,objectKey:o.objectKey})),"getBucketObjectFiles");var le=n(()=>({equals:zt,create:fe,replace:At,preview:Ft,update:It,delete:Mt}),"\
82
+ getObjectHandler"),zt=n((r,e)=>!!r.result&&r.result.lastModified===e.result?.lastModified,
83
+ "equalsResource"),Ft=n(async(r,e)=>{let t=r.parameters,o=e.parameters,c=Tt({...t,
84
+ dependencies:r.dependencies,lastModified:await N(t.filePath)},{...o,dependencies:e.
85
+ dependencies,lastModified:r.result?.lastModified});if(c.counts)return{...c,name:t.
86
+ objectKey}},"previewResource"),At=n(async(r,e,t)=>{if(e.result)throw new Nt(f,r.
87
+ entryId,e.entryId);return fe(r,t)},"replaceResource"),fe=n((r,e)=>{let t=r.parameters,
88
+ o=v(f,"bucket",e),c=C(o,t.objectKey);return L.logExecution(f,c,"creation",async a=>{
89
+ let i=await N(t.filePath),{objectKey:s}=await j(a,o,t);return await ge(a,o,s,t.tags,
90
+ r.parameters.tags),{lastModified:i,bucketName:o}})},"createResource"),It=n((r,e)=>{
91
+ let{result:t,parameters:o}=r,{objectKey:c,tags:a}=o;if(!t)throw new Lt(f,c);let i=C(
92
+ t.bucketName,c);return L.logExecution(f,i,"updates",async s=>{let u=qt(s,t,o,e.parameters);
93
+ return await ge(s,t.bucketName,c,a,e.parameters.tags),u})},"updateResource"),Mt=n(
94
+ async r=>{let{result:e,parameters:t}=r;if(!e)return;let o=C(e.bucketName,t.objectKey);
95
+ await L.logExecution(f,o,"deletion",async c=>{await ye(c,e.bucketName,t.objectKey)})},
96
+ "deleteResource"),N=n(async r=>{let{mtime:e}=await jt(r);return e.getTime()},"ge\
97
+ tLastModifiedTime"),qt=n(async(r,e,t,o)=>{let c=await N(t.filePath);if(c<=e.lastModified&&
98
+ t.filePath===o.filePath)return e;let{bucketName:a}=e,{objectKey:i}=o;return await j(
99
+ r,a,{...t,objectKey:i}),{lastModified:c,bucketName:a}},"checkObjectUpdates"),ge=n(
100
+ async(r,e,t,o,c)=>{let a=o??{};!Dt(a,c??{})&&await me(r,e,t,a)},"checkTagUpdates");var de=n(()=>{Kt(y,le())},"registerObjectProvider");import{isBucketService as F}from"@ez4/storage/library";import{attachEntry as $t,linkEntryDependency as Ut}from"@ez4/stateful";import{createPermission as Gt}from"@ez4/aws-function";import{createPolicyDocument as Ht}from"@ez4/aws-identity";var Se=n(r=>`arn:aws:s3:::${r}`,"buildBucketArn"),ke=n(r=>Ht([{resourceIds:[`arn\
101
+ :aws:s3:::${r}-*`,`arn:aws:s3:::${r}-*/*`],permissions:["s3:ListBucket","s3:PutO\
102
+ bject","s3:GetObject","s3:DeleteObject"]}]),"getPolicyDocument");var be=n((r,e,t)=>{let o=t.bucketName,c=re(o),a=$t(r,{type:m,entryId:c,dependencies:[],
103
+ parameters:t});return e&&(Gt(r,a,e,{fromService:t.bucketName,getPermission:n(()=>({
104
+ principal:"s3.amazonaws.com",sourceArn:Se(o)}),"getPermission")}),Ut(r,a.entryId,
105
+ e.entryId)),a},"createBucket");import{getFunctionState as Yt,tryGetFunctionState as er}from"@ez4/aws-function";
106
+ import{linkServiceContext as tr}from"@ez4/project/library";import{isRoleState as Ee}from"@ez4/aws-identity";
101
107
  import{createLogGroup as rr}from"@ez4/aws-logs";import{createFunction as Jt}from"@ez4/aws-function";import{hashObject as Qt}from"@ez4/utils";import{join as _t}from"node:path";import{getDefinitionsObject as Vt}from"@ez4/project/library";
102
- import{MappingServiceName as Wt}from"@ez4/aws-function";import{getFunctionBundle as Zt}from"@ez4/aws-common";var Pe=o(async(t,e)=>{let{handler:r,listener:n,context:c,debug:s}=t,a=Vt(e);return Zt(
103
- Wt,{templateFile:_t(import.meta.dirname,"../lib/event.ts"),define:a,filePrefix:"\
104
- s3",handler:r,listener:n,context:c,debug:s})},"bundleBucketEventFunction");var Be=o((t,e,r,n)=>{let{handler:c,variables:s,architecture:a}=n;return Jt(t,e,r,
105
- {handlerName:"s3EntryPoint",sourceFile:c.sourceFile,functionName:n.functionName,
106
- description:n.description,architecture:n.architecture,runtime:n.runtime,release:n.
107
- release,timeout:n.timeout,memory:n.memory,debug:n.debug,tags:n.tags,getFunctionVariables:o(
108
- ()=>s.reduce((i,f)=>({...i,...f}),{}),"getFunctionVariables"),getFunctionFiles:o(
109
- ()=>[c.sourceFile,c.dependencies],"getFunctionFiles"),getFunctionBundle:o(i=>Pe(
110
- n,[...i.getDependencies(),...i.getConnections()]),"getFunctionBundle"),getFunctionHash:o(
111
- ()=>Qt({architecture:a}),"getFunctionHash")})},"createBucketEventFunction");import{getServiceName as z}from"@ez4/project/library";import{getRandomName as Xt}from"@ez4/aws-common";
112
- import{toKebabCase as F}from"@ez4/utils";var we=o(async(t,e)=>{if(t.globalName)return z(t.globalName,e);let r=z(t,e),n=await Xt(
113
- 16);return`${r.substring(0,46)}-${n}`},"getBucketName"),A=o((t,e)=>`${F(t.name)}\
114
- -${F(e)}`,"getInternalName"),ve=o((t,e,r)=>`${z(t,r)}-${F(e)}`,"getFunctionName");var P=class extends Error{static{o(this,"RoleMissingError")}constructor(){super(
115
- "Execution role for S3 is missing.")}};import{FunctionDefaults as B}from"@ez4/aws-function";var S;(s=>(s.LogRetention=B.
116
- LogRetention,s.Architecture=B.Architecture,s.Runtime=B.Runtime,s.Timeout=B.Timeout,
117
- s.Memory=B.Memory))(S||={});var Ee=o((t,e,r,n)=>{if(!e.events)return;if(!n.role||!Re(n.role))throw new P;let{
118
- defaults:c,release:s}=r,{handler:a,listener:i,variables:f,runtime:b=c?.runtime??
119
- S.Runtime,architecture:h=c?.architecture??S.Architecture,logRetention:w=c?.logRetention??
120
- S.LogRetention,memory:Ae=c?.memory??S.Memory,timeout:Ie=S.Timeout}=e.events,L=A(
121
- e,a.name),x=er(n,L,r);if(x)return x;let M=ve(e,a.name,r),Le=n.getDependencyFiles(
122
- a.file),Me=rr(t,{retention:w,groupName:M,tags:r.tags});return x=Be(t,n.role,Me,{
123
- functionName:M,description:a.description,context:e.context,debug:r.debug,tags:r.
124
- tags,variables:[r.variables,e.variables,f],architecture:h,runtime:b,release:s,timeout:Ie,
125
- memory:Ae,handler:{sourceFile:a.file,functionName:a.name,module:a.module,dependencies:Le},
126
- listener:i&&{functionName:i.name,sourceFile:i.file,module:i.module}}),n.setServiceState(
127
- x,L,r),x},"prepareEvents"),Ce=o((t,e,r,n)=>{if(!e.events)return;if(!n.role||!Re(
128
- n.role))throw new P;let{handler:c}=e.events,s=A(e,c.name),a=Yt(n,s,r);tr(t,a.entryId,
129
- e.context)},"connectEvents");import{readdir as or}from"node:fs/promises";import{join as he,relative as je}from"node:path";
130
- import{createBucketObject as nr}from"@ez4/aws-bucket";var Oe=o(async(t,e,r)=>{let n=process.cwd(),c=he(n,r),s=await or(c,{withFileTypes:!0,
131
- recursive:!0});for(let a of s){if(!a.isFile())continue;let i=he(a.parentPath,a.name);
132
- nr(t,e,{objectKey:je(c,i),filePath:je(n,i)})}},"prepareLocalContent");var Te=o((t,e,r)=>{let n=ne(t,e.name,r),c=n.entryId;return{module:"Client",from:"\
133
- @ez4/aws-bucket/client",constructor:`@{EZ4_MODULE_IMPORT}.make('${n.parameters.bucketName}\
134
- ')`,connectionIds:[c],dependencyIds:[c]}},"prepareLinkedClient");var Ne=o(t=>{let{service:e,options:r,context:n}=t;return I(e)?Te(n,e,r):null},"p\
135
- repareLinkedServices"),De=o(async t=>{let{state:e,service:r,options:n,context:c}=t;
136
- if(!I(r))return!1;let{localPath:s,autoExpireDays:a,events:i,cors:f}=r,b=await we(
137
- r,n),h=Ee(e,r,n,c),w=xe(e,h,{eventsPath:i?.path,tags:n.tags,bucketName:b,autoExpireDays:a,
138
- localPath:s,cors:f});return c.setServiceState(w,r,n),s&&await Oe(e,w,s),!0},"pre\
139
- pareBucketServices"),ze=o(t=>{let{state:e,service:r,options:n,context:c}=t;I(r)&&
140
- Ce(e,r,n,c)},"connectBucketServices");import{ServiceType as cr}from"@ez4/storage/library";import{createPolicy as sr,tryGetPolicy as ar}from"@ez4/aws-identity";
141
- import{getServiceName as ir}from"@ez4/project/library";var Fe=o(t=>{let{state:e,serviceType:r,options:n}=t;if(r!==cr)return null;let c=ir(
142
- "",n),s=`${c}-bucket-policy`;return ar(e,s)??sr(e,{tags:n.tags,policyDocument:be(
143
- c),policyName:s})},"prepareExecutionPolicy");var oc=o(()=>{pr(),mr(),ur(),lr(),yr("@ez4/aws-bucket",{"deploy:prepareExecution\
144
- Policy":Fe,"deploy:prepareLinkedService":Ne,"deploy:prepareResources":De,"deploy\
145
- :connectResources":ze}),re(),ue(),Se()},"registerTriggers");import{getRegion as fr}from"@ez4/aws-identity";var ac=o(t=>/(.+)\.s3\.(.+)\.amazonaws\.com/i.test(t),"isBucketDomain"),ic=o(async t=>{
146
- let e=await fr();return`${t}.s3.${e}.amazonaws.com`},"getBucketDomain");import{attachEntry as gr}from"@ez4/stateful";import{hashData as dr}from"@ez4/utils";var fc=o((t,e,r,n)=>{let c=dr(g,e.entryId,r.entryId);return gr(t,{type:g,entryId:c,
147
- dependencies:[e.entryId,r.entryId],parameters:n})},"createBucketPolicy");var kc=o(t=>t.type===g,"isBucketPolicyState");import{attachEntry as Sr}from"@ez4/stateful";import{hashData as kr}from"@ez4/utils";var vc=o((t,e,r)=>{let n=r.objectKey,c=kr(y,e.entryId,n);return Sr(t,{type:y,entryId:c,
148
- dependencies:[e.entryId],parameters:r})},"createBucketObject");export{p as BucketServiceName,l as BucketServiceType,d as ObjectServiceName,y as ObjectServiceType,
149
- k as PolicyServiceName,g as PolicyServiceType,ke as buildBucketArn,xe as createBucket,
150
- Be as createBucketEventFunction,vc as createBucketObject,fc as createBucketPolicy,
151
- oe as createBucketStateId,ic as getBucketDomain,E as getBucketName,yo as getBucketObjectFiles,
152
- C as getBucketObjectPath,ne as getBucketState,be as getPolicyDocument,ac as isBucketDomain,
153
- lo as isBucketObjectState,kc as isBucketPolicyState,mt as isBucketState,oc as registerTriggers};
108
+ import{MappingServiceName as Wt}from"@ez4/aws-function";import{getFunctionBundle as Zt}from"@ez4/aws-common";var xe=n(async(r,e)=>{let{handler:t,listener:o,context:c,debug:a}=r,i=Vt(e);return Zt(
109
+ Wt,{templateFile:_t(import.meta.dirname,"../lib/event.ts"),define:i,filePrefix:"\
110
+ s3",handler:t,listener:o,context:c,debug:a})},"bundleBucketEventFunction");var Pe=n((r,e,t,o)=>{let{handler:c,variables:a,architecture:i}=o;return Jt(r,e,t,
111
+ {handlerName:"s3EntryPoint",sourceFile:c.sourceFile,functionName:o.functionName,
112
+ description:o.description,architecture:o.architecture,runtime:o.runtime,release:o.
113
+ release,timeout:o.timeout,memory:o.memory,debug:o.debug,tags:o.tags,getFunctionVariables:n(
114
+ ()=>a.reduce((s,u)=>({...s,...u}),{}),"getFunctionVariables"),getFunctionFiles:n(
115
+ ()=>[c.sourceFile,c.dependencies],"getFunctionFiles"),getFunctionBundle:n(s=>xe(
116
+ o,[...s.getDependencies(),...s.getConnections()]),"getFunctionBundle"),getFunctionHash:n(
117
+ ()=>Qt({architecture:i}),"getFunctionHash")})},"createBucketEventFunction");import{getServiceName as T}from"@ez4/project/library";import{getRandomName as Xt}from"@ez4/aws-common";
118
+ import{toKebabCase as D}from"@ez4/utils";var Be=n(async(r,e)=>{if(r.globalName)return T(r.globalName,e);let t=T(r,e),o=await Xt(
119
+ 16);return`${t.substring(0,46)}-${o}`},"getBucketName"),z=n((r,e)=>`${D(r.name)}\
120
+ -${D(e)}`,"getInternalName"),we=n((r,e,t)=>`${T(r,t)}-${D(e)}`,"getFunctionName");var P=class extends Error{static{n(this,"RoleMissingError")}constructor(){super(
121
+ "Execution role for S3 is missing.")}};import{FunctionDefaults as B}from"@ez4/aws-function";var g;(a=>(a.LogRetention=B.
122
+ LogRetention,a.Architecture=B.Architecture,a.Runtime=B.Runtime,a.Timeout=B.Timeout,
123
+ a.Memory=B.Memory))(g||={});var Re=n((r,e,t,o)=>{if(!e.events)return;if(!o.role||!Ee(o.role))throw new P;let{
124
+ defaults:c,release:a}=t,{handler:i,listener:s,variables:u,runtime:S=c?.runtime??
125
+ g.Runtime,architecture:k=c?.architecture??g.Architecture,logRetention:w=c?.logRetention??
126
+ g.LogRetention,memory:ze=c?.memory??g.Memory,timeout:Fe=g.Timeout}=e.events,A=z(
127
+ e,i.name),b=er(o,A,t);if(b)return b;let I=we(e,i.name,t),Ae=o.getDependencyFiles(
128
+ i.file),Ie=rr(r,{retention:w,groupName:I,tags:t.tags});return b=Pe(r,o.role,Ie,{
129
+ functionName:I,description:i.description,context:e.context,debug:t.debug,tags:t.
130
+ tags,variables:[t.variables,e.variables,u],architecture:k,runtime:S,release:a,timeout:Fe,
131
+ memory:ze,handler:{sourceFile:i.file,functionName:i.name,module:i.module,dependencies:Ae},
132
+ listener:s&&{functionName:s.name,sourceFile:s.file,module:s.module}}),o.setServiceState(
133
+ A,t,b),b},"prepareEvents"),ve=n((r,e,t,o)=>{if(!e.events)return;if(!o.role||!Ee(
134
+ o.role))throw new P;let{handler:c}=e.events,a=z(e,c.name),i=Yt(o,a,t);tr(r,i.entryId,
135
+ e.context)},"connectEvents");import{readdir as or}from"node:fs/promises";import{join as Ce,relative as Oe}from"node:path";
136
+ import{createBucketObject as nr}from"@ez4/aws-bucket";var he=n(async(r,e,t)=>{let o=process.cwd(),c=Ce(o,t),a=await or(c,{withFileTypes:!0,
137
+ recursive:!0});for(let i of a){if(!i.isFile())continue;let s=Ce(i.parentPath,i.name);
138
+ nr(r,e,{objectKey:Oe(c,s),filePath:Oe(o,s)})}},"prepareLocalContent");var je=n((r,e,t)=>{let o=oe(r,e.name,t),c=o.entryId;return{module:"Client",from:"\
139
+ @ez4/aws-bucket/client",constructor:`@{EZ4_MODULE_IMPORT}.make('${o.parameters.bucketName}\
140
+ ')`,dependencyIds:[c],connectionIds:[c]}},"prepareLinkedClient");var Le=n(r=>{let{service:e,options:t,context:o}=r;return F(e)?je(o,e,t):null},"p\
141
+ repareLinkedServices"),Ne=n(async r=>{let{state:e,service:t,options:o,context:c}=r;
142
+ if(!F(t))return!1;let{localPath:a,autoExpireDays:i,events:s,cors:u}=t,S=await Be(
143
+ t,o),k=Re(e,t,o,c),w=be(e,k,{eventsPath:s?.path,tags:o.tags,bucketName:S,autoExpireDays:i,
144
+ localPath:a,cors:u});return c.setServiceState(t,o,w),a&&await he(e,w,a),!0},"pre\
145
+ pareBucketServices"),Te=n(r=>{let{state:e,service:t,options:o,context:c}=r;F(t)&&
146
+ ve(e,t,o,c)},"connectBucketServices");import{ServiceType as cr}from"@ez4/storage/library";import{createPolicy as ar,tryGetPolicy as ir}from"@ez4/aws-identity";
147
+ import{getServiceName as sr}from"@ez4/project/library";var De=n(r=>{let{state:e,serviceType:t,options:o}=r;if(t!==cr)return null;let c=sr(
148
+ "",o),a=`${c}-bucket-policy`;return ir(e,a)??ar(e,{tags:o.tags,policyDocument:ke(
149
+ c),policyName:a})},"prepareExecutionPolicy");var ac=n(()=>{pr(),ur(),mr(),yr(),lr("@ez4/aws-bucket",{"deploy:prepareExecution\
150
+ Policy":De,"deploy:prepareLinkedService":Le,"deploy:prepareResources":Ne,"deploy\
151
+ :connectResources":Te}),te(),ue(),de()},"registerTriggers");import{getRegion as fr}from"@ez4/aws-identity";var uc=n(r=>/(.+)\.s3\.(.+)\.amazonaws\.com/i.test(r),"isBucketDomain"),mc=n(async r=>{
152
+ let e=await fr();return`${r}.s3.${e}.amazonaws.com`},"getBucketDomain");import{attachEntry as gr}from"@ez4/stateful";import{hashData as dr}from"@ez4/utils";var Sc=n((r,e,t,o)=>{let c=dr(l,e.entryId,t.entryId);return gr(r,{type:l,entryId:c,
153
+ dependencies:[e.entryId,t.entryId],parameters:o})},"createBucketPolicy");var Pc=n(r=>r.type===l,"isBucketPolicyState");import{attachEntry as Sr}from"@ez4/stateful";import{hashData as kr}from"@ez4/utils";var Cc=n((r,e,t)=>{let o=t.objectKey,c=kr(y,e.entryId,o);return Sr(r,{type:y,entryId:c,
154
+ dependencies:[e.entryId],parameters:t})},"createBucketObject");export{d as BucketServiceName,m as BucketServiceType,f as ObjectServiceName,y as ObjectServiceType,
155
+ x as PolicyServiceName,l as PolicyServiceType,Se as buildBucketArn,be as createBucket,
156
+ Pe as createBucketEventFunction,Cc as createBucketObject,Sc as createBucketPolicy,
157
+ re as createBucketStateId,mc as getBucketDomain,v as getBucketName,Eo as getBucketObjectFiles,
158
+ C as getBucketObjectPath,oe as getBucketState,ke as getPolicyDocument,uc as isBucketDomain,
159
+ wo as isBucketObjectState,Pc as isBucketPolicyState,mt as isBucketState,ac as registerTriggers};
154
160
  //# sourceMappingURL=main.mjs.map
@@ -1,4 +1,4 @@
1
- import type { ResourceTags } from '@ez4/aws-common';
1
+ import type { OperationLogLine, ResourceTags } from '@ez4/aws-common';
2
2
  export type CreateRequest = {
3
3
  filePath: string;
4
4
  objectKey: string;
@@ -6,6 +6,6 @@ export type CreateRequest = {
6
6
  export type CreateResponse = {
7
7
  objectKey: string;
8
8
  };
9
- export declare const putObject: (bucketName: string, request: CreateRequest) => Promise<CreateResponse>;
10
- export declare const tagObject: (bucketName: string, objectKey: string, tags: ResourceTags) => Promise<void>;
11
- export declare const deleteObject: (bucketName: string, objectKey: string) => Promise<boolean>;
9
+ export declare const putObject: (logger: OperationLogLine, bucketName: string, request: CreateRequest) => Promise<CreateResponse>;
10
+ export declare const updateTags: (logger: OperationLogLine, bucketName: string, objectKey: string, tags: ResourceTags) => Promise<void>;
11
+ export declare const deleteObject: (logger: OperationLogLine, bucketName: string, objectKey: string) => Promise<boolean>;
@@ -1,4 +1,5 @@
1
1
  import type { RoleDocument } from '@ez4/aws-identity';
2
+ import type { OperationLogLine } from '@ez4/aws-common';
2
3
  export type CreateRequest = {
3
4
  bucketName: string;
4
5
  role: RoleDocument;
@@ -6,5 +7,5 @@ export type CreateRequest = {
6
7
  export type CreateResponse = {
7
8
  bucketName: string;
8
9
  };
9
- export declare const createPolicy: (request: CreateRequest) => Promise<CreateResponse>;
10
- export declare const deletePolicy: (bucketName: string) => Promise<boolean>;
10
+ export declare const createPolicy: (logger: OperationLogLine, request: CreateRequest) => Promise<CreateResponse>;
11
+ export declare const deletePolicy: (logger: OperationLogLine, bucketName: string) => Promise<boolean>;
@@ -2,7 +2,7 @@ export declare namespace Defaults {
2
2
  /**
3
3
  * Default log retention in days.
4
4
  */
5
- const LogRetention = 15;
5
+ const LogRetention = 90;
6
6
  /**
7
7
  * Default function architecture.
8
8
  */
@@ -0,0 +1,2 @@
1
+ import { S3Client } from '@aws-sdk/client-s3';
2
+ export declare const getS3Client: () => S3Client;
package/lib/event.ts CHANGED
@@ -2,8 +2,7 @@ import type { S3Event, Context } from 'aws-lambda';
2
2
  import type { Bucket } from '@ez4/storage';
3
3
 
4
4
  import { BucketEventType } from '@ez4/storage';
5
- import { ServiceEventType } from '@ez4/common';
6
- import { Runtime } from '@ez4/common/runtime';
5
+ import { ServiceEventType, Runtime } from '@ez4/common';
7
6
  import { getRandomUUID } from '@ez4/utils';
8
7
 
9
8
  declare const __EZ4_CONTEXT: object;
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.39.0",
4
+ "version": "0.41.0",
5
5
  "author": "Silas B.",
6
6
  "license": "MIT",
7
7
  "type": "module",
@@ -39,7 +39,7 @@
39
39
  ],
40
40
  "scripts": {
41
41
  "lint": "eslint --cache",
42
- "clean": "rm -f *.tsbuildinfo && rm -rf dist/*",
42
+ "clean": "rm -rf dist/* *.tsbuildinfo .eslintcache",
43
43
  "build": "tsc && node tools/bundler.mjs",
44
44
  "test": "npm run build && tsc -p tsconfig.test.json && ez4 test -e ../../../local.env",
45
45
  "local:publish": "npm run build && npm run clean:registry && npm publish --registry http://localhost:4873",
@@ -53,15 +53,15 @@
53
53
  "dependencies": {
54
54
  "@aws-sdk/client-s3": "^3.958.0",
55
55
  "@aws-sdk/s3-request-presigner": "^3.958.0",
56
- "@ez4/aws-common": "^0.39.0",
57
- "@ez4/aws-function": "^0.39.0",
58
- "@ez4/aws-identity": "^0.39.0",
59
- "@ez4/aws-logs": "^0.39.0",
60
- "@ez4/common": "^0.39.0",
61
- "@ez4/project": "^0.39.0",
62
- "@ez4/stateful": "^0.39.0",
63
- "@ez4/storage": "^0.39.0",
64
- "@ez4/utils": "^0.39.0",
56
+ "@ez4/aws-common": "^0.41.0",
57
+ "@ez4/aws-function": "^0.41.0",
58
+ "@ez4/aws-identity": "^0.41.0",
59
+ "@ez4/aws-logs": "^0.41.0",
60
+ "@ez4/common": "^0.41.0",
61
+ "@ez4/project": "^0.41.0",
62
+ "@ez4/stateful": "^0.41.0",
63
+ "@ez4/storage": "^0.41.0",
64
+ "@ez4/utils": "^0.41.0",
65
65
  "mime": "^3.0.0"
66
66
  }
67
67
  }