fix(retry): resolve message-not-found for device-specific JID retry receipts

fix(retry): resolve message-not-found for device-specific JID retry receipts
This commit is contained in:
Renato Alcara
2026-02-25 21:56:36 -03:00
committed by GitHub
parent 8a744801c4
commit f2c4e466ef
+18 -2
View File
@@ -156,12 +156,28 @@ export class MessageRetryManager {
}
/**
* Get a recent message from the cache
* Get a recent message from the cache.
*
* First attempts an exact `to+id` key lookup. If that misses — which happens when
* the retry receipt arrives from a device-specific JID (e.g. `55123:82@s.whatsapp.net`)
* while the message was stored under the normalised base JID (`55123@s.whatsapp.net`),
* or when the JID domain flipped between LID and PN — falls back to the `messageKeyIndex`
* which maps bare message IDs to stored keys regardless of the `to` format.
*/
getRecentMessage(to: string, id: string): RecentMessage | undefined {
const key: RecentMessageKey = { to, id }
const keyStr = this.keyToString(key)
return this.recentMessagesMap.get(keyStr)
const exact = this.recentMessagesMap.get(keyStr)
if (exact) return exact
// Fallback: look up by message ID only to handle JID format mismatches
// (device suffix present/absent, LID vs PN, etc.)
const indexedKeyStr = this.messageKeyIndex.get(id)
if (indexedKeyStr) {
return this.recentMessagesMap.get(indexedKeyStr)
}
return undefined
}
/**