PageTemplateController (added on this branch) guards its lookup/toggle routes with UserThrottlerGuard, which depends on the throttler options provided by ThrottleModule. CollaborationModule -> TransclusionModule registers that controller, and the collab server bootstraps CollabAppModule, which did not import ThrottleModule. The API server's AppModule does, so :3000 booted, but the collab server (:3001) crashed at startup with 'Nest can't resolve dependencies of the UserThrottlerGuard ... THROTTLER:MODULE_OPTIONS'. Without collab the editor can't sync, so live editing was broken on this branch. Import ThrottleModule into CollabAppModule, mirroring AppModule, so the guard resolves in the collab process too. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
60 lines
2.2 KiB
TypeScript
60 lines
2.2 KiB
TypeScript
import { Module } from '@nestjs/common';
|
|
import { AppController } from '../../app.controller';
|
|
import { AppService } from '../../app.service';
|
|
import { EnvironmentModule } from '../../integrations/environment/environment.module';
|
|
import { EnvironmentService } from '../../integrations/environment/environment.service';
|
|
import { CollaborationModule } from '../collaboration.module';
|
|
import { DatabaseModule } from '@docmost/db/database.module';
|
|
import { QueueModule } from '../../integrations/queue/queue.module';
|
|
import { EventEmitterModule } from '@nestjs/event-emitter';
|
|
import { HealthModule } from '../../integrations/health/health.module';
|
|
import { CollaborationController } from './collaboration.controller';
|
|
import { LoggerModule } from '../../common/logger/logger.module';
|
|
import { RedisModule } from '@nestjs-labs/nestjs-ioredis';
|
|
import { RedisConfigService } from '../../integrations/redis/redis-config.service';
|
|
import { CaslModule } from '../../core/casl/casl.module';
|
|
// TransclusionModule (via CollaborationModule) registers PageTemplateController,
|
|
// whose UserThrottlerGuard needs the throttler options from ThrottleModule. The
|
|
// API server's AppModule imports it; the collab process must too or it fails to
|
|
// resolve THROTTLER:MODULE_OPTIONS at boot.
|
|
import { ThrottleModule } from '../../integrations/throttle/throttle.module';
|
|
import { CacheModule } from '@nestjs/cache-manager';
|
|
import KeyvRedis from '@keyv/redis';
|
|
|
|
@Module({
|
|
imports: [
|
|
LoggerModule,
|
|
DatabaseModule,
|
|
EnvironmentModule,
|
|
CaslModule,
|
|
ThrottleModule,
|
|
CollaborationModule,
|
|
QueueModule,
|
|
HealthModule,
|
|
EventEmitterModule.forRoot(),
|
|
RedisModule.forRootAsync({
|
|
useClass: RedisConfigService,
|
|
}),
|
|
CacheModule.registerAsync({
|
|
isGlobal: true,
|
|
useFactory: async (environmentService: EnvironmentService) => {
|
|
const redisUrl = environmentService.getRedisUrl();
|
|
|
|
return {
|
|
ttl: 5 * 1000,
|
|
stores: [new KeyvRedis(redisUrl)],
|
|
};
|
|
},
|
|
inject: [EnvironmentService],
|
|
}),
|
|
],
|
|
controllers: [
|
|
AppController,
|
|
...(process.env.COLLAB_SHOW_STATS?.toLowerCase() === 'true'
|
|
? [CollaborationController]
|
|
: []),
|
|
],
|
|
providers: [AppService],
|
|
})
|
|
export class CollabAppModule {}
|