Agrupados por tipo
Los decoradores de routing, ciclo de vida, DI, security, TypeORM, mailer, cache, scheduler y queues se separan para mantener juntas las APIs similares.
Decoradores
Esta página enumera la superficie de decoradores del framework expuesta por los paquetes upstream, agrupada por caso de uso y etiquetada con el paquete del que procede cada decorador, además de pequeños ejemplos que puedes adaptar directamente.
116 decoradores en 16 grupos
Los decoradores de routing, ciclo de vida, DI, security, TypeORM, mailer, cache, scheduler y queues se separan para mantener juntas las APIs similares.
Cada entrada muestra el paquete y la ruta original donde vive el decorador.
Cada decorador incluye un pequeño fragmento tomado de los mismos patrones usados en los ejemplos de xtaskjs y en este sitio.
Catálogo
Grupo de decoradores
Decoradores de declaración de rutas y canalización de peticiones exportados por @xtaskjs/common. Son los bloques básicos HTTP usados por los controladores en todos los ejemplos.
13 decoradores
Grupo de decoradores
Decoradores de ciclo de vida de @xtaskjs/common usados para ejecutar lógica de arranque, tareas CLI y handlers de eventos dentro del ciclo de vida de la aplicación.
3 decoradores
Grupo de decoradores
Decoradores de inyección de dependencias y componentes de @xtaskjs/core. Marcan providers para el descubrimiento del contenedor y seleccionan bindings con nombre para la inyección.
8 decoradores
Grupo de decoradores
Decoradores de autenticación, autorización, estrategias e inyección exportados por @xtaskjs/security. Se apoyan en la metadata de rutas de @xtaskjs/common.
10 decoradores
Grupo de decoradores
Decoradores de registro e inyección de TypeORM exportados por @xtaskjs/typeorm. Vinculan datasources y repositorios dentro del mismo contenedor DI.
5 decoradores
Grupo de decoradores
CQRS configuration, handler, projection, idempotency, and injector decorators exported by @xtaskjs/cqrs. These connect command, query, and event flows to the xtaskjs container and read or write datasource aliases.
16 decoradores
Grupo de decoradores
Configuration, aggregate, subscriber, and injector decorators exported by @xtaskjs/event-source. These wire aggregate metadata, event appliers, repositories, and stored-event subscribers into the xtaskjs lifecycle.
9 decoradores
Grupo de decoradores
Decoradores de mailer exportados por @xtaskjs/mailer. Registran transports y plantillas e inyectan servicios de entrega en clases gestionadas por DI.
5 decoradores
Grupo de decoradores
Decoradores de configuración e inyección exportados por @xtaskjs/internationalization. Registran el comportamiento de locale y exponen servicios de traducción dentro de clases gestionadas por DI.
7 decoradores
Grupo de decoradores
Decoradores orientados a DTO de @xtaskjs/value-objects que convierten campos crudos de la petición en envoltorios de dominio normalizados antes de que los consuman controladores y servicios.
1 decoradores
Grupo de decoradores
Configuration, model, injector, and method decorators from @xtaskjs/cache used to register cache models, inject repositories or services, and control read/write cache behavior in DI-managed services.
9 decoradores
Grupo de decoradores
HTTP response decorators from @xtaskjs/cache used to apply Cache-Control directives, validators, and Vary behavior to routes, plus injector access to HttpCacheService.
7 decoradores
Grupo de decoradores
Decoradores de scheduling de @xtaskjs/scheduler usados para declarar trabajos cron, interval y timeout e inyectar servicios scheduler en tiempo de ejecución.
5 decoradores
Grupo de decoradores
Rate-limiting decorators from @xtaskjs/throttler used to protect routes and inject runtime throttling services.
3 decoradores
Grupo de decoradores
Decoradores de gateway, eventos e inyección exportados por @xtaskjs/socket-io. Mantienen los handlers realtime dentro de servicios xtaskjs normales y conectan namespaces de Socket.IO al contenedor DI.
8 decoradores
Grupo de decoradores
Decoradores de consumo, publicación e inyección de colas exportados por @xtaskjs/queues. Conectan transports de broker y colas en memoria con servicios gestionados por DI.
7 decoradores
Grupo de decoradores
Decoradores de declaración de rutas y canalización de peticiones exportados por @xtaskjs/common. Son los bloques básicos HTTP usados por los controladores en todos los ejemplos.
Define la ruta base de un controlador HTTP y puede adjuntar middlewares, guards y pipes compartidos.
import { Controller, Get } from "@xtaskjs/common";
@Controller("/users")
export class UsersController {
@Get("/")
list() {
return [];
}
}
Registra un handler de ruta GET y opcionalmente añade middleware, guards o pipes específicos de la ruta.
import { Controller, Get } from "@xtaskjs/common";
@Controller("/health")
export class HealthController {
@Get("/")
status() {
return { ok: true };
}
}
Registra un handler de ruta POST para comandos, envíos de formularios o creación de recursos.
import { Controller, Post } from "@xtaskjs/common";
@Controller("/users")
export class UsersController {
@Post("/")
create(req: any) {
return { email: req.body.email, created: true };
}
}
Registra un handler de ruta PATCH para actualizaciones parciales.
import { Controller, Patch } from "@xtaskjs/common";
@Controller("/users")
export class UsersController {
@Patch("/:id")
update(req: any) {
return { id: req.params.id, updated: true };
}
}
Registra un handler de ruta DELETE para eliminaciones y operaciones destructivas.
import { Controller, Delete } from "@xtaskjs/common";
@Controller("/users")
export class UsersController {
@Delete("/:id")
remove(req: any) {
return { id: req.params.id, removed: true };
}
}
Binds request body data to a controller parameter and supports DTO transformation when validation pipes are enabled.
import { Body, Controller, Post } from "@xtaskjs/common";
class CreateUserDto {
email!: string;
}
@Controller("/users")
export class UsersController {
@Post("/")
create(@Body() body: CreateUserDto) {
return body;
}
}
Extracts route parameters by name or as a full params object for typed handler input.
import { Controller, Get, Param } from "@xtaskjs/common";
@Controller("/users")
export class UsersController {
@Get("/:id")
detail(@Param("id") id: string) {
return { id };
}
}
Maps query-string values to a method parameter, optionally by property name.
import { Controller, Get, Query } from "@xtaskjs/common";
@Controller("/users")
export class UsersController {
@Get("/")
list(@Query("role") role?: string) {
return { role };
}
}
Injects the adapter request object into a controller handler parameter.
import { Controller, Get, Req } from "@xtaskjs/common";
@Controller("/auth")
export class AuthController {
@Get("/me")
me(@Req() req: any) {
return { auth: req.auth };
}
}
Injects the adapter response object into a controller handler parameter.
import { Controller, Get, Res } from "@xtaskjs/common";
@Controller("/health")
export class HealthController {
@Get("/")
status(@Res() res: any) {
return { statusCode: res.statusCode || 200 };
}
}
Añade uno o más middlewares a un controlador o ruta para que la lógica transversal se ejecute antes del handler.
import { Controller, Get, UseMiddlewares } from "@xtaskjs/common";
const requestLogger = async (_context: any, next: () => Promise<void>) => {
await next();
};
@Controller("/audit")
@UseMiddlewares(requestLogger)
export class AuditController {
@Get("/")
list() {
return { ok: true };
}
}
Adjunta funciones guard a un controlador o ruta para permitir, denegar o enriquecer el contexto de la petición antes de la ejecución.
import { Controller, Get, UseGuards } from "@xtaskjs/common";
const adminGuard = (context: any) => context.request?.headers?.["x-role"] === "admin";
@Controller("/admin")
export class AdminController {
@Get("/")
@UseGuards(adminGuard)
dashboard() {
return { secure: true };
}
}
Aplica funciones de transformación o validación de argumentos antes de que un handler de ruta consuma la entrada.
import { Controller, Post, UsePipes } from "@xtaskjs/common";
const trimEmailPipe = (value: any) => ({ ...value, email: String(value.email || "").trim() });
@Controller("/accounts")
export class AccountController {
@Post("/")
@UsePipes(trimEmailPipe)
create(req: any) {
return req.body;
}
}
Grupo de decoradores
Decoradores de ciclo de vida de @xtaskjs/common usados para ejecutar lógica de arranque, tareas CLI y handlers de eventos dentro del ciclo de vida de la aplicación.
Registra un handler de evento del ciclo de vida para una fase dada y una prioridad de ejecución.
import { OnEvent } from "@xtaskjs/common";
export class AuditListener {
@OnEvent("AFTER_CONTROLLER_HANDLER", 10)
afterHandler() {
console.log("controller completed");
}
}
Ejecuta un método durante el arranque de la aplicación con un orden de prioridad opcional.
import { ApplicationRunner } from "@xtaskjs/common";
import { Service } from "@xtaskjs/core";
@Service()
export class SeedRunner {
@ApplicationRunner(100)
async seed() {
console.log("seeding application data");
}
}
Marca un método como runner de línea de comandos para que pueda ejecutarse en flujos orientados a CLI.
import { CommandLineRunner } from "@xtaskjs/common";
import { Service } from "@xtaskjs/core";
@Service()
export class ReportsRunner {
@CommandLineRunner(0)
async generate() {
console.log("generating reports");
}
}
Grupo de decoradores
Decoradores de inyección de dependencias y componentes de @xtaskjs/core. Marcan providers para el descubrimiento del contenedor y seleccionan bindings con nombre para la inyección.
Decorador de componente de bajo nivel que almacena metadata de DI como alcance, condición, nombre y selección primaria.
import { Component } from "@xtaskjs/core";
@Component({ scope: "singleton", name: "clock" })
export class ClockService {}
Estereotipo de conveniencia para registrar una clase como componente de servicio gestionado por DI.
import { Service } from "@xtaskjs/core";
@Service()
export class BillingService {}
Registra una clase como componente controlador en el contenedor DI. Es independiente del decorador de rutas HTTP exportado por @xtaskjs/common.
import { Controller } from "@xtaskjs/core";
@Controller({ name: "admin-controller" })
export class AdminComponent {}
Estereotipo de conveniencia para providers tipo repositorio gestionados por el contenedor DI.
import { Repository } from "@xtaskjs/core";
@Repository()
export class UserLookupRepository {}
Inyecta una dependencia en una propiedad. El paquete también exporta Autowired como alias de AutoWired.
import { AutoWired } from "@xtaskjs/core";
import { UserService } from "./user.service";
export class AccountController {
@AutoWired({ qualifier: UserService.name })
private readonly users!: UserService;
}
Selecciona un binding con nombre para la inyección en parámetros del constructor cuando varias implementaciones comparten el mismo tipo.
import { Qualifier, Service } from "@xtaskjs/core";
@Service()
export class NotificationService {
constructor(@Qualifier("mailer:notifications") private readonly transport: any) {}
}
Marks a method to run after dependency injection completes for the instance.
import { PostConstruct, Service } from "@xtaskjs/core";
@Service()
export class BootstrapService {
@PostConstruct()
init() {
console.log("initialized");
}
}
Marks a method to run when the container destroys managed instances during shutdown.
import { PreDestroy, Service } from "@xtaskjs/core";
@Service()
export class WorkerService {
@PreDestroy()
stop() {
console.log("stopping");
}
}
Grupo de decoradores
Decoradores de autenticación, autorización, estrategias e inyección exportados por @xtaskjs/security. Se apoyan en la metadata de rutas de @xtaskjs/common.
Requiere un resultado de autenticación satisfactorio antes de que se ejecute un controlador o una ruta. Puede apuntar a una estrategia concreta o a una lista de estrategias.
import { Controller, Get } from "@xtaskjs/common";
import { Authenticated } from "@xtaskjs/security";
@Controller("/me")
@Authenticated()
export class ProfileController {
@Get("/")
profile(req: any) {
return req.user;
}
}
Alias de Authenticated para proyectos que prefieren un nombre de decorador más corto.
import { Auth } from "@xtaskjs/security";
@Auth(["default", "encrypted"])
export class SecureAreaController {}
Aplica requisitos de autorización por roles a una ruta ya autenticada.
import { Controller, Get } from "@xtaskjs/common";
import { Authenticated, Roles } from "@xtaskjs/security";
@Controller("/admin")
@Authenticated()
export class AdminController {
@Get("/")
@Roles("admin")
dashboard() {
return { secure: true };
}
}
Marca una ruta como accesible públicamente incluso cuando el controlador circundante está autenticado por defecto.
import { Controller, Get } from "@xtaskjs/common";
import { AllowAnonymous, Authenticated } from "@xtaskjs/security";
@Controller("/admin")
@Authenticated()
export class AdminController {
@Get("/health")
@AllowAnonymous()
health() {
return { ok: true };
}
}
Forma decorador de registerJwtStrategy() para registrar una definición de estrategia JWT durante la carga del módulo.
import { JwtSecurityStrategy } from "@xtaskjs/security";
@JwtSecurityStrategy({
name: "default",
default: true,
secretOrKey: process.env.JWT_SECRET,
})
export class DefaultJwtStrategy {}
Forma decorador de registerJweStrategy() para flujos de token cifrados.
import { JweSecurityStrategy } from "@xtaskjs/security";
@JweSecurityStrategy({
name: "encrypted",
decryptionKey: process.env.JWE_SECRET || "secret",
})
export class EncryptedStrategy {}
Inyecta el SecurityAuthenticationService registrado por el gestor del ciclo de vida de security.
import { Service } from "@xtaskjs/core";
import { InjectAuthenticationService, SecurityAuthenticationService } from "@xtaskjs/security";
@Service()
export class SessionAuditService {
constructor(
@InjectAuthenticationService()
private readonly authentication: SecurityAuthenticationService
) {}
}
Inyecta el SecurityAuthorizationService usado para decisiones de roles y permisos.
import { Service } from "@xtaskjs/core";
import { InjectAuthorizationService, SecurityAuthorizationService } from "@xtaskjs/security";
@Service()
export class PolicyService {
constructor(
@InjectAuthorizationService()
private readonly authorization: SecurityAuthorizationService
) {}
}
Inyecta la instancia de Passport configurada y gestionada por xtaskjs security.
import { Service } from "@xtaskjs/core";
import { InjectPassport } from "@xtaskjs/security";
@Service()
export class PassportInspector {
constructor(@InjectPassport() private readonly passport: any) {}
}
Inyecta el SecurityLifecycleManager para que los servicios avanzados puedan inspeccionar estrategias o el cableado del estado de autenticación.
import { Service } from "@xtaskjs/core";
import { InjectSecurityLifecycleManager } from "@xtaskjs/security";
@Service()
export class SecurityDiagnosticsService {
constructor(@InjectSecurityLifecycleManager() private readonly lifecycle: any) {}
}
Grupo de decoradores
Decoradores de registro e inyección de TypeORM exportados por @xtaskjs/typeorm. Vinculan datasources y repositorios dentro del mismo contenedor DI.
Registra una definición de datasource de TypeORM para la gestión del arranque y apagado de xtask.
import { TypeOrmDataSource } from "@xtaskjs/typeorm";
import { UserEntity } from "./user.entity";
@TypeOrmDataSource({
name: "default",
type: "sqlite",
database: "app.sqlite",
entities: [UserEntity],
synchronize: true,
})
export class DatabaseConfig {}
Inyecta una instancia de datasource con nombre gestionada por la integración TypeORM de xtaskjs.
import { Service } from "@xtaskjs/core";
import { DataSource, InjectDataSource } from "@xtaskjs/typeorm";
@Service()
export class HealthQueryService {
constructor(@InjectDataSource() private readonly dataSource: DataSource) {}
}
Inyecta un repositorio TypeORM para una entidad y nombre de datasource concretos.
import { Service } from "@xtaskjs/core";
import { InjectRepository, Repository } from "@xtaskjs/typeorm";
import { UserEntity } from "./user.entity";
@Service()
export class UsersService {
constructor(
@InjectRepository(UserEntity)
private readonly users: Repository<UserEntity>
) {}
}
Registra una clase de migration en el registro de TypeORM para un datasource con nombre.
import { MigrationInterface, QueryRunner, TypeOrmMigration } from "@xtaskjs/typeorm";
@TypeOrmMigration({ dataSourceName: "default" })
export class CreateAuditEntries1700000000000 implements MigrationInterface {
async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query("CREATE TABLE audit_entries (id integer primary key autoincrement, message varchar(120) not null)");
}
async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query("DROP TABLE audit_entries");
}
}
Registra una clase seeder ordenada que se ejecuta después de inicializar el datasource cuando los seeders están habilitados.
import { DataSource, TypeOrmSeeder } from "@xtaskjs/typeorm";
@TypeOrmSeeder({ dataSourceName: "default", order: 1 })
export class AuditEntriesSeeder {
async run(dataSource: DataSource): Promise<void> {
await dataSource.query("INSERT INTO audit_entries (message) VALUES ('seeded')");
}
}
Grupo de decoradores
CQRS configuration, handler, projection, idempotency, and injector decorators exported by @xtaskjs/cqrs. These connect command, query, and event flows to the xtaskjs container and read or write datasource aliases.
Decorator form of configureCqrs() for binding the read and write datasource aliases and optional idempotency store during module loading.
import { Cqrs } from "@xtaskjs/cqrs";
@Cqrs({ writeDataSourceName: "write-db", readDataSourceName: "read-db" })
export class CqrsConfiguration {}
Registers a DI-managed class as the single handler for a command message type.
import { Service } from "@xtaskjs/core";
import { CommandHandler, ICommandHandler } from "@xtaskjs/cqrs";
class CreateUserCommand {
constructor(public readonly name: string) {}
}
@Service()
@CommandHandler(CreateUserCommand)
export class CreateUserHandler implements ICommandHandler<CreateUserCommand, string> {
execute(command: CreateUserCommand) {
return command.name;
}
}
Registers a DI-managed class as the handler for a query message type.
import { Service } from "@xtaskjs/core";
import { IQueryHandler, QueryHandler } from "@xtaskjs/cqrs";
class ListUsersQuery {}
@Service()
@QueryHandler(ListUsersQuery)
export class ListUsersHandler implements IQueryHandler<ListUsersQuery, string[]> {
execute() {
return ["Ada"];
}
}
Registers one or more event handlers that react after a message publishes an event on the CQRS event bus.
import { Service } from "@xtaskjs/core";
import { EventHandler, IEventHandler } from "@xtaskjs/cqrs";
class UserCreatedEvent {
constructor(public readonly id: string) {}
}
@Service()
@EventHandler(UserCreatedEvent)
export class UserProjectionHandler implements IEventHandler<UserCreatedEvent> {
async handle(event: UserCreatedEvent) {
console.log(event.id);
}
}
Registers an orchestration component that reacts to events with access to command, query, and event buses. Saga is an alias of ProcessManager.
import { Service } from "@xtaskjs/core";
import { IProcessManager, ProcessManager, ProcessManagerContext } from "@xtaskjs/cqrs";
class UserCreatedEvent {
constructor(public readonly id: string) {}
}
@Service()
@ProcessManager(UserCreatedEvent)
export class WelcomeProcessManager implements IProcessManager<UserCreatedEvent> {
async handle(event: UserCreatedEvent, context: ProcessManagerContext) {
await context.commandBus.execute({ userId: event.id });
}
}
Registers a named projection rebuilder so operators or diagnostics flows can rebuild a read model from write-side state.
import { Service } from "@xtaskjs/core";
import { IProjectionRebuilder, ProjectionRebuilder } from "@xtaskjs/cqrs";
@Service()
@ProjectionRebuilder("users")
export class UserProjectionRebuilder implements IProjectionRebuilder {
async rebuild() {
console.log("rebuild read model");
}
}
Adds idempotency metadata to a command handler so repeated executions can reuse a cached result instead of running the write-side action again.
import { CommandHandler, IdempotentCommand } from "@xtaskjs/cqrs";
class CreateUserCommand {
constructor(public readonly name: string, public readonly idempotencyKey: string) {}
}
@IdempotentCommand<CreateUserCommand>({ key: (command) => command.idempotencyKey })
@CommandHandler(CreateUserCommand)
export class CreateUserHandler {
execute(command: CreateUserCommand) {
return `${command.name}:${command.idempotencyKey}`;
}
}
Injects CommandBus so controllers or services can dispatch commands without reaching into the lifecycle manager directly.
import { Service } from "@xtaskjs/core";
import { CommandBus, InjectCommandBus } from "@xtaskjs/cqrs";
@Service()
export class UsersFacade {
constructor(@InjectCommandBus() private readonly commandBus: CommandBus) {}
}
Injects QueryBus so read-side requests can be dispatched from controllers, presenters, or services.
import { Service } from "@xtaskjs/core";
import { InjectQueryBus, QueryBus } from "@xtaskjs/cqrs";
@Service()
export class ReportsFacade {
constructor(@InjectQueryBus() private readonly queryBus: QueryBus) {}
}
Injects EventBus so handlers can publish follow-up domain or integration events after write-side work completes.
import { Service } from "@xtaskjs/core";
import { EventBus, InjectEventBus } from "@xtaskjs/cqrs";
@Service()
export class UserEventsPublisher {
constructor(@InjectEventBus() private readonly events: EventBus) {}
}
Injects the configured idempotency store implementation used by idempotent command handlers.
import { InjectIdempotencyStore, IIdempotencyStore } from "@xtaskjs/cqrs";
import { Service } from "@xtaskjs/core";
@Service()
export class IdempotencyDiagnosticsService {
constructor(@InjectIdempotencyStore() private readonly store: IIdempotencyStore) {}
}
Injects the configured read-side datasource alias managed by CQRS and backed by @xtaskjs/typeorm.
import { Service } from "@xtaskjs/core";
import { InjectReadDataSource } from "@xtaskjs/cqrs";
import { DataSource } from "@xtaskjs/typeorm";
@Service()
export class ReadDiagnosticsService {
constructor(@InjectReadDataSource() private readonly readDataSource: DataSource) {}
}
Injects the configured write-side datasource alias for command handlers or projection rebuilders that need direct datasource access.
import { Service } from "@xtaskjs/core";
import { InjectWriteDataSource } from "@xtaskjs/cqrs";
import { DataSource } from "@xtaskjs/typeorm";
@Service()
export class WriteDiagnosticsService {
constructor(@InjectWriteDataSource() private readonly writeDataSource: DataSource) {}
}
Injects a repository from the configured read-side datasource alias so queries can stay projection-focused.
import { Service } from "@xtaskjs/core";
import { InjectReadRepository } from "@xtaskjs/cqrs";
import { Repository } from "@xtaskjs/typeorm";
class UserProjection {}
@Service()
export class UsersReadService {
constructor(@InjectReadRepository(UserProjection) private readonly users: Repository<UserProjection>) {}
}
Injects a repository from the configured write-side datasource alias for command handlers and write-model maintenance flows.
import { Service } from "@xtaskjs/core";
import { InjectWriteRepository } from "@xtaskjs/cqrs";
import { Repository } from "@xtaskjs/typeorm";
class UserEntity {}
@Service()
export class UsersWriteService {
constructor(@InjectWriteRepository(UserEntity) private readonly users: Repository<UserEntity>) {}
}
Injects the CqrsLifecycleManager for advanced diagnostics, projection rebuild operations, and direct runtime inspection.
import { Service } from "@xtaskjs/core";
import { InjectCqrsLifecycleManager } from "@xtaskjs/cqrs";
@Service()
export class CqrsDiagnosticsService {
constructor(@InjectCqrsLifecycleManager() private readonly lifecycle: any) {}
}
Grupo de decoradores
Configuration, aggregate, subscriber, and injector decorators exported by @xtaskjs/event-source. These wire aggregate metadata, event appliers, repositories, and stored-event subscribers into the xtaskjs lifecycle.
Decorator form of configureEventSource() for registering the event store, publisher, and optional runtime flags during module loading.
import { EventSource, createTypeOrmEventStore } from "@xtaskjs/event-source";
@EventSource({
store: createTypeOrmEventStore({ dataSourceName: "write-db", tableName: "event_store" }),
})
export class EventSourceConfiguration {}
Registers aggregate metadata such as the aggregate name and stream key so repositories can load and persist event streams consistently.
import { EventSourcedAggregate, EventSourcedAggregateRoot } from "@xtaskjs/event-source";
@EventSourcedAggregate({ stream: "users" })
export class UserAggregate extends EventSourcedAggregateRoot {}
Registers the method that mutates aggregate state for a given event type during both live execution and historical replay.
import { ApplyEvent } from "@xtaskjs/event-source";
class UserRegisteredEvent {
constructor(public readonly email: string) {}
}
export class UserAggregate {
public email?: string;
@ApplyEvent(UserRegisteredEvent)
onRegistered(event: UserRegisteredEvent) {
this.email = event.email;
}
}
Registers a DI-managed subscriber that reacts after stored events are appended, making it suitable for projections, integrations, and side effects.
import { Service } from "@xtaskjs/core";
import { EventSourceSubscriber, IEventSourceSubscriber } from "@xtaskjs/event-source";
class UserRegisteredEvent {
constructor(public readonly email: string) {}
}
@Service()
@EventSourceSubscriber(UserRegisteredEvent)
export class WelcomeProjection implements IEventSourceSubscriber<UserRegisteredEvent> {
handle(event: UserRegisteredEvent) {
console.log(event.email);
}
}
Injects the repository for a specific event-sourced aggregate so services can create, load, and save streams through the lifecycle-managed store.
import { Service } from "@xtaskjs/core";
import { EventSourceRepository, InjectEventSourceRepository } from "@xtaskjs/event-source";
class UserAggregate {}
@Service()
export class UserService {
constructor(
@InjectEventSourceRepository(UserAggregate)
private readonly users: EventSourceRepository<any>
) {}
}
Injects the active event store implementation when advanced services need direct stream append or load access.
import { Service } from "@xtaskjs/core";
import { InjectEventStore } from "@xtaskjs/event-source";
@Service()
export class EventStoreDiagnosticsService {
constructor(@InjectEventStore() private readonly store: any) {}
}
Injects the in-process stored-event bus so services can publish persisted envelopes to local subscribers when they need low-level runtime control.
import { Service } from "@xtaskjs/core";
import { InjectEventSourceBus } from "@xtaskjs/event-source";
@Service()
export class EventReplayService {
constructor(@InjectEventSourceBus() private readonly bus: any) {}
}
Injects the configured external event publisher so services can inspect or extend publication behavior beyond the default queue bridge.
import { Service } from "@xtaskjs/core";
import { InjectEventPublisher } from "@xtaskjs/event-source";
@Service()
export class EventPublisherDiagnosticsService {
constructor(@InjectEventPublisher() private readonly publisher: any) {}
}
Injects the EventSourceLifecycleManager for repository lookup, initialization checks, subscriber inspection, and lower-level event-source runtime access.
import { Service } from "@xtaskjs/core";
import { InjectEventSourceLifecycleManager } from "@xtaskjs/event-source";
@Service()
export class EventSourceDiagnosticsService {
constructor(@InjectEventSourceLifecycleManager() private readonly lifecycle: any) {}
}
Grupo de decoradores
Decoradores de mailer exportados por @xtaskjs/mailer. Registran transports y plantillas e inyectan servicios de entrega en clases gestionadas por DI.
Forma decorador de registerMailerTransport() para registrar un transport de correo con nombre durante la carga del módulo.
import { MailerTransport, createMailtrapTransportOptions } from "@xtaskjs/mailer";
const transport = process.env.MAIL_TRANSPORT_PROVIDER === "smtp"
? {
host: process.env.MAIL_SMTP_HOST || "smtp.example.com",
port: Number(process.env.MAIL_SMTP_PORT || 587),
secure: process.env.MAIL_SMTP_SECURE === "true",
auth: {
user: process.env.MAIL_SMTP_USER || "user",
pass: process.env.MAIL_SMTP_PASS || "pass",
},
}
: createMailtrapTransportOptions({
username: process.env.MAILTRAP_SMTP_USER || "user",
password: process.env.MAILTRAP_SMTP_PASS || "pass",
host: process.env.MAILTRAP_SMTP_HOST || "sandbox.smtp.mailtrap.io",
port: Number(process.env.MAILTRAP_SMTP_PORT || 2525),
secure: process.env.MAILTRAP_SMTP_SECURE === "true",
});
@MailerTransport({
name: "default",
defaults: { from: "hello@xtaskjs.dev" },
transport,
})
export class DefaultTransportRegistration {}
Forma decorador de registerMailerTemplate() para plantillas de correo reutilizables inline o renderizadas desde archivo.
import { MailerTemplate } from "@xtaskjs/mailer";
@MailerTemplate({
name: "welcome",
subject: "Welcome {{user.name}}",
text: "Hello {{user.name}}",
html: "<h1>Hello {{user.name}}</h1>",
})
export class WelcomeTemplateRegistration {}
Inyecta MailerService para que un servicio gestionado por DI pueda renderizar plantillas y enviar correo.
import { Service } from "@xtaskjs/core";
import { InjectMailerService, MailerService } from "@xtaskjs/mailer";
@Service()
export class EmailService {
constructor(@InjectMailerService() private readonly mailer: MailerService) {}
}
Inyecta un transport con nombre para que un servicio pueda enviar directamente por un canal concreto, como notifications.
import { Service } from "@xtaskjs/core";
import { InjectMailerTransport, MailerTransporter } from "@xtaskjs/mailer";
@Service()
export class AlertsService {
constructor(
@InjectMailerTransport("notifications")
private readonly notifications: MailerTransporter
) {}
}
Inyecta el MailerLifecycleManager para inspección avanzada, verificación o búsqueda de transporters.
import { Service } from "@xtaskjs/core";
import { InjectMailerLifecycleManager } from "@xtaskjs/mailer";
@Service()
export class MailDiagnosticsService {
constructor(@InjectMailerLifecycleManager() private readonly lifecycle: any) {}
}
Grupo de decoradores
Decoradores de configuración e inyección exportados por @xtaskjs/internationalization. Registran el comportamiento de locale y exponen servicios de traducción dentro de clases gestionadas por DI.
Forma decorador de configureInternationalization() para registrar el locale por defecto, el fallback, la moneda y la zona horaria durante la carga del módulo.
import { Internationalization } from "@xtaskjs/internationalization";
@Internationalization({
defaultLocale: "en-US",
fallbackLocale: "en-US",
defaultCurrency: "USD",
defaultTimeZone: "UTC",
})
export class AppI18nConfiguration {}
Registra una definición de locale con traducciones, moneda y zona horaria específicas del locale y diccionarios de namespace opcionales.
import { InternationalizationLocale } from "@xtaskjs/internationalization";
@InternationalizationLocale({
locale: "es-ES",
currency: "EUR",
timeZone: "Europe/Madrid",
translations: { home: { title: "Bienvenida" } },
})
export class SpanishLocaleRegistration {}
Registra un resolver de locale personalizado que puede derivar el contexto de locale desde la petición, las cabeceras, el estado del contenedor o metadata del tenant.
import { InternationalizationResolver } from "@xtaskjs/internationalization";
@InternationalizationResolver(({ request }) => {
return request?.headers?.["x-locale"] || request?.query?.locale;
})
export class HeaderLocaleResolver {}
Inyecta InternationalizationService para que controladores y servicios puedan traducir claves, formatear valores, inspeccionar locales y cargar namespaces bajo demanda.
import { Service } from "@xtaskjs/core";
import { InjectInternationalizationService, InternationalizationService } from "@xtaskjs/internationalization";
@Service()
export class CheckoutPresenter {
constructor(
@InjectInternationalizationService()
private readonly intl: InternationalizationService
) {}
}
Alias of InjectInternationalizationService for shorter injection syntax in services and controllers.
import { InjectI18nService, InternationalizationService } from "@xtaskjs/internationalization";
import { Service } from "@xtaskjs/core";
@Service()
export class AliasI18nService {
constructor(@InjectI18nService() private readonly intl: InternationalizationService) {}
}
Inyecta el InternationalizationLifecycleManager para inspección avanzada de locales cargados, namespaces, contexto de petición o registro de formatters.
import { Service } from "@xtaskjs/core";
import { InjectInternationalizationLifecycleManager } from "@xtaskjs/internationalization";
@Service()
export class LocaleDiagnosticsService {
constructor(
@InjectInternationalizationLifecycleManager()
private readonly lifecycle: any
) {}
}
Alias of InjectInternationalizationLifecycleManager for compact naming in diagnostics and infrastructure services.
import { InjectI18nLifecycleManager } from "@xtaskjs/internationalization";
import { Service } from "@xtaskjs/core";
@Service()
export class AliasLifecycleService {
constructor(@InjectI18nLifecycleManager() private readonly lifecycle: any) {}
}
Grupo de decoradores
Decoradores orientados a DTO de @xtaskjs/value-objects que convierten campos crudos de la petición en envoltorios de dominio normalizados antes de que los consuman controladores y servicios.
Transforma entrada cruda de DTO en una instancia de value object durante la conversión con class-transformer para que el código posterior reciba un envoltorio validado en lugar de una primitiva.
import { plainToInstance } from "class-transformer";
import { StringValueObject, TransformValueObject } from "@xtaskjs/value-objects";
class EmailAddress extends StringValueObject {
constructor(value: string) {
super(value.trim().toLowerCase());
}
}
class CreateUserDto {
@TransformValueObject(EmailAddress)
email!: EmailAddress;
}
const dto = plainToInstance(CreateUserDto, { email: " USER@Example.com " });
Grupo de decoradores
Configuration, model, injector, and method decorators from @xtaskjs/cache used to register cache models, inject repositories or services, and control read/write cache behavior in DI-managed services.
Decorator form of configureCache() for setting package-wide defaults such as driver, TTL, namespace, Redis options, and HTTP cache defaults while modules load.
import { CacheSettings } from "@xtaskjs/cache";
@CacheSettings({
defaultDriver: "memory",
defaultTtl: "30s",
namespace: "catalog",
})
export class CacheConfiguration {}
Registers a named cache model with driver selection, TTL defaults, serialization hooks, and optional Redis-specific overrides.
import { CacheModel } from "@xtaskjs/cache";
@CacheModel({ name: "products", ttl: "5m", driver: "redis" })
export class ProductCacheModel {}
Injects CacheService for model-level operations such as listModels(), get(), set(), remember(), delete(), and clear().
import { Service } from "@xtaskjs/core";
import { CacheService, InjectCacheService } from "@xtaskjs/cache";
@Service()
export class CacheInspectorService {
constructor(
@InjectCacheService()
private readonly cache: CacheService
) {}
}
Injects a model-scoped CacheRepository<T> so services can work directly with entries, hit metadata, and per-model TTL behavior.
import { Service } from "@xtaskjs/core";
import { CacheRepository, InjectCacheRepository } from "@xtaskjs/cache";
import { ProductCacheModel } from "./product-cache.model";
@Service()
export class ProductCacheReader {
constructor(
@InjectCacheRepository(ProductCacheModel)
private readonly products: CacheRepository<any>
) {}
}
Injects the lower-level cache lifecycle manager for diagnostics, initialization checks, repository resolution, and runtime state access.
import { Service } from "@xtaskjs/core";
import { InjectCacheLifecycleManager } from "@xtaskjs/cache";
@Service()
export class CacheLifecycleDiagnosticsService {
constructor(
@InjectCacheLifecycleManager()
private readonly lifecycle: any
) {}
}
Injects CacheAdminService for runtime inspection of models, entries, and effective HTTP cache metadata resolved from decorated routes.
import { Service } from "@xtaskjs/core";
import { CacheAdminService, InjectCacheAdminService } from "@xtaskjs/cache";
@Service()
export class CacheAdminInspector {
constructor(
@InjectCacheAdminService()
private readonly cacheAdmin: CacheAdminService
) {}
}
Reads through the configured repository. Cache hits skip method execution, while misses store the resolved result using an optional key builder, TTL override, and unless condition.
import { Service } from "@xtaskjs/core";
import { Cacheable } from "@xtaskjs/cache";
import { ProductCacheModel } from "./product-cache.model";
@Service()
export class ProductService {
@Cacheable({ model: ProductCacheModel, key: (id: string) => id, ttl: "15m" })
async getProduct(id: string) {
return { id, generatedAt: new Date().toISOString() };
}
}
Always runs the method and then writes the returned value into the cache, optionally guarding the write with when and overriding the stored TTL.
import { Service } from "@xtaskjs/core";
import { CachePut } from "@xtaskjs/cache";
import { ProductCacheModel } from "./product-cache.model";
@Service()
export class ProductRefreshService {
@CachePut({ model: ProductCacheModel, key: (id: string) => id })
async refreshProduct(id: string) {
return { id, refreshedAt: new Date().toISOString() };
}
}
Removes one cached entry or clears an entire model before or after the wrapped method runs, with optional key resolution and conditional execution.
import { Service } from "@xtaskjs/core";
import { CacheEvict } from "@xtaskjs/cache";
import { ProductCacheModel } from "./product-cache.model";
@Service()
export class ProductInvalidationService {
@CacheEvict({ model: ProductCacheModel, key: (id: string) => id })
async evictProduct(id: string) {
return true;
}
}
Grupo de decoradores
HTTP response decorators from @xtaskjs/cache used to apply Cache-Control directives, validators, and Vary behavior to routes, plus injector access to HttpCacheService.
Injects HttpCacheService so services or controllers can build cache headers manually, inspect policy normalization, or describe effective route behavior.
import { Service } from "@xtaskjs/core";
import { HttpCacheService, InjectHttpCacheService } from "@xtaskjs/cache";
@Service()
export class CacheHeaderService {
constructor(
@InjectHttpCacheService()
private readonly httpCache: HttpCacheService
) {}
}
Applies a full HTTP cache policy to responses, including visibility, max-age, stale directives, ETag, Last-Modified, Expires, Vary, and conditional application rules.
import { Controller, Get } from "@xtaskjs/common";
import { CacheResponse } from "@xtaskjs/cache";
@Controller("/reports")
export class ReportsController {
@CacheResponse({ visibility: "private", maxAge: "60s", mustRevalidate: true })
@Get("/summary")
summary() {
return { ok: true };
}
}
Alias names for CacheResponse() when the intent is browser-facing cache headers rather than a generic response policy decorator.
import { Controller, Get } from "@xtaskjs/common";
import { BrowserCache } from "@xtaskjs/cache";
@Controller("/articles")
export class ArticleController {
@BrowserCache({ maxAge: "1m", staleWhileRevalidate: "30s" })
@Get("/:slug")
show() {
return { published: true };
}
}
Applies the same HTTP cache policy surface as CacheResponse(), but only when the decorated route returns view(...).
import { Controller, Get } from "@xtaskjs/common";
import { view } from "@xtaskjs/core";
import { CacheView } from "@xtaskjs/cache";
@Controller("/")
export class WebController {
@CacheView({ maxAge: "10m", etag: true })
@Get("/")
home() {
return view("home", { title: "Welcome" });
}
}
Disables browser storage for sensitive responses by combining no-store, no-cache, must-revalidate, and an already-expired Expires value.
import { Controller, Get } from "@xtaskjs/common";
import { NoStore } from "@xtaskjs/cache";
@Controller("/drafts")
export class DraftController {
@NoStore()
@Get("/preview")
preview() {
return { draft: true };
}
}
Forces revalidation by emitting no-cache and must-revalidate semantics while still allowing conditional requests when other validators are enabled.
import { Controller, Get } from "@xtaskjs/common";
import { NoCache } from "@xtaskjs/cache";
@Controller("/profile")
export class ProfileController {
@NoCache()
@Get("/")
show() {
return { profile: true };
}
}
Appends Vary header values so downstream caches distinguish responses by headers such as Accept-Language or Authorization.
import { Controller, Get } from "@xtaskjs/common";
import { BrowserCache, VaryBy } from "@xtaskjs/cache";
@Controller("/catalog")
export class CatalogController {
@BrowserCache({ maxAge: "2m" })
@VaryBy("accept-language", "authorization")
@Get("/")
list() {
return { ok: true };
}
}
Grupo de decoradores
Decoradores de scheduling de @xtaskjs/scheduler usados para declarar trabajos cron, interval y timeout e inyectar servicios scheduler en tiempo de ejecución.
Registra un trabajo recurrente basado en cron con grupos opcionales, reintentos, sobrescrituras de zona horaria y comportamiento de ejecución en arranque.
import { Service } from "@xtaskjs/core";
import { Cron } from "@xtaskjs/scheduler";
@Service()
export class ReportsScheduler {
@Cron("0 */5 * * * *", { name: "reports.flush", group: ["reports", "nightly"] })
flushReports() {
console.log("flush pending reports");
}
}
Registra un trabajo recurrente por intervalo fijo. Interval es un alias de Every para proyectos que prefieren un nombre más explícito.
import { Service } from "@xtaskjs/core";
import { Every } from "@xtaskjs/scheduler";
@Service()
export class CacheScheduler {
@Every("10m", { name: "cache.compact", runOnInit: true })
compact() {
console.log("compact cache");
}
}
Registra una tarea diferida de una sola ejecución que corre después del arranque en lugar de seguir una cadencia recurrente.
import { Service } from "@xtaskjs/core";
import { Timeout } from "@xtaskjs/scheduler";
@Service()
export class WarmupScheduler {
@Timeout("30s", { name: "cache.warmup" })
warmup() {
console.log("warm cache once after startup");
}
}
Inyecta SchedulerService para que servicios o controladores puedan inspeccionar trabajos y disparar grupos o trabajos individuales manualmente.
import { Service } from "@xtaskjs/core";
import { InjectSchedulerService, SchedulerService } from "@xtaskjs/scheduler";
@Service()
export class SchedulerInspector {
constructor(
@InjectSchedulerService()
private readonly scheduler: SchedulerService
) {}
}
Inyecta el SchedulerLifecycleManager para un control de bajo nivel sobre el estado de arranque, los handles activos y la metadata de trabajos descubiertos.
import { Service } from "@xtaskjs/core";
import { InjectSchedulerLifecycleManager } from "@xtaskjs/scheduler";
@Service()
export class SchedulerDiagnosticsService {
constructor(
@InjectSchedulerLifecycleManager()
private readonly lifecycle: any
) {}
}
Grupo de decoradores
Rate-limiting decorators from @xtaskjs/throttler used to protect routes and inject runtime throttling services.
Applies request throttling with a limit and TTL window, integrating with guard execution for protected endpoints.
import { Controller, Get } from "@xtaskjs/common";
import { Throttle } from "@xtaskjs/throttler";
@Controller("/auth")
export class AuthController {
@Get("/login")
@Throttle(10, "1m")
login() {
return { ok: true };
}
}
Injects ThrottlerService for runtime inspection and programmatic throttling operations.
import { Service } from "@xtaskjs/core";
import { InjectThrottlerService } from "@xtaskjs/throttler";
@Service()
export class ThrottlerDiagnosticsService {
constructor(@InjectThrottlerService() private readonly throttler: any) {}
}
Injects the throttler lifecycle manager for advanced diagnostics and low-level store integration checks.
import { Service } from "@xtaskjs/core";
import { InjectThrottlerLifecycleManager } from "@xtaskjs/throttler";
@Service()
export class ThrottlerLifecycleService {
constructor(@InjectThrottlerLifecycleManager() private readonly lifecycle: any) {}
}
Grupo de decoradores
Decoradores de gateway, eventos e inyección exportados por @xtaskjs/socket-io. Mantienen los handlers realtime dentro de servicios xtaskjs normales y conectan namespaces de Socket.IO al contenedor DI.
Marca un servicio gestionado por DI como gateway realtime, asignando namespace, nombre opcional, grupos y estado disabled para el descubrimiento del ciclo de vida.
import { Service } from "@xtaskjs/core";
import { SocketGateway } from "@xtaskjs/socket-io";
@Service()
@SocketGateway({ namespace: "/chat", group: ["realtime", "chat"] })
export class ChatGateway {}
Se ejecuta cuando un cliente se conecta al namespace del gateway y recibe el socket conectado junto con el contexto del handler.
import { Service } from "@xtaskjs/core";
import { OnSocketConnection, SocketGateway } from "@xtaskjs/socket-io";
@Service()
@SocketGateway({ namespace: "/chat" })
export class PresenceGateway {
@OnSocketConnection()
onConnect(socket: any, context: { namespace: any }) {
context.namespace.emit("presence.updated", { socketId: socket.id });
}
}
Se ejecuta cuando Socket.IO desconecta a un cliente, por lo que es un buen lugar para actualizar presencia, liberar estado de salas o registrar motivos de desconexión.
import { Service } from "@xtaskjs/core";
import { OnSocketDisconnect, SocketGateway } from "@xtaskjs/socket-io";
@Service()
@SocketGateway({ namespace: "/chat" })
export class PresenceGateway {
@OnSocketDisconnect()
onDisconnect(reason: string, socket: any) {
console.log(`socket ${socket.id} disconnected: ${reason}`);
}
}
Registra un handler de evento Socket.IO con nombre, puede sobrescribir el namespace o las opciones del handler y reconoce automáticamente los valores devueltos cuando el cliente espera un ack.
import { Service } from "@xtaskjs/core";
import { OnSocketEvent, SocketGateway } from "@xtaskjs/socket-io";
@Service()
@SocketGateway({ namespace: "/chat" })
export class ChatGateway {
@OnSocketEvent("chat.message")
onMessage(payload: { text: string }, context: { socket: any }) {
return { ok: true, socketId: context.socket.id, text: payload.text };
}
}
Inyecta SocketIoService para que controladores y servicios puedan emitir eventos, inspeccionar namespaces y listar gateways descubiertos.
import { Service } from "@xtaskjs/core";
import { InjectSocketService, SocketIoService } from "@xtaskjs/socket-io";
@Service()
export class AnnouncementService {
constructor(
@InjectSocketService()
private readonly sockets: SocketIoService
) {}
}
Inyecta SocketIoLifecycleManager para diagnósticos de bajo nivel, inspección de gateways, acceso a namespaces o control manual de emisiones.
import { Service } from "@xtaskjs/core";
import { InjectSocketLifecycleManager } from "@xtaskjs/socket-io";
@Service()
export class SocketDiagnosticsService {
constructor(
@InjectSocketLifecycleManager()
private readonly lifecycle: any
) {}
}
Inyecta la instancia raíz del servidor Socket.IO cuando se necesitan APIs de adaptador de bajo nivel o broadcasts globales.
import { Service } from "@xtaskjs/core";
import { InjectSocketServer } from "@xtaskjs/socket-io";
@Service()
export class SocketServerBridge {
constructor(
@InjectSocketServer()
private readonly server: any
) {}
}
Inyecta una instancia de namespace por nombre para que los servicios puedan dirigirse a una topología de salas concreta sin enrutar cada emisión a través del servidor raíz.
import { Service } from "@xtaskjs/core";
import { InjectSocketNamespace } from "@xtaskjs/socket-io";
@Service()
export class ChatNamespacePublisher {
constructor(
@InjectSocketNamespace("/chat")
private readonly namespace: any
) {}
}
Grupo de decoradores
Decoradores de consumo, publicación e inyección de colas exportados por @xtaskjs/queues. Conectan transports de broker y colas en memoria con servicios gestionados por DI.
Registra un consumidor de colas con nombre para una cola concreta y admite reintentos, grupos, dead-letter routing y selección de transporte.
import { Service } from "@xtaskjs/core";
import { QueueHandler } from "@xtaskjs/queues";
@Service()
export class OrdersConsumer {
@QueueHandler("orders.created", {
name: "orders.created.consumer",
transportName: "memory",
maxRetries: 3,
deadLetterQueue: "orders.dead",
})
async onOrderCreated(payload: { orderId: string }) {
console.log("created", payload.orderId);
}
}
Registra un listener basado en topic o patrón que puede suscribirse a comodines o filtros de topics del broker según el transporte.
import { Service } from "@xtaskjs/core";
import { QueuePattern } from "@xtaskjs/queues";
@Service()
export class AuditConsumer {
@QueuePattern("orders.*", {
name: "orders.audit",
transportName: "rabbitmq",
})
onOrderEvent(payload: any, context: { queue: string }) {
console.log(context.queue, payload);
}
}
Alias of QueueHandler for queue-specific consumers when teams prefer a subscribe-oriented naming style.
import { QueueSubscribe } from "@xtaskjs/queues";
import { Service } from "@xtaskjs/core";
@Service()
export class BillingConsumer {
@QueueSubscribe("billing.invoice.created")
onInvoice(payload: { invoiceId: string }) {
return payload.invoiceId;
}
}
Publica en una cola el resultado resuelto del método una vez que termina, conservando el valor de retorno original.
import { Service } from "@xtaskjs/core";
import { PublishToQueue } from "@xtaskjs/queues";
@Service()
export class CheckoutService {
@PublishToQueue("checkout.completed", { transportName: "memory" })
complete(orderId: string) {
return { orderId, status: "completed" };
}
}
Inyecta QueueService para que servicios o controladores puedan publicar mensajes, crear productores e inspeccionar consumidores y transports del runtime.
import { Service } from "@xtaskjs/core";
import { InjectQueueService, QueueService } from "@xtaskjs/queues";
@Service()
export class QueuePublisher {
constructor(
@InjectQueueService()
private readonly queues: QueueService
) {}
}
Injects QueueLifecycleManager for advanced consumer, transport, and startup diagnostics.
import { InjectQueueLifecycleManager } from "@xtaskjs/queues";
import { Service } from "@xtaskjs/core";
@Service()
export class QueueLifecycleDiagnostics {
constructor(@InjectQueueLifecycleManager() private readonly lifecycle: any) {}
}
Inyecta una implementación de QueueTransport con nombre cuando se necesita publicación o control de suscripción a bajo nivel del broker.
import { Service } from "@xtaskjs/core";
import { InjectQueueTransport } from "@xtaskjs/queues";
@Service()
export class QueueTransportDiagnostics {
constructor(
@InjectQueueTransport("rabbitmq")
private readonly transport: any
) {}
}