//native
export type DynSelect_group_key = string
// Dropdown of every group in the account (email + name).
export async function group_key(auth: RT.Gworkspace) {
const groups: { email: string; name: string }[] = []
let pageToken = ""
do {
const url = new URL("https://admin.googleapis.com/admin/directory/v1/groups")
url.searchParams.append("customer", "my_customer")
url.searchParams.append("maxResults", "200")
if (pageToken) url.searchParams.append("pageToken", pageToken)
const response = await fetch(url, {
headers: {
Authorization: `Bearer ${auth.token}`,
Accept: "application/json",
},
})
if (!response.ok) {
throw new Error(`${response.status} ${await response.text()}`)
}
const page = (await response.json()) as {
groups?: { email: string; name: string }[]
nextPageToken?: string
}
groups.push(...(page.groups ?? []))
pageToken = page.nextPageToken ?? ""
} while (pageToken)
return groups.map((g) => ({ value: g.email, label: `${g.name} (${g.email})` }))
}
/**
* List Group Members
* 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.
*/
export async function main(
auth: RT.Gworkspace,
group_key: DynSelect_group_key,
roles: string | undefined,
include_derived_membership: boolean = false,
max_results: number = 200,
page_token: string | undefined,
) {
const url = new URL(
`https://admin.googleapis.com/admin/directory/v1/groups/${encodeURIComponent(group_key)}/members`,
)
if (roles !== undefined && roles !== "") url.searchParams.append("roles", roles)
if (include_derived_membership) {
url.searchParams.append("includeDerivedMembership", "true")
}
url.searchParams.append("maxResults", String(max_results))
if (page_token !== undefined && page_token !== "") {
url.searchParams.append("pageToken", page_token)
}
const response = await fetch(url, {
headers: {
Authorization: `Bearer ${auth.token}`,
Accept: "application/json",
},
})
if (!response.ok) {
throw new Error(`${response.status} ${await response.text()}`)
}
return await response.json()
}
Submitted by hugo989 1 hour ago