import "reflect-metadata"; import { NestFactory } from "@nestjs/core"; import { FastifyAdapter, type NestFastifyApplication } from "@nestjs/platform-fastify"; import { AppModule } from "./app.module.js"; import { serve } from "inngest/node"; import { inngest as workerInngest, functions } from "@courtmitra/worker"; import { getCapabilities } from "@courtmitra/adapters"; import { MissionsService } from "./missions/missions.service.js"; import { schema, type Database } from "@courtmitra/db"; import { DB } from "./db/db.module.js"; import { DEMO_CLERK_USER_ID, DEMO_USER_ID } from "./auth/demo-user.js"; async function ensureDemoUser(db: Database) { await db .insert(schema.users) .values({ id: DEMO_USER_ID, displayName: "Demo User", email: "demo@courtmitra.local", fullName: "Demo User", }) .onConflictDoNothing(); } async function bootstrap() { const app = await NestFactory.create(AppModule, new FastifyAdapter(), { logger: ["error", "warn", "log"], }); app.setGlobalPrefix("api"); app.enableCors({ origin: true }); const fastify = app.getHttpAdapter().getInstance(); if (process.env.DEMO_MODE === "true") { await ensureDemoUser(app.get(DB)); fastify.addHook("onRequest", async (req: any) => { req.userId = DEMO_USER_ID; req.clerkUserId = DEMO_CLERK_USER_ID; }); } fastify.get("/api/admin/health", async () => ({ status: "ok", ts: new Date().toISOString() })); fastify.get("/api/capabilities", async () => ({ capabilities: getCapabilities() })); const missions = app.get(MissionsService); fastify.get("/api/diag/missions", async () => { try { const result = await missions.list(DEMO_USER_ID); return { ok: true, count: result.length }; } catch (e: any) { return { ok: false, message: e.message, cause: e.cause?.message || e.cause?.code }; } }); const inngestHandler = serve({ client: workerInngest, functions }); fastify.route({ method: ["GET", "POST", "PUT"], url: "/api/inngest", handler: async (request: any, reply: any) => { reply.hijack(); inngestHandler(request.raw, reply.raw); }, }); const port = Number(process.env.API_PORT ?? process.env.PORT ?? 3001); await app.listen(port, "0.0.0.0"); console.log(`[api] listening on http://localhost:${port}/api`); } bootstrap().catch((err) => { console.error(err); process.exit(1); }); // End of file placeholder