/** * Workspaces API Client * User-scoped workspace discovery — does NOT require X-Workspace-Id header. */ import type { WorkspaceMemberRole } from "@mosaic/shared"; import { apiDelete, apiGet, apiPatch, apiPost } from "./client"; export interface UserWorkspace { id: string; name: string; ownerId: string; role: WorkspaceMemberRole; createdAt: string; } export interface CreateWorkspaceDto { name: string; } export interface CreatedWorkspace { id: string; name: string; ownerId: string; settings: Record; createdAt: string; updatedAt: string; memberCount: number; } export interface WorkspaceMemberUser { id: string; email: string; name: string | null; image: string | null; } export interface WorkspaceMemberEntry { workspaceId: string; userId: string; role: WorkspaceMemberRole; joinedAt: string; user: WorkspaceMemberUser; } export interface AddMemberDto { userId: string; role: WorkspaceMemberRole; } export interface UpdateMemberRoleDto { role: WorkspaceMemberRole; } export async function fetchUserWorkspaces(): Promise { return apiGet("/api/workspaces"); } export async function createWorkspace(dto: CreateWorkspaceDto): Promise { return apiPost("/api/admin/workspaces", dto); } export async function fetchWorkspaceMembers(workspaceId: string): Promise { return apiGet(`/api/workspaces/${workspaceId}/members`); } export async function addWorkspaceMember( workspaceId: string, dto: AddMemberDto ): Promise { return apiPost(`/api/workspaces/${workspaceId}/members`, dto); } export async function updateWorkspaceMemberRole( workspaceId: string, userId: string, dto: UpdateMemberRoleDto ): Promise { return apiPatch(`/api/workspaces/${workspaceId}/members/${userId}`, dto); } export async function removeWorkspaceMember(workspaceId: string, userId: string): Promise { await apiDelete(`/api/workspaces/${workspaceId}/members/${userId}`); }