Files
lisglosips/apps/api/src/modules/app.module.ts
T

85 lines
3.2 KiB
TypeScript

import { Module } from '@nestjs/common';
import { CallerAnalyticsModule } from './caller-analytics/caller-analytics.module.js';
import { ConfigModule } from '@nestjs/config';
import crypto from 'node:crypto';
import { LoggerModule } from 'nestjs-pino';
import { API_PREFIX } from '@lisglosips/contracts';
import { LOG_REDACT_PATHS } from '@lisglosips/observability';
import { appConfig, validationSchema } from '../shared/config.js';
import { AuditLogsModule } from './audit-logs/audit-logs.module.js';
import { AuditModule } from './audit/audit.module.js';
import { ActiveCallsModule } from './active-calls/active-calls.module.js';
import { AuthModule } from './auth/auth.module.js';
import { BusinessPrefixesModule } from './business-prefixes/business-prefixes.module.js';
import { CdrsModule } from './cdrs/cdrs.module.js';
import { CustomerGatewayPoliciesModule } from './customer-gateway-policies/customer-gateway-policies.module.js';
import { CustomerGatewaysModule } from './customer-gateways/customer-gateways.module.js';
import { CustomersModule } from './customers/customers.module.js';
import { DashboardModule } from './dashboard/dashboard.module.js';
import { DatabaseModule } from './database/database.module.js';
import { HealthModule } from './health/health.module.js';
import { LandingLineGroupsModule } from './landing-line-groups/landing-line-groups.module.js';
import { NumberLibraryModule } from './number-library/number-library.module.js';
import { RechargesModule } from './recharges/recharges.module.js';
import { RecordingsModule } from './recordings/recordings.module.js';
import { QualityModule } from './quality/quality.module.js';
import { RolesModule } from './roles/roles.module.js';
import { SecurityModule } from './security/security.module.js';
import { UsersModule } from './users/users.module.js';
import { VendorGatewaysModule } from './vendor-gateways/vendor-gateways.module.js';
import { VendorsModule } from './vendors/vendors.module.js';
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
cache: true,
load: [appConfig],
validationSchema,
validationOptions: {
abortEarly: false,
allowUnknown: true
}
}),
LoggerModule.forRoot({
pinoHttp: {
level: process.env.LISGLOSIPS_LOG_LEVEL ?? 'info',
name: process.env.LISGLOSIPS_SERVICE_NAME ?? 'api',
genReqId: (request) =>
request.headers[process.env.LISGLOSIPS_REQUEST_ID_HEADER ?? 'x-request-id']?.toString() ?? crypto.randomUUID(),
redact: {
paths: LOG_REDACT_PATHS,
censor: '[REDACTED]'
},
customProps: () => ({
apiPrefix: API_PREFIX
})
}
}),
DatabaseModule,
SecurityModule,
AuditModule,
AuthModule,
ActiveCallsModule,
CallerAnalyticsModule,
BusinessPrefixesModule,
CdrsModule,
DashboardModule,
CustomersModule,
CustomerGatewaysModule,
CustomerGatewayPoliciesModule,
RechargesModule,
VendorsModule,
VendorGatewaysModule,
LandingLineGroupsModule,
NumberLibraryModule,
QualityModule,
RecordingsModule,
UsersModule,
RolesModule,
AuditLogsModule,
HealthModule
]
})
export class AppModule {}