UNPKG

kaven-utils

Version:

Utils for Node.js.

75 lines (74 loc) 2.56 kB
/******************************************************************** * @author: Kaven * @email: kaven@wuwenkai.com * @website: http://blog.kaven.xyz * @file: [Kaven-Utils] /src/DockerRegistry.ts * @create: 2023-12-07 15:01:55.009 * @modify: 2026-03-12 14:22:09.450 * @version: 6.1.3 * @times: 17 * @lines: 88 * @copyright: Copyright © 2023-2026 Kaven. All Rights Reserved. * @description: [description] * @license: [license] ********************************************************************/ import { HttpStandardRequestHeader_Authorization } from "kaven-basic"; import { KavenRequest } from "./KavenRequest.js"; import { KavenBasicAuthentication } from "./net/authentication/KavenBasicAuthentication.js"; /** * @since 5.4.0 * @version 2023-12-07 */ export class DockerRegistry { url; authorization; constructor(url, credentials) { this.url = url; if (credentials) { this.authorization = KavenBasicAuthentication.CreateHeader(credentials.username, credentials.password); } } async ListImages() { const request = this.CreateRequest(`${this.url}/v2/_catalog`); const r = await request.TryExecuteToJson(); if (r) { const { repositories } = r; return repositories; } return undefined; } async ListTags(repository) { const request = this.CreateRequest(`${this.url}/v2/${repository}/tags/list`); const r = await request.TryExecuteToJson(); return r; } /** * Pulling an Image Manifest * @see https://distribution.github.io/distribution/spec/api/#pulling-an-image-manifest */ async GetImageManifest(name, reference) { const request = this.CreateRequest(`${this.url}/v2/${name}/manifests/${reference}`); const r = await request.TryExecuteToJson(); return r; } async ListImageWithTags() { const list = []; const repositories = await this.ListImages(); if (repositories) { for (const repository of repositories) { const r = await this.ListTags(repository); if (r) { list.push(r); } } } return list; } CreateRequest(url) { const request = new KavenRequest(url); if (this.authorization) { request.UpdateHeader(HttpStandardRequestHeader_Authorization, this.authorization); } return request; } }