fix: emit disconnected event on page navigation

This also addresses an issue due to a change in behavior from WhatsApp Web when the session is logged out from the device.
This commit is contained in:
Pedro Lopez
2021-04-20 20:02:22 -04:00
parent f1e2f32988
commit 6cece4a006
3 changed files with 14 additions and 3 deletions

View File

@@ -259,6 +259,10 @@ client.on('change_battery', (batteryInfo) => {
console.log(`Battery: ${battery}% - Charging? ${plugged}`); console.log(`Battery: ${battery}% - Charging? ${plugged}`);
}); });
client.on('change_state', state => {
console.log('CHANGE STATE', state );
});
client.on('disconnected', (reason) => { client.on('disconnected', (reason) => {
console.log('Client was logged out', reason); console.log('Client was logged out', reason);
}); });

4
index.d.ts vendored
View File

@@ -149,8 +149,8 @@ declare namespace WAWebJS {
/** Emitted when the client has been disconnected */ /** Emitted when the client has been disconnected */
on(event: 'disconnected', listener: ( on(event: 'disconnected', listener: (
/** state that caused the disconnect */ /** reason that caused the disconnect */
reason: WAState reason: WAState | "NAVIGATED"
) => void): this ) => void): this
/** Emitted when a user joins the chat via invite link or is added by an admin */ /** Emitted when a user joins the chat via invite link or is added by an admin */

View File

@@ -335,7 +335,7 @@ class Client extends EventEmitter {
/** /**
* Emitted when the client has been disconnected * Emitted when the client has been disconnected
* @event Client#disconnected * @event Client#disconnected
* @param {WAState} reason state that caused the disconnect * @param {WAState|"NAVIGATION"} reason reason that caused the disconnect
*/ */
this.emit(Events.DISCONNECTED, state); this.emit(Events.DISCONNECTED, state);
this.destroy(); this.destroy();
@@ -373,6 +373,13 @@ class Client extends EventEmitter {
* @event Client#ready * @event Client#ready
*/ */
this.emit(Events.READY); this.emit(Events.READY);
// Disconnect when navigating away
// Because WhatsApp Web now reloads when logging out from the device, this also covers that case
this.pupPage.on('framenavigated', async () => {
this.emit(Events.DISCONNECTED, 'NAVIGATION');
await this.destroy();
});
} }
/** /**