diff --git a/src/controllers/sessionController.js b/src/controllers/sessionController.js index 7f395c2..ff0c40a 100644 --- a/src/controllers/sessionController.js +++ b/src/controllers/sessionController.js @@ -1,6 +1,6 @@ const qr = require('qr-image') const { setupSession, deleteSession, reloadSession, validateSession, flushSessions, destroySession, sessions } = require('../sessions') -const { sendErrorResponse, waitForNestedObject } = require('../utils') +const { sendErrorResponse, waitForNestedObject, exposeFunctionIfAbsent } = require('../utils') const { logger } = require('../logger') /** @@ -369,6 +369,11 @@ const requestPairingCode = async (req, res) => { if (!client) { return res.json({ success: false, message: 'session_not_found' }) } + // hotfix https://github.com/pedroslopez/whatsapp-web.js/pull/3706 + await exposeFunctionIfAbsent(client.pupPage, 'onCodeReceivedEvent', async (code) => { + client.emit('code', code) + return code + }) const result = await client.requestPairingCode(phoneNumber, showNotification) res.json({ success: true, result }) } catch (error) { diff --git a/src/utils.js b/src/utils.js index 38b2b05..dae931b 100644 --- a/src/utils.js +++ b/src/utils.js @@ -63,6 +63,16 @@ const sleep = function (ms) { return new Promise(resolve => setTimeout(resolve, ms)) } +const exposeFunctionIfAbsent = async (page, name, fn) => { + const exist = await page.evaluate((name) => { + return !!window[name] + }, name) + if (exist) { + return + } + await page.exposeFunction(name, fn) +} + module.exports = { triggerWebhook, sendErrorResponse, @@ -70,5 +80,6 @@ module.exports = { isEventEnabled, sendMessageSeenStatus, decodeBase64, - sleep + sleep, + exposeFunctionIfAbsent }