From 65c6ecff883e05178ecefd9539a57777cd006c08 Mon Sep 17 00:00:00 2001 From: Felipe Medeiros Date: Fri, 6 Sep 2024 20:46:10 -0300 Subject: [PATCH] =?UTF-8?q?feat:=20adiciona=20headers=20no=20cadastro=20de?= =?UTF-8?q?=20webhook=20da=20inst=C3=A2ncia?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + prisma/mysql-schema.prisma | 1 + .../migration.sql | 2 ++ prisma/postgresql-schema.prisma | 1 + src/api/controllers/instance.controller.ts | 2 ++ src/api/integrations/event/event.dto.ts | 3 +++ src/api/integrations/event/event.manager.ts | 1 + src/api/integrations/event/webhook/webhook.controller.ts | 8 +++++++- src/api/integrations/event/webhook/webhook.router.ts | 2 +- src/api/integrations/event/webhook/webhook.schema.ts | 1 + src/api/types/wa.types.ts | 1 + 11 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 prisma/postgresql-migrations/20240906202019_add_headers_on_webhook_config/migration.sql diff --git a/.gitignore b/.gitignore index 3ce9eb92..3c511120 100644 --- a/.gitignore +++ b/.gitignore @@ -20,6 +20,7 @@ lerna-debug.log* # Package /yarn.lock +/pnpm-lock.yaml /package-lock.json # IDEs diff --git a/prisma/mysql-schema.prisma b/prisma/mysql-schema.prisma index 0c756cfc..88400f0f 100644 --- a/prisma/mysql-schema.prisma +++ b/prisma/mysql-schema.prisma @@ -181,6 +181,7 @@ model MessageUpdate { model Webhook { id String @id @default(cuid()) url String @db.VarChar(500) + headers Json? @db.Json enabled Boolean? @default(true) events Json? @db.Json webhookByEvents Boolean? @default(false) diff --git a/prisma/postgresql-migrations/20240906202019_add_headers_on_webhook_config/migration.sql b/prisma/postgresql-migrations/20240906202019_add_headers_on_webhook_config/migration.sql new file mode 100644 index 00000000..1dc3ccbc --- /dev/null +++ b/prisma/postgresql-migrations/20240906202019_add_headers_on_webhook_config/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable +ALTER TABLE "Webhook" ADD COLUMN "headers" JSONB; diff --git a/prisma/postgresql-schema.prisma b/prisma/postgresql-schema.prisma index 931d67bd..738140ba 100644 --- a/prisma/postgresql-schema.prisma +++ b/prisma/postgresql-schema.prisma @@ -180,6 +180,7 @@ model MessageUpdate { model Webhook { id String @id @default(cuid()) url String @db.VarChar(500) + headers Json? @db.JsonB enabled Boolean? @default(true) @db.Boolean events Json? @db.JsonB webhookByEvents Boolean? @default(false) @db.Boolean diff --git a/src/api/controllers/instance.controller.ts b/src/api/controllers/instance.controller.ts index 069f069c..aa2875b2 100644 --- a/src/api/controllers/instance.controller.ts +++ b/src/api/controllers/instance.controller.ts @@ -151,6 +151,7 @@ export class InstanceController { hash, webhook: { webhookUrl: instanceData?.webhook?.url, + webhookHeaders: instanceData?.webhook?.headers, webhookByEvents: instanceData?.webhook?.byEvents, webhookBase64: instanceData?.webhook?.base64, }, @@ -238,6 +239,7 @@ export class InstanceController { hash, webhook: { webhookUrl: instanceData?.webhook?.url, + webhookHeaders: instanceData?.webhook?.headers, webhookByEvents: instanceData?.webhook?.byEvents, webhookBase64: instanceData?.webhook?.base64, }, diff --git a/src/api/integrations/event/event.dto.ts b/src/api/integrations/event/event.dto.ts index 41cf5b19..e9388482 100644 --- a/src/api/integrations/event/event.dto.ts +++ b/src/api/integrations/event/event.dto.ts @@ -1,10 +1,12 @@ import { Constructor } from '@api/integrations/integration.dto'; +import { JsonValue } from '@prisma/client/runtime/library'; export class EventDto { webhook?: { enabled?: boolean; events?: string[]; url?: string; + headers?: JsonValue; byEvents?: boolean; base64?: boolean; }; @@ -30,6 +32,7 @@ export function EventInstanceMixin(Base: TBase) { webhook?: { enabled?: boolean; events?: string[]; + headers?: JsonValue; url?: string; byEvents?: boolean; base64?: boolean; diff --git a/src/api/integrations/event/event.manager.ts b/src/api/integrations/event/event.manager.ts index 39a3d0d6..75daad69 100644 --- a/src/api/integrations/event/event.manager.ts +++ b/src/api/integrations/event/event.manager.ts @@ -126,6 +126,7 @@ export class EventManager { enabled: true, events: data.webhook?.events, url: data.webhook?.url, + headers: data.webhook?.headers, base64: data.webhook?.base64, byEvents: data.webhook?.byEvents, }, diff --git a/src/api/integrations/event/webhook/webhook.controller.ts b/src/api/integrations/event/webhook/webhook.controller.ts index b6939c9f..2fcf6c44 100644 --- a/src/api/integrations/event/webhook/webhook.controller.ts +++ b/src/api/integrations/event/webhook/webhook.controller.ts @@ -38,6 +38,7 @@ export class WebhookController extends EventController implements EventControlle enabled: data.webhook?.enabled, events: data.webhook?.events, url: data.webhook?.url, + headers: data.webhook?.headers, webhookBase64: data.webhook.base64, webhookByEvents: data.webhook.byEvents, }, @@ -46,6 +47,7 @@ export class WebhookController extends EventController implements EventControlle events: data.webhook?.events, instanceId: this.monitor.waInstances[instanceName].instanceId, url: data.webhook?.url, + headers: data.webhook?.headers, webhookBase64: data.webhook.base64, webhookByEvents: data.webhook.byEvents, }, @@ -71,6 +73,7 @@ export class WebhookController extends EventController implements EventControlle const webhookConfig = configService.get('WEBHOOK'); const webhookLocal = instance?.events; + const webhookHeaders = instance?.headers; const we = event.replace(/[.-]/gm, '_').toUpperCase(); const transformedWe = we.replace(/_/gm, '-').toLowerCase(); const enabledLog = configService.get('LOG').LEVEL.includes('WEBHOOKS'); @@ -108,7 +111,10 @@ export class WebhookController extends EventController implements EventControlle try { if (instance?.enabled && isURL(instance.url, { require_tld: false })) { - const httpService = axios.create({ baseURL }); + const httpService = axios.create({ + baseURL, + headers: webhookHeaders as Record | undefined, + }); await httpService.post('', webhookData); } diff --git a/src/api/integrations/event/webhook/webhook.router.ts b/src/api/integrations/event/webhook/webhook.router.ts index 49a54394..5193bec5 100644 --- a/src/api/integrations/event/webhook/webhook.router.ts +++ b/src/api/integrations/event/webhook/webhook.router.ts @@ -3,7 +3,7 @@ import { InstanceDto } from '@api/dto/instance.dto'; import { EventDto } from '@api/integrations/event/event.dto'; import { HttpStatus } from '@api/routes/index.router'; import { eventManager } from '@api/server.module'; -import { ConfigService, WaBusiness } from '@config/env.config'; +import { ConfigService } from '@config/env.config'; import { instanceSchema, webhookSchema } from '@validate/validate.schema'; import { RequestHandler, Router } from 'express'; diff --git a/src/api/integrations/event/webhook/webhook.schema.ts b/src/api/integrations/event/webhook/webhook.schema.ts index eaf762ce..5d0f3724 100644 --- a/src/api/integrations/event/webhook/webhook.schema.ts +++ b/src/api/integrations/event/webhook/webhook.schema.ts @@ -31,6 +31,7 @@ export const webhookSchema: JSONSchema7 = { properties: { enabled: { type: 'boolean' }, url: { type: 'string' }, + headers: { type: 'object' }, byEvents: { type: 'boolean' }, base64: { type: 'boolean' }, events: { diff --git a/src/api/types/wa.types.ts b/src/api/types/wa.types.ts index e5de48c2..8d150221 100644 --- a/src/api/types/wa.types.ts +++ b/src/api/types/wa.types.ts @@ -94,6 +94,7 @@ export declare namespace wa { export type LocalWebHook = LocalEvent & { url?: string; + headers?: JsonValue; webhookByEvents?: boolean; webhookBase64?: boolean; };