@gcoreplus/nestjs-storage
TypeScript icon, indicating that this package has built-in type declarations

0.0.8 • Public • Published

npm version Codecov Coverage ISC license

@gcoreplus/nestjs-storage

Provides an injectable service with client to provide S3 (AWS) and GS (Google Storage) storage access from nestjs modules

Table Of Contents

About

@gcoreplus/nestjs-storage implements a module, NSStorageModule, which when imported into your nestjs project provides an S3 and GS client to any class that injects it. This lets S3 and GS be worked into your dependency injection workflow without having to do any extra work outside of the initial setup.

Installation

  1. General

    npm install --save @gcoreplus/nestjs-storage

  2. AWS (Optional)

    npm install --save aws-sdk

  3. Google Storage (Optional)

    npm install --save @google-cloud/storage

Getting Started

The simplest way to use @gcoreplus/nestjs-storage is to use NSStorageModule.forRoot

import { Module } from '@nestjs-common';
import { NSStorageModule } from '@gcoreplus/nestjs-storage';

@Module({
  imports: [
    NSStorageModule.forRoot({
      id?: '<projectid>',
      s3: {
        accessKeyId: 'AWS_ACCESS_KEY_ID',
        secretAccessKey: 'AWS_AWS_SECRET_ACCESS_KEY',
        region?: 'AWS_REGION_ID',
        sessionToken?: 'AWS_SESSION_TOKEN', | null, 
        apiVersion?: 'S3_API_VERSION', //based on s3 api version //
        buckets?: [
          { id: 'bucket-a', name: 'Bucket_A' },
        ]
      }
    }),
  ],
})
export class AppModule {}

The async way @gcoreplus/nestjs-storage is to use NSStorageModule.forRootAsync

import { Module } from '@nestjs-common';
import { NSStorageModule } from '@gcoreplus/nestjs-storage';
import { ConfigModule } from '@gcoreplus/nestjs-config';
import { ConfigService } from '@gcoreplus/nestjs-config';

@Module({
  imports: [
    NSStorageModule.forRootAsync({
      imports: [ConfigModule],
      useFactory: async (cfg:ConfigService) => ({
        id: 'MyProjectS3',
        s3: {
          accessKeyId: cfg.get('ACCESS_KEY_ID'),
          secretAccessKey: 'AWS_SECRET_ACCESS_KEY',
          buckets: [
            { id: 'bucket-a', name: 'Bucket_A' },
          ]
        },
      }),
      inject: [ConfigService],
    })
  ]
})

export class AppModule {}

You can then inject the S3 client into any of your injectables by using a custom decorator

import { Injectable } from '@nestjs/common';
import { NSBody, NSBucket, NSPutObjectRequest, createBucketToken, NSService, NSProvider } from '@gcoreplus/nestjs-storage';

@Injectable()
export class AppService {

  public constructor(@NSProvider() private readonly service: NSService) { }

  async upload(pdf: NSBody) {
    try {
      const bucket: NSBucket | undefined = this.service.getNSBucketByKey(createBucketToken('MyProjectS3', 'Bucket_A'));

      if (bucket) {
        const params: NSPutObjectRequest = {
          Key: 'file_name.pdf',
          ACL: 'public-read',
          Body: pdf,
        };

        await bucket.putObject(params);
      }
    } catch (error) {
      console.log('ERROR S3 FILE UPLOAD => ', error);
    }
  }
}

License

Distributed under the ISC License. See LICENSE for more information.

Acknowledgements

Copyright © 2020 gcoreplus Inc.

Package Sidebar

Install

npm i @gcoreplus/nestjs-storage

Weekly Downloads

27

Version

0.0.8

License

ISC

Unpacked Size

77 kB

Total Files

73

Last publish

Collaborators

  • rennanboni