diff --git a/src/api/integrations/event/event.controller.ts b/src/api/integrations/event/event.controller.ts index d1281fda..e0a85946 100644 --- a/src/api/integrations/event/event.controller.ts +++ b/src/api/integrations/event/event.controller.ts @@ -3,6 +3,25 @@ import { rabbitmqController, sqsController, webhookController, websocketControll import { WAMonitoringService } from '@api/services/monitor.service'; import { Server } from 'http'; +export type EmitData = { + instanceName: string; + origin: string; + event: string; + data: Object; + serverUrl: string; + dateTime: string; + sender: string; + apiKey?: string; + local?: boolean; +}; + +export interface EventControllerInterface { + integrationEnabled: boolean; + set(instanceName: string, data: any): Promise; + get(instanceName: string): Promise; + emit({ instanceName, origin, event, data, serverUrl, dateTime, sender, apiKey, local }: EmitData): Promise; +} + export class EventController { public prismaRepository: PrismaRepository; public waMonitor: WAMonitoringService; diff --git a/src/api/integrations/event/rabbitmq/controllers/rabbitmq.controller.ts b/src/api/integrations/event/rabbitmq/controllers/rabbitmq.controller.ts index af33ae6f..26c48b72 100644 --- a/src/api/integrations/event/rabbitmq/controllers/rabbitmq.controller.ts +++ b/src/api/integrations/event/rabbitmq/controllers/rabbitmq.controller.ts @@ -7,19 +7,19 @@ import { Logger } from '@config/logger.config'; import { NotFoundException } from '@exceptions'; import * as amqp from 'amqplib/callback_api'; -import { EventController } from '../../event.controller'; +import { EmitData, EventController, EventControllerInterface } from '../../event.controller'; -export class RabbitmqController extends EventController { +export class RabbitmqController extends EventController implements EventControllerInterface { public amqpChannel: amqp.Channel | null = null; private readonly logger = new Logger(RabbitmqController.name); + integrationEnabled = configService.get('RABBITMQ')?.ENABLED; + constructor(prismaRepository: PrismaRepository, waMonitor: WAMonitoringService) { super(prismaRepository, waMonitor); } public async init(): Promise { - if (!configService.get('RABBITMQ')?.ENABLED) { - return; - } + if (!this.integrationEnabled) return; await new Promise((resolve, reject) => { const uri = configService.get('RABBITMQ').URI; @@ -62,6 +62,8 @@ export class RabbitmqController extends EventController { } public async set(instanceName: string, data: RabbitmqDto): Promise { + if (!this.integrationEnabled) return; + if (!data.enabled) { data.events = []; } else { @@ -91,6 +93,8 @@ export class RabbitmqController extends EventController { } public async get(instanceName: string): Promise { + if (!this.integrationEnabled) return; + if (undefined === this.monitor.waInstances[instanceName]) { throw new NotFoundException('Instance not found'); } @@ -117,19 +121,8 @@ export class RabbitmqController extends EventController { dateTime, sender, apiKey, - }: { - instanceName: string; - origin: string; - event: string; - data: Object; - serverUrl: string; - dateTime: string; - sender: string; - apiKey?: string; - }): Promise { - if (!configService.get('RABBITMQ')?.ENABLED) { - return; - } + }: EmitData): Promise { + if (!this.integrationEnabled) return; const instanceRabbitmq = await this.get(instanceName); const rabbitmqLocal = instanceRabbitmq?.events; diff --git a/src/api/integrations/event/sqs/controllers/sqs.controller.ts b/src/api/integrations/event/sqs/controllers/sqs.controller.ts index 519e2762..c1e9933d 100644 --- a/src/api/integrations/event/sqs/controllers/sqs.controller.ts +++ b/src/api/integrations/event/sqs/controllers/sqs.controller.ts @@ -7,20 +7,19 @@ import { configService, Log, Sqs } from '@config/env.config'; import { Logger } from '@config/logger.config'; import { NotFoundException } from '@exceptions'; -import { EventController } from '../../event.controller'; +import { EmitData, EventController, EventControllerInterface } from '../../event.controller'; -export class SqsController extends EventController { +export class SqsController extends EventController implements EventControllerInterface { private sqs: SQS; private readonly logger = new Logger(SqsController.name); + integrationEnabled = configService.get('SQS')?.ENABLED; constructor(prismaRepository: PrismaRepository, waMonitor: WAMonitoringService) { super(prismaRepository, waMonitor); } public init(): void { - if (!configService.get('SQS')?.ENABLED) { - return; - } + if (!this.integrationEnabled) return; // eslint-disable-next-line @typescript-eslint/no-unused-vars new Promise((resolve, reject) => { @@ -48,6 +47,8 @@ export class SqsController extends EventController { } public async set(instanceName: string, data: SqsDto): Promise { + if (!this.integrationEnabled) return; + if (!data.enabled) { data.events = []; } else { @@ -77,6 +78,8 @@ export class SqsController extends EventController { } public async get(instanceName: string): Promise { + if (!this.integrationEnabled) return; + if (undefined === this.monitor.waInstances[instanceName]) { throw new NotFoundException('Instance not found'); } @@ -103,19 +106,8 @@ export class SqsController extends EventController { dateTime, sender, apiKey, - }: { - instanceName: string; - origin: string; - event: string; - data: Object; - serverUrl: string; - dateTime: string; - sender: string; - apiKey?: string; - }): Promise { - if (!configService.get('SQS')?.ENABLED) { - return; - } + }: EmitData): Promise { + if (!this.integrationEnabled) return; const instanceSqs = await this.get(instanceName); const sqsLocal = instanceSqs?.events; diff --git a/src/api/integrations/event/webhook/controllers/webhook.controller.ts b/src/api/integrations/event/webhook/controllers/webhook.controller.ts index fefe00b6..c1b84757 100644 --- a/src/api/integrations/event/webhook/controllers/webhook.controller.ts +++ b/src/api/integrations/event/webhook/controllers/webhook.controller.ts @@ -7,15 +7,16 @@ import { BadRequestException, NotFoundException } from '@exceptions'; import axios from 'axios'; import { isURL } from 'class-validator'; -import { EventController } from '../../event.controller'; +import { EmitData, EventController, EventControllerInterface } from '../../event.controller'; import { WebhookDto } from '../dto/webhook.dto'; -export class WebhookController extends EventController { +export class WebhookController extends EventController implements EventControllerInterface { private readonly logger = new Logger(WebhookController.name); constructor(prismaRepository: PrismaRepository, waMonitor: WAMonitoringService) { super(prismaRepository, waMonitor); } + integrationEnabled: boolean; public async set(instanceName: string, data: WebhookDto): Promise { if (!isURL(data.url, { require_tld: false })) { @@ -78,17 +79,7 @@ export class WebhookController extends EventController { sender, apiKey, local, - }: { - instanceName: string; - origin: string; - event: string; - data: Object; - serverUrl: string; - dateTime: string; - sender: string; - apiKey?: string; - local?: boolean; - }): Promise { + }: EmitData): Promise { const instanceWebhook = await this.get(instanceName); const webhookGlobal = configService.get('WEBHOOK'); const webhookLocal = instanceWebhook?.events; diff --git a/src/api/integrations/event/websocket/controllers/websocket.controller.ts b/src/api/integrations/event/websocket/controllers/websocket.controller.ts index 7bfaa1b4..1b28bba7 100644 --- a/src/api/integrations/event/websocket/controllers/websocket.controller.ts +++ b/src/api/integrations/event/websocket/controllers/websocket.controller.ts @@ -8,12 +8,13 @@ import { NotFoundException } from '@exceptions'; import { Server } from 'http'; import { Server as SocketIO } from 'socket.io'; -import { EventController } from '../../event.controller'; +import { EmitData, EventController, EventControllerInterface } from '../../event.controller'; -export class WebsocketController extends EventController { +export class WebsocketController extends EventController implements EventControllerInterface { private io: SocketIO; private corsConfig: Array; private readonly logger = new Logger(WebsocketController.name); + integrationEnabled = configService.get('WEBSOCKET')?.ENABLED; constructor(prismaRepository: PrismaRepository, waMonitor: WAMonitoringService) { super(prismaRepository, waMonitor); @@ -21,9 +22,7 @@ export class WebsocketController extends EventController { } public init(httpServer: Server): void { - if (!configService.get('WEBSOCKET')?.ENABLED) { - return; - } + if (!this.integrationEnabled) return; this.socket = new SocketIO(httpServer, { cors: { @@ -59,6 +58,8 @@ export class WebsocketController extends EventController { } public async set(instanceName: string, data: WebsocketDto): Promise { + if (!this.integrationEnabled) return; + if (!data.enabled) { data.events = []; } else { @@ -88,6 +89,8 @@ export class WebsocketController extends EventController { } public async get(instanceName: string): Promise { + if (!this.integrationEnabled) return; + if (undefined === this.monitor.waInstances[instanceName]) { throw new NotFoundException('Instance not found'); } @@ -114,19 +117,8 @@ export class WebsocketController extends EventController { dateTime, sender, apiKey, - }: { - instanceName: string; - origin: string; - event: string; - data: Object; - serverUrl: string; - dateTime: string; - sender: string; - apiKey?: string; - }): Promise { - if (!configService.get('WEBSOCKET')?.ENABLED) { - return; - } + }: EmitData): Promise { + if (!this.integrationEnabled) return; const configEv = event.replace(/[.-]/gm, '_').toUpperCase(); const logEnabled = configService.get('LOG').LEVEL.includes('WEBSOCKET');