kaven-utils
Version:
Utils for Node.js.
75 lines (74 loc) • 2.56 kB
JavaScript
/********************************************************************
* @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;
}
}