diff --git a/.vscode/settings.json b/.vscode/settings.json index 20b82443..71db0b08 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -5,8 +5,8 @@ "editor.smoothScrolling": true, "editor.tabSize": 2, "editor.codeActionsOnSave": { - "source.fixAll.eslint": true, - "source.fixAll": true + "source.fixAll.eslint": "explicit", + "source.fixAll": "explicit" }, "prisma-smart-formatter.typescript.defaultFormatter": "esbenp.prettier-vscode", "prisma-smart-formatter.prisma.defaultFormatter": "Prisma.prisma" diff --git a/src/whatsapp/controllers/chat.controller.ts b/src/whatsapp/controllers/chat.controller.ts index 0299841c..60a9c618 100644 --- a/src/whatsapp/controllers/chat.controller.ts +++ b/src/whatsapp/controllers/chat.controller.ts @@ -9,6 +9,7 @@ import { ProfilePictureDto, ProfileStatusDto, ReadMessageDto, + SendPresenceDto, WhatsAppNumberDto, } from '../dto/chat.dto'; import { InstanceDto } from '../dto/instance.dto'; @@ -77,6 +78,11 @@ export class ChatController { return await this.waMonitor.waInstances[instanceName].fetchChats(); } + public async sendPresence({ instanceName }: InstanceDto, data: SendPresenceDto) { + logger.verbose('requested sendPresence from ' + instanceName + ' instance'); + return await this.waMonitor.waInstances[instanceName].sendPresence(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/sendMessage.controller.ts b/src/whatsapp/controllers/sendMessage.controller.ts index a6b844dc..20e38ae5 100644 --- a/src/whatsapp/controllers/sendMessage.controller.ts +++ b/src/whatsapp/controllers/sendMessage.controller.ts @@ -11,7 +11,6 @@ import { SendLocationDto, SendMediaDto, SendPollDto, - SendPresenceDto, SendReactionDto, SendStatusDto, SendStickerDto, @@ -24,11 +23,6 @@ const logger = new Logger('MessageRouter'); export class SendMessageController { constructor(private readonly waMonitor: WAMonitoringService) {} - public async sendPresence({ instanceName }: InstanceDto, data: SendPresenceDto) { - logger.verbose('requested sendPresence from ' + instanceName + ' instance'); - return await this.waMonitor.waInstances[instanceName].sendPresence(data); - } - public async sendText({ instanceName }: InstanceDto, data: SendTextDto) { logger.verbose('requested sendText from ' + instanceName + ' instance'); return await this.waMonitor.waInstances[instanceName].textMessage(data); diff --git a/src/whatsapp/dto/chat.dto.ts b/src/whatsapp/dto/chat.dto.ts index f8a5da5f..07553c90 100644 --- a/src/whatsapp/dto/chat.dto.ts +++ b/src/whatsapp/dto/chat.dto.ts @@ -1,4 +1,4 @@ -import { proto, WAPrivacyOnlineValue, WAPrivacyValue, WAReadReceiptsValue } from '@whiskeysockets/baileys'; +import { proto, WAPresence, WAPrivacyOnlineValue, WAPrivacyValue, WAReadReceiptsValue } from '@whiskeysockets/baileys'; export class OnWhatsAppDto { constructor(public readonly jid: string, public readonly exists: boolean, public readonly name?: string) {} @@ -83,3 +83,20 @@ export class DeleteMessage { remoteJid: string; participant?: string; } +export class Options { + delay?: number; + presence?: WAPresence; +} +class OptionsMessage { + options: Options; +} +export class Metadata extends OptionsMessage { + number: string; +} + +export class SendPresenceDto extends Metadata { + options: { + presence: WAPresence; + delay: number; + }; +} diff --git a/src/whatsapp/dto/sendMessage.dto.ts b/src/whatsapp/dto/sendMessage.dto.ts index 8cc4dd1e..bfa5763f 100644 --- a/src/whatsapp/dto/sendMessage.dto.ts +++ b/src/whatsapp/dto/sendMessage.dto.ts @@ -46,12 +46,7 @@ class PollMessage { values: string[]; messageSecret?: Uint8Array; } -export class SendPresenceDto extends Metadata { - options: { - presence: WAPresence; - delay: number; - }; -} + export class SendTextDto extends Metadata { textMessage: TextMessage; } diff --git a/src/whatsapp/routers/chat.router.ts b/src/whatsapp/routers/chat.router.ts index 285c29a0..29d1cdc3 100644 --- a/src/whatsapp/routers/chat.router.ts +++ b/src/whatsapp/routers/chat.router.ts @@ -7,6 +7,7 @@ import { deleteMessageSchema, messageUpSchema, messageValidateSchema, + presenceSchema, privacySettingsSchema, profileNameSchema, profilePictureSchema, @@ -26,6 +27,7 @@ import { ProfilePictureDto, ProfileStatusDto, ReadMessageDto, + SendPresenceDto, WhatsAppNumberDto, } from '../dto/chat.dto'; import { InstanceDto } from '../dto/instance.dto'; @@ -228,6 +230,22 @@ export class ChatRouter extends RouterBroker { return res.status(HttpStatus.OK).json(response); }) + .post(this.routerPath('sendPresence'), ...guards, async (req, res) => { + logger.verbose('request received in sendPresence'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); + const response = await this.dataValidate({ + request: req, + schema: presenceSchema, + ClassRef: SendPresenceDto, + execute: (instance, data) => chatController.sendPresence(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/sendMessage.router.ts b/src/whatsapp/routers/sendMessage.router.ts index 79fedbe2..d87db44d 100644 --- a/src/whatsapp/routers/sendMessage.router.ts +++ b/src/whatsapp/routers/sendMessage.router.ts @@ -9,7 +9,6 @@ import { locationMessageSchema, mediaMessageSchema, pollMessageSchema, - presenceSchema, reactionMessageSchema, statusMessageSchema, stickerMessageSchema, @@ -24,7 +23,6 @@ import { SendLocationDto, SendMediaDto, SendPollDto, - SendPresenceDto, SendReactionDto, SendStatusDto, SendStickerDto, @@ -39,22 +37,6 @@ export class MessageRouter extends RouterBroker { constructor(...guards: RequestHandler[]) { super(); this.router - .post(this.routerPath('sendPresence'), ...guards, async (req, res) => { - logger.verbose('request received in sendPresence'); - logger.verbose('request body: '); - logger.verbose(req.body); - - logger.verbose('request query: '); - logger.verbose(req.query); - const response = await this.dataValidate({ - request: req, - schema: presenceSchema, - ClassRef: SendPresenceDto, - execute: (instance, data) => sendMessageController.sendPresence(instance, data), - }); - - return res.status(HttpStatus.CREATED).json(response); - }) .post(this.routerPath('sendText'), ...guards, async (req, res) => { logger.verbose('request received in sendText'); logger.verbose('request body: '); diff --git a/src/whatsapp/services/whatsapp.service.ts b/src/whatsapp/services/whatsapp.service.ts index 83df4b74..a7b5152f 100644 --- a/src/whatsapp/services/whatsapp.service.ts +++ b/src/whatsapp/services/whatsapp.service.ts @@ -83,6 +83,7 @@ import { OnWhatsAppDto, PrivacySettingDto, ReadMessageDto, + SendPresenceDto, WhatsAppNumberDto, } from '../dto/chat.dto'; import { @@ -109,7 +110,6 @@ import { SendLocationDto, SendMediaDto, SendPollDto, - SendPresenceDto, SendReactionDto, SendStatusDto, SendStickerDto,