Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions src/api/controllers/chat.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import {
DecryptPollVoteDto,
DeleteMessage,
getBase64FromMediaMessageDto,
LimitSharingDto,
MarkChatUnreadDto,
MarkMessageAsPlayedDto,
NumberDto,
Expand Down Expand Up @@ -44,6 +45,10 @@ export class ChatController {
return await this.waMonitor.waInstances[instanceName].markChatUnread(data);
}

public async updateLimitSharing({ instanceName }: InstanceDto, data: LimitSharingDto) {
return await this.waMonitor.waInstances[instanceName].updateLimitSharing(data);
}

public async deleteMessage({ instanceName }: InstanceDto, data: DeleteMessage) {
return await this.waMonitor.waInstances[instanceName].deleteMessage(data);
}
Expand Down
9 changes: 9 additions & 0 deletions src/api/dto/chat.dto.ts
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,15 @@ export class MarkChatUnreadDto {
chat?: string;
}

/** Request to update WhatsApp Advanced Chat Privacy for a chat or group. */
export class LimitSharingDto {
/** Required, non-empty chat identifier; normalized to a WhatsApp JID before sending. */
chat: string;

/** Required boolean: true enables limit sharing; false disables it. */
limitSharing: boolean;
}
Comment thread
sourcery-ai[bot] marked this conversation as resolved.
Resolved

export class PrivacySettingDto {
readreceipts: WAReadReceiptsValue;
profile: WAPrivacyValue;
Expand Down
20 changes: 20 additions & 0 deletions src/api/integrations/channel/whatsapp/whatsapp.baileys.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import {
DeleteMessage,
getBase64FromMediaMessageDto,
LastMessage,
LimitSharingDto,
MarkChatUnreadDto,
MarkMessageAsPlayedDto,
NumberBusiness,
Expand Down Expand Up @@ -4263,6 +4264,25 @@ export class BaileysStartupService extends ChannelStartupService {
}
}

public async updateLimitSharing(data: LimitSharingDto) {
try {
const remoteJid = createJid(data.chat);
const response = await this.client.sendMessage(remoteJid, { limitSharing: data.limitSharing });

return {
chatId: remoteJid,
limitSharing: data.limitSharing,
message: response,
};
} catch (error) {
this.logger.error(error);
throw new InternalServerErrorException({
limitSharing: false,
message: ['Ocorreu um erro ao atualizar a privacidade avanΓ§ada da conversa.'],
});
}
}

public async deleteMessage(del: DeleteMessage) {
try {
const response = await this.client.sendMessage(del.remoteJid, { delete: del });
Expand Down
23 changes: 23 additions & 0 deletions src/api/routes/chat.router.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import {
DecryptPollVoteDto,
DeleteMessage,
getBase64FromMediaMessageDto,
LimitSharingDto,
MarkChatUnreadDto,
MarkMessageAsPlayedDto,
NumberDto,
Expand All @@ -28,6 +29,7 @@ import {
decryptPollVoteSchema,
deleteMessageSchema,
fetchLidSchema,
limitSharingSchema,
markChatUnreadSchema,
markMessageAsPlayedSchema,
messageUpSchema,
Expand Down Expand Up @@ -105,6 +107,27 @@ export class ChatRouter extends RouterBroker {

return res.status(HttpStatus.CREATED).json(response);
})
/**
* @route POST /chat/updateLimitSharing/:instanceName
* @description Enable or disable WhatsApp Advanced Chat Privacy for a chat or group.
* @param {string} instanceName - Name of the WhatsApp instance.
* @body {LimitSharingDto} data - Non-empty chat identifier and required boolean limitSharing toggle.
* @returns {201} Chat ID, requested limitSharing state, and the Baileys message response.
* @throws {400} Invalid request body.
* @throws {401} Unauthorized request.
* @throws {404} Instance not found.
* @throws {500} Failed to update advanced chat privacy.
*/
.post(this.routerPath('updateLimitSharing'), ...guards, async (req, res) => {
const response = await this.dataValidate<LimitSharingDto>({
request: req,
schema: limitSharingSchema,
ClassRef: LimitSharingDto,
execute: (instance, data) => chatController.updateLimitSharing(instance, data),
});

return res.status(HttpStatus.CREATED).json(response);
})
Comment thread
sourcery-ai[bot] marked this conversation as resolved.
Resolved
.delete(this.routerPath('deleteMessageForEveryone'), ...guards, async (req, res) => {
const response = await this.dataValidate<DeleteMessage>({
request: req,
Expand Down
11 changes: 11 additions & 0 deletions src/validate/chat.schema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,17 @@ export const markChatUnreadSchema: JSONSchema7 = {
required: ['lastMessage'],
};

export const limitSharingSchema: JSONSchema7 = {
$id: v4(),
type: 'object',
properties: {
chat: { type: 'string' },
limitSharing: { type: 'boolean', enum: [true, false] },
},
required: ['chat', 'limitSharing'],
...isNotEmpty('chat'),
};

export const deleteMessageSchema: JSONSchema7 = {
$id: v4(),
type: 'object',
Expand Down