@ez4/aws-bucket 0.37.0 → 0.38.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,166 @@
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 Ot=Object.create;var h=Object.defineProperty;var Tt=Object.getOwnPropertyDescriptor;var Nt=Object.getOwnPropertyNames;var Dt=Object.getPrototypeOf,zt=Object.prototype.hasOwnProperty;var o=(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})},ne=(t,e,r,n)=>{if(e&&
2
+ typeof e=="object"||typeof e=="function")for(let c of Nt(e))!zt.call(t,c)&&c!==r&&
3
+ h(t,c,{get:()=>e[c],enumerable:!(n=Tt(e,c))||n.enumerable});return t};var At=(t,e,r)=>(r=t!=null?Ot(Dt(t)):{},ne(e||!t||!t.__esModule?h(r,"default",{value:t,
4
+ enumerable:!0}):r,t)),It=t=>ne(h({},"__esModule",{value:!0}),t);var ir={};Ft(ir,{BucketServiceName:()=>m,BucketServiceType:()=>y,ObjectServiceName:()=>k,
5
+ ObjectServiceType:()=>g,PolicyServiceName:()=>x,PolicyServiceType:()=>d,buildBucketArn:()=>J,
6
+ createBucket:()=>X,createBucketEventFunction:()=>Y,createBucketObject:()=>ar,createBucketPolicy:()=>cr,
7
+ createBucketStateId:()=>U,getBucketDomain:()=>nr,getBucketName:()=>j,getBucketObjectFiles:()=>Zt,
8
+ getBucketObjectPath:()=>O,getBucketState:()=>G,getPolicyDocument:()=>Q,isBucketDomain:()=>or,
9
+ isBucketObjectState:()=>Wt,isBucketPolicyState:()=>sr,isBucketState:()=>ve,registerTriggers:()=>rr});
10
+ module.exports=It(ir);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,
34
+ {Id:"ID0",LambdaFunctionArn:r,Events:c,...n&&{Filter:{Key:{FilterRules:[{Name:"p\
35
+ refix",Value:n}]}}}}]}}}))},"updateEventNotifications");var ge=o(()=>({equals:Lt,create:de,replace:qt,preview:Mt,update:$t,delete:Ht}),"\
36
+ getBucketHandler"),Lt=o((t,e)=>!!t.result&&t.result.bucketName===e.result?.bucketName,
67
37
  "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(
38
+ n={...e.parameters,dependencies:e.dependencies},c=(0,B.deepCompare)(r,n);if(c.counts)
39
+ return{...c,name:r.bucketName}},"previewResource"),qt=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"),$t=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"),Ht=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:Kt,create:Te,replace:Gt,preview:Ut,update:_t,delete:Vt}),"\
66
+ getPolicyHandler"),Kt=o((t,e)=>!!t.result&&t.result.bucketName===e.result?.bucketName,
67
+ "equalsResource"),Ut=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"),Gt=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"),_t=o(async()=>{},"updateResource"),Vt=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=At(require("mime"),1);var k="AWS:S3/Object",g="aws:s3.object";var Wt=o(t=>t.type===g,"isBucketObjectState"),O=o((t,e)=>`${t}/${e}`,"getBucketO\
76
+ bjectPath"),Zt=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:Jt,create:$e,replace:Xt,preview:Qt,update:Yt,delete:er}),"\
85
+ getObjectHandler"),Jt=o((t,e)=>!!t.result&&t.result.lastModified===e.result?.lastModified,
86
+ "equalsResource"),Qt=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"),Xt=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"),Yt=o(
93
+ async(t,e)=>{let{result:r,parameters:n}=t;if(!r)return;let{objectKey:c,tags:s}=n,
94
+ i=tr(r,n,e.parameters);return await He(r.bucketName,c,s,e.parameters.tags),i},"u\
95
+ pdateResource"),er=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"),tr=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,timeout:n.
116
+ timeout,memory:n.memory,debug:n.debug,tags:n.tags,getFunctionVariables:o(()=>s.reduce(
117
+ (p,b)=>({...p,...b}),{}),"getFunctionVariables"),getFunctionFiles:o(()=>[c.sourceFile,
118
+ c.dependencies],"getFunctionFiles"),getFunctionBundle:o(p=>Qe(n,[...p.getDependencies(),
119
+ ...p.getConnections()]),"getFunctionBundle"),getFunctionHash:o(()=>(0,Ye.hashObject)(
120
+ {architecture:i}),"getFunctionHash")})},"createBucketEventFunction");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);
121
+ let r=(0,I.getServiceName)(t,e),n=await(0,et.getRandomName)(16);return`${r.substring(
122
+ 0,46)}-${n}`},"getBucketName"),ee=o((t,e)=>`${(0,L.toKebabCase)(t.name)}-${(0,L.toKebabCase)(
123
+ e)}`,"getInternalName"),rt=o((t,e,r)=>`${(0,I.getServiceName)(t,r)}-${(0,L.toKebabCase)(
124
+ e)}`,"getFunctionName");var T=class extends Error{static{o(this,"RoleMissingError")}constructor(){super(
125
+ "Execution role for S3 is missing.")}};var v=require("@ez4/aws-function"),P;(s=>(s.LogRetention=v.FunctionDefaults.LogRetention,
126
+ s.Architecture=v.FunctionDefaults.Architecture,s.Runtime=v.FunctionDefaults.Runtime,
127
+ 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))
128
+ throw new T;let{defaults:c}=r,{handler:s,listener:i,variables:p,runtime:b=c?.runtime??
129
+ P.Runtime,architecture:E=c?.architecture??P.Architecture,logRetention:H=c?.logRetention??
130
+ P.LogRetention,memory:N=c?.memory??P.Memory,timeout:Ct=P.Timeout}=e.events,re=ee(
131
+ e,s.name),C=(0,M.tryGetFunctionState)(n,re,r);if(C)return C;let oe=rt(e,s.name,r),
132
+ ht=n.getDependencyFiles(s.file),jt=(0,nt.createLogGroup)(t,{retention:H,groupName:oe,
133
+ tags:r.tags});return C=Y(t,n.role,jt,{functionName:oe,description:s.description,
134
+ context:e.context,debug:r.debug,tags:r.tags,variables:[r.variables,e.variables,p],
135
+ architecture:E,runtime:b,timeout:Ct,memory:N,handler:{sourceFile:s.file,functionName:s.
136
+ name,module:s.module,dependencies:ht},listener:i&&{functionName:i.name,sourceFile:i.
137
+ file,module:i.module}}),n.setServiceState(C,re,r),C},"prepareEvents"),st=o((t,e,r,n)=>{
138
+ if(!e.events)return;if(!n.role||!(0,te.isRoleState)(n.role))throw new T;let{handler:c}=e.
139
+ events,s=ee(e,c.name),i=(0,M.getFunctionState)(n,s,r);(0,ot.linkServiceContext)(
140
+ 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)(
141
+ c,{withFileTypes:!0,recursive:!0});for(let i of s){if(!i.isFile())continue;let p=(0,R.join)(
142
+ i.parentPath,i.name);(0,it.createBucketObject)(t,e,{objectKey:(0,R.relative)(c,p),
143
+ 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
144
  @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,
145
+ ')`,connectionIds:[c],dependencyIds:[c]}},"prepareLinkedClient");var ut=o(t=>{let{service:e,options:r,context:n}=t;return(0,q.isBucketService)(e)?
146
+ mt(n,e,r):null},"prepareLinkedServices"),lt=o(async t=>{let{state:e,service:r,options:n,
147
+ context:c}=t;if(!(0,q.isBucketService)(r))return!1;let{localPath:s,autoExpireDays:i,
148
+ 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.
149
+ tags,bucketName:E,autoExpireDays:i,localPath:s,cors:b});return c.setServiceState(
150
+ N,r,n),s&&await pt(e,N,s),!0},"prepareBucketServices"),yt=o(t=>{let{state:e,service:r,
151
+ options:n,context:c}=t;(0,q.isBucketService)(r)&&st(e,r,n,c)},"connectBucketServ\
152
+ 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;
153
+ let c=(0,gt.getServiceName)("",n),s=`${c}-bucket-policy`;return(0,$.tryGetPolicy)(
154
+ e,s)??(0,$.createPolicy)(e,{tags:n.tags,policyDocument:Q(c),policyName:s})},"pre\
155
+ pareExecutionPolicy");var rr=o(()=>{(0,St.registerTriggers)(),(0,kt.registerTriggers)(),(0,bt.registerTriggers)(),
156
+ (0,xt.registerTriggers)(),(0,Pt.tryCreateTrigger)("@ez4/aws-bucket",{"deploy:pre\
157
+ pareExecutionPolicy":dt,"deploy:prepareLinkedService":ut,"deploy:prepareResource\
158
+ s":lt,"deploy:connectResources":yt}),Be(),De(),Ue()},"registerTriggers");var Bt=require("@ez4/aws-identity");var or=o(t=>/(.+)\.s3\.(.+)\.amazonaws\.com/i.test(t),"isBucketDomain"),nr=o(async t=>{
159
+ let e=await(0,Bt.getRegion)();return`${t}.s3.${e}.amazonaws.com`},"getBucketDoma\
160
+ in");var wt=require("@ez4/stateful"),vt=require("@ez4/utils");var cr=o((t,e,r,n)=>{let c=(0,vt.hashData)(d,e.entryId,r.entryId);return(0,wt.attachEntry)(
161
+ t,{type:d,entryId:c,dependencies:[e.entryId,r.entryId],parameters:n})},"createBu\
162
+ cketPolicy");var sr=o(t=>t.type===d,"isBucketPolicyState");var Rt=require("@ez4/stateful"),Et=require("@ez4/utils");var ar=o((t,e,r)=>{let n=r.objectKey,c=(0,Et.hashData)(g,e.entryId,n);return(0,Rt.attachEntry)(
163
+ t,{type:g,entryId:c,dependencies:[e.entryId],parameters:r})},"createBucketObject");0&&(module.exports={BucketServiceName,BucketServiceType,ObjectServiceName,ObjectServiceType,
160
164
  PolicyServiceName,PolicyServiceType,buildBucketArn,createBucket,createBucketEventFunction,
161
165
  createBucketObject,createBucketPolicy,createBucketStateId,getBucketDomain,getBucketName,
162
166
  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 Me=Object.defineProperty;var o=(t,e)=>Me(t,"name",{value:e,configurable:!0});import{registerTriggers as ir}from"@ez4/aws-common";import{registerTriggers as pr}from"@ez4/aws-identity";
2
+ import{registerTriggers as mr}from"@ez4/aws-function";import{registerTriggers as ur}from"@ez4/storage/library";
3
+ import{tryCreateTrigger as lr}from"@ez4/project/library";import{tryRegisterProvider as ct}from"@ez4/aws-common";import{ReplaceResourceError as Xe}from"@ez4/aws-common";import{tryGetFunctionArn as Z}from"@ez4/aws-function";
4
+ import{deepCompare as Ye,deepEqual as j}from"@ez4/utils";import{getTagList as qe,Logger as m}from"@ez4/aws-common";import{S3Client as $e,
5
+ ListObjectsV2Command as He,CreateBucketCommand as Ke,DeleteBucketCommand as Ue,PutBucketTaggingCommand as Ge,
6
+ PutBucketCorsCommand as _e,DeleteBucketCorsCommand as Ve,PutBucketLifecycleConfigurationCommand as We,
7
+ DeleteBucketLifecycleCommand as Ze,PutBucketNotificationConfigurationCommand as Je,
8
+ ExpirationStatus as Qe,NoSuchBucket as v}from"@aws-sdk/client-s3";var p="AWS:S3/Bucket",l="aws:s3.bucket";var u=new $e({}),q=o(async t=>{m.logFetch(p,t);try{return!(await u.send(new He({
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 Ke({Bucket:e})),{bucketName:e}},"createBucket"),H=o(async t=>{m.logDelete(
12
+ p,t);try{return await u.send(new Ue({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 Ge(
14
+ {Bucket:t,Tagging:{TagSet:qe({...e,ManagedBy:"EZ4"})}}))},"tagBucket"),U=o(async(t,e)=>{
15
+ m.logUpdate(p,`${t} CORS`),await u.send(new _e({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 Ve({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 We({Bucket:t,LifecycleConfiguration:{Rules:[{ID:"ID0",Status:Qe.Enabled,
22
+ Filter:{Prefix:"*"},Expiration:{Days:e}}]}}))},"createLifecycle"),V=o(async t=>{
23
+ m.logDelete(p,`${t} lifecycle`);try{return await u.send(new Ze({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 Je(
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:et,create:Q,replace:rt,preview:tt,update:ot,delete:nt}),"ge\
29
+ tBucketHandler"),et=o((t,e)=>!!t.result&&t.result.bucketName===e.result?.bucketName,
30
+ "equalsResource"),tt=o((t,e)=>{let r={...t.parameters,dependencies:t.dependencies},
31
+ n={...e.parameters,dependencies:e.dependencies},c=Ye(r,n);if(c.counts)return{...c,
32
+ name:r.bucketName}},"previewResource"),rt=o(async(t,e,r)=>{if(e.result)throw new Xe(
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"),ot=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"),nt=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(()=>{ct(l,J())},"registerBucketProvider");import{tryRegisterProvider as Pt}from"@ez4/aws-common";import{ReplaceResourceError as ft}from"@ez4/aws-common";import{deepCompare as gt}from"@ez4/utils";import{IncompleteResourceError as st}from"@ez4/aws-common";import{hashData as at,
49
+ toKebabCase as it}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=>at(l,it(t)),"createBucketStateId"),pt=o(t=>t.type===l,"isBucketState"),
51
+ ne=o((t,e,r)=>{let n=t.getServiceState(e,r);if(!pt(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 st(t,e,"bucketName");return n.bucketName},"getBucketName");import{S3Client as mt,PutBucketPolicyCommand as ut,DeleteBucketPolicyCommand as lt,
54
+ NoSuchBucket as yt}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 mt({}),ae=o(async t=>{let{bucketName:e,role:r}=t;return ce.logCreate(
55
+ k,e),await se.send(new ut({Bucket:e,Policy:JSON.stringify(r)})),{bucketName:e}},
56
+ "createPolicy"),ie=o(async t=>{ce.logDelete(k,t);try{return await se.send(new lt(
57
+ {Bucket:t})),!0}catch(e){if(!(e instanceof yt))throw e;return!1}},"deletePolicy");var pe=o(()=>({equals:dt,create:me,replace:kt,preview:St,update:bt,delete:xt}),"\
58
+ getPolicyHandler"),dt=o((t,e)=>!!t.result&&t.result.bucketName===e.result?.bucketName,
59
+ "equalsResource"),St=o((t,e)=>{let r={...t.parameters,dependencies:t.dependencies},
60
+ n={...e.parameters,dependencies:e.dependencies},c=gt(r,n,{exclude:{getRole:!0}});
61
+ if(c.counts)return{...c,name:r.fromService}},"previewResource"),kt=o(async(t,e,r)=>{
62
+ if(e.result)throw new ft(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"),bt=o(async()=>{},"updat\
65
+ eResource"),xt=o(async t=>{let e=t.result;e&&await ie(e.bucketName)},"deleteReso\
66
+ urce");var ue=o(()=>{Pt(g,pe())},"registerPolicyProvider");import{tryRegisterProvider as qt}from"@ez4/aws-common";import{stat as Ot}from"node:fs/promises";import{ReplaceResourceError as Tt}from"@ez4/aws-common";
67
+ import{deepCompare as Nt,deepEqual as Dt}from"@ez4/utils";import{createReadStream as Bt}from"node:fs";import{S3Client as wt,PutObjectCommand as vt,
68
+ PutObjectTaggingCommand as Rt,DeleteObjectCommand as Et,NoSuchBucket as Ct}from"@aws-sdk/client-s3";
69
+ import{getTagList as ht,Logger as O}from"@ez4/aws-common";import jt from"mime";var d="AWS:S3/Object",y="aws:s3.object";var uo=o(t=>t.type===y,"isBucketObjectState"),C=o((t,e)=>`${t}/${e}`,"getBucketO\
70
+ bjectPath"),lo=o(t=>t.getDependencies(y).map(({result:r,parameters:n})=>({lastModified:r?.
71
+ lastModified,objectKey:n.objectKey})),"getBucketObjectFiles");var T=new wt({}),N=o(async(t,e)=>{let{objectKey:r,filePath:n}=e;O.logCreate(d,C(
72
+ t,r));let c=jt.getType(n);return await T.send(new vt({Bucket:t,Key:r,Body:Bt(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 Rt({Bucket:t,Key:e,Tagging:{TagSet:ht({...r,ManagedBy:"\
75
+ EZ4"})}}))},"tagObject"),ye=o(async(t,e)=>{O.logDelete(d,C(t,e));try{return await T.
76
+ send(new Et({Bucket:t,Key:e})),!0}catch(r){if(!(r instanceof Ct))throw r;return!1}},
77
+ "deleteObject");var fe=o(()=>({equals:zt,create:ge,replace:At,preview:Ft,update:It,delete:Lt}),"\
78
+ getObjectHandler"),zt=o((t,e)=>!!t.result&&t.result.lastModified===e.result?.lastModified,
79
+ "equalsResource"),Ft=o(async(t,e)=>{let r=t.parameters,n=e.parameters,c=Nt({...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"),At=o(async(t,e,r)=>{if(e.result)throw new Tt(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"),It=o(
86
+ async(t,e)=>{let{result:r,parameters:n}=t;if(!r)return;let{objectKey:c,tags:s}=n,
87
+ a=Mt(r,n,e.parameters);return await de(r.bucketName,c,s,e.parameters.tags),a},"u\
88
+ pdateResource"),Lt=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 Ot(t);return e.
90
+ getTime()},"getLastModifiedTime"),Mt=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??{};!Dt(c,n??{})&&await le(t,e,c)},"chec\
94
+ kTagUpdates");var Se=o(()=>{qt(y,fe())},"registerObjectProvider");import{isBucketService as I}from"@ez4/storage/library";import{attachEntry as Ht,linkEntryDependency as Kt}from"@ez4/stateful";import{createPermission as Ut}from"@ez4/aws-function";import{createPolicyDocument as $t}from"@ez4/aws-identity";var ke=o(t=>`arn:aws:s3:::${t}`,"buildBucketArn"),be=o(t=>$t([{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=Ht(t,{type:l,entryId:c,dependencies:[],
97
+ parameters:r});return e&&(Ut(t,s,e,{fromService:r.bucketName,getPermission:o(()=>({
98
+ principal:"s3.amazonaws.com",sourceArn:ke(n)}),"getPermission")}),Kt(t,s.entryId,
99
+ e.entryId)),s},"createBucket");import{getFunctionState as Xt,tryGetFunctionState as Yt}from"@ez4/aws-function";
100
+ import{linkServiceContext as er}from"@ez4/project/library";import{isRoleState as Re}from"@ez4/aws-identity";
101
+ import{createLogGroup as tr}from"@ez4/aws-logs";import{createFunction as Zt}from"@ez4/aws-function";import{hashObject as Jt}from"@ez4/utils";import{join as Gt}from"node:path";import{getDefinitionsObject as _t}from"@ez4/project/library";
102
+ import{MappingServiceName as Vt}from"@ez4/aws-function";import{getFunctionBundle as Wt}from"@ez4/aws-common";var Pe=o(async(t,e)=>{let{handler:r,listener:n,context:c,debug:s}=t,a=_t(e);return Wt(
103
+ Vt,{templateFile:Gt(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 Zt(t,e,r,
105
+ {handlerName:"s3EntryPoint",sourceFile:c.sourceFile,functionName:n.functionName,
106
+ description:n.description,architecture:n.architecture,runtime:n.runtime,timeout:n.
107
+ timeout,memory:n.memory,debug:n.debug,tags:n.tags,getFunctionVariables:o(()=>s.reduce(
108
+ (i,f)=>({...i,...f}),{}),"getFunctionVariables"),getFunctionFiles:o(()=>[c.sourceFile,
109
+ c.dependencies],"getFunctionFiles"),getFunctionBundle:o(i=>Pe(n,[...i.getDependencies(),
110
+ ...i.getConnections()]),"getFunctionBundle"),getFunctionHash:o(()=>Jt({architecture:a}),
111
+ "getFunctionHash")})},"createBucketEventFunction");import{getServiceName as z}from"@ez4/project/library";import{getRandomName as Qt}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 Qt(
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}=r,{handler:s,listener:a,variables:i,runtime:f=c?.runtime??S.Runtime,
119
+ architecture:b=c?.architecture??S.Architecture,logRetention:h=c?.logRetention??S.
120
+ LogRetention,memory:w=c?.memory??S.Memory,timeout:Ae=S.Timeout}=e.events,L=A(e,s.
121
+ name),x=Yt(n,L,r);if(x)return x;let M=ve(e,s.name,r),Ie=n.getDependencyFiles(s.file),
122
+ Le=tr(t,{retention:h,groupName:M,tags:r.tags});return x=Be(t,n.role,Le,{functionName:M,
123
+ description:s.description,context:e.context,debug:r.debug,tags:r.tags,variables:[
124
+ r.variables,e.variables,i],architecture:b,runtime:f,timeout:Ae,memory:w,handler:{
125
+ sourceFile:s.file,functionName:s.name,module:s.module,dependencies:Ie},listener:a&&
126
+ {functionName:a.name,sourceFile:a.file,module:a.module}}),n.setServiceState(x,L,
127
+ r),x},"prepareEvents"),Ce=o((t,e,r,n)=>{if(!e.events)return;if(!n.role||!Re(n.role))
128
+ throw new P;let{handler:c}=e.events,s=A(e,c.name),a=Xt(n,s,r);er(t,a.entryId,e.context)},
129
+ "connectEvents");import{readdir as rr}from"node:fs/promises";import{join as he,relative as je}from"node:path";
130
+ import{createBucketObject as or}from"@ez4/aws-bucket";var Oe=o(async(t,e,r)=>{let n=process.cwd(),c=he(n,r),s=await rr(c,{withFileTypes:!0,
131
+ recursive:!0});for(let a of s){if(!a.isFile())continue;let i=he(a.parentPath,a.name);
132
+ or(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 nr}from"@ez4/storage/library";import{createPolicy as cr,tryGetPolicy as sr}from"@ez4/aws-identity";
141
+ import{getServiceName as ar}from"@ez4/project/library";var Fe=o(t=>{let{state:e,serviceType:r,options:n}=t;if(r!==nr)return null;let c=ar(
142
+ "",n),s=`${c}-bucket-policy`;return sr(e,s)??cr(e,{tags:n.tags,policyDocument:be(
143
+ c),policyName:s})},"prepareExecutionPolicy");var rc=o(()=>{ir(),pr(),mr(),ur(),lr("@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 yr}from"@ez4/aws-identity";var sc=o(t=>/(.+)\.s3\.(.+)\.amazonaws\.com/i.test(t),"isBucketDomain"),ac=o(async t=>{
146
+ let e=await yr();return`${t}.s3.${e}.amazonaws.com`},"getBucketDomain");import{attachEntry as fr}from"@ez4/stateful";import{hashData as gr}from"@ez4/utils";var yc=o((t,e,r,n)=>{let c=gr(g,e.entryId,r.entryId);return fr(t,{type:g,entryId:c,
147
+ dependencies:[e.entryId,r.entryId],parameters:n})},"createBucketPolicy");var Sc=o(t=>t.type===g,"isBucketPolicyState");import{attachEntry as dr}from"@ez4/stateful";import{hashData as Sr}from"@ez4/utils";var wc=o((t,e,r)=>{let n=r.objectKey,c=Sr(y,e.entryId,n);return dr(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,wc as createBucketObject,yc as createBucketPolicy,
151
+ oe as createBucketStateId,ac as getBucketDomain,E as getBucketName,lo as getBucketObjectFiles,
152
+ C as getBucketObjectPath,ne as getBucketState,be as getPolicyDocument,sc as isBucketDomain,
153
+ uo as isBucketObjectState,Sc as isBucketPolicyState,pt as isBucketState,rc as registerTriggers};
149
154
  //# sourceMappingURL=main.mjs.map
@@ -4,11 +4,19 @@ export declare namespace Defaults {
4
4
  */
5
5
  const LogRetention = 90;
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.38.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.38.0",
57
+ "@ez4/aws-function": "^0.38.0",
58
+ "@ez4/aws-identity": "^0.38.0",
59
+ "@ez4/aws-logs": "^0.38.0",
60
+ "@ez4/common": "^0.38.0",
61
+ "@ez4/project": "^0.38.0",
62
+ "@ez4/stateful": "^0.38.0",
63
+ "@ez4/storage": "^0.38.0",
64
+ "@ez4/utils": "^0.38.0",
64
65
  "mime": "^3.0.0"
65
66
  }
66
67
  }