From 9d7aec11dab7e7b3b753c71d62f232975d9c5b76 Mon Sep 17 00:00:00 2001 From: Adhiraj Singh Date: Sun, 19 Dec 2021 14:35:51 +0530 Subject: [PATCH] feat: add more logging to media --- src/LegacySocket/messages.ts | 4 ++-- src/Socket/messages-send.ts | 2 +- src/Utils/messages-media.ts | 7 ++++++- src/Utils/messages.ts | 36 +++++++++++++++++++++++++----------- 4 files changed, 34 insertions(+), 15 deletions(-) diff --git a/src/LegacySocket/messages.ts b/src/LegacySocket/messages.ts index 852bdd2..30851a9 100644 --- a/src/LegacySocket/messages.ts +++ b/src/LegacySocket/messages.ts @@ -517,12 +517,12 @@ const makeMessagesSocket = (config: LegacySocketConfig) => { jid, content, { - ...options, logger, userJid: userJid, getUrlInfo: generateUrlInfo, upload: waUploadToServer, - mediaCache: config.mediaCache + mediaCache: config.mediaCache, + ...options, } ) diff --git a/src/Socket/messages-send.ts b/src/Socket/messages-send.ts index dcc8a2f..503a300 100644 --- a/src/Socket/messages-send.ts +++ b/src/Socket/messages-send.ts @@ -451,13 +451,13 @@ export const makeMessagesSocket = (config: SocketConfig) => { jid, content, { - ...options, logger, userJid, // multi-device does not have this yet //getUrlInfo: generateUrlInfo, upload: waUploadToServer, mediaCache: config.mediaCache, + ...options, } ) const isDeleteMsg = 'delete' in content && !!content.delete diff --git a/src/Utils/messages-media.ts b/src/Utils/messages-media.ts index 83dc872..1f30a6a 100644 --- a/src/Utils/messages-media.ts +++ b/src/Utils/messages-media.ts @@ -222,10 +222,13 @@ export const getGotStream = async(url: string | URL, options: Options & { isStre export const encryptedStream = async( media: WAMediaUpload, mediaType: MediaType, - saveOriginalFileIfRequired = true + saveOriginalFileIfRequired = true, + logger?: Logger ) => { const { stream, type } = await getStream(media) + logger?.debug('fetched media stream') + const mediaKey = Crypto.randomBytes(32) const {cipherKey, iv, macKey} = getMediaKeys(mediaKey, mediaType) // random name @@ -277,6 +280,8 @@ export const encryptedStream = async( encWriteStream.push(null) writeStream && writeStream.end() + + logger?.debug('encrypted data successfully') return { mediaKey, diff --git a/src/Utils/messages.ts b/src/Utils/messages.ts index 47ab76a..456edb5 100644 --- a/src/Utils/messages.ts +++ b/src/Utils/messages.ts @@ -1,5 +1,5 @@ import { Boom } from '@hapi/boom' -import { createReadStream, promises as fs } from "fs" +import { promises as fs } from "fs" import { proto } from '../../WAProto' import { MEDIA_KEYS, URL_REGEX, WA_DEFAULT_EPHEMERAL } from "../Defaults" import { @@ -56,6 +56,8 @@ export const prepareWAMessageMedia = async( message: AnyMediaMessageContent, options: MediaGenerationOptions ) => { + const logger = options.logger + let mediaType: typeof MEDIA_KEYS[number] for(const key of MEDIA_KEYS) { if(key in message) { @@ -79,9 +81,11 @@ export const prepareWAMessageMedia = async( if(cacheableKey) { const mediaBuff: Buffer = options.mediaCache!.get(cacheableKey) if(mediaBuff) { + logger?.debug({ cacheableKey }, `got media cache hit`) return WAProto.Message.decode(mediaBuff) } } + if(mediaType === 'document' && !uploadData.fileName) { uploadData.fileName = 'file' } @@ -110,22 +114,26 @@ export const prepareWAMessageMedia = async( ) const [{ mediaUrl, directPath }] = await Promise.all([ - (() => { - return options.upload( + (async() => { + const result = await options.upload( encWriteStream, { fileEncSha256B64, mediaType, timeoutMs: options.mediaUploadTimeoutMs } ) + logger?.debug(`uploaded media`) + return result })(), (async() => { try { if(requiresThumbnailComputation) { uploadData.jpegThumbnail = await generateThumbnail(bodyPath, mediaType as any, options) + logger?.debug(`generated thumbnail`) } if (requiresDurationComputation) { uploadData.seconds = await getAudioDuration(bodyPath) + logger?.debug(`computed audio duration`) } } catch (error) { - options.logger?.info({ trace: error.stack }, 'failed to obtain extra info') + logger?.warn({ trace: error.stack }, 'failed to obtain extra info') } })(), ]) @@ -133,7 +141,10 @@ export const prepareWAMessageMedia = async( async() => { encWriteStream.destroy() // remove tmp files - didSaveToTmpPath && bodyPath && await fs.unlink(bodyPath) + if(didSaveToTmpPath && bodyPath) { + await fs.unlink(bodyPath) + logger?.debug('removed tmp files') + } } ) @@ -155,6 +166,7 @@ export const prepareWAMessageMedia = async( }) if(cacheableKey) { + logger.debug({ cacheableKey }, `set cache`) options.mediaCache!.set(cacheableKey, WAProto.Message.encode(obj).finish()) } @@ -278,14 +290,14 @@ export const generateWAMessageContent = async( } m = { buttonsMessage } - } else if ('templateButtons' in message && !!message.templateButtons) { + } else if('templateButtons' in message && !!message.templateButtons) { const templateMessage: proto.ITemplateMessage = { hydratedTemplate: { hydratedButtons: message.templateButtons } } - if ('text' in message) { + if('text' in message) { templateMessage.hydratedTemplate.hydratedContentText = message.text } else { @@ -296,7 +308,7 @@ export const generateWAMessageContent = async( Object.assign(templateMessage.hydratedTemplate, m) } - if ('footer' in message && !!message.footer) { + if('footer' in message && !!message.footer) { templateMessage.hydratedTemplate.hydratedFooterText = message.footer } @@ -377,8 +389,10 @@ export const generateWAMessage = async( jid: string, content: AnyMessageContent, options: MessageGenerationOptions, -) => ( - generateWAMessageFromContent( +) => { + // ensure msg ID is with every log + options.logger = options?.logger?.child({ msgId: options.messageId }) + return generateWAMessageFromContent( jid, await generateWAMessageContent( content, @@ -386,7 +400,7 @@ export const generateWAMessage = async( ), options ) -) +} /** * Extract the true message content from a message