diff --git a/src/Socket/messages-send.ts b/src/Socket/messages-send.ts index 37c51d7..12288df 100644 --- a/src/Socket/messages-send.ts +++ b/src/Socket/messages-send.ts @@ -424,7 +424,7 @@ export const makeMessagesSocket = (config: SocketConfig) => { // send a query JSON to obtain the url & auth token to upload our media let uploadInfo = await refreshMediaConn(false) - let mediaUrl: string + let urls: { mediaUrl: string, directPath: string } const hosts = [ ...config.customUploadHosts, ...uploadInfo.hosts.map(h => h.hostname) ] for (let hostname of hosts) { const auth = encodeURIComponent(uploadInfo.auth) // the auth token @@ -446,10 +446,14 @@ export const makeMessagesSocket = (config: SocketConfig) => { } ) const result = JSON.parse(responseText) - mediaUrl = result?.url - if (mediaUrl) break - else { + if(result?.url || result?.directPath) { + urls = { + mediaUrl: result.url, + directPath: result.direct_path + } + break + } else { uploadInfo = await refreshMediaConn(true) throw new Error(`upload failed, reason: ${JSON.stringify(result)}`) } @@ -458,13 +462,13 @@ export const makeMessagesSocket = (config: SocketConfig) => { logger.debug(`Error in uploading to ${hostname} (${error}) ${isLast ? '' : ', retrying...'}`) } } - if (!mediaUrl) { + if (!urls) { throw new Boom( 'Media upload failed on all hosts', { statusCode: 500 } ) } - return { mediaUrl } + return urls } return { diff --git a/src/Types/Message.ts b/src/Types/Message.ts index b7b6380..8ae9454 100644 --- a/src/Types/Message.ts +++ b/src/Types/Message.ts @@ -140,7 +140,7 @@ export type MessageGenerationOptionsFromContent = MiscMessageGenerationOptions & userJid: string } -export type WAMediaUploadFunction = (readStream: ReadStream, opts: { fileEncSha256B64: string, mediaType: MediaType, timeoutMs?: number }) => Promise<{ mediaUrl: string }> +export type WAMediaUploadFunction = (readStream: ReadStream, opts: { fileEncSha256B64: string, mediaType: MediaType, timeoutMs?: number }) => Promise<{ mediaUrl: string, directPath: string }> export type MediaGenerationOptions = { logger?: Logger diff --git a/src/Utils/messages.ts b/src/Utils/messages.ts index 389bd10..1b352df 100644 --- a/src/Utils/messages.ts +++ b/src/Utils/messages.ts @@ -118,7 +118,7 @@ export const prepareWAMessageMedia = async( } catch (error) { options.logger?.info({ trace: error.stack }, 'failed to obtain extra info') } - const {mediaUrl} = await options.upload( + const {mediaUrl, directPath} = await options.upload( createReadStream(encBodyPath), { fileEncSha256B64, mediaType, timeoutMs: options.mediaUploadTimeoutMs } ) @@ -136,11 +136,12 @@ export const prepareWAMessageMedia = async( [`${mediaType}Message`]: MessageTypeProto[mediaType].fromObject( { url: mediaUrl, + directPath, mediaKey, fileEncSha256, fileSha256, fileLength, - + mediaKeyTimestamp: unixTimestampSeconds(), ...uploadData } )