fix(api,web): separate workspace context from auth session (#534)
Some checks failed
ci/woodpecker/push/api Pipeline failed
ci/woodpecker/push/orchestrator Pipeline failed
ci/woodpecker/push/web Pipeline failed

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>
This commit is contained in:
2026-02-28 09:04:15 -06:00
parent d2c51eda91
commit 023949f1e0
19 changed files with 596 additions and 65 deletions

View File

@@ -13,9 +13,14 @@ export interface AuthUser {
name: string;
image?: string;
emailVerified?: boolean;
// Workspace context (added for workspace-scoped operations)
/**
* @deprecated Never populated by BetterAuth session. Workspace context is
* fetched separately via GET /api/workspaces. Will be removed in a future pass.
*/
workspaceId?: string;
/** @deprecated See workspaceId. */
currentWorkspaceId?: string;
/** @deprecated See workspaceId. */
workspaceRole?: string;
}