@ez4/aws-bucket 0.19.0 → 0.20.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,12 +1,15 @@
1
1
  import type { FunctionParameters } from '@ez4/aws-function';
2
2
  import type { ExtraSource } from '@ez4/project/library';
3
- export type BucketEventEntryPoint = {
3
+ export type BucketEventFunction = {
4
4
  functionName: string;
5
5
  sourceFile: string;
6
6
  };
7
- export type BucketEventFunctionParameters = Omit<FunctionParameters, 'getFunctionBundle' | 'sourceFile' | 'handlerName'> & {
7
+ export type BucketEventEntryPoint = BucketEventFunction & {
8
+ dependencies: string[];
9
+ };
10
+ export type BucketEventFunctionParameters = Omit<FunctionParameters, 'getFunctionBundle' | 'getFunctionFiles' | 'sourceFile' | 'handlerName'> & {
8
11
  handler: BucketEventEntryPoint;
9
- listener?: BucketEventEntryPoint;
12
+ listener?: BucketEventFunction;
10
13
  extras?: Record<string, ExtraSource>;
11
14
  debug?: boolean;
12
15
  };
package/dist/main.cjs CHANGED
@@ -2,13 +2,13 @@
2
2
  typeof e=="object"||typeof e=="function")for(let n of Rt(e))!jt.call(t,n)&&n!==r&&
3
3
  O(t,n,{get:()=>e[n],enumerable:!(o=Et(e,n))||o.enumerable});return t};var Ot=(t,e,r)=>(r=t!=null?vt(Ct(t)):{},ee(e||!t||!t.__esModule?O(r,"default",{value:t,
4
4
  enumerable:!0}):r,t)),Tt=t=>ee(O({},"__esModule",{value:!0}),t);var rr={};ht(rr,{BucketServiceName:()=>i,BucketServiceType:()=>u,ObjectServiceName:()=>k,
5
- ObjectServiceType:()=>y,PolicyServiceName:()=>x,PolicyServiceType:()=>d,buildBucketArn:()=>V,
5
+ ObjectServiceType:()=>y,PolicyServiceName:()=>b,PolicyServiceType:()=>d,buildBucketArn:()=>V,
6
6
  createBucket:()=>Z,createBucketEventFunction:()=>J,createBucketObject:()=>tr,createBucketPolicy:()=>Yt,
7
7
  createBucketStateId:()=>$,getBucketDomain:()=>Xt,getBucketName:()=>E,getBucketObjectFiles:()=>Kt,
8
8
  getBucketObjectPath:()=>R,getBucketState:()=>H,getPolicyDocument:()=>W,isBucketDomain:()=>Qt,
9
- isBucketObjectState:()=>Ht,isBucketPolicyState:()=>er,isBucketState:()=>be,registerTriggers:()=>Jt});
9
+ isBucketObjectState:()=>Ht,isBucketPolicyState:()=>er,isBucketState:()=>xe,registerTriggers:()=>Jt});
10
10
  module.exports=Tt(rr);var yt=require("@ez4/aws-common"),ft=require("@ez4/aws-identity"),gt=require("@ez4/aws-function"),
