UNPKG

@gitbeaker/core

Version:

Core API implementation of the GitLab API

1,117 lines (1,106 loc) 484 kB
import { BaseResource, BaseResourceOptions } from '@gitbeaker/requester-utils'; interface UserAgentDetailSchema extends Record<string, unknown> { user_agent: string; ip_address: string; akismet_submitted: boolean; } type CamelizeString<T extends PropertyKey> = T extends string ? string extends T ? string : T extends `${infer F}_${infer R}` ? `${F}${Capitalize<CamelizeString<R>>}` : T : T; type Camelize<T> = { [K in keyof T as CamelizeString<K>]: Camelize<T[K]>; }; type Simplify<T> = T extends infer S ? { [K in keyof S]: S[K]; } : never; type Never<T> = Simplify<{ [P in keyof T]?: never; }>; type SomeOf<T> = { [K in keyof T]: Pick<Required<T>, K>; }[keyof T]; type OneOf<T> = { [K in keyof T]: Simplify<Pick<T, K> & Never<Omit<T, K>>>; }[keyof T]; type OneOrNoneOf<T> = Never<T> | OneOf<T>; type AllOrNone<T extends Record<string, any>> = T | Partial<Record<keyof T, never>>; type MappedOmit<T, K extends keyof T> = { [P in keyof T as P extends K ? never : P]: T[P]; }; /** * A special class to mark path segments that should not be URL-encoded. * Used for paths that already contain special characters like '/' that should be preserved. * For example, in API paths like 'repository/commits', the slash should not be encoded to '%2F'. */ declare class RawPathSegment { readonly value: string; constructor(value: string); toString(): string; } interface IsForm { isForm?: boolean; } interface Sudo { sudo?: string | number; } interface AsStream { asStream?: boolean; } interface ShowExpanded<E extends boolean = false> { showExpanded?: E; } interface AsAdmin<A extends boolean = false> { asAdmin?: A; } type BaseRequestOptions<E extends boolean = false> = Sudo & ShowExpanded<E> & { [Key in string]?: any; }; type PaginationTypes = 'keyset' | 'offset'; interface KeysetPaginationRequestOptions { orderBy: string; sort: 'asc' | 'desc'; } interface OffsetPaginationRequestOptions { page?: number | string; } interface BasePaginationRequestOptions<P extends PaginationTypes | void> { pagination?: P; perPage?: number | string; maxPages?: number; } type PaginationRequestSubOptions<P extends PaginationTypes | void> = P extends 'keyset' ? AllOrNone<KeysetPaginationRequestOptions> : P extends 'offset' ? OffsetPaginationRequestOptions : AllOrNone<KeysetPaginationRequestOptions> & OffsetPaginationRequestOptions; type PaginationRequestOptions<P extends PaginationTypes | void = void> = BasePaginationRequestOptions<P> & PaginationRequestSubOptions<P>; type CamelizedResponse<T, C> = C extends true ? Camelize<T> : T; interface OffsetPagination { total: number; next: number | null; current: number; previous: number | null; perPage: number; totalPages: number; } interface KeysetPagination { idAfter: number; perPage: number; orderBy: string; sort: 'asc' | 'desc'; } interface ExpandedResponse<T> { data: T; headers: Record<string, string>; status: number; } type PaginatedResponse<T, P extends PaginationTypes = PaginationTypes> = { [U in P]: { paginationInfo: P extends 'keyset' ? KeysetPagination : OffsetPagination; data: T; }; }[P]; type GitlabAPIExpandedResponse<T, E extends boolean | void, P> = E extends true ? P extends PaginationTypes ? PaginatedResponse<T, P> : ExpandedResponse<T> : T; type GitlabAPISingleResponse<T, C extends boolean | void, E extends boolean | void> = T extends Record<string, unknown> ? GitlabAPIExpandedResponse<CamelizedResponse<T, C>, E, undefined> : GitlabAPIExpandedResponse<T, E, undefined>; type GitlabAPIMultiResponse<T, C extends boolean | void, E extends boolean | void, P extends PaginationTypes | void> = T extends Record<string, unknown> ? GitlabAPIExpandedResponse<CamelizedResponse<T, C>[], E, P> : GitlabAPIExpandedResponse<T[], E, P>; type GitlabAPIResponse<T, C extends boolean | void, E extends boolean | void, P extends PaginationTypes | void> = T extends (infer R)[] ? GitlabAPIMultiResponse<R, C, E, P> : GitlabAPISingleResponse<T, C, E>; interface ProjectRemoteMirrorSchema extends Record<string, unknown> { enabled: boolean; id: number; last_error?: string; last_successful_update_at: string; last_update_at: string; last_update_started_at: string; only_protected_branches: boolean; keep_divergent_refs: boolean; update_status: string; url: string; } declare class ProjectRemoteMirrors<C extends boolean = false> extends BaseResource<C> { all<E extends boolean = false, P extends PaginationTypes = 'offset'>(projectId: string | number, options?: Sudo & ShowExpanded<E> & PaginationRequestOptions<P>): Promise<GitlabAPIResponse<ProjectRemoteMirrorSchema[], C, E, P>>; createPullMirror<E extends boolean = false>(projectId: string | number, url: string, mirror: boolean, options?: { onlyProtectedBranches?: boolean; } & Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<ProjectRemoteMirrorSchema, C, E, void>>; createPushMirror<E extends boolean = false>(projectId: string | number, url: string, options?: { enabled?: boolean; onlyProtectedBranches?: boolean; keepDivergentRefs?: boolean; mirrorBranchRegex?: string; } & Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<ProjectRemoteMirrorSchema, C, E, void>>; edit<E extends boolean = false>(projectId: string | number, mirrorId: number, options?: { enabled?: boolean; onlyProtectedBranches?: boolean; keepDivergentRefs?: boolean; mirrorBranchRegex?: string; } & Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<ProjectRemoteMirrorSchema, C, E, void>>; remove<E extends boolean = false>(projectId: string | number, mirrorId: number, options?: Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<void, C, E, void>>; show<E extends boolean = false>(projectId: string | number, mirrorId: number, options?: Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<ProjectRemoteMirrorSchema, C, E, void>>; sync<E extends boolean = false>(projectId: string | number, mirrorId: number, options?: Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<void, C, E, void>>; } type AllEventOptions = { action?: 'created' | 'updated' | 'closed' | 'reopened' | 'pushed' | 'commented' | 'merged' | 'joined' | 'left' | 'destroyed' | 'expired'; targetType?: 'issue' | 'milestone' | 'merge_request' | 'note' | 'project' | 'snippet' | 'user'; before?: string; after?: string; scope?: string; sort?: 'asc' | 'desc'; }; interface EventSchema extends Record<string, unknown> { id: number; title?: string; project_id: number; action_name: string; target_id: number; target_type: string; author_id: number; target_title: string; created_at: string; author: MappedOmit<SimpleUserSchema, 'created_at'>; author_username: string; } declare class Events<C extends boolean = false> extends BaseResource<C> { all<E extends boolean = false, P extends PaginationTypes = 'offset'>({ projectId, userId, ...options }?: OneOrNoneOf<{ projectId?: string | number; userId: string | number; }> & AllEventOptions & PaginationRequestOptions<P> & BaseRequestOptions<E>): Promise<GitlabAPIResponse<EventSchema[], C, E, P>>; } interface PersonalAccessTokenSchema extends Record<string, unknown> { id: number; name: string; revoked: boolean; created_at: string; scopes?: string[]; user_id: number; last_used_at: string; active: boolean; expires_at?: string; token: string; } type PersonalAccessTokenScopes = 'api' | 'read_api' | 'read_user' | 'create_runner' | 'read_repository' | 'write_repository' | 'read_registry' | 'write_registry' | 'sudo' | 'admin_mode'; type AllPersonalAccessTokenOptions = { userId?: string | number; state?: 'active' | 'inactive'; search?: string; revoked?: boolean; lastUsedBefore?: string; lastUsedAfter?: string; createdBefore?: string; createdAfter?: string; }; declare class PersonalAccessTokens<C extends boolean = false> extends BaseResource<C> { all<E extends boolean = false, P extends PaginationTypes = 'offset'>(options?: AllPersonalAccessTokenOptions & Sudo & ShowExpanded<E> & PaginationRequestOptions<P>): Promise<GitlabAPIResponse<PersonalAccessTokenSchema[], C, E, P>>; create<E extends boolean = false>(userId: number, name: string, scopes: string[], options?: { expiresAt?: string; } & Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<PersonalAccessTokenSchema, C, E, void>>; remove<E extends boolean = false>({ tokenId, ...options }?: { tokenId?: string | number; } & Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<void, C, E, void>>; rotate<E extends boolean = false>(tokenId: number | 'self', options?: { expiresAt?: string; } & Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<PersonalAccessTokenSchema, C, E, void>>; show<E extends boolean = false>({ tokenId, ...options }?: { tokenId?: string | number; } & Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<PersonalAccessTokenSchema, C, E, void>>; } interface CustomAttributeSchema extends Record<string, unknown> { key: string; value: string; } declare class ResourceCustomAttributes<C extends boolean = false> extends BaseResource<C> { constructor(resourceType: string, options: BaseResourceOptions<C>); all<E extends boolean = false, P extends PaginationTypes = 'offset'>(resourceId: string | number, options?: PaginationRequestOptions<P> & Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<CustomAttributeSchema[], C, E, P>>; remove<E extends boolean = false>(resourceId: string | number, customAttributeId: string, options?: Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<void, C, E, void>>; set<E extends boolean = false>(resourceId: string | number, customAttributeId: string, value: string, options?: Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<CustomAttributeSchema, C, E, void>>; show<E extends boolean = false>(resourceId: string | number, customAttributeId: string, options?: Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<CustomAttributeSchema, C, E, void>>; } declare enum AccessLevel { NO_ACCESS = 0, MINIMAL_ACCESS = 5, GUEST = 10, REPORTER = 20, DEVELOPER = 30, MAINTAINER = 40, OWNER = 50, ADMIN = 60 } interface SimpleUserSchema extends Record<string, unknown> { id: number; name: string; username: string; state: string; avatar_url: string; web_url: string; created_at: string; } interface UserSchema extends SimpleUserSchema { locked: boolean | null; bio: string | null; bot: boolean | null; location: string | null; public_email: string | null; skype: string | null; linkedin: string | null; twitter: string | null; discord: string | null; website_url: string | null; pronouns: string | null; organization: string | null; job_title: string | null; work_information: string | null; followers: number | null; following: number | null; local_time: string | null; is_followed: boolean | null; } interface ExpandedUserSchema extends UserSchema { is_admin: boolean | null; bot: boolean; last_sign_in_at: string; confirmed_at: string; last_activity_on: string; email: string; theme_id: number; color_scheme_id: number; projects_limit: number; current_sign_in_at: string | null; note: string | null; identities: { provider: string; extern_uid: string; saml_provider_id: number; }[] | null; can_create_group: boolean; can_create_project: boolean; two_factor_enabled: boolean; external: boolean; private_profile: string | null; namespace_id: number | null; created_by: string | null; } interface AdminUserSchema extends ExpandedUserSchema { current_sign_in_ip: string; last_sign_in_ip: string; using_license_seat: boolean | null; email_reset_offered_at: string | null; shared_runners_minutes_limit?: number | null; extra_shared_runners_minutes_limit?: number | null; is_auditor?: boolean | null; provisioned_by_group_id?: number | null; plan?: string; trial?: boolean; } interface UserActivitySchema extends Record<string, unknown> { username: string; last_activity_on: string; last_activity_at: string; } interface UserStatusSchema extends Record<string, unknown> { emoji: string; availability: string; message: string; message_html: string; clear_status_at: string; } interface UserPreferenceSchema extends Record<string, unknown> { id: number; user_id: number; view_diffs_file_by_file: boolean; show_whitespace_in_diffs: boolean; } interface UserCountSchema extends Record<string, unknown> { merge_requests: number; assigned_issues: number; assigned_merge_requests: number; review_requested_merge_requests: number; todos: number; } interface UserAssociationCountSchema extends Record<string, unknown> { groups_count: number; projects_count: number; issues_count: number; merge_requests_count: number; } interface UserMembershipSchema extends Record<string, unknown> { source_id: number; source_name: string; source_type: 'Project' | 'Namespace'; access_level: Exclude<AccessLevel, AccessLevel.ADMIN>; } interface UserRunnerSchema extends Record<string, unknown> { id: number; token: string; token_expires_at: string | null; } type AllUsersOptions = { orderBy?: 'name' | 'username' | 'created_at' | 'updated_at'; createdBy?: string; sort?: 'asc' | 'desc'; twoFactor?: string; withoutProjects?: boolean; admins?: boolean; samlProviderId?: number; skipLdap?: boolean; search?: string; username?: string; active?: boolean; blocked?: boolean; external?: boolean; excludeInternal?: boolean; excludeExternal?: boolean; withoutProjectBots?: boolean; createdBefore?: string; createdAfter?: string; withCustomAttributes?: boolean; customAttributes?: Record<string, string>; } & AllOrNone<{ provider: string; externUid: string; }>; type CreateUserOptions = { admin?: boolean; auditor?: boolean; avatar?: { content: Blob; filename?: string; }; bio?: string; canCreateGroup?: boolean; colorSchemeId?: number; commitEmail?: string; email?: string; externUid?: string; external?: boolean; extraSharedRunnersMinutesLimit?: number; forceRandomPassword?: boolean; groupIdForSaml?: number; linkedin?: string; location?: string; name?: string; note?: string; organization?: string; password?: string; privateProfile?: string; projectsLimit?: number; pronouns?: string; provider?: string; publicEmail?: string; resetPassword?: boolean; sharedRunnersMinutesLimit?: number; skipConfirmation?: boolean; skype?: string; themeId?: number; twitter?: string; discord?: string; username?: string; viewDiffsFileByFile?: boolean; websiteUrl?: string; }; type EditUserOptions = CreateUserOptions; type CreateUserCIRunnerOptions = { groupId?: number; projectId?: number; description?: string; paused?: boolean; locked?: boolean; runUntagged?: boolean; tagList?: string[]; accessLevel?: 'not_protected' | 'ref_protected'; maximumTimeout?: number; maintenanceNote?: string; }; type AllUserProjectsOptions = { archived?: boolean; idAfter?: number; idBefore?: number; membership?: boolean; minAccessLevel?: Exclude<AccessLevel, AccessLevel.ADMIN>; orderBy?: 'id' | 'name' | 'path' | 'created_at' | 'updated_at' | 'last_activity_at'; owned?: boolean; search?: string; simple?: boolean; sort?: 'asc' | 'desc'; starred?: boolean; statistics?: boolean; visibility?: 'public' | 'internal' | 'private'; withCustomAttributes?: boolean; withIssuesEnabled?: boolean; withMergeRequestsEnabled?: boolean; withProgrammingLanguage?: string; updatedBefore?: string; updatedAfter?: string; }; declare class Users<C extends boolean = false> extends BaseResource<C> { activate<E extends boolean = false>(userId: number, options?: Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<void, C, E, void>>; all<A extends boolean = false, E extends boolean = false, P extends PaginationTypes = 'offset'>(options?: { withCustomAttributes: true; } & AsAdmin<A> & AllUsersOptions & PaginationRequestOptions<P> & Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<((A extends false ? SimpleUserSchema : AdminUserSchema) & { custom_attributes: CustomAttributeSchema[]; })[], C, E, P>>; all<A extends boolean = false, E extends boolean = false, P extends PaginationTypes = 'offset'>(options?: AllUsersOptions & AsAdmin<A> & PaginationRequestOptions<P> & Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<(A extends false ? SimpleUserSchema : AdminUserSchema)[], C, E, P>>; allActivities<E extends boolean = false, P extends PaginationTypes = 'offset'>(options?: { from?: string; } & PaginationRequestOptions<P> & Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<UserActivitySchema[], C, E, P>>; allEvents<E extends boolean = false, P extends PaginationTypes = 'offset'>(userId: number, options?: AllEventOptions & PaginationRequestOptions<P> & Sudo & ShowExpanded<E>): Promise<GitlabAPIExpandedResponse<CamelizedResponse<EventSchema, C>[], E, void>>; allFollowers<E extends boolean = false, P extends PaginationTypes = 'offset'>(userId: number, options?: PaginationRequestOptions<P> & Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<SimpleUserSchema[], C, E, P>>; allFollowing<E extends boolean = false, P extends PaginationTypes = 'offset'>(userId: number, options?: PaginationRequestOptions<P> & Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<SimpleUserSchema[], C, E, P>>; allMemberships<E extends boolean = false, P extends PaginationTypes = 'offset'>(userId: number, options?: { type?: 'Project' | 'Namespace'; } & PaginationRequestOptions<P> & Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<UserMembershipSchema[], C, E, P>>; allProjects<E extends boolean = false, P extends PaginationTypes = 'keyset'>(userId: string | number, options: PaginationRequestOptions<P> & AllUserProjectsOptions & Sudo & ShowExpanded<E> & { simple: true; }): Promise<GitlabAPIResponse<SimpleProjectSchema[], C, E, P>>; allProjects<E extends boolean = false, P extends PaginationTypes = 'keyset'>(userId: string | number, options: PaginationRequestOptions<P> & AllUserProjectsOptions & Sudo & ShowExpanded<E> & { statistics: true; }): Promise<GitlabAPIResponse<(ProjectSchema & { statistics: ProjectStatisticsSchema; })[], C, E, P>>; allProjects<E extends boolean = false, P extends PaginationTypes = 'keyset'>(userId: string | number, options?: PaginationRequestOptions<P> & AllUserProjectsOptions & Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<ProjectSchema[], C, E, P>>; allContributedProjects<E extends boolean = false, P extends PaginationTypes = 'keyset'>(userId: string | number, options: PaginationRequestOptions<P> & AllUserProjectsOptions & Sudo & ShowExpanded<E> & { simple: true; }): Promise<GitlabAPIResponse<SimpleProjectSchema[], C, E, P>>; allContributedProjects<E extends boolean = false, P extends PaginationTypes = 'keyset'>(userId: string | number, options: PaginationRequestOptions<P> & AllUserProjectsOptions & Sudo & ShowExpanded<E> & { statistics: true; }): Promise<GitlabAPIResponse<(ProjectSchema & { statistics: ProjectStatisticsSchema; })[], C, E, P>>; allContributedProjects<E extends boolean = false, P extends PaginationTypes = 'keyset'>(userId: string | number, options?: PaginationRequestOptions<P> & AllUserProjectsOptions & Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<ProjectSchema[], C, E, P>>; allStarredProjects<E extends boolean = false, P extends PaginationTypes = 'keyset'>(userId: string | number, options: PaginationRequestOptions<P> & AllUserProjectsOptions & Sudo & ShowExpanded<E> & { simple: true; }): Promise<GitlabAPIResponse<SimpleProjectSchema[], C, E, P>>; allStarredProjects<E extends boolean = false, P extends PaginationTypes = 'keyset'>(userId: string | number, options: PaginationRequestOptions<P> & AllUserProjectsOptions & Sudo & ShowExpanded<E> & { statistics: true; }): Promise<GitlabAPIResponse<(ProjectSchema & { statistics: ProjectStatisticsSchema; })[], C, E, P>>; allStarredProjects<E extends boolean = false, P extends PaginationTypes = 'keyset'>(userId: string | number, options?: PaginationRequestOptions<P> & AllUserProjectsOptions & Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<ProjectSchema[], C, E, P>>; approve<E extends boolean = false>(userId: number, options?: Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<{ message: string; }, C, E, void>>; ban<E extends boolean = false>(userId: number, options?: Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<void, C, E, void>>; block<E extends boolean = false>(userId: number, options?: Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<void, C, E, void>>; create<E extends boolean = false>(options?: CreateUserOptions & Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<ExpandedUserSchema, C, E, void>>; createPersonalAccessToken<E extends boolean = false>(userId: number, name: string, scopes: string[], options?: { expiresAt?: string; } & Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<PersonalAccessTokenSchema, C, E, void>>; createCIRunner<E extends boolean = false>(runnerType: 'instance_type' | 'group_type' | 'project_type', options?: CreateUserCIRunnerOptions & Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<UserRunnerSchema, C, E, void>>; deactivate<E extends boolean = false>(userId: number, options?: Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<void, C, E, void>>; disableTwoFactor<E extends boolean = false>(userId: number, options?: Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<void, C, E, void>>; edit<E extends boolean = false>(userId: number, { avatar, ...options }?: EditUserOptions & Sudo & ShowExpanded<E>): Promise<CamelizedResponse<ExpandedUserSchema, C>>; editStatus<E extends boolean = false>(options?: { emoji?: string; message?: string; clearStatusAfter?: '30_minutes' | '3_hours' | '8_hours' | '1_day' | '3_days' | '7_days' | '30_days'; } & Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<UserStatusSchema, C, E, void>>; editCurrentUserPreferences<E extends boolean = false>(viewDiffsFileByFile: boolean, showWhitespaceInDiffs: boolean, options?: Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<UserPreferenceSchema, C, E, void>>; follow<E extends boolean = false>(userId: number, options?: Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<SimpleUserSchema, C, E, void>>; reject<E extends boolean = false>(userId: number, options?: Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<{ message: string; }, C, E, void>>; show<A extends boolean = false, E extends boolean = false>(userId: number, options?: AsAdmin<A> & Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<A extends false ? UserSchema : AdminUserSchema, C, E, void>>; showCount<E extends boolean = false>(options?: Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<UserCountSchema, C, E, void>>; showAssociationsCount<E extends boolean = false>(userId: number, options?: Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<UserAssociationCountSchema, C, E, void>>; showCurrentUser<A extends boolean = false, E extends boolean = false>(options?: AsAdmin<A> & Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<A extends false ? ExpandedUserSchema : AdminUserSchema, C, E, void>>; showCurrentUserPreferences<E extends boolean = false>(options?: Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<UserPreferenceSchema, C, E, void>>; showStatus<E extends boolean = false>({ iDOrUsername, ...options }?: { iDOrUsername?: string | number; } & Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<UserStatusSchema, C, E, void>>; remove<E extends boolean = false>(userId: number, options?: { hardDelete?: boolean; } & Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<void, C, E, void>>; removeAuthenticationIdentity<E extends boolean = false>(userId: number, provider: string, options?: Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<void, C, E, void>>; unban<E extends boolean = false>(userId: number, options?: Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<void, C, E, void>>; unblock<E extends boolean = false>(userId: number, options?: Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<void, C, E, void>>; unfollow<E extends boolean = false>(userId: number, options?: Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<UserSchema, C, E, void>>; } interface CondensedNamespaceSchema extends Record<string, unknown> { id: number; name: string; path: string; kind: string; full_path: string; parent_id?: number | null; avatar_url: string | null; web_url: string; } interface NamespaceSchema extends CondensedNamespaceSchema { members_count_with_descendants: number; billable_members_count: number; plan: string; trial_ends_on?: string; trial: boolean; } interface NamespaceExistsSchema extends Record<string, unknown> { exists: boolean; suggests: string[]; } declare class Namespaces<C extends boolean = false> extends BaseResource<C> { all<E extends boolean = false, P extends PaginationTypes = 'offset'>(options?: { search?: string; ownedOnly?: string; topLevelOnly?: boolean; } & PaginationRequestOptions<P> & Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<NamespaceSchema[], C, E, P>>; exists<E extends boolean = false>(namespace: string, options?: { parentId?: string; } & Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<NamespaceExistsSchema, C, E, void>>; show<E extends boolean = false>(namespaceId: string | number, options?: Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<NamespaceSchema, C, E, void>>; } interface GroupStatisticsSchema { storage_size: number; repository_size: number; wiki_size: number; lfs_objects_size: number; job_artifacts_size: number; pipeline_artifacts_size: number; packages_size: number; snippets_size: number; uploads_size: number; } interface CondensedGroupSchema extends Record<string, unknown> { id: number; web_url: string; name: string; } interface SimpleGroupSchema extends CondensedGroupSchema { avatar_url: string | null; full_name: string; full_path: string; } interface GroupSchema extends SimpleGroupSchema { path: string; description: string; visibility: 'public' | 'internal' | 'private'; share_with_group_lock: boolean; require_two_factor_authentication: boolean; two_factor_grace_period: number; project_creation_level: string; auto_devops_enabled?: boolean; subgroup_creation_level: string; emails_enabled?: boolean; mentions_disabled?: boolean; lfs_enabled: boolean; default_branch_protection: number; request_access_enabled: boolean; created_at: string; parent_id: number; ldap_cn?: string; ldap_access?: string; marked_for_deletion_on?: string; membership_lock?: boolean; } interface ExpandedGroupSchema extends GroupSchema { runners_token: string; file_template_project_id: number; shared_with_groups: { group_id: number; group_name: string; group_full_path: string; group_access_level: number; }[] | null; projects?: ProjectSchema[]; shared_projects?: ProjectSchema[]; } type AllGroupsOptions = { skipGroups?: number[]; allAvailable?: boolean; search?: string; orderBy?: 'name' | 'path' | 'id'; sort?: 'asc' | 'desc'; visibility?: 'public' | 'internal' | 'private'; statistics?: boolean; withCustomAttributes?: boolean; owned?: boolean; minAccessLevel?: Exclude<AccessLevel, AccessLevel.ADMIN>; topLevelOnly?: boolean; markedForDeletionOn?: string; active?: boolean; archived?: boolean; }; type AllGroupProjectsOptions = { visibility?: 'public' | 'internal' | 'private'; orderBy?: 'id' | 'name' | 'path' | 'created_at' | 'updated_at' | 'similarity' | 'last_activity_at'; topic?: string; sort?: 'asc' | 'desc'; archived?: boolean; search?: string; simple?: boolean; owned?: boolean; starred?: boolean; withIssuesEnabled?: boolean; withMergeRequestsEnabled?: boolean; withShared?: boolean; includeSubgroups?: boolean; minAccessLevel?: Exclude<AccessLevel, AccessLevel.ADMIN>; withCustomAttributes?: boolean; withSecurityReports?: boolean; }; type CreateGroupOptions = { autoDevopsEnabled?: boolean; avatar?: { content: Blob; filename: string; }; defaultBranchProtection?: 0 | 1 | 2 | 3; description?: string; emailsDisabled?: boolean; lfsEnabled?: boolean; mentionsDisabled?: boolean; parentId?: number; projectCreationLevel?: 'noone' | 'maintainer' | 'developer'; requestAccessEnabled?: boolean; requireTwoFactorAuthentication?: boolean; shareWithGroupLock?: boolean; subgroupCreationLevel?: string; twoFactorGracePeriod?: number; visibility?: 'public' | 'internal' | 'private'; membershipLock?: boolean; extraSharedRunnersMinutesLimit?: number; sharedRunnersMinutesLimit?: number; }; type EditGroupOptions = { name?: string; path?: string; autoDevopsEnabled?: boolean; avatar?: { content: Blob; filename: string; }; defaultBranchProtection?: 0 | 1 | 2 | 3; description?: string; emailsDisabled?: boolean; lfsEnabled?: boolean; mentionsDisabled?: boolean; preventSharingGroupsOutsideHierarchy?: boolean; projectCreationLevel?: 'noone' | 'maintainer' | 'developer'; requestAccessEnabled?: boolean; requireTwoFactorAuthentication?: boolean; sharedRunnersSetting?: 'enabled' | 'disabled_and_overridable' | 'disabled_and_unoverridable' | 'disabled_with_override'; shareWithGroupLock?: boolean; subgroupCreationLevel?: string; twoFactorGracePeriod?: number; visibility?: 'public' | 'internal' | 'private'; extraSharedRunnersMinutesLimit?: number; fileTemplateProjectId?: number; membershipLock?: boolean; preventForkingOutsideGroup?: boolean; sharedRunnersMinutesLimit?: number; uniqueProjectDownloadLimit?: number; uniqueProjectDownloadLimitIntervalInSeconds?: number; uniqueProjectDownloadLimitAllowlist?: string[]; uniqueProjectDownloadLimitAlertlist?: number[]; autoBanUserOnExcessiveProjectsDownload?: boolean; ipRestrictionRanges?: string; }; type AllProvisionedUsersOptions = { username?: string; search?: string; active?: boolean; blocked?: boolean; createdAfter?: string; createdBefore?: string; }; declare class Groups<C extends boolean = false> extends BaseResource<C> { all<E extends boolean = false, P extends PaginationTypes = 'keyset'>(options: { withCustomAttributes: true; } & AllGroupsOptions & PaginationRequestOptions<P> & Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<(GroupSchema & { custom_attributes: CustomAttributeSchema[]; })[], C, E, P>>; all<E extends boolean = false, P extends PaginationTypes = 'keyset'>(options: { statistics: true; } & AllGroupsOptions & PaginationRequestOptions<P> & Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<(GroupSchema & { statistics: GroupStatisticsSchema; })[], C, E, P>>; all<E extends boolean = false, P extends PaginationTypes = 'keyset'>(options?: AllGroupsOptions & PaginationRequestOptions<P> & Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<GroupSchema[], C, E, P>>; allDescendantGroups<E extends boolean = false, P extends PaginationTypes = 'offset'>(groupId: string | number, options: { statistics: true; } & AllGroupsOptions & PaginationRequestOptions<P> & Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<(GroupSchema & { statistics: GroupStatisticsSchema; })[], C, E, P>>; allDescendantGroups<E extends boolean = false, P extends PaginationTypes = 'offset'>(groupId: string | number, options: AllGroupsOptions & PaginationRequestOptions<P> & Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<GroupSchema[], C, E, P>>; allProjects<E extends boolean = false, P extends PaginationTypes = 'offset'>(groupId: string | number, options?: AllGroupProjectsOptions & PaginationRequestOptions<P> & Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<ProjectSchema[], C, E, P>>; allProjects<E extends boolean = false, P extends PaginationTypes = 'offset'>(groupId: string | number, options?: { simple: true; } & AllGroupProjectsOptions & PaginationRequestOptions<P> & Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<CondensedProjectSchema[], C, E, P>>; allSharedProjects<E extends boolean = false, P extends PaginationTypes = 'offset'>(groupId: string | number, options?: { simple: true; } & AllGroupProjectsOptions & PaginationRequestOptions<P> & Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<CondensedProjectSchema[], C, E, P>>; allSharedProjects<E extends boolean = false, P extends PaginationTypes = 'offset'>(groupId: string | number, options?: AllGroupProjectsOptions & PaginationRequestOptions<P> & Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<ProjectSchema[], C, E, P>>; allSubgroups<E extends boolean = false, P extends PaginationTypes = 'offset'>(groupId: string | number, options?: { statistics: true; } & AllGroupsOptions & PaginationRequestOptions<P> & Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<(GroupSchema & { statistics: GroupStatisticsSchema; })[], C, E, P>>; allSubgroups<E extends boolean = false, P extends PaginationTypes = 'offset'>(groupId: string | number, options?: AllGroupsOptions & PaginationRequestOptions<P> & Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<GroupSchema[], C, E, P>>; allProvisionedUsers<E extends boolean = false, P extends PaginationTypes = 'offset'>(groupId: string | number, options?: AllProvisionedUsersOptions & PaginationRequestOptions<P> & Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<SimpleUserSchema[], C, E, P>>; allTransferLocations<E extends boolean = false, P extends PaginationTypes = 'offset'>(groupId: string | number, options?: { search?: string; } & PaginationRequestOptions<P> & Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<SimpleGroupSchema[], C, E, P>>; create<E extends boolean = false>(name: string, path: string, { avatar, ...options }?: CreateGroupOptions & Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<ExpandedGroupSchema, C, E, void>>; downloadAvatar<E extends boolean = false>(groupId: string | number, options?: Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<Blob, void, E, void>>; edit<E extends boolean = false>(groupId: string | number, { avatar, ...options }?: EditGroupOptions & Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<ExpandedGroupSchema, C, E, void>>; remove<E extends boolean = false>(groupId: string | number, options?: { permanentlyRemove?: boolean | string; fullPath?: string; } & Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<void, C, E, void>>; removeAvatar<E extends boolean = false>(groupId: string | number, options?: Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<void, C, E, void>>; restore<E extends boolean = false>(groupId: string | number, options?: Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<void, C, E, void>>; search<E extends boolean = false>(nameOrPath: string, options?: Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<GroupSchema[], C, E, void>>; share<E extends boolean = false>(groupId: string | number, sharedGroupId: string | number, groupAccess: number, options: { expiresAt?: string; } & Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<ExpandedGroupSchema, C, E, void>>; show<E extends boolean = false>(groupId: string | number, options?: BaseRequestOptions<E>): Promise<GitlabAPIResponse<ExpandedGroupSchema, C, E, void>>; transfer<E extends boolean = false>(groupId: string | number, options?: { groupId?: number; } & Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<void, C, E, void>>; transferProject<E extends boolean = false>(groupId: string | number, projectId: string | number, options?: Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<void, C, E, void>>; unshare<E extends boolean = false>(groupId: string | number, sharedGroupId: string | number, options: Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<void, C, E, void>>; uploadAvatar<E extends boolean = false>(groupId: string | number, content: Blob, { filename, ...options }?: { filename?: string; } & Sudo & ShowExpanded<E>): Promise<GitlabAPIResponse<{ avatar_url: string; }, C, E, void>>; } type AccessLevelSettingState = 'disabled' | 'enabled' | 'private'; interface ProjectStarrerSchema extends Record<string, unknown> { starred_since: string; user: MappedOmit<SimpleUserSchema, 'created_at'>; } interface ProjectStoragePath extends Record<string, unknown> { project_id: string | number; disk_path: string; created_at: string; repository_storage: string; } interface ProjectStatisticsSchema { commit_count: number; storage_size: number; repository_size: number; wiki_size: number; lfs_objects_size: number; job_artifacts_size: number; pipeline_artifacts_size: number; packages_size: number; snippets_size: number; uploads_size: number; } interface ProjectLicenseSchema { key: string; name: string; nickname: string; html_url: string; source_url: string; } interface CondensedProjectSchema extends Record<string, unknown> { id: number; web_url: string; name: string; path: string; } interface SimpleProjectSchema extends CondensedProjectSchema { description: string | null; name_with_namespace: string; path_with_namespace: string; created_at: string; default_branch: string; topics: string[] | null; ssh_url_to_repo: string; http_url_to_repo: string; readme_url: string | null; forks_count: number; avatar_url: string | null; star_count: number; last_activity_at: string; namespace: CondensedNamespaceSchema; } interface ProjectSchema extends SimpleProjectSchema { description_html: string; visibility: 'public' | 'internal' | 'private'; merge_requests_template?: string; empty_repo: boolean; issues_template?: string; owner: Pick<SimpleUserSchema, 'id' | 'name' | 'created_at'>; issues_enabled: boolean; open_issues_count: number; merge_requests_enabled: boolean; jobs_enabled: boolean; wiki_enabled: boolean; snippets_enabled: boolean; can_create_merge_request_in: boolean; resolve_outdated_diff_discussions: boolean; container_registry_access_level: string; security_and_compliance_access_level: string; container_expiration_policy: { cadence: string; enabled: boolean; keep_n: number | null; older_than: string | null; name_regex_delete: string | null; name_regex_keep: string | null; next_run_at: string; }; updated_at: string; creator_id: number; import_url: string | null; import_type: string | null; import_status: string; import_error: string | null; permissions: { project_access: { access_level: number; notification_level: number; }; group_access: { access_level: number; notification_level: number; }; }; archived: boolean; license_url: string; license: ProjectLicenseSchema; shared_runners_enabled: boolean; group_runners_enabled: boolean; runners_token: string; ci_default_git_depth: number; ci_forward_deployment_enabled: boolean; ci_forward_deployment_rollback_allowed: boolean; ci_allow_fork_pipelines_to_run_in_parent_project: boolean; ci_separated_caches: boolean; ci_restrict_pipeline_cancellation_role: string; public_jobs: boolean; shared_with_groups: { group_id: number; group_name: string; group_full_path: string; group_access_level: number; }[] | null; repository_storage: string; only_allow_merge_if_pipeline_succeeds: boolean; allow_merge_on_skipped_pipeline: boolean; ci_pipeline_variables_minimum_override_role: boolean; only_allow_merge_if_all_discussions_are_resolved: boolean; remove_source_branch_after_merge: boolean; printing_merge_requests_link_enabled: boolean; request_access_enabled: boolean; merge_method: string; squash_option: string; auto_devops_enabled: boolean; auto_devops_deploy_strategy: string; mirror: boolean; mirror_user_id: number; mirror_trigger_builds: boolean; only_mirror_protected_branches: boolean; mirror_overwrites_diverged_branches: boolean; external_authorization_classification_label: string | null; packages_enabled: boolean; service_desk_enabled: boolean; service_desk_address: string | null; autoclose_referenced_issues: boolean; suggestion_commit_message: string | null; enforce_auth_checks_on_uploads: boolean; merge_commit_template: string | null; squash_commit_template: string | null; issue_branch_template: string; marked_for_deletion_on: string; compliance_frameworks: string[] | null; warn_about_potentially_unwanted_characters: boolean; container_registry_image_prefix: string; _links: { self: string; issues: string; merge_requests: string; repo_branches: string; labels: string; events: string; members: string; cluster_agents: string; }; } interface ProjectFileUploadSchema extends Record<string, unknown> { alt: string; url: string; full_path: string; markdown: string; } type AllProjectsOptions = { userId?: string; archived?: boolean; idAfter?: number; idBefore?: number; imported?: boolean; includeHidden?: boolean; includePendingDelete?: boolean; lastActivityAfter?: string; lastActivityBefore?: string; membership?: boolean; minAccessLevel?: Exclude<AccessLevel, AccessLevel.ADMIN>; orderBy?: 'id' | 'name' | 'path' | 'created_at' | 'updated_at' | 'last_activity_at' | 'similarity' | 'repository_size' | 'storage_size' | 'packages_size' | 'wiki_size'; owned?: boolean; repositoryChecksumFailed?: boolean; repositoryStorage?: string; searchNamespaces?: boolean; search?: string; simple?: boolean; sort?: 'asc' | 'desc'; starred?: boolean; statistics?: boolean; topic?: string; topicId?: number; visibility?: 'public' | 'internal' | 'private'; wikiChecksumFailed?: boolean; withCustomAttributes?: boolean; withIssuesEnabled?: boolean; withMergeRequestsEnabled?: boolean; withProgrammingLanguage?: string; updatedBefore?: string; updatedAfter?: string; markedForDeletionOn?: string; active?: boolean; }; type CreateProjectOptions = { userId?: number; avatar?: { content: Blob; filename: string; }; allowMergeOnSkippedPipeline?: boolean; onlyAllowMergeIfAllStatusChecksPassed?: boolean; analyticsAccessLevel?: AccessLevelSettingState; approvalsBeforeMerge?: number; autoCancelPendingPipelines?: string; autoDevopsDeployStrategy?: 'continuous' | 'manual' | 'timed_incremental'; autoDevopsEnabled?: boolean; autocloseReferencedIssues?: boolean; buildGitStrategy?: string; buildTimeout?: number; buildsAccessLevel?: AccessLevelSettingState; ciConfigPath?: string; ciDeletePipelinesInSeconds?: number; containerExpirationPolicyAttributes?: Record<string, string>; containerRegistryAccessLevel?: AccessLevelSettingState; defaultBranch?: string; description?: string; emailsDisabled?: boolean; externalAuthorizationClassificationLabel?: string; forkingAccessLevel?: AccessLevelSettingState; groupWithProjectTemplatesId?: number; importUrl?: string; initializeWithReadme?: boolean; issuesAccessLevel?: AccessLevelSettingState; lfsEnabled?: boolean; mergeMethod?: string; mergePipelinesEnabled?: boolean; mergeRequestsAccessLevel?: AccessLevelSettingState; mergeTrainsEnabled?: boolean; mirrorTriggerBuilds?: boolean; mirror?: boolean; namespaceId?: number; onlyAllowMergeIfAllDiscussionsAreResolved?: boolean; onlyAllowMergeIfPipelineSucceeds?: boolean; packagesEnabled?: boolean; pagesAccessLevel?: AccessLevelSettingState | 'public'; printingMergeRequestLinkEnabled?: boolean; publicBuilds?: boolean; releasesAccessLevel?: AccessLevelSettingState; environmentsAccessLevel?: AccessLevelSettingState; featureFlagsAccessLevel?: AccessLevelSettingState; infrastructureAccessLevel?: AccessLevelSettingState; monitorAccessLevel?: AccessLevelSettingState; removeSourceBranchAfterMerge?: boolean; repositoryAccessLevel?: AccessLevelSettingState; repositoryStorage?: string; requestAccessEnabled?: boolean; requirementsAccessLevel?: AccessLevelSettingState; resolveOutdatedDiffDiscussions?: boolean; securityAndComplianceAccessLevel?: AccessLevelSettingState; sharedRunnersEnabled?: boolean; groupRunnersEnabled?: boolean; snippetsAccessLevel?: AccessLevelSettingState; squashOption?: 'never' | 'always' | 'default_on' | 'default_off'; templateName?: string; templateProjectId?: number; topics?: string[]; useCustomTemplate?: boolean; visibility?: 'public' | 'internal' | 'private'; wikiAccessLevel?: AccessLevelSettingState; }; type EditProjectOptions = { avatar?: { content: Blob; filename: string; }; allowMergeOnSkippedPipeline?: boolean; allowPipelineTriggerApproveDeployment?: boolean; onlyAllowMergeIfAllStatusChecksPassed?: boolean; analyticsAccessLevel?: AccessLevelSettingState; approvalsBeforeMerge?: number; autoCancelPendingPipelines?: string; autoDevopsDeployStrategy?: 'continuous' | 'manual' | 'timed_incremental'; autoDevopsEnabled?: boolean; autocloseReferencedIssues?: boolean; buildGitStrategy?: string; buildTimeout?: number; buildsAccessLevel?: AccessLevelSettingState; ciConfigPath?: string; ciDefaultGitDepth?: number; ciForwardDeploymentEnabled?: boolean; ciAllowForkPipelinesToRunInParentProject?: boolean; ciSeparatedCaches?: boolean; ciDeletePipelinesInSeconds?: number; containerExpirationPolicyAttributes?: Record<string, string>; containerRegistryAccessLevel?: string; defaultBranch?: string; description?: string; emailsDisabled?: boolean; enforceAuthChecksOnUploads?: boolean; externalAuthorizationClassificationLabel?: string; forkingAccessLevel?: AccessLevelSettingState; importUrl?: string; issuesAccessLevel?: AccessLevelSettingState; issuesTemplate?: string; keepLatestArtifact?: boolean; lfsEnabled?: boolean; mergeCommitTemplate?: string; mergeMethod?: string; mergePipelinesEnabled?: boolean; mergeRequestsAccessLevel?: AccessLevelSettingState; mergeRequestsTemplate?: string; mergeTrainsEnabled?: boolean; mirrorOverwritesDivergedBranches?: boolean; mirrorTriggerBuilds?: boolean; mirrorUserId?: number; mirror?: boolean; mrDefaultTargetSelf?: boolean; name?: string; onlyAllowMergeIfAllDiscussionsAreResolved?: boolean; onlyAllowMergeIfPipelineSucceeds?: boolean; onlyMirrorProtectedBranches?: boolean; packagesEnabled?: boolean; pagesAccessLevel?: string; path?: string; printingMergeRequestLinkEnabled?: boolean; publicBuilds?: boolean; releasesAccessLevel?: AccessLevelSettingState; environmentsAccessLevel?: AccessLevelSettingState; featureFlagsAccessLevel?: AccessLevelSettingState; infrastructureAccessLevel?: AccessLevelSettingState; monitorAccessLevel?: AccessLevelSettingState; removeSourceBranchAfterMerge?: boolean; repositoryAccessLevel?: AccessLevelSettingState; repositoryStorage?: string; requestAccessEnabled?: boolean; requirementsAccessLevel?: AccessLevelSettingState; resolveOutdatedDiffDiscussions?: boolean; restrictUserDefinedVariables?: boolean; securityAndComplianceAccessLevel?: AccessLevelSettingState; serviceDeskEnabled?: boolean; sharedRunnersEnabled?: boolean; groupRunnersEnabled?: boolean; snippetsAccessLevel?: AccessLevelSettingState; issueBranchTemplate?: string; squashCommitTemplate?: string; squashOption?: 'never' | 'always' | 'default_on' | 'default_off'; suggestionCommitMessage?: string; topics?: string[]; visibility?: 'public' | 'internal' | 'private'; wikiAccessLevel?: AccessLevelSettingState; }; type ForkProjectOptions = { branches?: string; description?: string; mrDefaultTargetSelf?: boolean; name?: string; namespaceId?: number; namespacePath