@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
JavaScript
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