@digital-ai/plugin-dai-release-backend
Version:
Backend functionalities for the dai-release backstage plugin
86 lines (82 loc) • 3 kB
JavaScript
;
var apiConfig = require('./apiConfig.cjs.js');
var responseUtil = require('./responseUtil.cjs.js');
class TemplatesOverviewApi {
logger;
config;
constructor(logger, config) {
this.logger = logger;
this.config = config;
}
static fromConfig(config, logger) {
return new TemplatesOverviewApi(logger, config);
}
async getTemplateMetaInfo(instanceName, folderId) {
this.logger?.debug(
`Calling Template Overview api, instance: ${instanceName} folderId: ${folderId}`
);
try {
const instanceConfig = this.config.getInstanceConfig(instanceName);
const accessToken = apiConfig.getCredentials(instanceConfig);
const apiUrl = apiConfig.getReleaseApiHost(instanceConfig);
const gitConfigData = await this.getTemplateFolderGitConfig(folderId, accessToken, apiUrl);
const commitVersioningData = await this.getTemplateCommitVersions(folderId, accessToken, apiUrl);
if (gitConfigData && gitConfigData.length > 0 && commitVersioningData && Object.keys(commitVersioningData).length > 0 && commitVersioningData.versions) {
const gitConfig = gitConfigData[0];
const latestCommit = commitVersioningData?.versions.reduce(
(latest, current) => current.commitTime > latest.commitTime ? current : latest
);
return {
folderId: gitConfig.id,
url: gitConfig.url,
name: latestCommit?.name,
shortMessage: latestCommit?.shortMessage,
committer: latestCommit?.commiter,
commitTime: latestCommit?.commitTime,
commitHash: latestCommit?.commitHash
};
}
} catch (error) {
this.logger?.error(
`Error occurred while fetching template meta info: ${error}`
);
}
return {};
}
async getTemplateFolderGitConfig(folderId, accessToken, apiUrl) {
const response = await fetch(
`${apiUrl}${apiConfig.RELEASE_TEMPLATE_GIT_CONFIG_PATH}?configurationType=git.Repository&folderOnly=false&folderId=${folderId}`,
{
method: "GET",
headers: {
"x-release-personal-token": `${accessToken}`,
"Content-Type": "application/json",
Accept: "application/json"
}
}
);
if (!response.ok) {
await responseUtil.parseErrorResponse(this.logger, response);
}
return await response.json();
}
async getTemplateCommitVersions(folderId, accessToken, apiUrl) {
const response = await fetch(
`${apiUrl}${apiConfig.RELEASE_TEMPLATE_GIT_COMMIT_VERSIONING_PATH}/${folderId}/versions?fetchChanges=true`,
{
method: "GET",
headers: {
"x-release-personal-token": `${accessToken}`,
"Content-Type": "application/json",
Accept: "application/json"
}
}
);
if (!response.ok) {
return {};
}
return await response.json();
}
}
exports.TemplatesOverviewApi = TemplatesOverviewApi;
//# sourceMappingURL=TemplatesOverviewApi.cjs.js.map