Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Farewell, Webpack! Re-injection, Pairing Code login, and 2.24x jumbofix #2816

Open
wants to merge 27 commits into
base: main
Choose a base branch
from

Conversation

PurpShell
Copy link
Sponsor Collaborator

@PurpShell PurpShell commented Mar 14, 2024

Support my work on GitHub Sponsors

TL;DR:

WhatsApp released 2.3000x, a version that does not use Webpack anymore. We had to change the Store system to no longer use moduleRaid. Instability issues are caused by relying on selectors & DOM Observers for login, as well as increased performance issues. This prompted me to adopt the "New startup flow" that I mentioned here. This update is important. This update will boost reliability in WWebJS at least 400%. I also added pairing code login for those who needed it since I had the docs on hand (I reverse engineer then take notes, so I know what I know when I make them into PRs). It changes a lot in the authentication and launching. I advise you all to test your systems before deploying to production (even though this build should be prod-safe).

You should immediately update to my version and cease using any other fork or version. Your system will work regardless if you are using a web cache, local cache, no cache.. LocalAuth, RemoteAuth, NoAuth... 2.24 and 2.3000.

TO INSTALL:

npm install github:pedroslopez/whatsapp-web.js#webpack-exodus

If you encounter a git not found error in the NPM/yarn install: Download git, https://git-scm.com

Thank you for your trust and time and thank you to my sponsors for their contribution.

PR Details

This PR adds support for Wwebjs past version 2.3000.x and 2.24..x. Send "F" in the chat for Webpack!

As always, very big thanks to my sponsors for their support! I am only able to do this thanks to them!

Also thanks to @allburov for his work on #2827, helped me a bit to know which modules are problematic.

This PR also adds re-injection in the case of navigation or refresh or intentional logout and pairing code login option.

It also changes a lot of the code in the startup flow.

To note:

  1. AUTHENTICATED and READY will now depend on the Socket, so if the WWebJS restarts or loses Internet, it will trigger these events. Do not trust that the event will only be triggered once.
  2. await client.initialize() returns it promise much earlier at the point of a new QR code (no login). The behavior is almost the same when logged in (it resolves the promise at AROUND ready).
  3. The Loading screen text will be hard-coded to "WhatsApp" for now. A new update will deprecate this screen text and replace it with loading types (ORGANIZING, INTIAL_LOAD, DOWNLOADING,...)
  4. A new AuthStore is exposed at the time of initial load (before READY) including moduleRaid (2.24) and some modules needed for authentication.

This update will bring a lot of performance, time savings and increased reliability due to this refactor. We are not relying on constantly changing and dynamic HTML to get QR codes, to detect logins and this will make it much better. I also went out of my way and reversed all of the Pairing Code infra to get the only needed functions (3) and made them into this way so that we stop getting failed attempts like #2363

Description

Related Issue

closes #2789, closes #1787

Motivation and Context

After WhatsApp's update to 2.3000.x, moduleRaid no longer detected webpack (since they changed build systems)
After WhatsApp's update to 2.24xx.x, the manifest json no longer included the version, requiring a revamp for the cache system!

How Has This Been Tested

I tested this on many machines and concluded it is non-obtrusive. This will not break old versions and works with new ones

Types of changes

  • Dependency change
  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)

Checklist

  • My code follows the code style of this project.
  • I have updated the documentation accordingly (index.d.ts).

@ricardoapaes
Copy link
Contributor

Good morning, but it's not running here because it doesn't find this require "__debug", how do I solve it?

image

@complanboy2
Copy link

Also, the "eval" function from inject.js file isn't running due to content security policy !!

@Shinhwe
Copy link

Shinhwe commented Mar 15, 2024

Good morning, but it's not running here because it doesn't find this require "__debug", how do I solve it?

image

