@hapic/harbor
Version:
A harbor http api client.
482 lines (481 loc) • 17.6 kB
text/typescript
import { CONNECTION_STRING_PARSE_ERROR_INSTANCE, Client, ClientError, ClientOptionsInput, ConnectionStringParseError, ErrorCode, HapicError, HttpResponseError, IClient, NetworkError, RequestBaseOptions, RequestBaseOptions as RequestBaseOptions$1, Response, Response as Response$1, ResponseData, isClientError, isClientErrorDueNetworkIssue, isClientErrorWithStatusCode, isConnectionStringParseError, isHapicError, isHttpResponseError, isNetworkError } from "hapic";
//#region src/config/type.d.ts
type ConnectionOptions = {
host: string;
user: string;
password: string;
};
type Config = {
request: ClientOptionsInput;
connectionString?: string;
connectionOptions?: ConnectionOptions;
};
type ConfigInput = Partial<Config>;
//#endregion
//#region src/domains/type.d.ts
type BaseAPIContext = {
client?: IClient | RequestBaseOptions$1;
};
type ResourceCollectionResponse<R> = {
data: R[];
meta: {
total?: number;
};
};
type SortString<T> = T extends string ? `${T}` | `-${T}` : never;
type ResourceCollectionQuery<T extends Record<string, any> = Record<string, any>> = {
q?: { [K in keyof T]?: any };
page?: number;
page_size?: number;
sort?: SortString<keyof T>[];
};
//#endregion
//#region src/domains/base.d.ts
declare abstract class BaseAPI {
protected client: IClient;
protected constructor(context?: BaseAPIContext);
setClient(input?: IClient | RequestBaseOptions$1): void;
}
//#endregion
//#region src/domains/project/type.d.ts
type Project = {
name: string;
project_id: number;
owner_id: number;
owner_name: string;
registry_id?: number;
repo_count: number;
update_time: string;
creation_time: string;
metadata: ProjectMetadata;
};
type ProjectMetadata = {
public: boolean;
auto_scan?: string;
severity?: 'none' | 'low' | 'medium' | 'high' | 'critical';
};
type ProjectCreatePayload = {
project_name: string;
public?: boolean;
registry_id?: string | number | null;
storage_limit?: number;
};
type ProjectUpdatePayload = {
project_name: string;
public?: boolean;
registry_id?: string | number | null;
storage_limit?: number;
};
type ProjectCreateResponse = {
id?: number;
};
type ProjectQuery = ResourceCollectionQuery<Project> & {
name?: string;
public?: boolean;
owner?: string;
with_detail?: boolean;
};
type ProjectGetManyOptions = {
query?: ProjectQuery;
};
//#endregion
//#region src/domains/project/module.d.ts
declare class ProjectAPI extends BaseAPI {
constructor(context: BaseAPIContext);
create(data: ProjectCreatePayload): Promise<ProjectCreateResponse>;
delete(id: string | number, isProjectName?: boolean): Promise<void>;
update(id: number | string, data: ProjectUpdatePayload, isProjectName?: boolean): Promise<void>;
getMany(options?: ProjectGetManyOptions): Promise<ResourceCollectionResponse<Project>>;
getAll(options?: ProjectGetManyOptions): Promise<ResourceCollectionResponse<Project>>;
getOne(id: string | number, isProjectName?: boolean): Promise<Project>;
}
//#endregion
//#region src/domains/project-repository-artifact-label/type.d.ts
type ProjectArtifactLabel = {
id: number;
name: string;
scope: string;
update_time: string;
creation_time: string;
};
type ProjectArtifactLabelCreateContext = {
projectName: string;
repositoryName: string;
labelId: ProjectArtifactLabel['id'];
tagOrDigest?: string;
};
type ProjectArtifactLabelDeleteContext = {
projectName: string;
repositoryName: string;
labelId: ProjectArtifactLabel['id'];
tagOrDigest?: string;
};
//#endregion
//#region src/domains/project-repository-artifact-label/module.d.ts
declare class ProjectRepositoryArtifactLabelAPI extends BaseAPI {
constructor(context: BaseAPIContext);
create(options: ProjectArtifactLabelCreateContext): Promise<void>;
delete(options: ProjectArtifactLabelDeleteContext): Promise<void>;
}
//#endregion
//#region src/domains/project-repository-artifact/type.d.ts
type ProjectArtifactTag = {
artifact_id: number;
id: number;
immutable: boolean;
name: string;
pull_time: string;
push_time: string;
repository_id: number;
signed: boolean;
};
type ProjectArtifact = {
size: number;
push_time: string;
pull_time: string;
tags?: ProjectArtifactTag[];
labels?: ProjectArtifactLabel[];
digest: string;
id?: number;
type: 'IMAGE' | 'CHART' | string;
project_id: number;
repository_id: number;
};
type ProjectArtifactGetManyQuery = ResourceCollectionQuery<ProjectArtifact> & {
with_tag?: boolean;
with_label?: boolean;
with_scan_overview?: boolean;
with_signature?: boolean;
with_immutable_status?: boolean;
};
type ProjectArtifactGetManyContext = {
projectName: string;
repositoryName: string;
query?: ProjectArtifactGetManyQuery;
};
type ProjectArtifactDeleteContext = {
projectName: string;
repositoryName: string;
tagOrDigest?: string;
};
type ProjectArtifactCopyElement = {
projectName: string;
repositoryName: string;
artifactTag?: string;
artifactDigest?: string;
};
//#endregion
//#region src/domains/project-repository-artifact/module.d.ts
declare class ProjectRepositoryArtifactAPI extends BaseAPI {
constructor(context: BaseAPIContext);
getMany(context: ProjectArtifactGetManyContext): Promise<ProjectArtifact[]>;
copy(destination: ProjectArtifactCopyElement, source: string | ProjectArtifactCopyElement): Promise<void>;
delete(context: ProjectArtifactDeleteContext): Promise<void>;
}
//#endregion
//#region src/domains/project-repository/type.d.ts
type ProjectRepository = {
id: number;
/**
* Full repository name
* <project-name>/<repository-name>
*/
name: string;
project_id: number;
pull_count: number;
artifact_count: number;
description?: string;
creation_time: string;
update_time: string;
/**
* Repository name without project name.
* .../<repository-name>
*/
name_short?: string;
/**
* Project name without repository name.
* <project-name>/...
*/
project_name?: string;
};
type ProjectRepositorySearchResult = {
/**
* Full repository name
* <project-name>/<repository-name>
*/
repository_name: string;
project_name: string;
artifact_count: number;
project_public: boolean;
project_id: number;
pull_count: number;
};
type ProjectRepositoryLongNameRepresentation = {
/**
* Project name without repository name.
* <project-name>/...
*/
projectName: string;
/**
* Project name without repository name.
* <project-name>/...
*/
repositoryName: string;
/**
* Artifact tag
*/
artifactTag?: string;
/**
* Artifact digest
*/
artifactDigest?: string;
};
type ProjectRepositoryFindOneContext = {
projectName: string;
repositoryName: string;
};
type ProjectRepositoryGetOneContext = {
projectName: string;
repositoryName: string;
};
type ProjectRepositoryGetManyQuery = ResourceCollectionQuery<ProjectRepository>;
type ProjectRepositoryGetManyContext = {
projectName: string;
query?: ProjectRepositoryGetManyQuery;
};
type ProjectRepositoryUpdateContext = {
projectName: string;
repositoryName: string;
data: Partial<ProjectRepository>;
};
type ProjectRepositoryDeleteContext = {
projectName: string;
repositoryName: string;
};
//#endregion
//#region src/domains/project-repository/module.d.ts
declare class ProjectRepositoryAPI extends BaseAPI {
constructor(context: BaseAPIContext);
findOne(projectRepositoryName: string): Promise<ProjectRepository | undefined>;
findOne(context: ProjectRepositoryFindOneContext): Promise<ProjectRepository | undefined>;
getOne(projectRepositoryName: string): Promise<ProjectRepository>;
getOne(context: ProjectRepositoryGetOneContext): Promise<ProjectRepository>;
getMany(context: ProjectRepositoryGetManyContext): Promise<ResourceCollectionResponse<ProjectRepository>>;
getAll(context: ProjectRepositoryGetManyContext): Promise<ResourceCollectionResponse<ProjectRepository>>;
update(context: ProjectRepositoryUpdateContext): Promise<void>;
delete(projectRepositoryName: string): Promise<void>;
delete(context: ProjectRepositoryDeleteContext): Promise<void>;
}
//#endregion
//#region src/domains/project-repository/utils.d.ts
declare function parseLongProjectRepositoryName(name: string): ProjectRepositoryLongNameRepresentation;
declare function buildProjectRepositoryLongName(representation: ProjectRepositoryLongNameRepresentation): string;
//#endregion
//#region src/domains/project-webhook-policy/type.d.ts
type ProjectWebhookEventType = 'PUSH_ARTIFACT' | 'PULL_ARTIFACT' | 'DELETE_ARTIFACT' | 'DELETE_CHART' | 'DOWNLOAD_CHART' | 'UPLOAD_CHART' | 'QUOTA_EXCEEDED' | 'QUOTA_WARNING' | 'REPLICATION' | 'SCANNING_FAILED' | 'SCANNING_COMPLETED' | 'TAG_RETENTION';
type ProjectWebhookTarget = {
address: string;
auth_header?: string;
skip_cert_verify: boolean;
type: 'http';
};
type ProjectWebhookPolicy = {
creation_time?: string;
description?: string;
enabled: true;
event_types: ProjectWebhookEventType[];
id: number;
name: string;
project_id?: number;
targets: ProjectWebhookTarget[];
update_time?: string;
};
type ProjectWebhookPolicyCreateContext = {
data: Partial<ProjectWebhookPolicy>;
projectIdOrName: number | string;
isProjectName?: boolean;
};
type ProjectWebhookPolicyCreateResponse = {
id?: number;
};
type ProjectWebhookPolicyGetManyContext = {
projectIdOrName: number | string;
isProjectName?: boolean;
query?: ResourceCollectionQuery<ProjectWebhookPolicy>;
};
type ProjectWebhookPolicyGetOneContext = {
projectIdOrName: number | string;
isProjectName?: boolean;
id: number;
};
type ProjectWebhookPolicyFindOneContext = {
projectIdOrName: number | string;
isProjectName?: boolean;
name: string;
};
type ProjectWebhookPolicyDeleteContext = {
projectIdOrName: number | string;
isProjectName?: boolean;
id: number;
};
type ProjectWebhookPolicyDeleteByNameContext = {
projectIdOrName: number | string;
isProjectName?: boolean;
name: string;
};
type ProjectWebhookPolicyUpdateContext = {
projectIdOrName: number | string;
isProjectName?: boolean;
id: ProjectWebhookPolicy['id'];
data: Partial<ProjectWebhookPolicy>;
};
//#endregion
//#region src/domains/project-webhook-policy/module.d.ts
declare class ProjectWebhookPolicyAPI extends BaseAPI {
constructor(context: BaseAPIContext);
create(context: ProjectWebhookPolicyCreateContext): Promise<ProjectWebhookPolicyCreateResponse>;
getMany(context: ProjectWebhookPolicyGetManyContext): Promise<ResourceCollectionResponse<ProjectWebhookPolicy>>;
getOne(context: ProjectWebhookPolicyGetOneContext): Promise<ProjectWebhookPolicy>;
findOne(context: ProjectWebhookPolicyFindOneContext): Promise<ProjectWebhookPolicy | undefined>;
update(context: ProjectWebhookPolicyUpdateContext): Promise<void>;
deleteByName(context: ProjectWebhookPolicyDeleteByNameContext): Promise<void>;
delete(context: ProjectWebhookPolicyDeleteContext): Promise<any>;
protected extendPayload(data: Partial<ProjectWebhookPolicy>): Partial<ProjectWebhookPolicy>;
}
//#endregion
//#region src/domains/robot/constants.d.ts
declare enum RobotPermissionResource {
ARTIFACT = "artifact",
ARTIFACT_LABEL = "artifact-label",
IMMUTABLE_TAG = "immutable-tag",
LABEL = "label",
LOG = "log",
METADATA = "metadata",
NOTIFICATION_POLICY = "notification-policy",
PREHEAT_POLICY = "preheat-policy",
PROJECT = "project",
REPOSITORY = "repository",
SCAN = "scan",
TAG = "tag"
}
declare enum RobotPermissionAction {
CREATE = "create",
DELETE = "delete",
READ = "read",
UPDATE = "update",
PULL = "pull",
PUSH = "push",
LIST = "list",
STOP = "stop"
}
//#endregion
//#region src/domains/robot/type.d.ts
type RobotPermissionAccess = {
resource: `${RobotPermissionResource}`;
action: `${RobotPermissionAction}`;
};
type RobotPermission = {
access: RobotPermissionAccess[];
kind: 'project';
namespace: string;
};
type Robot = {
id: number;
description?: string;
name: string;
secret?: string | null;
creation_time?: string;
update_time?: string;
expires_at?: number;
duration?: number;
level?: 'system';
disable?: boolean;
editable?: boolean;
permissions?: RobotPermission[];
};
type RobotGetManyContext = {
query?: ResourceCollectionQuery<Robot>;
};
type RobotCreatePayload = Omit<Robot, 'id'>;
type RobotUpdatePayload = Omit<Robot, 'id'>;
type RobotUpdateSecretResponse = {
secret: string;
};
//#endregion
//#region src/domains/robot/module.d.ts
declare class RobotAPI extends BaseAPI {
constructor(context: BaseAPIContext);
create(data: RobotCreatePayload): Promise<Robot>;
getMany(context: RobotGetManyContext): Promise<ResourceCollectionResponse<Robot>>;
getOne(id: number): Promise<Robot>;
/**
* Update harbor project robot account.
* If no "secret" provided, a new secret is generated.
*
* @param id
* @param secret
*/
updateSecret(id: string | number, secret?: string): Promise<RobotUpdateSecretResponse>;
update(id: number, data: RobotUpdatePayload): Promise<void>;
delete(id: Robot['id']): Promise<void>;
extendPayload<T extends Record<string, any>>(data: T): T;
}
//#endregion
//#region src/domains/robot/utils.d.ts
/**
* Create robot permission to access all resources.
*
* @param namespace (e.g. * or project name)
*/
declare function buildRobotPermissionForAllResources(namespace: string): RobotPermission;
//#endregion
//#region src/type.d.ts
type SearchResult = {
project: Project[];
repository: ProjectRepositorySearchResult[];
};
//#endregion
//#region src/module.d.ts
declare const HARBOR_CLIENT_INSTANCE: unique symbol;
declare class HarborClient extends Client {
readonly project: ProjectAPI;
readonly projectRepositoryArtifact: ProjectRepositoryArtifactAPI;
readonly projectRepositoryArtifactLabel: ProjectRepositoryArtifactLabelAPI;
readonly projectRepository: ProjectRepositoryAPI;
readonly projectWebhookPolicy: ProjectWebhookPolicyAPI;
readonly robot: RobotAPI;
constructor(input?: ConfigInput);
applyConfig(input?: ConfigInput): void;
search(q: string): Promise<SearchResult>;
}
//#endregion
//#region src/constants.d.ts
declare enum HeaderName {
LOCATION = "location",
IS_RESOURCE_NAME = "X-Is-Resource-Name",
TOTAL_COUNT = "X-Total-Count"
}
//#endregion
//#region src/instance.d.ts
declare const hasClient: (key?: string) => boolean, setClient: <C extends HarborClient = HarborClient>(client: C, key?: string) => C, useClient: <C extends HarborClient = HarborClient>(key?: string) => C, unsetClient: (key?: string) => void, createClient: (input?: Partial<Config> | undefined) => HarborClient, isClient: (input: unknown) => input is HarborClient;
//#endregion
//#region src/utils/connection-string.d.ts
declare function parseConnectionString(connectionString: string): ConnectionOptions;
//#endregion
//#region src/utils/query-string.d.ts
declare function buildQueryString(input?: Record<string, any>, withQuestionMark?: boolean): string;
//#endregion
//#region src/utils/resource-id.d.ts
declare function extractResourceIDOfResponse(response: Pick<Response$1, 'headers'>): number | undefined;
//#endregion
//#region src/utils/resource-meta.d.ts
type Meta = {
total?: number;
};
declare function extractResourceMetaOfResponse(response: Response$1): Meta;
//#endregion
//#region src/index.d.ts
declare const client: HarborClient;
//#endregion
export { BaseAPIContext, CONNECTION_STRING_PARSE_ERROR_INSTANCE, type ClientError, Config, ConfigInput, ConnectionOptions, ConnectionStringParseError, type ErrorCode, HARBOR_CLIENT_INSTANCE, type HapicError, HarborClient, HeaderName, type HttpResponseError, type NetworkError, Project, ProjectAPI, ProjectArtifact, ProjectArtifactCopyElement, ProjectArtifactDeleteContext, ProjectArtifactGetManyContext, ProjectArtifactGetManyQuery, ProjectArtifactLabel, ProjectArtifactLabelCreateContext, ProjectArtifactLabelDeleteContext, ProjectArtifactTag, ProjectCreatePayload, ProjectCreateResponse, ProjectGetManyOptions, ProjectMetadata, ProjectQuery, ProjectRepository, ProjectRepositoryAPI, ProjectRepositoryArtifactAPI, ProjectRepositoryArtifactLabelAPI, ProjectRepositoryDeleteContext, ProjectRepositoryFindOneContext, ProjectRepositoryGetManyContext, ProjectRepositoryGetManyQuery, ProjectRepositoryGetOneContext, ProjectRepositoryLongNameRepresentation, ProjectRepositorySearchResult, ProjectRepositoryUpdateContext, ProjectUpdatePayload, ProjectWebhookEventType, ProjectWebhookPolicy, ProjectWebhookPolicyAPI, ProjectWebhookPolicyCreateContext, ProjectWebhookPolicyCreateResponse, ProjectWebhookPolicyDeleteByNameContext, ProjectWebhookPolicyDeleteContext, ProjectWebhookPolicyFindOneContext, ProjectWebhookPolicyGetManyContext, ProjectWebhookPolicyGetOneContext, ProjectWebhookPolicyUpdateContext, ProjectWebhookTarget, type RequestBaseOptions, ResourceCollectionQuery, ResourceCollectionResponse, type Response, type ResponseData, Robot, RobotAPI, RobotCreatePayload, RobotGetManyContext, RobotPermission, RobotPermissionAccess, RobotPermissionAction, RobotPermissionResource, RobotUpdatePayload, RobotUpdateSecretResponse, SearchResult, buildProjectRepositoryLongName, buildQueryString, buildRobotPermissionForAllResources, createClient, client as default, extractResourceIDOfResponse, extractResourceMetaOfResponse, hasClient, isClient, isClientError, isClientErrorDueNetworkIssue, isClientErrorWithStatusCode, isConnectionStringParseError, isHapicError, isHttpResponseError, isNetworkError, parseConnectionString, parseLongProjectRepositoryName, setClient, unsetClient, useClient };
//# sourceMappingURL=index.d.mts.map