From fcd8815fca6a6950de1a3eb9c353cf688bb8a8e7 Mon Sep 17 00:00:00 2001 From: jaison-x Date: Fri, 29 Dec 2023 14:52:16 -0300 Subject: [PATCH 1/3] fix(chatwoot): when possible use the original file extension In some cases mimeTypes.extension() return false to csv and other file types --- src/whatsapp/services/chatwoot.service.ts | 27 ++++++++++++----------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/src/whatsapp/services/chatwoot.service.ts b/src/whatsapp/services/chatwoot.service.ts index d91b27ba..cb2faaf3 100644 --- a/src/whatsapp/services/chatwoot.service.ts +++ b/src/whatsapp/services/chatwoot.service.ts @@ -1561,20 +1561,21 @@ export class ChatwootService { }, }); - let prependFilename: string; - if ( - body?.message[body?.messageType]?.fileName || - body?.message[body?.messageType]?.message?.documentMessage?.fileName - ) { - prependFilename = path.parse( - body?.message[body?.messageType]?.fileName || - body?.message[body?.messageType]?.message?.documentMessage?.fileName, - ).name; - prependFilename += `-${Math.floor(Math.random() * (99 - 10 + 1) + 10)}`; - } else { - prependFilename = Math.random().toString(36).substring(7); + let nameFile: string; + const messageBody = body?.message[body?.messageType]; + const originalFilename = messageBody?.fileName || messageBody?.message?.documentMessage?.fileName; + if (originalFilename) { + const parsedFile = path.parse(originalFilename); + if (parsedFile.name && parsedFile.ext) { + nameFile = `${parsedFile.name}-${Math.floor(Math.random() * (99 - 10 + 1) + 10)}${parsedFile.ext}`; + } + } + + if (!nameFile) { + nameFile = `${Math.random().toString(36).substring(7)}.${ + mimeTypes.extension(downloadBase64.mimetype) || '' + }`; } - const nameFile = `${prependFilename}.${mimeTypes.extension(downloadBase64.mimetype)}`; const fileData = Buffer.from(downloadBase64.base64, 'base64'); From c564ec41e25d97991d6ef2d56eac0d752c842690 Mon Sep 17 00:00:00 2001 From: jaison-x Date: Fri, 29 Dec 2023 18:15:05 -0300 Subject: [PATCH 2/3] perf(chatwoot): Only use a axios request to get mimetype file if necessary --- src/whatsapp/services/chatwoot.service.ts | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/whatsapp/services/chatwoot.service.ts b/src/whatsapp/services/chatwoot.service.ts index cb2faaf3..1389d89a 100644 --- a/src/whatsapp/services/chatwoot.service.ts +++ b/src/whatsapp/services/chatwoot.service.ts @@ -916,17 +916,21 @@ export class ChatwootService { try { this.logger.verbose('get media type'); - const parts = media.split('/'); + const parsedMedia = path.parse(decodeURIComponent(media)); + let mimeType = mimeTypes.lookup(parsedMedia?.ext) || ''; + let fileName = parsedMedia?.name; - const fileName = decodeURIComponent(parts[parts.length - 1]); - this.logger.verbose('file name: ' + fileName); + if (!mimeType) { + const parts = media.split('/'); + fileName = decodeURIComponent(parts[parts.length - 1]); + this.logger.verbose('file name: ' + fileName); - const response = await axios.get(media, { - responseType: 'arraybuffer', - }); - - const mimeType = response.headers['content-type']; - this.logger.verbose('mime type: ' + mimeType); + const response = await axios.get(media, { + responseType: 'arraybuffer', + }); + mimeType = response.headers['content-type']; + this.logger.verbose('mime type: ' + mimeType); + } let type = 'document'; From d909550134d8686369315e61b161a1234d7f5fca Mon Sep 17 00:00:00 2001 From: jaison-x Date: Fri, 29 Dec 2023 18:42:07 -0300 Subject: [PATCH 3/3] fix(chatwoot): add file extension to var fileName --- src/whatsapp/services/chatwoot.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/whatsapp/services/chatwoot.service.ts b/src/whatsapp/services/chatwoot.service.ts index 1389d89a..851410be 100644 --- a/src/whatsapp/services/chatwoot.service.ts +++ b/src/whatsapp/services/chatwoot.service.ts @@ -918,7 +918,7 @@ export class ChatwootService { this.logger.verbose('get media type'); const parsedMedia = path.parse(decodeURIComponent(media)); let mimeType = mimeTypes.lookup(parsedMedia?.ext) || ''; - let fileName = parsedMedia?.name; + let fileName = parsedMedia?.name + parsedMedia?.ext; if (!mimeType) { const parts = media.split('/');