import { BaseResource } from '@gitbeaker/requester-utils'; import { RequestHelper } from '../infrastructure'; import type { GitlabAPIResponse, PaginationRequestOptions, PaginationTypes, ShowExpanded, Sudo, } from '../infrastructure'; export type ImpersonationTokenScope = | 'api' | 'read_api' | 'read_user' | 'create_runner' | 'read_repository' | 'write_repository' | 'read_registry' | 'write_registry' | 'sudo' | 'admin_mode'; export type ImpersonationTokenState = 'all' | 'active' | 'inactive'; export interface UserImpersonationTokenSchema extends Record { active: boolean; user_id: number; scopes?: string[]; revoked: boolean; name: string; id: number; created_at: string; impersonation: boolean; expires_at: string; token?: string; } export class UserImpersonationTokens extends BaseResource { all( userId: number, options?: { state?: ImpersonationTokenState } & PaginationRequestOptions

& Sudo & ShowExpanded, ): Promise> { return RequestHelper.get()( this, `users/${userId}/impersonation_tokens`, options, ); } create( userId: number, name: string, scopes: ImpersonationTokenScope[], options?: { expiresAt?: string } & Sudo & ShowExpanded, ): Promise> { return RequestHelper.post()( this, `users/${userId}/impersonation_tokens`, { name, scopes, ...options, }, ); } show( userId: number, tokenId: number, options?: Sudo & ShowExpanded, ): Promise> { return RequestHelper.get()( this, `users/${userId}/impersonation_tokens/${tokenId}`, options, ); } remove( userId: number, tokenId: number, options?: Sudo & ShowExpanded, ) { return RequestHelper.del()(this, `users/${userId}/impersonation_tokens/${tokenId}`, options); } // Convienence method revoke( userId: number, tokenId: number, options?: Sudo & ShowExpanded, ) { return this.remove(userId, tokenId, options); } }