@ez4/aws-bucket 0.4.0 → 0.5.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.
@@ -4,8 +4,9 @@ export type CreateRequest = {
4
4
  };
5
5
  export type CreateResponse = {
6
6
  bucketName: string;
7
- location: string;
8
7
  };
9
8
  export declare const createBucket: (request: CreateRequest) => Promise<CreateResponse>;
10
9
  export declare const tagBucket: (bucketName: string, tags: ResourceTags) => Promise<void>;
10
+ export declare const createLifecycle: (bucketName: string, autoExpireDays: number) => Promise<void>;
11
+ export declare const deleteLifecycle: (bucketName: string) => Promise<void>;
11
12
  export declare const deleteBucket: (bucketName: string) => Promise<void>;
@@ -0,0 +1 @@
1
+ export declare const registerBucketProvider: () => void;
@@ -1,4 +1,3 @@
1
1
  import type { EntryState, EntryStates } from '@ez4/stateful';
2
2
  import type { BucketParameters, BucketState } from './types.js';
3
- export declare const isBucket: (resource: EntryState) => resource is BucketState;
4
3
  export declare const createBucket: <E extends EntryState>(state: EntryStates<E>, parameters: BucketParameters) => BucketState;
@@ -4,11 +4,11 @@ import type { CreateRequest, CreateResponse } from './client.js';
4
4
  export declare const BucketServiceName = "AWS:S3/Bucket";
5
5
  export declare const BucketServiceType = "aws:s3.bucket";
6
6
  export type BucketParameters = CreateRequest & {
7
+ autoExpireDays?: number;
8
+ localPath?: string;
7
9
  tags?: ResourceTags;
8
10
  };
