From 5400f31acb7ac3209da695322a5242c673928924 Mon Sep 17 00:00:00 2001 From: Diego Vieira Date: Tue, 19 Mar 2024 08:31:53 +0000 Subject: [PATCH] feat(endpoint): move setPresence endpoint to instance --- src/whatsapp/controllers/chat.controller.ts | 6 ------ .../controllers/instance.controller.ts | 7 ++++++- src/whatsapp/dto/chat.dto.ts | 4 ---- src/whatsapp/dto/instance.dto.ts | 6 ++++++ src/whatsapp/routers/chat.router.ts | 17 ---------------- src/whatsapp/routers/instance.router.ts | 20 +++++++++++++++++-- .../services/whatsapp.baileys.service.ts | 3 +-- 7 files changed, 31 insertions(+), 32 deletions(-) diff --git a/src/whatsapp/controllers/chat.controller.ts b/src/whatsapp/controllers/chat.controller.ts index 64a9cc82..1c16260d 100644 --- a/src/whatsapp/controllers/chat.controller.ts +++ b/src/whatsapp/controllers/chat.controller.ts @@ -11,7 +11,6 @@ import { ProfileStatusDto, ReadMessageDto, SendPresenceDto, - SetPresenceDto, UpdateMessageDto, WhatsAppNumberDto, } from '../dto/chat.dto'; @@ -86,11 +85,6 @@ export class ChatController { return await this.waMonitor.waInstances[instanceName].sendPresence(data); } - public async setPresence({ instanceName }: InstanceDto, data: SetPresenceDto) { - logger.verbose('requested sendPresence from ' + instanceName + ' instance'); - return await this.waMonitor.waInstances[instanceName].setPresence(data); - } - public async fetchPrivacySettings({ instanceName }: InstanceDto) { logger.verbose('requested fetchPrivacySettings from ' + instanceName + ' instance'); return await this.waMonitor.waInstances[instanceName].fetchPrivacySettings(); diff --git a/src/whatsapp/controllers/instance.controller.ts b/src/whatsapp/controllers/instance.controller.ts index e106aca7..91103e33 100644 --- a/src/whatsapp/controllers/instance.controller.ts +++ b/src/whatsapp/controllers/instance.controller.ts @@ -7,7 +7,7 @@ import { ConfigService, HttpServer, WaBusiness } from '../../config/env.config'; import { Logger } from '../../config/logger.config'; import { BadRequestException, InternalServerErrorException } from '../../exceptions'; import { RedisCache } from '../../libs/redis.client'; -import { InstanceDto } from '../dto/instance.dto'; +import { InstanceDto, SetPresenceDto } from '../dto/instance.dto'; import { RepositoryBroker } from '../repository/repository.manager'; import { AuthService, OldToken } from '../services/auth.service'; import { CacheService } from '../services/cache.service'; @@ -656,6 +656,11 @@ export class InstanceController { return this.waMonitor.instanceInfo(); } + public async setPresence({ instanceName }: InstanceDto, data: SetPresenceDto) { + this.logger.verbose('requested sendPresence from ' + instanceName + ' instance'); + return await this.waMonitor.waInstances[instanceName].setPresence(data); + } + public async logout({ instanceName }: InstanceDto) { this.logger.verbose('requested logout from ' + instanceName + ' instance'); const { instance } = await this.connectionState({ instanceName }); diff --git a/src/whatsapp/dto/chat.dto.ts b/src/whatsapp/dto/chat.dto.ts index c97e1ae5..24f04847 100644 --- a/src/whatsapp/dto/chat.dto.ts +++ b/src/whatsapp/dto/chat.dto.ts @@ -110,10 +110,6 @@ export class SendPresenceDto extends Metadata { }; } -export class SetPresenceDto { - presence: WAPresence; -} - export class UpdateMessageDto extends Metadata { number: string; key: proto.IMessageKey; diff --git a/src/whatsapp/dto/instance.dto.ts b/src/whatsapp/dto/instance.dto.ts index f03f4c8e..eaf21aab 100644 --- a/src/whatsapp/dto/instance.dto.ts +++ b/src/whatsapp/dto/instance.dto.ts @@ -1,3 +1,5 @@ +import { WAPresence } from "@whiskeysockets/baileys"; + export class InstanceDto { instanceName: string; instanceId?: string; @@ -40,3 +42,7 @@ export class InstanceDto { typebot_listening_from_me?: boolean; proxy?: string; } + +export class SetPresenceDto { + presence: WAPresence; +} diff --git a/src/whatsapp/routers/chat.router.ts b/src/whatsapp/routers/chat.router.ts index 8a1585a3..d8096c79 100644 --- a/src/whatsapp/routers/chat.router.ts +++ b/src/whatsapp/routers/chat.router.ts @@ -32,7 +32,6 @@ import { ProfileStatusDto, ReadMessageDto, SendPresenceDto, - SetPresenceDto, UpdateMessageDto, WhatsAppNumberDto, } from '../dto/chat.dto'; @@ -252,22 +251,6 @@ export class ChatRouter extends RouterBroker { return res.status(HttpStatus.CREATED).json(response); }) - .post(this.routerPath('setPresence'), ...guards, async (req, res) => { - logger.verbose('request received in setPresence'); - logger.verbose('request body: '); - logger.verbose(req.body); - - logger.verbose('request query: '); - logger.verbose(req.query); - const response = await this.dataValidate({ - request: req, - schema: presenceOnlySchema, - ClassRef: SetPresenceDto, - execute: (instance, data) => chatController.setPresence(instance, data), - }); - - return res.status(HttpStatus.CREATED).json(response); - }) // Profile routes .get(this.routerPath('fetchPrivacySettings'), ...guards, async (req, res) => { logger.verbose('request received in fetchPrivacySettings'); diff --git a/src/whatsapp/routers/instance.router.ts b/src/whatsapp/routers/instance.router.ts index 96a1a5da..6d4727e2 100644 --- a/src/whatsapp/routers/instance.router.ts +++ b/src/whatsapp/routers/instance.router.ts @@ -3,9 +3,9 @@ import { RequestHandler, Router } from 'express'; import { Auth, ConfigService, Database } from '../../config/env.config'; import { Logger } from '../../config/logger.config'; import { dbserver } from '../../libs/db.connect'; -import { instanceNameSchema, oldTokenSchema } from '../../validate/validate.schema'; +import {instanceNameSchema, oldTokenSchema, presenceOnlySchema} from '../../validate/validate.schema'; import { RouterBroker } from '../abstract/abstract.router'; -import { InstanceDto } from '../dto/instance.dto'; +import { InstanceDto, SetPresenceDto } from '../dto/instance.dto'; import { OldToken } from '../services/auth.service'; import { instanceController } from '../whatsapp.module'; import { HttpStatus } from './index.router'; @@ -98,6 +98,22 @@ export class InstanceRouter extends RouterBroker { return res.status(HttpStatus.OK).json(response); }) + .post(this.routerPath('setPresence'), ...guards, async (req, res) => { + logger.verbose('request received in setPresence'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); + const response = await this.dataValidate({ + request: req, + schema: presenceOnlySchema, + ClassRef: SetPresenceDto, + execute: (instance, data) => instanceController.setPresence(instance, data), + }); + + return res.status(HttpStatus.CREATED).json(response); + }) .delete(this.routerPath('logout'), ...guards, async (req, res) => { logger.verbose('request received in logoutInstances'); logger.verbose('request body: '); diff --git a/src/whatsapp/services/whatsapp.baileys.service.ts b/src/whatsapp/services/whatsapp.baileys.service.ts index f7a50013..e9e7147a 100644 --- a/src/whatsapp/services/whatsapp.baileys.service.ts +++ b/src/whatsapp/services/whatsapp.baileys.service.ts @@ -72,7 +72,6 @@ import { PrivacySettingDto, ReadMessageDto, SendPresenceDto, - SetPresenceDto, UpdateMessageDto, WhatsAppNumberDto, } from '../dto/chat.dto'; @@ -90,7 +89,7 @@ import { GroupUpdateParticipantDto, GroupUpdateSettingDto, } from '../dto/group.dto'; -import { InstanceDto } from '../dto/instance.dto'; +import { InstanceDto, SetPresenceDto } from '../dto/instance.dto'; import { HandleLabelDto, LabelDto } from '../dto/label.dto'; import { ContactMessage,