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

Class CdpClient

tooling/scripts/perf-web-runtime.mjs:333–394  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

331}
332
333class CdpClient {
334 constructor(webSocketUrl) {
335 this.webSocketUrl = webSocketUrl
336 this.nextId = 1
337 this.pending = new Map()
338 this.listeners = new Map()
339 }
340
341 connect() {
342 return new Promise((resolvePromise, rejectPromise) => {
343 this.socket = new WebSocket(this.webSocketUrl)
344 this.socket.on('open', resolvePromise)
345 this.socket.on('error', rejectPromise)
346 this.socket.on('message', (raw) => {
347 const message = JSON.parse(String(raw))
348 if (message.id && this.pending.has(message.id)) {
349 const { resolve: resolvePending, reject } = this.pending.get(message.id)
350 this.pending.delete(message.id)
351 if (message.error) reject(new Error(message.error.message))
352 else resolvePending(message.result ?? {})
353 return
354 }
355 if (message.method) {
356 const listeners = this.listeners.get(message.method) ?? []
357 for (const listener of listeners) listener(message.params ?? {})
358 }
359 })
360 })
361 }
362
363 send(method, params = {}) {
364 const id = this.nextId
365 this.nextId += 1
366 return new Promise((resolvePromise, rejectPromise) => {
367 this.pending.set(id, { resolve: resolvePromise, reject: rejectPromise })
368 this.socket.send(JSON.stringify({ id, method, params }))
369 })
370 }
371
372 on(method, listener) {
373 const listeners = this.listeners.get(method) ?? []
374 listeners.push(listener)
375 this.listeners.set(method, listeners)
376 }
377
378 waitFor(method, timeoutMs = 10000) {
379 return new Promise((resolvePromise, rejectPromise) => {
380 const timer = setTimeout(() => {
381 rejectPromise(new Error(`Timed out waiting for CDP event ${method}`))
382 }, timeoutMs)
383 this.on(method, (params) => {
384 clearTimeout(timer)
385 resolvePromise(params)
386 })
387 })
388 }
389
390 close() {

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected