import { BaseResource } from '@gitbeaker/requester-utils'; import { RequestHelper, endpoint } from '../infrastructure'; import type { GitlabAPIResponse, ShowExpanded } from '../infrastructure'; export interface ComposerV1BaseRepositorySchema extends Record { packages?: string[]; 'metadata-url': string; 'provider-includes': Record>; 'providers-url': string; } export interface ComposerV2BaseRepositorySchema extends Record { packages?: string[]; 'metadata-url': string; } export interface ComposerV1PackagesSchema extends Record { providers: { [name: string]: { sha256: string; }; }; } export interface PackageMetadata { name: string; type: string; license: string; version: string; dist: { type: string; url: string; reference: string; shasum: string; }; source: { type: string; url: string; reference: string; }; uid: number; } export interface ComposerPackageMetadataSchema extends Record { packages: { [name: string]: { [version: string]: PackageMetadata; }; }; } export class Composer extends BaseResource { create( projectId: string | number, options?: { tag?: string; branch?: string } & ShowExpanded, ): Promise> { return RequestHelper.post<{ message: string }>()( this, endpoint`projects/${projectId}/packages/composer`, options, ); } download( projectId: string | number, packageName: string, sha: string, options?: ShowExpanded, ): Promise> { return RequestHelper.get()( this, endpoint`projects/${projectId}/packages/composer/archives/${packageName}`, { searchParams: { sha }, ...options, }, ); } showMetadata( groupId: string | number, packageName: string, options?: { sha?: string } & ShowExpanded, ): Promise> { let url: string; if (options && options.sha) { url = endpoint`groups/${groupId}/-/packages/composer/${packageName}$${options.sha}`; } else { url = endpoint`groups/${groupId}/-/packages/composer/p2/${packageName}`; } return RequestHelper.get()(this, url, options); } showPackages( groupId: string | number, sha: string, options?: ShowExpanded, ): Promise> { return RequestHelper.get()( this, endpoint`groups/${groupId}/-/packages/composer/p/${sha}`, options, ); } showBaseRepository( groupId: string | number, options?: { composerVersion: '1' } & ShowExpanded, ): Promise>; showBaseRepository( groupId: string | number, options?: { composerVersion: '2' } & ShowExpanded, ): Promise>; showBaseRepository( groupId: string | number, options?: { composerVersion?: '1' | '2' } & ShowExpanded, ): Promise< GitlabAPIResponse > { const clonedService = { ...this }; if (options && options.composerVersion === '2') { clonedService.headers['User-Agent'] = 'Composer/2'; } return RequestHelper.get()( clonedService, endpoint`groups/${groupId}/-/packages/composer/packages`, options, ); } }