claw-web-v2 / server /_core /context.ts
Claw Web
Claw Web v1.0 — AI Agent Web Interface with MiMo-V2-Flash
7540aea
import type { CreateExpressContextOptions } from "@trpc/server/adapters/express";
import type { User } from "../../drizzle/schema";
import * as db from "../db";
export type TrpcContext = {
req: CreateExpressContextOptions["req"];
res: CreateExpressContextOptions["res"];
user: User | null;
};
export async function createContext(
opts: CreateExpressContextOptions
): Promise<TrpcContext> {
let user: User | null = null;
// Dev mode: auto-authenticate as dev user (no OAuth needed)
if (process.env.DEV_MODE === "true" || !process.env.OAUTH_SERVER_URL) {
user = (await db.getUserByOpenId("dev-user")) || null;
if (!user) {
await db.upsertUser({
openId: "dev-user",
name: "Developer",
email: "dev@claw.local",
role: "admin",
});
user = (await db.getUserByOpenId("dev-user")) || null;
}
} else {
// Production mode: use OAuth SDK
try {
const { sdk } = await import("./sdk");
user = await sdk.authenticateRequest(opts.req);
} catch {
user = null;
}
}
return {
req: opts.req,
res: opts.res,
user,
};
}