Something went wrong. Try again.
[READ-ONLY] Mirror of https://github.com/openstatusHQ/openstatus. ๐ซ Status page with uptime monitoring & API monitoring as code ๐ซ openstatus.dev
bun drizzle-orm monitoring monitoring-as-code nextjs observability on-call open-source shadcn-ui status-page statuspage synthetic-monitoring tinybird turso uptime uptime-checker uptime-monitor
Something went wrong. Try again.
2.3 kB ยท 68 lines
TypeScript
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869import { asc, db, eq, schema } from "@openstatus/db";import type { ServiceContext } from "@openstatus/services";
import { auth } from "@/lib/auth";import { WORKSPACE_SLUG_COOKIE } from "@/lib/workspace-cookie";
/** * Build a `ServiceContext` from a Next.js Edge Route Handler request. * Resolves session โ user โ workspace from the request, mirroring the * shape that tRPC's `enforceUserIsAuthed` middleware produces. * * Returns `null` when the caller is unauthenticated or has no * accessible workspace โ route handlers should return 401/404 in that case. */export async function getServiceContextFromRequest( req: Request,): Promise<ServiceContext | null> { const session = await auth(); if (!session?.user?.id) return null;
const userId = Number(session.user.id); if (Number.isNaN(userId)) return null;
// `orderBy` on the join makes the no-cookie fallback below deterministic: // `usersToWorkspaces[0]` is the user's earliest membership instead of // whatever order Turso happens to return. const userAndWorkspace = await db.query.user.findFirst({ where: eq(schema.user.id, userId), with: { usersToWorkspaces: { orderBy: (t) => asc(t.createdAt), with: { workspace: true, }, }, }, });
if (!userAndWorkspace) return null;
// Use slice rather than split("=")[1] so values containing "=" (e.g. // base64-padded variants in other flows) survive intact. const workspaceSlugCookie = (() => { const raw = req.headers .get("cookie") ?.split(";") .map((c) => c.trim()) .find((c) => c.startsWith(`${WORKSPACE_SLUG_COOKIE}=`)); return raw ? raw.slice(raw.indexOf("=") + 1) : undefined; })();
// Fall back to first workspace when the cookie is stale (slug renamed, // user removed) โ matches `enforceUserIsAuthed` in tRPC. const activeWorkspace = workspaceSlugCookie ? (userAndWorkspace.usersToWorkspaces?.find( ({ workspace }) => workspace.slug === workspaceSlugCookie, )?.workspace ?? userAndWorkspace.usersToWorkspaces?.[0]?.workspace) : userAndWorkspace.usersToWorkspaces?.[0]?.workspace;
if (!activeWorkspace) return null;
const workspace = schema.selectWorkspaceSchema.parse(activeWorkspace);
return { workspace, actor: { type: "user", userId }, };}