@noukha-technologies/aws-store
v1.0.3
Published
AWS Store functionality for S3, DynamoDB, and other AWS services integration
Readme
@noukha-technologies/aws-store
A comprehensive AWS integration package for NestJS applications, providing easy-to-use services for S3 and DynamoDB operations.
Features
- S3 Service: Upload, download, delete files and generate presigned URLs
- DynamoDB Service: Full CRUD operations with query and scan capabilities
- TypeScript Support: Full type safety with comprehensive interfaces
- NestJS Integration: Seamless integration with NestJS dependency injection
- Configurable: Support for different AWS regions and credentials
Installation
npm install @noukha-technologies/aws-storeQuick Start
1. Import the Module
import { Module } from '@nestjs/common';
import { AwsStoreModule } from '@noukha-technologies/aws-store';
@Module({
imports: [
AwsStoreModule.forRoot({
region: 'us-east-1',
accessKeyId: 'your-access-key',
secretAccessKey: 'your-secret-key',
s3: {
bucketName: 'your-bucket-name',
},
dynamodb: {
tableName: 'your-table-name',
},
}),
],
})
export class AppModule {}2. Use S3 Service
import { Injectable } from '@nestjs/common';
import { S3Service } from '@noukha-technologies/aws-store';
@Injectable()
export class FileService {
constructor(private readonly s3Service: S3Service) {}
async uploadFile(key: string, file: Buffer) {
return await this.s3Service.upload({
key,
body: file,
contentType: 'image/jpeg',
});
}
async downloadFile(key: string) {
return await this.s3Service.download({ key });
}
async getPresignedUrl(key: string) {
return await this.s3Service.getPresignedUrl({
key,
operation: 'getObject',
expiresIn: 3600,
});
}
}3. Use DynamoDB Service
import { Injectable } from '@nestjs/common';
import { DynamoDBService } from '@noukha-technologies/aws-store';
@Injectable()
export class DataService {
constructor(private readonly dynamoService: DynamoDBService) {}
async createItem(item: any) {
return await this.dynamoService.put({
item,
});
}
async getItem(key: any) {
return await this.dynamoService.get({ key });
}
async queryItems(condition: string, values: any) {
return await this.dynamoService.query({
keyConditionExpression: condition,
expressionAttributeValues: values,
});
}
}Configuration
Environment Variables
You can also configure the module using environment variables:
AwsStoreModule.forRootAsync({
useFactory: () => ({
region: process.env.AWS_REGION,
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
s3: {
bucketName: process.env.S3_BUCKET_NAME,
},
dynamodb: {
tableName: process.env.DYNAMODB_TABLE_NAME,
},
}),
}),API Reference
S3Service
upload(options: S3UploadOptions): Promise<S3UploadResult>download(options: S3DownloadOptions): Promise<Buffer>delete(options: S3DeleteOptions): Promise<void>getPresignedUrl(options: S3PresignedUrlOptions): Promise<string>
DynamoDBService
put(options: DynamoDBPutOptions): Promise<DynamoDBItem>get(options: DynamoDBGetOptions): Promise<DynamoDBItem | null>query(options: DynamoDBQueryOptions): Promise<{items: DynamoDBItem[], lastEvaluatedKey?: any}>scan(options: DynamoDBScanOptions): Promise<{items: DynamoDBItem[], lastEvaluatedKey?: any}>update(options: DynamoDBUpdateOptions): Promise<DynamoDBItem | null>delete(options: DynamoDBDeleteOptions): Promise<DynamoDBItem | null>
License
MIT
