@@ -205,103 +205,69 @@ async function connectGatewayOnce(params: {
205205 pending . clear ( ) ;
206206 } ) ;
207207
208- const connectId = randomUUID ( ) ;
209- ws . send (
210- JSON . stringify ( {
208+ const sendGatewayRequest = < T = unknown > (
209+ method : string ,
210+ requestParams : unknown ,
211+ timeoutMs : number ,
212+ ) : Promise < T > => {
213+ const id = randomUUID ( ) ;
214+ const frame = JSON . stringify ( {
211215 type : "req" ,
212- id : connectId ,
213- method : "connect" ,
214- params : {
215- minProtocol : PROTOCOL_VERSION ,
216- maxProtocol : PROTOCOL_VERSION ,
217- client : {
218- id : "openclaw-tui" ,
219- displayName : "docker-mcp-channels" ,
220- version : "1.0.0" ,
221- platform : process . platform ,
222- mode : "ui" ,
216+ id,
217+ method,
218+ params : requestParams ?? { } ,
219+ } ) ;
220+ return new Promise < T > ( ( resolve , reject ) => {
221+ const timeout = setTimeout ( ( ) => {
222+ pending . delete ( id ) ;
223+ reject ( new Error ( `gateway request timeout: ${ method } ` ) ) ;
224+ } , timeoutMs ) ;
225+ timeout . unref ?.( ) ;
226+ pending . set ( id , {
227+ resolve : ( value ) => {
228+ clearTimeout ( timeout ) ;
229+ resolve ( value as T ) ;
223230 } ,
224- role : "operator" ,
225- scopes : requestedScopes ,
226- caps : [ ] ,
227- auth : { token : params . token } ,
228- } ,
229- } ) ,
230- ) ;
231-
232- await new Promise < void > ( ( resolve , reject ) => {
233- const timeout = setTimeout ( ( ) => {
234- pending . delete ( connectId ) ;
235- reject ( new Error ( "gateway connect timeout" ) ) ;
236- } , GATEWAY_RPC_TIMEOUT_MS ) ;
237- timeout . unref ?.( ) ;
238- pending . set ( connectId , {
239- resolve : ( ) => {
240- clearTimeout ( timeout ) ;
241- resolve ( ) ;
242- } ,
243- reject : ( error ) => {
231+ reject : ( error ) => {
232+ clearTimeout ( timeout ) ;
233+ reject ( error ) ;
234+ } ,
235+ } ) ;
236+ try {
237+ ws . send ( frame ) ;
238+ } catch ( error ) {
244239 clearTimeout ( timeout ) ;
245- reject ( error ) ;
246- } ,
240+ pending . delete ( id ) ;
241+ reject ( error instanceof Error ? error : new Error ( String ( error ) ) ) ;
242+ }
247243 } ) ;
248- } ) ;
244+ } ;
249245
250- await new Promise < void > ( ( resolve , reject ) => {
251- const id = randomUUID ( ) ;
252- const timeout = setTimeout ( ( ) => {
253- pending . delete ( id ) ;
254- reject ( new Error ( "gateway sessions.subscribe timeout" ) ) ;
255- } , GATEWAY_RPC_TIMEOUT_MS ) ;
256- timeout . unref ?.( ) ;
257- pending . set ( id , {
258- resolve : ( ) => {
259- clearTimeout ( timeout ) ;
260- resolve ( ) ;
261- } ,
262- reject : ( error ) => {
263- clearTimeout ( timeout ) ;
264- reject ( error ) ;
246+ await sendGatewayRequest (
247+ "connect" ,
248+ {
249+ minProtocol : PROTOCOL_VERSION ,
250+ maxProtocol : PROTOCOL_VERSION ,
251+ client : {
252+ id : "openclaw-tui" ,
253+ displayName : "docker-mcp-channels" ,
254+ version : "1.0.0" ,
255+ platform : process . platform ,
256+ mode : "ui" ,
265257 } ,
266- } ) ;
267- ws . send (
268- JSON . stringify ( {
269- type : "req" ,
270- id,
271- method : "sessions.subscribe" ,
272- params : { } ,
273- } ) ,
274- ) ;
275- } ) ;
258+ role : "operator" ,
259+ scopes : requestedScopes ,
260+ caps : [ ] ,
261+ auth : { token : params . token } ,
262+ } ,
263+ GATEWAY_RPC_TIMEOUT_MS ,
264+ ) ;
265+
266+ await sendGatewayRequest ( "sessions.subscribe" , { } , GATEWAY_RPC_TIMEOUT_MS ) ;
276267
277268 return {
278269 request ( method , requestParams ) {
279- const id = randomUUID ( ) ;
280- ws . send (
281- JSON . stringify ( {
282- type : "req" ,
283- id,
284- method,
285- params : requestParams ?? { } ,
286- } ) ,
287- ) ;
288- return new Promise ( ( resolve , reject ) => {
289- const timeout = setTimeout ( ( ) => {
290- pending . delete ( id ) ;
291- reject ( new Error ( `gateway request timeout: ${ method } ` ) ) ;
292- } , GATEWAY_REQUEST_TIMEOUT_MS ) ;
293- timeout . unref ?.( ) ;
294- pending . set ( id , {
295- resolve : ( value ) => {
296- clearTimeout ( timeout ) ;
297- resolve ( value as T ) ;
298- } ,
299- reject : ( error ) => {
300- clearTimeout ( timeout ) ;
301- reject ( error ) ;
302- } ,
303- } ) ;
304- } ) ;
270+ return sendGatewayRequest ( method , requestParams , GATEWAY_REQUEST_TIMEOUT_MS ) ;
305271 } ,
306272 events,
307273 async close ( ) {
0 commit comments