UNPKG

@janus-idp/backstage-plugin-jfrog-artifactory

Version:

The Jfrog Artifactory plugin displays information about your container images within the Jfrog Artifactory registry.

118 lines (112 loc) 4.28 kB
import { createApiRef, createRouteRef, createPlugin, createApiFactory, discoveryApiRef, configApiRef, identityApiRef, createComponentExtension } from '@backstage/core-plugin-api'; var __defProp = Object.defineProperty; var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; var __publicField = (obj, key, value) => { __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); return value; }; const DEFAULT_PROXY_PATH = "/jfrog-artifactory/api"; const jfrogArtifactoryApiRef = createApiRef({ id: "plugin.jfrog-artifactory.service" }); class JfrogArtifactoryApiClient { constructor(options) { // @ts-ignore __publicField(this, "discoveryApi"); __publicField(this, "configApi"); __publicField(this, "identityApi"); this.discoveryApi = options.discoveryApi; this.configApi = options.configApi; this.identityApi = options.identityApi; } async getBaseUrl() { const proxyPath = this.configApi.getOptionalString("jfrogArtifactory.proxyPath") || DEFAULT_PROXY_PATH; return `${await this.discoveryApi.getBaseUrl("proxy")}${proxyPath}`; } async fetcher(url, query) { const { token: idToken } = await this.identityApi.getCredentials(); const response = await fetch(url, { headers: { "Content-Type": "application/json", ...idToken && { Authorization: `Bearer ${idToken}` } }, method: "POST", body: query }); if (!response.ok) { throw new Error( `failed to fetch data, status ${response.status}: ${response.statusText}` ); } return await response.json(); } async getTags(repo) { const proxyUrl = await this.getBaseUrl(); const tagQuery = { query: "query ($filter: VersionFilter!, $first: Int, $orderBy: VersionOrder) { versions (filter: $filter, first: $first, orderBy: $orderBy) { edges { node { name, created, modified, package { id }, repos { name, type, leadFilePath }, licenses { name, source }, size, stats { downloadCount }, vulnerabilities { critical, high, medium, low, info, unknown, skipped }, files { name, lead, size, md5, sha1, sha256, mimeType } } } } }", variables: { filter: { packageId: `docker://${repo}`, name: "*", ignorePreRelease: false }, first: 100, orderBy: { field: "NAME_SEMVER", direction: "DESC" } } }; return await this.fetcher( `${proxyUrl}/metadata/api/v1/query`, JSON.stringify(tagQuery) ); } } const JFROG_ARTIFACTORY_ANNOTATION_IMAGE_NAME = "jfrog-artifactory/image-name"; const useJfrogArtifactoryAppData = ({ entity }) => { var _a, _b; const imageName = (_b = (_a = entity == null ? void 0 : entity.metadata.annotations) == null ? void 0 : _a[JFROG_ARTIFACTORY_ANNOTATION_IMAGE_NAME]) != null ? _b : ""; if (!imageName) { throw new Error("'Jfrog Artifactory' annotations are missing"); } return { imageName }; }; const rootRouteRef = createRouteRef({ id: "jfrog-artifactory" }); const jfrogArtifactoryPlugin = createPlugin({ id: "jfrog-artifactory", routes: { root: rootRouteRef }, apis: [ createApiFactory({ api: jfrogArtifactoryApiRef, deps: { discoveryApi: discoveryApiRef, configApi: configApiRef, identityApi: identityApiRef }, factory: ({ discoveryApi, configApi, identityApi }) => new JfrogArtifactoryApiClient({ discoveryApi, configApi, identityApi }) }) ] }); const JfrogArtifactoryPage = jfrogArtifactoryPlugin.provide( createComponentExtension({ name: "JfrogArtifactoryPage", component: { lazy: () => import('./index-BB2QHDw1.esm.js').then( (m) => m.JfrogArtifactoryDashboardPage ) } }) ); const isJfrogArtifactoryAvailable = (entity) => { var _a; return Boolean( (_a = entity == null ? void 0 : entity.metadata.annotations) == null ? void 0 : _a[JFROG_ARTIFACTORY_ANNOTATION_IMAGE_NAME] ); }; export { JfrogArtifactoryPage as J, jfrogArtifactoryPlugin as a, isJfrogArtifactoryAvailable as i, jfrogArtifactoryApiRef as j, useJfrogArtifactoryAppData as u }; //# sourceMappingURL=index-B4M_Q8c2.esm.js.map