From eecfa4319896219f4b1b9eadc0dc14ae46c5ad1a Mon Sep 17 00:00:00 2001 From: Rohit Date: Mon, 30 Jun 2025 16:15:52 +0530 Subject: [PATCH] feat: rerender on network requests --- .../classes/RemoteBrowser.ts | 43 +++++++++++++------ 1 file changed, 30 insertions(+), 13 deletions(-) diff --git a/server/src/browser-management/classes/RemoteBrowser.ts b/server/src/browser-management/classes/RemoteBrowser.ts index 52281fd3..74f86dfe 100644 --- a/server/src/browser-management/classes/RemoteBrowser.ts +++ b/server/src/browser-management/classes/RemoteBrowser.ts @@ -435,19 +435,36 @@ export class RemoteBrowser { await this.makeAndEmitDOMSnapshot(); }); - // DO NOT REMOVE THIS CODE - MIGHT BE NEEDED LATER - // this.currentPage.on("response", async (response) => { - // const url = response.url(); - // if ( - // response.request().resourceType() === "document" || - // url.includes("api/") || - // url.includes("ajax") - // ) { - // setTimeout(async () => { - // await this.makeAndEmitDOMSnapshot(); - // }, 800); - // } - // }); + this.currentPage.on("response", async (response) => { + const url = response.url(); + if ( + response.request().resourceType() === "document" || + url.includes("api/") || + url.includes("ajax") + ) { + this.pendingNetworkRequests.push(url); + + if (this.networkRequestTimeout) { + clearTimeout(this.networkRequestTimeout); + this.networkRequestTimeout = null; + } + + logger.debug( + `Network request received: ${url}. Total pending: ${this.pendingNetworkRequests.length}` + ); + + this.networkRequestTimeout = setTimeout(async () => { + logger.info( + `Network quiet period reached. Processing ${this.pendingNetworkRequests.length} requests` + ); + + this.pendingNetworkRequests = []; + this.networkRequestTimeout = null; + + await this.makeAndEmitDOMSnapshot(); + }, this.NETWORK_QUIET_PERIOD); + } + }); } private async setupPageEventListeners(page: Page) {