@winstonfassett/webdev-gateway 0.1.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/LICENSE +21 -0
- package/README.md +78 -0
- package/dist/adapter-helpers.d.ts +64 -0
- package/dist/adapter-helpers.d.ts.map +1 -0
- package/dist/adapter-helpers.js +297 -0
- package/dist/adapter-helpers.js.map +1 -0
- package/dist/admin/assets/index-DEDI8OIx.css +2 -0
- package/dist/admin/assets/index-DaI40ww1.js +70 -0
- package/dist/admin/assets/tinykeys.module-CjuTRcEz.js +1 -0
- package/dist/admin/index.html +13 -0
- package/dist/admin-rpc.d.ts +27 -0
- package/dist/admin-rpc.d.ts.map +1 -0
- package/dist/admin-rpc.js +147 -0
- package/dist/admin-rpc.js.map +1 -0
- package/dist/admin.d.ts +10 -0
- package/dist/admin.d.ts.map +1 -0
- package/dist/admin.js +202 -0
- package/dist/admin.js.map +1 -0
- package/dist/auto-register.d.ts +10 -0
- package/dist/auto-register.d.ts.map +1 -0
- package/dist/auto-register.js +145 -0
- package/dist/auto-register.js.map +1 -0
- package/dist/cdp-relay.d.ts +110 -0
- package/dist/cdp-relay.d.ts.map +1 -0
- package/dist/cdp-relay.js +616 -0
- package/dist/cdp-relay.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +95 -0
- package/dist/cli.js.map +1 -0
- package/dist/doctor.d.ts +6 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +149 -0
- package/dist/doctor.js.map +1 -0
- package/dist/element-grab-client.js +305 -0
- package/dist/element-grab.d.ts +15 -0
- package/dist/element-grab.d.ts.map +1 -0
- package/dist/element-grab.js +102 -0
- package/dist/element-grab.js.map +1 -0
- package/dist/gateway.d.ts +5 -0
- package/dist/gateway.d.ts.map +1 -0
- package/dist/gateway.js +534 -0
- package/dist/gateway.js.map +1 -0
- package/dist/installer.d.ts +48 -0
- package/dist/installer.d.ts.map +1 -0
- package/dist/installer.js +637 -0
- package/dist/installer.js.map +1 -0
- package/dist/libs/element-source.js +35 -0
- package/dist/libs/modern-screenshot.js +14 -0
- package/dist/log-reader.d.ts +30 -0
- package/dist/log-reader.d.ts.map +1 -0
- package/dist/log-reader.js +174 -0
- package/dist/log-reader.js.map +1 -0
- package/dist/mcp-server.d.ts +22 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +115 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/mcp-tools-core.d.ts +30 -0
- package/dist/mcp-tools-core.d.ts.map +1 -0
- package/dist/mcp-tools-core.js +375 -0
- package/dist/mcp-tools-core.js.map +1 -0
- package/dist/mcp-tools-full.d.ts +4 -0
- package/dist/mcp-tools-full.d.ts.map +1 -0
- package/dist/mcp-tools-full.js +141 -0
- package/dist/mcp-tools-full.js.map +1 -0
- package/dist/playwright-commands.d.ts +33 -0
- package/dist/playwright-commands.d.ts.map +1 -0
- package/dist/playwright-commands.js +356 -0
- package/dist/playwright-commands.js.map +1 -0
- package/dist/registry.d.ts +83 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +205 -0
- package/dist/registry.js.map +1 -0
- package/dist/rpc-server.d.ts +54 -0
- package/dist/rpc-server.d.ts.map +1 -0
- package/dist/rpc-server.js +207 -0
- package/dist/rpc-server.js.map +1 -0
- package/dist/session.d.ts +13 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +61 -0
- package/dist/session.js.map +1 -0
- package/dist/types.d.ts +76 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/webdev-client.js +20 -0
- package/dist/writers/base.d.ts +24 -0
- package/dist/writers/base.d.ts.map +1 -0
- package/dist/writers/base.js +98 -0
- package/dist/writers/base.js.map +1 -0
- package/dist/writers/console.d.ts +8 -0
- package/dist/writers/console.d.ts.map +1 -0
- package/dist/writers/console.js +14 -0
- package/dist/writers/console.js.map +1 -0
- package/dist/writers/dev-events.d.ts +28 -0
- package/dist/writers/dev-events.d.ts.map +1 -0
- package/dist/writers/dev-events.js +53 -0
- package/dist/writers/dev-events.js.map +1 -0
- package/dist/writers/errors.d.ts +8 -0
- package/dist/writers/errors.d.ts.map +1 -0
- package/dist/writers/errors.js +14 -0
- package/dist/writers/errors.js.map +1 -0
- package/dist/writers/network.d.ts +9 -0
- package/dist/writers/network.d.ts.map +1 -0
- package/dist/writers/network.js +17 -0
- package/dist/writers/network.js.map +1 -0
- package/dist/writers/server-console.d.ts +8 -0
- package/dist/writers/server-console.d.ts.map +1 -0
- package/dist/writers/server-console.js +14 -0
- package/dist/writers/server-console.js.map +1 -0
- package/package.json +79 -0
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CDP Relay — bridges between Playwright and the Chrome extension.
|
|
3
|
+
*
|
|
4
|
+
* Based on Playwriter's proven relay pattern (github.com/remorses/playwriter).
|
|
5
|
+
* Supports multiple concurrent Playwright/CDP clients, each with session-scoped
|
|
6
|
+
* event routing.
|
|
7
|
+
*
|
|
8
|
+
* Passive/on-demand debugging:
|
|
9
|
+
* Extension detects dev pages and announces them as "available" without attaching
|
|
10
|
+
* the debugger. The relay requests debugging only when an agent needs CDP access
|
|
11
|
+
* (via ensureDebugging()). After a period of inactivity (idle TTL), the relay
|
|
12
|
+
* sends 'releaseDebug' to detach the debugger and stop the browser banner.
|
|
13
|
+
*
|
|
14
|
+
* WebSocket endpoints:
|
|
15
|
+
* /__cdp-extension — extension connects here
|
|
16
|
+
* /devtools/browser/* — Playwright clients connect here via connectOverCDP
|
|
17
|
+
*
|
|
18
|
+
* HTTP endpoints (Playwright discovery):
|
|
19
|
+
* /json/version — browser info with rewritten webSocketDebuggerUrl
|
|
20
|
+
* /json/list — list of attached targets
|
|
21
|
+
*
|
|
22
|
+
* Protocol (extension ↔ relay):
|
|
23
|
+
* EXT→RELAY availability: { method: 'tabAvailable', params: { tabId, url, serverId, projectId } }
|
|
24
|
+
* EXT→RELAY availability: { method: 'tabUnavailable', params: { tabId } }
|
|
25
|
+
* RELAY→EXT control: { method: 'requestDebug', params: { tabId? } }
|
|
26
|
+
* RELAY→EXT control: { method: 'releaseDebug', params: { tabId? } }
|
|
27
|
+
* EXT→RELAY events: { method: 'forwardCDPEvent', params: { sessionId, method, params } }
|
|
28
|
+
* EXT→RELAY responses: { id, result } or { id, error }
|
|
29
|
+
* RELAY→EXT commands: { id, method: 'forwardCDPCommand', params: { sessionId, method, params } }
|
|
30
|
+
*
|
|
31
|
+
* CDP commands handled locally (not forwarded):
|
|
32
|
+
* Browser.getVersion, Browser.setDownloadBehavior, Target.setDiscoverTargets,
|
|
33
|
+
* Target.attachToTarget, Target.getTargetInfo, Target.getTargets
|
|
34
|
+
*
|
|
35
|
+
* CDP commands with special handling:
|
|
36
|
+
* Target.setAutoAttach — forward, then synthesize Target.attachedToTarget for known targets
|
|
37
|
+
* Runtime.enable — forward, then wait for executionContextCreated before responding
|
|
38
|
+
*/
|
|
39
|
+
import type { IncomingMessage } from 'node:http';
|
|
40
|
+
import type { Duplex } from 'node:stream';
|
|
41
|
+
import type { Page } from '@xmorse/playwright-core';
|
|
42
|
+
export interface CDPRelayOptions {
|
|
43
|
+
gatewayPort: number;
|
|
44
|
+
/** Idle timeout in ms before auto-releasing debugging. Default: 5 minutes. 0 = no auto-release. */
|
|
45
|
+
idleTimeoutMs?: number;
|
|
46
|
+
}
|
|
47
|
+
export declare class CDPRelay {
|
|
48
|
+
private extensionWs;
|
|
49
|
+
private extensionWss;
|
|
50
|
+
private playwrightWss;
|
|
51
|
+
private clients;
|
|
52
|
+
private targets;
|
|
53
|
+
private availableTabs;
|
|
54
|
+
private pendingCommands;
|
|
55
|
+
private nextCommandId;
|
|
56
|
+
private gatewayPort;
|
|
57
|
+
private events;
|
|
58
|
+
private pwBrowser;
|
|
59
|
+
private pwConnecting;
|
|
60
|
+
private debuggingActive;
|
|
61
|
+
private debuggingRequested;
|
|
62
|
+
private idleTimeoutMs;
|
|
63
|
+
private idleTimer;
|
|
64
|
+
/** Cached refs from last a11y_snapshot call — maps ref string to element info */
|
|
65
|
+
refCache: Map<string, import('./playwright-commands.js').RefEntry> | null;
|
|
66
|
+
constructor(options: CDPRelayOptions);
|
|
67
|
+
/** Debugging is active and has targets */
|
|
68
|
+
get isAvailable(): boolean;
|
|
69
|
+
/** Extension is connected and has available tabs — debugging can be activated */
|
|
70
|
+
get canActivate(): boolean;
|
|
71
|
+
/**
|
|
72
|
+
* Ensure debugging is active. If not, request it from the extension and wait
|
|
73
|
+
* for targets to appear. Returns true if debugging is active after the call.
|
|
74
|
+
* Resets the idle timer on every call.
|
|
75
|
+
*/
|
|
76
|
+
ensureDebugging(): Promise<boolean>;
|
|
77
|
+
/**
|
|
78
|
+
* Request the extension to start debugging all available tabs.
|
|
79
|
+
* Waits up to 5s for at least one target to appear.
|
|
80
|
+
*/
|
|
81
|
+
requestDebugging(): Promise<boolean>;
|
|
82
|
+
/**
|
|
83
|
+
* Release debugging — detach debugger from all tabs.
|
|
84
|
+
* The extension will send Target.detachedFromTarget events.
|
|
85
|
+
*/
|
|
86
|
+
releaseDebugging(): void;
|
|
87
|
+
private resetIdleTimer;
|
|
88
|
+
private clearIdleTimer;
|
|
89
|
+
/** Get all Playwright pages via the persistent CDP connection */
|
|
90
|
+
getPages(): Promise<Page[]>;
|
|
91
|
+
/** Get a Playwright page, optionally matched by dev server port */
|
|
92
|
+
getPage(serverPort?: number): Promise<Page | null>;
|
|
93
|
+
/** Get a CDP session for a page (using getExistingCDPSession, not newCDPSession) */
|
|
94
|
+
getCDPSession(page: Page): Promise<any>;
|
|
95
|
+
private ensurePlaywrightConnection;
|
|
96
|
+
private disconnectPlaywright;
|
|
97
|
+
handleUpgrade(request: IncomingMessage, socket: Duplex, head: Buffer): boolean;
|
|
98
|
+
/** Handle CDP control actions. Returns response object or null if not matched. */
|
|
99
|
+
handleAction(url: string): object | null;
|
|
100
|
+
handleHttp(url: string): object | null;
|
|
101
|
+
private onExtensionConnect;
|
|
102
|
+
private onExtensionMessage;
|
|
103
|
+
private onPlaywrightConnect;
|
|
104
|
+
private onPlaywrightMessage;
|
|
105
|
+
private routeCommand;
|
|
106
|
+
private sendToClient;
|
|
107
|
+
private sendToExtension;
|
|
108
|
+
close(): void;
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=cdp-relay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cdp-relay.d.ts","sourceRoot":"","sources":["../src/cdp-relay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAChD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,KAAK,EAAW,IAAI,EAAkB,MAAM,yBAAyB,CAAA;AAE5E,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAA;IACnB,mGAAmG;IACnG,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AA0BD,qBAAa,QAAQ;IACnB,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,YAAY,CAAiB;IACrC,OAAO,CAAC,aAAa,CAAiB;IACtC,OAAO,CAAC,OAAO,CAAsC;IACrD,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,aAAa,CAAkC;IACvD,OAAO,CAAC,eAAe,CAInB;IACJ,OAAO,CAAC,aAAa,CAAI;IACzB,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,YAAY,CAAQ;IAG5B,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,kBAAkB,CAAQ;IAClC,OAAO,CAAC,aAAa,CAAQ;IAC7B,OAAO,CAAC,SAAS,CAA6C;IAE9D,iFAAiF;IACjF,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,0BAA0B,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAO;gBAEpE,OAAO,EAAE,eAAe;IASpC,0CAA0C;IAC1C,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,iFAAiF;IACjF,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED;;;;OAIG;IACG,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC;IASzC;;;OAGG;IACG,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC;IAiC1C;;;OAGG;IACH,gBAAgB;IAehB,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,cAAc;IAOtB,iEAAiE;IAC3D,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAMjC,mEAAmE;IAC7D,OAAO,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IA8BxD,oFAAoF;IAC9E,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC;YAI/B,0BAA0B;IA0BxC,OAAO,CAAC,oBAAoB;IAS5B,aAAa,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAyB9E,kFAAkF;IAClF,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAkBxC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IA2BtC,OAAO,CAAC,kBAAkB;IAiC1B,OAAO,CAAC,kBAAkB;IA0F1B,OAAO,CAAC,mBAAmB;YAyBb,mBAAmB;YAqCnB,YAAY;IA2H1B,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,eAAe;IAuBvB,KAAK;CAgBN"}
|