UNPKG

@digital-ai/plugin-dai-release-backend

Version:

Backend functionalities for the dai-release backstage plugin

86 lines (82 loc) 3 kB
'use strict'; 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