9
- export type BucketResult = CreateResponse & {
10
- bucketName: string;
11
- };
11
+ export type BucketResult = CreateResponse;
12
12
  export type BucketState = EntryState & {
13
13
  type: typeof BucketServiceType;
14
14
  parameters: BucketParameters;
@@ -0,0 +1,7 @@
1
+ import type { EntryState, EntryStates, StepContext } from '@ez4/stateful';
2
+ import type { BucketState } from './types.js';
3
+ export declare const isBucketState: (resource: EntryState) => resource is BucketState;
4
+ export declare const getBucketStateId: (bucketName: string) => string;
5
+ export declare const getBucketState: (state: EntryStates, bucketName: string) => BucketState;
6
+ export declare const getBucketDomain: (bucketName: string) => Promise<string>;
7
+ export declare const getBucketName: <E extends EntryState>(serviceName: string, resourceId: string, context: StepContext<E | BucketState>) => any;
@@ -0,0 +1,15 @@
1
+ "use strict";var u=Object.create;var c=Object.defineProperty;var f=Object.getOwnPropertyDescriptor;var B=Object.getOwnPropertyNames;var l=Object.getPrototypeOf,C=Object.prototype.hasOwnProperty;var O=(n,s)=>{for(var r in s)c(n,r,{get:s[r],enumerable:!0})},y=(n,s,r,o)=>{if(s&&
2
+ typeof s=="object"||typeof s=="function")for(let e of B(s))!C.call(n,e)&&e!==r&&
3
+ c(n,e,{get:()=>s[e],enumerable:!(o=f(s,e))||o.enumerable});return n};var S=(n,s,r)=>(r=n!=null?u(l(n)):{},y(s||!n||!n.__esModule?c(r,"default",{value:n,
4
+ enumerable:!0}):r,n)),K=n=>y(c({},"__esModule",{value:!0}),n);var T={};O(T,{Client:()=>g});module.exports=K(T);var m=require("@aws-sdk/s3-request-presigner"),
5
+ t=require("@aws-sdk/client-s3"),p=S(require("mime/lite"),1),a=new t.S3Client({}),
6
+ g;(s=>s.make=r=>new class{async exists(o){try{return await a.send(new t.HeadObjectCommand(
7
+ {Bucket:r,Key:o})),!0}catch(e){if(e instanceof t.NotFound||e instanceof t.NoSuchKey)
8
+ return!1;throw e}}async write(o,e){let i=p.default.getType(o);await a.send(new t.PutObjectCommand(
9
+ {Bucket:r,Key:o,Body:e,...i&&{ContentType:i}}))}async read(o){let i=await(await a.
10
+ send(new t.GetObjectCommand({Bucket:r,Key:o}))).Body.transformToByteArray();return Buffer.
11
+ from(i)}async delete(o){await a.send(new t.DeleteObjectCommand({Bucket:r,Key:o}))}async getWriteUrl(o,e){
12
+ let{expiresIn:i,contentType:d}=e,w=new t.PutObjectCommand({Bucket:r,Key:o,ContentType:d});
13
+ return(0,m.getSignedUrl)(a,w,{signableHeaders:new Set(["content-type"]),expiresIn:i})}async getReadUrl(o,e){
14
+ let{expiresIn:i}=e,d=new t.GetObjectCommand({Bucket:r,Key:o});return(0,m.getSignedUrl)(
15
+ a,d,{expiresIn:i})}})(g||={});0&&(module.exports={Client});
@@ -0,0 +1,4 @@
1
+ import type { Client as BucketClient } from '@ez4/storage';
2
+ export declare namespace Client {
3
+ const make: (bucketName: string) => BucketClient;
4
+ }
@@ -0,0 +1,12 @@
1
+ import{getSignedUrl as i}from"@aws-sdk/s3-request-presigner";import{HeadObjectCommand as y,
2
+ PutObjectCommand as a,GetObjectCommand as c,DeleteObjectCommand as p,NotFound as g,
3
+ S3Client as w,NoSuchKey as u}from"@aws-sdk/client-s3";import f from"mime/lite";var o=new w(
4
+ {}),B;(d=>d.make=r=>new class{async exists(e){try{return await o.send(new y({Bucket:r,
5
+ Key:e})),!0}catch(t){if(t instanceof g||t instanceof u)return!1;throw t}}async write(e,t){
6
+ let n=f.getType(e);await o.send(new a({Bucket:r,Key:e,Body:t,...n&&{ContentType:n}}))}async read(e){
7
+ let n=await(await o.send(new c({Bucket:r,Key:e}))).Body.transformToByteArray();return Buffer.
8
+ from(n)}async delete(e){await o.send(new p({Bucket:r,Key:e}))}async getWriteUrl(e,t){
9
+ let{expiresIn:n,contentType:s}=t,m=new a({Bucket:r,Key:e,ContentType:s});return i(
10
+ o,m,{signableHeaders:new Set(["content-type"]),expiresIn:n})}async getReadUrl(e,t){
11
+ let{expiresIn:n}=t,s=new c({Bucket:r,Key:e});return i(o,s,{expiresIn:n})}})(B||=
12
+ {});export{B as Client};
package/dist/main.cjs CHANGED
@@ -1,38 +1,81 @@
1
- "use strict";var k=Object.defineProperty;var Z=Object.getOwnPropertyDescriptor;var $=Object.getOwnPropertyNames;var _=Object.prototype.hasOwnProperty;var F=(e,t)=>{for(var r in t)k(e,r,{get:t[r],enumerable:!0})},G=(e,t,r,o)=>{if(t&&
2
- typeof t=="object"||typeof t=="function")for(let c of $(t))!_.call(e,c)&&c!==r&&
3
- k(e,c,{get:()=>t[c],enumerable:!(o=Z(t,c))||o.enumerable});return e};var J=e=>G(k({},"__esModule",{value:!0}),e);var ie={};F(ie,{BucketServiceName:()=>m,BucketServiceType:()=>a,ObjectServiceName:()=>s,
4
- ObjectServiceType:()=>u,createBucket:()=>pe,createBucketObject:()=>ue,isBucket:()=>ne,
5
- isBucketObject:()=>me});module.exports=J(ie);var d=require("@ez4/aws-common");var C=require("@ez4/aws-common"),E=require("@ez4/utils");var i=require("@ez4/aws-common"),n=require("@aws-sdk/client-s3");var m="AWS:S3/Bucket",a="aws:s3.bucket";var l=new n.S3Client({}),R=async e=>{i.Logger.logCreate(m,e.bucketName);let t=await l.
6
- send(new n.CreateBucketCommand({Bucket:e.bucketName}));return{bucketName:e.bucketName,
7
- location:t.Location}},x=async(e,t)=>{i.Logger.logTag(m,e),await l.send(new n.PutBucketTaggingCommand(
8
- {Bucket:e,Tagging:{TagSet:(0,i.getTagList)({...t,ManagedBy:"EZ4"})}}))},w=async e=>{
9
- i.Logger.logDelete(m,e),await l.send(new n.DeleteBucketCommand({Bucket:e}))};var T=()=>({equals:Q,create:P,replace:X,preview:V,update:Y,delete:ee}),Q=(e,t)=>!!e.
10
- result&&e.result.bucketName===t.result?.bucketName,V=async(e,t)=>{let r={...e.parameters,
11
- dependencies:e.dependencies},o={...t.parameters,dependencies:t.dependencies},c=(0,E.deepCompare)(
12
- r,o);if(c.counts)return{...c,name:r.bucketName}},X=async(e,t)=>{if(t.result)throw new C.ReplaceResourceError(
13
- m,e.entryId,t.entryId);return P(e)},P=async e=>{let t=e.parameters,r=await R(t);
14
- return await N(r.bucketName,t),{bucketName:r.bucketName,location:r.location}},Y=async(e,t)=>{
15
- let r=e.result;r&&await N(r.bucketName,e.parameters)},ee=async e=>{let t=e.result;
16
- t&&await w(t.bucketName)},N=async(e,t)=>{await x(e,t.tags??{})};var D=require("@ez4/aws-common"),H=require("@ez4/utils");var z=require("node:fs"),b=require("@ez4/aws-common"),p=require("@aws-sdk/client-s3");var s="AWS:S3/Object",u="aws:s3.object";var K=require("node:path"),v=require("@ez4/aws-common");var y=e=>e.objectKey??(0,K.basename)(e.filePath),g=(e,t)=>`${e}/${t}`,h=(e,t)=>{
17
- let r=t.getDependencies(a).at(0)?.result;if(!r?.bucketName)throw new v.IncompleteResourceError(
18
- s,e,"bucketName");return r.bucketName};var S=new p.S3Client({}),f=async(e,t)=>{b.Logger.logCreate(s,g(e,t.objectKey));let r=await S.
19
- send(new p.PutObjectCommand({Bucket:e,Key:t.objectKey,Body:(0,z.createReadStream)(
20
- t.filePath),Expires:t.expires}));return{objectKey:t.objectKey,etag:r.ETag}},I=async(e,t,r)=>{
21
- b.Logger.logTag(s,g(e,t)),await S.send(new p.PutObjectTaggingCommand({Bucket:e,Key:t,
22
- Tagging:{TagSet:(0,b.getTagList)({...r,ManagedBy:"EZ4"})}}))},B=async(e,t)=>{b.Logger.
23
- logDelete(s,g(e,t)),await S.send(new p.DeleteObjectCommand({Bucket:e,Key:t}))};var q=()=>({equals:te,create:L,replace:ce,preview:re,update:oe,delete:ae}),te=(e,t)=>!!e.
24
- result&&e.result.objectKey===t.result?.objectKey,re=async(e,t)=>{let r={...e.parameters,
25
- dependencies:e.dependencies},o={...t.parameters,dependencies:t.dependencies},c=(0,H.deepCompare)(
26
- r,o);if(c.counts)return{...c,name:y(r)}},ce=async(e,t,r)=>{if(t.result)throw new D.ReplaceResourceError(
27
- s,e.entryId,t.entryId);return L(e,r)},L=async(e,t)=>{let r=e.parameters,o=h("buc\
28
- ket",t),c=y(r),O=await f(o,{...r,objectKey:c});return await U(o,c,r),{bucketName:o,
29
- objectKey:O.objectKey,etag:O.etag}},oe=async(e,t)=>{let r=e.result;if(!r)return;
30
- let o=y(e.parameters),c=r.bucketName;return t.result?await se(c,o,e.parameters,t.
31
- result):(await U(c,o,e.parameters),r)},ae=async e=>{let t=e.result;t&&await B(t.
32
- bucketName,t.objectKey)},se=async(e,t,r,o)=>{if(t===o.objectKey)return;await B(e,
33
- o.objectKey);let c=await f(e,{...r,objectKey:t});return{bucketName:e,objectKey:c.
34
- objectKey,etag:c.etag}},U=async(e,t,r)=>{await I(e,t,r.tags??{})};var j=require("@ez4/utils"),A=require("@ez4/stateful");var ne=e=>e.type===a,pe=(e,t)=>{let r=(0,j.toKebabCase)(t.bucketName),o=(0,j.hashData)(
35
- a,r);return(0,A.attachEntry)(e,{type:a,entryId:o,dependencies:[],parameters:{...t,
36
- bucketName:r}})};var M=require("@ez4/stateful"),W=require("@ez4/utils");var me=e=>e.type===u,ue=(e,t,r)=>{let o=y(r),c=(0,W.hashData)(u,t.entryId,o);return(0,M.attachEntry)(
37
- e,{type:u,entryId:c,dependencies:[t.entryId],parameters:r})};(0,d.registerProvider)(a,T());(0,d.registerProvider)(u,q());0&&(module.exports={BucketServiceName,BucketServiceType,ObjectServiceName,ObjectServiceType,
38
- createBucket,createBucketObject,isBucket,isBucketObject});
1
+ "use strict";var He=Object.create;var B=Object.defineProperty;var Me=Object.getOwnPropertyDescriptor;var $e=Object.getOwnPropertyNames;var Fe=Object.getPrototypeOf,Ae=Object.prototype.hasOwnProperty;var Ue=(e,t)=>{for(var r in t)B(e,r,{get:t[r],enumerable:!0})},D=(e,t,r,o)=>{if(t&&
2
+ typeof t=="object"||typeof t=="function")for(let c of $e(t))!Ae.call(e,c)&&c!==r&&
3
+ B(e,c,{get:()=>t[c],enumerable:!(o=Me(t,c))||o.enumerable});return e};var Ge=(e,t,r)=>(r=e!=null?He(Fe(e)):{},D(t||!e||!e.__esModule?B(r,"default",{value:e,
4
+ enumerable:!0}):r,e)),We=e=>D(B({},"__esModule",{value:!0}),e);var dt={};Ue(dt,{BucketServiceName:()=>n,BucketServiceType:()=>i,ObjectServiceName:()=>y,
5
+ ObjectServiceType:()=>p,PolicyServiceName:()=>f,PolicyServiceType:()=>u,createBucket:()=>N,
6
+ createBucketObject:()=>St,createBucketPolicy:()=>ft,getBucketDomain:()=>_e,getBucketName:()=>b,
7
+ getBucketObjectFiles:()=>at,getBucketObjectPath:()=>P,getBucketState:()=>Ye,getBucketStateId:()=>E,
8
+ isBucketObjectState:()=>st,isBucketPolicyState:()=>gt,isBucketState:()=>J,registerTriggers:()=>lt});
9
+ module.exports=We(dt);var Te=require("@ez4/aws-common"),he=require("@ez4/aws-identity"),Ne=require("@ez4/storage/library"),
10
+ De=require("@ez4/project/library");var U=require("@ez4/aws-common");var H=require("@ez4/aws-common"),j=require("@ez4/utils");var m=require("@ez4/aws-common"),a=require("@aws-sdk/client-s3");var n="AWS:S3/Bucket",i="aws:s3.bucket";var k=new a.S3Client({}),z=async e=>{let{bucketName:t}=e;return m.Logger.logCreate(
11
+ n,t),await k.send(new a.CreateBucketCommand({Bucket:t})),{bucketName:t}},I=async(e,t)=>{
12
+ m.Logger.logTag(n,e),await k.send(new a.PutBucketTaggingCommand({Bucket:e,Tagging:{
13
+ TagSet:(0,m.getTagList)({...t,ManagedBy:"EZ4"})}}))},L=async(e,t)=>{m.Logger.logCreate(
14
+ n,`${e} lifecycle`),await k.send(new a.PutBucketLifecycleConfigurationCommand({Bucket:e,
15
+ LifecycleConfiguration:{Rules:[{ID:"ID0",Status:a.ExpirationStatus.Enabled,Filter:{
16
+ Prefix:"*"},Expiration:{Days:t}}]}}))},q=async e=>{m.Logger.logDelete(n,`${e} li\
17
+ fecycle`),await k.send(new a.DeleteBucketLifecycleCommand({Bucket:e}))},K=async e=>{
18
+ m.Logger.logDelete(n,e),await k.send(new a.DeleteBucketCommand({Bucket:e}))};var M=()=>({equals:Ze,create:$,replace:Qe,preview:Je,update:Ve,delete:Xe}),Ze=(e,t)=>!!e.
19
+ result&&e.result.bucketName===t.result?.bucketName,Je=async(e,t)=>{let r={...e.parameters,
20
+ dependencies:e.dependencies},o={...t.parameters,dependencies:t.dependencies},c=(0,j.deepCompare)(
21
+ r,o);if(c.counts)return{...c,name:r.bucketName}},Qe=async(e,t)=>{if(t.result)throw new H.ReplaceResourceError(
22
+ n,e.entryId,t.entryId);return $(e)},$=async e=>{let t=e.parameters,{bucketName:r}=await z(
23
+ t);return await Promise.all([F(r,t,void 0),A(r,t.tags,void 0)]),{bucketName:r}},
24
+ Ve=async(e,t)=>{let{result:r,parameters:o}=e;if(!r)return;let c=r.bucketName;await Promise.
25
+ all([F(c,o,t.parameters),A(c,o.tags,t.parameters.tags)])},Xe=async e=>{let t=e.result;
26
+ t&&await K(t.bucketName)},F=async(e,t,r)=>{if(t.autoExpireDays!==r?.autoExpireDays){
27
+ if(t.autoExpireDays)return L(e,t.autoExpireDays);if(r?.autoExpireDays)return q(e)}},
28
+ A=async(e,t,r)=>{let o=t??{};!(0,j.deepEqual)(o,r??{})&&await I(e,o)};var G=()=>{(0,U.registerProvider)(i,M())};var te=require("@ez4/aws-common");var Y=require("@ez4/aws-common");var R=require("@ez4/stateful"),W=require("@ez4/aws-common"),w=require("@ez4/utils"),
29
+ Z=require("@ez4/aws-identity");var J=e=>e.type===i,E=e=>(0,w.hashData)(i,(0,w.toKebabCase)(e)),Ye=(e,t)=>{let r=(0,R.getEntry)(
30
+ e,E(t));if(!J(r))throw new R.EntryNotFoundError(r.entryId);return r},_e=async e=>{
31
+ let t=await(0,Z.getRegion)();return`${e}.s3.${t}.amazonaws.com`},b=(e,t,r)=>{let o=r.
32
+ getDependencies(i).at(0)?.result;if(!o?.bucketName)throw new W.IncompleteResourceError(
33
+ e,t,"bucketName");return o.bucketName};var O=require("@ez4/aws-common"),S=require("@aws-sdk/client-s3");var f="AWS:S3/Policy",u="aws:s3.policy";var Q=new S.S3Client({}),V=async e=>{let{bucketName:t,role:r}=e;return O.Logger.
34
+ logCreate(f,t),await Q.send(new S.PutBucketPolicyCommand({Bucket:t,Policy:JSON.stringify(
35
+ r)})),{bucketName:t}},X=async e=>{O.Logger.logDelete(f,e),await Q.send(new S.DeleteBucketPolicyCommand(
36
+ {Bucket:e}))};var _=()=>({equals:et,create:ee,replace:rt,preview:tt,update:ot,delete:ct}),et=(e,t)=>!!e.
37
+ result&&e.result.bucketName===t.result?.bucketName,tt=async()=>{},rt=async(e,t,r)=>{
38
+ if(t.result)throw new Y.ReplaceResourceError(f,e.entryId,t.entryId);return ee(e,
39
+ r)},ee=async(e,t)=>{let r=e.parameters,o=b(f,"policy",t),c=await r.getRole(t);return await V(
40
+ {bucketName:o,role:c}),{bucketName:o}},ot=async()=>{},ct=async e=>{let t=e.result;
41
+ t&&await X(t.bucketName)};var re=()=>{(0,te.registerProvider)(u,_())};var ye=require("@ez4/aws-common");var ne=require("node:fs/promises"),ie=require("@ez4/aws-common"),C=require("@ez4/utils");var d=require("@ez4/aws-common"),oe=require("node:fs"),ce=Ge(require("mime/lite"),1),
42
+ l=require("@aws-sdk/client-s3");var y="AWS:S3/Object",p="aws:s3.object";var st=e=>e.type===p,P=(e,t)=>`${e}/${t}`,at=e=>e.getDependencies(p).map(({result:r})=>({
43
+ lastModified:r?.lastModified,objectKey:r?.objectKey}));var v=new l.S3Client({}),T=async(e,t)=>{let{objectKey:r,filePath:o}=t;d.Logger.logCreate(
44
+ y,P(e,r));let c=ce.default.getType(o);return await v.send(new l.PutObjectCommand(
45
+ {Bucket:e,Key:r,Body:(0,oe.createReadStream)(o),...c&&{ContentType:c}})),{objectKey:r}},
46
+ se=async(e,t,r)=>{d.Logger.logTag(y,P(e,t)),await v.send(new l.PutObjectTaggingCommand(
47
+ {Bucket:e,Key:t,Tagging:{TagSet:(0,d.getTagList)({...r,ManagedBy:"EZ4"})}}))},ae=async(e,t)=>{
48
+ d.Logger.logDelete(y,P(e,t)),await v.send(new l.DeleteObjectCommand({Bucket:e,Key:t}))};var pe=()=>({equals:nt,create:me,replace:pt,preview:it,update:mt,delete:ut}),nt=(e,t)=>!!e.
49
+ result&&e.result.objectKey===t.result?.objectKey,it=async(e,t)=>{let r=e.parameters,
50
+ o=t.parameters,c=(0,C.deepCompare)({...r,dependencies:e.dependencies,lastModified:await h(
51
+ r.filePath)},{...o,dependencies:t.dependencies,lastModified:e.result?.lastModified});
52
+ if(c.counts)return{...c,name:r.objectKey}},pt=async(e,t,r)=>{if(t.result)throw new ie.ReplaceResourceError(
53
+ y,e.entryId,t.entryId);return me(e,r)},me=async(e,t)=>{let r=e.parameters,o=b(y,
54
+ "bucket",t),c=await h(r.filePath),{objectKey:s}=await T(o,r);return await ue(o,s,
55
+ r.tags,e.parameters.tags),{lastModified:c,bucketName:o,objectKey:s}},mt=async(e,t)=>{
56
+ let{result:r,parameters:o}=e;if(!r)return;let{bucketName:c,objectKey:s}=r,g=yt(r,
57
+ o,t.parameters);return await ue(c,s,o.tags,t.parameters.tags),g},ut=async e=>{let t=e.
58
+ result;t&&await ae(t.bucketName,t.objectKey)},h=async e=>{let{mtime:t}=await(0,ne.stat)(
59
+ e);return t.getTime()},yt=async(e,t,r)=>{let o=await h(t.filePath);if(o<=e.lastModified&&
60
+ t.filePath===r.filePath)return e;let{bucketName:c,objectKey:s}=e;return await T(
61
+ c,{...t,objectKey:s}),{lastModified:o,bucketName:c,objectKey:s}},ue=async(e,t,r,o)=>{
62
+ let c=r??{};!(0,C.deepEqual)(c,o??{})&&await se(e,t,c)};var le=()=>{(0,ye.registerProvider)(p,pe())};var Se=require("@ez4/aws-identity");var fe=require("@ez4/aws-identity"),ge=e=>(0,fe.createPolicyDocument)([{resourceIds:[
63
+ `arn:aws:s3:::${e}-*`,`arn:aws:s3:::${e}-*/*`],permissions:["s3:ListBucket","s3:\
64
+ PutObject","s3:GetObject","s3:DeleteObject"]}]);var de=async e=>{let{state:t,options:r}=e,{resourcePrefix:o,projectName:c}=r,s=`${o}\
65
+ -${c}`;return(0,Se.createPolicy)(t,{policyName:`${s}-bucket-policy`,policyDocument:ge(
66
+ s)})};var je=require("@ez4/project/library"),Re=require("@ez4/storage/library");var ke=require("@ez4/utils"),be=require("@ez4/stateful");var N=(e,t)=>{let r=(0,ke.toKebabCase)(t.bucketName),o=E(t.bucketName);return(0,be.attachEntry)(
67
+ e,{type:i,entryId:o,dependencies:[],parameters:{...t,bucketName:r}})};var Pe=require("node:fs/promises"),x=require("node:path"),xe=require("@ez4/aws-bucket"),
68
+ Be=async(e,t,r)=>{let o=(0,x.join)(process.cwd(),r),c=await(0,Pe.readdir)(o,{withFileTypes:!0,
69
+ recursive:!0});for(let s of c){if(!s.isFile())continue;let g=(0,x.join)(s.parentPath,
70
+ s.name),Ke=(0,x.relative)(o,g);(0,xe.createBucketObject)(e,t,{objectKey:Ke,filePath:g})}};var we=async e=>{let{state:t,service:r,options:o}=e;if(!(0,Re.isBucketService)(r))
71
+ return;let{autoExpireDays:c,localPath:s}=r,g=N(t,{bucketName:(0,je.getServiceName)(
72
+ r,o),autoExpireDays:c,localPath:s});s&&await Be(t,g,s)};var Ee=require("@ez4/storage/library"),Ce=require("@ez4/project/library"),Oe=async e=>{
73
+ let{service:t,options:r}=e;return(0,Ee.isBucketService)(t)?{constructor:`make('${(0,Ce.getServiceName)(
74
+ t,r)}')`,module:"Client",from:"@ez4/aws-bucket/client"}:null};var ve=!1,lt=()=>{ve||((0,Te.registerTriggers)(),(0,he.registerTriggers)(),(0,Ne.registerTriggers)(),
75
+ (0,De.createTrigger)("@ez4/aws-bucket",{"deploy:prepareExecutionPolicy":de,"depl\
76
+ oy:prepareLinkedService":Oe,"deploy:prepareResources":we}),G(),re(),le(),ve=!0)};var ze=require("@ez4/stateful"),Ie=require("@ez4/utils");var ft=(e,t,r,o)=>{let c=(0,Ie.hashData)(u,t.entryId,r.entryId);return(0,ze.attachEntry)(
77
+ e,{type:u,entryId:c,dependencies:[t.entryId,r.entryId],parameters:o})};var gt=e=>e.type===u;var Le=require("@ez4/stateful"),qe=require("@ez4/utils");var St=(e,t,r)=>{let o=r.objectKey,c=(0,qe.hashData)(p,t.entryId,o);return(0,Le.attachEntry)(
78
+ e,{type:p,entryId:c,dependencies:[t.entryId],parameters:r})};0&&(module.exports={BucketServiceName,BucketServiceType,ObjectServiceName,ObjectServiceType,
79
+ PolicyServiceName,PolicyServiceType,createBucket,createBucketObject,createBucketPolicy,
80
+ getBucketDomain,getBucketName,getBucketObjectFiles,getBucketObjectPath,getBucketState,
81
+ getBucketStateId,isBucketObjectState,isBucketPolicyState,isBucketState,registerTriggers});
package/dist/main.d.ts CHANGED
@@ -1,4 +1,10 @@
1
+ export * from './triggers/register.js';
1
2
  export * from './bucket/service.js';
2
3
  export * from './bucket/types.js';
4
+ export * from './bucket/utils.js';
5
+ export * from './policy/service.js';
6
+ export * from './policy/types.js';
7
+ export * from './policy/utils.js';
3
8
  export * from './object/service.js';
4
9
  export * from './object/types.js';
10
+ export * from './object/utils.js';
package/dist/main.mjs CHANGED
@@ -1,33 +1,73 @@
1
- import{registerProvider as P}from"@ez4/aws-common";import{ReplaceResourceError as I}from"@ez4/aws-common";import{deepCompare as D}from"@ez4/utils";import{getTagList as N,Logger as i}from"@ez4/aws-common";import{CreateBucketCommand as K,
2
- DeleteBucketCommand as v,PutBucketTaggingCommand as h,S3Client as z}from"@aws-sdk/client-s3";var n="AWS:S3/Bucket",a="aws:s3.bucket";var y=new z({}),S=async e=>{i.logCreate(n,e.bucketName);let t=await y.send(new K(
3
- {Bucket:e.bucketName}));return{bucketName:e.bucketName,location:t.Location}},f=async(e,t)=>{
4
- i.logTag(n,e),await y.send(new h({Bucket:e,Tagging:{TagSet:N({...t,ManagedBy:"EZ\
5
- 4"})}}))},B=async e=>{i.logDelete(n,e),await y.send(new v({Bucket:e}))};var d=()=>({equals:H,create:O,replace:L,preview:q,update:U,delete:A}),H=(e,t)=>!!e.
6
- result&&e.result.bucketName===t.result?.bucketName,q=async(e,t)=>{let r={...e.parameters,
7
- dependencies:e.dependencies},c={...t.parameters,dependencies:t.dependencies},o=D(
8
- r,c);if(o.counts)return{...o,name:r.bucketName}},L=async(e,t)=>{if(t.result)throw new I(
9
- n,e.entryId,t.entryId);return O(e)},O=async e=>{let t=e.parameters,r=await S(t);
10
- return await R(r.bucketName,t),{bucketName:r.bucketName,location:r.location}},U=async(e,t)=>{
11
- let r=e.result;r&&await R(r.bucketName,e.parameters)},A=async e=>{let t=e.result;
12
- t&&await B(t.bucketName)},R=async(e,t)=>{await f(e,t.tags??{})};import{ReplaceResourceError as Q}from"@ez4/aws-common";import{deepCompare as V}from"@ez4/utils";import{createReadStream as Z}from"node:fs";import{getTagList as $,Logger as b}from"@ez4/aws-common";
13
- import{DeleteObjectCommand as _,PutObjectCommand as F,PutObjectTaggingCommand as G,
14
- S3Client as J}from"@aws-sdk/client-s3";var s="AWS:S3/Object",p="aws:s3.object";import{basename as M}from"node:path";import{IncompleteResourceError as W}from"@ez4/aws-common";var m=e=>e.objectKey??M(e.filePath),u=(e,t)=>`${e}/${t}`,x=(e,t)=>{let r=t.getDependencies(
15
- a).at(0)?.result;if(!r?.bucketName)throw new W(s,e,"bucketName");return r.bucketName};var g=new J({}),j=async(e,t)=>{b.logCreate(s,u(e,t.objectKey));let r=await g.send(
16
- new F({Bucket:e,Key:t.objectKey,Body:Z(t.filePath),Expires:t.expires}));return{objectKey:t.
17
- objectKey,etag:r.ETag}},w=async(e,t,r)=>{b.logTag(s,u(e,t)),await g.send(new G({
18
- Bucket:e,Key:t,Tagging:{TagSet:$({...r,ManagedBy:"EZ4"})}}))},k=async(e,t)=>{b.logDelete(
19
- s,u(e,t)),await g.send(new _({Bucket:e,Key:t}))};var C=()=>({equals:X,create:E,replace:ee,preview:Y,update:te,delete:re}),X=(e,t)=>!!e.
20
- result&&e.result.objectKey===t.result?.objectKey,Y=async(e,t)=>{let r={...e.parameters,
21
- dependencies:e.dependencies},c={...t.parameters,dependencies:t.dependencies},o=V(
22
- r,c);if(o.counts)return{...o,name:m(r)}},ee=async(e,t,r)=>{if(t.result)throw new Q(
23
- s,e.entryId,t.entryId);return E(e,r)},E=async(e,t)=>{let r=e.parameters,c=x("buc\
24
- ket",t),o=m(r),l=await j(c,{...r,objectKey:o});return await T(c,o,r),{bucketName:c,
25
- objectKey:l.objectKey,etag:l.etag}},te=async(e,t)=>{let r=e.result;if(!r)return;
26
- let c=m(e.parameters),o=r.bucketName;return t.result?await ce(o,c,e.parameters,t.
27
- result):(await T(o,c,e.parameters),r)},re=async e=>{let t=e.result;t&&await k(t.
28
- bucketName,t.objectKey)},ce=async(e,t,r,c)=>{if(t===c.objectKey)return;await k(e,
29
- c.objectKey);let o=await j(e,{...r,objectKey:t});return{bucketName:e,objectKey:o.
30
- objectKey,etag:o.etag}},T=async(e,t,r)=>{await w(e,t,r.tags??{})};import{toKebabCase as oe,hashData as ae}from"@ez4/utils";import{attachEntry as se}from"@ez4/stateful";var Ae=e=>e.type===a,Me=(e,t)=>{let r=oe(t.bucketName),c=ae(a,r);return se(e,{type:a,
31
- entryId:c,dependencies:[],parameters:{...t,bucketName:r}})};import{attachEntry as ne}from"@ez4/stateful";import{hashData as pe}from"@ez4/utils";var Ge=e=>e.type===p,Je=(e,t,r)=>{let c=m(r),o=pe(p,t.entryId,c);return ne(e,{type:p,
32
- entryId:o,dependencies:[t.entryId],parameters:r})};P(a,d());P(p,C());export{n as BucketServiceName,a as BucketServiceType,s as ObjectServiceName,p as ObjectServiceType,
33
- Me as createBucket,Je as createBucketObject,Ae as isBucket,Ge as isBucketObject};
1
+ import{registerTriggers as pt}from"@ez4/aws-common";import{registerTriggers as mt}from"@ez4/aws-identity";
2
+ import{registerTriggers as ut}from"@ez4/storage/library";import{createTrigger as yt}from"@ez4/project/library";import{registerProvider as Se}from"@ez4/aws-common";import{ReplaceResourceError as ie}from"@ez4/aws-common";import{deepCompare as pe,
3
+ deepEqual as me}from"@ez4/utils";import{getTagList as ee,Logger as l}from"@ez4/aws-common";import{CreateBucketCommand as te,
4
+ DeleteBucketCommand as re,PutBucketTaggingCommand as oe,PutBucketLifecycleConfigurationCommand as ce,
5
+ DeleteBucketLifecycleCommand as se,ExpirationStatus as ae,S3Client as ne}from"@aws-sdk/client-s3";var a="AWS:S3/Bucket",n="aws:s3.bucket";var f=new ne({}),B=async e=>{let{bucketName:t}=e;return l.logCreate(a,t),await f.
6
+ send(new te({Bucket:t})),{bucketName:t}},j=async(e,t)=>{l.logTag(a,e),await f.send(
7
+ new oe({Bucket:e,Tagging:{TagSet:ee({...t,ManagedBy:"EZ4"})}}))},R=async(e,t)=>{
8
+ l.logCreate(a,`${e} lifecycle`),await f.send(new ce({Bucket:e,LifecycleConfiguration:{
9
+ Rules:[{ID:"ID0",Status:ae.Enabled,Filter:{Prefix:"*"},Expiration:{Days:t}}]}}))},
10
+ w=async e=>{l.logDelete(a,`${e} lifecycle`),await f.send(new se({Bucket:e}))},E=async e=>{
11
+ l.logDelete(a,e),await f.send(new re({Bucket:e}))};var C=()=>({equals:ue,create:O,replace:le,preview:ye,update:fe,delete:ge}),ue=(e,t)=>!!e.
12
+ result&&e.result.bucketName===t.result?.bucketName,ye=async(e,t)=>{let r={...e.parameters,
13
+ dependencies:e.dependencies},o={...t.parameters,dependencies:t.dependencies},c=pe(
14
+ r,o);if(c.counts)return{...c,name:r.bucketName}},le=async(e,t)=>{if(t.result)throw new ie(
15
+ a,e.entryId,t.entryId);return O(e)},O=async e=>{let t=e.parameters,{bucketName:r}=await B(
16
+ t);return await Promise.all([v(r,t,void 0),T(r,t.tags,void 0)]),{bucketName:r}},
17
+ fe=async(e,t)=>{let{result:r,parameters:o}=e;if(!r)return;let c=r.bucketName;await Promise.
18
+ all([v(c,o,t.parameters),T(c,o.tags,t.parameters.tags)])},ge=async e=>{let t=e.result;
19
+ t&&await E(t.bucketName)},v=async(e,t,r)=>{if(t.autoExpireDays!==r?.autoExpireDays){
20
+ if(t.autoExpireDays)return R(e,t.autoExpireDays);if(r?.autoExpireDays)return w(e)}},
21
+ T=async(e,t,r)=>{let o=t??{};!me(o,r??{})&&await j(e,o)};var h=()=>{Se(n,C())};import{registerProvider as De}from"@ez4/aws-common";import{ReplaceResourceError as Ce}from"@ez4/aws-common";import{EntryNotFoundError as de,getEntry as ke}from"@ez4/stateful";import{IncompleteResourceError as be}from"@ez4/aws-common";
22
+ import{hashData as Pe,toKebabCase as xe}from"@ez4/utils";import{getRegion as Be}from"@ez4/aws-identity";var je=e=>e.type===n,d=e=>Pe(n,xe(e)),Lt=(e,t)=>{let r=ke(e,d(t));if(!je(r))throw new de(
23
+ r.entryId);return r},qt=async e=>{let t=await Be();return`${e}.s3.${t}.amazonaws\
24
+ .com`},g=(e,t,r)=>{let o=r.getDependencies(n).at(0)?.result;if(!o?.bucketName)throw new be(
25
+ e,t,"bucketName");return o.bucketName};import{Logger as N}from"@ez4/aws-common";import{S3Client as Re,PutBucketPolicyCommand as we,
26
+ DeleteBucketPolicyCommand as Ee}from"@aws-sdk/client-s3";var y="AWS:S3/Policy",p="aws:s3.policy";var D=new Re({}),z=async e=>{let{bucketName:t,role:r}=e;return N.logCreate(y,t),
27
+ await D.send(new we({Bucket:t,Policy:JSON.stringify(r)})),{bucketName:t}},I=async e=>{
28
+ N.logDelete(y,e),await D.send(new Ee({Bucket:e}))};var L=()=>({equals:Oe,create:q,replace:Te,preview:ve,update:he,delete:Ne}),Oe=(e,t)=>!!e.
29
+ result&&e.result.bucketName===t.result?.bucketName,ve=async()=>{},Te=async(e,t,r)=>{
30
+ if(t.result)throw new Ce(y,e.entryId,t.entryId);return q(e,r)},q=async(e,t)=>{let r=e.
31
+ parameters,o=g(y,"policy",t),c=await r.getRole(t);return await z({bucketName:o,role:c}),
32
+ {bucketName:o}},he=async()=>{},Ne=async e=>{let t=e.result;t&&await I(t.bucketName)};var K=()=>{De(p,L())};import{registerProvider as Xe}from"@ez4/aws-common";import{stat as $e}from"node:fs/promises";import{ReplaceResourceError as Fe}from"@ez4/aws-common";
33
+ import{deepCompare as Ae,deepEqual as Ue}from"@ez4/utils";import{getTagList as ze,Logger as k}from"@ez4/aws-common";import{createReadStream as Ie}from"node:fs";
34
+ import Le from"mime/lite";import{PutObjectCommand as qe,PutObjectTaggingCommand as Ke,
35
+ DeleteObjectCommand as He,S3Client as Me}from"@aws-sdk/client-s3";var m="AWS:S3/Object",i="aws:s3.object";var rr=e=>e.type===i,S=(e,t)=>`${e}/${t}`,or=e=>e.getDependencies(i).map(({result:r})=>({
36
+ lastModified:r?.lastModified,objectKey:r?.objectKey}));var b=new Me({}),P=async(e,t)=>{let{objectKey:r,filePath:o}=t;k.logCreate(m,S(e,
37
+ r));let c=Le.getType(o);return await b.send(new qe({Bucket:e,Key:r,Body:Ie(o),...c&&
38
+ {ContentType:c}})),{objectKey:r}},H=async(e,t,r)=>{k.logTag(m,S(e,t)),await b.send(
39
+ new Ke({Bucket:e,Key:t,Tagging:{TagSet:ze({...r,ManagedBy:"EZ4"})}}))},M=async(e,t)=>{
40
+ k.logDelete(m,S(e,t)),await b.send(new He({Bucket:e,Key:t}))};var $=()=>({equals:Ge,create:F,replace:Ze,preview:We,update:Je,delete:Qe}),Ge=(e,t)=>!!e.
41
+ result&&e.result.objectKey===t.result?.objectKey,We=async(e,t)=>{let r=e.parameters,
42
+ o=t.parameters,c=Ae({...r,dependencies:e.dependencies,lastModified:await x(r.filePath)},
43
+ {...o,dependencies:t.dependencies,lastModified:e.result?.lastModified});if(c.counts)
44
+ return{...c,name:r.objectKey}},Ze=async(e,t,r)=>{if(t.result)throw new Fe(m,e.entryId,
45
+ t.entryId);return F(e,r)},F=async(e,t)=>{let r=e.parameters,o=g(m,"bucket",t),c=await x(
46
+ r.filePath),{objectKey:s}=await P(o,r);return await A(o,s,r.tags,e.parameters.tags),
47
+ {lastModified:c,bucketName:o,objectKey:s}},Je=async(e,t)=>{let{result:r,parameters:o}=e;
48
+ if(!r)return;let{bucketName:c,objectKey:s}=r,u=Ve(r,o,t.parameters);return await A(
49
+ c,s,o.tags,t.parameters.tags),u},Qe=async e=>{let t=e.result;t&&await M(t.bucketName,
50
+ t.objectKey)},x=async e=>{let{mtime:t}=await $e(e);return t.getTime()},Ve=async(e,t,r)=>{
51
+ let o=await x(t.filePath);if(o<=e.lastModified&&t.filePath===r.filePath)return e;
52
+ let{bucketName:c,objectKey:s}=e;return await P(c,{...t,objectKey:s}),{lastModified:o,
53
+ bucketName:c,objectKey:s}},A=async(e,t,r,o)=>{let c=r??{};!Ue(c,o??{})&&await H(
54
+ e,t,c)};var U=()=>{Xe(i,$())};import{createPolicy as _e}from"@ez4/aws-identity";import{createPolicyDocument as Ye}from"@ez4/aws-identity";var G=e=>Ye([{resourceIds:[
55
+ `arn:aws:s3:::${e}-*`,`arn:aws:s3:::${e}-*/*`],permissions:["s3:ListBucket","s3:\
56
+ PutObject","s3:GetObject","s3:DeleteObject"]}]);var W=async e=>{let{state:t,options:r}=e,{resourcePrefix:o,projectName:c}=r,s=`${o}\
57
+ -${c}`;return _e(t,{policyName:`${s}-bucket-policy`,policyDocument:G(s)})};import{getServiceName as st}from"@ez4/project/library";import{isBucketService as at}from"@ez4/storage/library";import{toKebabCase as et}from"@ez4/utils";import{attachEntry as tt}from"@ez4/stateful";var Z=(e,t)=>{let r=et(t.bucketName),o=d(t.bucketName);return tt(e,{type:n,entryId:o,
58
+ dependencies:[],parameters:{...t,bucketName:r}})};import{readdir as rt}from"node:fs/promises";import{join as J,relative as ot}from"node:path";
59
+ import{createBucketObject as ct}from"@ez4/aws-bucket";var Q=async(e,t,r)=>{let o=J(
60
+ process.cwd(),r),c=await rt(o,{withFileTypes:!0,recursive:!0});for(let s of c){if(!s.
61
+ isFile())continue;let u=J(s.parentPath,s.name),_=ot(o,u);ct(e,t,{objectKey:_,filePath:u})}};var V=async e=>{let{state:t,service:r,options:o}=e;if(!at(r))return;let{autoExpireDays:c,
62
+ localPath:s}=r,u=Z(t,{bucketName:st(r,o),autoExpireDays:c,localPath:s});s&&await Q(
63
+ t,u,s)};import{isBucketService as nt}from"@ez4/storage/library";import{getServiceName as it}from"@ez4/project/library";
64
+ var X=async e=>{let{service:t,options:r}=e;return nt(t)?{constructor:`make('${it(
65
+ t,r)}')`,module:"Client",from:"@ez4/aws-bucket/client"}:null};var Y=!1,to=()=>{Y||(pt(),mt(),ut(),yt("@ez4/aws-bucket",{"deploy:prepareExecuti\
66
+ onPolicy":W,"deploy:prepareLinkedService":X,"deploy:prepareResources":V}),h(),K(),
67
+ U(),Y=!0)};import{attachEntry as lt}from"@ez4/stateful";import{hashData as ft}from"@ez4/utils";var ao=(e,t,r,o)=>{let c=ft(p,t.entryId,r.entryId);return lt(e,{type:p,entryId:c,
68
+ dependencies:[t.entryId,r.entryId],parameters:o})};var po=e=>e.type===p;import{attachEntry as gt}from"@ez4/stateful";import{hashData as St}from"@ez4/utils";var fo=(e,t,r)=>{let o=r.objectKey,c=St(i,t.entryId,o);return gt(e,{type:i,entryId:c,
69
+ dependencies:[t.entryId],parameters:r})};export{a as BucketServiceName,n as BucketServiceType,m as ObjectServiceName,i as ObjectServiceType,
70
+ y as PolicyServiceName,p as PolicyServiceType,Z as createBucket,fo as createBucketObject,
71
+ ao as createBucketPolicy,qt as getBucketDomain,g as getBucketName,or as getBucketObjectFiles,
72
+ S as getBucketObjectPath,Lt as getBucketState,d as getBucketStateId,rr as isBucketObjectState,
73
+ po as isBucketPolicyState,je as isBucketState,to as registerTriggers};
@@ -2,11 +2,9 @@ import type { ResourceTags } from '@ez4/aws-common';
2
2
  export type CreateRequest = {
3
3
  filePath: string;
4
4
  objectKey: string;
5
- expires?: Date;
6
5
  };
7
6
  export type CreateResponse = {
8
7
  objectKey: string;
9
- etag: string;
10
8
  };
11
9
  export declare const putObject: (bucketName: string, request: CreateRequest) => Promise<CreateResponse>;
12
10
  export declare const tagObject: (bucketName: string, objectKey: string, tags: ResourceTags) => Promise<void>;
@@ -0,0 +1 @@
1
+ export declare const registerObjectProvider: () => void;
@@ -1,5 +1,4 @@
1
1
  import type { EntryState, EntryStates } from '@ez4/stateful';
2
2
  import type { BucketState } from '../bucket/types.js';
3
3
  import type { ObjectParameters, ObjectState } from './types.js';
4
- export declare const isBucketObject: (resource: EntryState) => resource is ObjectState;
5
4
  export declare const createBucketObject: <E extends EntryState>(state: EntryStates<E>, bucketState: BucketState, parameters: ObjectParameters) => ObjectState;
@@ -3,11 +3,11 @@ import type { ResourceTags } from '@ez4/aws-common';
3
3
  import type { CreateRequest, CreateResponse } from './client.js';
4
4
  export declare const ObjectServiceName = "AWS:S3/Object";
5
5
  export declare const ObjectServiceType = "aws:s3.object";
6
- export type ObjectParameters = Omit<CreateRequest, 'objectKey'> & {
7
- objectKey?: string;
6
+ export type ObjectParameters = CreateRequest & {
8
7
  tags?: ResourceTags;
9
8
  };
10
9
  export type ObjectResult = CreateResponse & {
10
+ lastModified: number;
11
11
  bucketName: string;
12
12
  };
13
13
  export type ObjectState = EntryState & {
@@ -1,6 +1,8 @@
1
1
  import type { EntryState, StepContext } from '@ez4/stateful';
2
- import type { ObjectParameters } from './types.js';
3
- import { BucketState } from '../bucket/types.js';
4
- export declare const getObjectKey: (parameters: ObjectParameters) => string;
5
- export declare const getObjectPath: (bucketName: string, objectKey: string) => string;
6
- export declare const getBucketName: <E extends EntryState>(resourceId: string, context: StepContext<E | BucketState>) => any;
2
+ import { ObjectState } from './types.js';
3
+ export declare const isBucketObjectState: (resource: EntryState) => resource is ObjectState;
4
+ export declare const getBucketObjectPath: (bucketName: string, objectKey: string) => string;
5
+ export declare const getBucketObjectFiles: <E extends EntryState>(context: StepContext<E | ObjectState>) => {
6
+ lastModified: any;
7
+ objectKey: any;
8
+ }[];
@@ -0,0 +1,10 @@
1
+ import type { RoleDocument } from '@ez4/aws-identity';
2
+ export type CreateRequest = {
3
+ bucketName: string;
4
+ role: RoleDocument;
5
+ };
6
+ export type CreateResponse = {
7
+ bucketName: string;
8
+ };
9
+ export declare const createPolicy: (request: CreateRequest) => Promise<CreateResponse>;
10
+ export declare const deletePolicy: (bucketName: string) => Promise<void>;
@@ -0,0 +1,3 @@
1
+ import type { StepHandler } from '@ez4/stateful';
2
+ import type { PolicyState } from './types.js';
3
+ export declare const getPolicyHandler: () => StepHandler<PolicyState>;
@@ -0,0 +1 @@
1
+ export declare const registerPolicyProvider: () => void;
@@ -0,0 +1,4 @@
1
+ import type { EntryState, EntryStates } from '@ez4/stateful';
2
+ import type { PolicyParameters, PolicyState } from './types.js';
3
+ import { BucketState } from '../main.js';
4
+ export declare const createBucketPolicy: <E extends EntryState>(state: EntryStates<E>, sourceState: EntryState, bucketState: BucketState, parameters: PolicyParameters) => PolicyState;
@@ -0,0 +1,15 @@
1
+ import type { RoleDocument } from '@ez4/aws-identity';
2
+ import type { EntryState, StepContext } from '@ez4/stateful';
3
+ import type { CreateResponse } from './client.js';
4
+ export declare const PolicyServiceName = "AWS:S3/Policy";
5
+ export declare const PolicyServiceType = "aws:s3.policy";
6
+ export type GetRole = (context: StepContext) => Promise<RoleDocument> | RoleDocument;
7
+ export type PolicyParameters = {
8
+ getRole: GetRole;
9
+ };
10
+ export type PolicyResult = CreateResponse;
11
+ export type PolicyState = EntryState & {
12
+ type: typeof PolicyServiceType;
13
+ parameters: PolicyParameters;
14
+ result?: PolicyResult;
15
+ };
@@ -0,0 +1,3 @@
1
+ import type { EntryState } from '@ez4/stateful';
2
+ import type { PolicyState } from './types.js';
3
+ export declare const isBucketPolicyState: (resource: EntryState) => resource is PolicyState;
@@ -0,0 +1,2 @@
1
+ import type { PrepareResourceEvent } from '@ez4/project/library';
2
+ export declare const prepareBucketServices: (event: PrepareResourceEvent) => Promise<void>;
@@ -0,0 +1,2 @@
1
+ import type { ExtraSource, ServiceEvent } from '@ez4/project/library';
2
+ export declare const prepareLinkedService: (event: ServiceEvent) => Promise<ExtraSource | null>;
@@ -0,0 +1,3 @@
1
+ import type { BucketState } from '@ez4/aws-bucket';
2
+ import { EntryStates } from '@ez4/stateful';
3
+ export declare const prepareLocalContent: (state: EntryStates, bucketState: BucketState, localPath: string) => Promise<void>;
@@ -0,0 +1,2 @@
1
+ import type { PolicyResourceEvent } from '@ez4/project/library';
2
+ export declare const prepareExecutionPolicy: (event: PolicyResourceEvent) => Promise<import("@ez4/aws-identity").PolicyState>;
@@ -0,0 +1 @@
1
+ export declare const registerTriggers: () => void;
@@ -0,0 +1,3 @@
1
+ import type { BucketService } from '@ez4/storage/library';
2
+ import type { DeployOptions } from '@ez4/project/library';
3
+ export declare const getBucketName: (service: BucketService, options: DeployOptions) => string;
@@ -0,0 +1 @@
1
+ export declare const getBucketId: (bucketName: string) => string;
@@ -0,0 +1,2 @@
1
+ import type { PolicyDocument } from '@ez4/aws-identity';
2
+ export declare const getPolicyDocument: (prefix: string) => PolicyDocument;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ez4/aws-bucket",
3
3
  "description": "EZ4: Self-managed AWS S3 buckets",
4
- "version": "0.4.0",
4
+ "version": "0.5.0",
5
5
  "author": "Silas B.",
6
6
  "license": "MIT",
7
7
  "type": "module",
@@ -13,6 +13,11 @@
13
13
  "types": "./dist/main.d.ts",
14
14
  "require": "./dist/main.cjs",
15
15
  "import": "./dist/main.mjs"
16
+ },
17
+ "./client": {
18
+ "types": "./dist/client.d.ts",
19
+ "require": "./dist/client.cjs",
20
+ "import": "./dist/client.mjs"
16
21
  }
17
22
  },
18
23
  "workspaces": [
@@ -28,10 +33,18 @@
28
33
  "clean:registry": "rm -rf ../../.registry/@ez4/aws-bucket",
29
34
  "live:publish": "npm run test && npm publish --access public"
30
35
  },
36
+ "devDependencies": {
37
+ "@types/mime": "^3.0.0"
38
+ },
31
39
  "dependencies": {
32
40
  "@aws-sdk/client-s3": "^3.614.0",
33
- "@ez4/aws-common": "^0.4.0",
34
- "@ez4/stateful": "^0.4.0",
35
- "@ez4/utils": "^0.4.0"
41
+ "@aws-sdk/s3-request-presigner": "^3.651.0",
42
+ "@ez4/aws-common": "^0.5.0",
43
+ "@ez4/aws-identity": "^0.5.0",
44
+ "@ez4/project": "^0.5.0",
45
+ "@ez4/stateful": "^0.5.0",
46
+ "@ez4/storage": "^0.5.0",
47
+ "@ez4/utils": "^0.5.0",
48
+ "mime": "^3.0.0"
36
49
  }
37
50
  }