MCPcopy Create free account
hub / github.com/UsefulSoftwareCo/executor / CdpPage

Class CdpPage

e2e/desktop-packaged/supervised-regressions.test.ts:66–207  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

64}
65
66class CdpPage {
67 private nextId = 1;
68 private readonly pending = new Map<
69 number,
70 {
71 readonly resolve: (value: unknown) => void;
72 readonly reject: (error: Error) => void;
73 }
74 >();
75
76 private constructor(private readonly socket: WebSocket) {
77 socket.addEventListener("message", (event) => {
78 const data = event.data;
79 if (typeof data !== "string") return;
80 const message = JSON.parse(data) as CdpResponse<unknown>;
81 if (!message.id) return;
82 const pending = this.pending.get(message.id);
83 if (!pending) return;
84 this.pending.delete(message.id);
85 if (message.error) {
86 pending.reject(new Error(message.error.message ?? "CDP command failed"));
87 return;
88 }
89 pending.resolve(message.result);
90 });
91 socket.addEventListener("close", () => {
92 for (const [, pending] of this.pending) {
93 pending.reject(new Error("CDP socket closed"));
94 }
95 this.pending.clear();
96 });
97 }
98
99 static connect = (url: string): Promise<CdpPage> =>
100 new Promise((resolve, reject) => {
101 const socket = new WebSocket(url);
102 const timer = setTimeout(() => {
103 socket.close();
104 // oxlint-disable-next-line executor/no-promise-reject, executor/no-error-constructor -- boundary: WebSocket connection promise adapter
105 reject(new Error(`Timed out connecting to page CDP target ${url}`));
106 }, 30_000);
107 socket.addEventListener(
108 "open",
109 () => {
110 clearTimeout(timer);
111 resolve(new CdpPage(socket));
112 },
113 { once: true },
114 );
115 socket.addEventListener(
116 "error",
117 () => {
118 clearTimeout(timer);
119 // oxlint-disable-next-line executor/no-promise-reject, executor/no-error-constructor -- boundary: WebSocket connection promise adapter
120 reject(new Error(`Failed to connect to page CDP target ${url}`));
121 },
122 { once: true },
123 );

Callers

nothing calls this directly

Calls 5

rejectFunction · 0.85
setMethod · 0.80
closeMethod · 0.65
sendMethod · 0.65
resolveFunction · 0.50

Tested by

no test coverage detected