/** * Copyright (c) 2020 Gitpod GmbH. All rights reserved. * Licensed under the GNU Affero General Public License (AGPL). * See License-AGPL.txt in the project root for license information. */ import { User, Workspace, NamedWorkspaceFeatureFlag } from "./protocol"; import { FindPrebuildsParams } from "./gitpod-service"; import { Project, Team, PrebuildWithStatus, TeamMemberInfo, TeamMemberRole } from "./teams-projects-protocol"; import { WorkspaceInstance, WorkspaceInstancePhase } from "./workspace-instance"; import { RoleOrPermission } from "./permission"; import { AccountStatement } from "./accounting-protocol"; import { InstallationAdminSettings } from "./installation-admin-protocol"; export interface AdminServer { adminGetUsers(req: AdminGetListRequest): Promise>; adminGetUser(id: string): Promise; adminBlockUser(req: AdminBlockUserRequest): Promise; adminDeleteUser(id: string): Promise; adminModifyRoleOrPermission(req: AdminModifyRoleOrPermissionRequest): Promise; adminModifyPermanentWorkspaceFeatureFlag(req: AdminModifyPermanentWorkspaceFeatureFlagRequest): Promise; adminGetTeamMembers(teamId: string): Promise; adminGetTeams(req: AdminGetListRequest): Promise>; adminGetTeamById(id: string): Promise; adminSetTeamMemberRole(teamId: string, userId: string, role: TeamMemberRole): Promise; adminGetWorkspaces(req: AdminGetWorkspacesRequest): Promise>; adminGetWorkspace(id: string): Promise; adminForceStopWorkspace(id: string): Promise; adminRestoreSoftDeletedWorkspace(id: string): Promise; adminGetProjectsBySearchTerm(req: AdminGetListRequest): Promise>; adminGetProjectById(id: string): Promise; adminFindPrebuilds(params: FindPrebuildsParams): Promise; adminSetLicense(key: string): Promise; adminGetAccountStatement(userId: string): Promise; adminSetProfessionalOpenSource(userId: string, shouldGetProfOSS: boolean): Promise; adminIsStudent(userId: string): Promise; adminAddStudentEmailDomain(userId: string, domain: string): Promise; adminGrantExtraHours(userId: string, extraHours: number): Promise; adminGetSettings(): Promise; adminUpdateSettings(settings: InstallationAdminSettings): Promise; } export interface AdminGetListRequest { offset: number; limit: number; orderBy: keyof T; orderDir: "asc" | "desc"; searchTerm?: string; } export interface AdminGetListResult { total: number; rows: T[]; } export interface AdminBlockUserRequest { id: string; blocked: boolean; } export interface AdminModifyRoleOrPermissionRequest { id: string; rpp: { r: RoleOrPermission; add: boolean; }[]; } export interface AdminModifyPermanentWorkspaceFeatureFlagRequest { id: string; changes: { featureFlag: NamedWorkspaceFeatureFlag; add: boolean; }[]; } export interface WorkspaceAndInstance extends Omit, Omit { workspaceId: string; workspaceCreationTime: string; instanceId: string; instanceCreationTime: string; phase: WorkspaceInstancePhase; } export namespace WorkspaceAndInstance { export function toWorkspace(wai: WorkspaceAndInstance): Workspace { return { id: wai.workspaceId, creationTime: wai.workspaceCreationTime, ...wai, }; } export function toInstance(wai: WorkspaceAndInstance): WorkspaceInstance | undefined { if (!wai.instanceId) { return undefined; } return { id: wai.instanceId, creationTime: wai.instanceCreationTime, ...wai, }; } } export type AdminGetWorkspacesRequest = AdminGetListRequest & AdminGetWorkspacesQuery; /** The fields are meant to be used either OR (not combined) */ export type AdminGetWorkspacesQuery = { /** we use this field in case we have a UUIDv4 and don't know whether it's an (old) workspace or instance id */ instanceIdOrWorkspaceId?: string; instanceId?: string; workspaceId?: string; ownerId?: string; };