"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.AppModule = void 0; const common_1 = require("@nestjs/common"); const config_1 = require("@nestjs/config"); const bullmq_1 = require("@nestjs/bullmq"); const throttler_1 = require("@nestjs/throttler"); const throttler_storage_redis_1 = require("@nest-lab/throttler-storage-redis"); const core_1 = require("@nestjs/core"); const ioredis_1 = __importDefault(require("ioredis")); const prisma_module_1 = require("./prisma/prisma.module"); const common_module_1 = require("./common/common.module"); const admin_module_1 = require("./admin/admin.module"); const audit_module_1 = require("./audit/audit.module"); const redis_module_1 = require("./redis/redis.module"); const trpc_module_1 = require("./trpc/trpc.module"); const auth_module_1 = require("./auth/auth.module"); const guest_module_1 = require("./guest/guest.module"); const outreach_module_1 = require("./outreach/outreach.module"); const scheduling_module_1 = require("./scheduling/scheduling.module"); const assets_module_1 = require("./assets/assets.module"); const analytics_module_1 = require("./analytics/analytics.module"); const content_studio_module_1 = require("./content-studio/content-studio.module"); const websocket_module_1 = require("./websocket/websocket.module"); const queue_module_1 = require("./queue/queue.module"); const health_module_1 = require("./health/health.module"); const workspace_module_1 = require("./workspace/workspace.module"); const podcast_module_1 = require("./podcast/podcast.module"); const cache_module_1 = require("./common/cache/cache.module"); const rate_limit_module_1 = require("./common/rate-limit/rate-limit.module"); const file_security_module_1 = require("./common/file-security/file-security.module"); const events_module_1 = require("./events/events.module"); const network_module_1 = require("./network/network.module"); const recording_module_1 = require("./recording/recording.module"); const users_module_1 = require("./users/users.module"); const notifications_module_1 = require("./notifications/notifications.module"); const portal_module_1 = require("./portal/portal.module"); const diary_module_1 = require("./diary/diary.module"); const billing_module_1 = require("./billing/billing.module"); const wallet_module_1 = require("./wallet/wallet.module"); const reconciliation_module_1 = require("./reconciliation/reconciliation.module"); const settings_module_1 = require("./settings/settings.module"); const integrations_module_1 = require("./integrations/integrations.module"); const livekit_module_1 = require("./livekit/livekit.module"); const ai_module_1 = require("./ai/ai.module"); const crm_module_1 = require("./crm/crm.module"); const chat_module_1 = require("./chat/chat.module"); const tasks_module_1 = require("./tasks/tasks.module"); const tracing_module_1 = require("./common/tracing/tracing.module"); const workspace_verification_module_1 = require("./verification/workspace-verification.module"); const outbound_webhook_module_1 = require("./webhooks/outbound-webhook.module"); const env_validation_1 = require("./common/config/env.validation"); let AppModule = class AppModule { }; exports.AppModule = AppModule; exports.AppModule = AppModule = __decorate([ (0, common_1.Module)({ imports: [ common_module_1.CommonModule, tracing_module_1.TracingModule, config_1.ConfigModule.forRoot({ isGlobal: true, envFilePath: [".env.local", ".env", "../../.env.local", "../../.env"], cache: true, validate: env_validation_1.validate, }), throttler_1.ThrottlerModule.forRootAsync({ inject: [config_1.ConfigService], useFactory: (configService) => { const ttl = configService.get("RATE_LIMIT_TTL", 60); const limit = configService.get("RATE_LIMIT_MAX", 100); const redisUrl = configService.get("REDIS_URL"); let redisConnection; if (redisUrl) { redisConnection = new ioredis_1.default(redisUrl, { maxRetriesPerRequest: null, enableReadyCheck: false }); } else { redisConnection = new ioredis_1.default({ host: configService.get("REDIS_HOST") || "localhost", port: parseInt(configService.get("REDIS_PORT") || "6379", 10), password: configService.get("REDIS_PASSWORD"), username: configService.get("REDIS_USERNAME"), maxRetriesPerRequest: null, enableReadyCheck: false, }); } return { throttlers: [ { name: "short", ttl: 1000, limit: 10, }, { name: "medium", ttl: ttl * 1000, limit, }, { name: "long", ttl: 3600000, limit: 1000, }, ], storage: new throttler_storage_redis_1.ThrottlerStorageRedisService(redisConnection), }; }, }), bullmq_1.BullModule.forRootAsync({ inject: [config_1.ConfigService], useFactory: (configService) => { const redisUrl = configService.get("REDIS_URL"); let connectionParams = {}; if (redisUrl) { const parsedUrl = new URL(redisUrl); connectionParams = { host: parsedUrl.hostname, port: parseInt(parsedUrl.port || "6379", 10), username: parsedUrl.username ? decodeURIComponent(parsedUrl.username) : undefined, password: parsedUrl.password ? decodeURIComponent(parsedUrl.password) : undefined, tls: redisUrl.startsWith("rediss://") ? { rejectUnauthorized: false } : undefined, }; } else { connectionParams = { host: configService.get("REDIS_HOST") || "localhost", port: parseInt(configService.get("REDIS_PORT") || "6379", 10), password: configService.get("REDIS_PASSWORD"), username: configService.get("REDIS_USERNAME"), tls: configService.get("REDIS_TLS") === "true" ? {} : undefined, }; } return { connection: connectionParams, defaultJobOptions: { attempts: 3, backoff: { type: "exponential", delay: 1000, }, removeOnComplete: { age: 86400, count: 100, }, removeOnFail: { age: 604800, }, }, }; }, }), admin_module_1.AdminModule, audit_module_1.AuditModule, cache_module_1.CacheModule, health_module_1.HealthModule, prisma_module_1.PrismaModule, redis_module_1.RedisModule, rate_limit_module_1.RateLimitModule, file_security_module_1.FileSecurityModule, events_module_1.EventsModule, trpc_module_1.TrpcModule, websocket_module_1.WebsocketModule, outbound_webhook_module_1.OutboundWebhookModule, queue_module_1.QueueModule, auth_module_1.AuthModule, workspace_module_1.WorkspaceModule, workspace_verification_module_1.WorkspaceVerificationModule, podcast_module_1.PodcastModule, guest_module_1.GuestModule, outreach_module_1.OutreachModule, scheduling_module_1.SchedulingModule, assets_module_1.AssetsModule, analytics_module_1.AnalyticsModule, content_studio_module_1.ContentStudioModule, network_module_1.NetworkModule, recording_module_1.RecordingModule, users_module_1.UsersModule, notifications_module_1.NotificationsModule, portal_module_1.PortalModule, diary_module_1.DiaryModule, billing_module_1.BillingModule, wallet_module_1.WalletModule, reconciliation_module_1.ReconciliationModule, settings_module_1.SettingsModule, integrations_module_1.IntegrationsModule, livekit_module_1.LivekitModule, ai_module_1.AIModule, crm_module_1.CrmModule, chat_module_1.ChatModule, tasks_module_1.TasksModule, ], providers: [ { provide: core_1.APP_GUARD, useClass: throttler_1.ThrottlerGuard, }, ], }) ], AppModule); //# sourceMappingURL=app.module.js.map