@ez4/aws-bucket 0.26.0 → 0.28.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
- import type { BucketEventFunctionParameters } from './types.js';
2
+ import type { BucketEventFunctionParameters } from './types';
3
3
  export declare const bundleBucketEventFunction: (dependencies: EntryState[], parameters: BucketEventFunctionParameters) => Promise<string>;
@@ -1,5 +1,5 @@
1
1
  import type { EntryState, EntryStates } from '@ez4/stateful';
2
2
  import type { LogGroupState } from '@ez4/aws-logs';
3
3
  import type { RoleState } from '@ez4/aws-identity';
4
- import type { BucketEventFunctionParameters } from './types.js';
4
+ import type { BucketEventFunctionParameters } from './types';
5
5
  export declare const createBucketEventFunction: <E extends EntryState>(state: EntryStates<E>, roleState: RoleState, logGroupState: LogGroupState, parameters: BucketEventFunctionParameters) => import("@ez4/aws-function").FunctionState;
@@ -1,3 +1,3 @@
1
1
  import type { StepHandler } from '@ez4/stateful';
2
- import type { BucketState } from './types.js';
2
+ import type { BucketState } from './types';
3
3
  export declare const getBucketHandler: () => StepHandler<BucketState>;
@@ -1,4 +1,4 @@
1
1
  import type { EntryState, EntryStates } from '@ez4/stateful';
2
2
  import type { FunctionState } from '@ez4/aws-function';
3
- import type { BucketParameters, BucketState } from './types.js';
3
+ import type { BucketParameters, BucketState } from './types';
4
4
  export declare const createBucket: <E extends EntryState>(state: EntryStates<E>, functionState: FunctionState | undefined, parameters: BucketParameters) => BucketState;
@@ -1,7 +1,7 @@
1
1
  import type { Arn, ResourceTags } from '@ez4/aws-common';
2
2
  import type { EntryState } from '@ez4/stateful';
3
3
  import type { Bucket } from '@ez4/storage';
4
- import type { CreateRequest, CreateResponse } from './client.js';
4
+ import type { CreateRequest, CreateResponse } from './client';
5
5
  export declare const BucketServiceName = "AWS:S3/Bucket";
6
6
  export declare const BucketServiceType = "aws:s3.bucket";
7
7
  export type BucketParameters = CreateRequest & {
@@ -1,6 +1,6 @@
1
1
  import type { DeployOptions, EventContext } from '@ez4/project/library';
2
2
  import type { EntryState, StepContext } from '@ez4/stateful';
3
- import type { BucketState } from './types.js';
3
+ import type { BucketState } from './types';
4
4
  export declare const createBucketStateId: (bucketName: string) => string;
5
5
  export declare const isBucketState: (resource: EntryState) => resource is BucketState;
6
6
  export declare const getBucketState: (context: EventContext, bucketName: string, options: DeployOptions) => BucketState;
package/dist/main.cjs CHANGED
@@ -1,11 +1,11 @@
1
- "use strict";var Et=Object.create;var R=Object.defineProperty;var Rt=Object.getOwnPropertyDescriptor;var Ct=Object.getOwnPropertyNames;var jt=Object.getPrototypeOf,ht=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))!ht.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(jt(t)):{},te(e||!t||!t.__esModule?R(r,"default",{value:t,
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
4
  enumerable:!0}):r,t)),Nt=t=>te(R({},"__esModule",{value:!0}),t);var or={};Ot(or,{BucketServiceName:()=>p,BucketServiceType:()=>l,ObjectServiceName:()=>b,
5
5
  ObjectServiceType:()=>f,PolicyServiceName:()=>x,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
- getBucketObjectPath:()=>j,getBucketState:()=>K,getPolicyDocument:()=>Z,isBucketDomain:()=>Xt,
8
+ getBucketObjectPath:()=>h,getBucketState:()=>K,getPolicyDocument:()=>Z,isBucketDomain:()=>Xt,
9
9
  isBucketObjectState:()=>Kt,isBucketPolicyState:()=>tr,isBucketState:()=>Pe,registerTriggers:()=>Qt});
