Creating a Puppeteer Bot with Remote Browser and Shared Browser Service

i want to create a puppeteer bot with a remote browser and id like to create a browser service that maybe holds the browser and page instance but also make it available for other services.
const service = Effect.gen(function* () {
    let browser: Browser;
    let page: Page;

    function init() {
        return Effect.gen(function* () {
            browser = yield* Effect.tryPromise(() => puppeteer.connect({
                browserWSEndpoint: 'wss://brd-customer-hl_54a441b8-zone-bot:57v82ukw2l3n@brd.superproxy.io:9222',
            }));
            page = yield* Effect.tryPromise(() => browser.newPage());
        }).pipe(
                Effect.timeout('3 seconds'),
                Effect.retry({times: 3}),
                Effect.withSpan('init'),
        );
    }

    return {
        init,
    } as const
})

export class BrowserService extends Context.Tag('BrowserService')<
        BrowserService,
        Effect.Effect.Success<typeof service>
>() {
    static Live = Layer.effect(this, service);
}
Was this page helpful?