CoolFace
Apppublic

Leon4gr45/builder

sourceHugging Facemitupdated 2d agoView on Hugging Face
0likes
workspace-context.ts43 linesDownload Raw Back to api
1/**2 * Workspace Context Helper3 *4 * Extracts workspace ID from route params, verifies user access,5 * and returns the correct adapter. Used by all workspace-scoped API routes.6 */7 8import 'server-only';9 10import { requireAuth, type SessionData } from '@/lib/auth/session';11import { verifyWorkspaceAccess } from '@/lib/auth/system-database';12import { getWorkspaceAdapter } from '@/lib/vfs/adapters/server';13import { SQLiteAdapter } from '@/lib/vfs/adapters/sqlite-adapter';14 15export interface WorkspaceContext {16  session: SessionData;17  workspaceId: string;18  adapter: SQLiteAdapter;19}20 21/**22 * Get workspace context for an API route.23 * Authenticates the user, extracts workspaceId from params, verifies access,24 * and returns an initialized adapter for the workspace.25 *26 * @param params - Route params containing workspaceId27 * @param requiredRole - Minimum role needed (default: 'editor')28 * @throws Error('Unauthorized') if not authenticated29 * @throws Error('Workspace access denied') if no access30 * @throws Error('Insufficient workspace permissions') if role too low31 */32export async function getWorkspaceContext(33  params: Promise<{ workspaceId: string }>,34  requiredRole: 'owner' | 'editor' | 'viewer' = 'editor'35): Promise<WorkspaceContext> {36  const session = await requireAuth();37  const { workspaceId } = await params;38  verifyWorkspaceAccess(session.userId, workspaceId, requiredRole);39  const adapter = getWorkspaceAdapter(workspaceId);40  await adapter.init();41  return { session, workspaceId, adapter };42}43