diff --git a/README.md b/README.md index a869e7f..ceb1dba 100644 --- a/README.md +++ b/README.md @@ -124,6 +124,8 @@ type SocketConfig = { fetchAgent?: Agent /** should the QR be printed in the terminal */ printQRInTerminal: boolean + /** fires a conversationTimestamp & read count update on CIPHERTEXT messages */ + treatCiphertextMessagesAsReal: boolean /** * fetch a message from your store * implement this so that messages failed to send (solves the "this message can take a while" issue) can be retried diff --git a/src/Defaults/index.ts b/src/Defaults/index.ts index 1c55f67..49cf1ae 100644 --- a/src/Defaults/index.ts +++ b/src/Defaults/index.ts @@ -30,6 +30,7 @@ const BASE_CONNECTION_CONFIG: CommonSocketConfig = { emitOwnEvents: true, defaultQueryTimeoutMs: 60_000, customUploadHosts: [], + treatCiphertextMessagesAsReal: true } export const DEFAULT_CONNECTION_CONFIG: SocketConfig = { diff --git a/src/LegacySocket/messages.ts b/src/LegacySocket/messages.ts index a35acc1..0d4fa08 100644 --- a/src/LegacySocket/messages.ts +++ b/src/LegacySocket/messages.ts @@ -13,7 +13,7 @@ const STATUS_MAP = { } as { [_: string]: WAMessageStatus } const makeMessagesSocket = (config: LegacySocketConfig) => { - const { logger } = config + const { logger, treatCiphertextMessagesAsReal } = config const sock = makeChatsSocket(config) const { ev, @@ -120,7 +120,13 @@ const makeMessagesSocket = (config: LegacySocketConfig) => { ev.emit('groups.update', [ { id: jid, ...update } ]) } - if(message.message) { + if( + ( + !!message.message || + (message.messageStubType === WAMessageStubType.CIPHERTEXT && treatCiphertextMessagesAsReal) + ) + && !message.message!.protocolMessage + ) { chatUpdate.conversationTimestamp = +toNumber(message.messageTimestamp) // add to count if the message isn't from me & there exists a message if(!message.key.fromMe) { diff --git a/src/Socket/messages-recv.ts b/src/Socket/messages-recv.ts index 5a7155b..58090fd 100644 --- a/src/Socket/messages-recv.ts +++ b/src/Socket/messages-recv.ts @@ -9,7 +9,7 @@ import { makeChatsSocket } from './chats' import { extractGroupMetadata } from './groups' export const makeMessagesRecvSocket = (config: SocketConfig) => { - const { logger } = config + const { logger, treatCiphertextMessagesAsReal } = config const sock = makeChatsSocket(config) const { ev, @@ -548,7 +548,13 @@ export const makeMessagesRecvSocket = (config: SocketConfig) => { () => processMessage(msg, chat) ) - if(!!msg.message && !msg.message!.protocolMessage) { + if( + ( + !!msg.message || + (msg.messageStubType === WAMessageStubType.CIPHERTEXT && treatCiphertextMessagesAsReal) + ) + && !msg.message!.protocolMessage + ) { chat.conversationTimestamp = toNumber(msg.messageTimestamp) if(!msg.key.fromMe) { chat.unreadCount = (chat.unreadCount || 0) + 1 diff --git a/src/Types/Socket.ts b/src/Types/Socket.ts index 66468d2..32f697a 100644 --- a/src/Types/Socket.ts +++ b/src/Types/Socket.ts @@ -35,6 +35,8 @@ export type CommonSocketConfig = { emitOwnEvents: boolean /** provide a cache to store media, so does not have to be re-uploaded */ mediaCache?: NodeCache - + /** custom upload hosts to upload media to */ customUploadHosts: MediaConnInfo['hosts'] + /** fires a conversationTimestamp & read count update on CIPHERTEXT messages */ + treatCiphertextMessagesAsReal: boolean }