From db5e5bd76f49c74cd5aa24ae5ee010b3fcf4a888 Mon Sep 17 00:00:00 2001 From: liamcottle Date: Tue, 8 Apr 2025 14:05:21 +1200 Subject: [PATCH] clear timeouts on success or error for repeater login and status requests --- src/connection/connection.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/connection/connection.js b/src/connection/connection.js index da0ce90..6e97fc5 100644 --- a/src/connection/connection.js +++ b/src/connection/connection.js @@ -1363,6 +1363,7 @@ class Connection extends EventEmitter { const publicKeyPrefix = contactPublicKey.subarray(0, 6); // listen for sent response so we can get estimated timeout + var timeoutHandler = null; const onSent = (response) => { // remove error listener since we received sent response @@ -1370,7 +1371,7 @@ class Connection extends EventEmitter { // reject login request as timed out after estimated delay, plus a bit extra const estTimeout = response.estTimeout + extraTimeoutMillis; - setTimeout(() => { + timeoutHandler = setTimeout(() => { reject("timeout"); }, estTimeout); @@ -1386,6 +1387,7 @@ class Connection extends EventEmitter { } // login successful + clearTimeout(timeoutHandler); this.off(Constants.ResponseCodes.Err, onErr); this.off(Constants.ResponseCodes.Sent, onSent); this.off(Constants.PushCodes.LoginSuccess, onLoginSuccess); @@ -1395,6 +1397,7 @@ class Connection extends EventEmitter { // reject promise when we receive err const onErr = () => { + clearTimeout(timeoutHandler); this.off(Constants.ResponseCodes.Err, onErr); this.off(Constants.ResponseCodes.Sent, onSent); this.off(Constants.PushCodes.LoginSuccess, onLoginSuccess); @@ -1423,6 +1426,7 @@ class Connection extends EventEmitter { const publicKeyPrefix = contactPublicKey.subarray(0, 6); // listen for sent response so we can get estimated timeout + var timeoutHandler = null; const onSent = (response) => { // remove error listener since we received sent response @@ -1430,7 +1434,7 @@ class Connection extends EventEmitter { // reject login request as timed out after estimated delay, plus a bit extra const estTimeout = response.estTimeout + extraTimeoutMillis; - setTimeout(() => { + timeoutHandler = setTimeout(() => { reject("timeout"); }, estTimeout); @@ -1446,6 +1450,7 @@ class Connection extends EventEmitter { } // status request successful + clearTimeout(timeoutHandler); this.off(Constants.ResponseCodes.Err, onErr); this.off(Constants.ResponseCodes.Sent, onSent); this.off(Constants.PushCodes.StatusResponse, onStatusResponsePush); @@ -1477,6 +1482,7 @@ class Connection extends EventEmitter { // reject promise when we receive err const onErr = () => { + clearTimeout(timeoutHandler); this.off(Constants.ResponseCodes.Err, onErr); this.off(Constants.ResponseCodes.Sent, onSent); this.off(Constants.PushCodes.StatusResponse, onStatusResponsePush);