import { BaseResource } from '@gitbeaker/requester-utils'; import { RequestHelper, endpoint } from '../infrastructure'; import type { GitlabAPIResponse, PaginationRequestOptions, PaginationTypes, ShowExpanded, Sudo, } from '../infrastructure'; export interface PersonalAccessTokenSchema extends Record { 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; } export type PersonalAccessTokenScopes = | 'api' | 'read_api' | 'read_user' | 'create_runner' | 'read_repository' | 'write_repository' | 'read_registry' | 'write_registry' | 'sudo' | 'admin_mode'; export type AllPersonalAccessTokenOptions = { userId?: string | number; state?: 'active' | 'inactive'; search?: string; revoked?: boolean; lastUsedBefore?: string; lastUsedAfter?: string; createdBefore?: string; createdAfter?: string; }; export class PersonalAccessTokens extends BaseResource { all( options?: AllPersonalAccessTokenOptions & Sudo & ShowExpanded & PaginationRequestOptions

, ): Promise> { return RequestHelper.get()( this, 'personal_access_tokens', options, ); } // Convience method - Also located in Users create( userId: number, name: string, scopes: string[], options?: { expiresAt?: string } & Sudo & ShowExpanded, ): Promise> { return RequestHelper.post()( this, endpoint`users/${userId}/personal_access_tokens`, { name, scopes, ...options, }, ); } remove({ tokenId, ...options }: { tokenId?: string | number } & Sudo & ShowExpanded = {}): Promise< GitlabAPIResponse > { const url = tokenId ? endpoint`personal_access_tokens/${tokenId}` : 'personal_access_tokens/self'; return RequestHelper.del()(this, url, options); } rotate( tokenId: number | 'self', options?: { expiresAt?: string } & Sudo & ShowExpanded, ): Promise> { return RequestHelper.post()( this, endpoint`personal_access_tokens/${tokenId}/rotate`, options, ); } show({ tokenId, ...options }: { tokenId?: string | number } & Sudo & ShowExpanded = {}): Promise< GitlabAPIResponse > { const url = tokenId ? endpoint`personal_access_tokens/${tokenId}` : 'personal_access_tokens/self'; return RequestHelper.get()(this, url, options); } }