(request)
| 425 | } |
| 426 | |
| 427 | async function handleRequest(request) { |
| 428 | let responsePayload; |
| 429 | if (isWebSocketUpgradeRequest(request)) { |
| 430 | await complete({ |
| 431 | requestId: request.id, |
| 432 | responseBodyBase64: Buffer.from( |
| 433 | "Studio provider RPC does not tunnel WebSocket upgrade requests.", |
| 434 | ).toString("base64"), |
| 435 | responseHeaders: { "content-type": "text/plain; charset=utf-8" }, |
| 436 | responseStatus: 426, |
| 437 | }); |
| 438 | return; |
| 439 | } |
| 440 | try { |
| 441 | responsePayload = await cachedProxyResponse(request); |
| 442 | } catch (error) { |
| 443 | console.error( |
| 444 | `[simdeck-provider-bridge] request ${request.id} ${request.method} ${request.path} failed: ${describeError(error)}`, |
| 445 | ); |
| 446 | await handleLocalProxyFailure(error); |
| 447 | if (request.method !== "GET") { |
| 448 | await complete({ |
| 449 | requestId: request.id, |
| 450 | error: describeError(error), |
| 451 | }); |
| 452 | return; |
| 453 | } |
| 454 | try { |
| 455 | responsePayload = await proxyLocalRequest(request); |
| 456 | } catch (retryError) { |
| 457 | console.error( |
| 458 | `[simdeck-provider-bridge] request ${request.id} ${request.method} ${request.path} retry failed: ${describeError(retryError)}`, |
| 459 | ); |
| 460 | await complete({ |
| 461 | requestId: request.id, |
| 462 | error: describeError(retryError), |
| 463 | }); |
| 464 | return; |
| 465 | } |
| 466 | } |
| 467 | |
| 468 | try { |
| 469 | await complete({ |
| 470 | requestId: request.id, |
| 471 | ...responsePayload, |
| 472 | }); |
| 473 | } catch (error) { |
| 474 | console.error( |
| 475 | `[simdeck-provider-bridge] request ${request.id} ${request.method} ${request.path} completion failed: ${describeError(error)}`, |
| 476 | ); |
| 477 | throw error; |
| 478 | } |
| 479 | } |
| 480 | |
| 481 | function runProviderRequest(request) { |
| 482 | const task = handleRequest(request).catch((error) => { |
no test coverage detected