Something went wrong. Try again.
The IoT platform Cloudflare didn't build. Telemetry, realtime dashboards, and automations on Workers + D1 + R2 + Durable Objects — in your… nodrix.live
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465import { createMiddleware } from 'hono/factory';import type { Env } from '../../env';import { buildAuth } from '../auth';
export type SessionUser = { id: string; email: string; role: 'owner' | 'admin' | 'member'; name: string | null; first_name: string | null; last_name: string | null; image: string | null;};
export type SessionContext = { id: string; token: string; expires_at: number;};
export type UserContextVars = { user: SessionUser; session: SessionContext;};
// Resolves the current session via Better Auth. Returns 401 if no valid// session cookie is present. Populates `user` + `session` context vars used// downstream by admin route handlers + resolveProject.export const requireSession = createMiddleware<{ Bindings: Env; Variables: UserContextVars;}>(async (c, next) => { const auth = await buildAuth(c.env, c.req.raw); const result = await auth.api.getSession({ headers: c.req.raw.headers }); if (!result || !result.user || !result.session) { return c.json({ error: 'unauthorized' }, 401); }
const u = result.user as unknown as { id: string; email: string; role?: 'owner' | 'admin' | 'member'; name?: string | null; first_name?: string | null; last_name?: string | null; image?: string | null; };
c.set('user', { id: u.id, email: u.email, role: (u.role ?? 'member') as SessionUser['role'], name: u.name ?? null, first_name: u.first_name ?? null, last_name: u.last_name ?? null, image: u.image ?? null, }); c.set('session', { id: result.session.id, token: result.session.token, expires_at: Math.floor(new Date(result.session.expiresAt).getTime() / 1000), }); await next();});