@red-hat-developer-hub/backstage-plugin-bulk-import
Version:
136 lines (133 loc) • 5.06 kB
JavaScript
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