import { Elysia } from "elysia" import { auth } from "@/lib/auth" import { rateLimit } from "@/lib/auth/rate-limit" import { healthRoutes, userRoutes, gamesRoutes, gameVersionsRoutes, hardwareRoutes, hardwareStatsRoutes, performanceRoutes, performanceVerifyRoutes, performanceSubmitRoutes, commentsRoutes, savedGamesRoutes, reportRoutes, contactRoutes, } from "@/lib/api" import { steamSearchRoutes } from "@/lib/api/steam-search" import { searchUnifiedRoutes } from "@/lib/api/search-unified" import { gameStubRoutes } from "@/lib/api/game-stub" import { gameStatsRoutes } from "@/lib/api/game-stats" import { gamesListingRoutes } from "@/lib/api/games-listing" const betterAuth = new Elysia({ name: "better-auth" }) .mount(auth.handler) .macro({ auth: { async resolve({ status, request: { headers } }) { const session = await auth.api.getSession({ headers, }) if (!session) return status(401) return { user: session.user, session: session.session, } }, }, }) export const app = new Elysia({ prefix: "/api" }) .onError(({ code, error, set, request }) => { console.error( `[API Error] ${code} ${request.url}`, error instanceof Error ? error.message : error, ) set.status = code === "NOT_FOUND" ? 404 : 500 return { error: code === "NOT_FOUND" ? "Not found" : "Internal server error", } }) .use(rateLimit(60, 100)) .use(betterAuth) // Health .use(healthRoutes) // Users .use(userRoutes) // Games + Versions .use(gamesRoutes) .use(gameVersionsRoutes) .use(gamesListingRoutes) // Hardware .use(hardwareRoutes) .use(hardwareStatsRoutes) // Performance .use(performanceRoutes) .use(performanceVerifyRoutes) .use(performanceSubmitRoutes) .use(reportRoutes) // Comments .use(commentsRoutes) // Steam search proxy .use(steamSearchRoutes) // Unified search .use(searchUnifiedRoutes) // Game stub creation .use(gameStubRoutes) // Game stats aggregation .use(gameStatsRoutes) // Saved games .use(savedGamesRoutes) // Contact form .use(contactRoutes) // Root .get("/", () => ({ name: "DeckyVault API", version: "2026.0.1", })) export const GET = app.fetch export const POST = app.fetch export const PUT = app.fetch export const DELETE = app.fetch export const PATCH = app.fetch export type App = typeof app