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
base: main
Are you sure you want to change the base?
Conversation
Also, the "eval" function from inject.js file isn't running due to content security policy !! |
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 |
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 |
maybe because i'm using backtick for this on module raid ? because without backtick it give error unexpected token '.' on nodejs v13 const isComet = |
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 |
You must optimize code to use old javascript
So you must optimize this statement to use old javascript Try this:
|
I got this error
the error was caused by a change in the function so I change the
Tested Sending & Receive Message is ok. Update
|
i try remove that 2 line .default still error reading 'default' 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 ?) |
try following this change #2822
|
thx finally fix it. I miss the array [0] change to [1]. thx you very much |
This comment was marked as off-topic.
This comment was marked as off-topic.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Tested the base functions and it's working, What are we waiting to commit this ?
example.js
Outdated
@@ -5,19 +5,30 @@ const client = new Client({ | |||
// proxyAuthentication: { username: 'username', password: 'password' }, | |||
puppeteer: { | |||
// args: ['--proxy-server=proxy-server-that-requires-authentication.example.com'], | |||
headless: false | |||
headless: true, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this should be false in the example ( so the first time user can see what is happening )
src/Client.js
Outdated
}); | ||
|
||
await this.pupPage.exposeFunction('onOfflineProgressUpdateEvent', async (percent) => { | ||
this.emit(Events.LOADING_SCREEN, percent, 'WhatsApp'); // Message is hardcoded as "WhatsApp" for now |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's missing if (lastPercent !== percent || lastPercentMessage !== message) {
, it's proposital ?
src/authStrategies/LocalAuth.js
Outdated
return (fs.rmSync ? fs.rmSync : fs.rmdirSync).call(this, this.userDataDir, { recursive: true, force: true }); | ||
await fs.promises.rm(this.userDataDir, { recursive: true, force: true }) | ||
.catch(() => { | ||
return this.logout(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Catch should just give-up right? Won't this run forever if something breaks on the promise ?
src/util/Injected/Utils.js
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why the directory change ?
const version = indexHtml.match(/manifest-([\d\\.]+)\.json/)[1]; | ||
if(!version) return; | ||
|
||
async persist(indexHtml, version) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
we should sanitize the version here, only allow Numbers and dots
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Let's add this to make new users catch errors:
client.pupPage.on("pageerror", function(err) {
console.log("Page error: " + err.toString());
});
client.pupPage.on("error", function(err) {
console.log("Page error: " + err.toString());
});
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
…3001) * Change window.Store.ProfilePic.profilePicFind to window.Store.ProfilePic.requestProfilePicFromServer * Prevent breaking v2.2x * refactor: make it more readable --------- Co-authored-by: alechkos <[email protected]>
* fix getInviteCode for group (#3007) * move changes to proper getInviteCode method. * style fix * refactor: add try-catch in a case the user is not a group admin * refactor: handle promise properly --------- Co-authored-by: Sven Neumann <[email protected]> Co-authored-by: alechkos <[email protected]>
Has anyone encountered a similar problem? When sending an image larger than 20M, an error will occur: Error: Evaluation failed: b |
hi, please tell me if you know what caused this error Initialize error: Waiting for selector |
Update the branch with main, please |
node_modules/whatsapp-web.js/index.d.ts:124:49 - error TS2371: A parameter initializer is only allowed in a function or constructor implementation. 124 requestPairingCode(phoneNumber: string, showNotification = true): Promise I'm this error on logon easy fix |
after install npm install github:pedroslopez/whatsapp-web.js#webpack-exodus qrcode didn't show up. I tried to change headless to false and the qr just stuck in load state. |
|
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:
If you encounter a
git not found
error in the NPM/yarn install: Download git, https://git-scm.comThank 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:
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).ORGANIZING
,INTIAL_LOAD
,DOWNLOADING
,...)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, closes #3016
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
Checklist