diff --git a/src/Tests/test.messages.ts b/src/Tests/test.messages.ts new file mode 100644 index 0000000..7f51f39 --- /dev/null +++ b/src/Tests/test.messages.ts @@ -0,0 +1,37 @@ +import { WAMessageContent } from '../Types' +import { normalizeMessageContent } from '../Utils' + +describe('Messages Tests', () => { + + it('should correctly unwrap messages', () => { + const CONTENT = { imageMessage: { } } + expectRightContent(CONTENT) + expectRightContent({ + ephemeralMessage: { message: CONTENT } + }) + expectRightContent({ + viewOnceMessage: { + message: { + ephemeralMessage: { message: CONTENT } + } + } + }) + expectRightContent({ + viewOnceMessage: { + message: { + viewOnceMessageV2: { + message: { + ephemeralMessage: { message: CONTENT } + } + } + } + } + }) + + function expectRightContent(content: WAMessageContent) { + expect( + normalizeMessageContent(content) + ).toHaveProperty('imageMessage') + } + }) +}) \ No newline at end of file diff --git a/src/Utils/messages.ts b/src/Utils/messages.ts index 2b32ce1..d540b67 100644 --- a/src/Utils/messages.ts +++ b/src/Utils/messages.ts @@ -573,19 +573,27 @@ export const normalizeMessageContent = (content: WAMessageContent | null | undef return undefined } - for(;;) { - const inner = content?.ephemeralMessage?.message || - content?.viewOnceMessage?.message || - content?.viewOnceMessageV2?.message || - content?.documentWithCaptionMessage?.message - if(inner) { - content = inner - } else { + // set max iterations to prevent an infinite loop + for(let i = 0;i < 5;i++) { + const inner = getFutureProofMessage(content) + if(!inner) { break } + + content = inner.message } return content! + + function getFutureProofMessage(message: typeof content) { + return ( + message?.ephemeralMessage + || message?.viewOnceMessage + || message?.documentWithCaptionMessage + || message?.viewOnceMessageV2 + || message?.editedMessage + ) + } } /**