0

Add Group Member

by
Published today

Add a user, group or external email address to a group with the given role. Fails with 409 if it is already a member.

Script gworkspace Verified

The script

Submitted by hugo989 Typescript (fetch-only)
Verified 1 hour ago
1
//native
2

3
export type DynSelect_group_key = string
4

5
// Dropdown of every group in the account (email + name).
6
export async function group_key(auth: RT.Gworkspace) {
7
  const groups: { email: string; name: string }[] = []
8
  let pageToken = ""
9
  do {
10
    const url = new URL("https://admin.googleapis.com/admin/directory/v1/groups")
11
    url.searchParams.append("customer", "my_customer")
12
    url.searchParams.append("maxResults", "200")
13
    if (pageToken) url.searchParams.append("pageToken", pageToken)
14
    const response = await fetch(url, {
15
      headers: {
16
        Authorization: `Bearer ${auth.token}`,
17
        Accept: "application/json",
18
      },
19
    })
20
    if (!response.ok) {
21
      throw new Error(`${response.status} ${await response.text()}`)
22
    }
23
    const page = (await response.json()) as {
24
      groups?: { email: string; name: string }[]
25
      nextPageToken?: string
26
    }
27
    groups.push(...(page.groups ?? []))
28
    pageToken = page.nextPageToken ?? ""
29
  } while (pageToken)
30
  return groups.map((g) => ({ value: g.email, label: `${g.name} (${g.email})` }))
31
}
32

33
/**
34
 * Add Group Member
35
 * Add a user, group or external email address to a group with the given role. Fails with 409 if it is already a member.
36
 */
37
export async function main(
38
  auth: RT.Gworkspace,
39
  group_key: DynSelect_group_key,
40
  email: string,
41
  role: "MEMBER" | "MANAGER" | "OWNER" = "MEMBER",
42
) {
43
  const response = await fetch(
44
    `https://admin.googleapis.com/admin/directory/v1/groups/${encodeURIComponent(group_key)}/members`,
45
    {
46
      method: "POST",
47
      headers: {
48
        Authorization: `Bearer ${auth.token}`,
49
        "Content-Type": "application/json",
50
        Accept: "application/json",
51
      },
52
      body: JSON.stringify({ email, role }),
53
    },
54
  )
55

56
  if (!response.ok) {
57
    throw new Error(`${response.status} ${await response.text()}`)
58
  }
59

60
  return await response.json()
61
}
62