10
10
  module.exports=Nt(or);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.
@@ -28,8 +28,8 @@ m.Logger.logCreate(p,`${t} lifecycle`),await y.send(new a.PutBucketLifecycleConf
28
28
  Filter:{Prefix:"*"},Expiration:{Days:e}}]}}))},"createLifecycle"),pe=o(async t=>{
29
29
  m.Logger.logDelete(p,`${t} lifecycle`);try{return await y.send(new a.DeleteBucketLifecycleCommand(
30
30
  {Bucket:t})),!0}catch(e){if(!(e instanceof a.NoSuchBucket))throw e;return!1}},"d\
31
- eleteLifecycle"),me=o(async(t,e)=>{m.Logger.logUpdate(p,`${t} event notification\
32
- s`);let{functionArn:r,eventsPath:n,eventsType:s}=e;await y.send(new a.PutBucketNotificationConfigurationCommand(
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(
33
33
  {Bucket:t,SkipDestinationValidation:!0,NotificationConfiguration:{...r&&{LambdaFunctionConfigurations:[
34
34
  {Id:"ID0",LambdaFunctionArn:r,Events:s,...n&&{Filter:{Key:{FilterRules:[{Name:"p\
35
35
  refix",Value:n}]}}}}]}}}))},"updateEventNotifications");var le=o(()=>({equals:Dt,create:ye,replace:Ft,preview:zt,update:At,delete:It}),"\
@@ -53,7 +53,7 @@ s"),ge=o(async(t,e,r)=>{if(e.autoExpireDays!==r?.autoExpireDays){if(e.autoExpire
53
53
  return ie(t,e.autoExpireDays);if(r?.autoExpireDays)return pe(t)}},"checkLifecycl\
54
54
  eUpdates"),de=o(async(t,e,r)=>{let n=e??{};!(0,P.deepEqual)(n,r??{})&&await se(t,
55
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.registerProvider)(l,le())},"registerBucketProvider");var he=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(
56
+ "s3:ObjectCreated:*","s3:ObjectRemoved:*"],...e})},"checkEventUpdates");var be=o(()=>{(0,ke.registerProvider)(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
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
58
  type===l,"isBucketState"),K=o((t,e,r)=>{let n=t.getServiceState(e,r);if(!Pe(n))throw new N(
59
59
  e);return n},"getBucketState"),C=o((t,e,r)=>{let n=r.getDependencies(l)[0]?.result;
@@ -62,24 +62,24 @@ 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:je,replace:Mt,preview:qt,update:$t,delete:Ht}),"\
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
66
  getPolicyHandler"),Lt=o((t,e)=>!!t.result&&t.result.bucketName===e.result?.bucketName,
67
67
  "equalsResource"),qt=o(async(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
69
  getRole:!0}});if(s.counts)return{...s,name:r.fromService}},"previewResource"),Mt=o(
70
70
  async(t,e,r)=>{if(e.result)throw new Ee.ReplaceResourceError(x,t.entryId,e.entryId);
71
- return je(t,r)},"replaceResource"),je=o(async(t,e)=>{let r=t.parameters,n=C(x,"p\
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
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,he.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"),j=o((t,e)=>`${t}/${e}`,"getBucketO\
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
76
  bjectPath"),Ut=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
- logCreate(b,j(t,r));let s=Ne.default.getType(n);return await G.send(new u.PutObjectCommand(
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}},
80
- "putObject"),De=o(async(t,e,r)=>{B.Logger.logTag(b,j(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 u.PutObjectTaggingCommand(
81
81
  {Bucket:t,Key:e,Tagging:{TagSet:(0,B.getTagList)({...r,ManagedBy:"EZ4"})}}))},"t\
82
- agObject"),ze=o(async(t,e)=>{B.Logger.logDelete(b,j(t,e));try{return await G.send(
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
84
  throw r;return!1}},"deleteObject");var Ie=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,
@@ -118,9 +118,9 @@ tionFiles")})},"createBucketEventFunction");var A=require("@ez4/project/library"
118
118
  let r=(0,A.getServiceName)(t,e),n=await(0,Je.getRandomName)(16);return`${r.substring(
119
119
  0,46)}-${n}`},"getBucketName"),X=o((t,e)=>`${(0,I.toKebabCase)(t.name)}-${(0,I.toKebabCase)(
120
120
  e)}`,"getInternalName"),Xe=o((t,e,r)=>`${(0,A.getServiceName)(t,r)}-${(0,I.toKebabCase)(
121
- e)}`,"getFunctionName");var h=class extends Error{static{o(this,"RoleMissingError")}constructor(){super(
121
+ e)}`,"getFunctionName");var j=class extends Error{static{o(this,"RoleMissingError")}constructor(){super(
122
122
  "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
- throw new h;let{handler:s,listener:c,logRetention:i,timeout:g,memory:v,variables:E}=e.
123
+ throw new j;let{handler:s,listener:c,logRetention:i,timeout:g,memory:v,variables:E}=e.
124
124
  events,T=X(e,s.name),d=(0,L.tryGetFunctionState)(n,T,r);if(d)return d;let ee=Xe(
125
125
  e,s.name,r),vt=(0,et.createLogGroup)(t,{retention:i??O.LogRetention,groupName:ee,
126
126
  tags:r.tags});return d=Q(t,n.role,vt,{functionName:ee,description:s.description,
@@ -129,7 +129,7 @@ variables:{...r.variables,...e.variables,...E},handler:{dependencies:n.getDepend
129
129
  s.file),functionName:s.name,sourceFile:s.file,module:s.module},...c&&{listener:{
130
130
  functionName:c.name,sourceFile:c.file,module:c.module}}}),n.setServiceState(d,T,
131
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 h;let{handler:s}=e.events,c=X(e,s.name),i=(0,L.getFunctionState)(
132
+ !(0,Y.isRoleState)(n.role))throw new j;let{handler:s}=e.events,c=X(e,s.name),i=(0,L.getFunctionState)(
133
133
  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
134
  s,{withFileTypes:!0,recursive:!0});for(let i of c){if(!i.isFile())continue;let g=(0,w.join)(
135
135
  i.parentPath,i.name);(0,nt.createBucketObject)(t,e,{objectKey:(0,w.relative)(s,g),
package/dist/main.d.ts CHANGED
@@ -1,14 +1,14 @@
1
- export * from './triggers/register.js';
2
- export * from './utils/domain.js';
3
- export * from './utils/policy.js';
4
- export * from './bucket/service.js';
5
- export * from './bucket/types.js';
6
- export * from './bucket/utils.js';
7
- export * from './bucket/function/service.js';
8
- export * from './bucket/function/types.js';
9
- export * from './policy/service.js';
10
- export * from './policy/types.js';
11
- export * from './policy/utils.js';
12
- export * from './object/service.js';
13
- export * from './object/types.js';
14
- export * from './object/utils.js';
1
+ export * from './triggers/register';
2
+ export * from './utils/domain';
3
+ export * from './utils/policy';
4
+ export * from './bucket/service';
5
+ export * from './bucket/types';
6
+ export * from './bucket/utils';
7
+ export * from './bucket/function/service';
8
+ export * from './bucket/function/types';
9
+ export * from './policy/service';
10
+ export * from './policy/types';
11
+ export * from './policy/utils';
12
+ export * from './object/service';
13
+ export * from './object/types';
14
+ export * from './object/utils';
package/dist/main.mjs CHANGED
@@ -22,10 +22,10 @@ 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
23
  p.logDelete(i,`${t} lifecycle`);try{return await m.send(new Ge({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} event notifications`);let{functionArn:r,eventsPath:n,eventsType:s}=e;await m.
26
- send(new _e({Bucket:t,SkipDestinationValidation:!0,NotificationConfiguration:{...r&&
27
- {LambdaFunctionConfigurations:[{Id:"ID0",LambdaFunctionArn:r,Events:s,...n&&{Filter:{
28
- Key:{FilterRules:[{Name:"prefix",Value:n}]}}}}]}}}))},"updateEventNotifications");var V=o(()=>({equals:Je,create:W,replace:Xe,preview:Qe,update:Ye,delete:et}),"ge\
25
+ i,`${t} events`);let{functionArn:r,eventsPath:n,eventsType:s}=e;await m.send(new _e(
26
+ {Bucket:t,SkipDestinationValidation:!0,NotificationConfiguration:{...r&&{LambdaFunctionConfigurations:[
27
+ {Id:"ID0",LambdaFunctionArn:r,Events:s,...n&&{Filter:{Key:{FilterRules:[{Name:"p\
28
+ refix",Value:n}]}}}}]}}}))},"updateEventNotifications");var V=o(()=>({equals:Je,create:W,replace:Xe,preview:Qe,update:Ye,delete:et}),"ge\
29
29
  tBucketHandler"),Je=o((t,e)=>!!t.result&&t.result.bucketName===e.result?.bucketName,
30
30
  "equalsResource"),Qe=o(async(t,e)=>{let r={...t.parameters,dependencies:t.dependencies},
31
31
  n={...e.parameters,dependencies:e.dependencies},s=Ze(r,n);if(s.counts)return{...s,
@@ -64,19 +64,19 @@ ae=o(async(t,e)=>{let r=t.parameters,n=E(S,"policy",e),s=await r.getRole(e);retu
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
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 jt,deepEqual as ht}from"@ez4/utils";import{createReadStream as kt}from"node:fs";import{S3Client as bt,PutObjectCommand as xt,
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
68
  PutObjectTaggingCommand as Pt,DeleteObjectCommand as Bt,NoSuchBucket as wt}from"@aws-sdk/client-s3";
69
- import{getTagList as vt,Logger as j}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\
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
- lastModified,objectKey:n.objectKey})),"getBucketObjectFiles");var h=new bt({}),O=o(async(t,e)=>{let{objectKey:r,filePath:n}=e;j.logCreate(d,R(
72
- t,r));let s=Et.getType(n);return await h.send(new xt({Bucket:t,Key:r,Body:kt(n),
73
- ...s&&{ContentType:s}})),{objectKey:r}},"putObject"),pe=o(async(t,e,r)=>{j.logTag(
74
- d,R(t,e)),await h.send(new Pt({Bucket:t,Key:e,Tagging:{TagSet:vt({...r,ManagedBy:"\
75
- EZ4"})}}))},"tagObject"),me=o(async(t,e)=>{j.logDelete(d,R(t,e));try{return await h.
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),
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:"\
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}),"\
78
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=jt({...r,
79
+ "equalsResource"),Tt=o(async(t,e)=>{let r=t.parameters,n=e.parameters,s=ht({...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
82
  objectKey}},"previewResource"),Nt=o(async(t,e,r)=>{if(e.result)throw new Ct(d,t.
@@ -90,7 +90,7 @@ r.objectKey)},"deleteResource"),T=o(async t=>{let{mtime:e}=await Rt(t);return e.
90
90
  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
- Updates"),ye=o(async(t,e,r,n)=>{let s=r??{};!ht(s,n??{})&&await pe(t,e,s)},"chec\
93
+ Updates"),ye=o(async(t,e,r,n)=>{let s=r??{};!jt(s,n??{})&&await pe(t,e,s)},"chec\
94
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\
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:[],
@@ -123,9 +123,9 @@ role||!Be(n.role))throw new x;let{handler:s}=e.events,c=z(e,s.name),a=Vt(n,c,r);
123
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
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,
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 je=o((t,e,r)=>{let n=te(t,e.name,r);return{entryIds:[n.entryId],constructor:`\
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:`\
127
127
  make('${n.parameters.bucketName}')`,from:"@ez4/aws-bucket/client",module:"Client"}},
128
- "prepareLinkedClient");var he=o(t=>{let{service:e,options:r,context:n}=t;return F(e)?je(n,e,r):null},"p\
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;
130
130
  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,
@@ -135,7 +135,7 @@ ve(e,r,n,s)},"connectBucketServices");import{ServiceType as Yt}from"@ez4/storage
135
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
136
  "",n),c=`${s}-bucket-policy`;return tr(e,c)??er(e,{tags:n.tags,policyDocument:de(
137
137
  s),policyName:c})},"prepareExecutionPolicy");var De=!1,Zn=o(()=>{De||(or(),nr(),sr(),cr(),ar("@ez4/aws-bucket",{"deploy:prepa\
138
- reExecutionPolicy":Ne,"deploy:prepareLinkedService":he,"deploy:prepareResources":Oe,
138
+ reExecutionPolicy":Ne,"deploy:prepareLinkedService":je,"deploy:prepareResources":Oe,
139
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
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
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,
@@ -1,3 +1,3 @@
1
1
  import type { StepHandler } from '@ez4/stateful';
2
- import type { ObjectState } from './types.js';
2
+ import type { ObjectState } from './types';
3
3
  export declare const getObjectHandler: () => StepHandler<ObjectState>;
@@ -1,4 +1,4 @@
1
1
  import type { EntryState, EntryStates } from '@ez4/stateful';
2
- import type { BucketState } from '../bucket/types.js';
3
- import type { ObjectParameters, ObjectState } from './types.js';
2
+ import type { BucketState } from '../bucket/types';
3
+ import type { ObjectParameters, ObjectState } from './types';
4
4
  export declare const createBucketObject: <E extends EntryState>(state: EntryStates<E>, bucketState: BucketState, parameters: ObjectParameters) => ObjectState;
@@ -1,6 +1,6 @@
1
1
  import type { ResourceTags } from '@ez4/aws-common';
2
2
  import type { EntryState } from '@ez4/stateful';
3
- import type { CreateRequest } from './client.js';
3
+ import type { CreateRequest } from './client';
4
4
  export declare const ObjectServiceName = "AWS:S3/Object";
5
5
  export declare const ObjectServiceType = "aws:s3.object";
6
6
  export type ObjectParameters = CreateRequest & {
@@ -1,5 +1,5 @@
1
1
  import type { EntryState, StepContext } from '@ez4/stateful';
2
- import type { ObjectState } from './types.js';
2
+ import type { ObjectState } from './types';
3
3
  export declare const isBucketObjectState: (resource: EntryState) => resource is ObjectState;
4
4
  export declare const getBucketObjectPath: (bucketName: string, objectKey: string) => string;
5
5
  export declare const getBucketObjectFiles: (context: StepContext) => {
@@ -1,3 +1,3 @@
1
1
  import type { StepHandler } from '@ez4/stateful';
2
- import type { PolicyState } from './types.js';
2
+ import type { PolicyState } from './types';
3
3
  export declare const getPolicyHandler: () => StepHandler<PolicyState>;
@@ -1,4 +1,4 @@
1
1
  import type { EntryState, EntryStates } from '@ez4/stateful';
2
- import type { BucketState } from '../bucket/types.js';
3
- import type { PolicyParameters, PolicyState } from './types.js';
2
+ import type { BucketState } from '../bucket/types';
3
+ import type { PolicyParameters, PolicyState } from './types';
4
4
  export declare const createBucketPolicy: <E extends EntryState>(state: EntryStates<E>, sourceState: EntryState, bucketState: BucketState, parameters: PolicyParameters) => PolicyState;
@@ -1,6 +1,6 @@
1
1
  import type { RoleDocument } from '@ez4/aws-identity';
2
2
  import type { EntryState, StepContext } from '@ez4/stateful';
3
- import type { CreateResponse } from './client.js';
3
+ import type { CreateResponse } from './client';
4
4
  export declare const PolicyServiceName = "AWS:S3/Policy";
5
5
  export declare const PolicyServiceType = "aws:s3.policy";
6
6
  export type GetRole = (context: StepContext) => Promise<RoleDocument> | RoleDocument;
@@ -1,3 +1,3 @@
1
1
  import type { EntryState } from '@ez4/stateful';
2
- import type { PolicyState } from './types.js';
2
+ import type { PolicyState } from './types';
3
3
  export declare const isBucketPolicyState: (resource: EntryState) => resource is PolicyState;
package/lib/event.ts CHANGED
@@ -10,7 +10,7 @@ declare function dispatch(event: Bucket.ServiceEvent, context: object): Promise<
10
10
  declare function handle(event: Bucket.Event, context: object): Promise<any>;
11
11
 
12
12
  /**
13
- * Entrypoint to handle S3 notifications.
13
+ * Entrypoint to handle S3 events.
14
14
  */
15
15
  export async function s3EntryPoint(event: S3Event, context: Context): Promise<void> {
16
16
  let currentRequest: Bucket.Incoming | undefined;
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.26.0",
4
+ "version": "0.28.0",
5
5
  "author": "Silas B.",
6
6
  "license": "MIT",
7
7
  "type": "module",
@@ -29,15 +29,15 @@
29
29
  }
30
30
  },
31
31
  "workspaces": [
32
- "packages/*"
32
+ "foundation/*",
33
+ "contracts/*",
34
+ "providers/aws/*"
33
35
  ],
34
36
  "scripts": {
35
37
  "lint": "eslint --cache",
36
38
  "clean": "rm -f *.tsbuildinfo && rm -rf dist/*",
37
- "build": "tsc -p tsconfig.json && node tools/bundler.mjs",
38
- "test": "npm run test:types && node --env-file ../../../local.env --test --import ../../../tools/tsnode.mjs test/*.spec.ts",
39
- "test:only": "npm run test:types && node --env-file ../../../local.env --test-only --test --import ../../../tools/tsnode.mjs test/*.spec.ts",
40
- "test:types": "npm run build && tsc -p tsconfig.test.json",
39
+ "build": "tsc && node tools/bundler.mjs",
40
+ "test": "npm run build && tsc -p tsconfig.test.json && ez4 test -e ../../../local.env",
41
41
  "local:publish": "npm run build && npm run clean:registry && npm publish --registry http://localhost:4873",
42
42
  "clean:registry": "rm -rf ../../../.registry/@ez4/aws-bucket",
43
43
  "live:publish": "npm run build && npm publish --access public"
@@ -45,14 +45,14 @@
45
45
  "dependencies": {
46
46
  "@aws-sdk/client-s3": "^3.758.0",
47
47
  "@aws-sdk/s3-request-presigner": "^3.758.0",
48
- "@ez4/aws-common": "^0.26.0",
49
- "@ez4/aws-function": "^0.26.0",
50
- "@ez4/aws-identity": "^0.26.0",
51
- "@ez4/aws-logs": "^0.26.0",
52
- "@ez4/project": "^0.26.0",
53
- "@ez4/stateful": "^0.26.0",
54
- "@ez4/storage": "^0.26.0",
55
- "@ez4/utils": "^0.26.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",
56
56
  "@types/aws-lambda": "^8.10.147",
57
57
  "@types/mime": "^3.0.0",
58
58
  "mime": "^3.0.0"