import { BaseResource } from '@gitbeaker/requester-utils'; import { RequestHelper, endpoint } from '../infrastructure'; import type { GitlabAPIResponse, ShowExpanded } from '../infrastructure'; export interface PackageSnapshotSchema extends Record { 'conan_package.tgz': string; 'conanfile.py': string; 'conanmanifest.txt': string; } export interface RecipeSnapshotSchema extends Record { 'conan_sources.tgz': string; 'conanfile.py': string; 'conanmanifest.txt': string; } function url(projectId?: string | number): string { return projectId ? endpoint`projects/${projectId}/packages/conan/v1` : 'packages/conan/v1'; } export class Conan extends BaseResource { authenticate({ projectId, ...options }: { projectId?: string | number } & ShowExpanded = {}): Promise< GitlabAPIResponse > { return RequestHelper.get()(this, `${url(projectId)}/users/authenticate`, options); } checkCredentials({ projectId, ...options }: { projectId?: string | number } & ShowExpanded = {}): Promise< GitlabAPIResponse > { const prefix = url(projectId); return RequestHelper.get()(this, `${prefix}/users/check_credentials`, options); } downloadPackageFile( packageName: string, packageVersion: string, packageUsername: string, packageChannel: string, conanPackageReference: string, recipeRevision: string, packageRevision: string, filename: string, { projectId, ...options }: { projectId?: string | number } & ShowExpanded = {}, ): Promise> { const prefix = url(projectId); return RequestHelper.get()( this, `${prefix}/conans/${packageName}/${packageVersion}/${packageUsername}/${packageChannel}/${recipeRevision}/package/${conanPackageReference}/${packageRevision}/${filename}`, options, ); } downloadRecipeFile( packageName: string, packageVersion: string, packageUsername: string, packageChannel: string, recipeRevision: string, filename: string, { projectId, ...options }: { projectId?: string | number } & ShowExpanded = {}, ): Promise> { const prefix = url(projectId); return RequestHelper.get()( this, `${prefix}/conans/${packageName}/${packageVersion}/${packageUsername}/${packageChannel}/${recipeRevision}/export/${filename}`, options, ); } showPackageUploadUrls( packageName: string, packageVersion: string, packageUsername: string, packageChannel: string, conanPackageReference: string, { projectId, ...options }: { projectId?: string | number } & ShowExpanded = {}, ): Promise> { const prefix = url(projectId); return RequestHelper.get()( this, `${prefix}/conans/${packageName}/${packageVersion}/${packageUsername}/${packageChannel}/packages/${conanPackageReference}/upload_urls`, options, ); } showPackageDownloadUrls( packageName: string, packageVersion: string, packageUsername: string, packageChannel: string, conanPackageReference: string, { projectId, ...options }: { projectId?: string | number } & ShowExpanded = {}, ): Promise> { const prefix = url(projectId); return RequestHelper.get()( this, `${prefix}/conans/${packageName}/${packageVersion}/${packageUsername}/${packageChannel}/packages/${conanPackageReference}/download_urls`, options, ); } showPackageManifest( packageName: string, packageVersion: string, packageUsername: string, packageChannel: string, conanPackageReference: string, { projectId, ...options }: { projectId?: string | number } & ShowExpanded = {}, ): Promise> { const prefix = url(projectId); return RequestHelper.get()( this, `${prefix}/conans/${packageName}/${packageVersion}/${packageUsername}/${packageChannel}/packages/${conanPackageReference}/digest`, options, ); } showPackageSnapshot( packageName: string, packageVersion: string, packageUsername: string, packageChannel: string, conanPackageReference: string, { projectId, ...options }: { projectId?: string | number } & ShowExpanded = {}, ): Promise> { const prefix = url(projectId); return RequestHelper.get()( this, `${prefix}/conans/${packageName}/${packageVersion}/${packageUsername}/${packageChannel}/packages/${conanPackageReference}`, options, ); } ping({ projectId, ...options }: { projectId?: string | number } & ShowExpanded = {}): Promise< GitlabAPIResponse > { return RequestHelper.post()(this, `${url(projectId)}/ping`, options); } showRecipeUploadUrls( packageName: string, packageVersion: string, packageUsername: string, packageChannel: string, { projectId, ...options }: { projectId?: string | number } & ShowExpanded = {}, ): Promise> { const prefix = url(projectId); return RequestHelper.get()( this, `${prefix}/conans/${packageName}/${packageVersion}/${packageUsername}/${packageChannel}/upload_urls`, options, ); } showRecipeDownloadUrls( packageName: string, packageVersion: string, packageUsername: string, packageChannel: string, { projectId, ...options }: { projectId?: string | number } & ShowExpanded = {}, ): Promise> { const prefix = url(projectId); return RequestHelper.get()( this, `${prefix}/conans/${packageName}/${packageVersion}/${packageUsername}/${packageChannel}/download_urls`, options, ); } showRecipeManifest( packageName: string, packageVersion: string, packageUsername: string, packageChannel: string, { projectId, ...options }: { projectId?: string | number } & ShowExpanded = {}, ): Promise> { const prefix = url(projectId); return RequestHelper.get()( this, `${prefix}/conans/${packageName}/${packageVersion}/${packageUsername}/${packageChannel}/digest`, options, ); } showRecipeSnapshot( packageName: string, packageVersion: string, packageUsername: string, packageChannel: string, { projectId, ...options }: { projectId?: string | number } & ShowExpanded = {}, ): Promise> { const prefix = url(projectId); return RequestHelper.get()( this, `${prefix}/conans/${packageName}/${packageVersion}/${packageUsername}/${packageChannel}`, options, ); } removePackageFile( packageName: string, packageVersion: string, packageUsername: string, packageChannel: string, { projectId, ...options }: { projectId?: string | number } & ShowExpanded = {}, ): Promise> { const prefix = url(projectId); return RequestHelper.get()( this, `${prefix}/conans/${packageName}/${packageVersion}/${packageUsername}/${packageChannel}`, options, ); } search({ projectId, ...options }: { projectId?: string | number } & ShowExpanded = {}): Promise< GitlabAPIResponse<{ results: string[] }, C, E, void> > { const prefix = url(projectId); return RequestHelper.get<{ results: string[] }>()(this, `${prefix}/conans/search`, options); } uploadPackageFile( packageFile: { content: Blob; filename: string }, packageName: string, packageVersion: string, packageUsername: string, packageChannel: string, conanPackageReference: string, recipeRevision: string, packageRevision: string, options?: ShowExpanded, ): Promise> { const prefix = url(); return RequestHelper.get()( this, `${prefix}/files/${packageName}/${packageVersion}/${packageUsername}/${packageChannel}/${recipeRevision}/package/${conanPackageReference}/${packageRevision}/${packageFile.filename}`, { isForm: true, ...options, file: [packageFile.content, packageFile.filename], }, ); } uploadRecipeFile( packageFile: { content: Blob; filename: string }, packageName: string, packageVersion: string, packageUsername: string, packageChannel: string, recipeRevision: string, options?: ShowExpanded, ): Promise> { const prefix = url(); return RequestHelper.get()( this, `${prefix}/files/${packageName}/${packageVersion}/${packageUsername}/${packageChannel}/${recipeRevision}/export/${packageFile.filename}`, { isForm: true, ...options, file: [packageFile.content, packageFile.filename], }, ); } }