| | 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; |
| | } |
| |
|