@@ -80,6 +80,7 @@ const WRAPPER_FIELDS = [
8080 'viewOnceMessageV2Extension' ,
8181 'documentWithCaptionMessage' ,
8282 'editedMessage' ,
83+ 'lottieStickerMessage' ,
8384] as const
8485
8586const unwrap = ( content : Record < string , unknown > ) : Record < string , unknown > => {
@@ -99,6 +100,13 @@ const unwrap = (content: Record<string, unknown>): Record<string, unknown> => {
99100 return node
100101}
101102
103+ const unwrappedMessage = ( msg : WAMessage ) : WAMessage => {
104+ const content = asRecord ( msg . message )
105+ if ( content == null ) return msg
106+ const inner = unwrap ( content )
107+ return inner === content ? msg : ( { ...msg , message : inner } as WAMessage )
108+ }
109+
102110const richResponseText = ( content : Record < string , unknown > ) : string | null => {
103111 const forwarded = asRecord ( asRecord ( asRecord ( content [ 'botForwardedMessage' ] ) ?. [ 'message' ] ) ?. [ 'richResponseMessage' ] )
104112 const rich = forwarded ?? asRecord ( content [ 'richResponseMessage' ] )
@@ -480,12 +488,12 @@ const anyText = (msg: WAMessage): string | null => {
480488}
481489
482490const contextInfoOf = ( msg : WAMessage ) : WAContextInfo | null => {
483- const content = msg . message
491+ const content = asRecord ( unwrappedMessage ( msg ) . message )
484492 if ( content == null ) return null
485- const ext = content . extendedTextMessage ?. contextInfo
493+ const ext = asRecord ( content [ ' extendedTextMessage' ] ) ?. [ ' contextInfo' ] as WAContextInfo | undefined
486494 if ( ext != null ) return ext
487495 for ( const field of Object . values ( MEDIA_FIELD ) ) {
488- const node = ( content as Record < string , unknown > ) [ field ]
496+ const node = content [ field ]
489497 if ( node != null && typeof node === 'object' ) {
490498 const ci = ( node as { contextInfo ?: WAContextInfo | null } ) . contextInfo
491499 if ( ci != null ) return ci
@@ -729,10 +737,11 @@ const buildMediaAttachment = (
729737 kind : MediaKind ,
730738 ctx : DecodeContext ,
731739) : MediaAttachment | null => {
732- const node = mediaNodeOf ( msg , kind )
740+ const norm = unwrappedMessage ( msg )
741+ const node = mediaNodeOf ( norm , kind )
733742 if ( node === null ) return null
734- const bufferFn = createDownloadFn ( msg , kind , ctx . logger )
735- const streamFn = createStreamFn ( msg , kind , ctx . logger )
743+ const bufferFn = createDownloadFn ( norm , kind , ctx . logger )
744+ const streamFn = createStreamFn ( norm , kind , ctx . logger )
736745 return {
737746 type : kind ,
738747 mimetype : typeof node . mimetype === 'string' ? node . mimetype : null ,
0 commit comments