@@ -58,9 +58,9 @@ const shouldReconnect = (sessionId) => {
58
58
return false
59
59
}
60
60
61
- const callWebhook = ( instance , eventType , eventData ) => {
61
+ const callWebhook = async ( instance , eventType , eventData ) => {
62
62
if ( APP_WEBHOOK_ALLOWED_EVENTS . includes ( 'ALL' ) || APP_WEBHOOK_ALLOWED_EVENTS . includes ( eventType ) ) {
63
- webhook ( instance , eventType , eventData )
63
+ await webhook ( instance , eventType , eventData )
64
64
}
65
65
}
66
66
@@ -170,14 +170,55 @@ const createSession = async (sessionId, res = null, options = { usePairingCode:
170
170
return m . key . fromMe === false
171
171
} )
172
172
if ( messages . length > 0 ) {
173
- // Change status
174
- for ( const message of messages ) {
175
- if ( message ?. status ) {
176
- m . status = WAMessageStatus [ m ?. status ] ?? 'UNKNOWN'
177
- }
173
+ const messageTmp = await Promise . all (
174
+ messages . map ( async ( msg ) => {
175
+ try {
176
+ const typeMessage = Object . keys ( msg . message ) [ 0 ]
177
+ if ( msg ?. status ) {
178
+ msg . status = WAMessageStatus [ msg ?. status ] ?? 'UNKNOWN'
179
+ }
180
+
181
+ if (
182
+ [ 'documentMessage' , 'imageMessage' , 'videoMessage' , 'audioMessage' ] . includes ( typeMessage ) &&
183
+ process . env . APP_WEBHOOK_FILE_IN_BASE64 === 'true'
184
+ ) {
185
+ const mediaMessage = await getMessageMedia ( wa , msg )
186
+
187
+ const fieldsToConvert = [
188
+ 'fileEncSha256' ,
189
+ 'mediaKey' ,
190
+ 'fileSha256' ,
191
+ 'jpegThumbnail' ,
192
+ 'thumbnailSha256' ,
193
+ 'thumbnailEncSha256' ,
194
+ 'streamingSidecar' ,
195
+ ]
196
+
197
+ fieldsToConvert . forEach ( ( field ) => {
198
+ if ( msg . message [ typeMessage ] ?. [ field ] !== undefined ) {
199
+ msg . message [ typeMessage ] [ field ] = convertToBase64 ( msg . message [ typeMessage ] [ field ] )
200
+ }
201
+ } )
202
+
203
+ return {
204
+ ...msg ,
205
+ message : {
206
+ [ typeMessage ] : {
207
+ ...msg . message [ typeMessage ] ,
208
+ fileBase64 : mediaMessage . base64 ,
209
+ } ,
210
+ } ,
211
+ }
212
+ }
213
+
214
+ return msg
215
+ } catch {
216
+ return { }
217
+ }
218
+ } ) ,
219
+ )
178
220
179
- callWebhook ( sessionId , 'MESSAGES_UPSERT' , message )
180
- }
221
+ callWebhook ( sessionId , 'MESSAGES_UPSERT' , messageTmp )
181
222
}
182
223
} )
183
224
@@ -550,6 +591,11 @@ const getMessageMedia = async (session, message) => {
550
591
}
551
592
}
552
593
594
+ const convertToBase64 = ( arrayBytes ) => {
595
+ const byteArray = new Uint8Array ( arrayBytes )
596
+ return Buffer . from ( byteArray ) . toString ( 'base64' )
597
+ }
598
+
553
599
const init = ( ) => {
554
600
readdir ( sessionsDir ( ) , ( err , files ) => {
555
601
if ( err ) {
0 commit comments