@fy-stack/storage-construct 0.0.1

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.
package/README.md ADDED
@@ -0,0 +1,7 @@
1
+ # storage-construct
2
+
3
+ This library was generated with [Nx](https://nx.dev).
4
+
5
+ ## Building
6
+
7
+ Run `nx build storage-construct` to build the library.
@@ -0,0 +1,3 @@
1
+ export { StorageConstruct } from './lib/storage-construct';
2
+ export type { StorageConstructProps } from './lib/types';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,YAAY,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StorageConstruct = void 0;
4
+ var storage_construct_1 = require("./lib/storage-construct");
5
+ Object.defineProperty(exports, "StorageConstruct", { enumerable: true, get: function () { return storage_construct_1.StorageConstruct; } });
@@ -0,0 +1,9 @@
1
+ import { NestedStack } from "aws-cdk-lib";
2
+ import * as cloudfront from 'aws-cdk-lib/aws-cloudfront';
3
+ import { Construct } from 'constructs';
4
+ import { StorageCdkStackProps } from './types';
5
+ export declare class StorageCdnStack extends NestedStack {
6
+ storageOrigin: cloudfront.IOrigin;
7
+ constructor(scope: Construct, id: string, props: StorageCdkStackProps);
8
+ }
9
+ //# sourceMappingURL=storage-cdn-stack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-cdn-stack.d.ts","sourceRoot":"","sources":["../../src/lib/storage-cdn-stack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,UAAU,MAAM,4BAA4B,CAAC;AAGzD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAE/C,qBAAa,eAAgB,SAAQ,WAAW;IAC9C,aAAa,EAAE,UAAU,CAAC,OAAO,CAAA;gBAErB,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB;CAmBtE"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StorageCdnStack = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
6
+ const cloudfront = tslib_1.__importStar(require("aws-cdk-lib/aws-cloudfront"));
7
+ const cloudfrontOrigin = tslib_1.__importStar(require("aws-cdk-lib/aws-cloudfront-origins"));
8
+ const s3 = tslib_1.__importStar(require("aws-cdk-lib/aws-s3"));
9
+ class StorageCdnStack extends aws_cdk_lib_1.NestedStack {
10
+ storageOrigin;
11
+ constructor(scope, id, props) {
12
+ super(scope, id, props);
13
+ const bucket = s3.Bucket.fromBucketArn(this, 'StorageBucket', props.bucketArn);
14
+ const storageAccessControl = new cloudfront.S3OriginAccessControl(this, 'StorageOriginAccessControl');
15
+ this.storageOrigin =
16
+ cloudfrontOrigin.S3BucketOrigin.withOriginAccessControl(bucket, {
17
+ originAccessControl: storageAccessControl,
18
+ });
19
+ }
20
+ }
21
+ exports.StorageCdnStack = StorageCdnStack;
@@ -0,0 +1,19 @@
1
+ import { Attachable, CDNResource, Grantable } from '@fy-stack/types';
2
+ import * as cdk from 'aws-cdk-lib';
3
+ import * as iam from 'aws-cdk-lib/aws-iam';
4
+ import * as s3 from 'aws-cdk-lib/aws-s3';
5
+ import { Construct } from 'constructs';
6
+ import type { StorageConstructProps } from './types';
7
+ export declare class StorageConstruct extends Construct implements Attachable, Grantable, CDNResource {
8
+ bucket: s3.IBucket;
9
+ constructor(scope: Construct, id: string, props: StorageConstructProps);
10
+ cloudfront(path: string): {
11
+ [x: string]: cdk.aws_cloudfront.BehaviorOptions;
12
+ };
13
+ attachable(): {
14
+ name: string;
15
+ arn: string;
16
+ };
17
+ grantable(grant: iam.IGrantable): void;
18
+ }
19
+ //# sourceMappingURL=storage-construct.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-construct.d.ts","sourceRoot":"","sources":["../../src/lib/storage-construct.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,KAAK,GAAG,MAAM,aAAa,CAAC;AAEnC,OAAO,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAC3C,OAAO,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAErD,qBAAa,gBACX,SAAQ,SACR,YAAW,UAAU,EAAE,SAAS,EAAE,WAAW;IAEtC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC;gBAEd,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB;IAiBtE,UAAU,CAAC,IAAI,EAAE,MAAM;;;IAiBvB,UAAU;;;;IAOV,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,UAAU;CAQhC"}
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StorageConstruct = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const cdk = tslib_1.__importStar(require("aws-cdk-lib"));
6
+ const cloudfront = tslib_1.__importStar(require("aws-cdk-lib/aws-cloudfront"));
7
+ const iam = tslib_1.__importStar(require("aws-cdk-lib/aws-iam"));
8
+ const s3 = tslib_1.__importStar(require("aws-cdk-lib/aws-s3"));
9
+ const constructs_1 = require("constructs");
10
+ const storage_cdn_stack_1 = require("./storage-cdn-stack");
11
+ class StorageConstruct extends constructs_1.Construct {
12
+ bucket;
13
+ constructor(scope, id, props) {
14
+ super(scope, id);
15
+ const bucketProps = {
16
+ blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL,
17
+ };
18
+ Object.assign(bucketProps, props.retainOnDelete
19
+ ? { removalPolicy: cdk.RemovalPolicy.RETAIN }
20
+ : { removalPolicy: cdk.RemovalPolicy.DESTROY, autoDeleteObjects: true });
21
+ this.bucket = new s3.Bucket(this, 'Bucket', bucketProps);
22
+ }
23
+ cloudfront(path) {
24
+ const storageOriginStack = new storage_cdn_stack_1.StorageCdnStack(this, 'StorageCDNStack', {
25
+ bucketArn: this.bucket.bucketArn,
26
+ });
27
+ const storageBehavior = {
28
+ compress: true,
29
+ origin: storageOriginStack.storageOrigin,
30
+ cachePolicy: cloudfront.CachePolicy.CACHING_OPTIMIZED,
31
+ allowedMethods: cloudfront.AllowedMethods.ALLOW_GET_HEAD,
32
+ cachedMethods: cloudfront.CachedMethods.CACHE_GET_HEAD,
33
+ viewerProtocolPolicy: cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
34
+ };
35
+ return { [`${path}/*`]: storageBehavior };
36
+ }
37
+ attachable() {
38
+ return {
39
+ name: this.bucket.bucketName,
40
+ arn: this.bucket.bucketArn,
41
+ };
42
+ }
43
+ grantable(grant) {
44
+ new iam.PolicyStatement({
45
+ effect: iam.Effect.ALLOW,
46
+ actions: ['s3:*'],
47
+ resources: [`${this.bucket.bucketArn}/*`],
48
+ principals: [grant.grantPrincipal],
49
+ });
50
+ }
51
+ }
52
+ exports.StorageConstruct = StorageConstruct;
@@ -0,0 +1,9 @@
1
+ import { NestedStackProps } from 'aws-cdk-lib';
2
+ export interface StorageConstructProps {
3
+ /** Retain bucket when stack is deleted */
4
+ retainOnDelete?: boolean;
5
+ }
6
+ export interface StorageCdkStackProps extends NestedStackProps {
7
+ bucketArn: string;
8
+ }
9
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,WAAW,qBAAqB;IACpC,0CAA0C;IAC1C,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB;AAED,MAAM,WAAW,oBAAqB,SAAQ,gBAAgB;IAC5D,SAAS,EAAE,MAAM,CAAA;CAClB"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
package/package.json ADDED
@@ -0,0 +1,22 @@
1
+ {
2
+ "name": "@fy-stack/storage-construct",
3
+ "version": "0.0.1",
4
+ "dependencies": {
5
+ "tslib": "^2.3.0"
6
+ },
7
+ "peerDependencies": {
8
+ "aws-cdk-lib": "2.164.1",
9
+ "constructs": "10.4.2",
10
+ "@fy-stack/types": "0.0.1"
11
+ },
12
+ "type": "commonjs",
13
+ "main": "./dist/index.js",
14
+ "typings": "./dist/index.d.ts",
15
+ "files": [
16
+ "dist",
17
+ "!**/*.tsbuildinfo"
18
+ ],
19
+ "nx": {
20
+ "name": "storage-construct"
21
+ }
22
+ }