MCPcopy Create free account
hub / github.com/EsperoTech/yaade / connectWebsocket

Function connectWebsocket

extension/background.js:87–149  ·  view source on GitHub ↗
(request, senderTabId, sendResponse)

Source from the content-addressed store, hash-verified

85}
86
87function connectWebsocket(request, senderTabId, sendResponse) {
88 const wsId = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);
89 let ws;
90 try {
91 const headers = request.request.headers?.reduce((acc, el) => {
92 acc[el.key] = el.value;
93 return acc;
94 }, {}) ?? {};
95 ws = new WebSocket(request.request.data.uri, [], {
96 headers
97 });
98 } catch (err) {
99 console.error("error connecting to websocket", err);
100 sendResponse({ status: "error", err: err.message });
101 return;
102 }
103
104 const connectionTimeout = setTimeout(() => {
105 if (ws.readyState !== WebSocket.OPEN) {
106 ws.close();
107 websockets.delete(wsId);
108 console.error("websocket connection timeout", wsId);
109 sendResponse({ status: "error", err: "Connection timeout" });
110 }
111 }, 3000);
112
113 ws.onclose = () => {
114 if (websockets.has(wsId)) {
115 websockets.delete(wsId);
116 clearTimeout(connectionTimeout);
117 chrome.tabs.sendMessage(senderTabId, {
118 type: "ws-close",
119 result: {
120 status: "error",
121 err: "WebSocket closed unexpectedly",
122 wsId: wsId,
123 }
124 });
125 }
126 };
127 ws.onerror = (e) => {
128 ws.close();
129 clearTimeout(connectionTimeout);
130 sendResponse({ status: "error", err: "WebSocket error", wsId, metaData: request.metaData });
131 };
132 ws.onopen = () => {
133 websockets.set(wsId, ws);
134 sendResponse({ status: "success", wsId, metaData: request.metaData });
135 };
136 ws.onmessage = (event) => {
137 let parsedData = event.data;
138 if (typeof event.data === 'object') {
139 parsedData = JSON.stringify(event.data);
140 }
141 chrome.tabs.sendMessage(senderTabId, {
142 type: "ws-read",
143 result: {
144 wsId: wsId,

Callers 1

background.jsFile · 0.85

Calls 4

setTimeoutFunction · 0.50
clearTimeoutFunction · 0.50
toStringMethod · 0.45
setMethod · 0.45

Tested by

no test coverage detected