import { BaseResource } from '@gitbeaker/requester-utils'; import { RequestHelper, endpoint } from '../infrastructure'; import type { GitlabAPIResponse, MappedOmit, ShowExpanded, Sudo, UserAgentDetailSchema, } from '../infrastructure'; import type { SimpleUserSchema } from './Users'; export type SnippetVisibility = 'private' | 'public' | 'internal'; export interface SimpleSnippetSchema extends Record { id: number; title: string; file_name: string; description?: string; author: MappedOmit; updated_at: string; created_at: string; project_id?: string | number; web_url: string; } export interface SnippetSchema extends SimpleSnippetSchema { visibility: SnippetVisibility; raw_url: string; } export interface ExpandedSnippetSchema extends SnippetSchema { expires_at?: string; ssh_url_to_repo: string; http_url_to_repo: string; files?: { path: string; raw_url: string; }[]; } export type CreateSnippetOptions = { description?: string; visibility?: SnippetVisibility; files?: { content: string; filePath: string }[]; }; export type EditSnippetOptions = { description?: string; visibility?: SnippetVisibility; files?: { content?: string; filePath?: string; previousPath?: string; action: 'create' | 'update' | 'delete' | 'move'; }[]; }; export class Snippets extends BaseResource { all({ public: ppublic, ...options }: { public?: boolean; createdAfter?: string; createdBefore?: string } & Sudo & ShowExpanded = {}): Promise> { const url = ppublic ? 'snippets/public' : 'snippets'; return RequestHelper.get()(this, url, options); } create( title: string, options?: CreateSnippetOptions & Sudo & ShowExpanded, ) { return RequestHelper.post()(this, 'snippets', { title, ...options, }); } edit( snippetId: number, options?: EditSnippetOptions & Sudo & ShowExpanded, ) { return RequestHelper.put()(this, `snippets/${snippetId}`, options); } remove(snippetId: number, options?: Sudo & ShowExpanded) { return RequestHelper.del()(this, `snippets/${snippetId}`, options); } show( snippetId: number, options?: Sudo & ShowExpanded, ): Promise> { return RequestHelper.get()(this, `snippets/${snippetId}`, options); } showContent( snippetId: number, options?: Sudo & ShowExpanded, ): Promise> { return RequestHelper.get()(this, `snippets/${snippetId}/raw`, options); } showRepositoryFileContent( snippetId: number, ref: string, filePath: string, options?: Sudo & ShowExpanded, ): Promise> { return RequestHelper.get()( this, endpoint`snippets/${snippetId}/files/${ref}/${filePath}/raw`, options, ); } showUserAgentDetails( snippetId: number, options?: Sudo & ShowExpanded, ) { return RequestHelper.get()( this, `snippets/${snippetId}/user_agent_detail`, options, ); } }