/** * Workspace & Team Domain Types * Defines workspaces, teams, and organizational structures */ import type { Email, Timestamp, UUID } from './common'; import type { UserRole } from './user'; /** * Workspace is the top-level organizational unit */ export interface Workspace { id: UUID; name: string; slug: string; description?: string; logo?: string; avatar?: string; ownerId: UUID; planType: 'free' | 'pro' | 'team' | 'enterprise'; maxMembers: number; maxStorage: number; usedStorage: number; createdAt: Timestamp; updatedAt: Timestamp; deletedAt?: Timestamp; isActive: boolean; isArchived: boolean; settings: WorkspaceSettings; } /** * Workspace configuration and settings */ export interface WorkspaceSettings { visibility: 'private' | 'internal' | 'public'; allowPublicSharing: boolean; allowExternalUsers: boolean; requireEmailVerification: boolean; defaultRole: UserRole; enforceSSO: boolean; ssoProvider?: string; twoFactorRequired: boolean; ipWhitelist?: string[]; dataResidency: 'US' | 'EU' | 'APAC' | 'Global'; } /** * Member of a workspace with role and permissions */ export interface WorkspaceMember { id: UUID; workspaceId: UUID; userId: UUID; role: WorkspaceRole; joinedAt: Timestamp; invitedBy?: UUID; lastActivityAt?: Timestamp; status: 'active' | 'invited' | 'inactive' | 'removed'; } /** * Workspace-specific role with granular permissions */ export type WorkspaceRole = 'owner' | 'admin' | 'member' | 'guest' | 'editor' | 'viewer'; /** * Team within a workspace (sub-group for organizing members) */ export interface Team { id: UUID; workspaceId: UUID; name: string; description?: string; avatar?: string; ownerId: UUID; createdAt: Timestamp; updatedAt: Timestamp; isArchived: boolean; } /** * Team member assignment */ export interface TeamMember { id: UUID; teamId: UUID; userId: UUID; joinedAt: Timestamp; role: TeamRole; } /** * Role within a team */ export type TeamRole = 'owner' | 'lead' | 'member' | 'guest'; /** * Organization (optional higher-level container for multiple workspaces) */ export interface Organization { id: UUID; name: string; legalName?: string; slug: string; description?: string; logo?: string; ownerId: UUID; website?: string; industry?: string; companySize?: 'startup' | 'small' | 'medium' | 'large' | 'enterprise'; createdAt: Timestamp; updatedAt: Timestamp; deletedAt?: Timestamp; } /** * Organization member (higher level than workspace member) */ export interface OrganizationMember { id: UUID; organizationId: UUID; userId: UUID; role: OrganizationRole; joinedAt: Timestamp; } /** * Role at organization level */ export type OrganizationRole = 'owner' | 'admin' | 'member' | 'guest'; /** * Workspace invitation */ export interface WorkspaceInvitation { id: UUID; workspaceId: UUID; email: Email; role: WorkspaceRole; invitedBy: UUID; createdAt: Timestamp; expiresAt: Timestamp; acceptedAt?: Timestamp; token: string; status: 'pending' | 'accepted' | 'expired' | 'declined'; } /** * Workspace usage statistics */ export interface WorkspaceUsage { workspaceId: UUID; totalMembers: number; activeMembers: number; totalDocuments: number; totalCollaborators: number; storageUsed: number; apiCallsUsed: number; lastUpdated: Timestamp; } /** * Audit log entry for workspace actions */ export interface AuditLogEntry { id: UUID; workspaceId: UUID; userId: UUID; action: WorkspaceAction; resourceType: 'workspace' | 'team' | 'member' | 'document' | 'settings'; resourceId: UUID; changes?: Record; timestamp: Timestamp; ipAddress?: string; userAgent?: string; } /** * Type of workspace action for audit logs */ export type WorkspaceAction = 'workspace_created' | 'workspace_updated' | 'workspace_deleted' | 'workspace_archived' | 'member_added' | 'member_removed' | 'member_role_changed' | 'team_created' | 'team_updated' | 'team_deleted' | 'settings_updated' | 'api_key_created' | 'api_key_revoked'; /** * Billing information for workspace */ export interface WorkspaceBilling { workspaceId: UUID; planType: 'free' | 'pro' | 'team' | 'enterprise'; status: 'active' | 'past_due' | 'cancelled' | 'expired'; currentPeriodStart: Timestamp; currentPeriodEnd: Timestamp; renewalDate?: Timestamp; cancelledAt?: Timestamp; stripeCustomerId?: string; stripeSubscriptionId?: string; } /** * Type guard to check if a workspace role is admin or above */ export declare function isWorkspaceAdmin(role: WorkspaceRole): boolean; /** * Type guard to check if a workspace role has edit permissions */ export declare function canEditWorkspace(role: WorkspaceRole): boolean; //# sourceMappingURL=workspace.d.ts.map