diff --git a/CHANGELOG.md b/CHANGELOG.md index 0a9429a5..9033f10f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # 1.6.2 (develop) +### Feature + +* Added update message endpoint + ### Fixed * Proxy configuration improvements diff --git a/src/validate/validate.schema.ts b/src/validate/validate.schema.ts index 1ccdf125..efc6f685 100644 --- a/src/validate/validate.schema.ts +++ b/src/validate/validate.schema.ts @@ -592,6 +592,26 @@ export const profileStatusSchema: JSONSchema7 = { ...isNotEmpty('status'), }; +export const updateMessageSchema: JSONSchema7 = { + $id: v4(), + type: 'object', + properties: { + number: { type: 'string' }, + text: { type: 'string' }, + key: { + type: 'object', + properties: { + id: { type: 'string' }, + remoteJid: { type: 'string' }, + fromMe: { type: 'boolean', enum: [true, false] }, + }, + required: ['id', 'fromMe', 'remoteJid'], + ...isNotEmpty('id', 'remoteJid'), + }, + }, + ...isNotEmpty('number', 'text', 'key'), +}; + export const profilePictureSchema: JSONSchema7 = { $id: v4(), type: 'object', diff --git a/src/whatsapp/controllers/chat.controller.ts b/src/whatsapp/controllers/chat.controller.ts index 60a9c618..f9d77fce 100644 --- a/src/whatsapp/controllers/chat.controller.ts +++ b/src/whatsapp/controllers/chat.controller.ts @@ -10,6 +10,7 @@ import { ProfileStatusDto, ReadMessageDto, SendPresenceDto, + UpdateMessageDto, WhatsAppNumberDto, } from '../dto/chat.dto'; import { InstanceDto } from '../dto/instance.dto'; @@ -117,4 +118,9 @@ export class ChatController { logger.verbose('requested removeProfilePicture from ' + instanceName + ' instance'); return await this.waMonitor.waInstances[instanceName].removeProfilePicture(); } + + public async updateMessage({ instanceName }: InstanceDto, data: UpdateMessageDto) { + logger.verbose('requested updateMessage from ' + instanceName + ' instance'); + return await this.waMonitor.waInstances[instanceName].updateMessage(data); + } } diff --git a/src/whatsapp/dto/chat.dto.ts b/src/whatsapp/dto/chat.dto.ts index 07553c90..efa74db8 100644 --- a/src/whatsapp/dto/chat.dto.ts +++ b/src/whatsapp/dto/chat.dto.ts @@ -100,3 +100,9 @@ export class SendPresenceDto extends Metadata { delay: number; }; } + +export class UpdateMessageDto extends Metadata { + number: string; + key: proto.IMessageKey; + text: string; +} diff --git a/src/whatsapp/routers/chat.router.ts b/src/whatsapp/routers/chat.router.ts index 29d1cdc3..77285d1b 100644 --- a/src/whatsapp/routers/chat.router.ts +++ b/src/whatsapp/routers/chat.router.ts @@ -14,6 +14,7 @@ import { profileSchema, profileStatusSchema, readMessageSchema, + updateMessageSchema, whatsappNumberSchema, } from '../../validate/validate.schema'; import { RouterBroker } from '../abstract/abstract.router'; @@ -28,6 +29,7 @@ import { ProfileStatusDto, ReadMessageDto, SendPresenceDto, + UpdateMessageDto, WhatsAppNumberDto, } from '../dto/chat.dto'; import { InstanceDto } from '../dto/instance.dto'; @@ -364,6 +366,23 @@ export class ChatRouter extends RouterBroker { execute: (instance) => chatController.removeProfilePicture(instance), }); + return res.status(HttpStatus.OK).json(response); + }) + .put(this.routerPath('updateMessage'), ...guards, async (req, res) => { + logger.verbose('request received in updateMessage'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); + + const response = await this.dataValidate({ + request: req, + schema: updateMessageSchema, + ClassRef: UpdateMessageDto, + execute: (instance, data) => chatController.updateMessage(instance, data), + }); + return res.status(HttpStatus.OK).json(response); }); } diff --git a/src/whatsapp/services/whatsapp.service.ts b/src/whatsapp/services/whatsapp.service.ts index 63dde743..227167f7 100644 --- a/src/whatsapp/services/whatsapp.service.ts +++ b/src/whatsapp/services/whatsapp.service.ts @@ -85,6 +85,7 @@ import { PrivacySettingDto, ReadMessageDto, SendPresenceDto, + UpdateMessageDto, WhatsAppNumberDto, } from '../dto/chat.dto'; import { @@ -3529,6 +3530,21 @@ export class WAStartupService { } } + public async updateMessage(data: UpdateMessageDto) { + try { + const jid = this.createJid(data.number); + + this.logger.verbose('Updating message'); + return await this.client.sendMessage(jid, { + text: data.text, + edit: data.key, + }); + } catch (error) { + this.logger.error(error); + throw new BadRequestException(error.toString()); + } + } + // Group public async createGroup(create: CreateGroupDto) { this.logger.verbose('Creating group: ' + create.subject);