/** * 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, EmailDomainFilterEntry } from "./protocol"; import { BlockedRepository } from "./blocked-repositories-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 { BillingMode } from "./billing-mode"; import { CostCenterJSON, ListUsageRequest, ListUsageResponse } from "./usage"; export interface AdminServer { adminGetUsers(req: AdminGetListRequest): Promise>; adminGetUser(id: string): Promise; adminBlockUser(req: AdminBlockUserRequest): Promise; adminDeleteUser(id: string): Promise; adminVerifyUser(id: string): Promise; adminModifyRoleOrPermission(req: AdminModifyRoleOrPermissionRequest): Promise; adminModifyPermanentWorkspaceFeatureFlag(req: AdminModifyPermanentWorkspaceFeatureFlagRequest): Promise; adminCreateBlockedRepository(urlRegexp: string, blockUser: boolean): Promise; adminDeleteBlockedRepository(id: number): Promise; adminGetBlockedRepositories( req: AdminGetListRequest, ): 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; adminGetWorkspaceInstances(workspaceId: string): Promise; adminForceStopWorkspace(id: string): Promise; adminRestoreSoftDeletedWorkspace(id: string): Promise; adminGetProjectsBySearchTerm(req: AdminGetListRequest): Promise>; adminGetProjectById(id: string): Promise; adminFindPrebuilds(params: FindPrebuildsParams): Promise; adminGetBillingMode(attributionId: string): Promise; adminGetCostCenter(attributionId: string): Promise; adminSetUsageLimit(attributionId: string, usageLimit: number): Promise; adminListUsage(req: ListUsageRequest): Promise; adminAddUsageCreditNote(attributionId: string, credits: number, note: string): Promise; adminGetUsageBalance(attributionId: string): Promise; adminGetBlockedEmailDomains(): Promise; adminSaveBlockedEmailDomain(entry: EmailDomainFilterEntry): 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; };