Files
playwriter/extension-new/README.md
Tommy D. Rossi 1ac644d4bd new code
2025-11-15 13:06:08 +01:00

86 lines
1.9 KiB
Markdown

# Extension New - Rewritten CDP Relay Server
Clean, simple rewrite of the CDP relay server using Hono WebSocket.
## Architecture
The relay server acts as a bridge between:
- **Playwright** (connects via `/cdp`) - Controls the browser
- **Chrome Extension** (connects via `/extension`) - Provides chrome.debugger access
### Message Flow
```
Playwright → /cdp → Router → /extension → Extension → chrome.debugger → Tab
Tab → chrome.debugger → Extension → /extension → /cdp → Playwright
```
## Implementation
**Everything inlined in one file** - No abstraction layers, just straightforward code.
### Files
**`relay-server.ts`** - Single file with everything:
- Two WebSocket endpoints (`/cdp` and `/extension`)
- Connection lifecycle management
- CDP command routing (Browser.*, Target.*, etc)
- Extension request/response handling
- Target registry (simple Map)
- All message forwarding logic
**`protocol.ts`** - Message type definitions
**`index.ts`** - Exports
**`example.ts`** - Usage example
## Key Improvements
**Simpler Code:**
- Everything in one place
- No helper functions or modules
- Clear linear flow
- All state as local variables
**Better Logging:**
- Only logs connection events, CDP messages, and errors
- No verbose debug noise
**Clean API:**
```typescript
const server = await startRelayServer({ port: 9988 })
// Returns:
// {
// cdpEndpoint: 'ws://localhost:9988/cdp',
// extensionEndpoint: 'ws://localhost:9988/extension',
// close: () => void
// }
// Cleanup:
server.close()
```
## Usage
```typescript
import { startRelayServer } from './relay-server.js'
const server = await startRelayServer({ port: 9988 })
console.log('Extension endpoint:', server.extensionEndpoint)
console.log('CDP endpoint:', server.cdpEndpoint)
// Later:
server.close()
```
## Running Example
```bash
pnpm install
pnpm build
node dist/example.js
```