mirror of
https://github.com/EvolutionAPI/evolution-api.git
synced 2025-07-20 02:06:43 -06:00
refactor: event integration
This commit is contained in:
parent
edeb1efd2a
commit
9209c9992d
@ -3,6 +3,25 @@ import { rabbitmqController, sqsController, webhookController, websocketControll
|
|||||||
import { WAMonitoringService } from '@api/services/monitor.service';
|
import { WAMonitoringService } from '@api/services/monitor.service';
|
||||||
import { Server } from 'http';
|
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<any>;
|
||||||
|
get(instanceName: string): Promise<any>;
|
||||||
|
emit({ instanceName, origin, event, data, serverUrl, dateTime, sender, apiKey, local }: EmitData): Promise<void>;
|
||||||
|
}
|
||||||
|
|
||||||
export class EventController {
|
export class EventController {
|
||||||
public prismaRepository: PrismaRepository;
|
public prismaRepository: PrismaRepository;
|
||||||
public waMonitor: WAMonitoringService;
|
public waMonitor: WAMonitoringService;
|
||||||
|
@ -7,19 +7,19 @@ import { Logger } from '@config/logger.config';
|
|||||||
import { NotFoundException } from '@exceptions';
|
import { NotFoundException } from '@exceptions';
|
||||||
import * as amqp from 'amqplib/callback_api';
|
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;
|
public amqpChannel: amqp.Channel | null = null;
|
||||||
private readonly logger = new Logger(RabbitmqController.name);
|
private readonly logger = new Logger(RabbitmqController.name);
|
||||||
|
integrationEnabled = configService.get<Rabbitmq>('RABBITMQ')?.ENABLED;
|
||||||
|
|
||||||
constructor(prismaRepository: PrismaRepository, waMonitor: WAMonitoringService) {
|
constructor(prismaRepository: PrismaRepository, waMonitor: WAMonitoringService) {
|
||||||
super(prismaRepository, waMonitor);
|
super(prismaRepository, waMonitor);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async init(): Promise<void> {
|
public async init(): Promise<void> {
|
||||||
if (!configService.get<Rabbitmq>('RABBITMQ')?.ENABLED) {
|
if (!this.integrationEnabled) return;
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
await new Promise<void>((resolve, reject) => {
|
await new Promise<void>((resolve, reject) => {
|
||||||
const uri = configService.get<Rabbitmq>('RABBITMQ').URI;
|
const uri = configService.get<Rabbitmq>('RABBITMQ').URI;
|
||||||
@ -62,6 +62,8 @@ export class RabbitmqController extends EventController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public async set(instanceName: string, data: RabbitmqDto): Promise<wa.LocalRabbitmq> {
|
public async set(instanceName: string, data: RabbitmqDto): Promise<wa.LocalRabbitmq> {
|
||||||
|
if (!this.integrationEnabled) return;
|
||||||
|
|
||||||
if (!data.enabled) {
|
if (!data.enabled) {
|
||||||
data.events = [];
|
data.events = [];
|
||||||
} else {
|
} else {
|
||||||
@ -91,6 +93,8 @@ export class RabbitmqController extends EventController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public async get(instanceName: string): Promise<wa.LocalWebsocket> {
|
public async get(instanceName: string): Promise<wa.LocalWebsocket> {
|
||||||
|
if (!this.integrationEnabled) return;
|
||||||
|
|
||||||
if (undefined === this.monitor.waInstances[instanceName]) {
|
if (undefined === this.monitor.waInstances[instanceName]) {
|
||||||
throw new NotFoundException('Instance not found');
|
throw new NotFoundException('Instance not found');
|
||||||
}
|
}
|
||||||
@ -117,19 +121,8 @@ export class RabbitmqController extends EventController {
|
|||||||
dateTime,
|
dateTime,
|
||||||
sender,
|
sender,
|
||||||
apiKey,
|
apiKey,
|
||||||
}: {
|
}: EmitData): Promise<void> {
|
||||||
instanceName: string;
|
if (!this.integrationEnabled) return;
|
||||||
origin: string;
|
|
||||||
event: string;
|
|
||||||
data: Object;
|
|
||||||
serverUrl: string;
|
|
||||||
dateTime: string;
|
|
||||||
sender: string;
|
|
||||||
apiKey?: string;
|
|
||||||
}): Promise<void> {
|
|
||||||
if (!configService.get<Rabbitmq>('RABBITMQ')?.ENABLED) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const instanceRabbitmq = await this.get(instanceName);
|
const instanceRabbitmq = await this.get(instanceName);
|
||||||
const rabbitmqLocal = instanceRabbitmq?.events;
|
const rabbitmqLocal = instanceRabbitmq?.events;
|
||||||
|
@ -7,20 +7,19 @@ import { configService, Log, Sqs } from '@config/env.config';
|
|||||||
import { Logger } from '@config/logger.config';
|
import { Logger } from '@config/logger.config';
|
||||||
import { NotFoundException } from '@exceptions';
|
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 sqs: SQS;
|
||||||
private readonly logger = new Logger(SqsController.name);
|
private readonly logger = new Logger(SqsController.name);
|
||||||
|
integrationEnabled = configService.get<Sqs>('SQS')?.ENABLED;
|
||||||
|
|
||||||
constructor(prismaRepository: PrismaRepository, waMonitor: WAMonitoringService) {
|
constructor(prismaRepository: PrismaRepository, waMonitor: WAMonitoringService) {
|
||||||
super(prismaRepository, waMonitor);
|
super(prismaRepository, waMonitor);
|
||||||
}
|
}
|
||||||
|
|
||||||
public init(): void {
|
public init(): void {
|
||||||
if (!configService.get<Sqs>('SQS')?.ENABLED) {
|
if (!this.integrationEnabled) return;
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||||
new Promise<void>((resolve, reject) => {
|
new Promise<void>((resolve, reject) => {
|
||||||
@ -48,6 +47,8 @@ export class SqsController extends EventController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public async set(instanceName: string, data: SqsDto): Promise<wa.LocalSqs> {
|
public async set(instanceName: string, data: SqsDto): Promise<wa.LocalSqs> {
|
||||||
|
if (!this.integrationEnabled) return;
|
||||||
|
|
||||||
if (!data.enabled) {
|
if (!data.enabled) {
|
||||||
data.events = [];
|
data.events = [];
|
||||||
} else {
|
} else {
|
||||||
@ -77,6 +78,8 @@ export class SqsController extends EventController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public async get(instanceName: string): Promise<wa.LocalSqs> {
|
public async get(instanceName: string): Promise<wa.LocalSqs> {
|
||||||
|
if (!this.integrationEnabled) return;
|
||||||
|
|
||||||
if (undefined === this.monitor.waInstances[instanceName]) {
|
if (undefined === this.monitor.waInstances[instanceName]) {
|
||||||
throw new NotFoundException('Instance not found');
|
throw new NotFoundException('Instance not found');
|
||||||
}
|
}
|
||||||
@ -103,19 +106,8 @@ export class SqsController extends EventController {
|
|||||||
dateTime,
|
dateTime,
|
||||||
sender,
|
sender,
|
||||||
apiKey,
|
apiKey,
|
||||||
}: {
|
}: EmitData): Promise<void> {
|
||||||
instanceName: string;
|
if (!this.integrationEnabled) return;
|
||||||
origin: string;
|
|
||||||
event: string;
|
|
||||||
data: Object;
|
|
||||||
serverUrl: string;
|
|
||||||
dateTime: string;
|
|
||||||
sender: string;
|
|
||||||
apiKey?: string;
|
|
||||||
}): Promise<void> {
|
|
||||||
if (!configService.get<Sqs>('SQS')?.ENABLED) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const instanceSqs = await this.get(instanceName);
|
const instanceSqs = await this.get(instanceName);
|
||||||
const sqsLocal = instanceSqs?.events;
|
const sqsLocal = instanceSqs?.events;
|
||||||
|
@ -7,15 +7,16 @@ import { BadRequestException, NotFoundException } from '@exceptions';
|
|||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import { isURL } from 'class-validator';
|
import { isURL } from 'class-validator';
|
||||||
|
|
||||||
import { EventController } from '../../event.controller';
|
import { EmitData, EventController, EventControllerInterface } from '../../event.controller';
|
||||||
import { WebhookDto } from '../dto/webhook.dto';
|
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);
|
private readonly logger = new Logger(WebhookController.name);
|
||||||
|
|
||||||
constructor(prismaRepository: PrismaRepository, waMonitor: WAMonitoringService) {
|
constructor(prismaRepository: PrismaRepository, waMonitor: WAMonitoringService) {
|
||||||
super(prismaRepository, waMonitor);
|
super(prismaRepository, waMonitor);
|
||||||
}
|
}
|
||||||
|
integrationEnabled: boolean;
|
||||||
|
|
||||||
public async set(instanceName: string, data: WebhookDto): Promise<wa.LocalWebHook> {
|
public async set(instanceName: string, data: WebhookDto): Promise<wa.LocalWebHook> {
|
||||||
if (!isURL(data.url, { require_tld: false })) {
|
if (!isURL(data.url, { require_tld: false })) {
|
||||||
@ -78,17 +79,7 @@ export class WebhookController extends EventController {
|
|||||||
sender,
|
sender,
|
||||||
apiKey,
|
apiKey,
|
||||||
local,
|
local,
|
||||||
}: {
|
}: EmitData): Promise<void> {
|
||||||
instanceName: string;
|
|
||||||
origin: string;
|
|
||||||
event: string;
|
|
||||||
data: Object;
|
|
||||||
serverUrl: string;
|
|
||||||
dateTime: string;
|
|
||||||
sender: string;
|
|
||||||
apiKey?: string;
|
|
||||||
local?: boolean;
|
|
||||||
}): Promise<void> {
|
|
||||||
const instanceWebhook = await this.get(instanceName);
|
const instanceWebhook = await this.get(instanceName);
|
||||||
const webhookGlobal = configService.get<Webhook>('WEBHOOK');
|
const webhookGlobal = configService.get<Webhook>('WEBHOOK');
|
||||||
const webhookLocal = instanceWebhook?.events;
|
const webhookLocal = instanceWebhook?.events;
|
||||||
|
@ -8,12 +8,13 @@ import { NotFoundException } from '@exceptions';
|
|||||||
import { Server } from 'http';
|
import { Server } from 'http';
|
||||||
import { Server as SocketIO } from 'socket.io';
|
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 io: SocketIO;
|
||||||
private corsConfig: Array<any>;
|
private corsConfig: Array<any>;
|
||||||
private readonly logger = new Logger(WebsocketController.name);
|
private readonly logger = new Logger(WebsocketController.name);
|
||||||
|
integrationEnabled = configService.get<Websocket>('WEBSOCKET')?.ENABLED;
|
||||||
|
|
||||||
constructor(prismaRepository: PrismaRepository, waMonitor: WAMonitoringService) {
|
constructor(prismaRepository: PrismaRepository, waMonitor: WAMonitoringService) {
|
||||||
super(prismaRepository, waMonitor);
|
super(prismaRepository, waMonitor);
|
||||||
@ -21,9 +22,7 @@ export class WebsocketController extends EventController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public init(httpServer: Server): void {
|
public init(httpServer: Server): void {
|
||||||
if (!configService.get<Websocket>('WEBSOCKET')?.ENABLED) {
|
if (!this.integrationEnabled) return;
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.socket = new SocketIO(httpServer, {
|
this.socket = new SocketIO(httpServer, {
|
||||||
cors: {
|
cors: {
|
||||||
@ -59,6 +58,8 @@ export class WebsocketController extends EventController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public async set(instanceName: string, data: WebsocketDto): Promise<wa.LocalWebsocket> {
|
public async set(instanceName: string, data: WebsocketDto): Promise<wa.LocalWebsocket> {
|
||||||
|
if (!this.integrationEnabled) return;
|
||||||
|
|
||||||
if (!data.enabled) {
|
if (!data.enabled) {
|
||||||
data.events = [];
|
data.events = [];
|
||||||
} else {
|
} else {
|
||||||
@ -88,6 +89,8 @@ export class WebsocketController extends EventController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public async get(instanceName: string): Promise<wa.LocalWebsocket> {
|
public async get(instanceName: string): Promise<wa.LocalWebsocket> {
|
||||||
|
if (!this.integrationEnabled) return;
|
||||||
|
|
||||||
if (undefined === this.monitor.waInstances[instanceName]) {
|
if (undefined === this.monitor.waInstances[instanceName]) {
|
||||||
throw new NotFoundException('Instance not found');
|
throw new NotFoundException('Instance not found');
|
||||||
}
|
}
|
||||||
@ -114,19 +117,8 @@ export class WebsocketController extends EventController {
|
|||||||
dateTime,
|
dateTime,
|
||||||
sender,
|
sender,
|
||||||
apiKey,
|
apiKey,
|
||||||
}: {
|
}: EmitData): Promise<void> {
|
||||||
instanceName: string;
|
if (!this.integrationEnabled) return;
|
||||||
origin: string;
|
|
||||||
event: string;
|
|
||||||
data: Object;
|
|
||||||
serverUrl: string;
|
|
||||||
dateTime: string;
|
|
||||||
sender: string;
|
|
||||||
apiKey?: string;
|
|
||||||
}): Promise<void> {
|
|
||||||
if (!configService.get<Websocket>('WEBSOCKET')?.ENABLED) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const configEv = event.replace(/[.-]/gm, '_').toUpperCase();
|
const configEv = event.replace(/[.-]/gm, '_').toUpperCase();
|
||||||
const logEnabled = configService.get<Log>('LOG').LEVEL.includes('WEBSOCKET');
|
const logEnabled = configService.get<Log>('LOG').LEVEL.includes('WEBSOCKET');
|
||||||
|
Loading…
Reference in New Issue
Block a user