| const { err } = require("../logger"); |
| const { fetchRouter, pipeSSE } = require("./base"); |
|
|
| |
| const URL_MAP = { |
| "/chat/completions": "/v1/chat/completions", |
| "/v1/messages": "/v1/messages", |
| "/responses": "/v1/responses", |
| }; |
|
|
| function resolveRouterPath(reqUrl) { |
| for (const [pattern, routerPath] of Object.entries(URL_MAP)) { |
| if (reqUrl.includes(pattern)) return routerPath; |
| } |
| return "/v1/chat/completions"; |
| } |
|
|
| |
| |
| |
| async function intercept(req, res, bodyBuffer, mappedModel) { |
| try { |
| const body = JSON.parse(bodyBuffer.toString()); |
| body.model = mappedModel; |
| const routerPath = resolveRouterPath(req.url); |
| const routerRes = await fetchRouter(body, routerPath, req.headers); |
| await pipeSSE(routerRes, res); |
| } catch (error) { |
| err(`[copilot] ${error.message}`); |
| if (!res.headersSent) res.writeHead(500, { "Content-Type": "application/json" }); |
| res.end(JSON.stringify({ error: { message: error.message, type: "mitm_error" } })); |
| } |
| } |
|
|
| module.exports = { intercept }; |
|
|