MCPcopy
hub / github.com/garrytan/gstack / getOrCreateSession

Function getOrCreateSession

browse/src/cdp-inspector.ts:95–138  ·  view source on GitHub ↗

* Get or create a CDP session for the given page. * Enables DOM + CSS domains on first use.

(page: Page)

Source from the content-addressed store, hash-verified

93 * Enables DOM + CSS domains on first use.
94 */
95async function getOrCreateSession(page: Page): Promise<any> {
96 let session = cdpSessions.get(page);
97 if (session) {
98 // Verify session is still alive
99 try {
100 await session.send('DOM.getDocument', { depth: 0 });
101 return session;
102 } catch (err: any) {
103 // Session is stale — recreate (CDP disconnects throw on closed/Target errors)
104 if (!err?.message?.includes('closed') && !err?.message?.includes('Target') && !err?.message?.includes('detached')) throw err;
105 cdpSessions.delete(page);
106 initializedPages.delete(page);
107 }
108 }
109
110 session = await getOrCreateCdpSession(page, cdpSessions);
111
112 // Enable DOM and CSS domains on first init for this page. The session
113 // itself is cached + close-detached by getOrCreateCdpSession; the
114 // initializedPages WeakSet is inspector-layer state that needs its
115 // own close hook to stay in sync.
116 if (!initializedPages.has(page)) {
117 await session.send('DOM.enable');
118 await session.send('CSS.enable');
119 initializedPages.add(page);
120 page.once('close', () => initializedPages.delete(page));
121 }
122
123 // Auto-detach on navigation — DOM/CSS domain state is tied to the
124 // document. Close-detach (from getOrCreateCdpSession) handles the
125 // tab-close case; framenavigated catches in-tab navigation that
126 // invalidates inspector state without closing the tab.
127 page.once('framenavigated', () => {
128 try {
129 session.detach().catch(() => {});
130 } catch (err: any) {
131 if (!err?.message?.includes('closed') && !err?.message?.includes('Target') && !err?.message?.includes('detached')) throw err;
132 }
133 cdpSessions.delete(page);
134 initializedPages.delete(page);
135 });
136
137 return session;
138}
139
140// ─── Modification History ───────────────────────────────────────
141

Callers 2

inspectElementFunction · 0.85
modifyStyleFunction · 0.85

Calls 3

getOrCreateCdpSessionFunction · 0.90
sendMethod · 0.80
getMethod · 0.45

Tested by

no test coverage detected