BetterAuth session responses contain only identity fields — workspace context (workspaceId, currentWorkspaceId) was never returned, causing "Workspace ID is required" on every guarded endpoint after login. Add GET /api/workspaces endpoint (AuthGuard only, no WorkspaceGuard) that returns user workspace memberships with auto-provisioning for new users. Frontend auth-context now fetches workspaces after session check and persists the default to localStorage. Race condition in auto-provisioning is guarded by re-querying inside the transaction. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
27 lines
646 B
TypeScript
27 lines
646 B
TypeScript
/**
|
|
* Workspaces API Client
|
|
* User-scoped workspace discovery — does NOT require X-Workspace-Id header.
|
|
*/
|
|
|
|
import { apiGet } from "./client";
|
|
|
|
/**
|
|
* A workspace entry from the user's membership list.
|
|
* Matches WorkspaceResponseDto from the API.
|
|
*/
|
|
export interface UserWorkspace {
|
|
id: string;
|
|
name: string;
|
|
ownerId: string;
|
|
role: string;
|
|
createdAt: string;
|
|
}
|
|
|
|
/**
|
|
* Fetch all workspaces the authenticated user is a member of.
|
|
* The API auto-provisions a default workspace if the user has none.
|
|
*/
|
|
export async function fetchUserWorkspaces(): Promise<UserWorkspace[]> {
|
|
return apiGet<UserWorkspace[]>("/api/workspaces");
|
|
}
|