import { BaseResource } from '@gitbeaker/requester-utils'; import { RequestHelper } from '../infrastructure'; import type { GitlabAPIResponse, ShowExpanded, Sudo } from '../infrastructure'; export interface UserSSHKeySchema extends Record { id: number; key: string; title: string; created_at: string; } const url = (userId?: number) => (userId ? `users/${userId}/keys` : 'user/keys'); export class UserSSHKeys extends BaseResource { // Convienence method for create add( title: string, key: string, options?: { userId?: number; expiresAt?: string; usageType?: 'auth' | 'signing' | 'auth_and_signing'; } & Sudo & ShowExpanded, ): Promise> { return this.create(title, key, options); } all({ userId, ...options }: { userId?: number } & Sudo & ShowExpanded = {}): Promise< GitlabAPIResponse > { return RequestHelper.get()( this, url(userId), options as Sudo & ShowExpanded, ); } create( title: string, key: string, { userId, ...options }: { userId?: number; expiresAt?: string; usageType?: 'auth' | 'signing' | 'auth_and_signing'; } & Sudo & ShowExpanded = {}, ): Promise> { return RequestHelper.post()(this, url(userId), { title, key, ...options, }); } show( keyId: number, { userId, ...options }: { userId?: number } & Sudo & ShowExpanded = {}, ): Promise> { return RequestHelper.get()( this, `${url(userId)}/${keyId}`, options as Sudo & ShowExpanded, ); } remove( keyId: number, { userId, ...options }: { userId?: number } & Sudo & ShowExpanded = {}, ): Promise> { return RequestHelper.del()(this, `${url(userId)}/${keyId}`, options as Sudo & ShowExpanded); } }