From 8d7fde1bf466c327221266a1c5d41bbe1d790540 Mon Sep 17 00:00:00 2001 From: Adhiraj Singh Date: Wed, 23 Mar 2022 12:40:01 +0530 Subject: [PATCH] feat: add delay between retry requests --- src/Defaults/index.ts | 3 ++- src/Socket/messages-recv.ts | 17 ++++++++++++++--- src/Types/Socket.ts | 2 ++ 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/Defaults/index.ts b/src/Defaults/index.ts index 49cf1ae..6eb742b 100644 --- a/src/Defaults/index.ts +++ b/src/Defaults/index.ts @@ -30,7 +30,8 @@ const BASE_CONNECTION_CONFIG: CommonSocketConfig = { emitOwnEvents: true, defaultQueryTimeoutMs: 60_000, customUploadHosts: [], - treatCiphertextMessagesAsReal: true + treatCiphertextMessagesAsReal: true, + retryRequestDelayMs: 250 } export const DEFAULT_CONNECTION_CONFIG: SocketConfig = { diff --git a/src/Socket/messages-recv.ts b/src/Socket/messages-recv.ts index cc425b7..27a5e35 100644 --- a/src/Socket/messages-recv.ts +++ b/src/Socket/messages-recv.ts @@ -2,14 +2,18 @@ import { proto } from '../../WAProto' import { KEY_BUNDLE_TYPE } from '../Defaults' import { BaileysEventMap, Chat, GroupMetadata, MessageUserReceipt, ParticipantAction, SocketConfig, WAMessageStubType } from '../Types' -import { decodeMessageStanza, downloadAndProcessHistorySyncNotification, encodeBigEndian, generateSignalPubKey, normalizeMessageContent, toNumber, xmppPreKey, xmppSignedPreKey } from '../Utils' +import { decodeMessageStanza, delay, downloadAndProcessHistorySyncNotification, encodeBigEndian, generateSignalPubKey, normalizeMessageContent, toNumber, xmppPreKey, xmppSignedPreKey } from '../Utils' import { makeKeyedMutex, makeMutex } from '../Utils/make-mutex' import { areJidsSameUser, BinaryNode, BinaryNodeAttributes, getAllBinaryNodeChildren, getBinaryNodeChildren, isJidGroup, jidDecode, jidEncode, jidNormalizedUser } from '../WABinary' import { makeChatsSocket } from './chats' import { extractGroupMetadata } from './groups' export const makeMessagesRecvSocket = (config: SocketConfig) => { - const { logger, treatCiphertextMessagesAsReal } = config + const { + logger, + treatCiphertextMessagesAsReal, + retryRequestDelayMs + } = config const sock = makeChatsSocket(config) const { ev, @@ -360,7 +364,14 @@ export const makeMessagesRecvSocket = (config: SocketConfig) => { 'failure in decrypting message' ) retryMutex.mutex( - async() => await sendRetryRequest(stanza) + async() => { + if(ws.readyState === ws.OPEN) { + await sendRetryRequest(stanza) + if(retryRequestDelayMs) { + await delay(retryRequestDelayMs) + } + } + } ) } else { await sendMessageAck(stanza, { class: 'receipt' }) diff --git a/src/Types/Socket.ts b/src/Types/Socket.ts index 32f697a..9c43caf 100644 --- a/src/Types/Socket.ts +++ b/src/Types/Socket.ts @@ -39,4 +39,6 @@ export type CommonSocketConfig = { customUploadHosts: MediaConnInfo['hosts'] /** fires a conversationTimestamp & read count update on CIPHERTEXT messages */ treatCiphertextMessagesAsReal: boolean + /** time to wait between sending new retry requests */ + retryRequestDelayMs: number }