0

List Group Members

by
Published today

List the members of a group, optionally filtered by role (comma-separated OWNER, MANAGER, MEMBER) or expanded to indirect members of nested groups. Returns `members` and `nextPageToken`. Works with admin.directory.group or admin.directory.group.readonly.

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
 * List Group Members
35
 * List the members of a group, optionally filtered by role (comma-separated OWNER, MANAGER, MEMBER) or expanded to indirect members of nested groups. Returns `members` and `nextPageToken`. Works with admin.directory.group or admin.directory.group.readonly.
36
 */
37
export async function main(
38
  auth: RT.Gworkspace,
39
  group_key: DynSelect_group_key,
40
  roles: string | undefined,
41
  include_derived_membership: boolean = false,
42
  max_results: number = 200,
43
  page_token: string | undefined,
44
) {
45
  const url = new URL(
46
    `https://admin.googleapis.com/admin/directory/v1/groups/${encodeURIComponent(group_key)}/members`,
47
  )
48
  if (roles !== undefined && roles !== "") url.searchParams.append("roles", roles)
49
  if (include_derived_membership) {
50
    url.searchParams.append("includeDerivedMembership", "true")
51
  }
52
  url.searchParams.append("maxResults", String(max_results))
53
  if (page_token !== undefined && page_token !== "") {
54
    url.searchParams.append("pageToken", page_token)
55
  }
56

57
  const response = await fetch(url, {
58
    headers: {
59
      Authorization: `Bearer ${auth.token}`,
60
      Accept: "application/json",
61
    },
62
  })
63

64
  if (!response.ok) {
65
    throw new Error(`${response.status} ${await response.text()}`)
66
  }
67

68
  return await response.json()
69
}
70