File size: 1,153 Bytes
88c4c60 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | const { err } = require("../logger");
const { fetchRouter, pipeSSE } = require("./base");
// Map Copilot endpoint → 9Router path
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";
}
/**
* Intercept Copilot request — replace model and forward to matching 9Router endpoint
*/
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 };
|