import { BrowserContext } from "playwright"; import { Handler } from "./handler"; import { Payload } from "./playload"; import { Result } from "./result"; import { Response } from "./response" import { Task } from "./task"; export class Controller { protected handlers = new Map(); public registerHandler(isp: string, handler: T) { this.handlers.set(isp, handler); } public getHandler(isp: string): Handler { return this.handlers.get(isp) || new DefaultHandler(); } async execute(context: BrowserContext, task: Task): Promise { const startedAt = Date.now(); const response = new Response(); try { const handler = this.getHandler(task.isp); const result = await handler.handle(context, task.payload); response.success = true; response.result = result; } catch (e) { console.log(e); response.success = false; response.message = e.message; // response.image = (await context.pages()[0].screenshot({ // fullPage: true, // quality: 50, // type: "jpeg", // })).toString(); } const finishedAt = Date.now(); response.duration = finishedAt - startedAt; return response; } } class DefaultHandler extends Handler { handle(_: BrowserContext, __: Payload): Promise { throw new Error("Handler Does Not Exist !") } }