oex2003/evolution-api
0
1import { NatsController } from '@api/integrations/event/nats/nats.controller';2import { PusherController } from '@api/integrations/event/pusher/pusher.controller';3import { RabbitmqController } from '@api/integrations/event/rabbitmq/rabbitmq.controller';4import { SqsController } from '@api/integrations/event/sqs/sqs.controller';5import { WebhookController } from '@api/integrations/event/webhook/webhook.controller';6import { WebsocketController } from '@api/integrations/event/websocket/websocket.controller';7import { PrismaRepository } from '@api/repository/repository.service';8import { WAMonitoringService } from '@api/services/monitor.service';9import { Server } from 'http';10 11export class EventManager {12 private prismaRepository: PrismaRepository;13 private waMonitor: WAMonitoringService;14 private websocketController: WebsocketController;15 private webhookController: WebhookController;16 private rabbitmqController: RabbitmqController;17 private natsController: NatsController;18 private sqsController: SqsController;19 private pusherController: PusherController;20 21 constructor(prismaRepository: PrismaRepository, waMonitor: WAMonitoringService) {22 this.prisma = prismaRepository;23 this.monitor = waMonitor;24 25 this.websocket = new WebsocketController(prismaRepository, waMonitor);26 this.webhook = new WebhookController(prismaRepository, waMonitor);27 this.rabbitmq = new RabbitmqController(prismaRepository, waMonitor);28 this.nats = new NatsController(prismaRepository, waMonitor);29 this.sqs = new SqsController(prismaRepository, waMonitor);30 this.pusher = new PusherController(prismaRepository, waMonitor);31 }32 33 public set prisma(prisma: PrismaRepository) {34 this.prismaRepository = prisma;35 }36 37 public get prisma() {38 return this.prismaRepository;39 }40 41 public set monitor(waMonitor: WAMonitoringService) {42 this.waMonitor = waMonitor;43 }44 45 public get monitor() {46 return this.waMonitor;47 }48 49 public set websocket(websocket: WebsocketController) {50 this.websocketController = websocket;51 }52 53 public get websocket() {54 return this.websocketController;55 }56 57 public set webhook(webhook: WebhookController) {58 this.webhookController = webhook;59 }60 61 public get webhook() {62 return this.webhookController;63 }64 65 public set rabbitmq(rabbitmq: RabbitmqController) {66 this.rabbitmqController = rabbitmq;67 }68 69 public get rabbitmq() {70 return this.rabbitmqController;71 }72 73 public set nats(nats: NatsController) {74 this.natsController = nats;75 }76 77 public get nats() {78 return this.natsController;79 }80 81 public set sqs(sqs: SqsController) {82 this.sqsController = sqs;83 }84 85 public get sqs() {86 return this.sqsController;87 }88 89 public set pusher(pusher: PusherController) {90 this.pusherController = pusher;91 }92 public get pusher() {93 return this.pusherController;94 }95 96 public init(httpServer: Server): void {97 this.websocket.init(httpServer);98 this.rabbitmq.init();99 this.nats.init();100 this.sqs.init();101 this.pusher.init();102 }103 104 public async emit(eventData: {105 instanceName: string;106 origin: string;107 event: string;108 data: Object;109 serverUrl: string;110 dateTime: string;111 sender: string;112 apiKey?: string;113 local?: boolean;114 integration?: string[];115 }): Promise<void> {116 await this.websocket.emit(eventData);117 await this.rabbitmq.emit(eventData);118 await this.nats.emit(eventData);119 await this.sqs.emit(eventData);120 await this.webhook.emit(eventData);121 await this.pusher.emit(eventData);122 }123 124 public async setInstance(instanceName: string, data: any): Promise<any> {125 if (data.websocket)126 await this.websocket.set(instanceName, {127 websocket: {128 enabled: true,129 events: data.websocket?.events,130 },131 });132 133 if (data.rabbitmq)134 await this.rabbitmq.set(instanceName, {135 rabbitmq: {136 enabled: true,137 events: data.rabbitmq?.events,138 },139 });140 141 if (data.nats)142 await this.nats.set(instanceName, {143 nats: {144 enabled: true,145 events: data.nats?.events,146 },147 });148 149 if (data.sqs)150 await this.sqs.set(instanceName, {151 sqs: {152 enabled: true,153 events: data.sqs?.events,154 },155 });156 157 if (data.webhook)158 await this.webhook.set(instanceName, {159 webhook: {160 enabled: true,161 events: data.webhook?.events,162 url: data.webhook?.url,163 headers: data.webhook?.headers,164 base64: data.webhook?.base64,165 byEvents: data.webhook?.byEvents,166 },167 });168 169 if (data.pusher)170 await this.pusher.set(instanceName, {171 pusher: {172 enabled: true,173 events: data.pusher?.events,174 appId: data.pusher?.appId,175 key: data.pusher?.key,176 secret: data.pusher?.secret,177 cluster: data.pusher?.cluster,178 useTLS: data.pusher?.useTLS,179 },180 });181 }182}183 