Spaces:
Running
Running
File size: 2,514 Bytes
780d695 98c9143 780d695 98c9143 780d695 98c9143 780d695 98c9143 780d695 98c9143 780d695 98c9143 780d695 98c9143 780d695 98c9143 780d695 98c9143 780d695 98c9143 780d695 98c9143 780d695 98c9143 | 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 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | import { Hono } from "hono"
import { cors } from "hono/cors"
import { logger } from "hono/logger"
import { readFileSync } from "node:fs"
import {
createAuthMiddleware,
getConfiguredAdminApiKeys,
} from "./lib/request-auth"
import { traceIdMiddleware } from "./lib/trace"
import { completionRoutes } from "./routes/chat-completions/route"
import { configRoutes } from "./routes/admin/config/route"
import { embeddingRoutes } from "./routes/embeddings/route"
import { messageRoutes } from "./routes/messages/route"
import { modelRoutes } from "./routes/models/route"
import { providerMessageRoutes } from "./routes/provider/messages/route"
import { providerModelRoutes } from "./routes/provider/models/route"
import { responsesRoutes } from "./routes/responses/route"
import { tokenUsageRoute } from "./routes/token-usage/route"
import { tokenRoute } from "./routes/token/route"
import { usageRoute } from "./routes/usage/route"
export const server = new Hono()
server.use(traceIdMiddleware)
server.use(logger())
server.use(cors())
server.use(
"*",
createAuthMiddleware({
allowUnauthenticatedPaths: ["/", "/usage-viewer", "/usage-viewer/"],
shouldSkipPath: (path) => path.startsWith("/admin/"),
}),
)
server.use(
"/admin/*",
createAuthMiddleware({
getApiKeys: getConfiguredAdminApiKeys,
allowUnauthenticatedPaths: [],
allowWhenNoApiKeys: false,
}),
)
server.get("/", (c) => c.text("Server running"))
server.get("/usage-viewer", (c) => {
const usageViewerFileUrl = new URL("../pages/index.html", import.meta.url)
return c.html(readFileSync(usageViewerFileUrl, "utf8"))
})
server.get("/usage-viewer/", (c) => c.redirect("/usage-viewer", 301))
server.route("/chat/completions", completionRoutes)
server.route("/admin/config", configRoutes)
server.route("/models", modelRoutes)
server.route("/embeddings", embeddingRoutes)
server.route("/usage", usageRoute)
server.route("/token-usage", tokenUsageRoute)
server.route("/token", tokenRoute)
server.route("/responses", responsesRoutes)
// Compatibility with tools that expect v1/ prefix
server.route("/v1/chat/completions", completionRoutes)
server.route("/v1/models", modelRoutes)
server.route("/v1/embeddings", embeddingRoutes)
server.route("/v1/responses", responsesRoutes)
// Anthropic compatible endpoints
server.route("/v1/messages", messageRoutes)
// Provider scoped Anthropic-compatible endpoints
server.route("/:provider/v1/messages", providerMessageRoutes)
server.route("/:provider/v1/models", providerModelRoutes)
|