src/app.module.ts
| configure | ||||||
configure(consumer: MiddlewareConsumer)
|
||||||
|
Defined in src/app.module.ts:108
|
||||||
|
Parameters :
Returns :
void
|
import { Module, NestModule, MiddlewareConsumer } from '@nestjs/common';
import { AppController } from './app.controller';
import { APP_GUARD } from '@nestjs/core';
import { AppService } from './app.service';
import { ConfigModule } from '@nestjs/config';
import { UtilsModule } from './utils/utils.module';
import { DatabaseModule } from './database/database.module';
import { UsersModule } from './users/users.module';
import { AuthModule } from './auth/auth.module';
import { EmailsModule } from './emails/emails.module';
import * as Joi from 'joi';
import { AuthGuard } from './auth/auth.guard';
import { CommonModule } from './common/common.module';
import { UploadsModule } from './uploads/uploads.module';
import configuration from './config/cnf';
import { CloudModule } from './cloud/cloud.module';
import { CodesModule } from './codes/codes.module';
import { HttpExceptionFilter } from './exceptions/http-exception.filter';
import { CacheModule } from './cache/cache.module';
import { AlbumsModule } from './albums/albums.module';
import { AdminModule } from './admin/admin.module';
import { CronModule } from './cron/cron.module';
import { LocaleInterceptor } from './common/locale.interceptor';
import { RateLimiterModule, RateLimiterGuard } from 'nestjs-rate-limiter';
@Module({
imports: [
ConfigModule.forRoot({
validationSchema: Joi.object({
DATABASE_URL: Joi.string().required(),
NODE_NAME: Joi.string().default('Fileglass backend node'),
READ_REPLICA: Joi.string().default('0').allow('0', '1'),
READ_DATABASE_URL: Joi.optional(),
PORT: Joi.string().default('5000'),
JWT_SECRET: Joi.string().required(),
SG_USER: Joi.string().required(),
SG_KEY: Joi.string().required(),
CAPTCHA: Joi.string().required(),
AWS_EPOINT: Joi.string().required(),
AWS_AKEY: Joi.string().required(),
AWS_SEC: Joi.string().required(),
ARACH_URL: Joi.string().required(),
ARACH_KEY: Joi.string().required(),
ENCR_KEY: Joi.string().required(),
SENTRY_DSN: Joi.string().required(),
AWS_DISTROID: Joi.string().required(),
CACHE_AKEY: Joi.string().required(),
CF_ZONEID: Joi.string().required(),
CF_EMAIL: Joi.string().required(),
CF_KEY: Joi.string().required(),
DISC_ID: Joi.string().required(),
DISC_SEC: Joi.string().required(),
DISCORD_REDIR_URL: Joi.string().required(),
DEPL_WH_ID: Joi.string().required(),
DEPL_WH_SEC: Joi.string().required(),
GH_ID: Joi.string().required(),
GH_SEC: Joi.string().required(),
DEV_KEY: Joi.string().required(),
GH_KEY: Joi.string().required(),
}),
isGlobal: true,
cache: true,
load: [configuration],
}),
UtilsModule,
DatabaseModule,
UsersModule,
AuthModule,
EmailsModule,
CommonModule,
UploadsModule,
CloudModule,
CodesModule,
CacheModule,
AlbumsModule,
AdminModule,
CronModule,
RateLimiterModule.register({
for: 'Fastify',
keyPrefix: 'global',
points: 100,
duration: 60,
blockDuration: 120,
errorMessage: 'Rate limit exceeded.',
}),
],
controllers: [AppController],
providers: [
{
provide: APP_GUARD,
useClass: RateLimiterGuard,
},
{
provide: 'APP_GUARD',
useClass: AuthGuard,
},
{
provide: 'APP_FILTER',
useClass: HttpExceptionFilter,
},
{ provide: 'APP_INTERCEPTOR', useClass: LocaleInterceptor },
AppService,
UtilsModule,
DatabaseModule,
],
})
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer) {}
}