From ced2f5d5ab5818a2fb97f5ea21a025f96d6c24e3 Mon Sep 17 00:00:00 2001 From: Adhiraj Singh Date: Tue, 29 Mar 2022 19:59:19 +0530 Subject: [PATCH] feat: debounced app state resync --- src/Socket/messages-recv.ts | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/Socket/messages-recv.ts b/src/Socket/messages-recv.ts index df50cec..55b24c6 100644 --- a/src/Socket/messages-recv.ts +++ b/src/Socket/messages-recv.ts @@ -2,7 +2,7 @@ import { proto } from '../../WAProto' import { KEY_BUNDLE_TYPE } from '../Defaults' import { BaileysEventMap, MessageUserReceipt, SocketConfig, WAMessageStubType } from '../Types' -import { decodeMessageStanza, delay, encodeBigEndian, generateSignalPubKey, getStatusFromReceiptType, normalizeMessageContent, xmppPreKey, xmppSignedPreKey } from '../Utils' +import { debouncedTimeout, decodeMessageStanza, delay, encodeBigEndian, generateSignalPubKey, getStatusFromReceiptType, normalizeMessageContent, xmppPreKey, xmppSignedPreKey } from '../Utils' import { makeKeyedMutex, makeMutex } from '../Utils/make-mutex' import processMessage from '../Utils/process-message' import { areJidsSameUser, BinaryNode, BinaryNodeAttributes, getAllBinaryNodeChildren, getBinaryNodeChildren, isJidGroup, jidDecode, jidEncode, jidNormalizedUser } from '../WABinary' @@ -36,6 +36,11 @@ export const makeMessagesRecvSocket = (config: SocketConfig) => { /** this mutex ensures that each retryRequest will wait for the previous one to finish */ const retryMutex = makeMutex() + const appStateSyncTimeout = debouncedTimeout( + 6_000, + () => ws.readyState === ws.OPEN && resyncMainAppState() + ) + const msgRetryMap = config.msgRetryCounterMap || { } const historyCache = new Set() @@ -153,8 +158,10 @@ export const makeMessagesRecvSocket = (config: SocketConfig) => { { historyCache, meId, keyStore: authState.keys, logger, treatCiphertextMessagesAsReal } ) - if(newEvents['chats.set']?.isLatest) { - resyncMainAppState() + if(isAnyHistoryMsg) { + logger.debug('restarting app sync timeout') + // restart the app state sync timeout + appStateSyncTimeout.start() } return newEvents