-
Notifications
You must be signed in to change notification settings - Fork 1.3k
/
Copy pathadmin-protocol.ts
119 lines (102 loc) · 4.4 KB
/
admin-protocol.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
/**
* 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<User>): Promise<AdminGetListResult<User>>;
adminGetUser(id: string): Promise<User>;
adminBlockUser(req: AdminBlockUserRequest): Promise<User>;
adminDeleteUser(id: string): Promise<void>;
adminModifyRoleOrPermission(req: AdminModifyRoleOrPermissionRequest): Promise<User>;
adminModifyPermanentWorkspaceFeatureFlag(req: AdminModifyPermanentWorkspaceFeatureFlagRequest): Promise<User>;
adminGetTeamMembers(teamId: string): Promise<TeamMemberInfo[]>;
adminGetTeams(req: AdminGetListRequest<Team>): Promise<AdminGetListResult<Team>>;
adminGetTeamById(id: string): Promise<Team | undefined>;
adminSetTeamMemberRole(teamId: string, userId: string, role: TeamMemberRole): Promise<void>;
adminGetWorkspaces(req: AdminGetWorkspacesRequest): Promise<AdminGetListResult<WorkspaceAndInstance>>;
adminGetWorkspace(id: string): Promise<WorkspaceAndInstance>;
adminForceStopWorkspace(id: string): Promise<void>;
adminRestoreSoftDeletedWorkspace(id: string): Promise<void>;
adminGetProjectsBySearchTerm(req: AdminGetListRequest<Project>): Promise<AdminGetListResult<Project>>;
adminGetProjectById(id: string): Promise<Project | undefined>;
adminFindPrebuilds(params: FindPrebuildsParams): Promise<PrebuildWithStatus[]>;
adminSetLicense(key: string): Promise<void>;
adminGetAccountStatement(userId: string): Promise<AccountStatement>;
adminSetProfessionalOpenSource(userId: string, shouldGetProfOSS: boolean): Promise<void>;
adminIsStudent(userId: string): Promise<boolean>;
adminAddStudentEmailDomain(userId: string, domain: string): Promise<void>;
adminGrantExtraHours(userId: string, extraHours: number): Promise<void>;
adminGetSettings(): Promise<InstallationAdminSettings>
adminUpdateSettings(settings: InstallationAdminSettings): Promise<void>
}
export interface AdminGetListRequest<T> {
offset: number
limit: number
orderBy: keyof T
orderDir: "asc" | "desc"
searchTerm?: string;
}
export interface AdminGetListResult<T> {
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<Workspace, "id" | "creationTime">, Omit<WorkspaceInstance, "id" | "creationTime"> {
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<WorkspaceAndInstance> & 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;
};