@ez4/aws-bucket 0.37.0 → 0.39.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,5 +1,5 @@
1
- import type { FunctionParameters, FunctionVariables } from '@ez4/aws-function';
2
- import type { ContextSource } from '@ez4/project/library';
1
+ import type { ContextSource, LinkedVariables } from '@ez4/project/library';
2
+ import type { FunctionParameters } from '@ez4/aws-function';
3
3
  export type BucketEventFunction = {
4
4
  functionName: string;
5
5
  sourceFile: string;
@@ -12,6 +12,6 @@ export type BucketEventFunctionParameters = Omit<FunctionParameters, 'getFunctio
12
12
  handler: BucketEventEntryPoint;
13
13
  listener?: BucketEventFunction;
14
14
  context?: Record<string, ContextSource>;
15
- variables: (FunctionVariables | undefined)[];
15
+ variables: (LinkedVariables | undefined)[];
16
16
  debug?: boolean;
17
17
  };
package/dist/main.cjs CHANGED
@@ -1,162 +1,167 @@
1
- "use strict";var Et=Object.create;var R=Object.defineProperty;var Rt=Object.getOwnPropertyDescriptor;var Ct=Object.getOwnPropertyNames;var ht=Object.getPrototypeOf,jt=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))!jt.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(ht(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:()=>y,ObjectServiceName:()=>b,
5
- ObjectServiceType:()=>g,PolicyServiceName:()=>P,PolicyServiceType:()=>S,buildBucketArn:()=>W,
6
- createBucket:()=>J,createBucketEventFunction:()=>Q,createBucketObject:()=>rr,createBucketPolicy:()=>er,
7
- createBucketStateId:()=>H,getBucketDomain:()=>Yt,getBucketName:()=>C,getBucketObjectFiles:()=>Ut,
8
- getBucketObjectPath:()=>h,getBucketState:()=>K,getPolicyDocument:()=>Z,isBucketDomain:()=>Xt,
9
- isBucketObjectState:()=>Kt,isBucketPolicyState:()=>tr,isBucketState:()=>xe,registerTriggers:()=>Qt});
10
- module.exports=Nt(or);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 ke=require("@ez4/aws-common");var ue=require("@ez4/aws-common"),$=require("@ez4/aws-function"),x=require("@ez4/utils");var m=require("@ez4/aws-common"),a=require("@aws-sdk/client-s3");var p="AWS:S3/Bucket",y="aws:s3.bucket";var f=new a.S3Client({}),re=o(async t=>{m.Logger.logFetch(p,t);try{return!(await f.
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
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 f.send(new a.CreateBucketCommand(
15
- {Bucket:e})),{bucketName:e}},"createBucket"),ne=o(async t=>{m.Logger.logDelete(p,
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
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"),se=o(async(t,e)=>{m.Logger.logTag(
18
- p,t),await f.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,
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
20
  `${t} CORS`),await f.send(new a.PutBucketCorsCommand({Bucket:t,CORSConfiguration:{
21
21
  CORSRules:[{ID:"ID0",AllowedOrigins:e.allowOrigins,AllowedMethods:e.allowMethods,
22
22
  AllowedHeaders:e.allowHeaders,ExposeHeaders:e.exposeHeaders,MaxAgeSeconds:e.maxAge}]}}))},
23
- "updateCorsConfiguration"),ae=o(async t=>{m.Logger.logDelete(p,`${t} CORS`);try{
23
+ "updateCorsConfiguration"),me=o(async t=>{u.Logger.logDelete(m,`${t} CORS`);try{
24
24
  return await f.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 f.send(new a.PutBucketLifecycleConfigurationCommand(
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
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 f.send(new a.DeleteBucketLifecycleCommand(
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
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} events`);let{functionArn:r,
32
- eventsPath:n,eventsType:s}=e;await f.send(new a.PutBucketNotificationConfigurationCommand(
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
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:It,delete:At}),"\
36
- getBucketHandler"),Dt=o((t,e)=>!!t.result&&t.result.bucketName===e.result?.bucketName,
37
- "equalsResource"),zt=o((t,e)=>{let r={...t.parameters,dependencies:t.dependencies},
38
- n={...e.parameters,dependencies:e.dependencies},s=(0,x.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"),It=o(async(t,e,r)=>{let{result:n,parameters:s}=t;if(!n)return;
45
- let c=n.bucketName,i=(0,$.tryGetFunctionArn)(r),u=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:u};return await Se(c,v,E),{...n,functionArn:i}},"updateResource"),At=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,x.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,x.deepEqual)(n,r??{})&&await se(t,
55
- n)},"checkTagUpdates"),Se=o(async(t,e,r)=>{!(0,x.deepEqual)(e,r)&&await me(t,{eventsType:[
56
- "s3:ObjectCreated:*","s3:ObjectRemoved:*"],...e})},"checkEventUpdates");var be=o(()=>{(0,ke.tryRegisterProvider)(y,le())},"registerBucketProvider");var je=require("@ez4/aws-common");var Ee=require("@ez4/aws-common"),Re=require("@ez4/utils");var Pe=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)(y,(0,D.toKebabCase)(t)),"createBucketStateId"),xe=o(t=>t.
58
- type===y,"isBucketState"),K=o((t,e,r)=>{let n=t.getServiceState(e,r);if(!xe(n))throw new N(
59
- e);return n},"getBucketState"),C=o((t,e,r)=>{let n=r.getDependencies(y)[0]?.result;
60
- if(!n?.bucketName)throw new Pe.IncompleteResourceError(t,e,"bucketName");return n.
61
- bucketName},"getBucketName");var k=require("@aws-sdk/client-s3"),U=require("@ez4/aws-common");var P="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(P,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
- P,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:he,replace:qt,preview:Mt,update:$t,delete:Ht}),"\
66
- getPolicyHandler"),Lt=o((t,e)=>!!t.result&&t.result.bucketName===e.result?.bucketName,
67
- "equalsResource"),Mt=o((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"),qt=o(
70
- async(t,e,r)=>{if(e.result)throw new Ee.ReplaceResourceError(P,t.entryId,e.entryId);
71
- return he(t,r)},"replaceResource"),he=o(async(t,e)=>{let r=t.parameters,n=C(P,"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,je.tryRegisterProvider)(S,Ce())},"registerPolicyProvider");var qe=require("@ez4/aws-common");var Fe=require("node:fs/promises"),Ie=require("@ez4/aws-common"),z=require("@ez4/utils");var Te=require("node:fs"),l=require("@aws-sdk/client-s3"),B=require("@ez4/aws-common"),
75
- Ne=Tt(require("mime"),1);var b="AWS:S3/Object",g="aws:s3.object";var Kt=o(t=>t.type===g,"isBucketObjectState"),h=o((t,e)=>`${t}/${e}`,"getBucketO\
76
- bjectPath"),Ut=o(t=>t.getDependencies(g).map(({result:r,parameters:n})=>({lastModified:r?.
77
- lastModified,objectKey:n.objectKey})),"getBucketObjectFiles");var G=new l.S3Client({}),_=o(async(t,e)=>{let{objectKey:r,filePath:n}=e;B.Logger.
78
- logCreate(b,h(t,r));let s=Ne.default.getType(n);return await G.send(new l.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,h(t,e)),await G.send(new l.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,h(t,e));try{return await G.send(
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
83
  new l.DeleteObjectCommand({Bucket:t,Key:e})),!0}catch(r){if(!(r instanceof l.NoSuchBucket))
84
- throw r;return!1}},"deleteObject");var Ae=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 Ie.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 Me(
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 Me(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"),Me=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,qe.tryRegisterProvider)(g,Ae())},"registerObjectProvider");var M=require("@ez4/storage/library");var F=require("@ez4/stateful"),Ke=require("@ez4/aws-function");var He=require("@ez4/aws-identity");var W=o(t=>`arn:aws:s3:::${t}`,"buildBucketArn"),Z=o(t=>(0,He.createPolicyDocument)(
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.
88
+ 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)(
102
102
  [{resourceIds:[`arn:aws:s3:::${t}-*`,`arn:aws:s3:::${t}-*/*`],permissions:["s3:L\
103
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:y,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.linkEntryDependency)(t,c.entryId,e.entryId)),c},"createBu\
108
- cket");var L=require("@ez4/aws-function"),Ye=require("@ez4/project/library"),Y=require("@ez4/aws-identity"),
109
- 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"),
110
- Ve=require("@ez4/aws-common");var We=o(async(t,e)=>{let{handler:r,listener:n,context:s,debug:c}=t,i=(0,Ge.getDefinitionsObject)(
111
- e);return(0,Ve.getFunctionBundle)(_e.MappingServiceName,{templateFile:(0,Ue.join)(
112
- __dirname,"../lib/event.ts"),define:i,filePrefix:"s3",handler:r,listener:n,context:s,
113
- debug:c})},"bundleBucketEventFunction");var Q=o((t,e,r,n)=>{let{handler:s,variables:c}=n;return(0,Ze.createFunction)(t,e,
114
- r,{handlerName:"s3EntryPoint",sourceFile:s.sourceFile,functionName:n.functionName,
115
- description:n.description,timeout:n.timeout,memory:n.memory,debug:n.debug,tags:n.
116
- tags,getFunctionVariables:o(()=>c.reduce((i,u)=>({...i,...u}),{}),"getFunctionVa\
117
- riables"),getFunctionFiles:o(()=>[s.sourceFile,s.dependencies],"getFunctionFiles"),
118
- getFunctionBundle:o(i=>We(n,[...i.getDependencies(),...i.getConnections()]),"get\
119
- FunctionBundle"),getFunctionHash:o(()=>{},"getFunctionHash")})},"createBucketEve\
120
- ntFunction");var I=require("@ez4/project/library"),Je=require("@ez4/aws-common"),A=require("@ez4/utils");var Qe=o(async(t,e)=>{if(t.globalName)return(0,I.getServiceName)(t.globalName,e);
121
- let r=(0,I.getServiceName)(t,e),n=await(0,Je.getRandomName)(16);return`${r.substring(
122
- 0,46)}-${n}`},"getBucketName"),X=o((t,e)=>`${(0,A.toKebabCase)(t.name)}-${(0,A.toKebabCase)(
123
- e)}`,"getInternalName"),Xe=o((t,e,r)=>`${(0,I.getServiceName)(t,r)}-${(0,A.toKebabCase)(
124
- e)}`,"getFunctionName");var j=class extends Error{static{o(this,"RoleMissingError")}constructor(){super(
125
- "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))
126
- throw new j;let{handler:s,listener:c,logRetention:i,timeout:u,memory:v,variables:E}=e.
127
- events,T=X(e,s.name),d=(0,L.tryGetFunctionState)(n,T,r);if(d)return d;let ee=Xe(
128
- e,s.name,r),wt=n.getDependencyFiles(s.file),vt=(0,et.createLogGroup)(t,{retention:i??
129
- O.LogRetention,groupName:ee,tags:r.tags});return d=Q(t,n.role,vt,{functionName:ee,
130
- description:s.description,timeout:u??O.Timeout,memory:v??O.Memory,context:e.context,
131
- debug:r.debug,tags:r.tags,variables:[r.variables,e.variables,E],handler:{sourceFile:s.
132
- file,functionName:s.name,module:s.module,dependencies:wt},listener:c&&{functionName:c.
133
- name,sourceFile:c.file,module:c.module}}),n.setServiceState(d,T,r),d},"prepareEv\
134
- ents"),rt=o((t,e,r,n)=>{if(!e.events)return;if(!n.role||!(0,Y.isRoleState)(n.role))
135
- throw new j;let{handler:s}=e.events,c=X(e,s.name),i=(0,L.getFunctionState)(n,c,r);
136
- (0,Ye.linkServiceContext)(t,i.entryId,e.context)},"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)(
137
- s,{withFileTypes:!0,recursive:!0});for(let i of c){if(!i.isFile())continue;let u=(0,w.join)(
138
- i.parentPath,i.name);(0,nt.createBucketObject)(t,e,{objectKey:(0,w.relative)(s,u),
139
- filePath:(0,w.relative)(n,u)})}},"prepareLocalContent");var ct=o((t,e,r)=>{let n=K(t,e.name,r),s=n.entryId;return{module:"Client",from:"\
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"),
109
+ 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)(
111
+ 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
+ ()=>(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.
135
+ 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:"\
140
145
  @ez4/aws-bucket/client",constructor:`@{EZ4_MODULE_IMPORT}.make('${n.parameters.bucketName}\
141
- ')`,connectionIds:[s],dependencyIds:[s]}},"prepareLinkedClient");var at=o(t=>{let{service:e,options:r,context:n}=t;return(0,M.isBucketService)(e)?
142
- ct(n,e,r):null},"prepareLinkedServices"),it=o(async t=>{let{state:e,service:r,options:n,
143
- context:s}=t;if(!(0,M.isBucketService)(r))return!1;let{localPath:c,autoExpireDays:i,
144
- events:u,cors:v}=r,E=await Qe(r,n),T=tt(e,r,n,s),d=J(e,T,{eventsPath:u?.path,tags:n.
145
- tags,bucketName:E,autoExpireDays:i,localPath:c,cors:v});return s.setServiceState(
146
- d,r,n),c&&await st(e,d,c),!0},"prepareBucketServices"),pt=o(t=>{let{state:e,service:r,
147
- options:n,context:s}=t;(0,M.isBucketService)(r)&&rt(e,r,n,s)},"connectBucketServ\
148
- ices");var mt=require("@ez4/storage/library"),q=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;
149
- let s=(0,ut.getServiceName)("",n),c=`${s}-bucket-policy`;return(0,q.tryGetPolicy)(
150
- e,c)??(0,q.createPolicy)(e,{tags:n.tags,policyDocument:Z(s),policyName:c})},"pre\
151
- pareExecutionPolicy");var Qt=o(()=>{(0,yt.registerTriggers)(),(0,ft.registerTriggers)(),(0,gt.registerTriggers)(),
152
- (0,dt.registerTriggers)(),(0,St.tryCreateTrigger)("@ez4/aws-bucket",{"deploy:pre\
153
- pareExecutionPolicy":lt,"deploy:prepareLinkedService":at,"deploy:prepareResource\
154
- s":it,"deploy:connectResources":pt}),be(),Oe(),$e()},"registerTriggers");var kt=require("@ez4/aws-identity");var Xt=o(t=>/(.+)\.s3\.(.+)\.amazonaws\.com/i.test(t),"isBucketDomain"),Yt=o(async t=>{
155
- let e=await(0,kt.getRegion)();return`${t}.s3.${e}.amazonaws.com`},"getBucketDoma\
156
- in");var bt=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,bt.attachEntry)(
157
- t,{type:S,entryId:s,dependencies:[e.entryId,r.entryId],parameters:n})},"createBu\
158
- cketPolicy");var tr=o(t=>t.type===S,"isBucketPolicyState");var xt=require("@ez4/stateful"),Bt=require("@ez4/utils");var rr=o((t,e,r)=>{let n=r.objectKey,s=(0,Bt.hashData)(g,e.entryId,n);return(0,xt.attachEntry)(
159
- t,{type:g,entryId:s,dependencies:[e.entryId],parameters:r})},"createBucketObject");0&&(module.exports={BucketServiceName,BucketServiceType,ObjectServiceName,ObjectServiceType,
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)(),
157
+ (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=>{
160
+ 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,
160
165
  PolicyServiceName,PolicyServiceType,buildBucketArn,createBucket,createBucketEventFunction,
161
166
  createBucketObject,createBucketPolicy,createBucketStateId,getBucketDomain,getBucketName,
162
167
  getBucketObjectFiles,getBucketObjectPath,getBucketState,getPolicyDocument,isBucketDomain,
package/dist/main.mjs CHANGED
@@ -1,149 +1,154 @@
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{tryCreateTrigger as ar}from"@ez4/project/library";import{tryRegisterProvider 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 Ie,Logger as m}from"@ez4/aws-common";import{S3Client as Ae,
5
- ListObjectsV2Command as Le,CreateBucketCommand as Me,DeleteBucketCommand as qe,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 u=new Ae({}),A=o(async t=>{m.logFetch(i,t);try{return!(await u.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 m.logCreate(i,e),await u.
11
- send(new Me({Bucket:e})),{bucketName:e}},"createBucket"),M=o(async t=>{m.logDelete(
12
- i,t);try{return await u.send(new qe({Bucket:t})),!0}catch(e){if(!(e instanceof w))
13
- throw e;return!1}},"deleteBucket"),q=o(async(t,e)=>{m.logTag(i,t),await u.send(new $e(
14
- {Bucket:t,Tagging:{TagSet:Ie({...e,ManagedBy:"EZ4"})}}))},"tagBucket"),$=o(async(t,e)=>{
15
- m.logUpdate(i,`${t} CORS`),await u.send(new He({Bucket:t,CORSConfiguration:{CORSRules:[
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
16
  {ID:"ID0",AllowedOrigins:e.allowOrigins,AllowedMethods:e.allowMethods,AllowedHeaders:e.
17
17
  allowHeaders,ExposeHeaders:e.exposeHeaders,MaxAgeSeconds:e.maxAge}]}}))},"update\
18
- CorsConfiguration"),H=o(async t=>{m.logDelete(i,`${t} CORS`);try{return await u.
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)=>{m.logCreate(i,`${t} lifecycle`),await u.
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
- m.logDelete(i,`${t} lifecycle`);try{return await u.send(new Ge({Bucket:t})),!0}catch(e){
24
- if(!(e instanceof w))throw e;return!1}},"deleteLifecycle"),G=o(async(t,e)=>{m.logUpdate(
25
- i,`${t} events`);let{functionArn:r,eventsPath:n,eventsType:s}=e;await u.send(new _e(
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
26
  {Bucket:t,SkipDestinationValidation:!0,NotificationConfiguration:{...r&&{LambdaFunctionConfigurations:[
27
- {Id:"ID0",LambdaFunctionArn:r,Events:s,...n&&{Filter:{Key:{FilterRules:[{Name:"p\
28
- refix",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((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),p=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:p};return await X(c,k,b),{...n,functionArn:a}},"updateResource"),et=o(
41
- async t=>{let e=t.result;e&&await A(e.bucketName)&&await M(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 q(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{tryRegisterProvider 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((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{tryRegisterProvider as It}from"@ez4/aws-common";import{stat as Rt}from"node:fs/promises";import{ReplaceResourceError as Ct}from"@ez4/aws-common";
67
- import{deepCompare as ht,deepEqual as jt}from"@ez4/utils";import{createReadStream as kt}from"node:fs";import{S3Client as bt,PutObjectCommand as Pt,
68
- PutObjectTaggingCommand as xt,DeleteObjectCommand as Bt,NoSuchBucket as wt}from"@aws-sdk/client-s3";
69
- import{getTagList as vt,Logger as h}from"@ez4/aws-common";import Et from"mime";var d="AWS:S3/Object",f="aws:s3.object";var co=o(t=>t.type===f,"isBucketObjectState"),R=o((t,e)=>`${t}/${e}`,"getBucketO\
70
- bjectPath"),ao=o(t=>t.getDependencies(f).map(({result:r,parameters:n})=>({lastModified:r?.
71
- lastModified,objectKey:n.objectKey})),"getBucketObjectFiles");var j=new bt({}),O=o(async(t,e)=>{let{objectKey:r,filePath:n}=e;h.logCreate(d,R(
72
- t,r));let s=Et.getType(n);return await j.send(new Pt({Bucket:t,Key:r,Body:kt(n),
73
- ...s&&{ContentType:s}})),{objectKey:r}},"putObject"),pe=o(async(t,e,r)=>{h.logTag(
74
- d,R(t,e)),await j.send(new xt({Bucket:t,Key:e,Tagging:{TagSet:vt({...r,ManagedBy:"\
75
- EZ4"})}}))},"tagObject"),me=o(async(t,e)=>{h.logDelete(d,R(t,e));try{return await j.
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=ht({...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??{};!jt(s,n??{})&&await pe(t,e,s)},"chec\
94
- kTagUpdates");var fe=o(()=>{It(f,ue())},"registerObjectProvider");import{isBucketService as F}from"@ez4/storage/library";import{attachEntry as Lt,linkEntryDependency as Mt}from"@ez4/stateful";import{createPermission as qt}from"@ez4/aws-function";import{createPolicyDocument as At}from"@ez4/aws-identity";var ge=o(t=>`arn:aws:s3:::${t}`,"buildBucketArn"),de=o(t=>At([{resourceIds:[`arn\
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
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=Lt(t,{type:y,entryId:s,dependencies:[],
97
- parameters:r});return e&&(qt(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{linkServiceContext 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{handler:r,listener:n,context:s,debug:c}=t,a=Ht(e);return Ut(
103
- Kt,{templateFile:$t(import.meta.dirname,"../lib/event.ts"),define:a,filePrefix:"\
104
- s3",handler:r,listener:n,context:s,debug:c})},"bundleBucketEventFunction");var be=o((t,e,r,n)=>{let{handler:s,variables:c}=n;return Gt(t,e,r,{handlerName:"\
105
- s3EntryPoint",sourceFile:s.sourceFile,functionName:n.functionName,description:n.
106
- description,timeout:n.timeout,memory:n.memory,debug:n.debug,tags:n.tags,getFunctionVariables:o(
107
- ()=>c.reduce((a,p)=>({...a,...p}),{}),"getFunctionVariables"),getFunctionFiles:o(
108
- ()=>[s.sourceFile,s.dependencies],"getFunctionFiles"),getFunctionBundle:o(a=>ke(
109
- n,[...a.getDependencies(),...a.getConnections()]),"getFunctionBundle"),getFunctionHash:o(
110
- ()=>{},"getFunctionHash")})},"createBucketEventFunction");import{getServiceName as N}from"@ez4/project/library";import{getRandomName as _t}from"@ez4/aws-common";
111
- import{toKebabCase as D}from"@ez4/utils";var Pe=o(async(t,e)=>{if(t.globalName)return N(t.globalName,e);let r=N(t,e),n=await _t(
112
- 16);return`${r.substring(0,46)}-${n}`},"getBucketName"),z=o((t,e)=>`${D(t.name)}\
113
- -${D(e)}`,"getInternalName"),xe=o((t,e,r)=>`${N(t,r)}-${D(e)}`,"getFunctionName");var P=class extends Error{static{o(this,"RoleMissingError")}constructor(){super(
114
- "Execution role for S3 is missing.")}};var x;(n=>(n.LogRetention=90,n.Timeout=90,n.Memory=192))(x||={});var we=o((t,e,r,n)=>{if(!e.events)return;if(!n.role||!Be(n.role))throw new P;let{
115
- handler:s,listener:c,logRetention:a,timeout:p,memory:k,variables:b}=e.events,B=z(
116
- e,s.name),l=Wt(n,B,r);if(l)return l;let I=xe(e,s.name,r),De=n.getDependencyFiles(
117
- s.file),ze=Jt(t,{retention:a??x.LogRetention,groupName:I,tags:r.tags});return l=
118
- be(t,n.role,ze,{functionName:I,description:s.description,timeout:p??x.Timeout,memory:k??
119
- x.Memory,context:e.context,debug:r.debug,tags:r.tags,variables:[r.variables,e.variables,
120
- b],handler:{sourceFile:s.file,functionName:s.name,module:s.module,dependencies:De},
121
- listener:c&&{functionName:c.name,sourceFile:c.file,module:c.module}}),n.setServiceState(
122
- l,B,r),l},"prepareEvents"),ve=o((t,e,r,n)=>{if(!e.events)return;if(!n.role||!Be(
123
- n.role))throw new P;let{handler:s}=e.events,c=z(e,s.name),a=Vt(n,c,r);Zt(t,a.entryId,
124
- e.context)},"connectEvents");import{readdir as Qt}from"node:fs/promises";import{join as Ee,relative as Re}from"node:path";
125
- 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,
126
- recursive:!0});for(let a of c){if(!a.isFile())continue;let p=Ee(a.parentPath,a.name);
127
- Xt(t,e,{objectKey:Re(s,p),filePath:Re(n,p)})}},"prepareLocalContent");var he=o((t,e,r)=>{let n=te(t,e.name,r),s=n.entryId;return{module:"Client",from:"\
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";
101
+ 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:"\
128
133
  @ez4/aws-bucket/client",constructor:`@{EZ4_MODULE_IMPORT}.make('${n.parameters.bucketName}\
129
- ')`,connectionIds:[s],dependencyIds:[s]}},"prepareLinkedClient");var je=o(t=>{let{service:e,options:r,context:n}=t;return F(e)?he(n,e,r):null},"p\
130
- repareLinkedServices"),Oe=o(async t=>{let{state:e,service:r,options:n,context:s}=t;
131
- if(!F(r))return!1;let{localPath:c,autoExpireDays:a,events:p,cors:k}=r,b=await Pe(
132
- r,n),B=we(e,r,n,s),l=Se(e,B,{eventsPath:p?.path,tags:n.tags,bucketName:b,autoExpireDays:a,
133
- localPath:c,cors:k});return s.setServiceState(l,r,n),c&&await Ce(e,l,c),!0},"pre\
134
- pareBucketServices"),Te=o(t=>{let{state:e,service:r,options:n,context:s}=t;F(r)&&
135
- ve(e,r,n,s)},"connectBucketServices");import{ServiceType as Yt}from"@ez4/storage/library";import{createPolicy as er,tryGetPolicy as tr}from"@ez4/aws-identity";
136
- 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(
137
- "",n),c=`${s}-bucket-policy`;return tr(e,c)??er(e,{tags:n.tags,policyDocument:de(
138
- s),policyName:c})},"prepareExecutionPolicy");var Zn=o(()=>{or(),nr(),sr(),cr(),ar("@ez4/aws-bucket",{"deploy:prepareExecution\
139
- Policy":Ne,"deploy:prepareLinkedService":je,"deploy:prepareResources":Oe,"deploy\
140
- :connectResources":Te}),Y(),ie(),fe()},"registerTriggers");import{getRegion as ir}from"@ez4/aws-identity";var Yn=o(t=>/(.+)\.s3\.(.+)\.amazonaws\.com/i.test(t),"isBucketDomain"),es=o(async t=>{
141
- 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 cs=o((t,e,r,n)=>{let s=mr(g,e.entryId,r.entryId);return pr(t,{type:g,entryId:s,
142
- dependencies:[e.entryId,r.entryId],parameters:n})},"createBucketPolicy");var ms=o(t=>t.type===g,"isBucketPolicyState");import{attachEntry as ur}from"@ez4/stateful";import{hashData as lr}from"@ez4/utils";var ds=o((t,e,r)=>{let n=r.objectKey,s=lr(f,e.entryId,n);return ur(t,{type:f,entryId:s,
143
- dependencies:[e.entryId],parameters:r})},"createBucketObject");export{i as BucketServiceName,y as BucketServiceType,d as ObjectServiceName,f as ObjectServiceType,
144
- S as PolicyServiceName,g as PolicyServiceType,ge as buildBucketArn,Se as createBucket,
145
- be as createBucketEventFunction,ds as createBucketObject,cs as createBucketPolicy,
146
- ee as createBucketStateId,es as getBucketDomain,E as getBucketName,ao as getBucketObjectFiles,
147
- R as getBucketObjectPath,te as getBucketState,de as getPolicyDocument,Yn as isBucketDomain,
148
- co as isBucketObjectState,ms as isBucketPolicyState,st as isBucketState,Zn as registerTriggers};
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};
149
154
  //# sourceMappingURL=main.mjs.map
@@ -2,13 +2,21 @@ export declare namespace Defaults {
2
2
  /**
3
3
  * Default log retention in days.
4
4
  */
5
- const LogRetention = 90;
5
+ const LogRetention = 15;
6
6
  /**
7
- * Default lambda timeout.
7
+ * Default function architecture.
8
+ */
9
+ const Architecture = ArchitectureType.x86;
10
+ /**
11
+ * Default function runtime.
12
+ */
13
+ const Runtime = RuntimeType.Node24;
14
+ /**
15
+ * Default function timeout.
8
16
  */
9
17
  const Timeout = 90;
10
18
  /**
11
- * Default lambda memory.
19
+ * Default function memory.
12
20
  */
13
21
  const Memory = 192;
14
22
  }
package/lib/event.ts CHANGED
@@ -1,8 +1,10 @@
1
1
  import type { S3Event, Context } from 'aws-lambda';
2
2
  import type { Bucket } from '@ez4/storage';
3
3
 
4
- import { ServiceEventType } from '@ez4/common';
5
4
  import { BucketEventType } from '@ez4/storage';
5
+ import { ServiceEventType } from '@ez4/common';
6
+ import { Runtime } from '@ez4/common/runtime';
7
+ import { getRandomUUID } from '@ez4/utils';
6
8
 
7
9
  declare const __EZ4_CONTEXT: object;
8
10
 
@@ -27,14 +29,21 @@ export async function s3EntryPoint(event: S3Event, context: Context): Promise<vo
27
29
 
28
30
  const { bucket, object } = record.s3;
29
31
 
32
+ const traceId = getRandomUUID();
33
+
30
34
  currentRequest = {
31
35
  ...request,
32
- eventType,
33
36
  bucketName: bucket.name,
34
37
  objectSize: object.size,
35
- objectKey: object.key
38
+ objectKey: object.key,
39
+ eventType,
40
+ traceId
36
41
  };
37
42
 
43
+ Runtime.setScope({
44
+ traceId
45
+ });
46
+
38
47
  await onReady(currentRequest);
39
48
  await handle(currentRequest, __EZ4_CONTEXT);
40
49
  await onDone(currentRequest);
@@ -89,7 +98,7 @@ const onDone = async (request: Bucket.Incoming) => {
89
98
  };
90
99
 
91
100
  const onError = async (error: unknown, request: Bucket.Request | Bucket.Incoming) => {
92
- console.error(error);
101
+ console.error({ ...Runtime.getScope(), error });
93
102
 
94
103
  return dispatch(
95
104
  {
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.37.0",
4
+ "version": "0.39.0",
5
5
  "author": "Silas B.",
6
6
  "license": "MIT",
7
7
  "type": "module",
@@ -51,16 +51,17 @@
51
51
  "@types/mime": "^3.0.0"
52
52
  },
53
53
  "dependencies": {
54
- "@aws-sdk/client-s3": "^3.913.0",
55
- "@aws-sdk/s3-request-presigner": "^3.913.0",
56
- "@ez4/aws-common": "^0.37.0",
57
- "@ez4/aws-function": "^0.37.0",
58
- "@ez4/aws-identity": "^0.37.0",
59
- "@ez4/aws-logs": "^0.37.0",
60
- "@ez4/project": "^0.37.0",
61
- "@ez4/stateful": "^0.37.0",
62
- "@ez4/storage": "^0.37.0",
63
- "@ez4/utils": "^0.37.0",
54
+ "@aws-sdk/client-s3": "^3.958.0",
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",
64
65
  "mime": "^3.0.0"
65
66
  }
66
67
  }