2024-06-04 11:03:26 -06:00
|
|
|
import is from '@sindresorhus/is';
|
2022-03-03 02:35:26 -07:00
|
|
|
import { logger } from '../../../logger';
|
|
|
|
import { GitlabHttp } from '../../../util/http/gitlab';
|
2023-01-04 01:53:17 -07:00
|
|
|
import type { GitLabUser, GitlabUserStatus } from './types';
|
2021-04-07 22:52:19 -06:00
|
|
|
|
|
|
|
export const gitlabApi = new GitlabHttp();
|
|
|
|
|
|
|
|
export async function getUserID(username: string): Promise<number> {
|
2024-06-04 11:03:26 -06:00
|
|
|
const userInfo = (
|
2021-04-07 22:52:19 -06:00
|
|
|
await gitlabApi.getJson<{ id: number }[]>(`users?username=${username}`)
|
2024-06-04 11:03:26 -06:00
|
|
|
).body;
|
|
|
|
|
|
|
|
if (is.emptyArray(userInfo)) {
|
|
|
|
throw new Error(
|
|
|
|
`User ID for the username: ${username} could not be found.`,
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
return userInfo[0].id;
|
2021-04-07 22:52:19 -06:00
|
|
|
}
|
2021-04-22 13:16:58 -06:00
|
|
|
|
2023-11-07 02:21:04 -07:00
|
|
|
async function getMembers(group: string): Promise<GitLabUser[]> {
|
2023-01-04 01:53:17 -07:00
|
|
|
const groupEncoded = encodeURIComponent(group);
|
2023-11-07 02:21:04 -07:00
|
|
|
return (
|
2023-01-04 01:53:17 -07:00
|
|
|
await gitlabApi.getJson<GitLabUser[]>(`groups/${groupEncoded}/members`)
|
|
|
|
).body;
|
2023-11-07 02:21:04 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
export async function getMemberUserIDs(group: string): Promise<number[]> {
|
|
|
|
const members = await getMembers(group);
|
2023-01-04 01:53:17 -07:00
|
|
|
return members.map((u) => u.id);
|
|
|
|
}
|
|
|
|
|
2023-11-07 02:21:04 -07:00
|
|
|
export async function getMemberUsernames(group: string): Promise<string[]> {
|
|
|
|
const members = await getMembers(group);
|
|
|
|
return members.map((u) => u.username);
|
|
|
|
}
|
|
|
|
|
2021-04-22 13:16:58 -06:00
|
|
|
export async function isUserBusy(user: string): Promise<boolean> {
|
|
|
|
try {
|
|
|
|
const url = `/users/${user}/status`;
|
|
|
|
const userStatus = (await gitlabApi.getJson<GitlabUserStatus>(url)).body;
|
|
|
|
return userStatus.availability === 'busy';
|
|
|
|
} catch (err) {
|
|
|
|
logger.warn({ err }, 'Failed to get user status');
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|