Skip to content

Commit b0baf98

Browse files
committed
Support storing on S3 using any-bucket.
1 parent 9ea20da commit b0baf98

File tree

7 files changed

+1343
-7
lines changed

7 files changed

+1343
-7
lines changed

Diff for: .gitignore

+5
Original file line numberDiff line numberDiff line change
@@ -41,3 +41,8 @@ logs
4141
# Data
4242
/storage
4343
.yarn
44+
45+
# Elastic Beanstalk Files
46+
.elasticbeanstalk/*
47+
!.elasticbeanstalk/*.cfg.yml
48+
!.elasticbeanstalk/*.global.yml

Diff for: package.json

+1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
"test:e2e": "jest --config ./test/jest-e2e.json"
2424
},
2525
"dependencies": {
26+
"@aws-sdk/client-s3": "^3.504.0",
2627
"@ltonetwork/http-message-signatures": "^0.1.8",
2728
"@ltonetwork/lto": "^0.15.8",
2829
"@nestjs/axios": "^3.0.0",

Diff for: src/common/aws/aws.module.ts

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { Module } from '@nestjs/common';
2+
import { S3 } from '@aws-sdk/client-s3';
3+
import { awsProviders } from './aws.providers';
4+
5+
@Module({
6+
providers: [...awsProviders],
7+
exports: [S3],
8+
})
9+
export class AwsModule {}

Diff for: src/common/aws/aws.providers.ts

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { S3 } from '@aws-sdk/client-s3';
2+
3+
export const awsProviders = [
4+
{
5+
provide: S3,
6+
useFactory: async () => {
7+
return new S3();
8+
},
9+
}
10+
];

Diff for: src/inbox/inbox.module.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,10 @@ import { ConfigModule } from '../common/config/config.module';
55
import { RedisModule } from '../common/redis/redis.module';
66
import { InboxController } from './inbox.controller';
77
import { LoggerModule } from '../common/logger/logger.module';
8+
import { AwsModule } from '../common/aws/aws.module';
89

910
@Module({
10-
imports: [ConfigModule, RedisModule, LoggerModule],
11+
imports: [ConfigModule, RedisModule, LoggerModule, AwsModule],
1112
providers: [InboxService, ...inboxProviders],
1213
exports: [InboxService],
1314
controllers: [InboxController],

Diff for: src/inbox/inbox.providers.ts

+15-4
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,24 @@
11
import { ConfigService } from '../common/config/config.service';
22
import LocalBucket from 'any-bucket/local';
3+
import { S3 } from '@aws-sdk/client-s3';
4+
import S3Bucket from 'any-bucket/s3';
35

46
export const inboxProviders = [
57
{
68
provide: 'INBOX_BUCKET',
7-
useFactory: async (config: ConfigService) => {
8-
// TODO: support other storage providers: S3, GCS, Azure.
9-
return new LocalBucket(config.getStoragePath());
9+
useFactory: async (config: ConfigService, s3: S3) => {
10+
const path = config.getStoragePath();
11+
12+
if (path.startsWith('s3://')) {
13+
return new S3Bucket(s3, path.slice(5));
14+
}
15+
16+
if (!path.includes(':')) {
17+
return new LocalBucket(path);
18+
}
19+
20+
throw new Error(`Unsupported storage service '${path}'`);
1021
},
11-
inject: [ConfigService],
22+
inject: [ConfigService, S3],
1223
}
1324
]

0 commit comments

Comments
 (0)