Skip to content

NestJS Integration

For NestJS applications, Torrin offers a native module implementation.

Setup

bash
npm install @nestjs/common @nestjs/core @torrin-kit/server @torrin-kit/server-nestjs @torrin-kit/storage-local

Module Registration

Import TorrinModule in your AppModule.

typescript
import { Module } from '@nestjs/common';
import { TorrinModule } from '@torrin-kit/server-nestjs';
import { createLocalStorageDriver } from '@torrin-kit/storage-local';
import { createInMemoryStore } from '@torrin-kit/server';

@Module({
  imports: [
    TorrinModule.forRoot({
      storage: createLocalStorageDriver({ 
        baseDir: './uploads' 
      }),
      store: createInMemoryStore(),
      uploadTtlMs: 24 * 60 * 60 * 1000,
    }),
  ],
})
export class AppModule {}

Using TorrinService

You can inject TorrinService to interact with uploads programmatically.

typescript
import { Injectable } from '@nestjs/common';
import { InjectTorrin, TorrinService } from '@torrin-kit/server-nestjs';

@Injectable()
export class UploadService {
  constructor(
    @InjectTorrin() private readonly torrin: TorrinService
  ) {}

  async getUploadStatus(uploadId: string) {
    return this.torrin.getStatus(uploadId);
  }
  
  async cleanExpiredUploads() {
    await this.torrin.cleanup();
  }
}

Async Configuration

If you need to load configuration asynchronously (e.g., from ConfigService):

typescript
TorrinModule.forRootAsync({
  imports: [ConfigModule],
  inject: [ConfigService],
  useFactory: (config: ConfigService) => ({
    storage: createS3StorageDriver({
      bucket: config.get('S3_BUCKET'),
      region: config.get('AWS_REGION'),
    }),
    store: createInMemoryStore(),
  }),
});