@ez4/aws-bucket 0.23.0 → 0.24.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,6 +1,6 @@
1
1
  import type { Arn, ResourceTags } from '@ez4/aws-common';
2
+ import type { Event } from '@aws-sdk/client-s3';
2
3
  import type { Bucket } from '@ez4/storage';
3
- import { Event } from '@aws-sdk/client-s3';
4
4
  export type CreateRequest = {
5
5
  bucketName: string;
6
6
  };
@@ -3,6 +3,7 @@ import type { ExtraSource } from '@ez4/project/library';
3
3
  export type BucketEventFunction = {
4
4
  functionName: string;
5
5
  sourceFile: string;
6
+ module?: string;
6
7
  };
7
8
  export type BucketEventEntryPoint = BucketEventFunction & {
8
9
  dependencies: string[];
package/dist/client.cjs CHANGED
@@ -2,7 +2,7 @@
2
2
  typeof o=="object"||typeof o=="function")for(let e of C(o))!O.call(t,e)&&e!==s&&
3
3
  p(t,e,{get:()=>o[e],enumerable:!(n=B(o,e))||n.enumerable});return t};var T=(t,o,s)=>(s=t!=null?f(l(t)):{},g(o||!t||!t.__esModule?p(s,"default",{value:t,
4
4
  enumerable:!0}):s,t)),K=t=>g(p({},"__esModule",{value:!0}),t);var h={};S(h,{Client:()=>w});module.exports=K(h);var y=require("@aws-sdk/s3-request-presigner"),
