import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; import { ResourceMembers } from '../templates'; import type { AddMemberOptions, AllMembersOptions, CondensedMemberSchema, IncludeInherited, MemberSchema, SimpleMemberSchema, } from '../templates/ResourceMembers'; import { RequestHelper, endpoint } from '../infrastructure'; import type { GitlabAPIResponse, PaginationRequestOptions, PaginationTypes, ShowExpanded, Sudo, } from '../infrastructure'; import { AccessLevel } from '../constants'; export interface BillableGroupMemberSchema extends CondensedMemberSchema { last_activity_on: string; membership_type: string; removable: boolean; created_at: string; } export interface BillableGroupMemberMembershipSchema extends Record { id: number; source_id: number; source_full_name: string; source_members_url: string; created_at: string; expires_at: string; access_level: { string_value: string; integer_value: Exclude; }; } export interface OverrodeGroupMemberSchema extends SimpleMemberSchema { override: boolean; } export interface GroupMembers extends ResourceMembers { add( projectId: string | number, accessLevel: Exclude, options?: AddMemberOptions & Sudo & ShowExpanded, ): Promise>; all( projectId: string | number, options?: IncludeInherited & PaginationRequestOptions

& AllMembersOptions & Sudo & ShowExpanded, ): Promise>; edit( projectId: string | number, userId: number, accessLevel: Exclude, options?: { expiresAt?: string; memberRoleId?: number } & Sudo & ShowExpanded, ): Promise>; show( projectId: string | number, userId: number, options?: IncludeInherited & Sudo & ShowExpanded, ): Promise>; remove( projectId: string | number, userId: number, options?: Sudo & ShowExpanded, ): Promise>; } export class GroupMembers extends ResourceMembers { constructor(options: BaseResourceOptions) { /* istanbul ignore next */ super('groups', options); } allBillable( groupId: string | number, options?: PaginationRequestOptions

& Sudo & ShowExpanded, ): Promise> { return RequestHelper.get()( this, endpoint`${groupId}/billable_members`, options, ); } allPending( groupId: string | number, options?: Sudo & ShowExpanded, ): Promise> { return RequestHelper.get()(this, endpoint`${groupId}/pending_members`, options); } allBillableMemberships( groupId: string | number, userId: number, options?: { search?: string; sort?: | 'access_level_asc' | 'access_level_desc' | 'last_joined' | 'name_asc' | 'name_desc' | 'oldest_joined' | 'oldest_sign_in' | 'recent_sign_in' | 'last_activity_on_asc' | 'last_activity_on_desc'; } & Sudo & ShowExpanded, ): Promise> { return RequestHelper.get()( this, endpoint`${groupId}/billable_members/${userId}/memberships`, options, ); } approve( groupId: string | number, userId: number, options?: Sudo & ShowExpanded, ): Promise> { return RequestHelper.put()( this, endpoint`${groupId}/members/${userId}/approve`, options, ); } approveAll( groupId: string | number, options?: Sudo & ShowExpanded, ): Promise> { return RequestHelper.put()( this, endpoint`${groupId}/members/approve_all`, options, ); } removeBillable( groupId: string | number, userId: number, options?: Sudo & ShowExpanded, ): Promise> { return RequestHelper.del()(this, endpoint`${groupId}/billable_members/${userId}`, options); } removeOverrideFlag( groupId: string | number, userId: number, options?: Sudo & ShowExpanded, ): Promise> { return RequestHelper.del()( this, endpoint`${groupId}/members/${userId}/override`, options, ); } setOverrideFlag( groupId: string | number, userId: number, options?: Sudo & ShowExpanded, ): Promise> { return RequestHelper.post()( this, endpoint`${groupId}/members/${userId}/override`, options, ); } }