import { BaseResource } from '@gitbeaker/requester-utils'; import { RequestHelper, endpoint } from '../infrastructure'; import type { BaseRequestOptions, GitlabAPIResponse, OneOrNoneOf, PaginationRequestOptions, PaginationTypes, ShowExpanded, Sudo, } from '../infrastructure'; import type { SimpleProjectSchema } from './Projects'; export interface CondensedDeployKeySchema extends Record { id: number; title: string; key: string; created_at: string; } export interface DeployKeySchema extends CondensedDeployKeySchema { fingerprint: string; fingerprint_sha256: string; expires_at?: string; can_push?: boolean; } export interface ExpandedDeployKeySchema extends DeployKeySchema { projects_with_write_access?: SimpleProjectSchema[]; } export class DeployKeys extends BaseResource { all( { projectId, userId, ...options }: OneOrNoneOf<{ projectId: string | number; userId: string | number }> & { public?: boolean; } & PaginationRequestOptions

& BaseRequestOptions = {} as any, ): Promise> { let url: string; if (projectId) { url = endpoint`projects/${projectId}/deploy_keys`; } else if (userId) { url = endpoint`users/${userId}/project_deploy_keys`; } else { url = 'deploy_keys'; } return RequestHelper.get()(this, url, options); } create( projectId: string | number, title: string, key: string, options?: { canPush?: boolean } & Sudo & ShowExpanded, ): Promise> { return RequestHelper.post()( this, endpoint`projects/${projectId}/deploy_keys`, { title, key, ...options, }, ); } edit( projectId: string | number, keyId: number, options?: { canPush?: boolean; title?: string } & Sudo & ShowExpanded, ): Promise> { return RequestHelper.put()( this, endpoint`projects/${projectId}/deploy_keys/${keyId}`, options, ); } enable( projectId: string | number, keyId: number, options?: Sudo & ShowExpanded, ): Promise> { return RequestHelper.post()( this, endpoint`projects/${projectId}/deploy_keys/${keyId}/enable`, options, ); } remove( projectId: string | number, keyId: number, options?: Sudo & ShowExpanded, ): Promise> { return RequestHelper.del()(this, endpoint`projects/${projectId}/deploy_keys/${keyId}`, options); } show( projectId: string | number, keyId: number, options?: Sudo & ShowExpanded, ): Promise> { return RequestHelper.get()( this, endpoint`projects/${projectId}/deploy_keys/${keyId}`, options, ); } }