diff --git a/packages/hoppscotch-backend/src/admin/admin.module.ts b/packages/hoppscotch-backend/src/admin/admin.module.ts index 593038fc2..9b4afd532 100644 --- a/packages/hoppscotch-backend/src/admin/admin.module.ts +++ b/packages/hoppscotch-backend/src/admin/admin.module.ts @@ -4,7 +4,6 @@ import { AdminService } from './admin.service'; import { PrismaModule } from '../prisma/prisma.module'; import { PubSubModule } from '../pubsub/pubsub.module'; import { UserModule } from '../user/user.module'; -import { MailerModule } from '../mailer/mailer.module'; import { TeamModule } from '../team/team.module'; import { TeamInvitationModule } from '../team-invitation/team-invitation.module'; import { TeamEnvironmentsModule } from '../team-environments/team-environments.module'; @@ -19,7 +18,6 @@ import { InfraConfigModule } from 'src/infra-config/infra-config.module'; PrismaModule, PubSubModule, UserModule, - MailerModule, TeamModule, TeamInvitationModule, TeamEnvironmentsModule, diff --git a/packages/hoppscotch-backend/src/app.module.ts b/packages/hoppscotch-backend/src/app.module.ts index 11babb2c7..90063e7ef 100644 --- a/packages/hoppscotch-backend/src/app.module.ts +++ b/packages/hoppscotch-backend/src/app.module.ts @@ -23,6 +23,7 @@ import { AppController } from './app.controller'; import { ConfigModule, ConfigService } from '@nestjs/config'; import { InfraConfigModule } from './infra-config/infra-config.module'; import { loadInfraConfiguration } from './infra-config/helper'; +import { MailerModule } from './mailer/mailer.module'; @Module({ imports: [ @@ -79,6 +80,7 @@ import { loadInfraConfiguration } from './infra-config/helper'; }, ], }), + MailerModule.register(), UserModule, AuthModule.register(), AdminModule, diff --git a/packages/hoppscotch-backend/src/auth/auth.module.ts b/packages/hoppscotch-backend/src/auth/auth.module.ts index 54b7d0898..5fa5b018e 100644 --- a/packages/hoppscotch-backend/src/auth/auth.module.ts +++ b/packages/hoppscotch-backend/src/auth/auth.module.ts @@ -2,7 +2,6 @@ import { Module } from '@nestjs/common'; import { AuthService } from './auth.service'; import { AuthController } from './auth.controller'; import { UserModule } from 'src/user/user.module'; -import { MailerModule } from 'src/mailer/mailer.module'; import { PrismaModule } from 'src/prisma/prisma.module'; import { PassportModule } from '@nestjs/passport'; import { JwtModule } from '@nestjs/jwt'; @@ -19,7 +18,6 @@ import { loadInfraConfiguration } from 'src/infra-config/helper'; imports: [ PrismaModule, UserModule, - MailerModule, PassportModule, JwtModule.registerAsync({ imports: [ConfigModule], diff --git a/packages/hoppscotch-backend/src/mailer/mailer.module.ts b/packages/hoppscotch-backend/src/mailer/mailer.module.ts index 9f2c87514..a9d422d79 100644 --- a/packages/hoppscotch-backend/src/mailer/mailer.module.ts +++ b/packages/hoppscotch-backend/src/mailer/mailer.module.ts @@ -1,4 +1,4 @@ -import { Module } from '@nestjs/common'; +import { Global, Module } from '@nestjs/common'; import { MailerModule as NestMailerModule } from '@nestjs-modules/mailer'; import { HandlebarsAdapter } from '@nestjs-modules/mailer/dist/adapters/handlebars.adapter'; import { MailerService } from './mailer.service'; @@ -8,28 +8,41 @@ import { MAILER_SMTP_URL_UNDEFINED, } from 'src/errors'; import { ConfigService } from '@nestjs/config'; +import { loadInfraConfiguration } from 'src/infra-config/helper'; +@Global() @Module({ - imports: [ - NestMailerModule.forRootAsync({ - inject: [ConfigService], - useFactory: async (configService: ConfigService) => ({ - transport: - configService.get('INFRA.MAILER_SMTP_URL') ?? - throwErr(MAILER_SMTP_URL_UNDEFINED), - defaults: { - from: - configService.get('INFRA.MAILER_ADDRESS_FROM') ?? - throwErr(MAILER_FROM_ADDRESS_UNDEFINED), - }, - template: { - dir: __dirname + '/templates', - adapter: new HandlebarsAdapter(), - }, - }), - }), - ], + imports: [], providers: [MailerService], exports: [MailerService], }) -export class MailerModule {} +export class MailerModule { + static async register() { + const env = await loadInfraConfiguration(); + + let mailerSmtpUrl = env.INFRA.MAILER_SMTP_URL; + let mailerAddressFrom = env.INFRA.MAILER_ADDRESS_FROM; + + if (!env.INFRA.MAILER_SMTP_URL || !env.INFRA.MAILER_ADDRESS_FROM) { + const config = new ConfigService(); + mailerSmtpUrl = config.get('MAILER_SMTP_URL'); + mailerAddressFrom = config.get('MAILER_ADDRESS_FROM'); + } + + return { + module: MailerModule, + imports: [ + NestMailerModule.forRoot({ + transport: mailerSmtpUrl ?? throwErr(MAILER_SMTP_URL_UNDEFINED), + defaults: { + from: mailerAddressFrom ?? throwErr(MAILER_FROM_ADDRESS_UNDEFINED), + }, + template: { + dir: __dirname + '/templates', + adapter: new HandlebarsAdapter(), + }, + }), + ], + }; + } +} diff --git a/packages/hoppscotch-backend/src/team-invitation/team-invitation.module.ts b/packages/hoppscotch-backend/src/team-invitation/team-invitation.module.ts index 17598fedb..f4cd4e368 100644 --- a/packages/hoppscotch-backend/src/team-invitation/team-invitation.module.ts +++ b/packages/hoppscotch-backend/src/team-invitation/team-invitation.module.ts @@ -1,5 +1,4 @@ import { Module } from '@nestjs/common'; -import { MailerModule } from 'src/mailer/mailer.module'; import { PrismaModule } from 'src/prisma/prisma.module'; import { PubSubModule } from 'src/pubsub/pubsub.module'; import { TeamModule } from 'src/team/team.module'; @@ -12,7 +11,7 @@ import { TeamInviteeGuard } from './team-invitee.guard'; import { TeamTeamInviteExtResolver } from './team-teaminvite-ext.resolver'; @Module({ - imports: [PrismaModule, TeamModule, PubSubModule, UserModule, MailerModule], + imports: [PrismaModule, TeamModule, PubSubModule, UserModule], providers: [ TeamInvitationService, TeamInvitationResolver,