import {z} from 'zod' export type GetApiProjectsProjectNameOrIdArtifactsArgs = {'X-Request-Id'?: string | undefined, 'X-Is-Resource-Name'?: boolean | undefined, project_name_or_id: string, q?: string | undefined, sort?: string | undefined, page?: number | undefined, page_size?: number | undefined, 'X-Accept-Vulnerabilities'?: string | undefined, with_tag?: boolean | undefined, with_label?: boolean | undefined, with_scan_overview?: boolean | undefined, with_sbom_overview?: boolean | undefined, with_immutable_status?: boolean | undefined, with_accessory?: boolean | undefined, latest_in_repository?: boolean | undefined}; export type GetApiProjectsProjectNameOrIdArtifactsOptions = {baseUrl?: string | undefined, basic?: {username: string, password: string} | undefined, fetch?: typeof fetch | undefined}; export const extraAttrs = z.record(z.string(), z.object({})); export const annotations = z.record(z.string(), z.string()); export const platform = z.object({architecture: z.string().optional(), os: z.string().optional(), "'os.version'": z.string().optional(), "'os.features'": z.array(z.string()).optional(), variant: z.string().optional()}); export const reference = z.object({parent_id: z.number().int().optional(), child_id: z.number().int().optional(), child_digest: z.string().optional(), platform: platform.optional(), annotations: annotations.optional(), urls: z.array(z.string()).optional()}); export const tag = z.object({id: z.number().int().optional(), repository_id: z.number().int().optional(), artifact_id: z.number().int().optional(), name: z.string().optional(), push_time: z.string().optional(), pull_time: z.string().optional(), immutable: z.boolean().optional()}); export const additionLink = z.object({href: z.string().optional(), absolute: z.boolean().optional()}); export const additionLinks = z.record(z.string(), additionLink); export const label = z.object({id: z.number().int().optional(), name: z.string().optional(), description: z.string().optional(), color: z.string().optional(), scope: z.string().optional(), project_id: z.number().int().optional(), creation_time: z.string().optional(), update_time: z.string().optional()}); export const vulnerabilitySummary = z.object({total: z.number().int().optional(), fixable: z.number().int().optional(), summary: z.record(z.string(), z.number().int()).optional()}); export const scanner = z.object({name: z.string().optional(), vendor: z.string().optional(), version: z.string().optional()}); export const nativeReportSummary = z.object({report_id: z.string().optional(), scan_status: z.string().optional(), severity: z.string().optional(), duration: z.number().int().optional(), summary: vulnerabilitySummary.optional(), start_time: z.string().optional(), end_time: z.string().optional(), complete_percent: z.number().int().optional(), scanner: scanner.optional()}); export const scanOverview = z.record(z.string(), nativeReportSummary); export const sBOMOverview = z.object({start_time: z.string().optional(), end_time: z.string().optional(), scan_status: z.string().optional(), sbom_digest: z.string().optional(), report_id: z.string().optional(), duration: z.number().int().optional(), scanner: scanner.optional()}); export const accessory = z.object({id: z.number().int().optional(), artifact_id: z.number().int().optional(), subject_artifact_id: z.number().int().optional(), subject_artifact_digest: z.string().optional(), subject_artifact_repo: z.string().optional(), size: z.number().int().optional(), digest: z.string().optional(), type: z.string().optional(), icon: z.string().optional(), creation_time: z.string().optional()}); export const artifact = z.object({id: z.number().int().optional(), type: z.string().optional(), media_type: z.string().optional(), manifest_media_type: z.string().optional(), artifact_type: z.string().optional(), project_id: z.number().int().optional(), repository_id: z.number().int().optional(), repository_name: z.string().optional(), digest: z.string().optional(), size: z.number().int().optional(), icon: z.string().optional(), push_time: z.string().optional(), pull_time: z.string().optional(), extra_attrs: extraAttrs.optional(), annotations: annotations.optional(), references: z.array(reference).optional(), tags: z.array(tag).optional(), addition_links: additionLinks.optional(), labels: z.array(label).optional(), scan_overview: scanOverview.optional(), sbom_overview: sBOMOverview.optional(), accessories: z.array(accessory).optional()}); export const getApiProjectsProjectNameOrIdArtifactsResponse = z.array(artifact); export const validateResponse = async ( schema: { readonly '~standard': { readonly validate: (value: unknown) => ({ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }) | Promise<{ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }> } }, value: unknown ): Promise => { const result = await schema['~standard'].validate(value) if (result.issues !== undefined) { const detail = result.issues .map(({ message, path }) => path?.length ? `${path.map((segment) => String(typeof segment === 'object' ? segment.key : segment)).join('.')}: ${message}` : message ) .join('; ') throw new Error(`Response does not match the schema: ${detail}`, { cause: { issues: result.issues } }) } return result.value }; /** * List artifacts * * GET /projects/{project_name_or_id}/artifacts */ export const getApiProjectsProjectNameOrIdArtifacts = async (args: GetApiProjectsProjectNameOrIdArtifactsArgs, options?: GetApiProjectsProjectNameOrIdArtifactsOptions) => { const {baseUrl = "http://localhost/api/v2.0", fetch: fetchFn = fetch, basic} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (args['X-Request-Id'] != null) headers.set("X-Request-Id", String(args['X-Request-Id'])) if (args['X-Is-Resource-Name'] != null) headers.set("X-Is-Resource-Name", String(args['X-Is-Resource-Name'])) if (args.q != null) query.append("q", String(args.q)) if (args.sort != null) query.append("sort", String(args.sort)) if (args.page != null) query.append("page", String(args.page)) if (args.page_size != null) query.append("page_size", String(args.page_size)) if (args['X-Accept-Vulnerabilities'] != null) headers.set("X-Accept-Vulnerabilities", String(args['X-Accept-Vulnerabilities'])) if (args.with_tag != null) query.append("with_tag", String(args.with_tag)) if (args.with_label != null) query.append("with_label", String(args.with_label)) if (args.with_scan_overview != null) query.append("with_scan_overview", String(args.with_scan_overview)) if (args.with_sbom_overview != null) query.append("with_sbom_overview", String(args.with_sbom_overview)) if (args.with_immutable_status != null) query.append("with_immutable_status", String(args.with_immutable_status)) if (args.with_accessory != null) query.append("with_accessory", String(args.with_accessory)) if (args.latest_in_repository != null) query.append("latest_in_repository", String(args.latest_in_repository)) if (basic !== undefined) headers.set('authorization', `Basic ${btoa(`${basic.username}:${basic.password}`)}`) const url = `${baseUrl.replace(/\/+$/, '')}/projects/${encodeURIComponent(String(args.project_name_or_id))}/artifacts${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "GET", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(getApiProjectsProjectNameOrIdArtifactsResponse, await res.json()) };