diff --git a/src/WAConnection/0.Base.ts b/src/WAConnection/0.Base.ts index 5674d7f..d6aa0d3 100644 --- a/src/WAConnection/0.Base.ts +++ b/src/WAConnection/0.Base.ts @@ -356,7 +356,9 @@ export class WAConnection extends EventEmitter { //throw new Error("You're not even connected, you can't log out") await new Promise(resolve => this.conn.send('goodbye,["admin","Conn","disconnect"]', null, resolve)) } - this.user = null + this.user = undefined + this.chats.clear() + this.contacts = {} this.close() } /** Close the connection to WhatsApp Web */ diff --git a/src/WAConnection/1.Validation.ts b/src/WAConnection/1.Validation.ts index ab218fb..819f7d5 100644 --- a/src/WAConnection/1.Validation.ts +++ b/src/WAConnection/1.Validation.ts @@ -12,9 +12,9 @@ export class WAConnection extends Base { if (!this.authInfo?.clientID) { this.authInfo = { clientID: Utils.generateClientID() } as any } - const canLogin = this.authInfo?.encKey && this.authInfo?.macKey this.referenceDate = new Date () // refresh reference date + let isNewUser = false this.startDebouncedTimeout () @@ -70,7 +70,15 @@ export class WAConnection extends Base { } const validationJSON = (await Promise.all (initQueries)).slice(-1)[0] // get the last result - this.user = await this.validateNewConnection(validationJSON[1]) // validate the connection + const newUser = await this.validateNewConnection(validationJSON[1]) // validate the connection + if (newUser.jid !== this.user?.jid) { + isNewUser = true + // clear out old data + this.chats.clear() + this.contacts = {} + } + + this.user = newUser this.logger.info('validated connection successfully') this.emit ('connection-validated', this.user) @@ -89,6 +97,8 @@ export class WAConnection extends Base { this.sendPostConnectQueries () this.logger.debug('sent init queries') + + return { isNewUser } } /** * Send the same queries WA Web sends after connect diff --git a/src/WAConnection/3.Connect.ts b/src/WAConnection/3.Connect.ts index 8e51806..60da0af 100644 --- a/src/WAConnection/3.Connect.ts +++ b/src/WAConnection/3.Connect.ts @@ -87,7 +87,7 @@ export class WAConnection extends Base { this.conn.on ('open', async () => { this.logger.info(`connected to WhatsApp Web server, authenticating via ${reconnectID ? 'reconnect' : 'takeover'}`) - let waitForChats: Promise + let waitForChats: Promise<{ hasNewChats: boolean }> // add wait for chats promise if required if (typeof options?.waitForChats === 'undefined' ? true : options?.waitForChats) { const {wait, cancellations} = this.receiveChatsAndContacts(this.connectOptions.waitOnlyForLastMessage) @@ -95,25 +95,25 @@ export class WAConnection extends Base { rejections.push (...cancellations) } try { - const [, result] = await Promise.all ( + const [authResult, chatsResult] = await Promise.all ( [ - this.authenticate(reconnectID) - .then(() => this.startKeepAliveRequest()), + this.authenticate(reconnectID), waitForChats || undefined ] ) + this.startKeepAliveRequest() this.conn .removeAllListeners ('error') .removeAllListeners ('close') this.stopDebouncedTimeout () - resolve (result) + resolve ({ ...authResult, ...chatsResult }) } catch (error) { reject (error) } }) this.conn.on('error', rejectAll) this.conn.on('close', () => rejectAll(new Error(DisconnectReason.close))) - }) as Promise + }) as Promise<{ hasNewChats?: boolean, isNewUser: boolean }> ) this.on ('ws-close', rejectAll) diff --git a/src/WAConnection/Constants.ts b/src/WAConnection/Constants.ts index add30c4..154638f 100644 --- a/src/WAConnection/Constants.ts +++ b/src/WAConnection/Constants.ts @@ -382,6 +382,7 @@ export interface WAOpenResult { /** Was this connection opened via a QR scan */ newConnection: boolean user: WAUser + isNewUser: boolean hasNewChats?: boolean }