5
- r=require("@aws-sdk/client-s3"),d=T(require("mime/lite.js"),1);var c=new r.S3Client({}),w;(o=>o.make=m(s=>new class{async exists(n){return!!await this.
5
+ r=require("@aws-sdk/client-s3"),d=T(require("mime"),1);var c=new r.S3Client({}),w;(o=>o.make=m(s=>new class{async exists(n){return!!await this.
6
6
  getStats(n)}async write(n,e,i){let a=i?.contentType??d.default.getType(n);await c.
7
7
  send(new r.PutObjectCommand({Bucket:s,Key:n,Body:e,...a&&{ContentType:a}}))}async read(n){
8
8
  let i=await(await c.send(new r.GetObjectCommand({Bucket:s,Key:n}))).Body.transformToByteArray();
package/dist/client.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  var d=Object.defineProperty;var c=(a,i)=>d(a,"name",{value:i,configurable:!0});import{getSignedUrl as p}from"@aws-sdk/s3-request-presigner";import{HeadObjectCommand as w,
2
2
  PutObjectCommand as y,GetObjectCommand as m,DeleteObjectCommand as u,NotFound as f,
3
- S3Client as B,NoSuchKey as C}from"@aws-sdk/client-s3";import l from"mime/lite.js";var s=new B({}),O;(i=>i.make=c(r=>new class{async exists(e){return!!await this.getStats(
3
+ S3Client as B,NoSuchKey as C}from"@aws-sdk/client-s3";import l from"mime";var s=new B({}),O;(i=>i.make=c(r=>new class{async exists(e){return!!await this.getStats(
4
4
  e)}async write(e,t,n){let o=n?.contentType??l.getType(e);await s.send(new y({Bucket:r,
5
5
  Key:e,Body:t,...o&&{ContentType:o}}))}async read(e){let n=await(await s.send(new m(
6
6
  {Bucket:r,Key:e}))).Body.transformToByteArray();return Buffer.from(n)}async delete(e){
package/dist/main.cjs CHANGED
@@ -126,11 +126,11 @@ 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,
127
127
  timeout:g??O.Timeout,memory:v??O.Memory,extras:e.extras,debug:r.debug,tags:r.tags,
128
128
  variables:{...r.variables,...e.variables,...E},handler:{dependencies:n.getDependencies(
129
- s.file),functionName:s.name,sourceFile:s.file},...c&&{listener:{functionName:c.name,
130
- sourceFile:c.file}}}),n.setServiceState(d,T,r),d},"prepareEvents"),rt=o((t,e,r,n)=>{
131
- if(!e.extras||!e.events)return;if(!n.role||!(0,Y.isRoleState)(n.role))throw new h;
132
- let{handler:s}=e.events,c=X(e,s.name),i=(0,L.getFunctionState)(n,c,r);(0,Ye.linkServiceExtras)(
133
- 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)(
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 h;let{handler:s}=e.events,c=X(e,s.name),i=(0,L.getFunctionState)(
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),
136
136
  filePath:(0,w.relative)(n,g)})}},"prepareLocalContent");var ct=o((t,e,r)=>{let n=K(t,e.name,r);return{entryIds:[n.entryId],constructor:`\
package/dist/main.mjs CHANGED
@@ -66,8 +66,8 @@ 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
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,
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 io=o(t=>t.type===f,"isBucketObjectState"),R=o((t,e)=>`${t}/${e}`,"getBucketO\
70
- bjectPath"),po=o(t=>t.getDependencies(f).map(({result:r,parameters:n})=>({lastModified:r?.
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\
70
+ bjectPath"),ao=o(t=>t.getDependencies(f).map(({result:r,parameters:n})=>({lastModified:r?.
71
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
72
  t,r));let s=Et.getType(n);return await h.send(new xt({Bucket:t,Key:r,Body:kt(n),
73
73
  ...s&&{ContentType:s}})),{objectKey:r}},"putObject"),pe=o(async(t,e,r)=>{j.logTag(
@@ -116,11 +116,11 @@ 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
116
  LogRetention,groupName:A,tags:r.tags});return l=be(t,n.role,ze,{functionName:A,description:s.
117
117
  description,timeout:u??P.Timeout,memory:k??P.Memory,extras:e.extras,debug:r.debug,
118
118
  tags:r.tags,variables:{...r.variables,...e.variables,...b},handler:{dependencies:n.
119
- getDependencies(s.file),functionName:s.name,sourceFile:s.file},...c&&{listener:{
120
- functionName:c.name,sourceFile:c.file}}}),n.setServiceState(l,B,r),l},"prepareEv\
121
- ents"),ve=o((t,e,r,n)=>{if(!e.extras||!e.events)return;if(!n.role||!Be(n.role))throw new x;
122
- let{handler:s}=e.events,c=z(e,s.name),a=Vt(n,c,r);Zt(t,a.entryId,e.extras)},"con\
123
- nectEvents");import{readdir as Qt}from"node:fs/promises";import{join as Ee,relative as Re}from"node:path";
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
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
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:`\
@@ -134,15 +134,15 @@ pareBucketServices"),Te=o(t=>{let{state:e,service:r,options:n,context:s}=t;F(r)&
134
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
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
- s),policyName:c})},"prepareExecutionPolicy");var De=!1,Qn=o(()=>{De||(or(),nr(),sr(),cr(),ar("@ez4/aws-bucket",{"deploy:prepa\
137
+ s),policyName:c})},"prepareExecutionPolicy");var De=!1,Zn=o(()=>{De||(or(),nr(),sr(),cr(),ar("@ez4/aws-bucket",{"deploy:prepa\
138
138
  reExecutionPolicy":Ne,"deploy:prepareLinkedService":he,"deploy:prepareResources":Oe,
139
- "deploy:connectResources":Te}),Y(),ie(),fe(),De=!0)},"registerTriggers");import{getRegion as ir}from"@ez4/aws-identity";var ts=o(t=>/(.+)\.s3\.(.+)\.amazonaws\.com/i.test(t),"isBucketDomain"),rs=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 is=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 ls=o(t=>t.type===g,"isBucketPolicyState");import{attachEntry as ur}from"@ez4/stateful";import{hashData as lr}from"@ez4/utils";var ks=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 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,
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,ks as createBucketObject,is as createBucketPolicy,
145
- ee as createBucketStateId,rs as getBucketDomain,E as getBucketName,po as getBucketObjectFiles,
146
- R as getBucketObjectPath,te as getBucketState,de as getPolicyDocument,ts as isBucketDomain,
147
- io as isBucketObjectState,ls as isBucketPolicyState,st as isBucketState,Qn as registerTriggers};
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};
148
148
  //# sourceMappingURL=main.mjs.map
@@ -1,5 +1,5 @@
1
1
  import type { EntryState, StepContext } from '@ez4/stateful';
2
- import { ObjectState } from './types.js';
2
+ import type { ObjectState } from './types.js';
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,4 +1,4 @@
1
1
  import type { EntryState, EntryStates } from '@ez4/stateful';
2
+ import type { BucketState } from '../bucket/types.js';
2
3
  import type { PolicyParameters, PolicyState } from './types.js';
3
- import { BucketState } from '../main.js';
4
4
  export declare const createBucketPolicy: <E extends EntryState>(state: EntryStates<E>, sourceState: EntryState, bucketState: BucketState, parameters: PolicyParameters) => PolicyState;
@@ -1,3 +1,3 @@
1
1
  import type { BucketState } from '@ez4/aws-bucket';
2
- import { EntryStates } from '@ez4/stateful';
2
+ import type { EntryStates } from '@ez4/stateful';
3
3
  export declare const prepareLocalContent: (state: EntryStates, bucketState: BucketState, localPath: string) => Promise<void>;
@@ -1,5 +1,5 @@
1
+ import type { BucketService } from '@ez4/storage/library';
1
2
  import type { DeployOptions } from '@ez4/project/library';
2
- import { BucketService } from '@ez4/storage/library';
3
3
  export declare const getBucketName: (service: BucketService, options: DeployOptions) => Promise<string>;
4
4
  export declare const getInternalName: (service: BucketService, suffixName: string) => string;
5
5
  export declare const getFunctionName: (service: BucketService, handlerName: string, options: DeployOptions) => string;
package/lib/event.ts CHANGED
@@ -1,5 +1,4 @@
1
1
  import type { S3Event, Context } from 'aws-lambda';
2
- import type { Service } from '@ez4/common';
3
2
  import type { Bucket } from '@ez4/storage';
4
3
 
5
4
  import { ServiceEventType } from '@ez4/common';
@@ -7,14 +6,14 @@ import { BucketEventType } from '@ez4/storage';
7
6
 
8
7
  declare const __EZ4_CONTEXT: object;
9
8
 
10
- declare function dispatch(event: Service.Event<Bucket.Event>, context: object): Promise<void>;
9
+ declare function dispatch(event: Bucket.ServiceEvent, context: object): Promise<void>;
11
10
  declare function handle(event: Bucket.Event, context: object): Promise<any>;
12
11
 
13
12
  /**
14
13
  * Entrypoint to handle S3 notifications.
15
14
  */
16
15
  export async function s3EntryPoint(event: S3Event, context: Context): Promise<void> {
17
- let currentRequest: Bucket.Event | undefined;
16
+ let currentRequest: Bucket.Incoming | undefined;
18
17
 
19
18
  const request = {
20
19
  requestId: context.awsRequestId
@@ -59,7 +58,7 @@ const getKnownEventType = (eventName: string) => {
59
58
  throw new Error(`Event type ${eventName} isn't supported.`);
60
59
  };
61
60
 
62
- const onBegin = async (request: Partial<Bucket.Incoming>) => {
61
+ const onBegin = async (request: Bucket.Request) => {
63
62
  return dispatch(
64
63
  {
65
64
  type: ServiceEventType.Begin,
@@ -69,7 +68,7 @@ const onBegin = async (request: Partial<Bucket.Incoming>) => {
69
68
  );
70
69
  };
71
70
 
72
- const onReady = async (request: Partial<Bucket.Incoming>) => {
71
+ const onReady = async (request: Bucket.Incoming) => {
73
72
  return dispatch(
74
73
  {
75
74
  type: ServiceEventType.Ready,
@@ -79,7 +78,7 @@ const onReady = async (request: Partial<Bucket.Incoming>) => {
79
78
  );
80
79
  };
81
80
 
82
- const onError = async (error: Error, request: Partial<Bucket.Incoming>) => {
81
+ const onError = async (error: Error, request: Bucket.Request | Bucket.Incoming) => {
83
82
  console.error(error);
84
83
 
85
84
  return dispatch(
@@ -92,7 +91,7 @@ const onError = async (error: Error, request: Partial<Bucket.Incoming>) => {
92
91
  );
93
92
  };
94
93
 
95
- const onEnd = async (request: Partial<Bucket.Incoming>) => {
94
+ const onEnd = async (request: Bucket.Request) => {
96
95
  return dispatch(
97
96
  {
98
97
  type: ServiceEventType.End,
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.23.0",
4
+ "version": "0.24.0",
5
5
  "author": "Silas B.",
6
6
  "license": "MIT",
7
7
  "type": "module",
@@ -32,6 +32,7 @@
32
32
  "packages/*"
33
33
  ],
34
34
  "scripts": {
35
+ "lint": "eslint --cache",
35
36
  "clean": "rm -f *.tsbuildinfo && rm -rf dist/*",
36
37
  "build": "tsc -p tsconfig.json && node tools/bundler.mjs",
37
38
  "test": "npm run test:types && node --env-file ../../../local.env --test --import ../../../tools/tsnode.mjs test/*.spec.ts",
@@ -44,14 +45,14 @@
44
45
  "dependencies": {
45
46
  "@aws-sdk/client-s3": "^3.758.0",
46
47
  "@aws-sdk/s3-request-presigner": "^3.758.0",
47
- "@ez4/aws-common": "^0.23.0",
48
- "@ez4/aws-function": "^0.23.0",
49
- "@ez4/aws-identity": "^0.23.0",
50
- "@ez4/aws-logs": "^0.23.0",
51
- "@ez4/project": "^0.23.0",
52
- "@ez4/stateful": "^0.23.0",
53
- "@ez4/storage": "^0.23.0",
54
- "@ez4/utils": "^0.23.0",
48
+ "@ez4/aws-common": "^0.24.0",
49
+ "@ez4/aws-function": "^0.24.0",
50
+ "@ez4/aws-identity": "^0.24.0",
51
+ "@ez4/aws-logs": "^0.24.0",
52
+ "@ez4/project": "^0.24.0",
53
+ "@ez4/stateful": "^0.24.0",
54
+ "@ez4/storage": "^0.24.0",
55
+ "@ez4/utils": "^0.24.0",
55
56
  "@types/aws-lambda": "^8.10.147",
56
57
  "@types/mime": "^3.0.0",
57
58
  "mime": "^3.0.0"