oex2003/evolution-api
0
1import { EventDto } from '@api/integrations/event/event.dto';2import { PrismaRepository } from '@api/repository/repository.service';3import { WAMonitoringService } from '@api/services/monitor.service';4import { wa } from '@api/types/wa.types';5 6export type EmitData = {7 instanceName: string;8 origin: string;9 event: string;10 data: any;11 serverUrl: string;12 dateTime: string;13 sender: string;14 apiKey?: string;15 local?: boolean;16 integration?: string[];17};18 19export interface EventControllerInterface {20 set(instanceName: string, data: any): Promise<any>;21 get(instanceName: string): Promise<any>;22 emit({ instanceName, origin, event, data, serverUrl, dateTime, sender, apiKey, local }: EmitData): Promise<void>;23}24 25export class EventController {26 public prismaRepository: PrismaRepository;27 protected waMonitor: WAMonitoringService;28 private integrationStatus: boolean;29 private integrationName: string;30 31 constructor(32 prismaRepository: PrismaRepository,33 waMonitor: WAMonitoringService,34 integrationStatus: boolean,35 integrationName: string,36 ) {37 this.prisma = prismaRepository;38 this.monitor = waMonitor;39 this.status = integrationStatus;40 this.name = integrationName;41 }42 43 public set prisma(prisma: PrismaRepository) {44 this.prismaRepository = prisma;45 }46 47 public get prisma() {48 return this.prismaRepository;49 }50 51 public set monitor(waMonitor: WAMonitoringService) {52 this.waMonitor = waMonitor;53 }54 55 public get monitor() {56 return this.waMonitor;57 }58 59 public set name(name: string) {60 this.integrationName = name;61 }62 63 public get name() {64 return this.integrationName;65 }66 67 public set status(status: boolean) {68 this.integrationStatus = status;69 }70 71 public get status() {72 return this.integrationStatus;73 }74 75 public async set(instanceName: string, data: EventDto): Promise<wa.LocalEvent> {76 if (!this.status) {77 return;78 }79 80 if (!data[this.name]?.enabled) {81 data[this.name].events = [];82 } else {83 if (0 === data[this.name].events.length) {84 data[this.name].events = EventController.events;85 }86 }87 88 return this.prisma[this.name].upsert({89 where: {90 instanceId: this.monitor.waInstances[instanceName].instanceId,91 },92 update: {93 enabled: data[this.name]?.enabled,94 events: data[this.name].events,95 },96 create: {97 enabled: data[this.name]?.enabled,98 events: data[this.name].events,99 instanceId: this.monitor.waInstances[instanceName].instanceId,100 },101 });102 }103 104 public async get(instanceName: string): Promise<wa.LocalEvent> {105 if (!this.status) {106 return;107 }108 109 if (undefined === this.monitor.waInstances[instanceName]) {110 return null;111 }112 113 const data = await this.prisma[this.name].findUnique({114 where: {115 instanceId: this.monitor.waInstances[instanceName].instanceId,116 },117 });118 119 if (!data) {120 return null;121 }122 123 return data;124 }125 126 public static readonly events = [127 'APPLICATION_STARTUP',128 'QRCODE_UPDATED',129 'MESSAGES_SET',130 'MESSAGES_UPSERT',131 'MESSAGES_EDITED',132 'MESSAGES_UPDATE',133 'MESSAGES_DELETE',134 'SEND_MESSAGE',135 'SEND_MESSAGE_UPDATE',136 'CONTACTS_SET',137 'CONTACTS_UPSERT',138 'CONTACTS_UPDATE',139 'PRESENCE_UPDATE',140 'CHATS_SET',141 'CHATS_UPSERT',142 'CHATS_UPDATE',143 'CHATS_DELETE',144 'GROUPS_UPSERT',145 'GROUP_UPDATE',146 'GROUP_PARTICIPANTS_UPDATE',147 'CONNECTION_UPDATE',148 'LABELS_EDIT',149 'LABELS_ASSOCIATION',150 'CALL',151 'TYPEBOT_START',152 'TYPEBOT_CHANGE_STATUS',153 'REMOVE_INSTANCE',154 'LOGOUT_INSTANCE',155 'INSTANCE_CREATE',156 'INSTANCE_DELETE',157 'STATUS_INSTANCE',158 ];159}160 