import { BullModule } from '@nestjs/bullmq'; import { type MiddlewareConsumer, Module, type NestModule, RequestMethod } from '@nestjs/common'; import { JwtModule } from '@nestjs/jwt'; import { BullMQAdapter } from '@bull-board/api/bullMQAdapter'; import { ExpressAdapter } from '@bull-board/express'; import { BullBoardModule } from '@bull-board/nestjs'; import { QUEUE_METRICS_QUEUE_NAMES } from '../metrics/infrastructure/queue-metrics.constants'; import { BullBoardAuthMiddleware } from './bull-board-auth.middleware'; @Module({ imports: [ JwtModule.register({}), BullBoardModule.forRoot({ route: '/admin/queues', adapter: ExpressAdapter, }), ...QUEUE_METRICS_QUEUE_NAMES.map((name) => BullModule.registerQueue({ name })), BullBoardModule.forFeature( ...QUEUE_METRICS_QUEUE_NAMES.map((name) => ({ name, adapter: BullMQAdapter, })), ), ], providers: [BullBoardAuthMiddleware], }) export class QueuesModule implements NestModule { configure(consumer: MiddlewareConsumer): void { consumer .apply(BullBoardAuthMiddleware) .forRoutes( { path: 'admin/queues', method: RequestMethod.ALL }, { path: 'admin/queues/(.*)', method: RequestMethod.ALL }, ); } }