41 lines
1.3 KiB
TypeScript
41 lines
1.3 KiB
TypeScript
/* Accepts incoming requests at either the /kobold or /openai routes and then
|
|
routes them to the appropriate handler to be forwarded to the OpenAI API.
|
|
Incoming OpenAI requests are more or less 1:1 with the OpenAI API, but only a
|
|
subset of the API is supported. Kobold requests must be transformed into
|
|
equivalent OpenAI requests. */
|
|
|
|
import * as express from "express";
|
|
import { gatekeeper } from "./gatekeeper";
|
|
import { checkRisuToken } from "./check-risu-token";
|
|
import { openai } from "./openai";
|
|
import { anthropic } from "./anthropic";
|
|
import { googlePalm } from "./palm";
|
|
import { aws } from "./aws";
|
|
|
|
const proxyRouter = express.Router();
|
|
proxyRouter.use(
|
|
express.json({ limit: "1536kb" }),
|
|
express.urlencoded({ extended: true, limit: "1536kb" })
|
|
);
|
|
proxyRouter.use(gatekeeper);
|
|
proxyRouter.use(checkRisuToken);
|
|
proxyRouter.use((req, _res, next) => {
|
|
req.startTime = Date.now();
|
|
req.retryCount = 0;
|
|
next();
|
|
});
|
|
proxyRouter.use("/openai", openai);
|
|
proxyRouter.use("/anthropic", anthropic);
|
|
proxyRouter.use("/google-palm", googlePalm);
|
|
proxyRouter.use("/aws/claude", aws);
|
|
// Redirect browser requests to the homepage.
|
|
proxyRouter.get("*", (req, res, next) => {
|
|
const isBrowser = req.headers["user-agent"]?.includes("Mozilla");
|
|
if (isBrowser) {
|
|
res.redirect("/");
|
|
} else {
|
|
next();
|
|
}
|
|
});
|
|
export { proxyRouter as proxyRouter };
|