diff --git a/src/Socket/messages-send.ts b/src/Socket/messages-send.ts index a5104aa..8f14ecd 100644 --- a/src/Socket/messages-send.ts +++ b/src/Socket/messages-send.ts @@ -639,6 +639,7 @@ export const makeMessagesSocket = (config: SocketConfig) => { ), upload: waUploadToServer, mediaCache: config.mediaCache, + options: config.options, ...options, } ) diff --git a/src/Types/Message.ts b/src/Types/Message.ts index 3000e51..df73695 100644 --- a/src/Types/Message.ts +++ b/src/Types/Message.ts @@ -1,3 +1,4 @@ +import { AxiosRequestConfig } from 'axios' import type NodeCache from 'node-cache' import type { Logger } from 'pino' import type { Readable } from 'stream' @@ -204,6 +205,8 @@ export type MediaGenerationOptions = { mediaCache?: NodeCache mediaUploadTimeoutMs?: number + + options?: AxiosRequestConfig } export type MessageContentGenerationOptions = MediaGenerationOptions & { getUrlInfo?: (text: string) => Promise diff --git a/src/Utils/link-preview.ts b/src/Utils/link-preview.ts index 3cf2580..d92d13d 100644 --- a/src/Utils/link-preview.ts +++ b/src/Utils/link-preview.ts @@ -66,7 +66,11 @@ export const getUrlInfo = async( if(opts.uploadImage) { const { imageMessage } = await prepareWAMessageMedia( { image: { url: image } }, - { upload: opts.uploadImage, mediaTypeOverride: 'thumbnail-link' } + { + upload: opts.uploadImage, + mediaTypeOverride: 'thumbnail-link', + options: opts.fetchOpts + } ) urlInfo.jpegThumbnail = imageMessage?.jpegThumbnail ? Buffer.from(imageMessage.jpegThumbnail) diff --git a/src/Utils/messages-media.ts b/src/Utils/messages-media.ts index 339a2d1..246daf2 100644 --- a/src/Utils/messages-media.ts +++ b/src/Utils/messages-media.ts @@ -221,7 +221,7 @@ export const toBuffer = async(stream: Readable) => { return Buffer.concat(chunks) } -export const getStream = async(item: WAMediaUpload) => { +export const getStream = async(item: WAMediaUpload, opts?: AxiosRequestConfig) => { if(Buffer.isBuffer(item)) { return { stream: toReadable(item), type: 'buffer' } as const } @@ -231,7 +231,7 @@ export const getStream = async(item: WAMediaUpload) => { } if(item.url.toString().startsWith('http://') || item.url.toString().startsWith('https://')) { - return { stream: await getHttpStream(item.url), type: 'remote' } as const + return { stream: await getHttpStream(item.url, opts), type: 'remote' } as const } return { stream: createReadStream(item.url), type: 'file' } as const @@ -281,13 +281,18 @@ export const getHttpStream = async(url: string | URL, options: AxiosRequestConfi return fetched.data as Readable } +type EncryptedStreamOptions = { + saveOriginalFileIfRequired?: boolean + logger?: Logger + opts?: AxiosRequestConfig +} + export const encryptedStream = async( media: WAMediaUpload, mediaType: MediaType, - saveOriginalFileIfRequired = true, - logger?: Logger + { logger, saveOriginalFileIfRequired, opts }: EncryptedStreamOptions = {} ) => { - const { stream, type } = await getStream(media) + const { stream, type } = await getStream(media, opts) logger?.debug('fetched media stream') diff --git a/src/Utils/messages.ts b/src/Utils/messages.ts index d540b67..fc402aa 100644 --- a/src/Utils/messages.ts +++ b/src/Utils/messages.ts @@ -149,7 +149,11 @@ export const prepareWAMessageMedia = async( } = await encryptedStream( uploadData.media, options.mediaTypeOverride || mediaType, - requiresOriginalForSomeProcessing + { + logger, + saveOriginalFileIfRequired: requiresOriginalForSomeProcessing, + opts: options.options + } ) // url safe Base64 encode the SHA256 hash of the body const fileEncSha256B64 = fileEncSha256.toString('base64')