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

Class CdpPage

e2e/desktop-packaged/supervised-attach.test.ts:76–182  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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

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