1 | |
2 |
|
3 | export type DynSelect_group_key = string |
4 |
|
5 | |
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 |
|