User Agent string in fetch requests
This commit is contained in:
@@ -12,6 +12,7 @@ import { generateProfilePicture } from '../WAClient/Utils'
|
||||
|
||||
|
||||
export default class WhatsAppWebBase extends WAConnection {
|
||||
|
||||
/** Set the callback for message status updates (when a message is delivered, read etc.) */
|
||||
setOnMessageStatusChange(callback: (update: MessageStatusUpdate) => void) {
|
||||
const func = (json) => {
|
||||
|
||||
@@ -271,7 +271,10 @@ export default class WhatsAppWebMessages extends WhatsAppWebGroups {
|
||||
const urlFetch = await fetch(hostname, {
|
||||
method: 'POST',
|
||||
body: body,
|
||||
headers: { Origin: 'https://web.whatsapp.com' },
|
||||
headers: {
|
||||
Origin: 'https://web.whatsapp.com',
|
||||
'User-Agent': this.userAgentString
|
||||
},
|
||||
})
|
||||
const responseJSON = await urlFetch.json()
|
||||
if (!responseJSON.url) {
|
||||
@@ -341,14 +344,15 @@ export default class WhatsAppWebMessages extends WhatsAppWebGroups {
|
||||
* Renews the download url automatically, if necessary.
|
||||
*/
|
||||
async downloadMediaMessage (message: WAMessage) {
|
||||
const fetchHeaders = { 'User-Agent': this.userAgentString }
|
||||
try {
|
||||
const buff = await decodeMediaMessageBuffer (message.message)
|
||||
const buff = await decodeMediaMessageBuffer (message.message, fetchHeaders)
|
||||
return buff
|
||||
} catch (error) {
|
||||
if (error instanceof BaileysError && error.status === 404) { // media needs to be updated
|
||||
this.log (`updating media of message: ${message.key.id}`, MessageLogLevel.info)
|
||||
await this.updateMediaMessage (message)
|
||||
const buff = await decodeMediaMessageBuffer (message.message)
|
||||
const buff = await decodeMediaMessageBuffer (message.message, fetchHeaders)
|
||||
return buff
|
||||
}
|
||||
throw error
|
||||
|
||||
@@ -5,7 +5,7 @@ import * as assert from 'assert'
|
||||
import fetch from 'node-fetch'
|
||||
|
||||
import { decodeMediaMessage, validateJIDForSending } from './Utils'
|
||||
import { promiseTimeout, createTimeout } from '../WAConnection/Utils'
|
||||
import { promiseTimeout, createTimeout, Browsers } from '../WAConnection/Utils'
|
||||
|
||||
require ('dotenv').config () // dotenv to load test jid
|
||||
const testJid = process.env.TEST_JID || '1234@s.whatsapp.net' // set TEST_JID=xyz@s.whatsapp.net in a .env file in the root directory
|
||||
|
||||
@@ -18,7 +18,6 @@ export function validateJIDForSending (jid: string) {
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Type of notification
|
||||
* @deprecated use WA_MESSAGE_STUB_TYPE instead
|
||||
@@ -102,7 +101,7 @@ export async function generateThumbnail(buffer: Buffer, mediaType: MessageType,
|
||||
* Decode a media message (video, image, document, audio) & return decrypted buffer
|
||||
* @param message the media message you want to decode
|
||||
*/
|
||||
export async function decodeMediaMessageBuffer(message: WAMessageContent) {
|
||||
export async function decodeMediaMessageBuffer(message: WAMessageContent, fetchHeaders: {[k: string]: string} = {}) {
|
||||
/*
|
||||
One can infer media type from the key in the message
|
||||
it is usually written as [mediaType]Message. Eg. imageMessage, audioMessage etc.
|
||||
@@ -127,7 +126,11 @@ export async function decodeMediaMessageBuffer(message: WAMessageContent) {
|
||||
}
|
||||
|
||||
// download the message
|
||||
const fetched = await fetch(messageContent.url, { headers: { Origin: 'https://web.whatsapp.com' } })
|
||||
const headers = {
|
||||
Origin: 'https://web.whatsapp.com',
|
||||
...fetchHeaders
|
||||
}
|
||||
const fetched = await fetch(messageContent.url, { headers })
|
||||
const buffer = await fetched.buffer()
|
||||
|
||||
if (buffer.length <= 10) {
|
||||
@@ -184,7 +187,7 @@ export function extensionForMediaMessage(message: WAMessageContent) {
|
||||
* @deprecated use `client.downloadAndSaveMediaMessage`
|
||||
*/
|
||||
export async function decodeMediaMessage(message: WAMessageContent, filename: string, attachExtension: boolean=true) {
|
||||
const buffer = await decodeMediaMessageBuffer (message)
|
||||
const buffer = await decodeMediaMessageBuffer (message, {})
|
||||
const extension = extensionForMediaMessage (message)
|
||||
const trueFileName = attachExtension ? (filename + '.' + extension) : filename
|
||||
fs.writeFileSync(trueFileName, buffer)
|
||||
|
||||
Reference in New Issue
Block a user