try this
Object.values(window.require('__debug').modulesMap

@PurpShell PurpShell marked this pull request as draft March 16, 2024 15:25
@PurpShell
Copy link
Sponsor Collaborator Author

Good morning, but it's not running here because it doesn't find this require "__debug", how do I solve it?

image

Check the latest moduleRaid version

@PurpShell
Copy link
Sponsor Collaborator Author

Good morning, but it's not running here because it doesn't find this require "__debug", how do I solve it?
image

try this Object.values(window.require('__debug').modulesMap

pretty sure I did that, I will see if I didn't

@voidpack
Copy link

voidpack commented Mar 17, 2024

using nodejs v13 after apply new moduleraid on whatsapp web version Version 2.3000.1012111500 still got error

(node:10784) UnhandledPromiseRejectionWarning: Error: Evaluation failed: TypeError: Cannot read properties of undefined (reading 'default')

@MoudiZd
Copy link

MoudiZd commented Mar 17, 2024

using nodejs v13 after apply new moduleraid on whatsapp web version Version 2.3000.1012111500 still got error

(node:10784) UnhandledPromiseRejectionWarning: Error: Evaluation failed: TypeError: Cannot read properties of undefined (reading 'default')

I believe that the issue is not in the pr itself but in the way moduleRaid is used and the way is finding modules, used within injected.js, because in many cases it assumes that the findModule method returns non empty array, maybe with old webpack this way it was feasible but now with comet this code needs some optimization

I am not sure if the manipulation of these statements actually differs between node versions or between different modes, this need a lot of tests

@complanboy2
Copy link

ModuleError: Requiring module "%s" with unresolved dependencies: %s

Getting this error

@MoudiZd
Copy link

MoudiZd commented Mar 17, 2024

ModuleError: Requiring module "%s" with unresolved dependencies: %s

Getting this error

Please if you can print the full error so we can see in which file and in which line this error is occured

@complanboy2
Copy link

complanboy2 commented Mar 17, 2024

ModuleError: Requiring module "%s" with unresolved dependencies: %s
Getting this error

Please if you can print the full error so we can see in which file and in which line this error is occured

Thank you. I'm using module raid and the code from inject.js

@voidpack
Copy link

using nodejs v13 after apply new moduleraid on whatsapp web version Version 2.3000.1012111500 still got error
(node:10784) UnhandledPromiseRejectionWarning: Error: Evaluation failed: TypeError: Cannot read properties of undefined (reading 'default')

I believe that the issue is not in the pr itself but in the way moduleRaid is used and the way is finding modules, used within injected.js, because in many cases it assumes that the findModule method returns non empty array, maybe with old webpack this way it was feasible but now with comet this code needs some optimization

I am not sure if the manipulation of these statements actually differs between node versions or between different modes, this need a lot of tests

maybe because i'm using backtick for this on module raid ? because without backtick it give error unexpected token '.' on nodejs v13

const isComet = parseInt(window.Debug?.VERSION?.split(".")?.[1]) >= 3000;

@mouhammad-zd
Copy link

mouhammad-zd commented Mar 17, 2024

using nodejs v13 after apply new moduleraid on whatsapp web version Version 2.3000.1012111500 still got error
(node:10784) UnhandledPromiseRejectionWarning: Error: Evaluation failed: TypeError: Cannot read properties of undefined (reading 'default')

I believe that the issue is not in the pr itself but in the way moduleRaid is used and the way is finding modules, used within injected.js, because in many cases it assumes that the findModule method returns non empty array, maybe with old webpack this way it was feasible but now with comet this code needs some optimization
I am not sure if the manipulation of these statements actually differs between node versions or between different modes, this need a lot of tests

maybe because i'm using backtick for this on module raid ? because without backtick it give error unexpected token '.' on nodejs v13

const isComet = parseInt(window.Debug?.VERSION?.split(".")?.[1]) >= 3000;

Try to update your node version, as it seems that optional chaining is not supported in node older than node 14

@voidpack
Copy link

using nodejs v13 after apply new moduleraid on whatsapp web version Version 2.3000.1012111500 still got error
(node:10784) UnhandledPromiseRejectionWarning: Error: Evaluation failed: TypeError: Cannot read properties of undefined (reading 'default')

I believe that the issue is not in the pr itself but in the way moduleRaid is used and the way is finding modules, used within injected.js, because in many cases it assumes that the findModule method returns non empty array, maybe with old webpack this way it was feasible but now with comet this code needs some optimization
I am not sure if the manipulation of these statements actually differs between node versions or between different modes, this need a lot of tests

maybe because i'm using backtick for this on module raid ? because without backtick it give error unexpected token '.' on nodejs v13
const isComet = parseInt(window.Debug?.VERSION?.split(".")?.[1]) >= 3000;

Try to update your node version, as it seems that optional chaining is not supported in node older than node 14

can't do it. because the client still using windows 7. latest support can only using node v13

@MoudiZd
Copy link

MoudiZd commented Mar 17, 2024

You must optimize code to use old javascript

using nodejs v13 after apply new moduleraid on whatsapp web version Version 2.3000.1012111500 still got error
(node:10784) UnhandledPromiseRejectionWarning: Error: Evaluation failed: TypeError: Cannot read properties of undefined (reading 'default')

I believe that the issue is not in the pr itself but in the way moduleRaid is used and the way is finding modules, used within injected.js, because in many cases it assumes that the findModule method returns non empty array, maybe with old webpack this way it was feasible but now with comet this code needs some optimization
I am not sure if the manipulation of these statements actually differs between node versions or between different modes, this need a lot of tests

maybe because i'm using backtick for this on module raid ? because without backtick it give error unexpected token '.' on nodejs v13
const isComet = parseInt(window.Debug?.VERSION?.split(".")?.[1]) >= 3000;

Try to update your node version, as it seems that optional chaining is not supported in node older than node 14

can't do it. because the client still using windows 7. latest support can only using node v13

So you must optimize this statement to use old javascript

Try this:

var isComet = false;

if (window.Debug && window.Debug.VERSION) {
  var versionParts = window.Debug.VERSION.split(".");
  if (versionParts.length > 1) {
    var versionNumber = parseInt(versionParts[1]);
    isComet = versionNumber >= 3000;
  }
}

@maunklana
Copy link

maunklana commented Mar 18, 2024

I got this error

C:\Users\Maunklana\Documents\ww\node_modules\puppeteer\lib\cjs\puppeteer\common\ExecutionContext.js:221
            throw new Error('Evaluation failed: ' + helper_js_1.helper.getExceptionMessage(exceptionDetails));
                  ^

Error: Evaluation failed: TypeError: Cannot read properties of undefined (reading 'default')
    at __puppeteer_evaluation_script__:5:95
    at ExecutionContext._evaluateInternal (C:\Users\Maunklana\Documents\ww\node_modules\puppeteer\lib\cjs\puppeteer\common\ExecutionContext.js:221:19)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async ExecutionContext.evaluate (C:\Users\Maunklana\Documents\ww\node_modules\puppeteer\lib\cjs\puppeteer\common\ExecutionContext.js:110:16)
    at async Client.initialize (C:\Users\Maunklana\Documents\ww\node_modules\whatsapp-web.js\src\Client.js:339:9)

Node.js v20.9.0

the error was caused by a change in the function

image

so I change the injected.js remove all .default

window.Store = Object.assign({}, window.mR.findModule(m => m && m.Chat)[1]);
window.Store.Call = window.mR.findModule((module) => module && module.Call)[0].Call;

Tested Sending & Receive Message is ok.

Update
Got this Error on Sending message on some text or something.

Error: Evaluation failed: Error: Data passed to getter must include an id property (it's how we memoize) but got undefined
	at new Error (<anonymous>:5:31)
	at h (https://static.whatsapp.net/rsrc.php/v3/yO/r/rP20sdRimEJ.js?_nc_x=Ij3Wp8lg5Kz:70:191)
	at t (https://static.whatsapp.net/rsrc.php/v3iex14/yT/l/makehaste_jhash/JjfhzrFnzpi.js?_nc_x=Ij3Wp8lg5Kz:391:4493)
	at Object.d [as getLinkPreview] (https://static.whatsapp.net/rsrc.php/v3iex14/yT/l/makehaste_jhash/JjfhzrFnzpi.js?_nc_x=Ij3Wp8lg5Kz:391:2447)
	at window.WWebJS.sendMessage (__puppeteer_evaluation_script__:135:62)
	at async __puppeteer_evaluation_script__:10:25
	at ExecutionContext._evaluateInternal (C:\Users\Maunklana\Documents\ww\node_modules\whatsapp-web.js\node_modules\puppeteer\lib\cjs\puppeteer\common\ExecutionContext.js:221:19)
	at process.processTicksAndRejections (node:internal\process\task_queues:95:5)
	at async ExecutionContext.evaluate (C:\Users\Maunklana\Documents\ww\node_modules\whatsapp-web.js\node_modules\puppeteer\lib\cjs\puppeteer\common\ExecutionContext.js:110:16)
	at async Client.sendMessage (C:\Users\Maunklana\Documents\ww\node_modules\whatsapp-web.js\src\Client.js:930:28)

@voidpack
Copy link

I got this error

C:\Users\Maunklana\Documents\ww\node_modules\puppeteer\lib\cjs\puppeteer\common\ExecutionContext.js:221
            throw new Error('Evaluation failed: ' + helper_js_1.helper.getExceptionMessage(exceptionDetails));
                  ^

Error: Evaluation failed: TypeError: Cannot read properties of undefined (reading 'default')
    at __puppeteer_evaluation_script__:5:95
    at ExecutionContext._evaluateInternal (C:\Users\Maunklana\Documents\ww\node_modules\puppeteer\lib\cjs\puppeteer\common\ExecutionContext.js:221:19)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async ExecutionContext.evaluate (C:\Users\Maunklana\Documents\ww\node_modules\puppeteer\lib\cjs\puppeteer\common\ExecutionContext.js:110:16)
    at async Client.initialize (C:\Users\Maunklana\Documents\ww\node_modules\whatsapp-web.js\src\Client.js:339:9)

Node.js v20.9.0

the error was caused by a change in the function

image

so I change the injected.js remove all .default

window.Store = Object.assign({}, window.mR.findModule(m => m && m.Chat)[1]); window.Store.Call = window.mR.findModule((module) => module && module.Call)[0].Call;

Tested Sending & Receive Message is ok.

i try remove that 2 line .default still error reading 'default'
and then i try remove all the .default on injected and got error reading 'on'

using node v13 and whatsapp web Version 2.3000.1012116664 (did your web version like mine ? i found that after 2.3000.xxxxx the number xxxxx keep increasing, maybe whatsapp keep updating or what ?)

@maunklana
Copy link

try following this change #2822

I got this error

C:\Users\Maunklana\Documents\ww\node_modules\puppeteer\lib\cjs\puppeteer\common\ExecutionContext.js:221
            throw new Error('Evaluation failed: ' + helper_js_1.helper.getExceptionMessage(exceptionDetails));
                  ^

Error: Evaluation failed: TypeError: Cannot read properties of undefined (reading 'default')
    at __puppeteer_evaluation_script__:5:95
    at ExecutionContext._evaluateInternal (C:\Users\Maunklana\Documents\ww\node_modules\puppeteer\lib\cjs\puppeteer\common\ExecutionContext.js:221:19)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async ExecutionContext.evaluate (C:\Users\Maunklana\Documents\ww\node_modules\puppeteer\lib\cjs\puppeteer\common\ExecutionContext.js:110:16)
    at async Client.initialize (C:\Users\Maunklana\Documents\ww\node_modules\whatsapp-web.js\src\Client.js:339:9)

Node.js v20.9.0

the error was caused by a change in the function
image
so I change the injected.js remove all .default
window.Store = Object.assign({}, window.mR.findModule(m => m && m.Chat)[1]); window.Store.Call = window.mR.findModule((module) => module && module.Call)[0].Call;
Tested Sending & Receive Message is ok.

i try remove that 2 line .default still error reading 'default' and then i try remove all the .default on injected and got error reading 'on'

using node v13 and whatsapp web Version 2.3000.1012116664 (did your web version like mine ? i found that after 2.3000.xxxxx the number xxxxx keep increasing, maybe whatsapp keep updating or what ?)

@voidpack
Copy link

try following this change #2822

I got this error

C:\Users\Maunklana\Documents\ww\node_modules\puppeteer\lib\cjs\puppeteer\common\ExecutionContext.js:221
            throw new Error('Evaluation failed: ' + helper_js_1.helper.getExceptionMessage(exceptionDetails));
                  ^

Error: Evaluation failed: TypeError: Cannot read properties of undefined (reading 'default')
    at __puppeteer_evaluation_script__:5:95
    at ExecutionContext._evaluateInternal (C:\Users\Maunklana\Documents\ww\node_modules\puppeteer\lib\cjs\puppeteer\common\ExecutionContext.js:221:19)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async ExecutionContext.evaluate (C:\Users\Maunklana\Documents\ww\node_modules\puppeteer\lib\cjs\puppeteer\common\ExecutionContext.js:110:16)
    at async Client.initialize (C:\Users\Maunklana\Documents\ww\node_modules\whatsapp-web.js\src\Client.js:339:9)

Node.js v20.9.0

the error was caused by a change in the function
image
so I change the injected.js remove all .default
window.Store = Object.assign({}, window.mR.findModule(m => m && m.Chat)[1]); window.Store.Call = window.mR.findModule((module) => module && module.Call)[0].Call;
Tested Sending & Receive Message is ok.

i try remove that 2 line .default still error reading 'default' and then i try remove all the .default on injected and got error reading 'on'
using node v13 and whatsapp web Version 2.3000.1012116664 (did your web version like mine ? i found that after 2.3000.xxxxx the number xxxxx keep increasing, maybe whatsapp keep updating or what ?)

thx finally fix it. I miss the array [0] change to [1]. thx you very much

@maunklana maunklana mentioned this pull request Mar 19, 2024
6 tasks
@neb6la neb6la mentioned this pull request Mar 21, 2024
1 task
@Abhii-Agarwal09

This comment was marked as off-topic.

@MoudiZd MoudiZd mentioned this pull request Mar 31, 2024
1 task
@PurpShell PurpShell changed the title Farewell, Webpack! Farewell, Webpack! Also, patch for 2.24**!! Apr 2, 2024
@PurpShell PurpShell changed the title Farewell, Webpack! Also, patch for 2.24**!! Farewell, Webpack! Also, patch for 2.24xx.x!! Apr 3, 2024
@PurpShell PurpShell marked this pull request as ready for review April 3, 2024 00:53
@4n0n1mo

This comment was marked as off-topic.

@galizhan
Copy link

galizhan commented May 3, 2024

I have this error

 /home/ubuntu/cashback-wpp-bot/node_modules/puppeteer-core/lib/cjs/puppeteer/common/ExecutionContext.js:284
        throw new Error('Execution context was destroyed, most likely because of a navigation.');
              ^

Error: Execution context was destroyed, most likely because of a navigation.
    at rewriteError (/home/ubuntu/cashback-wpp-bot/node_modules/puppeteer-core/lib/cjs/puppeteer/common/ExecutionContext.js:284:15)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async ExecutionContext._ExecutionContext_evaluate (/home/ubuntu/cashback-wpp-bot/node_modules/puppeteer-core/lib/cjs/puppeteer/common/ExecutionContext.js:227:56)
    at async ExecutionContext.evaluate (/home/ubuntu/cashback-wpp-bot/node_modules/puppeteer-core/lib/cjs/puppeteer/common/ExecutionContext.js:107:16)
    at async Client.inject (/home/ubuntu/cashback-wpp-bot/node_modules/whatsapp-web.js/src/Client.js:106:36)
    at async Client.initialize (/home/ubuntu/cashback-wpp-bot/node_modules/whatsapp-web.js/src/Client.js:337:9)

Node.js v18.13.0

@Halphas
Copy link

Halphas commented May 7, 2024

Hello @PurpShell,

I've been exploring the new solution you recommended and wanted to share some feedback based on my experience. While I appreciate the notable improvements in speed, there are a few issues that suggest it might not be ready for a full transition just yet:

  1. Even though the user interface shows that I'm logged in when running in non-headless mode, the session doesn't seem to be preserved. This results in errors during any interactions, which is quite limiting.

  2. The reauthentication process triggers correctly upon initial connection or disconnection, the events are correctly emitted, allowing full interaction afterward. This part works well, but it's not as useful if the session can't be maintained, as mentioned earlier.

  3. I've also noticed that the 'on message' event isn't being emitted, regardless of the attempts made to trigger it.

I've invested a significant amount of time trying to integrate this new solution, but for now, I've had to revert to the older method using the old webVersionCache. It's unclear how long this will remain viable.

I'm hopeful for future updates to this new solution, given its impressive speed. Looking forward to switching over once it achieves a more stable release.

Thank you for your efforts in developing this, and I'm eager to see the upcoming improvements.

@wemersonrv
Copy link

wemersonrv commented May 11, 2024

Tested here and everything is working fine.

There is only one issue here: When locking HTML version using webVersionCache... it fails to send audio/video... but it works fine when disable the cache.

And when it fails, don't throws any error... await client.sendMessage(...) just don't return nothing. The method do not finish and return!

I think that by solving this part of webVersionCache, it's mature enough to merge to the main.

Many users are reporting some errors. I haven't encountered any of these issues here. Running with Node.js v18.16.0.

@AKwoKWH
Copy link

AKwoKWH commented May 11, 2024

I print out the status of the client status.

client.on('loading_screen', async (percent, message) => {
    console.log('LOADING SCREEN', percent, message);
});

client.on('authenticated', () => {
    console.log('AUTHENTICATED');
});

client.on('ready', async () => {
    console.log('CLIENT IS READY');
});

Then you will find the client is ready before the screen was fully loaded.
Causing the send message failed silently when I try to send message right after the client is reported as ready

LOADING SCREEN 0 WhatsApp
LOADING SCREEN 0 WhatsApp
LOADING SCREEN 0 WhatsApp
LOADING SCREEN 0 WhatsApp
LOADING SCREEN 0 WhatsApp
AUTHENTICATED
LOADING SCREEN 0 WhatsApp
CLIENT IS READY
LOADING SCREEN 58 WhatsApp
LOADING SCREEN 58 WhatsApp
LOADING SCREEN 99 WhatsApp

@wemersonrv
Copy link

wemersonrv commented May 11, 2024

Tested here and everything is working fine.

There is only one issue here: When locking HTML version using webVersionCache... it fails to send audio/video... but it works fine when disable the cache.

And when it fails, don't throws any error... await client.sendMessage(...) just don't return nothing. The method do not finish and return!

I think that by solving this part of webVersionCache, it's mature enough to merge to the main.

Many users are reporting some errors. I haven't encountered any of these issues here. Running with Node.js v18.16.0.

Locked the webversion to the latest version detected: 2.3000.1013440151-alpha and now it throws an error:

Error: Evaluation failed: a
    at ExecutionContext._ExecutionContext_evaluate (/Users/wemersonrv/desenvolvimento/projetos/winmidia/whatsapp-gateway/api/node_modules/puppeteer-core/lib/cjs/puppeteer/common/ExecutionContext.js:229:15)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async ExecutionContext.evaluate (/Users/wemersonrv/desenvolvimento/projetos/winmidia/whatsapp-gateway/api/node_modules/puppeteer-core/lib/cjs/puppeteer/common/ExecutionContext.js:107:16)
    at async Client.sendMessage (/Users/wemersonrv/desenvolvimento/projetos/winmidia/whatsapp-gateway/api/node_modules/whatsapp-web.js/src/Client.js:910:28)
const msg = await client.sendMessage(to, media, { caption: 'teste-video' })

If disable the webcache, works fine!

Edit 1: Send Video will throw the error... audio not! And both are sent normally without cache!

Edit 2: Found that the issue when send audio/video with webCache activated is on the line 333 of Injected/Utils.js:

333 const mediaData = await mediaPrep.waitForPrep();

https://github.com/pedroslopez/whatsapp-web.js/blob/650cd0dfe5607303c56d36af0e175ca3da2b6c9c/src/util/Injected/Utils.js#L333C9-L333C57

@wemersonrv
Copy link

wemersonrv commented May 11, 2024

I print out the status of the client status.

client.on('loading_screen', async (percent, message) => {
    console.log('LOADING SCREEN', percent, message);
});

client.on('authenticated', () => {
    console.log('AUTHENTICATED');
});

client.on('ready', async () => {
    console.log('CLIENT IS READY');
});

Then you will find the client is ready before the screen was fully loaded. Causing the send message failed silently when I try to send message right after the client is reported as ready

LOADING SCREEN 0 WhatsApp
LOADING SCREEN 0 WhatsApp
LOADING SCREEN 0 WhatsApp
LOADING SCREEN 0 WhatsApp
LOADING SCREEN 0 WhatsApp
AUTHENTICATED
LOADING SCREEN 0 WhatsApp
CLIENT IS READY
LOADING SCREEN 58 WhatsApp
LOADING SCREEN 58 WhatsApp
LOADING SCREEN 99 WhatsApp

Yeah, here too.

LOADING SCREEN 100 WhatsApp
LOADING SCREEN 100 WhatsApp
LOADING SCREEN 0 WhatsApp
LOADING SCREEN 99 WhatsApp
AUTHENTICATED
CLIENT IS READY
LOADING SCREEN 100 WhatsApp
LOADING SCREEN 100 WhatsApp

But in my case it doesn't matter, because I don't use the loading_screen event. I just set my bot status as active from ready event and never had any problems!

@themazim themazim mentioned this pull request May 12, 2024
1 task
@themazim
Copy link

Tested here and everything is working fine.
There is only one issue here: When locking HTML version using webVersionCache... it fails to send audio/video... but it works fine when disable the cache.
And when it fails, don't throws any error... await client.sendMessage(...) just don't return nothing. The method do not finish and return!
I think that by solving this part of webVersionCache, it's mature enough to merge to the main.
Many users are reporting some errors. I haven't encountered any of these issues here. Running with Node.js v18.16.0.

Locked the webversion to the latest version detected: 2.3000.1013440151-alpha and now it throws an error:

Error: Evaluation failed: a
    at ExecutionContext._ExecutionContext_evaluate (/Users/wemersonrv/desenvolvimento/projetos/winmidia/whatsapp-gateway/api/node_modules/puppeteer-core/lib/cjs/puppeteer/common/ExecutionContext.js:229:15)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async ExecutionContext.evaluate (/Users/wemersonrv/desenvolvimento/projetos/winmidia/whatsapp-gateway/api/node_modules/puppeteer-core/lib/cjs/puppeteer/common/ExecutionContext.js:107:16)
    at async Client.sendMessage (/Users/wemersonrv/desenvolvimento/projetos/winmidia/whatsapp-gateway/api/node_modules/whatsapp-web.js/src/Client.js:910:28)
const msg = await client.sendMessage(to, media, { caption: 'teste-video' })

If disable the webcache, works fine!

Edit 1: Send Video will throw the error... audio not! And both are sent normally without cache!

Edit 2: Found that the issue when send audio/video with webCache activated is on the line 333 of Injected/Utils.js:

333 const mediaData = await mediaPrep.waitForPrep();

https://github.com/pedroslopez/whatsapp-web.js/blob/650cd0dfe5607303c56d36af0e175ca3da2b6c9c/src/util/Injected/Utils.js#L333C9-L333C57

I think the video sending issue may be the same as @guigo613 described in a issue #3002 and he fixed it somehow my modifiying the underlying html.

@RAKESHSUVIDYA
Copy link

QR regenerating after first scan

@guigo613
Copy link

Tested here and everything is working fine.
There is only one issue here: When locking HTML version using webVersionCache... it fails to send audio/video... but it works fine when disable the cache.
And when it fails, don't throws any error... await client.sendMessage(...) just don't return nothing. The method do not finish and return!
I think that by solving this part of webVersionCache, it's mature enough to merge to the main.
Many users are reporting some errors. I haven't encountered any of these issues here. Running with Node.js v18.16.0.

Locked the webversion to the latest version detected: 2.3000.1013440151-alpha and now it throws an error:

Error: Evaluation failed: a
    at ExecutionContext._ExecutionContext_evaluate (/Users/wemersonrv/desenvolvimento/projetos/winmidia/whatsapp-gateway/api/node_modules/puppeteer-core/lib/cjs/puppeteer/common/ExecutionContext.js:229:15)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async ExecutionContext.evaluate (/Users/wemersonrv/desenvolvimento/projetos/winmidia/whatsapp-gateway/api/node_modules/puppeteer-core/lib/cjs/puppeteer/common/ExecutionContext.js:107:16)
    at async Client.sendMessage (/Users/wemersonrv/desenvolvimento/projetos/winmidia/whatsapp-gateway/api/node_modules/whatsapp-web.js/src/Client.js:910:28)
const msg = await client.sendMessage(to, media, { caption: 'teste-video' })

If disable the webcache, works fine!
Edit 1: Send Video will throw the error... audio not! And both are sent normally without cache!
Edit 2: Found that the issue when send audio/video with webCache activated is on the line 333 of Injected/Utils.js:

333 const mediaData = await mediaPrep.waitForPrep();

https://github.com/pedroslopez/whatsapp-web.js/blob/650cd0dfe5607303c56d36af0e175ca3da2b6c9c/src/util/Injected/Utils.js#L333C9-L333C57

I think the video sending issue may be the same as @guigo613 described in a issue #3002 and he fixed it somehow my modifiying the underlying html.

I believe they are different. From what I could perceive, the files are extremely distinct from the most recent versions of WhatsApp. The issue in the version I modified was that the system was awaiting the Wasm file, although it had already been received, and the function had already concluded in a summarized manner. Therefore, it was awaiting something that had already been completed, and I'm unsure how this error arose there, but I suspected that the JS file might have been altered.

If we were to force an error in this JS directly through the browser, WhatsApp would still send the video in the same manner, as it wouldn't get stuck. However, the video preview feature wouldn't be available. However, if an attempt to send it through the API were made, unfortunately, it would result in an error, and I believe it's due to the lack of handling when the resource is unavailable.

The solution I found was to modify the JS so that it would receive the Wasm bytes and follow the correct methods. Since I suspected that this JS file wasn't the same as when it was functional and as it's not present in the current versions, and even the Wasm file seems to be different in current versions, I decided to add the Wasm bytes directly into the JS file itself, instead of fetching them, to ensure it's always the same file.

I might be mistaken, but I don't believe it's the same issue with the web cache, although it seems similar.

Below, I'll leave the link to the JS file that is fetched to perform video operations in the current versions and in the previous versions, where the problem I mentioned was.

version 2.2x: https://web.whatsapp.com/WAWebMediaWasm.worker.57e3c8b84699c00f22bb.worker.js
version 2.3x (I only looked at the latest version.): https://static.whatsapp.net/rsrc.php/v3/yl/r/43Ljqx8LaPL.js

@andrscyv
Copy link

I have this error

 /home/ubuntu/cashback-wpp-bot/node_modules/puppeteer-core/lib/cjs/puppeteer/common/ExecutionContext.js:284
        throw new Error('Execution context was destroyed, most likely because of a navigation.');
              ^

Error: Execution context was destroyed, most likely because of a navigation.
    at rewriteError (/home/ubuntu/cashback-wpp-bot/node_modules/puppeteer-core/lib/cjs/puppeteer/common/ExecutionContext.js:284:15)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async ExecutionContext._ExecutionContext_evaluate (/home/ubuntu/cashback-wpp-bot/node_modules/puppeteer-core/lib/cjs/puppeteer/common/ExecutionContext.js:227:56)
    at async ExecutionContext.evaluate (/home/ubuntu/cashback-wpp-bot/node_modules/puppeteer-core/lib/cjs/puppeteer/common/ExecutionContext.js:107:16)
    at async Client.inject (/home/ubuntu/cashback-wpp-bot/node_modules/whatsapp-web.js/src/Client.js:106:36)
    at async Client.initialize (/home/ubuntu/cashback-wpp-bot/node_modules/whatsapp-web.js/src/Client.js:337:9)

Node.js v18.13.0

me too

@leandrosantoss
Copy link

The library works perfectly with Chrome versions 116 ~ 122, after that it starts generating side effects.

I recommend testing versions within this range.

Solved my problems

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

WhatsApp does not work on v2.3XXX Use phone number instead of scan qr code