diff --git a/.DS_Store b/.DS_Store index f4f05c716..3ccbdbaa5 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/src/api/integrations/channel/whatsapp/whatsapp.baileys.service.ts b/src/api/integrations/channel/whatsapp/whatsapp.baileys.service.ts index 2636adbda..d2c458ecc 100644 --- a/src/api/integrations/channel/whatsapp/whatsapp.baileys.service.ts +++ b/src/api/integrations/channel/whatsapp/whatsapp.baileys.service.ts @@ -82,7 +82,7 @@ import { createId as cuid } from '@paralleldrive/cuid2'; import { Instance, Message } from '@prisma/client'; import { createJid } from '@utils/createJid'; import { fetchLatestWaWebVersion } from '@utils/fetchLatestWaWebVersion'; -import {makeProxyAgent, makeProxyAgentUndici} from '@utils/makeProxyAgent'; +import { makeProxyAgent, makeProxyAgentUndici } from '@utils/makeProxyAgent'; import { getOnWhatsappCache, saveOnWhatsappCache } from '@utils/onWhatsappCache'; import { status } from '@utils/renderStatus'; import { sendTelemetry } from '@utils/sendTelemetry'; @@ -1022,7 +1022,10 @@ export class BaileysStartupService extends ChannelStartupService { messagesRaw.push(this.prepareMessage(m)); } - this.sendDataWebhook(Events.MESSAGES_SET, [...messagesRaw]); + this.sendDataWebhook(Events.MESSAGES_SET, [...messagesRaw], true, undefined, { + isLatest, + progress, + }); if (this.configService.get('DATABASE').SAVE_DATA.HISTORIC) { await this.prismaRepository.message.createMany({ data: messagesRaw, skipDuplicates: true }); diff --git a/src/api/integrations/event/event.controller.ts b/src/api/integrations/event/event.controller.ts index 7df3de924..39b52184b 100644 --- a/src/api/integrations/event/event.controller.ts +++ b/src/api/integrations/event/event.controller.ts @@ -14,12 +14,24 @@ export type EmitData = { apiKey?: string; local?: boolean; integration?: string[]; + extra?: Record; }; export interface EventControllerInterface { set(instanceName: string, data: any): Promise; get(instanceName: string): Promise; - emit({ instanceName, origin, event, data, serverUrl, dateTime, sender, apiKey, local }: EmitData): Promise; + emit({ + instanceName, + origin, + event, + data, + serverUrl, + dateTime, + sender, + apiKey, + local, + extra, + }: EmitData): Promise; } export class EventController { diff --git a/src/api/integrations/event/event.manager.ts b/src/api/integrations/event/event.manager.ts index 90547932a..5dd3fcf26 100644 --- a/src/api/integrations/event/event.manager.ts +++ b/src/api/integrations/event/event.manager.ts @@ -123,6 +123,7 @@ export class EventManager { apiKey?: string; local?: boolean; integration?: string[]; + extra?: Record; }): Promise { await this.websocket.emit(eventData); await this.rabbitmq.emit(eventData); diff --git a/src/api/integrations/event/kafka/kafka.controller.ts b/src/api/integrations/event/kafka/kafka.controller.ts index 416bcb138..543c759ad 100644 --- a/src/api/integrations/event/kafka/kafka.controller.ts +++ b/src/api/integrations/event/kafka/kafka.controller.ts @@ -262,6 +262,7 @@ export class KafkaController extends EventController implements EventControllerI sender, apiKey, integration, + extra, }: EmitData): Promise { if (integration && !integration.includes('kafka')) { return; @@ -284,6 +285,7 @@ export class KafkaController extends EventController implements EventControllerI const logEnabled = configService.get('LOG').LEVEL.includes('WEBHOOKS'); const message = { + ...(extra ?? {}), event, instance: instanceName, data, diff --git a/src/api/integrations/event/nats/nats.controller.ts b/src/api/integrations/event/nats/nats.controller.ts index 09b597797..1ff4fbae8 100644 --- a/src/api/integrations/event/nats/nats.controller.ts +++ b/src/api/integrations/event/nats/nats.controller.ts @@ -47,6 +47,7 @@ export class NatsController extends EventController implements EventControllerIn sender, apiKey, integration, + extra, }: EmitData): Promise { if (integration && !integration.includes('nats')) { return; @@ -65,6 +66,7 @@ export class NatsController extends EventController implements EventControllerIn const logEnabled = configService.get('LOG').LEVEL.includes('WEBHOOKS'); const message = { + ...(extra ?? {}), event, instance: instanceName, data, diff --git a/src/api/integrations/event/pusher/pusher.controller.ts b/src/api/integrations/event/pusher/pusher.controller.ts index eef244b2a..045f7cc4f 100644 --- a/src/api/integrations/event/pusher/pusher.controller.ts +++ b/src/api/integrations/event/pusher/pusher.controller.ts @@ -121,6 +121,7 @@ export class PusherController extends EventController implements EventController apiKey, local, integration, + extra, }: EmitData): Promise { if (integration && !integration.includes('pusher')) { return; @@ -133,6 +134,7 @@ export class PusherController extends EventController implements EventController const enabledLog = configService.get('LOG').LEVEL.includes('WEBHOOKS'); const eventName = event.replace(/_/g, '.').toLowerCase(); const pusherData = { + ...(extra ?? {}), event, instance: instanceName, data, diff --git a/src/api/integrations/event/rabbitmq/rabbitmq.controller.ts b/src/api/integrations/event/rabbitmq/rabbitmq.controller.ts index 3295b12de..b4625508b 100644 --- a/src/api/integrations/event/rabbitmq/rabbitmq.controller.ts +++ b/src/api/integrations/event/rabbitmq/rabbitmq.controller.ts @@ -209,6 +209,7 @@ export class RabbitmqController extends EventController implements EventControll sender, apiKey, integration, + extra, }: EmitData): Promise { if (integration && !integration.includes('rabbitmq')) { return; @@ -233,6 +234,7 @@ export class RabbitmqController extends EventController implements EventControll const logEnabled = configService.get('LOG').LEVEL.includes('WEBHOOKS'); const message = { + ...(extra ?? {}), event, instance: instanceName, data, diff --git a/src/api/integrations/event/sqs/sqs.controller.ts b/src/api/integrations/event/sqs/sqs.controller.ts index 08c89053e..2b0398ef2 100644 --- a/src/api/integrations/event/sqs/sqs.controller.ts +++ b/src/api/integrations/event/sqs/sqs.controller.ts @@ -93,6 +93,7 @@ export class SqsController extends EventController implements EventControllerInt sender, apiKey, integration, + extra, }: EmitData): Promise { if (integration && !integration.includes('sqs')) { return; @@ -128,6 +129,7 @@ export class SqsController extends EventController implements EventControllerInt const sqsUrl = `https://sqs.${sqsConfig.REGION}.amazonaws.com/${sqsConfig.ACCOUNT_ID}/${queueName}`; const message = { + ...(extra ?? {}), event, instance: instanceName, dataType: 'json', diff --git a/src/api/integrations/event/webhook/webhook.controller.ts b/src/api/integrations/event/webhook/webhook.controller.ts index bd4e5fe01..7f1dd8dc0 100644 --- a/src/api/integrations/event/webhook/webhook.controller.ts +++ b/src/api/integrations/event/webhook/webhook.controller.ts @@ -65,6 +65,7 @@ export class WebhookController extends EventController implements EventControlle apiKey, local, integration, + extra, }: EmitData): Promise { if (integration && !integration.includes('webhook')) { return; @@ -90,6 +91,7 @@ export class WebhookController extends EventController implements EventControlle const regex = /^(https?:\/\/)/; const webhookData = { + ...(extra ?? {}), event, instance: instanceName, data, diff --git a/src/api/integrations/event/websocket/websocket.controller.ts b/src/api/integrations/event/websocket/websocket.controller.ts index 724352342..611d52783 100644 --- a/src/api/integrations/event/websocket/websocket.controller.ts +++ b/src/api/integrations/event/websocket/websocket.controller.ts @@ -115,6 +115,7 @@ export class WebsocketController extends EventController implements EventControl sender, apiKey, integration, + extra, }: EmitData): Promise { if (integration && !integration.includes('websocket')) { return; @@ -127,6 +128,7 @@ export class WebsocketController extends EventController implements EventControl const configEv = event.replace(/[.-]/gm, '_').toUpperCase(); const logEnabled = configService.get('LOG').LEVEL.includes('WEBSOCKET'); const message = { + ...(extra ?? {}), event, instance: instanceName, data, diff --git a/src/api/services/channel.service.ts b/src/api/services/channel.service.ts index 947f9c397..70a588ede 100644 --- a/src/api/services/channel.service.ts +++ b/src/api/services/channel.service.ts @@ -431,7 +431,13 @@ export class ChannelStartupService { return data; } - public async sendDataWebhook(event: Events, data: T, local = true, integration?: string[]) { + public async sendDataWebhook( + event: Events, + data: T, + local = true, + integration?: string[], + extra?: Record, + ) { const serverUrl = this.configService.get('SERVER').URL; const tzoffset = new Date().getTimezoneOffset() * 60000; //offset in milliseconds const localISOTime = new Date(Date.now() - tzoffset).toISOString(); @@ -452,6 +458,7 @@ export class ChannelStartupService { apiKey: expose && instanceApikey ? instanceApikey : null, local, integration, + extra, }); }