11
- dt=require("@ez4/storage/library"),St=require("@ez4/project/library");var Se=require("@ez4/aws-common");var me=require("@ez4/aws-common"),M=require("@ez4/aws-function"),b=require("@ez4/utils");var p=require("@ez4/aws-common"),c=require("@aws-sdk/client-s3");var i="AWS:S3/Bucket",u="aws:s3.bucket";var l=new c.S3Client({}),te=async t=>{p.Logger.logFetch(i,t);try{return!(await l.
11
+ dt=require("@ez4/storage/library"),St=require("@ez4/project/library");var Se=require("@ez4/aws-common");var me=require("@ez4/aws-common"),M=require("@ez4/aws-function"),x=require("@ez4/utils");var p=require("@ez4/aws-common"),c=require("@aws-sdk/client-s3");var i="AWS:S3/Bucket",u="aws:s3.bucket";var l=new c.S3Client({}),te=async t=>{p.Logger.logFetch(i,t);try{return!(await l.
12
12
  send(new c.ListObjectsV2Command({Bucket:t,MaxKeys:1}))).Contents?.length}catch(e){
13
13
  if(!(e instanceof c.NoSuchBucket))throw e;return 0}},re=async t=>{let{bucketName:e}=t;
14
14
  return p.Logger.logCreate(i,e),await l.send(new c.CreateBucketCommand({Bucket:e})),
@@ -30,40 +30,40 @@ p.Logger.logUpdate(i,`${t} event notifications`);let{functionArn:r,eventsPath:o,
30
30
  eventsType:n}=e;await l.send(new c.PutBucketNotificationConfigurationCommand({Bucket:t,
31
31
  SkipDestinationValidation:!0,NotificationConfiguration:{...r&&{LambdaFunctionConfigurations:[
32
32
  {Id:"ID0",LambdaFunctionArn:r,Events:n,...o&&{Filter:{Key:{FilterRules:[{Name:"p\
33
- refix",Value:o}]}}}}]}}}))};var ue=()=>({equals:Nt,create:le,replace:zt,preview:Dt,update:At,delete:It}),Nt=(t,e)=>!!t.
33
+ refix",Value:o}]}}}}]}}}))};var ue=()=>({equals:Nt,create:le,replace:zt,preview:Dt,update:Ft,delete:At}),Nt=(t,e)=>!!t.
34
34
  result&&t.result.bucketName===e.result?.bucketName,Dt=async(t,e)=>{let r={...t.parameters,
35
- dependencies:t.dependencies},o={...e.parameters,dependencies:e.dependencies},n=(0,b.deepCompare)(
35
+ dependencies:t.dependencies},o={...e.parameters,dependencies:e.dependencies},n=(0,x.deepCompare)(
36
36
  r,o);if(n.counts)return{...n,name:r.bucketName}},zt=async(t,e,r)=>{if(e.result)throw new me.ReplaceResourceError(
37
37
  i,t.entryId,e.entryId);return le(t,r)},le=async(t,e)=>{let r=t.parameters,o=(0,M.tryGetFunctionArn)(
38
38
  e),{bucketName:n}=await re(r);await ye(n,r,void 0),await fe(n,r,void 0),await ge(
39
39
  n,r.tags,void 0);let s={eventsPath:r.eventsPath,functionArn:o};return await de(n,
40
- s,{}),{bucketName:n,functionArn:o}},At=async(t,e,r)=>{let{result:o,parameters:n}=t;
40
+ s,{}),{bucketName:n,functionArn:o}},Ft=async(t,e,r)=>{let{result:o,parameters:n}=t;
41
41
  if(!o)return;let s=o.bucketName,a=(0,M.tryGetFunctionArn)(r),f=e.result?.functionArn;
42
42
  await ye(s,n,e.parameters),await fe(s,n,e.parameters),await ge(s,n.tags,e.parameters.
43
43
  tags);let w={eventsPath:n.eventsPath,functionArn:a},v={eventsPath:e.parameters.eventsPath,
44
- functionArn:f};return await de(s,w,v),{...o,functionArn:a}},It=async t=>{let e=t.
44
+ functionArn:f};return await de(s,w,v),{...o,functionArn:a}},At=async t=>{let e=t.
45
45
  result;e&&await te(e.bucketName)&&await oe(e.bucketName)},ye=async(t,e,r)=>{if(!(e.
46
- cors&&r?.cors&&(0,b.deepEqual)(e.cors,r.cors))){if(e.cors)return se(t,e.cors);if(r?.
46
+ cors&&r?.cors&&(0,x.deepEqual)(e.cors,r.cors))){if(e.cors)return se(t,e.cors);if(r?.
47
47
  cors)return ce(t)}},fe=async(t,e,r)=>{if(e.autoExpireDays!==r?.autoExpireDays){if(e.
48
48
  autoExpireDays)return ae(t,e.autoExpireDays);if(r?.autoExpireDays)return ie(t)}},
49
- ge=async(t,e,r)=>{let o=e??{};!(0,b.deepEqual)(o,r??{})&&await ne(t,o)},de=async(t,e,r)=>{
50
- !(0,b.deepEqual)(e,r)&&await pe(t,{eventsType:["s3:ObjectCreated:*","s3:ObjectRe\
51
- moved:*"],...e})};var ke=()=>{(0,Se.registerProvider)(u,ue())};var je=require("@ez4/aws-common");var ve=require("@ez4/aws-common"),Ee=require("@ez4/utils");var xe=require("@ez4/aws-common"),N=require("@ez4/utils");var T=class extends Error{constructor(e){super(`Bucket service ${e} wasn't found\
52
- .`)}};var $=t=>(0,N.hashData)(u,(0,N.toKebabCase)(t)),be=t=>t.type===u,H=(t,e,r)=>{let o=t.
53
- getServiceState(e,r);if(!be(o))throw new T(e);return o},E=(t,e,r)=>{let o=r.getDependencies(
54
- u)[0]?.result;if(!o?.bucketName)throw new xe.IncompleteResourceError(t,e,"bucket\
55
- Name");return o.bucketName};var S=require("@aws-sdk/client-s3"),K=require("@ez4/aws-common");var x="AWS:S3/Policy",d="aws:s3.policy";var Pe=new S.S3Client({}),Be=async t=>{let{bucketName:e,role:r}=t;return K.Logger.
56
- logCreate(x,e),await Pe.send(new S.PutBucketPolicyCommand({Bucket:e,Policy:JSON.
57
- stringify(r)})),{bucketName:e}},we=async t=>{K.Logger.logDelete(x,t);try{return await Pe.
49
+ ge=async(t,e,r)=>{let o=e??{};!(0,x.deepEqual)(o,r??{})&&await ne(t,o)},de=async(t,e,r)=>{
50
+ !(0,x.deepEqual)(e,r)&&await pe(t,{eventsType:["s3:ObjectCreated:*","s3:ObjectRe\
51
+ moved:*"],...e})};var ke=()=>{(0,Se.registerProvider)(u,ue())};var je=require("@ez4/aws-common");var ve=require("@ez4/aws-common"),Ee=require("@ez4/utils");var be=require("@ez4/aws-common"),N=require("@ez4/utils");var T=class extends Error{constructor(e){super(`Bucket service ${e} wasn't found\
52
+ .`)}};var $=t=>(0,N.hashData)(u,(0,N.toKebabCase)(t)),xe=t=>t.type===u,H=(t,e,r)=>{let o=t.
53
+ getServiceState(e,r);if(!xe(o))throw new T(e);return o},E=(t,e,r)=>{let o=r.getDependencies(
54
+ u)[0]?.result;if(!o?.bucketName)throw new be.IncompleteResourceError(t,e,"bucket\
55
+ Name");return o.bucketName};var S=require("@aws-sdk/client-s3"),K=require("@ez4/aws-common");var b="AWS:S3/Policy",d="aws:s3.policy";var Pe=new S.S3Client({}),Be=async t=>{let{bucketName:e,role:r}=t;return K.Logger.
56
+ logCreate(b,e),await Pe.send(new S.PutBucketPolicyCommand({Bucket:e,Policy:JSON.
57
+ stringify(r)})),{bucketName:e}},we=async t=>{K.Logger.logDelete(b,t);try{return await Pe.
58
58
  send(new S.DeleteBucketPolicyCommand({Bucket:t})),!0}catch(e){if(!(e instanceof S.NoSuchBucket))
59
- throw e;return!1}};var Re=()=>({equals:Ft,create:Ce,replace:qt,preview:Lt,update:Mt,delete:$t}),Ft=(t,e)=>!!t.
59
+ throw e;return!1}};var Re=()=>({equals:It,create:Ce,replace:qt,preview:Lt,update:Mt,delete:$t}),It=(t,e)=>!!t.
60
60
  result&&t.result.bucketName===e.result?.bucketName,Lt=async(t,e)=>{let r={...t.parameters,
61
61
  dependencies:t.dependencies},o={...e.parameters,dependencies:e.dependencies},n=(0,Ee.deepCompare)(
62
62
  r,o,{exclude:{getRole:!0}});if(n.counts)return{...n,name:r.fromService}},qt=async(t,e,r)=>{
63
- if(e.result)throw new ve.ReplaceResourceError(x,t.entryId,e.entryId);return Ce(t,
64
- r)},Ce=async(t,e)=>{let r=t.parameters,o=E(x,"policy",e),n=await r.getRole(e);return await Be(
63
+ if(e.result)throw new ve.ReplaceResourceError(b,t.entryId,e.entryId);return Ce(t,
64
+ r)},Ce=async(t,e)=>{let r=t.parameters,o=E(b,"policy",e),n=await r.getRole(e);return await Be(
65
65
  {bucketName:o,role:n}),{bucketName:o}},Mt=async()=>{},$t=async t=>{let e=t.result;
66
- e&&await we(e.bucketName)};var he=()=>{(0,je.registerProvider)(d,Re())};var qe=require("@ez4/aws-common");var ze=require("node:fs/promises"),Ae=require("@ez4/aws-common"),D=require("@ez4/utils");var Oe=require("node:fs"),m=require("@aws-sdk/client-s3"),P=require("@ez4/aws-common"),
66
+ e&&await we(e.bucketName)};var he=()=>{(0,je.registerProvider)(d,Re())};var qe=require("@ez4/aws-common");var ze=require("node:fs/promises"),Fe=require("@ez4/aws-common"),D=require("@ez4/utils");var Oe=require("node:fs"),m=require("@aws-sdk/client-s3"),P=require("@ez4/aws-common"),
67
67
  Te=Ot(require("mime"),1);var k="AWS:S3/Object",y="aws:s3.object";var Ht=t=>t.type===y,R=(t,e)=>`${t}/${e}`,Kt=t=>t.getDependencies(y).map(({result:r,
68
68
  parameters:o})=>({lastModified:r?.lastModified,objectKey:o.objectKey}));var U=new m.S3Client({}),G=async(t,e)=>{let{objectKey:r,filePath:o}=e;P.Logger.logCreate(
69
69
  k,R(t,r));let n=Te.default.getType(o);return await U.send(new m.PutObjectCommand(
@@ -71,12 +71,12 @@ k,R(t,r));let n=Te.default.getType(o);return await U.send(new m.PutObjectCommand
71
71
  Ne=async(t,e,r)=>{P.Logger.logTag(k,R(t,e)),await U.send(new m.PutObjectTaggingCommand(
72
72
  {Bucket:t,Key:e,Tagging:{TagSet:(0,P.getTagList)({...r,ManagedBy:"EZ4"})}}))},De=async(t,e)=>{
73
73
  P.Logger.logDelete(k,R(t,e));try{return await U.send(new m.DeleteObjectCommand({
74
- Bucket:t,Key:e})),!0}catch(r){if(!(r instanceof m.NoSuchBucket))throw r;return!1}};var Ie=()=>({equals:Ut,create:Fe,replace:_t,preview:Gt,update:Vt,delete:Wt}),Ut=(t,e)=>!!t.
74
+ Bucket:t,Key:e})),!0}catch(r){if(!(r instanceof m.NoSuchBucket))throw r;return!1}};var Ae=()=>({equals:Ut,create:Ie,replace:_t,preview:Gt,update:Vt,delete:Wt}),Ut=(t,e)=>!!t.
75
75
  result&&t.result.lastModified===e.result?.lastModified,Gt=async(t,e)=>{let r=t.parameters,
76
76
  o=e.parameters,n=(0,D.deepCompare)({...r,dependencies:t.dependencies,lastModified:await _(
77
77
  r.filePath)},{...o,dependencies:e.dependencies,lastModified:t.result?.lastModified});
78
- if(n.counts)return{...n,name:r.objectKey}},_t=async(t,e,r)=>{if(e.result)throw new Ae.ReplaceResourceError(
79
- k,t.entryId,e.entryId);return Fe(t,r)},Fe=async(t,e)=>{let r=t.parameters,o=E(k,
78
+ if(n.counts)return{...n,name:r.objectKey}},_t=async(t,e,r)=>{if(e.result)throw new Fe.ReplaceResourceError(
79
+ k,t.entryId,e.entryId);return Ie(t,r)},Ie=async(t,e)=>{let r=t.parameters,o=E(k,
80
80
  "bucket",e),n=await _(r.filePath),{objectKey:s}=await G(o,r);return await Le(o,s,
81
81
  r.tags,t.parameters.tags),{lastModified:n,bucketName:o}},Vt=async(t,e)=>{let{result:r,
82
82
  parameters:o}=t;if(!r)return;let{objectKey:n,tags:s}=o,a=Zt(r,o,e.parameters);return await Le(
@@ -85,34 +85,35 @@ e&&await De(e.bucketName,r.objectKey)},_=async t=>{let{mtime:e}=await(0,ze.stat)
85
85
  t);return e.getTime()},Zt=async(t,e,r)=>{let o=await _(e.filePath);if(o<=t.lastModified&&
86
86
  e.filePath===r.filePath)return t;let{bucketName:n}=t,{objectKey:s}=r;return await G(
87
87
  n,{...e,objectKey:s}),{lastModified:o,bucketName:n}},Le=async(t,e,r,o)=>{let n=r??
88
- {};!(0,D.deepEqual)(n,o??{})&&await Ne(t,e,n)};var Me=()=>{(0,qe.registerProvider)(y,Ie())};var L=require("@ez4/storage/library");var He=require("@ez4/aws-function"),z=require("@ez4/stateful");var $e=require("@ez4/aws-identity"),V=t=>`arn:aws:s3:::${t}`,W=t=>(0,$e.createPolicyDocument)(
88
+ {};!(0,D.deepEqual)(n,o??{})&&await Ne(t,e,n)};var Me=()=>{(0,qe.registerProvider)(y,Ae())};var L=require("@ez4/storage/library");var He=require("@ez4/aws-function"),z=require("@ez4/stateful");var $e=require("@ez4/aws-identity"),V=t=>`arn:aws:s3:::${t}`,W=t=>(0,$e.createPolicyDocument)(
89
89
  [{resourceIds:[`arn:aws:s3:::${t}-*`,`arn:aws:s3:::${t}-*/*`],permissions:["s3:L\
90
90
  istBucket","s3:PutObject","s3:GetObject","s3:DeleteObject"]}]);var Z=(t,e,r)=>{let o=r.bucketName,n=$(o),s=(0,z.attachEntry)(t,{type:u,entryId:n,
91
91
  dependencies:[],parameters:r});return e&&((0,He.createPermission)(t,s,e,{fromService:r.
92
92
  bucketName,getPermission:()=>({principal:"s3.amazonaws.com",sourceArn:V(o)})}),(0,z.linkDependency)(
93
- t,s.entryId,e.entryId)),s};var F=require("@ez4/aws-function"),Xe=require("@ez4/project/library"),X=require("@ez4/aws-identity"),
93
+ t,s.entryId,e.entryId)),s};var I=require("@ez4/aws-function"),Xe=require("@ez4/project/library"),X=require("@ez4/aws-identity"),
94
94
  Ye=require("@ez4/aws-logs");var We=require("@ez4/aws-function");var Ke=require("node:path"),Ue=require("@ez4/project/library"),Ge=require("@ez4/aws-function"),
95
95
  _e=require("@ez4/aws-common"),Ve=async(t,e)=>{let{extras:r,debug:o,handler:n,listener:s}=e,
96
96
  a=(0,Ue.getDefinitionsObject)(t);return(0,_e.getFunctionBundle)(Ge.MappingServiceName,
97
97
  {templateFile:(0,Ke.join)(__dirname,"../lib/event.ts"),filePrefix:"s3",define:{...a},
98
- handler:n,listener:s,extras:r,debug:o})};var J=(t,e,r,o)=>(0,We.createFunction)(t,e,r,{handlerName:"s3EntryPoint",functionName:o.
99
- functionName,sourceFile:o.handler.sourceFile,description:o.description,variables:o.
100
- variables,timeout:o.timeout,memory:o.memory,debug:o.debug,tags:o.tags,getFunctionBundle:n=>{
101
- let s=n.getDependencies();return Ve(s,o)}});var A=require("@ez4/project/library"),Ze=require("@ez4/aws-common"),I=require("@ez4/utils"),
102
- Je=async(t,e)=>{if(t.globalName)return(0,A.getServiceName)(t.globalName,e);let r=(0,A.getServiceName)(
103
- t,e),o=await(0,Ze.getRandomName)(16);return`${r.substring(0,46)}-${o}`},Q=(t,e)=>`${(0,I.toKebabCase)(
104
- t.name)}-${(0,I.toKebabCase)(e)}`,Qe=(t,e,r)=>`${(0,A.getServiceName)(t,r)}-${(0,I.toKebabCase)(
98
+ handler:n,listener:s,extras:r,debug:o})};var J=(t,e,r,o)=>{let{handler:n}=o;return(0,We.createFunction)(t,e,r,{handlerName:"\
99
+ s3EntryPoint",sourceFile:n.sourceFile,functionName:o.functionName,description:o.
100
+ description,variables:o.variables,timeout:o.timeout,memory:o.memory,debug:o.debug,
101
+ tags:o.tags,getFunctionBundle:s=>{let a=s.getDependencies();return Ve(a,o)},getFunctionFiles:()=>[
102
+ n.sourceFile,n.dependencies]})};var F=require("@ez4/project/library"),Ze=require("@ez4/aws-common"),A=require("@ez4/utils"),
103
+ Je=async(t,e)=>{if(t.globalName)return(0,F.getServiceName)(t.globalName,e);let r=(0,F.getServiceName)(
104
+ t,e),o=await(0,Ze.getRandomName)(16);return`${r.substring(0,46)}-${o}`},Q=(t,e)=>`${(0,A.toKebabCase)(
105
+ t.name)}-${(0,A.toKebabCase)(e)}`,Qe=(t,e,r)=>`${(0,F.getServiceName)(t,r)}-${(0,A.toKebabCase)(
105
106
  e)}`;var C=class extends Error{constructor(){super("Execution role for S3 is missing.")}};var j;(o=>(o.LogRetention=90,o.Timeout=90,o.Memory=192))(j||={});var et=(t,e,r,o)=>{if(!e.events)return;if(!o.role||!(0,X.isRoleState)(o.role))throw new C;
106
- let{handler:n,listener:s,retention:a,timeout:f,memory:w,variables:v}=e.events,h=Q(
107
- e,n.name),g=(0,F.tryGetFunctionState)(o,h,r);if(g)return g;let Y=Qe(e,n.name,r),
108
- wt=(0,Ye.createLogGroup)(t,{retention:a??j.LogRetention,groupName:Y,tags:r.tags});
107
+ let{handler:n,listener:s,logRetention:a,timeout:f,memory:w,variables:v}=e.events,
108
+ h=Q(e,n.name),g=(0,I.tryGetFunctionState)(o,h,r);if(g)return g;let Y=Qe(e,n.name,
109
+ r),wt=(0,Ye.createLogGroup)(t,{retention:a??j.LogRetention,groupName:Y,tags:r.tags});
109
110
  return g=J(t,o.role,wt,{functionName:Y,description:n.description,timeout:f??j.Timeout,
110
111
  memory:w??j.Memory,extras:e.extras,debug:r.debug,tags:r.tags,variables:{...r.variables,
111
- ...e.variables,...v},handler:{functionName:n.name,sourceFile:n.file},...s&&{listener:{
112
- functionName:s.name,sourceFile:s.file}}}),o.setServiceState(g,h,r),g},tt=(t,e,r,o)=>{
113
- if(!e.extras||!e.events)return;if(!o.role||!(0,X.isRoleState)(o.role))throw new C;
114
- let{handler:n}=e.events,s=Q(e,n.name),a=(0,F.getFunctionState)(o,s,r);(0,Xe.linkServiceExtras)(
115
- t,a.entryId,e.extras)};var rt=require("node:fs/promises"),B=require("node:path"),ot=require("@ez4/aws-bucket"),
112
+ ...e.variables,...v},handler:{dependencies:o.getDependencies(n.file),functionName:n.
113
+ name,sourceFile:n.file},...s&&{listener:{functionName:s.name,sourceFile:s.file}}}),
114
+ o.setServiceState(g,h,r),g},tt=(t,e,r,o)=>{if(!e.extras||!e.events)return;if(!o.
115
+ role||!(0,X.isRoleState)(o.role))throw new C;let{handler:n}=e.events,s=Q(e,n.name),
116
+ a=(0,I.getFunctionState)(o,s,r);(0,Xe.linkServiceExtras)(t,a.entryId,e.extras)};var rt=require("node:fs/promises"),B=require("node:path"),ot=require("@ez4/aws-bucket"),
116
117
  nt=async(t,e,r)=>{let o=process.cwd(),n=(0,B.join)(o,r),s=await(0,rt.readdir)(n,
117
118
  {withFileTypes:!0,recursive:!0});for(let a of s){if(!a.isFile())continue;let f=(0,B.join)(
118
119
  a.parentPath,a.name);(0,ot.createBucketObject)(t,e,{objectKey:(0,B.relative)(n,f),
@@ -128,7 +129,7 @@ e,s)??(0,q.createPolicy)(e,{tags:o.tags,policyDocument:W(n),policyName:s})};var
128
129
  (0,dt.registerTriggers)(),(0,St.createTrigger)("@ez4/aws-bucket",{"deploy:prepar\
129
130
  eExecutionPolicy":ut,"deploy:prepareLinkedService":ct,"deploy:prepareResources":at,
130
131
  "deploy:connectResources":it}),ke(),he(),Me(),lt=!0)};var kt=require("@ez4/aws-identity"),Qt=t=>/(.+)\.s3\.(.+)\.amazonaws\.com/i.test(
131
- t),Xt=async t=>{let e=await(0,kt.getRegion)();return`${t}.s3.${e}.amazonaws.com`};var xt=require("@ez4/stateful"),bt=require("@ez4/utils");var Yt=(t,e,r,o)=>{let n=(0,bt.hashData)(d,e.entryId,r.entryId);return(0,xt.attachEntry)(
132
+ t),Xt=async t=>{let e=await(0,kt.getRegion)();return`${t}.s3.${e}.amazonaws.com`};var bt=require("@ez4/stateful"),xt=require("@ez4/utils");var Yt=(t,e,r,o)=>{let n=(0,xt.hashData)(d,e.entryId,r.entryId);return(0,bt.attachEntry)(
132
133
  t,{type:d,entryId:n,dependencies:[e.entryId,r.entryId],parameters:o})};var er=t=>t.type===d;var Pt=require("@ez4/stateful"),Bt=require("@ez4/utils");var tr=(t,e,r)=>{let o=r.objectKey,n=(0,Bt.hashData)(y,e.entryId,o);return(0,Pt.attachEntry)(
133
134
  t,{type:y,entryId:n,dependencies:[e.entryId],parameters:r})};0&&(module.exports={BucketServiceName,BucketServiceType,ObjectServiceName,ObjectServiceType,
134
135
  PolicyServiceName,PolicyServiceType,buildBucketArn,createBucket,createBucketEventFunction,
package/dist/main.mjs CHANGED
@@ -1,13 +1,13 @@
1
1
  import{registerTriggers as tr}from"@ez4/aws-common";import{registerTriggers as rr}from"@ez4/aws-identity";
2
2
  import{registerTriggers as or}from"@ez4/aws-function";import{registerTriggers as nr}from"@ez4/storage/library";
3
3
  import{createTrigger as sr}from"@ez4/project/library";import{registerProvider as Ye}from"@ez4/aws-common";import{ReplaceResourceError as _e}from"@ez4/aws-common";import{tryGetFunctionArn as G}from"@ez4/aws-function";
4
- import{deepCompare as Ve,deepEqual as R}from"@ez4/utils";import{getTagList as ze,Logger as i}from"@ez4/aws-common";import{S3Client as Ae,
5
- ListObjectsV2Command as Ie,CreateBucketCommand as Fe,DeleteBucketCommand as Le,PutBucketTaggingCommand as qe,
4
+ import{deepCompare as Ve,deepEqual as R}from"@ez4/utils";import{getTagList as ze,Logger as i}from"@ez4/aws-common";import{S3Client as Fe,
5
+ ListObjectsV2Command as Ae,CreateBucketCommand as Ie,DeleteBucketCommand as Le,PutBucketTaggingCommand as qe,
6
6
  PutBucketCorsCommand as Me,DeleteBucketCorsCommand as $e,PutBucketLifecycleConfigurationCommand as He,
7
7
  DeleteBucketLifecycleCommand as Ke,PutBucketNotificationConfigurationCommand as Ue,
8
- ExpirationStatus as Ge,NoSuchBucket as B}from"@aws-sdk/client-s3";var a="AWS:S3/Bucket",l="aws:s3.bucket";var p=new Ae({}),I=async t=>{i.logFetch(a,t);try{return!(await p.send(new Ie({Bucket:t,
8
+ ExpirationStatus as Ge,NoSuchBucket as B}from"@aws-sdk/client-s3";var a="AWS:S3/Bucket",l="aws:s3.bucket";var p=new Fe({}),A=async t=>{i.logFetch(a,t);try{return!(await p.send(new Ae({Bucket:t,
9
9
  MaxKeys:1}))).Contents?.length}catch(e){if(!(e instanceof B))throw e;return 0}},
10
- F=async t=>{let{bucketName:e}=t;return i.logCreate(a,e),await p.send(new Fe({Bucket:e})),
10
+ I=async t=>{let{bucketName:e}=t;return i.logCreate(a,e),await p.send(new Ie({Bucket:e})),
11
11
  {bucketName:e}},L=async t=>{i.logDelete(a,t);try{return await p.send(new Le({Bucket:t})),
12
12
  !0}catch(e){if(!(e instanceof B))throw e;return!1}},q=async(t,e)=>{i.logTag(a,t),
13
13
  await p.send(new qe({Bucket:t,Tagging:{TagSet:ze({...e,ManagedBy:"EZ4"})}}))},M=async(t,e)=>{
@@ -27,13 +27,13 @@ result&&t.result.bucketName===e.result?.bucketName,Ze=async(t,e)=>{let r={...t.p
27
27
  dependencies:t.dependencies},o={...e.parameters,dependencies:e.dependencies},n=Ve(
28
28
  r,o);if(n.counts)return{...n,name:r.bucketName}},Je=async(t,e,r)=>{if(e.result)throw new _e(
29
29
  a,t.entryId,e.entryId);return V(t,r)},V=async(t,e)=>{let r=t.parameters,o=G(e),{
30
- bucketName:n}=await F(r);await W(n,r,void 0),await Z(n,r,void 0),await J(n,r.tags,
30
+ bucketName:n}=await I(r);await W(n,r,void 0),await Z(n,r,void 0),await J(n,r.tags,
31
31
  void 0);let s={eventsPath:r.eventsPath,functionArn:o};return await Q(n,s,{}),{bucketName:n,
32
32
  functionArn:o}},Qe=async(t,e,r)=>{let{result:o,parameters:n}=t;if(!o)return;let s=o.
33
33
  bucketName,c=G(r),m=e.result?.functionArn;await W(s,n,e.parameters),await Z(s,n,
34
34
  e.parameters),await J(s,n.tags,e.parameters.tags);let S={eventsPath:n.eventsPath,
35
35
  functionArn:c},k={eventsPath:e.parameters.eventsPath,functionArn:m};return await Q(
36
- s,S,k),{...o,functionArn:c}},Xe=async t=>{let e=t.result;e&&await I(e.bucketName)&&
36
+ s,S,k),{...o,functionArn:c}},Xe=async t=>{let e=t.result;e&&await A(e.bucketName)&&
37
37
  await L(e.bucketName)},W=async(t,e,r)=>{if(!(e.cors&&r?.cors&&R(e.cors,r.cors))){
38
38
  if(e.cors)return M(t,e.cors);if(r?.cors)return $(t)}},Z=async(t,e,r)=>{if(e.autoExpireDays!==
39
39
  r?.autoExpireDays){if(e.autoExpireDays)return H(t,e.autoExpireDays);if(r?.autoExpireDays)
@@ -55,13 +55,13 @@ let r=t.parameters,o=v(d,"policy",e),n=await r.getRole(e);return await oe({bucke
55
55
  role:n}),{bucketName:o}},yt=async()=>{},ft=async t=>{let e=t.result;e&&await ne(
56
56
  e.bucketName)};var ae=()=>{gt(f,se())};import{registerProvider as zt}from"@ez4/aws-common";import{stat as vt}from"node:fs/promises";import{ReplaceResourceError as Et}from"@ez4/aws-common";
57
57
  import{deepCompare as Rt,deepEqual as Ct}from"@ez4/utils";import{createReadStream as dt}from"node:fs";import{S3Client as St,PutObjectCommand as kt,
58
- PutObjectTaggingCommand as xt,DeleteObjectCommand as bt,NoSuchBucket as Pt}from"@aws-sdk/client-s3";
58
+ PutObjectTaggingCommand as bt,DeleteObjectCommand as xt,NoSuchBucket as Pt}from"@aws-sdk/client-s3";
59
59
  import{getTagList as Bt,Logger as C}from"@ez4/aws-common";import wt from"mime";var g="AWS:S3/Object",y="aws:s3.object";var Qr=t=>t.type===y,E=(t,e)=>`${t}/${e}`,Xr=t=>t.getDependencies(y).map(({result:r,
60
60
  parameters:o})=>({lastModified:r?.lastModified,objectKey:o.objectKey}));var j=new St({}),h=async(t,e)=>{let{objectKey:r,filePath:o}=e;C.logCreate(g,E(t,
61
61
  r));let n=wt.getType(o);return await j.send(new kt({Bucket:t,Key:r,Body:dt(o),...n&&
62
62
  {ContentType:n}})),{objectKey:r}},ie=async(t,e,r)=>{C.logTag(g,E(t,e)),await j.send(
63
- new xt({Bucket:t,Key:e,Tagging:{TagSet:Bt({...r,ManagedBy:"EZ4"})}}))},pe=async(t,e)=>{
64
- C.logDelete(g,E(t,e));try{return await j.send(new bt({Bucket:t,Key:e})),!0}catch(r){
63
+ new bt({Bucket:t,Key:e,Tagging:{TagSet:Bt({...r,ManagedBy:"EZ4"})}}))},pe=async(t,e)=>{
64
+ C.logDelete(g,E(t,e));try{return await j.send(new xt({Bucket:t,Key:e})),!0}catch(r){
65
65
  if(!(r instanceof Pt))throw r;return!1}};var me=()=>({equals:jt,create:ue,replace:Ot,preview:ht,update:Tt,delete:Nt}),jt=(t,e)=>!!t.
66
66
  result&&t.result.lastModified===e.result?.lastModified,ht=async(t,e)=>{let r=t.parameters,
67
67
  o=e.parameters,n=Rt({...r,dependencies:t.dependencies,lastModified:await O(r.filePath)},
@@ -76,38 +76,39 @@ await pe(e.bucketName,r.objectKey)},O=async t=>{let{mtime:e}=await vt(t);return
76
76
  getTime()},Dt=async(t,e,r)=>{let o=await O(e.filePath);if(o<=t.lastModified&&e.filePath===
77
77
  r.filePath)return t;let{bucketName:n}=t,{objectKey:s}=r;return await h(n,{...e,objectKey:s}),
78
78
  {lastModified:o,bucketName:n}},le=async(t,e,r,o)=>{let n=r??{};!Ct(n,o??{})&&await ie(
79
- t,e,n)};var ye=()=>{zt(y,me())};import{isBucketService as z}from"@ez4/storage/library";import{createPermission as It}from"@ez4/aws-function";import{attachEntry as Ft,linkDependency as Lt}from"@ez4/stateful";import{createPolicyDocument as At}from"@ez4/aws-identity";var fe=t=>`arn:aws:s3:\
80
- ::${t}`,ge=t=>At([{resourceIds:[`arn:aws:s3:::${t}-*`,`arn:aws:s3:::${t}-*/*`],permissions:[
81
- "s3:ListBucket","s3:PutObject","s3:GetObject","s3:DeleteObject"]}]);var de=(t,e,r)=>{let o=r.bucketName,n=Y(o),s=Ft(t,{type:l,entryId:n,dependencies:[],
82
- parameters:r});return e&&(It(t,s,e,{fromService:r.bucketName,getPermission:()=>({
79
+ t,e,n)};var ye=()=>{zt(y,me())};import{isBucketService as z}from"@ez4/storage/library";import{createPermission as At}from"@ez4/aws-function";import{attachEntry as It,linkDependency as Lt}from"@ez4/stateful";import{createPolicyDocument as Ft}from"@ez4/aws-identity";var fe=t=>`arn:aws:s3:\
80
+ ::${t}`,ge=t=>Ft([{resourceIds:[`arn:aws:s3:::${t}-*`,`arn:aws:s3:::${t}-*/*`],permissions:[
81
+ "s3:ListBucket","s3:PutObject","s3:GetObject","s3:DeleteObject"]}]);var de=(t,e,r)=>{let o=r.bucketName,n=Y(o),s=It(t,{type:l,entryId:n,dependencies:[],
82
+ parameters:r});return e&&(At(t,s,e,{fromService:r.bucketName,getPermission:()=>({
83
83
  principal:"s3.amazonaws.com",sourceArn:fe(o)})}),Lt(t,s.entryId,e.entryId)),s};import{getFunctionState as Gt,tryGetFunctionState as _t}from"@ez4/aws-function";
84
84
  import{linkServiceExtras as Vt}from"@ez4/project/library";import{isRoleState as Pe}from"@ez4/aws-identity";
85
85
  import{createLogGroup as Wt}from"@ez4/aws-logs";import{createFunction as Kt}from"@ez4/aws-function";import{join as qt}from"node:path";import{getDefinitionsObject as Mt}from"@ez4/project/library";
86
86
  import{MappingServiceName as $t}from"@ez4/aws-function";import{getFunctionBundle as Ht}from"@ez4/aws-common";
87
87
  var Se=async(t,e)=>{let{extras:r,debug:o,handler:n,listener:s}=e,c=Mt(t);return Ht(
88
88
  $t,{templateFile:qt(import.meta.dirname,"../lib/event.ts"),filePrefix:"s3",define:{
89
- ...c},handler:n,listener:s,extras:r,debug:o})};var ke=(t,e,r,o)=>Kt(t,e,r,{handlerName:"s3EntryPoint",functionName:o.functionName,
90
- sourceFile:o.handler.sourceFile,description:o.description,variables:o.variables,
91
- timeout:o.timeout,memory:o.memory,debug:o.debug,tags:o.tags,getFunctionBundle:n=>{
92
- let s=n.getDependencies();return Se(s,o)}});import{getServiceName as T}from"@ez4/project/library";import{getRandomName as Ut}from"@ez4/aws-common";
93
- import{toKebabCase as N}from"@ez4/utils";var xe=async(t,e)=>{if(t.globalName)return T(
89
+ ...c},handler:n,listener:s,extras:r,debug:o})};var ke=(t,e,r,o)=>{let{handler:n}=o;return Kt(t,e,r,{handlerName:"s3EntryPoint",
90
+ sourceFile:n.sourceFile,functionName:o.functionName,description:o.description,variables:o.
91
+ variables,timeout:o.timeout,memory:o.memory,debug:o.debug,tags:o.tags,getFunctionBundle:s=>{
92
+ let c=s.getDependencies();return Se(c,o)},getFunctionFiles:()=>[n.sourceFile,n.dependencies]})};import{getServiceName as T}from"@ez4/project/library";import{getRandomName as Ut}from"@ez4/aws-common";
93
+ import{toKebabCase as N}from"@ez4/utils";var be=async(t,e)=>{if(t.globalName)return T(
94
94
  t.globalName,e);let r=T(t,e),o=await Ut(16);return`${r.substring(0,46)}-${o}`},D=(t,e)=>`${N(
95
- t.name)}-${N(e)}`,be=(t,e,r)=>`${T(t,r)}-${N(e)}`;var x=class extends Error{constructor(){super("Execution role for S3 is missing.")}};var b;(o=>(o.LogRetention=90,o.Timeout=90,o.Memory=192))(b||={});var Be=(t,e,r,o)=>{if(!e.events)return;if(!o.role||!Pe(o.role))throw new x;let{handler:n,
96
- listener:s,retention:c,timeout:m,memory:S,variables:k}=e.events,P=D(e,n.name),u=_t(
97
- o,P,r);if(u)return u;let A=be(e,n.name,r),De=Wt(t,{retention:c??b.LogRetention,groupName:A,
98
- tags:r.tags});return u=ke(t,o.role,De,{functionName:A,description:n.description,
99
- timeout:m??b.Timeout,memory:S??b.Memory,extras:e.extras,debug:r.debug,tags:r.tags,
100
- variables:{...r.variables,...e.variables,...k},handler:{functionName:n.name,sourceFile:n.
101
- file},...s&&{listener:{functionName:s.name,sourceFile:s.file}}}),o.setServiceState(
102
- u,P,r),u},we=(t,e,r,o)=>{if(!e.extras||!e.events)return;if(!o.role||!Pe(o.role))
103
- throw new x;let{handler:n}=e.events,s=D(e,n.name),c=Gt(o,s,r);Vt(t,c.entryId,e.extras)};import{readdir as Zt}from"node:fs/promises";import{join as ve,relative as Ee}from"node:path";
95
+ t.name)}-${N(e)}`,xe=(t,e,r)=>`${T(t,r)}-${N(e)}`;var b=class extends Error{constructor(){super("Execution role for S3 is missing.")}};var x;(o=>(o.LogRetention=90,o.Timeout=90,o.Memory=192))(x||={});var Be=(t,e,r,o)=>{if(!e.events)return;if(!o.role||!Pe(o.role))throw new b;let{handler:n,
96
+ listener:s,logRetention:c,timeout:m,memory:S,variables:k}=e.events,P=D(e,n.name),
97
+ u=_t(o,P,r);if(u)return u;let F=xe(e,n.name,r),De=Wt(t,{retention:c??x.LogRetention,
98
+ groupName:F,tags:r.tags});return u=ke(t,o.role,De,{functionName:F,description:n.
99
+ description,timeout:m??x.Timeout,memory:S??x.Memory,extras:e.extras,debug:r.debug,
100
+ tags:r.tags,variables:{...r.variables,...e.variables,...k},handler:{dependencies:o.
101
+ getDependencies(n.file),functionName:n.name,sourceFile:n.file},...s&&{listener:{
102
+ functionName:s.name,sourceFile:s.file}}}),o.setServiceState(u,P,r),u},we=(t,e,r,o)=>{
103
+ if(!e.extras||!e.events)return;if(!o.role||!Pe(o.role))throw new b;let{handler:n}=e.
104
+ events,s=D(e,n.name),c=Gt(o,s,r);Vt(t,c.entryId,e.extras)};import{readdir as Zt}from"node:fs/promises";import{join as ve,relative as Ee}from"node:path";
104
105
  import{createBucketObject as Jt}from"@ez4/aws-bucket";var Re=async(t,e,r)=>{let o=process.
105
106
  cwd(),n=ve(o,r),s=await Zt(n,{withFileTypes:!0,recursive:!0});for(let c of s){if(!c.
106
107
  isFile())continue;let m=ve(c.parentPath,c.name);Jt(t,e,{objectKey:Ee(n,m),filePath:Ee(
107
108
  o,m)})}};var Ce=(t,e,r)=>{let o=ee(t,e.name,r);return{entryIds:[o.entryId],constructor:`m\
108
109
  ake('${o.parameters.bucketName}')`,from:"@ez4/aws-bucket/client",module:"Client"}};var je=t=>{let{service:e,options:r,context:o}=t;return z(e)?Ce(o,e,r):null},he=async t=>{
109
110
  let{state:e,service:r,options:o,context:n}=t;if(!z(r))return;let{localPath:s,autoExpireDays:c,
110
- events:m,cors:S}=r,k=await xe(r,o),P=Be(e,r,o,n),u=de(e,P,{eventsPath:m?.path,tags:o.
111
+ events:m,cors:S}=r,k=await be(r,o),P=Be(e,r,o,n),u=de(e,P,{eventsPath:m?.path,tags:o.
111
112
  tags,bucketName:k,autoExpireDays:c,localPath:s,cors:S});n.setServiceState(u,r,o),
112
113
  s&&await Re(e,u,s)},Oe=t=>{let{state:e,service:r,options:o,context:n}=t;z(r)&&we(
113
114
  e,r,o,n)};import{ServiceType as Qt}from"@ez4/storage/library";import{createPolicy as Xt,tryGetPolicy as Yt}from"@ez4/aws-identity";
@@ -117,11 +118,11 @@ n),policyName:s})};var Ne=!1,En=()=>{Ne||(tr(),rr(),or(),nr(),sr("@ez4/aws-bucke
117
118
  ExecutionPolicy":Te,"deploy:prepareLinkedService":je,"deploy:prepareResources":he,
118
119
  "deploy:connectResources":Oe}),X(),ae(),ye(),Ne=!0)};import{getRegion as cr}from"@ez4/aws-identity";var jn=t=>/(.+)\.s3\.(.+)\.amazonaws\.com/i.
119
120
  test(t),hn=async t=>{let e=await cr();return`${t}.s3.${e}.amazonaws.com`};import{attachEntry as ar}from"@ez4/stateful";import{hashData as ir}from"@ez4/utils";var zn=(t,e,r,o)=>{let n=ir(f,e.entryId,r.entryId);return ar(t,{type:f,entryId:n,
120
- dependencies:[e.entryId,r.entryId],parameters:o})};var Fn=t=>t.type===f;import{attachEntry as pr}from"@ez4/stateful";import{hashData as mr}from"@ez4/utils";var Hn=(t,e,r)=>{let o=r.objectKey,n=mr(y,e.entryId,o);return pr(t,{type:y,entryId:n,
121
+ dependencies:[e.entryId,r.entryId],parameters:o})};var In=t=>t.type===f;import{attachEntry as pr}from"@ez4/stateful";import{hashData as mr}from"@ez4/utils";var Hn=(t,e,r)=>{let o=r.objectKey,n=mr(y,e.entryId,o);return pr(t,{type:y,entryId:n,
121
122
  dependencies:[e.entryId],parameters:r})};export{a as BucketServiceName,l as BucketServiceType,g as ObjectServiceName,y as ObjectServiceType,
122
123
  d as PolicyServiceName,f as PolicyServiceType,fe as buildBucketArn,de as createBucket,
123
124
  ke as createBucketEventFunction,Hn as createBucketObject,zn as createBucketPolicy,
124
125
  Y as createBucketStateId,hn as getBucketDomain,v as getBucketName,Xr as getBucketObjectFiles,
125
126
  E as getBucketObjectPath,ee as getBucketState,ge as getPolicyDocument,jn as isBucketDomain,
126
- Qr as isBucketObjectState,Fn as isBucketPolicyState,ot as isBucketState,En as registerTriggers};
127
+ Qr as isBucketObjectState,In as isBucketPolicyState,ot as isBucketState,En as registerTriggers};
127
128
  //# sourceMappingURL=main.mjs.map
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.19.0",
4
+ "version": "0.20.0",
5
5
  "author": "Silas B.",
6
6
  "license": "MIT",
7
7
  "type": "module",
@@ -48,14 +48,14 @@
48
48
  "dependencies": {
49
49
  "@aws-sdk/client-s3": "^3.758.0",
50
50
  "@aws-sdk/s3-request-presigner": "^3.758.0",
51
- "@ez4/aws-common": "^0.19.0",
52
- "@ez4/aws-function": "^0.19.0",
53
- "@ez4/aws-identity": "^0.19.0",
54
- "@ez4/aws-logs": "^0.19.0",
55
- "@ez4/project": "^0.19.0",
56
- "@ez4/stateful": "^0.19.0",
57
- "@ez4/storage": "^0.19.0",
58
- "@ez4/utils": "^0.19.0",
51
+ "@ez4/aws-common": "^0.20.0",
52
+ "@ez4/aws-function": "^0.20.0",
53
+ "@ez4/aws-identity": "^0.20.0",
54
+ "@ez4/aws-logs": "^0.20.0",
55
+ "@ez4/project": "^0.20.0",
56
+ "@ez4/stateful": "^0.20.0",
57
+ "@ez4/storage": "^0.20.0",
58
+ "@ez4/utils": "^0.20.0",
59
59
  "mime": "^3.0.0"
60
60
  }
61
61
  }