Skip to content
45 linesCodeBlameRaw
1/**
2 * A workspace's members: owners and members, the roles that add to a
3 * member, and what members are allowed to do. Mirrors
4 * `crates/contracts/src/members.rs`.
5 */
6
7/** A role a member can hold besides owner or member. Owners have both already. */
8export type OrgRole = "billing_manager" | "security_manager";
9
10export const ORG_ROLES: readonly OrgRole[] = ["billing_manager", "security_manager"];
11
12export const ORG_ROLE_LABELS: Record<OrgRole, string> = {
13 billing_manager: "Billing manager",
14 security_manager: "Security manager",
15};
16
17/** One line on what each role gives, as People shows it. */
18export const ORG_ROLE_SUMMARIES: Record<OrgRole, string> = {
19 billing_manager: "Manages the budget, AI credit, payment, invoices and billing details. Nothing on repositories.",
20 security_manager: "Reads every repository, and sees and manages every security alert and security setting.",
21};
22
23/** What a workspace lets its members do. The names are the REST API's. */
24export type MemberPrivileges = {
25 members_can_create_public_repositories: boolean;
26 members_can_create_private_repositories: boolean;
27 members_can_change_repo_visibility: boolean;
28 members_can_delete_repositories: boolean;
29 members_can_invite_outside_collaborators: boolean;
30};
31
32export const DEFAULT_MEMBER_PRIVILEGES: MemberPrivileges = {
33 members_can_create_public_repositories: true,
34 members_can_create_private_repositories: true,
35 members_can_change_repo_visibility: true,
36 members_can_delete_repositories: false,
37 members_can_invite_outside_collaborators: true,
38};
39
40/** A workspace a person belongs to and cannot use until they meet its policy. */
41export type PolicyHold = {
42 slug: string;
43 reason: string;
44 gap: "two_factor" | "verified_email" | "email_domain";
45};