File size: 10,570 Bytes
303c85f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
"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