Adds the Bull Board BullMQ dashboard at /api/v1/admin/queues, guarded by a JWT + ADMIN-role middleware that mirrors the existing JwtAuthGuard + RolesGuard contract. The dashboard registers all queues in QUEUE_METRICS_QUEUE_NAMES automatically. - New QueuesModule with BullBoardModule.forRoot/forFeature wiring - BullBoardAuthMiddleware (cookie-first JWT extraction, ADMIN-only) - CSRF exclusion for dashboard routes in AppModule - 8 unit tests covering auth contract - Dependencies: @bull-board/api, @bull-board/express, @bull-board/nestjs Refs: GOO-175 Co-Authored-By: Paperclip <noreply@paperclip.ing>
37 lines
1.2 KiB
TypeScript
37 lines
1.2 KiB
TypeScript
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 },
|
|
);
|
|
}
|
|
}
|