UXP Toolkit
    Preparing search index...
    • Creates a Puppeteer ConnectionTransport that adapts a UXP page-level CDP WebSocket endpoint to look like a full Chrome browser-level endpoint.

      Puppeteer's connect() expects to talk to a browser-level CDP that supports Target.* and Browser.* commands. UXP only exposes a page-level CDP.

      The returned transport:

      • Intercepts browser-level commands and returns synthetic responses
      • Emits Target.targetCreated / Target.attachedToTarget events as needed
      • Intercepts session-scoped commands that UXP doesn't support (e.g. Page.getFrameTree, Page.createIsolatedWorld, Runtime.enable)
      • Forwards all other session-scoped commands to UXP (stripping sessionId)
      • Re-wraps UXP responses with sessionId before delivering to Puppeteer

      Parameters

      • cdpUrl: string

        UXP CDP WebSocket URL (e.g. ws://127.0.0.1:PORT/socket/cdt/UUID)

      • executionContextId: number

        The numeric execution context ID obtained from waitForExecutionContextCreated on the first CDP connection.

      Returns Promise<ConnectionTransport>

      import puppeteer from 'puppeteer-core';
      import { createUxpPuppeteerTransport } from '@bubblydoo/uxp-puppeteer-transport';

      const transport = await createUxpPuppeteerTransport(cdpUrl, executionContextId);
      const browser = await puppeteer.connect({ transport, defaultViewport: null });
      const [page] = await browser.pages();
      const result = await page.evaluate(() => 1 + 1);