diff --git a/server/src/browser-management/classes/RemoteBrowser.ts b/server/src/browser-management/classes/RemoteBrowser.ts index 8c5a6e8b..f5527581 100644 --- a/server/src/browser-management/classes/RemoteBrowser.ts +++ b/server/src/browser-management/classes/RemoteBrowser.ts @@ -31,20 +31,20 @@ export class RemoteBrowser { * used to talk raw Chrome Devtools Protocol. * @private */ - private client : CDPSession | null | undefined = null; + private client: CDPSession | null | undefined = null; /** * Socket.io socket instance enabling communication with the client (frontend) side. * @private */ - private socket : Socket; + private socket: Socket; /** * The Playwright's [Page](https://playwright.dev/docs/api/class-page) instance * as current interactive remote browser's page. * @private */ - private currentPage : Page | null | undefined = null; + private currentPage: Page | null | undefined = null; /** * Interpreter settings for any started interpretation. @@ -84,7 +84,7 @@ export class RemoteBrowser { * @param options remote browser options to be used when launching the browser * @returns {Promise} */ - public initialize = async(options: RemoteBrowserOptions) : Promise => { + public initialize = async (options: RemoteBrowserOptions): Promise => { this.browser = (await options.browser.launch(options.launchOptions)); const context = await this.browser.newContext(); this.currentPage = await context.newPage(); @@ -96,10 +96,10 @@ export class RemoteBrowser { * Should be called only once after the full initialization of the remote browser. * @returns void */ - public registerEditorEvents = () : void => { - this.socket.on('rerender', async() => await this.makeAndEmitScreenshot()); + public registerEditorEvents = (): void => { + this.socket.on('rerender', async () => await this.makeAndEmitScreenshot()); this.socket.on('settings', (settings) => this.interpreterSettings = settings); - this.socket.on('changeTab', async(tabIndex) => await this.changeTab(tabIndex)); + this.socket.on('changeTab', async (tabIndex) => await this.changeTab(tabIndex)); this.socket.on('addTab', async () => { await this.currentPage?.context().newPage(); const lastTabIndex = this.currentPage ? this.currentPage.context().pages().length - 1 : 0; @@ -108,7 +108,7 @@ export class RemoteBrowser { this.socket.on('closeTab', async (tabInfo) => { const page = this.currentPage?.context().pages()[tabInfo.index]; if (page) { - if (tabInfo.isCurrent){ + if (tabInfo.isCurrent) { if (this.currentPage?.context().pages()[tabInfo.index + 1]) { // next tab await this.changeTab(tabInfo.index + 1); @@ -120,8 +120,8 @@ export class RemoteBrowser { // close the page and log it await page.close(); logger.log( - 'debug', - `${tabInfo.index} page was closed, new length of pages: ${this.currentPage?.context().pages().length}` + 'debug', + `${tabInfo.index} page was closed, new length of pages: ${this.currentPage?.context().pages().length}` ) } else { logger.log('error', `${tabInfo.index} index out of range of pages`) @@ -136,10 +136,10 @@ export class RemoteBrowser { * every time the browser's active page updates. * @returns {Promise} */ - public subscribeToScreencast = async() : Promise => { + public subscribeToScreencast = async (): Promise => { await this.startScreencast(); if (!this.client) { - logger.log('warn','client is not initialized'); + logger.log('warn', 'client is not initialized'); return; } this.client.on('Page.screencastFrame', ({ data: base64, sessionId }) => { @@ -147,7 +147,7 @@ export class RemoteBrowser { setTimeout(async () => { try { if (!this.client) { - logger.log('warn','client is not initialized'); + logger.log('warn', 'client is not initialized'); return; } await this.client.send('Page.screencastFrameAck', { sessionId: sessionId }); @@ -163,14 +163,14 @@ export class RemoteBrowser { * If an interpretation was running it will be stopped. * @returns {Promise} */ - public switchOff = async() : Promise => { + public switchOff = async (): Promise => { await this.interpreter.stopInterpretation(); if (this.browser) { await this.stopScreencast(); await this.browser.close(); } else { logger.log('error', 'Browser wasn\'t initialized'); - logger.log('error','Switching off the browser failed'); + logger.log('error', 'Switching off the browser failed'); } }; @@ -178,7 +178,7 @@ export class RemoteBrowser { * Makes and emits a single screenshot to the client side. * @returns {Promise} */ - public makeAndEmitScreenshot = async() : Promise => { + public makeAndEmitScreenshot = async (): Promise => { try { const screenshot = await this.currentPage?.screenshot(); if (screenshot) { @@ -197,7 +197,7 @@ export class RemoteBrowser { * @param socket socket.io socket instance used to communicate with the client side * @returns void */ - public updateSocket = (socket: Socket) : void => { + public updateSocket = (socket: Socket): void => { this.socket = socket; this.registerEditorEvents(); this.generator?.updateSocket(socket); @@ -208,7 +208,7 @@ export class RemoteBrowser { * Starts the interpretation of the currently generated workflow. * @returns {Promise} */ - public interpretCurrentRecording = async () : Promise => { + public interpretCurrentRecording = async (): Promise => { logger.log('debug', 'Starting interpretation in the editor'); if (this.generator) { const workflow = this.generator.AddGeneratedFlags(this.generator.getWorkflowFile()); @@ -226,9 +226,9 @@ export class RemoteBrowser { } logger.log('debug', `Starting interpretation with settings: ${JSON.stringify(this.interpreterSettings, null, 2)}`); await this.interpreter.interpretRecordingInEditor( - workflow, this.currentPage, - (newPage: Page) => this.currentPage = newPage, - this.interpreterSettings + workflow, this.currentPage, + (newPage: Page) => this.currentPage = newPage, + this.interpreterSettings ); // clear the active index from generator this.generator.clearLastIndex(); @@ -244,7 +244,7 @@ export class RemoteBrowser { * Stops the workflow interpretation and initializes a new page. * @returns {Promise} */ - public stopCurrentInterpretation = async () : Promise => { + public stopCurrentInterpretation = async (): Promise => { await this.interpreter.stopInterpretation(); await this.initializeNewPage(); }; @@ -253,7 +253,7 @@ export class RemoteBrowser { * Returns the current page instance. * @returns {Page | null | undefined} */ - public getCurrentPage = () : Page | null | undefined => { + public getCurrentPage = (): Page | null | undefined => { return this.currentPage; }; @@ -264,12 +264,12 @@ export class RemoteBrowser { * @param tabIndex index of the page in the pages array on the {@link BrowserContext} * @returns {Promise} */ - private changeTab = async (tabIndex: number) : Promise=> { + private changeTab = async (tabIndex: number): Promise => { const page = this.currentPage?.context().pages()[tabIndex]; if (page) { await this.stopScreencast(); this.currentPage = page; - await this.currentPage.setViewportSize({height: 720, width: 1280}) + await this.currentPage.setViewportSize({ height: 720, width: 1280 }) this.client = await this.currentPage.context().newCDPSession(this.currentPage); this.socket.emit('urlChanged', this.currentPage.url()); await this.makeAndEmitScreenshot(); @@ -284,10 +284,10 @@ export class RemoteBrowser { * @param options optional page options to be used when creating a new page * @returns {Promise} */ - private initializeNewPage = async (options?: Object) : Promise => { + private initializeNewPage = async (options?: Object): Promise => { await this.stopScreencast(); const newPage = options ? await this.browser?.newPage(options) - : await this.browser?.newPage(); + : await this.browser?.newPage(); await this.currentPage?.close(); this.currentPage = newPage; @@ -298,7 +298,7 @@ export class RemoteBrowser { this.client = await this.currentPage.context().newCDPSession(this.currentPage); await this.subscribeToScreencast(); } else { - logger.log('error', 'Could not get a new page, returned undefined'); + logger.log('error', 'Could not get a new page, returned undefined'); } }; @@ -308,23 +308,23 @@ export class RemoteBrowser { * Should be called only once after the browser is fully initialized. * @returns {Promise} */ - private startScreencast = async() : Promise => { + private startScreencast = async (): Promise => { if (!this.client) { - logger.log('warn','client is not initialized'); + logger.log('warn', 'client is not initialized'); return; } await this.client.send('Page.startScreencast', { format: 'jpeg', quality: 75 }); - logger.log('info',`Browser started with screencasting a page.`); + logger.log('info', `Browser started with screencasting a page.`); }; /** * Unsubscribes the current page from the screencast session. * @returns {Promise} */ - private stopScreencast = async() : Promise => { + private stopScreencast = async (): Promise => { if (!this.client) { - logger.log('error','client is not initialized'); - logger.log('error','Screencast stop failed'); + logger.log('error', 'client is not initialized'); + logger.log('error', 'Screencast stop failed'); } else { await this.client.send('Page.stopScreencast'); logger.log('info', `Browser stopped with screencasting.`); @@ -336,9 +336,9 @@ export class RemoteBrowser { * @param payload the screenshot binary data * @returns void */ - private emitScreenshot = (payload: any) : void => { + private emitScreenshot = (payload: any): void => { const dataWithMimeType = ('data:image/jpeg;base64,').concat(payload); this.socket.emit('screencast', dataWithMimeType); - logger.log('debug',`Screenshot emitted`); + logger.log('debug', `Screenshot emitted`); }; }