diff --git a/src/api/dto/integration.dto.ts b/src/api/dto/integration.dto.ts index 4df9a2c0..6ccf9671 100644 --- a/src/api/dto/integration.dto.ts +++ b/src/api/dto/integration.dto.ts @@ -1,3 +1,4 @@ +import { ChatwootInstanceMixin } from '@api/integrations/chatbot/chatwoot/dto/chatwoot.dto'; import { RabbitMQInstanceMixin } from '@api/integrations/event/rabbitmq/dto/rabbitmq.dto'; import { SQSInstanceMixin } from '@api/integrations/event/sqs/dto/sqs.dto'; import { WebhookInstanceMixin } from '@api/integrations/event/webhook/dto/webhook.dto'; @@ -5,24 +6,6 @@ import { WebsocketInstanceMixin } from '@api/integrations/event/websocket/dto/we export type Constructor = new (...args: any[]) => T; -function ChatwootInstanceMixin(Base: TBase) { - return class extends Base { - chatwootAccountId?: string; - chatwootToken?: string; - chatwootUrl?: string; - chatwootSignMsg?: boolean; - chatwootReopenConversation?: boolean; - chatwootConversationPending?: boolean; - chatwootMergeBrazilContacts?: boolean; - chatwootImportContacts?: boolean; - chatwootImportMessages?: boolean; - chatwootDaysLimitImportMessages?: number; - chatwootNameInbox?: string; - chatwootOrganization?: string; - chatwootLogo?: string; - }; -} - export class IntegrationDto extends WebhookInstanceMixin( WebsocketInstanceMixin(RabbitMQInstanceMixin(SQSInstanceMixin(ChatwootInstanceMixin(class {})))), ) {} diff --git a/src/api/integrations/chatbot/chatwoot/dto/chatwoot.dto.ts b/src/api/integrations/chatbot/chatwoot/dto/chatwoot.dto.ts index e0ea18f5..2ab11215 100644 --- a/src/api/integrations/chatbot/chatwoot/dto/chatwoot.dto.ts +++ b/src/api/integrations/chatbot/chatwoot/dto/chatwoot.dto.ts @@ -1,3 +1,5 @@ +import { Constructor } from '@api/dto/integration.dto'; + export class ChatwootDto { enabled?: boolean; accountId?: string; @@ -18,3 +20,21 @@ export class ChatwootDto { logo?: string; ignoreJids?: string[]; } + +export function ChatwootInstanceMixin(Base: TBase) { + return class extends Base { + chatwootAccountId?: string; + chatwootToken?: string; + chatwootUrl?: string; + chatwootSignMsg?: boolean; + chatwootReopenConversation?: boolean; + chatwootConversationPending?: boolean; + chatwootMergeBrazilContacts?: boolean; + chatwootImportContacts?: boolean; + chatwootImportMessages?: boolean; + chatwootDaysLimitImportMessages?: number; + chatwootNameInbox?: string; + chatwootOrganization?: string; + chatwootLogo?: string; + }; +} diff --git a/src/api/integrations/event/rabbitmq/controllers/rabbitmq.controller.ts b/src/api/integrations/event/rabbitmq/controllers/rabbitmq.controller.ts index 8e2f799b..7519bb9e 100644 --- a/src/api/integrations/event/rabbitmq/controllers/rabbitmq.controller.ts +++ b/src/api/integrations/event/rabbitmq/controllers/rabbitmq.controller.ts @@ -15,12 +15,12 @@ export class RabbitmqController extends EventController { super(prismaRepository, waMonitor); } - public init(): void { + public async init(): Promise { if (!configService.get('RABBITMQ')?.ENABLED) { return; } - new Promise((resolve, reject) => { + await new Promise((resolve, reject) => { const uri = configService.get('RABBITMQ').URI; amqp.connect(uri, (error, connection) => { if (error) { @@ -101,7 +101,7 @@ export class RabbitmqController extends EventController { }); if (!data) { - throw new NotFoundException('Rabbitmq not found'); + return null; } return data; @@ -131,7 +131,7 @@ export class RabbitmqController extends EventController { } const instanceRabbitmq = await this.get(instanceName); - const rabbitmqLocal = instanceRabbitmq.events; + const rabbitmqLocal = instanceRabbitmq?.events; const rabbitmqGlobal = configService.get('RABBITMQ').GLOBAL_ENABLED; const rabbitmqEvents = configService.get('RABBITMQ').EVENTS; const we = event.replace(/[.-]/gm, '_').toUpperCase(); @@ -147,7 +147,7 @@ export class RabbitmqController extends EventController { apikey: apiKey, }; - if (instanceRabbitmq.enabled && this.amqpChannel) { + if (instanceRabbitmq?.enabled && this.amqpChannel) { if (Array.isArray(rabbitmqLocal) && rabbitmqLocal.includes(we)) { const exchangeName = instanceName ?? 'evolution_exchange'; diff --git a/src/api/integrations/event/sqs/controllers/sqs.controller.ts b/src/api/integrations/event/sqs/controllers/sqs.controller.ts index eb7a8d40..534f1c98 100644 --- a/src/api/integrations/event/sqs/controllers/sqs.controller.ts +++ b/src/api/integrations/event/sqs/controllers/sqs.controller.ts @@ -87,7 +87,7 @@ export class SqsController extends EventController { }); if (!data) { - throw new NotFoundException('Sqs not found'); + return null; } return data; @@ -117,10 +117,10 @@ export class SqsController extends EventController { } const instanceSqs = await this.get(instanceName); - const sqsLocal = instanceSqs.events; + const sqsLocal = instanceSqs?.events; const we = event.replace(/[.-]/gm, '_').toUpperCase(); - if (instanceSqs.enabled) { + if (instanceSqs?.enabled) { if (this.sqs) { if (Array.isArray(sqsLocal) && sqsLocal.includes(we)) { const eventFormatted = `${event.replace('.', '_').toLowerCase()}`; diff --git a/src/api/integrations/event/webhook/controllers/webhook.controller.ts b/src/api/integrations/event/webhook/controllers/webhook.controller.ts index be3d3664..83b884f1 100644 --- a/src/api/integrations/event/webhook/controllers/webhook.controller.ts +++ b/src/api/integrations/event/webhook/controllers/webhook.controller.ts @@ -65,7 +65,7 @@ export class WebhookController extends EventController { }); if (!data) { - throw new NotFoundException('Webhook not found'); + return null; } return data; @@ -98,7 +98,7 @@ export class WebhookController extends EventController { const instanceWebhook = await this.get(instanceName); const webhookGlobal = configService.get('WEBHOOK'); - const webhookLocal = instanceWebhook.events; + const webhookLocal = instanceWebhook?.events; const we = event.replace(/[.-]/gm, '_').toUpperCase(); const transformedWe = we.replace(/_/gm, '-').toLowerCase(); const enabledLog = configService.get('LOG').LEVEL.includes('WEBHOOKS'); @@ -107,7 +107,7 @@ export class WebhookController extends EventController { event, instance: instanceName, data, - destination: instanceWebhook.url, + destination: instanceWebhook?.url, date_time: dateTime, sender, server_url: serverUrl, @@ -117,10 +117,10 @@ export class WebhookController extends EventController { if (Array.isArray(webhookLocal) && webhookLocal.includes(we)) { let baseURL: string; - if (instanceWebhook.webhookByEvents) { - baseURL = `${instanceWebhook.url}/${transformedWe}`; + if (instanceWebhook?.webhookByEvents) { + baseURL = `${instanceWebhook?.url}/${transformedWe}`; } else { - baseURL = instanceWebhook.url; + baseURL = instanceWebhook?.url; } if (enabledLog) { @@ -134,7 +134,7 @@ export class WebhookController extends EventController { } try { - if (instanceWebhook.enabled && isURL(instanceWebhook.url, { require_tld: false })) { + if (instanceWebhook?.enabled && isURL(instanceWebhook.url, { require_tld: false })) { const httpService = axios.create({ baseURL }); await httpService.post('', webhookData); diff --git a/src/api/integrations/event/websocket/controllers/websocket.controller.ts b/src/api/integrations/event/websocket/controllers/websocket.controller.ts index 0b05519c..ca127f0c 100644 --- a/src/api/integrations/event/websocket/controllers/websocket.controller.ts +++ b/src/api/integrations/event/websocket/controllers/websocket.controller.ts @@ -98,7 +98,7 @@ export class WebsocketController extends EventController { }); if (!data) { - throw new NotFoundException('Websocket not found'); + return null; } return data; @@ -153,11 +153,11 @@ export class WebsocketController extends EventController { try { const instanceSocket = await this.get(instanceName); - if (!instanceSocket.enabled) { + if (!instanceSocket?.enabled) { return; } - if (Array.isArray(instanceSocket.events) && instanceSocket.events.includes(configEv)) { + if (Array.isArray(instanceSocket?.events) && instanceSocket?.events.includes(configEv)) { this.socket.of(`/${instanceName}`).emit(event, message); if (logEnabled) {