|
import { Request, Response } from "express"; |
|
import showdown from "showdown"; |
|
import { keys } from "./keys"; |
|
|
|
export const handleInfoPage = (req: Request, res: Response) => { |
|
|
|
const host = req.get("host"); |
|
const isHuggingface = host?.includes("hf.space"); |
|
const protocol = isHuggingface ? "https" : req.protocol; |
|
res.send(getInfoPageHtml(protocol + "://" + host)); |
|
}; |
|
|
|
function getInfoPageHtml(host: string) { |
|
const keylist = keys.list(); |
|
const info = { |
|
message: "OpenAI Reverse Proxy", |
|
uptime: process.uptime(), |
|
timestamp: Date.now(), |
|
baseUrl: host, |
|
kobold: host + "/proxy/kobold" + " (not yet implemented)", |
|
openai: host + "/proxy/openai", |
|
keys: { |
|
all: keylist.length, |
|
active: keylist.filter((k) => !k.isDisabled).length, |
|
trial: keylist.filter((k) => k.isTrial).length, |
|
gpt4: keylist.filter((k) => k.isGpt4).length, |
|
proompts: keylist.reduce((acc, k) => acc + k.promptCount, 0), |
|
}, |
|
}; |
|
|
|
const readme = require("fs").readFileSync("README.md", "utf8"); |
|
const readmeBody = readme.split("---")[2]; |
|
const converter = new showdown.Converter(); |
|
const html = converter.makeHtml(readmeBody); |
|
|
|
const pageBody = `<!DOCTYPE html> |
|
<html lang="en"> |
|
<head> |
|
<meta charset="utf-8" /> |
|
<title>OpenAI Reverse Proxy</title> |
|
</head> |
|
<body style="font-family: sans-serif; background-color: #f0f0f0; padding: 1em;" |
|
${html} |
|
<hr /> |
|
<h2>Service Info</h2> |
|
<pre>${JSON.stringify(info, null, 2)}</pre> |
|
</body> |
|
</html>`; |
|
|
|
return pageBody; |
|
} |
|
|