Team Ai
Apppublic

oex2003/evolution-api

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes
event.controller.ts160 linesDownload Raw Back to event
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