import fs from 'fs'; import { components } from '@octokit/openapi-types'; import yaml from 'js-yaml'; import { BaseOctokitHelper } from './base'; type GitHubUser = components['schemas']['simple-user']; export class OrganizationHelper extends BaseOctokitHelper { protected owner: string; constructor(owner: string, octokit: unknown = undefined) { super(octokit); this.owner = owner; } async getTeamMembers( teamSlug: string, excludeUsers: string[] | undefined = undefined, cacheFile: string | undefined = undefined, writeCache: boolean = false, ): Promise { if (!writeCache && cacheFile && fs.existsSync(cacheFile)) { return (yaml.load(fs.readFileSync(cacheFile, { encoding: 'utf8' })) as { members: GitHubUser[] }).members; } const teamResponse = await this.getOctokit().rest.teams.listMembersInOrg({ org: this.owner, team_slug: teamSlug, }); const members = excludeUsers ? teamResponse.data.filter((m) => !excludeUsers.includes(m.login)) : teamResponse.data; if (writeCache && cacheFile) { fs.writeFileSync(cacheFile, yaml.dump({ members }), { encoding: 'utf8' }); } return members; } }