MCPcopy Create free account
hub / github.com/ZenNotes/zennotes / CdpClient

Class CdpClient

tooling/scripts/perf-desktop-runtime.mjs:304–365  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

302}
303
304class CdpClient {
305 constructor(webSocketUrl) {
306 this.webSocketUrl = webSocketUrl
307 this.nextId = 1
308 this.pending = new Map()
309 this.listeners = new Map()
310 }
311
312 connect() {
313 return new Promise((resolvePromise, rejectPromise) => {
314 this.socket = new WebSocket(this.webSocketUrl)
315 this.socket.on('open', resolvePromise)
316 this.socket.on('error', rejectPromise)
317 this.socket.on('message', (raw) => {
318 const message = JSON.parse(String(raw))
319 if (message.id && this.pending.has(message.id)) {
320 const { resolve: resolvePending, reject } = this.pending.get(message.id)
321 this.pending.delete(message.id)
322 if (message.error) reject(new Error(message.error.message))
323 else resolvePending(message.result ?? {})
324 return
325 }
326 if (message.method) {
327 const listeners = this.listeners.get(message.method) ?? []
328 for (const listener of listeners) listener(message.params ?? {})
329 }
330 })
331 })
332 }
333
334 send(method, params = {}) {
335 const id = this.nextId
336 this.nextId += 1
337 return new Promise((resolvePromise, rejectPromise) => {
338 this.pending.set(id, { resolve: resolvePromise, reject: rejectPromise })
339 this.socket.send(JSON.stringify({ id, method, params }))
340 })
341 }
342
343 on(method, listener) {
344 const listeners = this.listeners.get(method) ?? []
345 listeners.push(listener)
346 this.listeners.set(method, listeners)
347 }
348
349 waitFor(method, timeoutMs = 10000) {
350 return new Promise((resolvePromise, rejectPromise) => {
351 const timer = setTimeout(() => {
352 rejectPromise(new Error(`Timed out waiting for CDP event ${method}`))
353 }, timeoutMs)
354 this.on(method, (params) => {
355 clearTimeout(timer)
356 resolvePromise(params)
357 })
358 })
359 }
360
361 close() {

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected