UNPKG

@red-hat-developer-hub/backstage-plugin-bulk-import

Version:
136 lines (133 loc) 5.06 kB
import { createApiRef } from '@backstage/core-plugin-api'; import { ImportFlow } from '../types/types.esm.js'; import { getApi } from '../utils/repository-utils.esm.js'; import { OrchestratorBulkImportBackendClientPathProvider } from './OrchestratorBulkImportBackendClientPathProvider.esm.js'; import { PRBulkImportBackendClientPathProvider } from './PRBulkImportBackendClientPathProvider.esm.js'; import { ScaffolderBulkImportBackendClientPathProvider } from './ScaffolderBulkImportBackendClientPathProvider.esm.js'; const bulkImportApiRef = createApiRef({ id: "plugin.bulk-import.service" }); class BulkImportBackendClient { configApi; identityApi; pathProvider; constructor(options) { this.configApi = options.configApi; this.identityApi = options.identityApi; const importAPI = this.configApi.getOptionalString("bulkImport.importAPI") ?? ImportFlow.OpenPullRequests; switch (importAPI) { case ImportFlow.Scaffolder: this.pathProvider = new ScaffolderBulkImportBackendClientPathProvider(); break; case ImportFlow.OpenPullRequests: this.pathProvider = new PRBulkImportBackendClientPathProvider(); break; case ImportFlow.Orchestrator: this.pathProvider = new OrchestratorBulkImportBackendClientPathProvider(); break; default: throw new Error(`Unsupported API type ${importAPI}`); } } async dataFetcher(page, size, searchString, approvalTool, options) { const { token: idToken } = await this.identityApi.getCredentials(); const backendUrl = this.configApi.getString("backend.baseUrl"); const jsonResponse = await fetch( getApi(backendUrl, page, size, searchString, approvalTool, options), { headers: { "Content-Type": "application/json", ...idToken && { Authorization: `Bearer ${idToken}` } } } ); if (jsonResponse.status !== 200 && jsonResponse.status !== 204) { return jsonResponse; } return jsonResponse.json(); } async getImportJobs(page, size, searchString, sortColumn, sortOrder) { const { token: idToken } = await this.identityApi.getCredentials(); const backendUrl = this.configApi.getString("backend.baseUrl"); const jsonResponse = await fetch( `${backendUrl}${this.pathProvider.getGetImportJobsPath( page, size, searchString, sortColumn, sortOrder )}`, { headers: { "Content-Type": "application/json", ...idToken && { Authorization: `Bearer ${idToken}` }, "api-version": "v2" } } ); if (!jsonResponse.ok) { return jsonResponse; } return jsonResponse.status === 204 ? null : jsonResponse.json(); } async createImportJobs(importRepositories, dryRun) { const createApiPath = this.pathProvider.getCreateImportJobsPath(dryRun); if (!createApiPath) { return {}; } const { token: idToken } = await this.identityApi.getCredentials(); const backendUrl = this.configApi.getString("backend.baseUrl"); const jsonResponse = await fetch(`${backendUrl}${createApiPath}`, { method: "POST", headers: { "Content-Type": "application/json", ...idToken && { Authorization: `Bearer ${idToken}` } }, body: JSON.stringify(importRepositories) }); if (!jsonResponse.ok) { const errorResponse = await jsonResponse.json(); throw errorResponse; } return jsonResponse.status === 204 ? null : await jsonResponse.json(); } async deleteImportAction(repo, defaultBranch, approvalTool) { const { token: idToken } = await this.identityApi.getCredentials(); const backendUrl = this.configApi.getString("backend.baseUrl"); const jsonResponse = await fetch( `${backendUrl}${this.pathProvider.getDeleteImportActionPath(repo, defaultBranch, approvalTool)}`, { method: "DELETE", headers: { "Content-Type": "application/json", ...idToken && { Authorization: `Bearer ${idToken}` } } } ); if (!jsonResponse.ok) { const errorResponse = await jsonResponse.json(); throw errorResponse.err; } return jsonResponse.status === 204 ? null : await jsonResponse.json(); } async getImportAction(repo, defaultBranch, approvalTool) { const { token: idToken } = await this.identityApi.getCredentials(); const backendUrl = this.configApi.getString("backend.baseUrl"); const jsonResponse = await fetch( `${backendUrl}${this.pathProvider.getGetImportActionPath(repo, defaultBranch, approvalTool)}`, { method: "GET", headers: { "Content-Type": "application/json", ...idToken && { Authorization: `Bearer ${idToken}` } } } ); if (jsonResponse.status !== 200 && jsonResponse.status !== 204) { return jsonResponse; } return jsonResponse.json(); } } export { BulkImportBackendClient, bulkImportApiRef }; //# sourceMappingURL=BulkImportBackendClient.esm.js.map