Spaces:
Sleeping
Sleeping
File size: 1,130 Bytes
7540aea | 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 | 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,
};
}
|