@ez4/aws-bucket 0.35.0 → 0.37.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import type { FunctionParameters } from '@ez4/aws-function';
1
+ import type { FunctionParameters, FunctionVariables } from '@ez4/aws-function';
2
2
  import type { ContextSource } from '@ez4/project/library';
3
3
  export type BucketEventFunction = {
4
4
  functionName: string;
@@ -8,9 +8,10 @@ export type BucketEventFunction = {
8
8
  export type BucketEventEntryPoint = BucketEventFunction & {
9
9
  dependencies: string[];
10
10
  };
11
- export type BucketEventFunctionParameters = Omit<FunctionParameters, 'getFunctionFiles' | 'getFunctionBundle' | 'getFunctionHash' | 'sourceFile' | 'handlerName'> & {
11
+ export type BucketEventFunctionParameters = Omit<FunctionParameters, 'getFunctionFiles' | 'getFunctionBundle' | 'getFunctionHash' | 'getFunctionVariables' | 'sourceFile' | 'handlerName'> & {
12
12
  handler: BucketEventEntryPoint;
13
13
  listener?: BucketEventFunction;
14
14
  context?: Record<string, ContextSource>;
15
+ variables: (FunctionVariables | undefined)[];
15
16
  debug?: boolean;
16
17
  };
package/dist/main.cjs CHANGED
@@ -1,107 +1,107 @@
1
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
2
  typeof e=="object"||typeof e=="function")for(let s of Ct(e))!jt.call(t,s)&&s!==r&&
3
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:()=>l,ObjectServiceName:()=>b,
5
- ObjectServiceType:()=>f,PolicyServiceName:()=>x,PolicyServiceType:()=>S,buildBucketArn:()=>W,
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
6
  createBucket:()=>J,createBucketEventFunction:()=>Q,createBucketObject:()=>rr,createBucketPolicy:()=>er,
7
7
  createBucketStateId:()=>H,getBucketDomain:()=>Yt,getBucketName:()=>C,getBucketObjectFiles:()=>Ut,
8
8
  getBucketObjectPath:()=>h,getBucketState:()=>K,getPolicyDocument:()=>Z,isBucketDomain:()=>Xt,
9
- isBucketObjectState:()=>Kt,isBucketPolicyState:()=>tr,isBucketState:()=>Pe,registerTriggers:()=>Qt});
9
+ isBucketObjectState:()=>Kt,isBucketPolicyState:()=>tr,isBucketState:()=>xe,registerTriggers:()=>Qt});
10
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"),P=require("@ez4/utils");var m=require("@ez4/aws-common"),a=require("@aws-sdk/client-s3");var p="AWS:S3/Bucket",l="aws:s3.bucket";var y=new a.S3Client({}),re=o(async t=>{m.Logger.logFetch(p,t);try{return!(await y.
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.
12
12
  send(new a.ListObjectsV2Command({Bucket:t,MaxKeys:1}))).Contents?.length}catch(e){
13
13
  if(!(e instanceof a.NoSuchBucket))throw e;return 0}},"isBucketEmpty"),oe=o(async t=>{
14
- let{bucketName:e}=t;return m.Logger.logCreate(p,e),await y.send(new a.CreateBucketCommand(
14
+ let{bucketName:e}=t;return m.Logger.logCreate(p,e),await f.send(new a.CreateBucketCommand(
15
15
  {Bucket:e})),{bucketName:e}},"createBucket"),ne=o(async t=>{m.Logger.logDelete(p,
16
- t);try{return await y.send(new a.DeleteBucketCommand({Bucket:t})),!0}catch(e){if(!(e instanceof
16
+ t);try{return await f.send(new a.DeleteBucketCommand({Bucket:t})),!0}catch(e){if(!(e instanceof
17
17
  a.NoSuchBucket))throw e;return!1}},"deleteBucket"),se=o(async(t,e)=>{m.Logger.logTag(
18
- p,t),await y.send(new a.PutBucketTaggingCommand({Bucket:t,Tagging:{TagSet:(0,m.getTagList)(
18
+ p,t),await f.send(new a.PutBucketTaggingCommand({Bucket:t,Tagging:{TagSet:(0,m.getTagList)(
19
19
  {...e,ManagedBy:"EZ4"})}}))},"tagBucket"),ce=o(async(t,e)=>{m.Logger.logUpdate(p,
20
- `${t} CORS`),await y.send(new a.PutBucketCorsCommand({Bucket:t,CORSConfiguration:{
20
+ `${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
23
  "updateCorsConfiguration"),ae=o(async t=>{m.Logger.logDelete(p,`${t} CORS`);try{
24
- return await y.send(new a.DeleteBucketCorsCommand({Bucket:t})),!0}catch(e){if(!(e instanceof
24
+ return await f.send(new a.DeleteBucketCorsCommand({Bucket:t})),!0}catch(e){if(!(e instanceof
25
25
  a.NoSuchBucket))throw e;return!1}},"deleteCorsConfiguration"),ie=o(async(t,e)=>{
26
- m.Logger.logCreate(p,`${t} lifecycle`),await y.send(new a.PutBucketLifecycleConfigurationCommand(
26
+ m.Logger.logCreate(p,`${t} lifecycle`),await f.send(new a.PutBucketLifecycleConfigurationCommand(
27
27
  {Bucket:t,LifecycleConfiguration:{Rules:[{ID:"ID0",Status:a.ExpirationStatus.Enabled,
28
28
  Filter:{Prefix:"*"},Expiration:{Days:e}}]}}))},"createLifecycle"),pe=o(async t=>{
29
- m.Logger.logDelete(p,`${t} lifecycle`);try{return await y.send(new a.DeleteBucketLifecycleCommand(
29
+ m.Logger.logDelete(p,`${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
31
  eleteLifecycle"),me=o(async(t,e)=>{m.Logger.logUpdate(p,`${t} events`);let{functionArn:r,
32
- eventsPath:n,eventsType:s}=e;await y.send(new a.PutBucketNotificationConfigurationCommand(
32
+ eventsPath:n,eventsType:s}=e;await f.send(new a.PutBucketNotificationConfigurationCommand(
33
33
  {Bucket:t,SkipDestinationValidation:!0,NotificationConfiguration:{...r&&{LambdaFunctionConfigurations:[
34
34
  {Id:"ID0",LambdaFunctionArn:r,Events:s,...n&&{Filter:{Key:{FilterRules:[{Name:"p\
35
- refix",Value:n}]}}}}]}}}))},"updateEventNotifications");var le=o(()=>({equals:Dt,create:ye,replace:Ft,preview:zt,update:At,delete:It}),"\
35
+ refix",Value:n}]}}}}]}}}))},"updateEventNotifications");var le=o(()=>({equals:Dt,create:ye,replace:Ft,preview:zt,update:It,delete:At}),"\
36
36
  getBucketHandler"),Dt=o((t,e)=>!!t.result&&t.result.bucketName===e.result?.bucketName,
37
37
  "equalsResource"),zt=o((t,e)=>{let r={...t.parameters,dependencies:t.dependencies},
38
- n={...e.parameters,dependencies:e.dependencies},s=(0,P.deepCompare)(r,n);if(s.counts)
38
+ n={...e.parameters,dependencies:e.dependencies},s=(0,x.deepCompare)(r,n);if(s.counts)
39
39
  return{...s,name:r.bucketName}},"previewResource"),Ft=o(async(t,e,r)=>{if(e.result)
40
40
  throw new ue.ReplaceResourceError(p,t.entryId,e.entryId);return ye(t,r)},"replac\
41
41
  eResource"),ye=o(async(t,e)=>{let r=t.parameters,n=(0,$.tryGetFunctionArn)(e),{bucketName:s}=await oe(
42
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
43
  eventsPath,functionArn:n};return await Se(s,c,{}),{bucketName:s,functionArn:n}},
44
- "createResource"),At=o(async(t,e,r)=>{let{result:n,parameters:s}=t;if(!n)return;
45
- let c=n.bucketName,i=(0,$.tryGetFunctionArn)(r),g=e.result?.functionArn;await fe(
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
46
  c,s,e.parameters),await ge(c,s,e.parameters),await de(c,s.tags,e.parameters.tags);
47
47
  let v={eventsPath:s.eventsPath,functionArn:i},E={eventsPath:e.parameters.eventsPath,
48
- functionArn:g};return await Se(c,v,E),{...n,functionArn:i}},"updateResource"),It=o(
48
+ functionArn:u};return await Se(c,v,E),{...n,functionArn:i}},"updateResource"),At=o(
49
49
  async t=>{let e=t.result;e&&await re(e.bucketName)&&await ne(e.bucketName)},"del\
50
- eteResource"),fe=o(async(t,e,r)=>{if(!(e.cors&&r?.cors&&(0,P.deepEqual)(e.cors,r.
50
+ eteResource"),fe=o(async(t,e,r)=>{if(!(e.cors&&r?.cors&&(0,x.deepEqual)(e.cors,r.
51
51
  cors))){if(e.cors)return ce(t,e.cors);if(r?.cors)return ae(t)}},"checkCorsUpdate\
52
52
  s"),ge=o(async(t,e,r)=>{if(e.autoExpireDays!==r?.autoExpireDays){if(e.autoExpireDays)
53
53
  return ie(t,e.autoExpireDays);if(r?.autoExpireDays)return pe(t)}},"checkLifecycl\
54
- eUpdates"),de=o(async(t,e,r)=>{let n=e??{};!(0,P.deepEqual)(n,r??{})&&await se(t,
55
- n)},"checkTagUpdates"),Se=o(async(t,e,r)=>{!(0,P.deepEqual)(e,r)&&await me(t,{eventsType:[
56
- "s3:ObjectCreated:*","s3:ObjectRemoved:*"],...e})},"checkEventUpdates");var be=o(()=>{(0,ke.tryRegisterProvider)(l,le())},"registerBucketProvider");var je=require("@ez4/aws-common");var Ee=require("@ez4/aws-common"),Re=require("@ez4/utils");var xe=require("@ez4/aws-common"),D=require("@ez4/utils");var N=class extends Error{static{o(this,"BucketNotFoundError")}constructor(e){super(
57
- `Bucket service ${e} wasn't found.`)}};var H=o(t=>(0,D.hashData)(l,(0,D.toKebabCase)(t)),"createBucketStateId"),Pe=o(t=>t.
58
- type===l,"isBucketState"),K=o((t,e,r)=>{let n=t.getServiceState(e,r);if(!Pe(n))throw new N(
59
- e);return n},"getBucketState"),C=o((t,e,r)=>{let n=r.getDependencies(l)[0]?.result;
60
- if(!n?.bucketName)throw new xe.IncompleteResourceError(t,e,"bucketName");return n.
61
- bucketName},"getBucketName");var k=require("@aws-sdk/client-s3"),U=require("@ez4/aws-common");var x="AWS:S3/Policy",S="aws:s3.policy";var Be=new k.S3Client({}),we=o(async t=>{let{bucketName:e,role:r}=t;return U.Logger.
62
- logCreate(x,e),await Be.send(new k.PutBucketPolicyCommand({Bucket:e,Policy:JSON.
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
63
  stringify(r)})),{bucketName:e}},"createPolicy"),ve=o(async t=>{U.Logger.logDelete(
64
- x,t);try{return await Be.send(new k.DeleteBucketPolicyCommand({Bucket:t})),!0}catch(e){
65
- if(!(e instanceof k.NoSuchBucket))throw e;return!1}},"deletePolicy");var Ce=o(()=>({equals:Lt,create:he,replace:Mt,preview:qt,update:$t,delete:Ht}),"\
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
66
  getPolicyHandler"),Lt=o((t,e)=>!!t.result&&t.result.bucketName===e.result?.bucketName,
67
- "equalsResource"),qt=o((t,e)=>{let r={...t.parameters,dependencies:t.dependencies},
67
+ "equalsResource"),Mt=o((t,e)=>{let r={...t.parameters,dependencies:t.dependencies},
68
68
  n={...e.parameters,dependencies:e.dependencies},s=(0,Re.deepCompare)(r,n,{exclude:{
69
- getRole:!0}});if(s.counts)return{...s,name:r.fromService}},"previewResource"),Mt=o(
70
- async(t,e,r)=>{if(e.result)throw new Ee.ReplaceResourceError(x,t.entryId,e.entryId);
71
- return he(t,r)},"replaceResource"),he=o(async(t,e)=>{let r=t.parameters,n=C(x,"p\
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
72
  olicy",e),s=await r.getRole(e);return await we({bucketName:n,role:s}),{bucketName:n}},
73
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 Me=require("@ez4/aws-common");var Fe=require("node:fs/promises"),Ae=require("@ez4/aws-common"),z=require("@ez4/utils");var Te=require("node:fs"),u=require("@aws-sdk/client-s3"),B=require("@ez4/aws-common"),
75
- Ne=Tt(require("mime"),1);var b="AWS:S3/Object",f="aws:s3.object";var Kt=o(t=>t.type===f,"isBucketObjectState"),h=o((t,e)=>`${t}/${e}`,"getBucketO\
76
- bjectPath"),Ut=o(t=>t.getDependencies(f).map(({result:r,parameters:n})=>({lastModified:r?.
77
- lastModified,objectKey:n.objectKey})),"getBucketObjectFiles");var G=new u.S3Client({}),_=o(async(t,e)=>{let{objectKey:r,filePath:n}=e;B.Logger.
78
- logCreate(b,h(t,r));let s=Ne.default.getType(n);return await G.send(new u.PutObjectCommand(
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
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 u.PutObjectTaggingCommand(
80
+ "putObject"),De=o(async(t,e,r)=>{B.Logger.logTag(b,h(t,e)),await G.send(new l.PutObjectTaggingCommand(
81
81
  {Bucket:t,Key:e,Tagging:{TagSet:(0,B.getTagList)({...r,ManagedBy:"EZ4"})}}))},"t\
82
82
  agObject"),ze=o(async(t,e)=>{B.Logger.logDelete(b,h(t,e));try{return await G.send(
83
- new u.DeleteObjectCommand({Bucket:t,Key:e})),!0}catch(r){if(!(r instanceof u.NoSuchBucket))
84
- throw r;return!1}},"deleteObject");var Ie=o(()=>({equals:Gt,create:Le,replace:Vt,preview:_t,update:Wt,delete:Zt}),"\
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
85
  getObjectHandler"),Gt=o((t,e)=>!!t.result&&t.result.lastModified===e.result?.lastModified,
86
86
  "equalsResource"),_t=o(async(t,e)=>{let r=t.parameters,n=e.parameters,s=(0,z.deepCompare)(
87
87
  {...r,dependencies:t.dependencies,lastModified:await V(r.filePath)},{...n,dependencies:e.
88
88
  dependencies,lastModified:t.result?.lastModified});if(s.counts)return{...s,name:r.
89
- objectKey}},"previewResource"),Vt=o(async(t,e,r)=>{if(e.result)throw new Ae.ReplaceResourceError(
89
+ objectKey}},"previewResource"),Vt=o(async(t,e,r)=>{if(e.result)throw new Ie.ReplaceResourceError(
90
90
  b,t.entryId,e.entryId);return Le(t,r)},"replaceResource"),Le=o(async(t,e)=>{let r=t.
91
- parameters,n=C(b,"bucket",e),s=await V(r.filePath),{objectKey:c}=await _(n,r);return await qe(
91
+ parameters,n=C(b,"bucket",e),s=await V(r.filePath),{objectKey:c}=await _(n,r);return await Me(
92
92
  n,c,r.tags,t.parameters.tags),{lastModified:s,bucketName:n}},"createResource"),Wt=o(
93
93
  async(t,e)=>{let{result:r,parameters:n}=t;if(!r)return;let{objectKey:s,tags:c}=n,
94
- i=Jt(r,n,e.parameters);return await qe(r.bucketName,s,c,e.parameters.tags),i},"u\
94
+ i=Jt(r,n,e.parameters);return await Me(r.bucketName,s,c,e.parameters.tags),i},"u\
95
95
  pdateResource"),Zt=o(async t=>{let{result:e,parameters:r}=t;e&&await ze(e.bucketName,
96
96
  r.objectKey)},"deleteResource"),V=o(async t=>{let{mtime:e}=await(0,Fe.stat)(t);return e.
97
97
  getTime()},"getLastModifiedTime"),Jt=o(async(t,e,r)=>{let n=await V(e.filePath);
98
98
  if(n<=t.lastModified&&e.filePath===r.filePath)return t;let{bucketName:s}=t,{objectKey:c}=r;
99
99
  return await _(s,{...e,objectKey:c}),{lastModified:n,bucketName:s}},"checkObject\
100
- Updates"),qe=o(async(t,e,r,n)=>{let s=r??{};!(0,z.deepEqual)(s,n??{})&&await De(
101
- t,e,s)},"checkTagUpdates");var $e=o(()=>{(0,Me.tryRegisterProvider)(f,Ie())},"registerObjectProvider");var q=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)(
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)(
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:l,entryId:s,
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
105
  dependencies:[],parameters:r});return e&&((0,Ke.createPermission)(t,c,e,{fromService:r.
106
106
  bucketName,getPermission:o(()=>({principal:"s3.amazonaws.com",sourceArn:W(n)}),"\
107
107
  getPermission")}),(0,F.linkEntryDependency)(t,c.entryId,e.entryId)),c},"createBu\
@@ -110,52 +110,53 @@ et=require("@ez4/aws-logs");var Ze=require("@ez4/aws-function");var Ue=require("
110
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
111
  e);return(0,Ve.getFunctionBundle)(_e.MappingServiceName,{templateFile:(0,Ue.join)(
112
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}=n;return(0,Ze.createFunction)(t,e,r,{handlerName:"\
114
- s3EntryPoint",sourceFile:s.sourceFile,functionName:n.functionName,description:n.
115
- description,variables:n.variables,timeout:n.timeout,memory:n.memory,debug:n.debug,
116
- tags:n.tags,getFunctionFiles:o(()=>[s.sourceFile,s.dependencies],"getFunctionFil\
117
- es"),getFunctionBundle:o(c=>We(n,[...c.getDependencies(),...c.getConnections()]),
118
- "getFunctionBundle"),getFunctionHash:o(()=>{},"getFunctionHash")})},"createBucke\
119
- tEventFunction");var A=require("@ez4/project/library"),Je=require("@ez4/aws-common"),I=require("@ez4/utils");var Qe=o(async(t,e)=>{if(t.globalName)return(0,A.getServiceName)(t.globalName,e);
120
- let r=(0,A.getServiceName)(t,e),n=await(0,Je.getRandomName)(16);return`${r.substring(
121
- 0,46)}-${n}`},"getBucketName"),X=o((t,e)=>`${(0,I.toKebabCase)(t.name)}-${(0,I.toKebabCase)(
122
- e)}`,"getInternalName"),Xe=o((t,e,r)=>`${(0,A.getServiceName)(t,r)}-${(0,I.toKebabCase)(
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)(
123
124
  e)}`,"getFunctionName");var j=class extends Error{static{o(this,"RoleMissingError")}constructor(){super(
124
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))
125
- throw new j;let{handler:s,listener:c,logRetention:i,timeout:g,memory:v,variables:E}=e.
126
+ throw new j;let{handler:s,listener:c,logRetention:i,timeout:u,memory:v,variables:E}=e.
126
127
  events,T=X(e,s.name),d=(0,L.tryGetFunctionState)(n,T,r);if(d)return d;let ee=Xe(
127
128
  e,s.name,r),wt=n.getDependencyFiles(s.file),vt=(0,et.createLogGroup)(t,{retention:i??
128
129
  O.LogRetention,groupName:ee,tags:r.tags});return d=Q(t,n.role,vt,{functionName:ee,
129
- description:s.description,timeout:g??O.Timeout,memory:v??O.Memory,context:e.context,
130
- debug:r.debug,tags:r.tags,handler:{sourceFile:s.file,functionName:s.name,module:s.
131
- module,dependencies:wt},listener:c&&{functionName:c.name,sourceFile:c.file,module:c.
132
- module},variables:{...r.variables,...e.variables,...E}}),n.setServiceState(d,T,r),
133
- d},"prepareEvents"),rt=o((t,e,r,n)=>{if(!e.events)return;if(!n.role||!(0,Y.isRoleState)(
134
- n.role))throw new j;let{handler:s}=e.events,c=X(e,s.name),i=(0,L.getFunctionState)(
135
- n,c,r);(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)(
136
- s,{withFileTypes:!0,recursive:!0});for(let i of c){if(!i.isFile())continue;let g=(0,w.join)(
137
- i.parentPath,i.name);(0,nt.createBucketObject)(t,e,{objectKey:(0,w.relative)(s,g),
138
- filePath:(0,w.relative)(n,g)})}},"prepareLocalContent");var ct=o((t,e,r)=>{let n=K(t,e.name,r),s=n.entryId;return{connectionIds:[s],dependencyIds:[
139
- s],constructor:`make('${n.parameters.bucketName}')`,from:"@ez4/aws-bucket/client",
140
- module:"Client"}},"prepareLinkedClient");var at=o(t=>{let{service:e,options:r,context:n}=t;return(0,q.isBucketService)(e)?
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:"\
140
+ @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)?
141
142
  ct(n,e,r):null},"prepareLinkedServices"),it=o(async t=>{let{state:e,service:r,options:n,
142
- context:s}=t;if(!(0,q.isBucketService)(r))return!1;let{localPath:c,autoExpireDays:i,
143
- events:g,cors:v}=r,E=await Qe(r,n),T=tt(e,r,n,s),d=J(e,T,{eventsPath:g?.path,tags:n.
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.
144
145
  tags,bucketName:E,autoExpireDays:i,localPath:c,cors:v});return s.setServiceState(
145
146
  d,r,n),c&&await st(e,d,c),!0},"prepareBucketServices"),pt=o(t=>{let{state:e,service:r,
146
- options:n,context:s}=t;(0,q.isBucketService)(r)&&rt(e,r,n,s)},"connectBucketServ\
147
- ices");var mt=require("@ez4/storage/library"),M=require("@ez4/aws-identity"),ut=require("@ez4/project/library");var lt=o(t=>{let{state:e,serviceType:r,options:n}=t;if(r!==mt.ServiceType)return null;
148
- let s=(0,ut.getServiceName)("",n),c=`${s}-bucket-policy`;return(0,M.tryGetPolicy)(
149
- e,c)??(0,M.createPolicy)(e,{tags:n.tags,policyDocument:Z(s),policyName:c})},"pre\
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\
150
151
  pareExecutionPolicy");var Qt=o(()=>{(0,yt.registerTriggers)(),(0,ft.registerTriggers)(),(0,gt.registerTriggers)(),
151
152
  (0,dt.registerTriggers)(),(0,St.tryCreateTrigger)("@ez4/aws-bucket",{"deploy:pre\
152
153
  pareExecutionPolicy":lt,"deploy:prepareLinkedService":at,"deploy:prepareResource\
153
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=>{
154
155
  let e=await(0,kt.getRegion)();return`${t}.s3.${e}.amazonaws.com`},"getBucketDoma\
155
- in");var bt=require("@ez4/stateful"),xt=require("@ez4/utils");var er=o((t,e,r,n)=>{let s=(0,xt.hashData)(S,e.entryId,r.entryId);return(0,bt.attachEntry)(
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)(
156
157
  t,{type:S,entryId:s,dependencies:[e.entryId,r.entryId],parameters:n})},"createBu\
157
- cketPolicy");var tr=o(t=>t.type===S,"isBucketPolicyState");var Pt=require("@ez4/stateful"),Bt=require("@ez4/utils");var rr=o((t,e,r)=>{let n=r.objectKey,s=(0,Bt.hashData)(f,e.entryId,n);return(0,Pt.attachEntry)(
158
- t,{type:f,entryId:s,dependencies:[e.entryId],parameters:r})},"createBucketObject");0&&(module.exports={BucketServiceName,BucketServiceType,ObjectServiceName,ObjectServiceType,
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,
159
160
  PolicyServiceName,PolicyServiceType,buildBucketArn,createBucket,createBucketEventFunction,
160
161
  createBucketObject,createBucketPolicy,createBucketStateId,getBucketDomain,getBucketName,
161
162
  getBucketObjectFiles,getBucketObjectPath,getBucketState,getPolicyDocument,isBucketDomain,
package/dist/main.mjs CHANGED
@@ -1,28 +1,28 @@
1
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
2
  import{registerTriggers as sr}from"@ez4/aws-function";import{registerTriggers as cr}from"@ez4/storage/library";
3
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 Ae,Logger as p}from"@ez4/aws-common";import{S3Client as Ie,
5
- ListObjectsV2Command as Le,CreateBucketCommand as qe,DeleteBucketCommand as Me,PutBucketTaggingCommand as $e,
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
6
  PutBucketCorsCommand as He,DeleteBucketCorsCommand as Ke,PutBucketLifecycleConfigurationCommand as Ue,
7
7
  DeleteBucketLifecycleCommand as Ge,PutBucketNotificationConfigurationCommand as _e,
8
- ExpirationStatus as Ve,NoSuchBucket as w}from"@aws-sdk/client-s3";var i="AWS:S3/Bucket",y="aws:s3.bucket";var m=new Ie({}),I=o(async t=>{p.logFetch(i,t);try{return!(await m.send(new Le({
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
9
  Bucket:t,MaxKeys:1}))).Contents?.length}catch(e){if(!(e instanceof w))throw e;return 0}},
10
- "isBucketEmpty"),L=o(async t=>{let{bucketName:e}=t;return p.logCreate(i,e),await m.
11
- send(new qe({Bucket:e})),{bucketName:e}},"createBucket"),q=o(async t=>{p.logDelete(
12
- i,t);try{return await m.send(new Me({Bucket:t})),!0}catch(e){if(!(e instanceof w))
13
- throw e;return!1}},"deleteBucket"),M=o(async(t,e)=>{p.logTag(i,t),await m.send(new $e(
14
- {Bucket:t,Tagging:{TagSet:Ae({...e,ManagedBy:"EZ4"})}}))},"tagBucket"),$=o(async(t,e)=>{
15
- p.logUpdate(i,`${t} CORS`),await m.send(new He({Bucket:t,CORSConfiguration:{CORSRules:[
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:[
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=>{p.logDelete(i,`${t} CORS`);try{return await m.
18
+ CorsConfiguration"),H=o(async t=>{m.logDelete(i,`${t} CORS`);try{return await u.
19
19
  send(new Ke({Bucket:t})),!0}catch(e){if(!(e instanceof w))throw e;return!1}},"de\
20
- leteCorsConfiguration"),K=o(async(t,e)=>{p.logCreate(i,`${t} lifecycle`),await m.
20
+ leteCorsConfiguration"),K=o(async(t,e)=>{m.logCreate(i,`${t} lifecycle`),await u.
21
21
  send(new Ue({Bucket:t,LifecycleConfiguration:{Rules:[{ID:"ID0",Status:Ve.Enabled,
22
22
  Filter:{Prefix:"*"},Expiration:{Days:e}}]}}))},"createLifecycle"),U=o(async t=>{
23
- p.logDelete(i,`${t} lifecycle`);try{return await m.send(new Ge({Bucket:t})),!0}catch(e){
24
- if(!(e instanceof w))throw e;return!1}},"deleteLifecycle"),G=o(async(t,e)=>{p.logUpdate(
25
- i,`${t} events`);let{functionArn:r,eventsPath:n,eventsType:s}=e;await m.send(new _e(
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(
26
26
  {Bucket:t,SkipDestinationValidation:!0,NotificationConfiguration:{...r&&{LambdaFunctionConfigurations:[
27
27
  {Id:"ID0",LambdaFunctionArn:r,Events:s,...n&&{Filter:{Key:{FilterRules:[{Name:"p\
28
28
  refix",Value:n}]}}}}]}}}))},"updateEventNotifications");var V=o(()=>({equals:Je,create:W,replace:Xe,preview:Qe,update:Ye,delete:et}),"ge\
@@ -34,16 +34,16 @@ i,t.entryId,e.entryId);return W(t,r)},"replaceResource"),W=o(async(t,e)=>{let r=
34
34
  parameters,n=_(e),{bucketName:s}=await L(r);await Z(s,r,void 0),await J(s,r,void 0),
35
35
  await Q(s,r.tags,void 0);let c={eventsPath:r.eventsPath,functionArn:n};return await X(
36
36
  s,c,{}),{bucketName:s,functionArn:n}},"createResource"),Ye=o(async(t,e,r)=>{let{
37
- result:n,parameters:s}=t;if(!n)return;let c=n.bucketName,a=_(r),u=e.result?.functionArn;
37
+ result:n,parameters:s}=t;if(!n)return;let c=n.bucketName,a=_(r),p=e.result?.functionArn;
38
38
  await Z(c,s,e.parameters),await J(c,s,e.parameters),await Q(c,s.tags,e.parameters.
39
39
  tags);let k={eventsPath:s.eventsPath,functionArn:a},b={eventsPath:e.parameters.eventsPath,
40
- functionArn:u};return await X(c,k,b),{...n,functionArn:a}},"updateResource"),et=o(
41
- async t=>{let e=t.result;e&&await I(e.bucketName)&&await q(e.bucketName)},"delet\
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
42
  eResource"),Z=o(async(t,e,r)=>{if(!(e.cors&&r?.cors&&C(e.cors,r.cors))){if(e.cors)
43
43
  return $(t,e.cors);if(r?.cors)return H(t)}},"checkCorsUpdates"),J=o(async(t,e,r)=>{
44
44
  if(e.autoExpireDays!==r?.autoExpireDays){if(e.autoExpireDays)return K(t,e.autoExpireDays);
45
45
  if(r?.autoExpireDays)return U(t)}},"checkLifecycleUpdates"),Q=o(async(t,e,r)=>{let n=e??
46
- {};!C(n,r??{})&&await M(t,n)},"checkTagUpdates"),X=o(async(t,e,r)=>{!C(e,r)&&await G(
46
+ {};!C(n,r??{})&&await q(t,n)},"checkTagUpdates"),X=o(async(t,e,r)=>{!C(e,r)&&await G(
47
47
  t,{eventsType:["s3:ObjectCreated:*","s3:ObjectRemoved:*"],...e})},"checkEventUpd\
48
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
49
  toKebabCase as nt}from"@ez4/utils";var v=class extends Error{static{o(this,"BucketNotFoundError")}constructor(e){super(
@@ -63,15 +63,15 @@ if(e.result)throw new mt(S,t.entryId,e.entryId);return ae(t,r)},"replaceResource
63
63
  ae=o(async(t,e)=>{let r=t.parameters,n=E(S,"policy",e),s=await r.getRole(e);return await ne(
64
64
  {bucketName:n,role:s}),{bucketName:n}},"createResource"),gt=o(async()=>{},"updat\
65
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 At}from"@ez4/aws-common";import{stat as Rt}from"node:fs/promises";import{ReplaceResourceError as Ct}from"@ez4/aws-common";
67
- import{deepCompare as ht,deepEqual as jt}from"@ez4/utils";import{createReadStream as kt}from"node:fs";import{S3Client as bt,PutObjectCommand as xt,
68
- PutObjectTaggingCommand as Pt,DeleteObjectCommand as Bt,NoSuchBucket as wt}from"@aws-sdk/client-s3";
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
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
70
  bjectPath"),ao=o(t=>t.getDependencies(f).map(({result:r,parameters:n})=>({lastModified:r?.
71
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 xt({Bucket:t,Key:r,Body:kt(n),
72
+ t,r));let s=Et.getType(n);return await j.send(new Pt({Bucket:t,Key:r,Body:kt(n),
73
73
  ...s&&{ContentType:s}})),{objectKey:r}},"putObject"),pe=o(async(t,e,r)=>{h.logTag(
74
- d,R(t,e)),await j.send(new Pt({Bucket:t,Key:e,Tagging:{TagSet:vt({...r,ManagedBy:"\
74
+ d,R(t,e)),await j.send(new xt({Bucket:t,Key:e,Tagging:{TagSet:vt({...r,ManagedBy:"\
75
75
  EZ4"})}}))},"tagObject"),me=o(async(t,e)=>{h.logDelete(d,R(t,e));try{return await j.
76
76
  send(new Bt({Bucket:t,Key:e})),!0}catch(r){if(!(r instanceof wt))throw r;return!1}},
77
77
  "deleteObject");var ue=o(()=>({equals:Ot,create:le,replace:Nt,preview:Tt,update:Dt,delete:zt}),"\
@@ -91,44 +91,45 @@ getTime()},"getLastModifiedTime"),Ft=o(async(t,e,r)=>{let n=await T(e.filePath);
91
91
  if(n<=t.lastModified&&e.filePath===r.filePath)return t;let{bucketName:s}=t,{objectKey:c}=r;
92
92
  return await O(s,{...e,objectKey:c}),{lastModified:n,bucketName:s}},"checkObject\
93
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(()=>{At(f,ue())},"registerObjectProvider");import{isBucketService as F}from"@ez4/storage/library";import{attachEntry as Lt,linkEntryDependency as qt}from"@ez4/stateful";import{createPermission as Mt}from"@ez4/aws-function";import{createPolicyDocument as It}from"@ez4/aws-identity";var ge=o(t=>`arn:aws:s3:::${t}`,"buildBucketArn"),de=o(t=>It([{resourceIds:[`arn\
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\
95
95
  :aws:s3:::${t}-*`,`arn:aws:s3:::${t}-*/*`],permissions:["s3:ListBucket","s3:PutO\
96
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&&(Mt(t,c,e,{fromService:r.bucketName,getPermission:o(()=>({
98
- principal:"s3.amazonaws.com",sourceArn:ge(n)}),"getPermission")}),qt(t,c.entryId,
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
99
  e.entryId)),c},"createBucket");import{getFunctionState as Vt,tryGetFunctionState as Wt}from"@ez4/aws-function";
100
100
  import{linkServiceContext as Zt}from"@ez4/project/library";import{isRoleState as Be}from"@ez4/aws-identity";
101
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
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
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}=n;return Gt(t,e,r,{handlerName:"s3EntryPoint",
105
- sourceFile:s.sourceFile,functionName:n.functionName,description:n.description,variables:n.
106
- variables,timeout:n.timeout,memory:n.memory,debug:n.debug,tags:n.tags,getFunctionFiles:o(
107
- ()=>[s.sourceFile,s.dependencies],"getFunctionFiles"),getFunctionBundle:o(c=>ke(
108
- n,[...c.getDependencies(),...c.getConnections()]),"getFunctionBundle"),getFunctionHash:o(
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(
109
110
  ()=>{},"getFunctionHash")})},"createBucketEventFunction");import{getServiceName as N}from"@ez4/project/library";import{getRandomName as _t}from"@ez4/aws-common";
110
- import{toKebabCase as D}from"@ez4/utils";var xe=o(async(t,e)=>{if(t.globalName)return N(t.globalName,e);let r=N(t,e),n=await _t(
111
+ 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(
111
112
  16);return`${r.substring(0,46)}-${n}`},"getBucketName"),z=o((t,e)=>`${D(t.name)}\
112
- -${D(e)}`,"getInternalName"),Pe=o((t,e,r)=>`${N(t,r)}-${D(e)}`,"getFunctionName");var x=class extends Error{static{o(this,"RoleMissingError")}constructor(){super(
113
- "Execution role for S3 is missing.")}};var P;(n=>(n.LogRetention=90,n.Timeout=90,n.Memory=192))(P||={});var we=o((t,e,r,n)=>{if(!e.events)return;if(!n.role||!Be(n.role))throw new x;let{
114
- handler:s,listener:c,logRetention:a,timeout:u,memory:k,variables:b}=e.events,B=z(
115
- e,s.name),l=Wt(n,B,r);if(l)return l;let A=Pe(e,s.name,r),De=n.getDependencyFiles(
116
- s.file),ze=Jt(t,{retention:a??P.LogRetention,groupName:A,tags:r.tags});return l=
117
- be(t,n.role,ze,{functionName:A,description:s.description,timeout:u??P.Timeout,memory:k??
118
- P.Memory,context:e.context,debug:r.debug,tags:r.tags,handler:{sourceFile:s.file,
119
- functionName:s.name,module:s.module,dependencies:De},listener:c&&{functionName:c.
120
- name,sourceFile:c.file,module:c.module},variables:{...r.variables,...e.variables,
121
- ...b}}),n.setServiceState(l,B,r),l},"prepareEvents"),ve=o((t,e,r,n)=>{if(!e.events)
122
- return;if(!n.role||!Be(n.role))throw new x;let{handler:s}=e.events,c=z(e,s.name),
123
- a=Vt(n,c,r);Zt(t,a.entryId,e.context)},"connectEvents");import{readdir as Qt}from"node:fs/promises";import{join as Ee,relative as Re}from"node:path";
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";
124
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,
125
- recursive:!0});for(let a of c){if(!a.isFile())continue;let u=Ee(a.parentPath,a.name);
126
- Xt(t,e,{objectKey:Re(s,u),filePath:Re(n,u)})}},"prepareLocalContent");var he=o((t,e,r)=>{let n=te(t,e.name,r),s=n.entryId;return{connectionIds:[s],dependencyIds:[
127
- s],constructor:`make('${n.parameters.bucketName}')`,from:"@ez4/aws-bucket/client",
128
- module:"Client"}},"prepareLinkedClient");var je=o(t=>{let{service:e,options:r,context:n}=t;return F(e)?he(n,e,r):null},"p\
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:"\
128
+ @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\
129
130
  repareLinkedServices"),Oe=o(async t=>{let{state:e,service:r,options:n,context:s}=t;
130
- if(!F(r))return!1;let{localPath:c,autoExpireDays:a,events:u,cors:k}=r,b=await xe(
131
- r,n),B=we(e,r,n,s),l=Se(e,B,{eventsPath:u?.path,tags:n.tags,bucketName:b,autoExpireDays:a,
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,
132
133
  localPath:c,cors:k});return s.setServiceState(l,r,n),c&&await Ce(e,l,c),!0},"pre\
133
134
  pareBucketServices"),Te=o(t=>{let{state:e,service:r,options:n,context:s}=t;F(r)&&
134
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";
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.35.0",
4
+ "version": "0.37.0",
5
5
  "author": "Silas B.",
6
6
  "license": "MIT",
7
7
  "type": "module",
@@ -53,14 +53,14 @@
53
53
  "dependencies": {
54
54
  "@aws-sdk/client-s3": "^3.913.0",
55
55
  "@aws-sdk/s3-request-presigner": "^3.913.0",
56
- "@ez4/aws-common": "^0.35.0",
57
- "@ez4/aws-function": "^0.35.0",
58
- "@ez4/aws-identity": "^0.35.0",
59
- "@ez4/aws-logs": "^0.35.0",
60
- "@ez4/project": "^0.35.0",
61
- "@ez4/stateful": "^0.35.0",
62
- "@ez4/storage": "^0.35.0",
63
- "@ez4/utils": "^0.35.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",
64
64
  "mime": "^3.0.0"
65
65
  }
66
66
  }