@ez4/aws-bucket 0.28.0 → 0.30.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,3 +1,3 @@
1
1
  import type { EntryState } from '@ez4/stateful';
2
2
  import type { BucketEventFunctionParameters } from './types';
3
- export declare const bundleBucketEventFunction: (dependencies: EntryState[], parameters: BucketEventFunctionParameters) => Promise<string>;
3
+ export declare const bundleBucketEventFunction: (parameters: BucketEventFunctionParameters, connections: EntryState[]) => Promise<string>;
@@ -8,7 +8,7 @@ export type BucketEventFunction = {
8
8
  export type BucketEventEntryPoint = BucketEventFunction & {
9
9
  dependencies: string[];
10
10
  };
11
- export type BucketEventFunctionParameters = Omit<FunctionParameters, 'getFunctionBundle' | 'getFunctionFiles' | 'sourceFile' | 'handlerName'> & {
11
+ export type BucketEventFunctionParameters = Omit<FunctionParameters, 'getFunctionFiles' | 'getFunctionBundle' | 'getFunctionHash' | 'sourceFile' | 'handlerName'> & {
12
12
  handler: BucketEventEntryPoint;
13
13
  listener?: BucketEventFunction;
14
14
  extras?: Record<string, ExtraSource>;
@@ -12,7 +12,7 @@ export type BucketParameters = CreateRequest & {
12
12
  cors?: Bucket.Cors;
13
13
  };
14
14
  export type BucketResult = CreateResponse & {
15
- functionArn: Arn | undefined;
15
+ functionArn?: Arn;
16
16
  };
17
17
  export type BucketState = EntryState & {
18
18
  type: typeof BucketServiceType;
package/dist/main.cjs CHANGED
@@ -1,13 +1,13 @@
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:()=>l,ObjectServiceName:()=>b,
1
+ "use strict";var Rt=Object.create;var R=Object.defineProperty;var Ct=Object.getOwnPropertyDescriptor;var ht=Object.getOwnPropertyNames;var jt=Object.getPrototypeOf,Ot=Object.prototype.hasOwnProperty;var o=(t,e)=>R(t,"name",{value:e,configurable:!0});var Tt=(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 ht(e))!Ot.call(t,s)&&s!==r&&
3
+ R(t,s,{get:()=>e[s],enumerable:!(n=Ct(e,s))||n.enumerable});return t};var Nt=(t,e,r)=>(r=t!=null?Rt(jt(t)):{},te(e||!t||!t.__esModule?R(r,"default",{value:t,
4
+ enumerable:!0}):r,t)),Dt=t=>te(R({},"__esModule",{value:!0}),t);var nr={};Tt(nr,{BucketServiceName:()=>p,BucketServiceType:()=>l,ObjectServiceName:()=>b,
5
5
  ObjectServiceType:()=>f,PolicyServiceName:()=>x,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:()=>Pe,registerTriggers:()=>Qt});
10
- module.exports=Nt(or);var ft=require("@ez4/aws-common"),gt=require("@ez4/aws-identity"),dt=require("@ez4/aws-function"),
6
+ createBucket:()=>J,createBucketEventFunction:()=>Q,createBucketObject:()=>or,createBucketPolicy:()=>tr,
7
+ createBucketStateId:()=>H,getBucketDomain:()=>er,getBucketName:()=>C,getBucketObjectFiles:()=>Gt,
8
+ getBucketObjectPath:()=>h,getBucketState:()=>K,getPolicyDocument:()=>Z,isBucketDomain:()=>Yt,
9
+ isBucketObjectState:()=>Ut,isBucketPolicyState:()=>rr,isBucketState:()=>Pe,registerTriggers:()=>Xt});
10
+ module.exports=Dt(nr);var ft=require("@ez4/aws-common"),gt=require("@ez4/aws-identity"),dt=require("@ez4/aws-function"),
11
11
  St=require("@ez4/storage/library"),kt=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.
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=>{
@@ -32,20 +32,20 @@ eleteLifecycle"),me=o(async(t,e)=>{m.Logger.logUpdate(p,`${t} events`);let{funct
32
32
  eventsPath:n,eventsType:s}=e;await y.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}),"\
36
- getBucketHandler"),Dt=o((t,e)=>!!t.result&&t.result.bucketName===e.result?.bucketName,
37
- "equalsResource"),zt=o(async(t,e)=>{let r={...t.parameters,dependencies:t.dependencies},
35
+ refix",Value:n}]}}}}]}}}))},"updateEventNotifications");var le=o(()=>({equals:zt,create:ye,replace:At,preview:Ft,update:It,delete:Lt}),"\
36
+ getBucketHandler"),zt=o((t,e)=>!!t.result&&t.result.bucketName===e.result?.bucketName,
37
+ "equalsResource"),Ft=o((t,e)=>{let r={...t.parameters,dependencies:t.dependencies},
38
38
  n={...e.parameters,dependencies:e.dependencies},s=(0,P.deepCompare)(r,n);if(s.counts)
39
- return{...s,name:r.bucketName}},"previewResource"),Ft=o(async(t,e,r)=>{if(e.result)
39
+ return{...s,name:r.bucketName}},"previewResource"),At=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;
44
+ "createResource"),It=o(async(t,e,r)=>{let{result:n,parameters:s}=t;if(!n)return;
45
45
  let c=n.bucketName,i=(0,$.tryGetFunctionArn)(r),g=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:g};return await Se(c,v,E),{...n,functionArn:i}},"updateResource"),Lt=o(
49
49
  async t=>{let e=t.result;e&&await re(e.bucketName)&&await ne(e.bucketName)},"del\
50
50
  eteResource"),fe=o(async(t,e,r)=>{if(!(e.cors&&r?.cors&&(0,P.deepEqual)(e.cors,r.
51
51
  cors))){if(e.cors)return ce(t,e.cors);if(r?.cors)return ae(t)}},"checkCorsUpdate\
@@ -62,18 +62,18 @@ bucketName},"getBucketName");var k=require("@aws-sdk/client-s3"),U=require("@ez4
62
62
  logCreate(x,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
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}),"\
66
- getPolicyHandler"),Lt=o((t,e)=>!!t.result&&t.result.bucketName===e.result?.bucketName,
67
- "equalsResource"),qt=o(async(t,e)=>{let r={...t.parameters,dependencies:t.dependencies},
65
+ if(!(e instanceof k.NoSuchBucket))throw e;return!1}},"deletePolicy");var Ce=o(()=>({equals:qt,create:he,replace:$t,preview:Mt,update:Ht,delete:Kt}),"\
66
+ getPolicyHandler"),qt=o((t,e)=>!!t.result&&t.result.bucketName===e.result?.bucketName,
67
+ "equalsResource"),Mt=o((t,e)=>{let r={...t.parameters,dependencies:t.dependencies},
68
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(
69
+ getRole:!0}});if(s.counts)return{...s,name:r.fromService}},"previewResource"),$t=o(
70
70
  async(t,e,r)=>{if(e.result)throw new Ee.ReplaceResourceError(x,t.entryId,e.entryId);
71
71
  return he(t,r)},"replaceResource"),he=o(async(t,e)=>{let r=t.parameters,n=C(x,"p\
72
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;
73
+ "createResource"),Ht=o(async()=>{},"updateResource"),Kt=o(async t=>{let e=t.result;
74
74
  e&&await ve(e.bucketName)},"deleteResource");var Oe=o(()=>{(0,je.registerProvider)(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?.
75
+ Ne=Nt(require("mime"),1);var b="AWS:S3/Object",f="aws:s3.object";var Ut=o(t=>t.type===f,"isBucketObjectState"),h=o((t,e)=>`${t}/${e}`,"getBucketO\
76
+ bjectPath"),Gt=o(t=>t.getDependencies(f).map(({result:r,parameters:n})=>({lastModified:r?.
77
77
  lastModified,objectKey:n.objectKey})),"getBucketObjectFiles");var G=new u.S3Client({}),_=o(async(t,e)=>{let{objectKey:r,filePath:n}=e;B.Logger.
78
78
  logCreate(b,h(t,r));let s=Ne.default.getType(n);return await G.send(new u.PutObjectCommand(
79
79
  {Bucket:t,Key:r,Body:(0,Te.createReadStream)(n),...s&&{ContentType:s}})),{objectKey:r}},
@@ -81,40 +81,41 @@ logCreate(b,h(t,r));let s=Ne.default.getType(n);return await G.send(new u.PutObj
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
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}),"\
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)(
84
+ throw r;return!1}},"deleteObject");var Ie=o(()=>({equals:_t,create:Le,replace:Wt,preview:Vt,update:Zt,delete:Jt}),"\
85
+ getObjectHandler"),_t=o((t,e)=>!!t.result&&t.result.lastModified===e.result?.lastModified,
86
+ "equalsResource"),Vt=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"),Wt=o(async(t,e,r)=>{if(e.result)throw new Ae.ReplaceResourceError(
90
90
  b,t.entryId,e.entryId);return Le(t,r)},"replaceResource"),Le=o(async(t,e)=>{let r=t.
91
91
  parameters,n=C(b,"bucket",e),s=await V(r.filePath),{objectKey:c}=await _(n,r);return await qe(
92
- n,c,r.tags,t.parameters.tags),{lastModified:s,bucketName:n}},"createResource"),Wt=o(
92
+ n,c,r.tags,t.parameters.tags),{lastModified:s,bucketName:n}},"createResource"),Zt=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\
95
- pdateResource"),Zt=o(async t=>{let{result:e,parameters:r}=t;e&&await ze(e.bucketName,
94
+ i=Qt(r,n,e.parameters);return await qe(r.bucketName,s,c,e.parameters.tags),i},"u\
95
+ pdateResource"),Jt=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
- getTime()},"getLastModifiedTime"),Jt=o(async(t,e,r)=>{let n=await V(e.filePath);
97
+ getTime()},"getLastModifiedTime"),Qt=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
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.registerProvider)(f,Ie())},"registerObjectProvider");var q=require("@ez4/storage/library");var Ke=require("@ez4/aws-function"),F=require("@ez4/stateful");var He=require("@ez4/aws-identity");var W=o(t=>`arn:aws:s3:::${t}`,"buildBucketArn"),Z=o(t=>(0,He.createPolicyDocument)(
101
+ t,e,s)},"checkTagUpdates");var $e=o(()=>{(0,Me.registerProvider)(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)(
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
104
  t");var J=o((t,e,r)=>{let n=r.bucketName,s=H(n),c=(0,F.attachEntry)(t,{type:l,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
- getPermission")}),(0,F.linkDependency)(t,c.entryId,e.entryId)),c},"createBucket");var L=require("@ez4/aws-function"),Ye=require("@ez4/project/library"),Y=require("@ez4/aws-identity"),
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"),
108
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"),
109
- Ve=require("@ez4/aws-common");var We=o(async(t,e)=>{let{extras:r,debug:n,handler:s,listener:c}=e,i=(0,Ge.getDefinitionsObject)(
110
- t);return(0,Ve.getFunctionBundle)(_e.MappingServiceName,{templateFile:(0,Ue.join)(
111
- __dirname,"../lib/event.ts"),filePrefix:"s3",define:{...i},handler:s,listener:c,
112
- extras:r,debug:n})},"bundleBucketEventFunction");var Q=o((t,e,r,n)=>{let{handler:s}=n;return(0,Ze.createFunction)(t,e,r,{handlerName:"\
110
+ Ve=require("@ez4/aws-common");var We=o(async(t,e)=>{let{extras:r,debug:n,handler:s,listener: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:s,listener:c,extras:r,
113
+ debug:n})},"bundleBucketEventFunction");var Q=o((t,e,r,n)=>{let{handler:s}=n;return(0,Ze.createFunction)(t,e,r,{handlerName:"\
113
114
  s3EntryPoint",sourceFile:s.sourceFile,functionName:n.functionName,description:n.
114
115
  description,variables:n.variables,timeout:n.timeout,memory:n.memory,debug:n.debug,
115
- tags:n.tags,getFunctionBundle:o(c=>{let i=c.getDependencies();return We(i,n)},"g\
116
- etFunctionBundle"),getFunctionFiles:o(()=>[s.sourceFile,s.dependencies],"getFunc\
117
- tionFiles")})},"createBucketEventFunction");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);
116
+ tags:n.tags,getFunctionFiles:o(()=>[s.sourceFile,s.dependencies],"getFunctionFil\
117
+ es"),getFunctionBundle:o(c=>We(n,c.getConnections()),"getFunctionBundle"),getFunctionHash:o(
118
+ ()=>{},"getFunctionHash")})},"createBucketEventFunction");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);
118
119
  let r=(0,A.getServiceName)(t,e),n=await(0,Je.getRandomName)(16);return`${r.substring(
119
120
  0,46)}-${n}`},"getBucketName"),X=o((t,e)=>`${(0,I.toKebabCase)(t.name)}-${(0,I.toKebabCase)(
120
121
  e)}`,"getInternalName"),Xe=o((t,e,r)=>`${(0,A.getServiceName)(t,r)}-${(0,I.toKebabCase)(
@@ -122,14 +123,14 @@ e)}`,"getFunctionName");var j=class extends Error{static{o(this,"RoleMissingErro
122
123
  "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))
123
124
  throw new j;let{handler:s,listener:c,logRetention:i,timeout:g,memory:v,variables:E}=e.
124
125
  events,T=X(e,s.name),d=(0,L.tryGetFunctionState)(n,T,r);if(d)return d;let ee=Xe(
125
- e,s.name,r),vt=(0,et.createLogGroup)(t,{retention:i??O.LogRetention,groupName:ee,
126
- tags:r.tags});return d=Q(t,n.role,vt,{functionName:ee,description:s.description,
127
- timeout:g??O.Timeout,memory:v??O.Memory,extras:e.extras,debug:r.debug,tags:r.tags,
128
- variables:{...r.variables,...e.variables,...E},handler:{dependencies:n.getDependencies(
129
- s.file),functionName:s.name,sourceFile:s.file,module:s.module},...c&&{listener:{
130
- functionName:c.name,sourceFile:c.file,module:c.module}}}),n.setServiceState(d,T,
131
- r),d},"prepareEvents"),rt=o((t,e,r,n)=>{if(!e.extras||!e.events)return;if(!n.role||
132
- !(0,Y.isRoleState)(n.role))throw new j;let{handler:s}=e.events,c=X(e,s.name),i=(0,L.getFunctionState)(
126
+ e,s.name,r),vt=n.getDependencyFiles(s.file),Et=(0,et.createLogGroup)(t,{retention:i??
127
+ O.LogRetention,groupName:ee,tags:r.tags});return d=Q(t,n.role,Et,{functionName:ee,
128
+ description:s.description,timeout:g??O.Timeout,memory:v??O.Memory,extras:e.extras,
129
+ debug:r.debug,tags:r.tags,handler:{sourceFile:s.file,functionName:s.name,module:s.
130
+ module,dependencies:vt},listener:c&&{functionName:c.name,sourceFile:c.file,module:c.
131
+ module},variables:{...r.variables,...e.variables,...E}}),n.setServiceState(d,T,r),
132
+ d},"prepareEvents"),rt=o((t,e,r,n)=>{if(!e.events)return;if(!n.role||!(0,Y.isRoleState)(
133
+ n.role))throw new j;let{handler:s}=e.events,c=X(e,s.name),i=(0,L.getFunctionState)(
133
134
  n,c,r);(0,Ye.linkServiceExtras)(t,i.entryId,e.extras)},"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)(
134
135
  s,{withFileTypes:!0,recursive:!0});for(let i of c){if(!i.isFile())continue;let g=(0,w.join)(
135
136
  i.parentPath,i.name);(0,nt.createBucketObject)(t,e,{objectKey:(0,w.relative)(s,g),
@@ -145,14 +146,14 @@ options:n,context:s}=t;(0,q.isBucketService)(r)&&rt(e,r,n,s)},"connectBucketServ
145
146
  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;
146
147
  let s=(0,ut.getServiceName)("",n),c=`${s}-bucket-policy`;return(0,M.tryGetPolicy)(
147
148
  e,c)??(0,M.createPolicy)(e,{tags:n.tags,policyDocument:Z(s),policyName:c})},"pre\
148
- pareExecutionPolicy");var yt=!1,Qt=o(()=>{yt||((0,ft.registerTriggers)(),(0,gt.registerTriggers)(),(0,dt.registerTriggers)(),
149
+ pareExecutionPolicy");var yt=!1,Xt=o(()=>{yt||((0,ft.registerTriggers)(),(0,gt.registerTriggers)(),(0,dt.registerTriggers)(),
149
150
  (0,St.registerTriggers)(),(0,kt.createTrigger)("@ez4/aws-bucket",{"deploy:prepar\
150
151
  eExecutionPolicy":lt,"deploy:prepareLinkedService":at,"deploy:prepareResources":it,
151
- "deploy:connectResources":pt}),be(),Oe(),$e(),yt=!0)},"registerTriggers");var bt=require("@ez4/aws-identity");var Xt=o(t=>/(.+)\.s3\.(.+)\.amazonaws\.com/i.test(t),"isBucketDomain"),Yt=o(async t=>{
152
+ "deploy:connectResources":pt}),be(),Oe(),$e(),yt=!0)},"registerTriggers");var bt=require("@ez4/aws-identity");var Yt=o(t=>/(.+)\.s3\.(.+)\.amazonaws\.com/i.test(t),"isBucketDomain"),er=o(async t=>{
152
153
  let e=await(0,bt.getRegion)();return`${t}.s3.${e}.amazonaws.com`},"getBucketDoma\
153
- in");var xt=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,xt.attachEntry)(
154
+ in");var xt=require("@ez4/stateful"),Pt=require("@ez4/utils");var tr=o((t,e,r,n)=>{let s=(0,Pt.hashData)(S,e.entryId,r.entryId);return(0,xt.attachEntry)(
154
155
  t,{type:S,entryId:s,dependencies:[e.entryId,r.entryId],parameters:n})},"createBu\
155
- cketPolicy");var tr=o(t=>t.type===S,"isBucketPolicyState");var Bt=require("@ez4/stateful"),wt=require("@ez4/utils");var rr=o((t,e,r)=>{let n=r.objectKey,s=(0,wt.hashData)(f,e.entryId,n);return(0,Bt.attachEntry)(
156
+ cketPolicy");var rr=o(t=>t.type===S,"isBucketPolicyState");var Bt=require("@ez4/stateful"),wt=require("@ez4/utils");var or=o((t,e,r)=>{let n=r.objectKey,s=(0,wt.hashData)(f,e.entryId,n);return(0,Bt.attachEntry)(
156
157
  t,{type:f,entryId:s,dependencies:[e.entryId],parameters:r})},"createBucketObject");0&&(module.exports={BucketServiceName,BucketServiceType,ObjectServiceName,ObjectServiceType,
157
158
  PolicyServiceName,PolicyServiceType,buildBucketArn,createBucket,createBucketEventFunction,
158
159
  createBucketObject,createBucketPolicy,createBucketStateId,getBucketDomain,getBucketName,
package/dist/main.mjs CHANGED
@@ -1,43 +1,43 @@
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{createTrigger as ar}from"@ez4/project/library";import{registerProvider 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,
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 m=new Ie({}),I=o(async t=>{p.logFetch(i,t);try{return!(await m.send(new Le({
1
+ var Ae=Object.defineProperty;var o=(t,e)=>Ae(t,"name",{value:e,configurable:!0});import{registerTriggers as nr}from"@ez4/aws-common";import{registerTriggers as sr}from"@ez4/aws-identity";
2
+ import{registerTriggers as cr}from"@ez4/aws-function";import{registerTriggers as ar}from"@ez4/storage/library";
3
+ import{createTrigger as ir}from"@ez4/project/library";import{registerProvider as rt}from"@ez4/aws-common";import{ReplaceResourceError as Ze}from"@ez4/aws-common";import{tryGetFunctionArn as _}from"@ez4/aws-function";
4
+ import{deepCompare as Je,deepEqual as C}from"@ez4/utils";import{getTagList as Ie,Logger as p}from"@ez4/aws-common";import{S3Client as Le,
5
+ ListObjectsV2Command as qe,CreateBucketCommand as Me,DeleteBucketCommand as $e,PutBucketTaggingCommand as He,
6
+ PutBucketCorsCommand as Ke,DeleteBucketCorsCommand as Ue,PutBucketLifecycleConfigurationCommand as Ge,
7
+ DeleteBucketLifecycleCommand as _e,PutBucketNotificationConfigurationCommand as Ve,
8
+ ExpirationStatus as We,NoSuchBucket as w}from"@aws-sdk/client-s3";var i="AWS:S3/Bucket",y="aws:s3.bucket";var m=new Le({}),I=o(async t=>{p.logFetch(i,t);try{return!(await m.send(new qe({
9
9
  Bucket:t,MaxKeys:1}))).Contents?.length}catch(e){if(!(e instanceof w))throw e;return 0}},
10
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:[
11
+ send(new Me({Bucket:e})),{bucketName:e}},"createBucket"),q=o(async t=>{p.logDelete(
12
+ i,t);try{return await m.send(new $e({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 He(
14
+ {Bucket:t,Tagging:{TagSet:Ie({...e,ManagedBy:"EZ4"})}}))},"tagBucket"),$=o(async(t,e)=>{
15
+ p.logUpdate(i,`${t} CORS`),await m.send(new Ke({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
18
  CorsConfiguration"),H=o(async t=>{p.logDelete(i,`${t} CORS`);try{return await m.
19
- send(new Ke({Bucket:t})),!0}catch(e){if(!(e instanceof w))throw e;return!1}},"de\
19
+ send(new Ue({Bucket:t})),!0}catch(e){if(!(e instanceof w))throw e;return!1}},"de\
20
20
  leteCorsConfiguration"),K=o(async(t,e)=>{p.logCreate(i,`${t} lifecycle`),await m.
21
- send(new Ue({Bucket:t,LifecycleConfiguration:{Rules:[{ID:"ID0",Status:Ve.Enabled,
21
+ send(new Ge({Bucket:t,LifecycleConfiguration:{Rules:[{ID:"ID0",Status:We.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){
23
+ p.logDelete(i,`${t} lifecycle`);try{return await m.send(new _e({Bucket:t})),!0}catch(e){
24
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(
25
+ i,`${t} events`);let{functionArn:r,eventsPath:n,eventsType:s}=e;await m.send(new Ve(
26
26
  {Bucket:t,SkipDestinationValidation:!0,NotificationConfiguration:{...r&&{LambdaFunctionConfigurations:[
27
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(async(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(
28
+ refix",Value:n}]}}}}]}}}))},"updateEventNotifications");var V=o(()=>({equals:Qe,create:W,replace:Ye,preview:Xe,update:et,delete:tt}),"ge\
29
+ tBucketHandler"),Qe=o((t,e)=>!!t.result&&t.result.bucketName===e.result?.bucketName,
30
+ "equalsResource"),Xe=o((t,e)=>{let r={...t.parameters,dependencies:t.dependencies},
31
+ n={...e.parameters,dependencies:e.dependencies},s=Je(r,n);if(s.counts)return{...s,
32
+ name:r.bucketName}},"previewResource"),Ye=o(async(t,e,r)=>{if(e.result)throw new Ze(
33
33
  i,t.entryId,e.entryId);return W(t,r)},"replaceResource"),W=o(async(t,e)=>{let r=t.
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
- s,c,{}),{bucketName:s,functionArn:n}},"createResource"),Ye=o(async(t,e,r)=>{let{
36
+ s,c,{}),{bucketName:s,functionArn:n}},"createResource"),et=o(async(t,e,r)=>{let{
37
37
  result:n,parameters:s}=t;if(!n)return;let c=n.bucketName,a=_(r),u=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(
40
+ functionArn:u};return await X(c,k,b),{...n,functionArn:a}},"updateResource"),tt=o(
41
41
  async t=>{let e=t.result;e&&await I(e.bucketName)&&await q(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)=>{
@@ -45,85 +45,85 @@ if(e.autoExpireDays!==r?.autoExpireDays){if(e.autoExpireDays)return K(t,e.autoEx
45
45
  if(r?.autoExpireDays)return U(t)}},"checkLifecycleUpdates"),Q=o(async(t,e,r)=>{let n=e??
46
46
  {};!C(n,r??{})&&await M(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
- ates");var Y=o(()=>{tt(y,V())},"registerBucketProvider");import{registerProvider 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},"\
48
+ ates");var Y=o(()=>{rt(y,V())},"registerBucketProvider");import{registerProvider as kt}from"@ez4/aws-common";import{ReplaceResourceError as ut}from"@ez4/aws-common";import{deepCompare as lt}from"@ez4/utils";import{IncompleteResourceError as ot}from"@ez4/aws-common";import{hashData as nt,
49
+ toKebabCase as st}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=>nt(y,st(t)),"createBucketStateId"),ct=o(t=>t.type===y,"isBucketState"),
51
+ te=o((t,e,r)=>{let n=t.getServiceState(e,r);if(!ct(n))throw new v(e);return n},"\
52
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(async(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"),
53
+ throw new ot(t,e,"bucketName");return n.bucketName},"getBucketName");import{S3Client as at,PutBucketPolicyCommand as it,DeleteBucketPolicyCommand as pt,
54
+ NoSuchBucket as mt}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 at({}),ne=o(async t=>{let{bucketName:e,role:r}=t;return re.logCreate(
55
+ S,e),await oe.send(new it({Bucket:e,Policy:JSON.stringify(r)})),{bucketName:e}},
56
+ "createPolicy"),se=o(async t=>{re.logDelete(S,t);try{return await oe.send(new pt(
57
+ {Bucket:t})),!0}catch(e){if(!(e instanceof mt))throw e;return!1}},"deletePolicy");var ce=o(()=>({equals:yt,create:ae,replace:gt,preview:ft,update:dt,delete:St}),"\
58
+ getPolicyHandler"),yt=o((t,e)=>!!t.result&&t.result.bucketName===e.result?.bucketName,
59
+ "equalsResource"),ft=o((t,e)=>{let r={...t.parameters,dependencies:t.dependencies},
60
+ n={...e.parameters,dependencies:e.dependencies},s=lt(r,n,{exclude:{getRole:!0}});
61
+ if(s.counts)return{...s,name:r.fromService}},"previewResource"),gt=o(async(t,e,r)=>{
62
+ if(e.result)throw new ut(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
- {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{registerProvider 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";
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 xt({Bucket:t,Key:r,Body:kt(n),
64
+ {bucketName:n,role:s}),{bucketName:n}},"createResource"),dt=o(async()=>{},"updat\
65
+ eResource"),St=o(async t=>{let e=t.result;e&&await se(e.bucketName)},"deleteReso\
66
+ urce");var ie=o(()=>{kt(g,ce())},"registerPolicyProvider");import{registerProvider as It}from"@ez4/aws-common";import{stat as Ct}from"node:fs/promises";import{ReplaceResourceError as ht}from"@ez4/aws-common";
67
+ import{deepCompare as jt,deepEqual as Ot}from"@ez4/utils";import{createReadStream as bt}from"node:fs";import{S3Client as xt,PutObjectCommand as Pt,
68
+ PutObjectTaggingCommand as Bt,DeleteObjectCommand as wt,NoSuchBucket as vt}from"@aws-sdk/client-s3";
69
+ import{getTagList as Et,Logger as h}from"@ez4/aws-common";import Rt from"mime";var d="AWS:S3/Object",f="aws:s3.object";var ao=o(t=>t.type===f,"isBucketObjectState"),R=o((t,e)=>`${t}/${e}`,"getBucketO\
70
+ bjectPath"),io=o(t=>t.getDependencies(f).map(({result:r,parameters:n})=>({lastModified:r?.
71
+ lastModified,objectKey:n.objectKey})),"getBucketObjectFiles");var j=new xt({}),O=o(async(t,e)=>{let{objectKey:r,filePath:n}=e;h.logCreate(d,R(
72
+ t,r));let s=Rt.getType(n);return await j.send(new Pt({Bucket:t,Key:r,Body:bt(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 Bt({Bucket:t,Key:e,Tagging:{TagSet:Et({...r,ManagedBy:"\
75
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,
76
+ send(new wt({Bucket:t,Key:e})),!0}catch(r){if(!(r instanceof vt))throw r;return!1}},
77
+ "deleteObject");var ue=o(()=>({equals:Tt,create:le,replace:Dt,preview:Nt,update:zt,delete:Ft}),"\
78
+ getObjectHandler"),Tt=o((t,e)=>!!t.result&&t.result.lastModified===e.result?.lastModified,
79
+ "equalsResource"),Nt=o(async(t,e)=>{let r=t.parameters,n=e.parameters,s=jt({...r,
80
80
  dependencies:t.dependencies,lastModified:await T(r.filePath)},{...n,dependencies:e.
81
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.
82
+ objectKey}},"previewResource"),Dt=o(async(t,e,r)=>{if(e.result)throw new ht(d,t.
83
83
  entryId,e.entryId);return le(t,r)},"replaceResource"),le=o(async(t,e)=>{let r=t.
84
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(
85
+ n,c,r.tags,t.parameters.tags),{lastModified:s,bucketName:n}},"createResource"),zt=o(
86
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);
87
+ a=At(r,n,e.parameters);return await ye(r.bucketName,s,c,e.parameters.tags),a},"u\
88
+ pdateResource"),Ft=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 Ct(t);return e.
90
+ getTime()},"getLastModifiedTime"),At=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
- 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{createPermission as Lt}from"@ez4/aws-function";import{attachEntry as qt,linkDependency as Mt}from"@ez4/stateful";import{createPolicyDocument as It}from"@ez4/aws-identity";var ge=o(t=>`arn:aws:s3:::${t}`,"buildBucketArn"),de=o(t=>It([{resourceIds:[`arn\
93
+ Updates"),ye=o(async(t,e,r,n)=>{let s=r??{};!Ot(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 qt,linkEntryDependency as Mt}from"@ez4/stateful";import{createPermission as $t}from"@ez4/aws-function";import{createPolicyDocument as Lt}from"@ez4/aws-identity";var ge=o(t=>`arn:aws:s3:::${t}`,"buildBucketArn"),de=o(t=>Lt([{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=qt(t,{type:y,entryId:s,dependencies:[],
97
- parameters:r});return e&&(Lt(t,c,e,{fromService:r.bucketName,getPermission:o(()=>({
97
+ parameters:r});return e&&($t(t,c,e,{fromService:r.bucketName,getPermission:o(()=>({
98
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{linkServiceExtras 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{extras:r,debug:n,handler:s,listener:c}=e,a=Ht(t);return Ut(
103
- Kt,{templateFile:$t(import.meta.dirname,"../lib/event.ts"),filePrefix:"s3",define:{
104
- ...a},handler:s,listener:c,extras:r,debug:n})},"bundleBucketEventFunction");var be=o((t,e,r,n)=>{let{handler:s}=n;return Gt(t,e,r,{handlerName:"s3EntryPoint",
99
+ e.entryId)),c},"createBucket");import{getFunctionState as Wt,tryGetFunctionState as Zt}from"@ez4/aws-function";
100
+ import{linkServiceExtras as Jt}from"@ez4/project/library";import{isRoleState as Be}from"@ez4/aws-identity";
101
+ import{createLogGroup as Qt}from"@ez4/aws-logs";import{createFunction as _t}from"@ez4/aws-function";import{join as Ht}from"node:path";import{getDefinitionsObject as Kt}from"@ez4/project/library";
102
+ import{MappingServiceName as Ut}from"@ez4/aws-function";import{getFunctionBundle as Gt}from"@ez4/aws-common";var ke=o(async(t,e)=>{let{extras:r,debug:n,handler:s,listener:c}=t,a=Kt(e);return Gt(
103
+ Ut,{templateFile:Ht(import.meta.dirname,"../lib/event.ts"),define:a,filePrefix:"\
104
+ s3",handler:s,listener:c,extras:r,debug:n})},"bundleBucketEventFunction");var be=o((t,e,r,n)=>{let{handler:s}=n;return _t(t,e,r,{handlerName:"s3EntryPoint",
105
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,getFunctionBundle:o(
107
- c=>{let a=c.getDependencies();return ke(a,n)},"getFunctionBundle"),getFunctionFiles:o(
108
- ()=>[s.sourceFile,s.dependencies],"getFunctionFiles")})},"createBucketEventFunct\
109
- ion");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(
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.getConnections()),"getFunctionBundle"),getFunctionHash:o(()=>{},"getFunction\
109
+ Hash")})},"createBucketEventFunction");import{getServiceName as N}from"@ez4/project/library";import{getRandomName as Vt}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 Vt(
111
111
  16);return`${r.substring(0,46)}-${n}`},"getBucketName"),z=o((t,e)=>`${D(t.name)}\
112
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
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
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),ze=Jt(t,{retention:a??P.
116
- LogRetention,groupName:A,tags:r.tags});return l=be(t,n.role,ze,{functionName:A,description:s.
117
- description,timeout:u??P.Timeout,memory:k??P.Memory,extras:e.extras,debug:r.debug,
118
- tags:r.tags,variables:{...r.variables,...e.variables,...b},handler:{dependencies:n.
119
- getDependencies(s.file),functionName:s.name,sourceFile:s.file,module:s.module},...c&&
120
- {listener:{functionName:c.name,sourceFile:c.file,module:c.module}}}),n.setServiceState(
121
- l,B,r),l},"prepareEvents"),ve=o((t,e,r,n)=>{if(!e.extras||!e.events)return;if(!n.
122
- role||!Be(n.role))throw new x;let{handler:s}=e.events,c=z(e,s.name),a=Vt(n,c,r);
123
- Zt(t,a.entryId,e.extras)},"connectEvents");import{readdir as Qt}from"node:fs/promises";import{join as Ee,relative as Re}from"node:path";
124
- 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,
115
+ e,s.name),l=Zt(n,B,r);if(l)return l;let A=Pe(e,s.name,r),ze=n.getDependencyFiles(
116
+ s.file),Fe=Qt(t,{retention:a??P.LogRetention,groupName:A,tags:r.tags});return l=
117
+ be(t,n.role,Fe,{functionName:A,description:s.description,timeout:u??P.Timeout,memory:k??
118
+ P.Memory,extras:e.extras,debug:r.debug,tags:r.tags,handler:{sourceFile:s.file,functionName:s.
119
+ name,module:s.module,dependencies:ze},listener:c&&{functionName:c.name,sourceFile:c.
120
+ file,module:c.module},variables:{...r.variables,...e.variables,...b}}),n.setServiceState(
121
+ l,B,r),l},"prepareEvents"),ve=o((t,e,r,n)=>{if(!e.events)return;if(!n.role||!Be(
122
+ n.role))throw new x;let{handler:s}=e.events,c=z(e,s.name),a=Wt(n,c,r);Jt(t,a.entryId,
123
+ e.extras)},"connectEvents");import{readdir as Xt}from"node:fs/promises";import{join as Ee,relative as Re}from"node:path";
124
+ import{createBucketObject as Yt}from"@ez4/aws-bucket";var Ce=o(async(t,e,r)=>{let n=process.cwd(),s=Ee(n,r),c=await Xt(s,{withFileTypes:!0,
125
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);return{entryIds:[n.entryId],constructor:`\
126
+ Yt(t,e,{objectKey:Re(s,u),filePath:Re(n,u)})}},"prepareLocalContent");var he=o((t,e,r)=>{let n=te(t,e.name,r);return{entryIds:[n.entryId],constructor:`\
127
127
  make('${n.parameters.bucketName}')`,from:"@ez4/aws-bucket/client",module:"Client"}},
128
128
  "prepareLinkedClient");var je=o(t=>{let{service:e,options:r,context:n}=t;return F(e)?he(n,e,r):null},"p\
129
129
  repareLinkedServices"),Oe=o(async t=>{let{state:e,service:r,options:n,context:s}=t;
@@ -131,18 +131,18 @@ if(!F(r))return!1;let{localPath:c,autoExpireDays:a,events:u,cors:k}=r,b=await xe
131
131
  r,n),B=we(e,r,n,s),l=Se(e,B,{eventsPath:u?.path,tags:n.tags,bucketName:b,autoExpireDays:a,
132
132
  localPath:c,cors:k});return s.setServiceState(l,r,n),c&&await Ce(e,l,c),!0},"pre\
133
133
  pareBucketServices"),Te=o(t=>{let{state:e,service:r,options:n,context:s}=t;F(r)&&
134
- 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";
135
- 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(
136
- "",n),c=`${s}-bucket-policy`;return tr(e,c)??er(e,{tags:n.tags,policyDocument:de(
137
- s),policyName:c})},"prepareExecutionPolicy");var De=!1,Zn=o(()=>{De||(or(),nr(),sr(),cr(),ar("@ez4/aws-bucket",{"deploy:prepa\
134
+ ve(e,r,n,s)},"connectBucketServices");import{ServiceType as er}from"@ez4/storage/library";import{createPolicy as tr,tryGetPolicy as rr}from"@ez4/aws-identity";
135
+ import{getServiceName as or}from"@ez4/project/library";var Ne=o(t=>{let{state:e,serviceType:r,options:n}=t;if(r!==er)return null;let s=or(
136
+ "",n),c=`${s}-bucket-policy`;return rr(e,c)??tr(e,{tags:n.tags,policyDocument:de(
137
+ s),policyName:c})},"prepareExecutionPolicy");var De=!1,Jn=o(()=>{De||(nr(),sr(),cr(),ar(),ir("@ez4/aws-bucket",{"deploy:prepa\
138
138
  reExecutionPolicy":Ne,"deploy:prepareLinkedService":je,"deploy:prepareResources":Oe,
139
- "deploy:connectResources":Te}),Y(),ie(),fe(),De=!0)},"registerTriggers");import{getRegion as ir}from"@ez4/aws-identity";var Yn=o(t=>/(.+)\.s3\.(.+)\.amazonaws\.com/i.test(t),"isBucketDomain"),es=o(async t=>{
140
- 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,
141
- 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,
139
+ "deploy:connectResources":Te}),Y(),ie(),fe(),De=!0)},"registerTriggers");import{getRegion as pr}from"@ez4/aws-identity";var es=o(t=>/(.+)\.s3\.(.+)\.amazonaws\.com/i.test(t),"isBucketDomain"),ts=o(async t=>{
140
+ let e=await pr();return`${t}.s3.${e}.amazonaws.com`},"getBucketDomain");import{attachEntry as mr}from"@ez4/stateful";import{hashData as ur}from"@ez4/utils";var as=o((t,e,r,n)=>{let s=ur(g,e.entryId,r.entryId);return mr(t,{type:g,entryId:s,
141
+ dependencies:[e.entryId,r.entryId],parameters:n})},"createBucketPolicy");var us=o(t=>t.type===g,"isBucketPolicyState");import{attachEntry as lr}from"@ez4/stateful";import{hashData as yr}from"@ez4/utils";var Ss=o((t,e,r)=>{let n=r.objectKey,s=yr(f,e.entryId,n);return lr(t,{type:f,entryId:s,
142
142
  dependencies:[e.entryId],parameters:r})},"createBucketObject");export{i as BucketServiceName,y as BucketServiceType,d as ObjectServiceName,f as ObjectServiceType,
143
143
  S as PolicyServiceName,g as PolicyServiceType,ge as buildBucketArn,Se as createBucket,
144
- be as createBucketEventFunction,ds as createBucketObject,cs as createBucketPolicy,
145
- ee as createBucketStateId,es as getBucketDomain,E as getBucketName,ao as getBucketObjectFiles,
146
- R as getBucketObjectPath,te as getBucketState,de as getPolicyDocument,Yn as isBucketDomain,
147
- co as isBucketObjectState,ms as isBucketPolicyState,st as isBucketState,Zn as registerTriggers};
144
+ be as createBucketEventFunction,Ss as createBucketObject,as as createBucketPolicy,
145
+ ee as createBucketStateId,ts as getBucketDomain,E as getBucketName,io as getBucketObjectFiles,
146
+ R as getBucketObjectPath,te as getBucketState,de as getPolicyDocument,es as isBucketDomain,
147
+ ao as isBucketObjectState,us as isBucketPolicyState,ct as isBucketState,Jn as registerTriggers};
148
148
  //# sourceMappingURL=main.mjs.map
package/lib/event.ts CHANGED
@@ -78,7 +78,7 @@ const onReady = async (request: Bucket.Incoming) => {
78
78
  );
79
79
  };
80
80
 
81
- const onError = async (error: Error, request: Bucket.Request | Bucket.Incoming) => {
81
+ const onError = async (error: unknown, request: Bucket.Request | Bucket.Incoming) => {
82
82
  console.error(error);
83
83
 
84
84
  return dispatch(
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.28.0",
4
+ "version": "0.30.0",
5
5
  "author": "Silas B.",
6
6
  "license": "MIT",
7
7
  "type": "module",
@@ -28,6 +28,10 @@
28
28
  "import": "./dist/client.mjs"
29
29
  }
30
30
  },
31
+ "sideEffects": [
32
+ "./dist/main.cjs",
33
+ "./dist/main.mjs"
34
+ ],
31
35
  "workspaces": [
32
36
  "foundation/*",
33
37
  "contracts/*",
@@ -42,19 +46,21 @@
42
46
  "clean:registry": "rm -rf ../../../.registry/@ez4/aws-bucket",
43
47
  "live:publish": "npm run build && npm publish --access public"
44
48
  },
45
- "dependencies": {
46
- "@aws-sdk/client-s3": "^3.758.0",
47
- "@aws-sdk/s3-request-presigner": "^3.758.0",
48
- "@ez4/aws-common": "^0.28.0",
49
- "@ez4/aws-function": "^0.28.0",
50
- "@ez4/aws-identity": "^0.28.0",
51
- "@ez4/aws-logs": "^0.28.0",
52
- "@ez4/project": "^0.28.0",
53
- "@ez4/stateful": "^0.28.0",
54
- "@ez4/storage": "^0.28.0",
55
- "@ez4/utils": "^0.28.0",
49
+ "devDependencies": {
56
50
  "@types/aws-lambda": "^8.10.147",
57
- "@types/mime": "^3.0.0",
51
+ "@types/mime": "^3.0.0"
52
+ },
53
+ "dependencies": {
54
+ "@aws-sdk/client-s3": "^3.913.0",
55
+ "@aws-sdk/s3-request-presigner": "^3.913.0",
56
+ "@ez4/aws-common": "^0.30.0",
57
+ "@ez4/aws-function": "^0.30.0",
58
+ "@ez4/aws-identity": "^0.30.0",
59
+ "@ez4/aws-logs": "^0.30.0",
60
+ "@ez4/project": "^0.30.0",
61
+ "@ez4/stateful": "^0.30.0",
62
+ "@ez4/storage": "^0.30.0",
63
+ "@ez4/utils": "^0.30.0",
58
64
  "mime": "^3.0.0"
59
65
  }
60
66
  }