Merge pull request #388 from getmaxun/revert-386-browser-fix
Revert "fix: prevent page reload on run trigger to open remote browser"
This commit is contained in:
@@ -15,8 +15,6 @@ interface BrowserPoolInfo {
|
|||||||
* @default false
|
* @default false
|
||||||
*/
|
*/
|
||||||
active: boolean,
|
active: boolean,
|
||||||
|
|
||||||
isRobotRun?: boolean;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -48,29 +46,17 @@ export class BrowserPool {
|
|||||||
* @param browser remote browser instance
|
* @param browser remote browser instance
|
||||||
* @param active states if the browser's instance is being actively used
|
* @param active states if the browser's instance is being actively used
|
||||||
*/
|
*/
|
||||||
public addRemoteBrowser = (id: string, browser: RemoteBrowser, active: boolean = false, isRobotRun: boolean = false): void => {
|
public addRemoteBrowser = (id: string, browser: RemoteBrowser, active: boolean = false): void => {
|
||||||
this.pool = {
|
this.pool = {
|
||||||
...this.pool,
|
...this.pool,
|
||||||
[id]: {
|
[id]: {
|
||||||
browser,
|
browser,
|
||||||
active,
|
active,
|
||||||
isRobotRun
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
logger.log('debug', `Remote browser with id: ${id} added to the pool`);
|
logger.log('debug', `Remote browser with id: ${id} added to the pool`);
|
||||||
};
|
};
|
||||||
|
|
||||||
public hasActiveRobotRun(): boolean {
|
|
||||||
return Object.values(this.pool).some(info => info.isRobotRun);
|
|
||||||
}
|
|
||||||
|
|
||||||
public clearRobotRunState(id: string): void {
|
|
||||||
if (this.pool[id]) {
|
|
||||||
this.pool[id].isRobotRun = false;
|
|
||||||
logger.log('debug', `Robot run state cleared for browser ${id}`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Removes the remote browser instance from the pool.
|
* Removes the remote browser instance from the pool.
|
||||||
* @param id remote browser instance's id
|
* @param id remote browser instance's id
|
||||||
@@ -81,8 +67,6 @@ export class BrowserPool {
|
|||||||
logger.log('warn', `Remote browser with id: ${id} does not exist in the pool`);
|
logger.log('warn', `Remote browser with id: ${id} does not exist in the pool`);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.clearRobotRunState(id);
|
|
||||||
delete (this.pool[id]);
|
delete (this.pool[id]);
|
||||||
logger.log('debug', `Remote browser with id: ${id} deleted from the pool`);
|
logger.log('debug', `Remote browser with id: ${id} deleted from the pool`);
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ export const createRemoteBrowserForRun = (userId: string): string => {
|
|||||||
async (socket: Socket) => {
|
async (socket: Socket) => {
|
||||||
const browserSession = new RemoteBrowser(socket);
|
const browserSession = new RemoteBrowser(socket);
|
||||||
await browserSession.initialize(userId);
|
await browserSession.initialize(userId);
|
||||||
browserPool.addRemoteBrowser(id, browserSession, true, true);
|
browserPool.addRemoteBrowser(id, browserSession, true);
|
||||||
socket.emit('ready-for-run');
|
socket.emit('ready-for-run');
|
||||||
});
|
});
|
||||||
return id;
|
return id;
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ import stealthPlugin from 'puppeteer-extra-plugin-stealth';
|
|||||||
import logger from "../logger";
|
import logger from "../logger";
|
||||||
import { getDecryptedProxyConfig } from './proxy';
|
import { getDecryptedProxyConfig } from './proxy';
|
||||||
import { requireSignIn } from '../middlewares/auth';
|
import { requireSignIn } from '../middlewares/auth';
|
||||||
import { browserPool } from '../server';
|
|
||||||
|
|
||||||
export const router = Router();
|
export const router = Router();
|
||||||
chromium.use(stealthPlugin());
|
chromium.use(stealthPlugin());
|
||||||
@@ -34,17 +33,6 @@ router.all('/', requireSignIn, (req, res, next) => {
|
|||||||
next() // pass control to the next handler
|
next() // pass control to the next handler
|
||||||
})
|
})
|
||||||
|
|
||||||
router.use('/', requireSignIn, (req: AuthenticatedRequest, res: Response, next) => {
|
|
||||||
if (browserPool.hasActiveRobotRun()) {
|
|
||||||
logger.log('debug', 'Preventing browser initialization - robot run in progress');
|
|
||||||
return res.status(403).json({
|
|
||||||
error: 'Cannot initialize recording browser while a robot run is in progress'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
next();
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GET endpoint for starting the remote browser recording session.
|
* GET endpoint for starting the remote browser recording session.
|
||||||
* returns session's id
|
* returns session's id
|
||||||
|
|||||||
@@ -332,8 +332,6 @@ export class WorkflowInterpreter {
|
|||||||
}, {})
|
}, {})
|
||||||
}
|
}
|
||||||
|
|
||||||
this.socket.emit('run-completed', "success");
|
|
||||||
|
|
||||||
logger.log('debug', `Interpretation finished`);
|
logger.log('debug', `Interpretation finished`);
|
||||||
this.clearState();
|
this.clearState();
|
||||||
return result;
|
return result;
|
||||||
|
|||||||
@@ -68,14 +68,13 @@ export const MainPage = ({ handleEditRecording, initialContent }: MainPageProps)
|
|||||||
const readyForRunHandler = useCallback((browserId: string, runId: string) => {
|
const readyForRunHandler = useCallback((browserId: string, runId: string) => {
|
||||||
interpretStoredRecording(runId).then(async (interpretation: boolean) => {
|
interpretStoredRecording(runId).then(async (interpretation: boolean) => {
|
||||||
if (!aborted) {
|
if (!aborted) {
|
||||||
// if (interpretation) {
|
if (interpretation) {
|
||||||
// notify('success', t('main_page.notifications.interpretation_success', { name: runningRecordingName }));
|
notify('success', t('main_page.notifications.interpretation_success', { name: runningRecordingName }));
|
||||||
// } else {
|
} else {
|
||||||
// notify('success', t('main_page.notifications.interpretation_failed', { name: runningRecordingName }));
|
notify('success', t('main_page.notifications.interpretation_failed', { name: runningRecordingName }));
|
||||||
// // destroy the created browser
|
// destroy the created browser
|
||||||
// await stopRecording(browserId);
|
await stopRecording(browserId);
|
||||||
// }
|
}
|
||||||
if (!interpretation) await stopRecording(browserId);
|
|
||||||
}
|
}
|
||||||
setRunningRecordingName('');
|
setRunningRecordingName('');
|
||||||
setCurrentInterpretationLog('');
|
setCurrentInterpretationLog('');
|
||||||
@@ -90,12 +89,6 @@ export const MainPage = ({ handleEditRecording, initialContent }: MainPageProps)
|
|||||||
|
|
||||||
const handleRunRecording = useCallback((settings: RunSettings) => {
|
const handleRunRecording = useCallback((settings: RunSettings) => {
|
||||||
createRunForStoredRecording(runningRecordingId, settings).then(({ browserId, runId }: CreateRunResponse) => {
|
createRunForStoredRecording(runningRecordingId, settings).then(({ browserId, runId }: CreateRunResponse) => {
|
||||||
localStorage.setItem('runInfo', JSON.stringify({
|
|
||||||
browserId,
|
|
||||||
runId,
|
|
||||||
recordingName: runningRecordingName
|
|
||||||
}));
|
|
||||||
|
|
||||||
setIds({ browserId, runId });
|
setIds({ browserId, runId });
|
||||||
const socket =
|
const socket =
|
||||||
io(`${apiUrl}/${browserId}`, {
|
io(`${apiUrl}/${browserId}`, {
|
||||||
@@ -105,18 +98,6 @@ export const MainPage = ({ handleEditRecording, initialContent }: MainPageProps)
|
|||||||
setSockets(sockets => [...sockets, socket]);
|
setSockets(sockets => [...sockets, socket]);
|
||||||
socket.on('ready-for-run', () => readyForRunHandler(browserId, runId));
|
socket.on('ready-for-run', () => readyForRunHandler(browserId, runId));
|
||||||
socket.on('debugMessage', debugMessageHandler);
|
socket.on('debugMessage', debugMessageHandler);
|
||||||
|
|
||||||
socket.on('run-completed', (status) => {
|
|
||||||
if (status === 'success') {
|
|
||||||
notify('success', t('main_page.notifications.interpretation_success', { name: runningRecordingName }));
|
|
||||||
} else {
|
|
||||||
notify('error', t('main_page.notifications.interpretation_failed', { name: runningRecordingName }));
|
|
||||||
}
|
|
||||||
setRunningRecordingName('');
|
|
||||||
setCurrentInterpretationLog('');
|
|
||||||
setRerenderRuns(true);
|
|
||||||
});
|
|
||||||
|
|
||||||
setContent('runs');
|
setContent('runs');
|
||||||
if (browserId) {
|
if (browserId) {
|
||||||
notify('info', t('main_page.notifications.run_started', { name: runningRecordingName }));
|
notify('info', t('main_page.notifications.run_started', { name: runningRecordingName }));
|
||||||
@@ -127,7 +108,6 @@ export const MainPage = ({ handleEditRecording, initialContent }: MainPageProps)
|
|||||||
return (socket: Socket, browserId: string, runId: string) => {
|
return (socket: Socket, browserId: string, runId: string) => {
|
||||||
socket.off('ready-for-run', () => readyForRunHandler(browserId, runId));
|
socket.off('ready-for-run', () => readyForRunHandler(browserId, runId));
|
||||||
socket.off('debugMessage', debugMessageHandler);
|
socket.off('debugMessage', debugMessageHandler);
|
||||||
socket.off('run-completed');
|
|
||||||
}
|
}
|
||||||
}, [runningRecordingName, sockets, ids, readyForRunHandler, debugMessageHandler])
|
}, [runningRecordingName, sockets, ids, readyForRunHandler, debugMessageHandler])
|
||||||
|
|
||||||
@@ -142,49 +122,6 @@ export const MainPage = ({ handleEditRecording, initialContent }: MainPageProps)
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
const storedRunInfo = localStorage.getItem('runInfo');
|
|
||||||
console.log('storedRunInfo', storedRunInfo);
|
|
||||||
|
|
||||||
if (storedRunInfo) {
|
|
||||||
// Parse the stored info
|
|
||||||
const { browserId, runId, recordingName } = JSON.parse(storedRunInfo);
|
|
||||||
|
|
||||||
// Reconnect to the specific browser's namespace
|
|
||||||
setIds({ browserId, runId });
|
|
||||||
const socket = io(`${apiUrl}/${browserId}`, {
|
|
||||||
transports: ["websocket"],
|
|
||||||
rejectUnauthorized: false
|
|
||||||
});
|
|
||||||
|
|
||||||
// Update component state with stored info
|
|
||||||
setRunningRecordingName(recordingName);
|
|
||||||
setSockets(sockets => [...sockets, socket]);
|
|
||||||
|
|
||||||
// Set up event listeners
|
|
||||||
socket.on('ready-for-run', () => readyForRunHandler(browserId, runId));
|
|
||||||
socket.on('debugMessage', debugMessageHandler);
|
|
||||||
socket.on('run-completed', (status) => {
|
|
||||||
if (status === 'success') {
|
|
||||||
notify('success', t('main_page.notifications.interpretation_success', { name: recordingName }));
|
|
||||||
} else {
|
|
||||||
notify('error', t('main_page.notifications.interpretation_failed', { name: recordingName }));
|
|
||||||
}
|
|
||||||
setRunningRecordingName('');
|
|
||||||
setCurrentInterpretationLog('');
|
|
||||||
setRerenderRuns(true);
|
|
||||||
localStorage.removeItem('runInfo'); // Clean up stored info
|
|
||||||
});
|
|
||||||
|
|
||||||
// Cleanup function
|
|
||||||
return () => {
|
|
||||||
socket.off('ready-for-run', () => readyForRunHandler(browserId, runId));
|
|
||||||
socket.off('debugMessage', debugMessageHandler);
|
|
||||||
socket.off('run-completed');
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
const DisplayContent = () => {
|
const DisplayContent = () => {
|
||||||
switch (content) {
|
switch (content) {
|
||||||
case 'robots':
|
case 'robots':
|
||||||
|
|||||||
Reference in New Issue
Block a user