| 1 | import type { Database } from '@ghost/db'; |
| 2 | import { Module } |
| 3 | import { ConfigModule, ConfigService |
| 4 | import { AuthModule } |
| 5 | |
| 6 | import { AppController } |
| 7 | import { AppService } |
| 8 | import { DATABASE, DatabaseModule |
| 9 | import { GitModule } |
| 10 | import { createAuth } |
| 11 | import { |
| 12 | emailVerificationEnabled, |
| 13 | MailModule, |
| 14 | mailConfigured, |
| 15 | } from './mail/mail.module.js'; |
| 16 | import { MailService } |
| 17 | import { EmailsModule } |
| 18 | import { IssuesModule } |
| 19 | import { PullRequestsModule } |
| 20 | import { RepositoriesModule } |
| 21 | import { UserModule } |
| 22 | import { BranchesService } |
| 23 | import { RepositoryAccessService } |
| 24 | import { WalService } |
| 25 | import { S3Service } |
| 26 | import { UsersService } |
| 27 | |
| 28 | @Module({ |
| 29 | imports: [ |
| 30 | ConfigModule.forRoot({ |
| 31 | isGlobal: true, |
| 32 | // `.env` interpolates values (e.g. BETTER_AUTH_URL=http://localhost:${API_PORT}), |
| 33 | // which dotenv does not expand on its own. |
| 34 | expandVariables: true, |
| 35 | envFilePath: ['.env.local', |
| 36 | }), |
| 37 | DatabaseModule, |
| 38 | MailModule, |
| 39 | AuthModule.forRootAsync({ |
| 40 | imports: [DatabaseModule, |
| 41 | inject: [DATABASE, |
| 42 | useFactory: (db: |
| 43 | auth: createAuth(db |
| 44 | secret: config.getOrThrow |
| 45 | baseURL: config.getOrThrow |
| 46 | trustedOrigins: config |
| 47 | .get<string>( |
| 48 | .split(',') |
| 49 | .map((origin) |
| 50 | .filter(Boolean), |
| 51 | cookieDomain: config.get |
| 52 | webAppUrl: config.get |
| 53 | sendChangeEmail: mailConfigured(config |
| 54 | ? ({ email, |
| 55 | mail.sendChangeEmailEmail(email |
| 56 | name, |
| 57 | newEmail, |
| 58 | approveUrl: url, |
| 59 | }) |
| 60 | : undefined, |
| 61 | sendResetPassword: mailConfigured(config |
| 62 | ? ({ email, |
| 63 | mail.sendResetPasswordEmail(email |
| 64 | : undefined, |
| 65 | sendVerificationEmail: emailVerificationEnabled(config |
| 66 | ? ({ email, |
| 67 | mail.sendVerificationEmail(email |
| 68 | : undefined, |
| 69 | }), |
| 70 | }), |
| 71 | }), |
| 72 | RepositoriesModule, |
| 73 | PullRequestsModule, |
| 74 | IssuesModule, |
| 75 | EmailsModule, |
| 76 | GitModule, |
| 77 | UserModule, |
| 78 | ], |
| 79 | controllers: [AppController], |
| 80 | providers: [ |
| 81 | AppService, |
| 82 | UsersService, |
| 83 | S3Service, |
| 84 | WalService, |
| 85 | BranchesService, |
| 86 | RepositoryAccessService, |
| 87 | ], |
| 88 | }) |
| 89 | export class AppModule |