// Evaluate an expression inside a running Obsidian started with // --remote-debugging-port. Usage: bun t/cdp-eval.ts "" const [port, expression] = process.argv.slice(2); const targets = (await ( await fetch(`http://localhost:${port}/json`) ).json()) as { type: string; title: string; webSocketDebuggerUrl: string; }[]; const page = targets.find((t) => t.type === "page"); if (!page) { throw new Error("no page target"); } const ws = new WebSocket(page.webSocketDebuggerUrl); await new Promise((resolve) => ws.addEventListener("open", resolve)); const reply = new Promise((resolve) => { ws.addEventListener("message", (event) => { const data = JSON.parse(String(event.data)); if (data.id === 1) { resolve( JSON.stringify(data.result?.result?.value ?? data.result ?? data) ); } }); }); ws.send( JSON.stringify({ id: 1, method: "Runtime.evaluate", params: { awaitPromise: true, expression, returnByValue: true }, }) ); console.log(await reply); ws.close();