@red-hat-developer-hub/backstage-plugin-bulk-import-backend 6.2.0 → 6.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/catalog/catalogHttpClient.cjs.js +1 -0
  3. package/dist/catalog/catalogHttpClient.cjs.js.map +1 -1
  4. package/dist/generated/openapidocument.cjs.js +80 -1
  5. package/dist/generated/openapidocument.cjs.js.map +1 -1
  6. package/dist/github/githubApiService.cjs.js +5 -4
  7. package/dist/github/githubApiService.cjs.js.map +1 -1
  8. package/dist/github/utils/orgUtils.cjs.js +1 -0
  9. package/dist/github/utils/orgUtils.cjs.js.map +1 -1
  10. package/dist/github/utils/prUtils.cjs.js +1 -0
  11. package/dist/github/utils/prUtils.cjs.js.map +1 -1
  12. package/dist/github/utils/utils.cjs.js +1 -28
  13. package/dist/github/utils/utils.cjs.js.map +1 -1
  14. package/dist/gitlab/GitlabAppManager.cjs.js +54 -0
  15. package/dist/gitlab/GitlabAppManager.cjs.js.map +1 -0
  16. package/dist/gitlab/gitlabApiService.cjs.js +558 -0
  17. package/dist/gitlab/gitlabApiService.cjs.js.map +1 -0
  18. package/dist/gitlab/utils/glUtils.cjs.js +15 -0
  19. package/dist/gitlab/utils/glUtils.cjs.js.map +1 -0
  20. package/dist/gitlab/utils/orgUtils.cjs.js +72 -0
  21. package/dist/gitlab/utils/orgUtils.cjs.js.map +1 -0
  22. package/dist/gitlab/utils/prUtils.cjs.js +72 -0
  23. package/dist/gitlab/utils/prUtils.cjs.js.map +1 -0
  24. package/dist/gitlab/utils/repoUtils.cjs.js +200 -0
  25. package/dist/gitlab/utils/repoUtils.cjs.js.map +1 -0
  26. package/dist/gitlab/utils/utils.cjs.js +130 -0
  27. package/dist/gitlab/utils/utils.cjs.js.map +1 -0
  28. package/dist/helpers/utils.cjs.js +37 -0
  29. package/dist/helpers/utils.cjs.js.map +1 -1
  30. package/dist/service/handlers/import/bulkImports.cjs.js +61 -32
  31. package/dist/service/handlers/import/bulkImports.cjs.js.map +1 -1
  32. package/dist/service/handlers/import/importStatus.cjs.js +4 -7
  33. package/dist/service/handlers/import/importStatus.cjs.js.map +1 -1
  34. package/dist/service/handlers/organization/organizations.cjs.js +2 -2
  35. package/dist/service/handlers/organization/organizations.cjs.js.map +1 -1
  36. package/dist/service/handlers/repository/repositories.cjs.js +4 -2
  37. package/dist/service/handlers/repository/repositories.cjs.js.map +1 -1
  38. package/dist/service/router.cjs.js +20 -10
  39. package/dist/service/router.cjs.js.map +1 -1
  40. package/package.json +11 -10
@@ -14,8 +14,10 @@ require('@octokit/rest');
14
14
  require('git-url-parse');
15
15
  require('luxon');
16
16
  var githubApiService = require('../github/githubApiService.cjs.js');
17
+ var gitlabApiService = require('../gitlab/gitlabApiService.cjs.js');
17
18
  var auth = require('../helpers/auth.cjs.js');
18
19
  require('@backstage/errors');
20
+ var utils = require('../helpers/utils.cjs.js');
19
21
  var auditorUtils = require('../helpers/auditorUtils.cjs.js');
20
22
  var bulkImports = require('./handlers/import/bulkImports.cjs.js');
21
23
  var organizations = require('./handlers/organization/organizations.cjs.js');
@@ -50,6 +52,7 @@ async function createRouter(options) {
50
52
  auditor
51
53
  } = options;
52
54
  const githubApiService$1 = new githubApiService.GithubApiService(logger, config, cache);
55
+ const gitlabApiService$1 = new gitlabApiService.GitlabApiService(logger, config, cache);
53
56
  const catalogHttpClient$1 = new catalogHttpClient.CatalogHttpClient({
54
57
  logger,
55
58
  config,
@@ -93,7 +96,7 @@ async function createRouter(options) {
93
96
  q.sizePerIntegration = stringToNumber(q.sizePerIntegration);
94
97
  const response = await organizations.findAllOrganizations(
95
98
  logger,
96
- githubApiService$1,
99
+ q.approvalTool === "GITLAB" ? gitlabApiService$1 : githubApiService$1,
97
100
  q.search,
98
101
  q.pagePerIntegration,
99
102
  q.sizePerIntegration
@@ -103,7 +106,8 @@ async function createRouter(options) {
103
106
  organizations: response.responseBody?.organizations,
104
107
  totalCount: response.responseBody?.totalCount,
105
108
  pagePerIntegration: response.responseBody?.pagePerIntegration,
106
- sizePerIntegration: response.responseBody?.sizePerIntegration
109
+ sizePerIntegration: response.responseBody?.sizePerIntegration,
110
+ approvalTool: q.approvalTool
107
111
  });
108
112
  }
109
113
  );
@@ -120,14 +124,15 @@ async function createRouter(options) {
120
124
  {
121
125
  logger,
122
126
  config,
123
- githubApiService: githubApiService$1,
127
+ gitApiService: q.approvalTool === "GITLAB" ? gitlabApiService$1 : githubApiService$1,
124
128
  catalogHttpClient: catalogHttpClient$1
125
129
  },
126
130
  {
127
131
  search: q.search,
128
132
  checkStatus: q.checkImportStatus,
129
133
  pageNumber: q.pagePerIntegration,
130
- pageSize: q.sizePerIntegration
134
+ pageSize: q.sizePerIntegration,
135
+ approvalTool: q.approvalTool
131
136
  }
132
137
  );
133
138
  const repos = response.responseBody?.repositories;
@@ -136,7 +141,8 @@ async function createRouter(options) {
136
141
  repositories: repos,
137
142
  totalCount: response.responseBody?.totalCount,
138
143
  pagePerIntegration: q.pagePerIntegration,
139
- sizePerIntegration: q.sizePerIntegration
144
+ sizePerIntegration: q.sizePerIntegration,
145
+ approvalTool: q.approvalTool
140
146
  });
141
147
  }
142
148
  );
@@ -153,7 +159,7 @@ async function createRouter(options) {
153
159
  {
154
160
  logger,
155
161
  config,
156
- githubApiService: githubApiService$1,
162
+ gitApiService: q.approvalTool === "GITLAB" ? gitlabApiService$1 : githubApiService$1,
157
163
  catalogHttpClient: catalogHttpClient$1
158
164
  },
159
165
  c.request.params.organizationName?.toString(),
@@ -168,7 +174,8 @@ async function createRouter(options) {
168
174
  repositories: repos,
169
175
  totalCount: response.responseBody?.totalCount,
170
176
  pagePerIntegration: q.pagePerIntegration,
171
- sizePerIntegration: q.sizePerIntegration
177
+ sizePerIntegration: q.sizePerIntegration,
178
+ approvalTool: q.approvalTool
172
179
  });
173
180
  }
174
181
  );
@@ -196,6 +203,7 @@ async function createRouter(options) {
196
203
  logger,
197
204
  config,
198
205
  githubApiService: githubApiService$1,
206
+ gitlabApiService: gitlabApiService$1,
199
207
  catalogHttpClient: catalogHttpClient$1
200
208
  },
201
209
  {
@@ -225,6 +233,7 @@ async function createRouter(options) {
225
233
  config,
226
234
  auth: auth$1,
227
235
  catalogApi,
236
+ gitlabApiService: gitlabApiService$1,
228
237
  githubApiService: githubApiService$1,
229
238
  catalogInfoGenerator: catalogInfoGenerator$1,
230
239
  catalogHttpClient: catalogHttpClient$1
@@ -250,8 +259,9 @@ async function createRouter(options) {
250
259
  {
251
260
  logger,
252
261
  config,
253
- githubApiService: githubApiService$1,
254
- catalogHttpClient: catalogHttpClient$1
262
+ gitApiService: q.approvalTool === "GITLAB" ? gitlabApiService$1 : githubApiService$1,
263
+ catalogHttpClient: catalogHttpClient$1,
264
+ approvalTool: q.approvalTool
255
265
  },
256
266
  q.repo,
257
267
  q.defaultBranch,
@@ -273,7 +283,7 @@ async function createRouter(options) {
273
283
  {
274
284
  logger,
275
285
  config,
276
- githubApiService: githubApiService$1,
286
+ gitApiService: utils.parseGitURLForApprovalTool(q.repo) === "GITLAB" ? gitlabApiService$1 : githubApiService$1,
277
287
  catalogHttpClient: catalogHttpClient$1
278
288
  },
279
289
  q.repo,
@@ -1 +1 @@
1
- {"version":3,"file":"router.cjs.js","sources":["../../src/service/router.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { MiddlewareFactory } from '@backstage/backend-defaults/rootHttpRouter';\nimport type {\n AuditorService,\n AuditorServiceEvent,\n AuthService,\n CacheService,\n DiscoveryService,\n HttpAuthService,\n LoggerService,\n} from '@backstage/backend-plugin-api';\nimport type { CatalogApi } from '@backstage/catalog-client';\nimport type { Config } from '@backstage/config';\nimport type { PermissionEvaluator } from '@backstage/plugin-permission-common';\nimport { createPermissionIntegrationRouter } from '@backstage/plugin-permission-node';\n\nimport { fullFormats } from 'ajv-formats/dist/formats';\nimport express, { Router, type Request, type Response } from 'express';\nimport {\n OpenAPIBackend,\n type Context,\n type Request as OpenAPIRequest,\n} from 'openapi-backend';\n\nimport { bulkImportPermission } from '@red-hat-developer-hub/backstage-plugin-bulk-import-common';\n\nimport { CatalogHttpClient } from '../catalog/catalogHttpClient';\nimport { CatalogInfoGenerator } from '../catalog/catalogInfoGenerator';\nimport type { Components, Paths } from '../generated/openapi.d';\nimport { openApiDocument } from '../generated/openapidocument';\nimport { GithubApiService } from '../github';\nimport { permissionCheck } from '../helpers';\nimport { auditCreateEvent } from '../helpers/auditorUtils';\nimport {\n createImportJobs,\n deleteImportByRepo,\n findAllImports,\n findImportStatusByRepo,\n} from './handlers/import';\nimport { findAllOrganizations } from './handlers/organization';\nimport { ping } from './handlers/ping';\nimport {\n findAllRepositories,\n findRepositoriesByOrganization,\n} from './handlers/repository';\n\n/**\n * Router Options\n * @public\n */\nexport interface RouterOptions {\n logger: LoggerService;\n permissions: PermissionEvaluator;\n config: Config;\n cache: CacheService;\n discovery: DiscoveryService;\n httpAuth: HttpAuthService;\n auth: AuthService;\n catalogApi: CatalogApi;\n auditor: AuditorService;\n}\n\nnamespace Operations {\n export const PING = 'ping';\n export const FIND_ALL_ORGANIZATIONS = 'findAllOrganizations';\n export const FIND_ALL_REPOSITORIES = 'findAllRepositories';\n export const FIND_REPOSITORIES_BY_ORGANIZATION =\n 'findRepositoriesByOrganization';\n export const FIND_ALL_IMPORTS = 'findAllImports';\n export const CREATE_IMPORT_JOBS = 'createImportJobs';\n export const FIND_IMPORT_STATUS_BY_REPO = 'findImportStatusByRepo';\n export const DELETE_IMPORT_BY_REPO = 'deleteImportByRepo';\n}\n\n/**\n * Router\n * @public\n */\nexport async function createRouter(\n options: RouterOptions,\n): Promise<express.Router> {\n const {\n logger,\n httpAuth,\n auth,\n permissions,\n config,\n cache,\n discovery,\n catalogApi,\n auditor: auditor,\n } = options;\n\n const githubApiService = new GithubApiService(logger, config, cache);\n const catalogHttpClient = new CatalogHttpClient({\n logger,\n config,\n discovery,\n auth,\n catalogApi,\n });\n const catalogInfoGenerator = new CatalogInfoGenerator(\n logger,\n catalogHttpClient,\n );\n\n // create openapi requests handler\n const api = new OpenAPIBackend({\n ajvOpts: {\n verbose: true,\n formats: fullFormats, // open issue: https://github.com/openapistack/openapi-backend/issues/280\n },\n validate: true,\n definition: openApiDocument,\n handlers: {\n validationFail: async (c, _req: Request, res: Response) =>\n res.status(400).json({ err: c.validation.errors }),\n notFound: async (_c, req: Request, res: Response) =>\n res.status(404).json({ err: `'${req.method} ${req.path}' not found` }),\n notImplemented: async (_c, req: Request, res: Response) =>\n res\n .status(500)\n .json({ err: `'${req.method} ${req.path}' not implemented` }),\n },\n });\n\n await api.init();\n\n api.register(\n Operations.PING,\n async (_c: Context, _req: Request, res: Response) => {\n const result = await ping(logger);\n return res.status(result.statusCode).json(result.responseBody);\n },\n );\n\n api.register(\n Operations.FIND_ALL_ORGANIZATIONS,\n async (c: Context, _req: Request, res: Response) => {\n const q: Paths.FindAllOrganizations.QueryParameters = {\n ...c.request.query,\n };\n // we need to convert strings to real types due to open PR https://github.com/openapistack/openapi-backend/pull/571\n q.pagePerIntegration = stringToNumber(q.pagePerIntegration);\n q.sizePerIntegration = stringToNumber(q.sizePerIntegration);\n const response = await findAllOrganizations(\n logger,\n githubApiService,\n q.search,\n q.pagePerIntegration,\n q.sizePerIntegration,\n );\n return res.status(response.statusCode).json({\n errors: response.responseBody?.errors,\n organizations: response.responseBody?.organizations,\n totalCount: response.responseBody?.totalCount,\n pagePerIntegration: response.responseBody?.pagePerIntegration,\n sizePerIntegration: response.responseBody?.sizePerIntegration,\n } as Components.Schemas.OrganizationList);\n },\n );\n\n api.register(\n Operations.FIND_ALL_REPOSITORIES,\n async (c: Context, _req: Request, res: Response) => {\n const q: Paths.FindAllRepositories.QueryParameters = {\n ...c.request.query,\n };\n // we need to convert strings to real types due to open PR https://github.com/openapistack/openapi-backend/pull/571\n q.pagePerIntegration = stringToNumber(q.pagePerIntegration);\n q.sizePerIntegration = stringToNumber(q.sizePerIntegration);\n q.checkImportStatus = stringToBoolean(q.checkImportStatus);\n const response = await findAllRepositories(\n {\n logger,\n config,\n githubApiService,\n catalogHttpClient,\n },\n {\n search: q.search,\n checkStatus: q.checkImportStatus,\n pageNumber: q.pagePerIntegration,\n pageSize: q.sizePerIntegration,\n },\n );\n const repos = response.responseBody?.repositories;\n return res.status(response.statusCode).json({\n errors: response.responseBody?.errors,\n repositories: repos,\n totalCount: response.responseBody?.totalCount,\n pagePerIntegration: q.pagePerIntegration,\n sizePerIntegration: q.sizePerIntegration,\n } as Components.Schemas.RepositoryList);\n },\n );\n\n api.register(\n Operations.FIND_REPOSITORIES_BY_ORGANIZATION,\n async (c: Context, _req: Request, res: Response) => {\n const q: Paths.FindRepositoriesByOrganization.QueryParameters = {\n ...c.request.query,\n };\n // we need to convert strings to real types due to open PR https://github.com/openapistack/openapi-backend/pull/571\n q.pagePerIntegration = stringToNumber(q.pagePerIntegration);\n q.sizePerIntegration = stringToNumber(q.sizePerIntegration);\n q.checkImportStatus = stringToBoolean(q.checkImportStatus);\n const response = await findRepositoriesByOrganization(\n {\n logger,\n config,\n githubApiService,\n catalogHttpClient,\n },\n c.request.params.organizationName?.toString(),\n q.search,\n q.checkImportStatus,\n q.pagePerIntegration,\n q.sizePerIntegration,\n );\n const repos = response.responseBody?.repositories;\n return res.status(response.statusCode).json({\n errors: response.responseBody?.errors,\n repositories: repos,\n totalCount: response.responseBody?.totalCount,\n pagePerIntegration: q.pagePerIntegration,\n sizePerIntegration: q.sizePerIntegration,\n } as Components.Schemas.RepositoryList);\n },\n );\n\n api.register(\n Operations.FIND_ALL_IMPORTS,\n async (c: Context, _req: Request, res: Response) => {\n const h: Paths.FindAllImports.HeaderParameters = {\n ...c.request.headers,\n };\n const apiVersion = h['api-version'];\n const q: Paths.FindAllImports.QueryParameters = {\n ...c.request.query,\n };\n // we need to convert strings to real types due to open PR https://github.com/openapistack/openapi-backend/pull/571\n let page: number | undefined;\n let size: number | undefined;\n if (apiVersion === undefined || apiVersion === 'v1') {\n // pagePerIntegration and sizePerIntegration deprecated in v1. 'page' and 'size' take precedence.\n page = stringToNumber(q.page || q.pagePerIntegration);\n size = stringToNumber(q.size || q.sizePerIntegration);\n } else {\n // pagePerIntegration and sizePerIntegration removed in v2+ and replaced by 'page' and 'size'.\n page = stringToNumber(q.page);\n size = stringToNumber(q.size);\n }\n const response = await findAllImports(\n {\n logger,\n config,\n githubApiService,\n catalogHttpClient,\n },\n {\n apiVersion,\n },\n {\n search: q.search,\n pageNumber: page,\n pageSize: size,\n sortColumn: q.sortColumn,\n sortOrder: q.sortOrder,\n },\n );\n return res.status(response.statusCode).json(response.responseBody);\n },\n );\n\n api.register(\n Operations.CREATE_IMPORT_JOBS,\n async (\n c: Context<Paths.CreateImportJobs.RequestBody>,\n _req: Request,\n res: Response,\n ) => {\n const q: Paths.CreateImportJobs.QueryParameters = {\n ...c.request.query,\n };\n q.dryRun = stringToBoolean(q.dryRun);\n const response = await createImportJobs(\n {\n logger,\n config,\n auth,\n catalogApi,\n githubApiService,\n catalogInfoGenerator,\n catalogHttpClient,\n },\n {\n importRequests: c.request.requestBody,\n dryRun: q.dryRun,\n },\n );\n return res.status(response.statusCode).json(response.responseBody);\n },\n );\n\n api.register(\n Operations.FIND_IMPORT_STATUS_BY_REPO,\n async (c: Context, _req: Request, res: Response) => {\n const q: Paths.FindImportStatusByRepo.QueryParameters = {\n ...c.request.query,\n };\n if (!q.repo?.trim()) {\n throw new Error('missing or blank parameter');\n }\n const response = await findImportStatusByRepo(\n {\n logger,\n config,\n githubApiService,\n catalogHttpClient,\n },\n q.repo,\n q.defaultBranch,\n true,\n );\n return res.status(response.statusCode).json(response.responseBody);\n },\n );\n\n api.register(\n Operations.DELETE_IMPORT_BY_REPO,\n async (c: Context, _req: Request, res: Response) => {\n const q: Paths.DeleteImportByRepo.QueryParameters = {\n ...c.request.query,\n };\n if (!q.repo?.trim()) {\n throw new Error('missing or blank \"repo\" parameter');\n }\n const response = await deleteImportByRepo(\n {\n logger,\n config,\n githubApiService,\n catalogHttpClient,\n },\n q.repo,\n q.defaultBranch,\n );\n return res.status(response.statusCode).json(response.responseBody);\n },\n );\n\n const router = Router();\n router.use(express.json());\n\n const permissionIntegrationRouter = createPermissionIntegrationRouter({\n permissions: [bulkImportPermission],\n });\n router.use(permissionIntegrationRouter);\n\n router.use(async (req, _res, next) => {\n if (req.path !== '/ping') {\n await permissionCheck(\n auditor,\n api.matchOperation(req as OpenAPIRequest)?.operationId,\n permissions,\n httpAuth,\n req,\n ).catch(next);\n }\n next();\n });\n\n router.use(async (req, res, next) => {\n const reqCast = req as OpenAPIRequest;\n const operationId = api.matchOperation(reqCast)?.operationId;\n\n const auditorEvent = await createAuditorEventByOperationId(\n operationId,\n req,\n auditor,\n );\n try {\n const response = (await api.handleRequest(reqCast, req, res)) as Response;\n auditorEvent?.success({ meta: { responseStatus: response.statusCode } });\n next();\n } catch (err: any) {\n auditorEvent?.fail({ error: err, meta: { responseStatus: 500 } });\n next(err);\n }\n });\n\n const middleware = MiddlewareFactory.create({ logger, config });\n router.use(middleware.error());\n\n return router;\n}\n\nasync function createAuditorEventByOperationId(\n operationId: string | undefined,\n req: Request,\n auditor: AuditorService,\n): Promise<AuditorServiceEvent | undefined> {\n let auditorEvent;\n switch (operationId) {\n case Operations.PING:\n auditorEvent = await auditCreateEvent(auditor, 'ping', req);\n break;\n case Operations.FIND_ALL_ORGANIZATIONS:\n auditorEvent = await auditCreateEvent(auditor, 'org-read', req, {\n queryType: req.query.search ? 'by-query' : 'all',\n search: req.query?.search,\n });\n break;\n case Operations.FIND_ALL_REPOSITORIES:\n auditorEvent = await auditCreateEvent(auditor, 'repo-read', req, {\n queryType: req.query.search ? 'by-query' : 'all',\n search: req.query.search,\n });\n break;\n case Operations.FIND_REPOSITORIES_BY_ORGANIZATION: {\n const organizationName = req.params.organizationName?.toString();\n auditorEvent = await auditCreateEvent(auditor, 'repo-read', req, {\n queryType: 'by-org',\n organizationName,\n });\n break;\n }\n case Operations.FIND_ALL_IMPORTS:\n auditorEvent = await auditCreateEvent(auditor, 'import-read', req, {\n queryType: req.query.search ? 'by-query' : 'all',\n search: req.query.search,\n });\n break;\n case Operations.CREATE_IMPORT_JOBS:\n auditorEvent = await auditCreateEvent(auditor, 'import-write', req, {\n actionType: 'create',\n dryRun: req.query.dryRun,\n });\n break;\n case Operations.FIND_IMPORT_STATUS_BY_REPO:\n auditorEvent = await auditCreateEvent(\n auditor,\n 'import-status-read',\n req,\n { queryType: 'by-query', repo: req.query.repo },\n );\n break;\n case Operations.DELETE_IMPORT_BY_REPO:\n auditorEvent = await auditCreateEvent(auditor, 'import-write', req, {\n actionType: 'delete',\n repository: req.query.repo,\n });\n break;\n case undefined:\n auditorEvent = await auditCreateEvent(auditor, operationId, req);\n break;\n default:\n // do nothing\n break;\n }\n return auditorEvent;\n}\n\nfunction stringToNumber(s: number | undefined): number | undefined {\n return s ? Number.parseInt(s.toString(), 10) : undefined;\n}\n\nfunction stringToBoolean(s: boolean | undefined): boolean | undefined {\n if (!s) {\n return undefined;\n }\n return s.toString() === 'true';\n}\n"],"names":["Operations","auth","githubApiService","GithubApiService","catalogHttpClient","CatalogHttpClient","catalogInfoGenerator","CatalogInfoGenerator","OpenAPIBackend","fullFormats","openApiDocument","ping","findAllOrganizations","findAllRepositories","findRepositoriesByOrganization","findAllImports","createImportJobs","findImportStatusByRepo","deleteImportByRepo","Router","express","createPermissionIntegrationRouter","bulkImportPermission","permissionCheck","MiddlewareFactory","auditCreateEvent"],"mappings":"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"}
1
+ {"version":3,"file":"router.cjs.js","sources":["../../src/service/router.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { MiddlewareFactory } from '@backstage/backend-defaults/rootHttpRouter';\nimport type {\n AuditorService,\n AuditorServiceEvent,\n AuthService,\n CacheService,\n DiscoveryService,\n HttpAuthService,\n LoggerService,\n} from '@backstage/backend-plugin-api';\nimport type { CatalogApi } from '@backstage/catalog-client';\nimport type { Config } from '@backstage/config';\nimport type { PermissionEvaluator } from '@backstage/plugin-permission-common';\nimport { createPermissionIntegrationRouter } from '@backstage/plugin-permission-node';\n\nimport { fullFormats } from 'ajv-formats/dist/formats';\nimport express, { Router, type Request, type Response } from 'express';\nimport {\n OpenAPIBackend,\n type Context,\n type Request as OpenAPIRequest,\n} from 'openapi-backend';\n\nimport { bulkImportPermission } from '@red-hat-developer-hub/backstage-plugin-bulk-import-common';\n\nimport { CatalogHttpClient } from '../catalog/catalogHttpClient';\nimport { CatalogInfoGenerator } from '../catalog/catalogInfoGenerator';\nimport type { Components, Paths } from '../generated/openapi.d';\nimport { openApiDocument } from '../generated/openapidocument';\nimport { GithubApiService } from '../github';\nimport { GitlabApiService } from '../gitlab';\nimport { parseGitURLForApprovalTool, permissionCheck } from '../helpers';\nimport { auditCreateEvent } from '../helpers/auditorUtils';\nimport {\n createImportJobs,\n deleteImportByRepo,\n findAllImports,\n findImportStatusByRepo,\n} from './handlers/import';\nimport { findAllOrganizations } from './handlers/organization';\nimport { ping } from './handlers/ping';\nimport {\n findAllRepositories,\n findRepositoriesByOrganization,\n} from './handlers/repository';\n\n/**\n * Router Options\n * @public\n */\nexport interface RouterOptions {\n logger: LoggerService;\n permissions: PermissionEvaluator;\n config: Config;\n cache: CacheService;\n discovery: DiscoveryService;\n httpAuth: HttpAuthService;\n auth: AuthService;\n catalogApi: CatalogApi;\n auditor: AuditorService;\n}\n\nnamespace Operations {\n export const PING = 'ping';\n export const FIND_ALL_ORGANIZATIONS = 'findAllOrganizations';\n export const FIND_ALL_REPOSITORIES = 'findAllRepositories';\n export const FIND_REPOSITORIES_BY_ORGANIZATION =\n 'findRepositoriesByOrganization';\n export const FIND_ALL_IMPORTS = 'findAllImports';\n export const CREATE_IMPORT_JOBS = 'createImportJobs';\n export const FIND_IMPORT_STATUS_BY_REPO = 'findImportStatusByRepo';\n export const DELETE_IMPORT_BY_REPO = 'deleteImportByRepo';\n}\n\n/**\n * Router\n * @public\n */\nexport async function createRouter(\n options: RouterOptions,\n): Promise<express.Router> {\n const {\n logger,\n httpAuth,\n auth,\n permissions,\n config,\n cache,\n discovery,\n catalogApi,\n auditor: auditor,\n } = options;\n // This should probably be sometype of object that holds all the scm API service objects\n const githubApiService = new GithubApiService(logger, config, cache);\n const gitlabApiService = new GitlabApiService(logger, config, cache);\n const catalogHttpClient = new CatalogHttpClient({\n logger,\n config,\n discovery,\n auth,\n catalogApi,\n });\n const catalogInfoGenerator = new CatalogInfoGenerator(\n logger,\n catalogHttpClient,\n );\n\n // create openapi requests handler\n const api = new OpenAPIBackend({\n ajvOpts: {\n verbose: true,\n formats: fullFormats, // open issue: https://github.com/openapistack/openapi-backend/issues/280\n },\n validate: true,\n definition: openApiDocument,\n handlers: {\n validationFail: async (c, _req: Request, res: Response) =>\n res.status(400).json({ err: c.validation.errors }),\n notFound: async (_c, req: Request, res: Response) =>\n res.status(404).json({ err: `'${req.method} ${req.path}' not found` }),\n notImplemented: async (_c, req: Request, res: Response) =>\n res\n .status(500)\n .json({ err: `'${req.method} ${req.path}' not implemented` }),\n },\n });\n\n await api.init();\n\n api.register(\n Operations.PING,\n async (_c: Context, _req: Request, res: Response) => {\n const result = await ping(logger);\n return res.status(result.statusCode).json(result.responseBody);\n },\n );\n\n api.register(\n Operations.FIND_ALL_ORGANIZATIONS,\n async (c: Context, _req: Request, res: Response) => {\n const q: Paths.FindAllOrganizations.QueryParameters = {\n ...c.request.query,\n };\n // we need to convert strings to real types due to open PR https://github.com/openapistack/openapi-backend/pull/571\n q.pagePerIntegration = stringToNumber(q.pagePerIntegration);\n q.sizePerIntegration = stringToNumber(q.sizePerIntegration);\n const response = await findAllOrganizations(\n logger,\n q.approvalTool === 'GITLAB' ? gitlabApiService : githubApiService,\n q.search,\n q.pagePerIntegration,\n q.sizePerIntegration,\n );\n return res.status(response.statusCode).json({\n errors: response.responseBody?.errors,\n organizations: response.responseBody?.organizations,\n totalCount: response.responseBody?.totalCount,\n pagePerIntegration: response.responseBody?.pagePerIntegration,\n sizePerIntegration: response.responseBody?.sizePerIntegration,\n approvalTool: q.approvalTool,\n } as Components.Schemas.OrganizationList);\n },\n );\n\n api.register(\n Operations.FIND_ALL_REPOSITORIES,\n async (c: Context, _req: Request, res: Response) => {\n const q: Paths.FindAllRepositories.QueryParameters = {\n ...c.request.query,\n };\n // we need to convert strings to real types due to open PR https://github.com/openapistack/openapi-backend/pull/571\n q.pagePerIntegration = stringToNumber(q.pagePerIntegration);\n q.sizePerIntegration = stringToNumber(q.sizePerIntegration);\n q.checkImportStatus = stringToBoolean(q.checkImportStatus);\n const response = await findAllRepositories(\n {\n logger,\n config,\n gitApiService:\n q.approvalTool === 'GITLAB' ? gitlabApiService : githubApiService,\n catalogHttpClient,\n },\n {\n search: q.search,\n checkStatus: q.checkImportStatus,\n pageNumber: q.pagePerIntegration,\n pageSize: q.sizePerIntegration,\n approvalTool: q.approvalTool,\n },\n );\n const repos = response.responseBody?.repositories;\n return res.status(response.statusCode).json({\n errors: response.responseBody?.errors,\n repositories: repos,\n totalCount: response.responseBody?.totalCount,\n pagePerIntegration: q.pagePerIntegration,\n sizePerIntegration: q.sizePerIntegration,\n approvalTool: q.approvalTool,\n } as Components.Schemas.RepositoryList);\n },\n );\n\n api.register(\n Operations.FIND_REPOSITORIES_BY_ORGANIZATION,\n async (c: Context, _req: Request, res: Response) => {\n const q: Paths.FindRepositoriesByOrganization.QueryParameters = {\n ...c.request.query,\n };\n // we need to convert strings to real types due to open PR https://github.com/openapistack/openapi-backend/pull/571\n q.pagePerIntegration = stringToNumber(q.pagePerIntegration);\n q.sizePerIntegration = stringToNumber(q.sizePerIntegration);\n q.checkImportStatus = stringToBoolean(q.checkImportStatus);\n const response = await findRepositoriesByOrganization(\n {\n logger,\n config,\n gitApiService:\n q.approvalTool === 'GITLAB' ? gitlabApiService : githubApiService,\n catalogHttpClient,\n },\n c.request.params.organizationName?.toString(),\n q.search,\n q.checkImportStatus,\n q.pagePerIntegration,\n q.sizePerIntegration,\n );\n const repos = response.responseBody?.repositories;\n return res.status(response.statusCode).json({\n errors: response.responseBody?.errors,\n repositories: repos,\n totalCount: response.responseBody?.totalCount,\n pagePerIntegration: q.pagePerIntegration,\n sizePerIntegration: q.sizePerIntegration,\n approvalTool: q.approvalTool,\n } as Components.Schemas.RepositoryList);\n },\n );\n\n api.register(\n Operations.FIND_ALL_IMPORTS,\n async (c: Context, _req: Request, res: Response) => {\n const h: Paths.FindAllImports.HeaderParameters = {\n ...c.request.headers,\n };\n const apiVersion = h['api-version'];\n const q: Paths.FindAllImports.QueryParameters = {\n ...c.request.query,\n };\n // we need to convert strings to real types due to open PR https://github.com/openapistack/openapi-backend/pull/571\n let page: number | undefined;\n let size: number | undefined;\n if (apiVersion === undefined || apiVersion === 'v1') {\n // pagePerIntegration and sizePerIntegration deprecated in v1. 'page' and 'size' take precedence.\n page = stringToNumber(q.page || q.pagePerIntegration);\n size = stringToNumber(q.size || q.sizePerIntegration);\n } else {\n // pagePerIntegration and sizePerIntegration removed in v2+ and replaced by 'page' and 'size'.\n page = stringToNumber(q.page);\n size = stringToNumber(q.size);\n }\n const response = await findAllImports(\n {\n logger,\n config,\n githubApiService,\n gitlabApiService,\n catalogHttpClient,\n },\n {\n apiVersion,\n },\n {\n search: q.search,\n pageNumber: page,\n pageSize: size,\n sortColumn: q.sortColumn,\n sortOrder: q.sortOrder,\n },\n );\n return res.status(response.statusCode).json(response.responseBody);\n },\n );\n\n api.register(\n Operations.CREATE_IMPORT_JOBS,\n async (\n c: Context<Paths.CreateImportJobs.RequestBody>,\n _req: Request,\n res: Response,\n ) => {\n const q: Paths.CreateImportJobs.QueryParameters = {\n ...c.request.query,\n };\n q.dryRun = stringToBoolean(q.dryRun);\n const response = await createImportJobs(\n {\n logger,\n config,\n auth,\n catalogApi,\n gitlabApiService,\n githubApiService,\n catalogInfoGenerator,\n catalogHttpClient,\n },\n {\n importRequests: c.request.requestBody,\n dryRun: q.dryRun,\n },\n );\n return res.status(response.statusCode).json(response.responseBody);\n },\n );\n\n api.register(\n Operations.FIND_IMPORT_STATUS_BY_REPO,\n async (c: Context, _req: Request, res: Response) => {\n const q: Paths.FindImportStatusByRepo.QueryParameters = {\n ...c.request.query,\n };\n if (!q.repo?.trim()) {\n throw new Error('missing or blank parameter');\n }\n const response = await findImportStatusByRepo(\n {\n logger,\n config,\n gitApiService:\n q.approvalTool === 'GITLAB' ? gitlabApiService : githubApiService,\n catalogHttpClient,\n approvalTool: q.approvalTool,\n },\n q.repo,\n q.defaultBranch,\n true,\n );\n return res.status(response.statusCode).json(response.responseBody);\n },\n );\n\n api.register(\n Operations.DELETE_IMPORT_BY_REPO,\n async (c: Context, _req: Request, res: Response) => {\n const q: Paths.DeleteImportByRepo.QueryParameters = {\n ...c.request.query,\n };\n if (!q.repo?.trim()) {\n throw new Error('missing or blank \"repo\" parameter');\n }\n const response = await deleteImportByRepo(\n {\n logger,\n config,\n gitApiService:\n parseGitURLForApprovalTool(q.repo) === 'GITLAB'\n ? gitlabApiService\n : githubApiService,\n catalogHttpClient,\n },\n q.repo,\n q.defaultBranch,\n );\n return res.status(response.statusCode).json(response.responseBody);\n },\n );\n\n const router = Router();\n router.use(express.json());\n\n const permissionIntegrationRouter = createPermissionIntegrationRouter({\n permissions: [bulkImportPermission],\n });\n router.use(permissionIntegrationRouter);\n\n router.use(async (req, _res, next) => {\n if (req.path !== '/ping') {\n await permissionCheck(\n auditor,\n api.matchOperation(req as OpenAPIRequest)?.operationId,\n permissions,\n httpAuth,\n req,\n ).catch(next);\n }\n next();\n });\n\n router.use(async (req, res, next) => {\n const reqCast = req as OpenAPIRequest;\n const operationId = api.matchOperation(reqCast)?.operationId;\n\n const auditorEvent = await createAuditorEventByOperationId(\n operationId,\n req,\n auditor,\n );\n try {\n const response = (await api.handleRequest(reqCast, req, res)) as Response;\n auditorEvent?.success({ meta: { responseStatus: response.statusCode } });\n next();\n } catch (err: any) {\n auditorEvent?.fail({ error: err, meta: { responseStatus: 500 } });\n next(err);\n }\n });\n\n const middleware = MiddlewareFactory.create({ logger, config });\n router.use(middleware.error());\n\n return router;\n}\n\nasync function createAuditorEventByOperationId(\n operationId: string | undefined,\n req: Request,\n auditor: AuditorService,\n): Promise<AuditorServiceEvent | undefined> {\n let auditorEvent;\n switch (operationId) {\n case Operations.PING:\n auditorEvent = await auditCreateEvent(auditor, 'ping', req);\n break;\n case Operations.FIND_ALL_ORGANIZATIONS:\n auditorEvent = await auditCreateEvent(auditor, 'org-read', req, {\n queryType: req.query.search ? 'by-query' : 'all',\n search: req.query?.search,\n });\n break;\n case Operations.FIND_ALL_REPOSITORIES:\n auditorEvent = await auditCreateEvent(auditor, 'repo-read', req, {\n queryType: req.query.search ? 'by-query' : 'all',\n search: req.query.search,\n });\n break;\n case Operations.FIND_REPOSITORIES_BY_ORGANIZATION: {\n const organizationName = req.params.organizationName?.toString();\n auditorEvent = await auditCreateEvent(auditor, 'repo-read', req, {\n queryType: 'by-org',\n organizationName,\n });\n break;\n }\n case Operations.FIND_ALL_IMPORTS:\n auditorEvent = await auditCreateEvent(auditor, 'import-read', req, {\n queryType: req.query.search ? 'by-query' : 'all',\n search: req.query.search,\n });\n break;\n case Operations.CREATE_IMPORT_JOBS:\n auditorEvent = await auditCreateEvent(auditor, 'import-write', req, {\n actionType: 'create',\n dryRun: req.query.dryRun,\n });\n break;\n case Operations.FIND_IMPORT_STATUS_BY_REPO:\n auditorEvent = await auditCreateEvent(\n auditor,\n 'import-status-read',\n req,\n { queryType: 'by-query', repo: req.query.repo },\n );\n break;\n case Operations.DELETE_IMPORT_BY_REPO:\n auditorEvent = await auditCreateEvent(auditor, 'import-write', req, {\n actionType: 'delete',\n repository: req.query.repo,\n });\n break;\n case undefined:\n auditorEvent = await auditCreateEvent(auditor, operationId, req);\n break;\n default:\n // do nothing\n break;\n }\n return auditorEvent;\n}\n\nfunction stringToNumber(s: number | undefined): number | undefined {\n return s ? Number.parseInt(s.toString(), 10) : undefined;\n}\n\nfunction stringToBoolean(s: boolean | undefined): boolean | undefined {\n if (!s) {\n return undefined;\n }\n return s.toString() === 'true';\n}\n"],"names":["Operations","auth","githubApiService","GithubApiService","gitlabApiService","GitlabApiService","catalogHttpClient","CatalogHttpClient","catalogInfoGenerator","CatalogInfoGenerator","OpenAPIBackend","fullFormats","openApiDocument","ping","findAllOrganizations","findAllRepositories","findRepositoriesByOrganization","findAllImports","createImportJobs","findImportStatusByRepo","deleteImportByRepo","parseGitURLForApprovalTool","Router","express","createPermissionIntegrationRouter","bulkImportPermission","permissionCheck","MiddlewareFactory","auditCreateEvent"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8EA,IAAU,UAAA;AAAA,CAAV,CAAUA,WAAV,KAAA;AACS,EAAMA,YAAA,IAAO,GAAA,MAAA;AACb,EAAMA,YAAA,sBAAyB,GAAA,sBAAA;AAC/B,EAAMA,YAAA,qBAAwB,GAAA,qBAAA;AAC9B,EAAMA,YAAA,iCACX,GAAA,gCAAA;AACK,EAAMA,YAAA,gBAAmB,GAAA,gBAAA;AACzB,EAAMA,YAAA,kBAAqB,GAAA,kBAAA;AAC3B,EAAMA,YAAA,0BAA6B,GAAA,wBAAA;AACnC,EAAMA,YAAA,qBAAwB,GAAA,oBAAA;AAAA,CAT7B,EAAA,UAAA,KAAA,UAAA,GAAA,EAAA,CAAA,CAAA;AAgBV,eAAsB,aACpB,OACyB,EAAA;AACzB,EAAM,MAAA;AAAA,IACJ,MAAA;AAAA,IACA,QAAA;AAAA,UACAC,MAAA;AAAA,IACA,WAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GACE,GAAA,OAAA;AAEJ,EAAA,MAAMC,kBAAmB,GAAA,IAAIC,iCAAiB,CAAA,MAAA,EAAQ,QAAQ,KAAK,CAAA;AACnE,EAAA,MAAMC,kBAAmB,GAAA,IAAIC,iCAAiB,CAAA,MAAA,EAAQ,QAAQ,KAAK,CAAA;AACnE,EAAM,MAAAC,mBAAA,GAAoB,IAAIC,mCAAkB,CAAA;AAAA,IAC9C,MAAA;AAAA,IACA,MAAA;AAAA,IACA,SAAA;AAAA,UACAN,MAAA;AAAA,IACA;AAAA,GACD,CAAA;AACD,EAAA,MAAMO,yBAAuB,IAAIC,yCAAA;AAAA,IAC/B,MAAA;AAAA,IACAH;AAAA,GACF;AAGA,EAAM,MAAA,GAAA,GAAM,IAAII,6BAAe,CAAA;AAAA,IAC7B,OAAS,EAAA;AAAA,MACP,OAAS,EAAA,IAAA;AAAA,MACT,OAAS,EAAAC;AAAA;AAAA,KACX;AAAA,IACA,QAAU,EAAA,IAAA;AAAA,IACV,UAAY,EAAAC,+BAAA;AAAA,IACZ,QAAU,EAAA;AAAA,MACR,cAAgB,EAAA,OAAO,CAAG,EAAA,IAAA,EAAe,QACvC,GAAI,CAAA,MAAA,CAAO,GAAG,CAAA,CAAE,KAAK,EAAE,GAAA,EAAK,CAAE,CAAA,UAAA,CAAW,QAAQ,CAAA;AAAA,MACnD,UAAU,OAAO,EAAA,EAAI,KAAc,GACjC,KAAA,GAAA,CAAI,OAAO,GAAG,CAAA,CAAE,KAAK,EAAE,GAAA,EAAK,IAAI,GAAI,CAAA,MAAM,IAAI,GAAI,CAAA,IAAI,eAAe,CAAA;AAAA,MACvE,gBAAgB,OAAO,EAAA,EAAI,KAAc,GACvC,KAAA,GAAA,CACG,OAAO,GAAG,CAAA,CACV,KAAK,EAAE,GAAA,EAAK,IAAI,GAAI,CAAA,MAAM,IAAI,GAAI,CAAA,IAAI,qBAAqB;AAAA;AAClE,GACD,CAAA;AAED,EAAA,MAAM,IAAI,IAAK,EAAA;AAEf,EAAI,GAAA,CAAA,QAAA;AAAA,IACF,UAAW,CAAA,IAAA;AAAA,IACX,OAAO,EAAa,EAAA,IAAA,EAAe,GAAkB,KAAA;AACnD,MAAM,MAAA,MAAA,GAAS,MAAMC,SAAA,CAAK,MAAM,CAAA;AAChC,MAAA,OAAO,IAAI,MAAO,CAAA,MAAA,CAAO,UAAU,CAAE,CAAA,IAAA,CAAK,OAAO,YAAY,CAAA;AAAA;AAC/D,GACF;AAEA,EAAI,GAAA,CAAA,QAAA;AAAA,IACF,UAAW,CAAA,sBAAA;AAAA,IACX,OAAO,CAAY,EAAA,IAAA,EAAe,GAAkB,KAAA;AAClD,MAAA,MAAM,CAAgD,GAAA;AAAA,QACpD,GAAG,EAAE,OAAQ,CAAA;AAAA,OACf;AAEA,MAAE,CAAA,CAAA,kBAAA,GAAqB,cAAe,CAAA,CAAA,CAAE,kBAAkB,CAAA;AAC1D,MAAE,CAAA,CAAA,kBAAA,GAAqB,cAAe,CAAA,CAAA,CAAE,kBAAkB,CAAA;AAC1D,MAAA,MAAM,WAAW,MAAMC,kCAAA;AAAA,QACrB,MAAA;AAAA,QACA,CAAA,CAAE,YAAiB,KAAA,QAAA,GAAWV,kBAAmB,GAAAF,kBAAA;AAAA,QACjD,CAAE,CAAA,MAAA;AAAA,QACF,CAAE,CAAA,kBAAA;AAAA,QACF,CAAE,CAAA;AAAA,OACJ;AACA,MAAA,OAAO,GAAI,CAAA,MAAA,CAAO,QAAS,CAAA,UAAU,EAAE,IAAK,CAAA;AAAA,QAC1C,MAAA,EAAQ,SAAS,YAAc,EAAA,MAAA;AAAA,QAC/B,aAAA,EAAe,SAAS,YAAc,EAAA,aAAA;AAAA,QACtC,UAAA,EAAY,SAAS,YAAc,EAAA,UAAA;AAAA,QACnC,kBAAA,EAAoB,SAAS,YAAc,EAAA,kBAAA;AAAA,QAC3C,kBAAA,EAAoB,SAAS,YAAc,EAAA,kBAAA;AAAA,QAC3C,cAAc,CAAE,CAAA;AAAA,OACsB,CAAA;AAAA;AAC1C,GACF;AAEA,EAAI,GAAA,CAAA,QAAA;AAAA,IACF,UAAW,CAAA,qBAAA;AAAA,IACX,OAAO,CAAY,EAAA,IAAA,EAAe,GAAkB,KAAA;AAClD,MAAA,MAAM,CAA+C,GAAA;AAAA,QACnD,GAAG,EAAE,OAAQ,CAAA;AAAA,OACf;AAEA,MAAE,CAAA,CAAA,kBAAA,GAAqB,cAAe,CAAA,CAAA,CAAE,kBAAkB,CAAA;AAC1D,MAAE,CAAA,CAAA,kBAAA,GAAqB,cAAe,CAAA,CAAA,CAAE,kBAAkB,CAAA;AAC1D,MAAE,CAAA,CAAA,iBAAA,GAAoB,eAAgB,CAAA,CAAA,CAAE,iBAAiB,CAAA;AACzD,MAAA,MAAM,WAAW,MAAMa,gCAAA;AAAA,QACrB;AAAA,UACE,MAAA;AAAA,UACA,MAAA;AAAA,UACA,aACE,EAAA,CAAA,CAAE,YAAiB,KAAA,QAAA,GAAWX,kBAAmB,GAAAF,kBAAA;AAAA,6BACnDI;AAAA,SACF;AAAA,QACA;AAAA,UACE,QAAQ,CAAE,CAAA,MAAA;AAAA,UACV,aAAa,CAAE,CAAA,iBAAA;AAAA,UACf,YAAY,CAAE,CAAA,kBAAA;AAAA,UACd,UAAU,CAAE,CAAA,kBAAA;AAAA,UACZ,cAAc,CAAE,CAAA;AAAA;AAClB,OACF;AACA,MAAM,MAAA,KAAA,GAAQ,SAAS,YAAc,EAAA,YAAA;AACrC,MAAA,OAAO,GAAI,CAAA,MAAA,CAAO,QAAS,CAAA,UAAU,EAAE,IAAK,CAAA;AAAA,QAC1C,MAAA,EAAQ,SAAS,YAAc,EAAA,MAAA;AAAA,QAC/B,YAAc,EAAA,KAAA;AAAA,QACd,UAAA,EAAY,SAAS,YAAc,EAAA,UAAA;AAAA,QACnC,oBAAoB,CAAE,CAAA,kBAAA;AAAA,QACtB,oBAAoB,CAAE,CAAA,kBAAA;AAAA,QACtB,cAAc,CAAE,CAAA;AAAA,OACoB,CAAA;AAAA;AACxC,GACF;AAEA,EAAI,GAAA,CAAA,QAAA;AAAA,IACF,UAAW,CAAA,iCAAA;AAAA,IACX,OAAO,CAAY,EAAA,IAAA,EAAe,GAAkB,KAAA;AAClD,MAAA,MAAM,CAA0D,GAAA;AAAA,QAC9D,GAAG,EAAE,OAAQ,CAAA;AAAA,OACf;AAEA,MAAE,CAAA,CAAA,kBAAA,GAAqB,cAAe,CAAA,CAAA,CAAE,kBAAkB,CAAA;AAC1D,MAAE,CAAA,CAAA,kBAAA,GAAqB,cAAe,CAAA,CAAA,CAAE,kBAAkB,CAAA;AAC1D,MAAE,CAAA,CAAA,iBAAA,GAAoB,eAAgB,CAAA,CAAA,CAAE,iBAAiB,CAAA;AACzD,MAAA,MAAM,WAAW,MAAMU,2CAAA;AAAA,QACrB;AAAA,UACE,MAAA;AAAA,UACA,MAAA;AAAA,UACA,aACE,EAAA,CAAA,CAAE,YAAiB,KAAA,QAAA,GAAWZ,kBAAmB,GAAAF,kBAAA;AAAA,6BACnDI;AAAA,SACF;AAAA,QACA,CAAE,CAAA,OAAA,CAAQ,MAAO,CAAA,gBAAA,EAAkB,QAAS,EAAA;AAAA,QAC5C,CAAE,CAAA,MAAA;AAAA,QACF,CAAE,CAAA,iBAAA;AAAA,QACF,CAAE,CAAA,kBAAA;AAAA,QACF,CAAE,CAAA;AAAA,OACJ;AACA,MAAM,MAAA,KAAA,GAAQ,SAAS,YAAc,EAAA,YAAA;AACrC,MAAA,OAAO,GAAI,CAAA,MAAA,CAAO,QAAS,CAAA,UAAU,EAAE,IAAK,CAAA;AAAA,QAC1C,MAAA,EAAQ,SAAS,YAAc,EAAA,MAAA;AAAA,QAC/B,YAAc,EAAA,KAAA;AAAA,QACd,UAAA,EAAY,SAAS,YAAc,EAAA,UAAA;AAAA,QACnC,oBAAoB,CAAE,CAAA,kBAAA;AAAA,QACtB,oBAAoB,CAAE,CAAA,kBAAA;AAAA,QACtB,cAAc,CAAE,CAAA;AAAA,OACoB,CAAA;AAAA;AACxC,GACF;AAEA,EAAI,GAAA,CAAA,QAAA;AAAA,IACF,UAAW,CAAA,gBAAA;AAAA,IACX,OAAO,CAAY,EAAA,IAAA,EAAe,GAAkB,KAAA;AAClD,MAAA,MAAM,CAA2C,GAAA;AAAA,QAC/C,GAAG,EAAE,OAAQ,CAAA;AAAA,OACf;AACA,MAAM,MAAA,UAAA,GAAa,EAAE,aAAa,CAAA;AAClC,MAAA,MAAM,CAA0C,GAAA;AAAA,QAC9C,GAAG,EAAE,OAAQ,CAAA;AAAA,OACf;AAEA,MAAI,IAAA,IAAA;AACJ,MAAI,IAAA,IAAA;AACJ,MAAI,IAAA,UAAA,KAAe,SAAa,IAAA,UAAA,KAAe,IAAM,EAAA;AAEnD,QAAA,IAAA,GAAO,cAAe,CAAA,CAAA,CAAE,IAAQ,IAAA,CAAA,CAAE,kBAAkB,CAAA;AACpD,QAAA,IAAA,GAAO,cAAe,CAAA,CAAA,CAAE,IAAQ,IAAA,CAAA,CAAE,kBAAkB,CAAA;AAAA,OAC/C,MAAA;AAEL,QAAO,IAAA,GAAA,cAAA,CAAe,EAAE,IAAI,CAAA;AAC5B,QAAO,IAAA,GAAA,cAAA,CAAe,EAAE,IAAI,CAAA;AAAA;AAE9B,MAAA,MAAM,WAAW,MAAMW,0BAAA;AAAA,QACrB;AAAA,UACE,MAAA;AAAA,UACA,MAAA;AAAA,4BACAf,kBAAA;AAAA,4BACAE,kBAAA;AAAA,6BACAE;AAAA,SACF;AAAA,QACA;AAAA,UACE;AAAA,SACF;AAAA,QACA;AAAA,UACE,QAAQ,CAAE,CAAA,MAAA;AAAA,UACV,UAAY,EAAA,IAAA;AAAA,UACZ,QAAU,EAAA,IAAA;AAAA,UACV,YAAY,CAAE,CAAA,UAAA;AAAA,UACd,WAAW,CAAE,CAAA;AAAA;AACf,OACF;AACA,MAAA,OAAO,IAAI,MAAO,CAAA,QAAA,CAAS,UAAU,CAAE,CAAA,IAAA,CAAK,SAAS,YAAY,CAAA;AAAA;AACnE,GACF;AAEA,EAAI,GAAA,CAAA,QAAA;AAAA,IACF,UAAW,CAAA,kBAAA;AAAA,IACX,OACE,CACA,EAAA,IAAA,EACA,GACG,KAAA;AACH,MAAA,MAAM,CAA4C,GAAA;AAAA,QAChD,GAAG,EAAE,OAAQ,CAAA;AAAA,OACf;AACA,MAAE,CAAA,CAAA,MAAA,GAAS,eAAgB,CAAA,CAAA,CAAE,MAAM,CAAA;AACnC,MAAA,MAAM,WAAW,MAAMY,4BAAA;AAAA,QACrB;AAAA,UACE,MAAA;AAAA,UACA,MAAA;AAAA,gBACAjB,MAAA;AAAA,UACA,UAAA;AAAA,4BACAG,kBAAA;AAAA,4BACAF,kBAAA;AAAA,gCACAM,sBAAA;AAAA,6BACAF;AAAA,SACF;AAAA,QACA;AAAA,UACE,cAAA,EAAgB,EAAE,OAAQ,CAAA,WAAA;AAAA,UAC1B,QAAQ,CAAE,CAAA;AAAA;AACZ,OACF;AACA,MAAA,OAAO,IAAI,MAAO,CAAA,QAAA,CAAS,UAAU,CAAE,CAAA,IAAA,CAAK,SAAS,YAAY,CAAA;AAAA;AACnE,GACF;AAEA,EAAI,GAAA,CAAA,QAAA;AAAA,IACF,UAAW,CAAA,0BAAA;AAAA,IACX,OAAO,CAAY,EAAA,IAAA,EAAe,GAAkB,KAAA;AAClD,MAAA,MAAM,CAAkD,GAAA;AAAA,QACtD,GAAG,EAAE,OAAQ,CAAA;AAAA,OACf;AACA,MAAA,IAAI,CAAC,CAAA,CAAE,IAAM,EAAA,IAAA,EAAQ,EAAA;AACnB,QAAM,MAAA,IAAI,MAAM,4BAA4B,CAAA;AAAA;AAE9C,MAAA,MAAM,WAAW,MAAMa,kCAAA;AAAA,QACrB;AAAA,UACE,MAAA;AAAA,UACA,MAAA;AAAA,UACA,aACE,EAAA,CAAA,CAAE,YAAiB,KAAA,QAAA,GAAWf,kBAAmB,GAAAF,kBAAA;AAAA,6BACnDI,mBAAA;AAAA,UACA,cAAc,CAAE,CAAA;AAAA,SAClB;AAAA,QACA,CAAE,CAAA,IAAA;AAAA,QACF,CAAE,CAAA,aAAA;AAAA,QACF;AAAA,OACF;AACA,MAAA,OAAO,IAAI,MAAO,CAAA,QAAA,CAAS,UAAU,CAAE,CAAA,IAAA,CAAK,SAAS,YAAY,CAAA;AAAA;AACnE,GACF;AAEA,EAAI,GAAA,CAAA,QAAA;AAAA,IACF,UAAW,CAAA,qBAAA;AAAA,IACX,OAAO,CAAY,EAAA,IAAA,EAAe,GAAkB,KAAA;AAClD,MAAA,MAAM,CAA8C,GAAA;AAAA,QAClD,GAAG,EAAE,OAAQ,CAAA;AAAA,OACf;AACA,MAAA,IAAI,CAAC,CAAA,CAAE,IAAM,EAAA,IAAA,EAAQ,EAAA;AACnB,QAAM,MAAA,IAAI,MAAM,mCAAmC,CAAA;AAAA;AAErD,MAAA,MAAM,WAAW,MAAMc,8BAAA;AAAA,QACrB;AAAA,UACE,MAAA;AAAA,UACA,MAAA;AAAA,UACA,eACEC,gCAA2B,CAAA,CAAA,CAAE,IAAI,CAAA,KAAM,WACnCjB,kBACA,GAAAF,kBAAA;AAAA,6BACNI;AAAA,SACF;AAAA,QACA,CAAE,CAAA,IAAA;AAAA,QACF,CAAE,CAAA;AAAA,OACJ;AACA,MAAA,OAAO,IAAI,MAAO,CAAA,QAAA,CAAS,UAAU,CAAE,CAAA,IAAA,CAAK,SAAS,YAAY,CAAA;AAAA;AACnE,GACF;AAEA,EAAA,MAAM,SAASgB,cAAO,EAAA;AACtB,EAAO,MAAA,CAAA,GAAA,CAAIC,wBAAQ,CAAA,IAAA,EAAM,CAAA;AAEzB,EAAA,MAAM,8BAA8BC,sDAAkC,CAAA;AAAA,IACpE,WAAA,EAAa,CAACC,oDAAoB;AAAA,GACnC,CAAA;AACD,EAAA,MAAA,CAAO,IAAI,2BAA2B,CAAA;AAEtC,EAAA,MAAA,CAAO,GAAI,CAAA,OAAO,GAAK,EAAA,IAAA,EAAM,IAAS,KAAA;AACpC,IAAI,IAAA,GAAA,CAAI,SAAS,OAAS,EAAA;AACxB,MAAM,MAAAC,oBAAA;AAAA,QACJ,OAAA;AAAA,QACA,GAAA,CAAI,cAAe,CAAA,GAAqB,CAAG,EAAA,WAAA;AAAA,QAC3C,WAAA;AAAA,QACA,QAAA;AAAA,QACA;AAAA,OACF,CAAE,MAAM,IAAI,CAAA;AAAA;AAEd,IAAK,IAAA,EAAA;AAAA,GACN,CAAA;AAED,EAAA,MAAA,CAAO,GAAI,CAAA,OAAO,GAAK,EAAA,GAAA,EAAK,IAAS,KAAA;AACnC,IAAA,MAAM,OAAU,GAAA,GAAA;AAChB,IAAA,MAAM,WAAc,GAAA,GAAA,CAAI,cAAe,CAAA,OAAO,CAAG,EAAA,WAAA;AAEjD,IAAA,MAAM,eAAe,MAAM,+BAAA;AAAA,MACzB,WAAA;AAAA,MACA,GAAA;AAAA,MACA;AAAA,KACF;AACA,IAAI,IAAA;AACF,MAAA,MAAM,WAAY,MAAM,GAAA,CAAI,aAAc,CAAA,OAAA,EAAS,KAAK,GAAG,CAAA;AAC3D,MAAc,YAAA,EAAA,OAAA,CAAQ,EAAE,IAAM,EAAA,EAAE,gBAAgB,QAAS,CAAA,UAAA,IAAc,CAAA;AACvE,MAAK,IAAA,EAAA;AAAA,aACE,GAAU,EAAA;AACjB,MAAc,YAAA,EAAA,IAAA,CAAK,EAAE,KAAO,EAAA,GAAA,EAAK,MAAM,EAAE,cAAA,EAAgB,GAAI,EAAA,EAAG,CAAA;AAChE,MAAA,IAAA,CAAK,GAAG,CAAA;AAAA;AACV,GACD,CAAA;AAED,EAAA,MAAM,aAAaC,gCAAkB,CAAA,MAAA,CAAO,EAAE,MAAA,EAAQ,QAAQ,CAAA;AAC9D,EAAO,MAAA,CAAA,GAAA,CAAI,UAAW,CAAA,KAAA,EAAO,CAAA;AAE7B,EAAO,OAAA,MAAA;AACT;AAEA,eAAe,+BAAA,CACb,WACA,EAAA,GAAA,EACA,OAC0C,EAAA;AAC1C,EAAI,IAAA,YAAA;AACJ,EAAA,QAAQ,WAAa;AAAA,IACnB,KAAK,UAAW,CAAA,IAAA;AACd,MAAA,YAAA,GAAe,MAAMC,6BAAA,CAAiB,OAAS,EAAA,MAAA,EAAQ,GAAG,CAAA;AAC1D,MAAA;AAAA,IACF,KAAK,UAAW,CAAA,sBAAA;AACd,MAAA,YAAA,GAAe,MAAMA,6BAAA,CAAiB,OAAS,EAAA,UAAA,EAAY,GAAK,EAAA;AAAA,QAC9D,SAAW,EAAA,GAAA,CAAI,KAAM,CAAA,MAAA,GAAS,UAAa,GAAA,KAAA;AAAA,QAC3C,MAAA,EAAQ,IAAI,KAAO,EAAA;AAAA,OACpB,CAAA;AACD,MAAA;AAAA,IACF,KAAK,UAAW,CAAA,qBAAA;AACd,MAAA,YAAA,GAAe,MAAMA,6BAAA,CAAiB,OAAS,EAAA,WAAA,EAAa,GAAK,EAAA;AAAA,QAC/D,SAAW,EAAA,GAAA,CAAI,KAAM,CAAA,MAAA,GAAS,UAAa,GAAA,KAAA;AAAA,QAC3C,MAAA,EAAQ,IAAI,KAAM,CAAA;AAAA,OACnB,CAAA;AACD,MAAA;AAAA,IACF,KAAK,WAAW,iCAAmC,EAAA;AACjD,MAAA,MAAM,gBAAmB,GAAA,GAAA,CAAI,MAAO,CAAA,gBAAA,EAAkB,QAAS,EAAA;AAC/D,MAAA,YAAA,GAAe,MAAMA,6BAAA,CAAiB,OAAS,EAAA,WAAA,EAAa,GAAK,EAAA;AAAA,QAC/D,SAAW,EAAA,QAAA;AAAA,QACX;AAAA,OACD,CAAA;AACD,MAAA;AAAA;AACF,IACA,KAAK,UAAW,CAAA,gBAAA;AACd,MAAA,YAAA,GAAe,MAAMA,6BAAA,CAAiB,OAAS,EAAA,aAAA,EAAe,GAAK,EAAA;AAAA,QACjE,SAAW,EAAA,GAAA,CAAI,KAAM,CAAA,MAAA,GAAS,UAAa,GAAA,KAAA;AAAA,QAC3C,MAAA,EAAQ,IAAI,KAAM,CAAA;AAAA,OACnB,CAAA;AACD,MAAA;AAAA,IACF,KAAK,UAAW,CAAA,kBAAA;AACd,MAAA,YAAA,GAAe,MAAMA,6BAAA,CAAiB,OAAS,EAAA,cAAA,EAAgB,GAAK,EAAA;AAAA,QAClE,UAAY,EAAA,QAAA;AAAA,QACZ,MAAA,EAAQ,IAAI,KAAM,CAAA;AAAA,OACnB,CAAA;AACD,MAAA;AAAA,IACF,KAAK,UAAW,CAAA,0BAAA;AACd,MAAA,YAAA,GAAe,MAAMA,6BAAA;AAAA,QACnB,OAAA;AAAA,QACA,oBAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAE,SAAW,EAAA,UAAA,EAAY,IAAM,EAAA,GAAA,CAAI,MAAM,IAAK;AAAA,OAChD;AACA,MAAA;AAAA,IACF,KAAK,UAAW,CAAA,qBAAA;AACd,MAAA,YAAA,GAAe,MAAMA,6BAAA,CAAiB,OAAS,EAAA,cAAA,EAAgB,GAAK,EAAA;AAAA,QAClE,UAAY,EAAA,QAAA;AAAA,QACZ,UAAA,EAAY,IAAI,KAAM,CAAA;AAAA,OACvB,CAAA;AACD,MAAA;AAAA,IACF,KAAK,SAAA;AACH,MAAA,YAAA,GAAe,MAAMA,6BAAA,CAAiB,OAAS,EAAA,WAAA,EAAa,GAAG,CAAA;AAC/D,MAAA;AAGA;AAEJ,EAAO,OAAA,YAAA;AACT;AAEA,SAAS,eAAe,CAA2C,EAAA;AACjE,EAAA,OAAO,IAAI,MAAO,CAAA,QAAA,CAAS,EAAE,QAAS,EAAA,EAAG,EAAE,CAAI,GAAA,SAAA;AACjD;AAEA,SAAS,gBAAgB,CAA6C,EAAA;AACpE,EAAA,IAAI,CAAC,CAAG,EAAA;AACN,IAAO,OAAA,SAAA;AAAA;AAET,EAAO,OAAA,CAAA,CAAE,UAAe,KAAA,MAAA;AAC1B;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@red-hat-developer-hub/backstage-plugin-bulk-import-backend",
3
- "version": "6.2.0",
3
+ "version": "6.3.0",
4
4
  "main": "./dist/index.cjs.js",
5
5
  "types": "./dist/index.d.ts",
6
6
  "license": "Apache-2.0",
@@ -51,16 +51,17 @@
51
51
  "openapi": "./scripts/openapi.sh"
52
52
  },
53
53
  "dependencies": {
54
- "@backstage/backend-defaults": "^0.11.1",
55
- "@backstage/backend-plugin-api": "^1.4.1",
54
+ "@backstage/backend-defaults": "^0.12.0",
55
+ "@backstage/backend-plugin-api": "^1.4.2",
56
56
  "@backstage/errors": "^1.2.7",
57
57
  "@backstage/integration": "^1.17.1",
58
- "@backstage/plugin-catalog-node": "^1.17.2",
58
+ "@backstage/plugin-catalog-node": "^1.18.0",
59
59
  "@backstage/plugin-permission-common": "^0.9.1",
60
- "@backstage/plugin-permission-node": "^0.10.2",
60
+ "@backstage/plugin-permission-node": "^0.10.3",
61
+ "@gitbeaker/rest": "^43.4.0",
61
62
  "@octokit/auth-app": "^6.0.3",
62
63
  "@octokit/rest": "^20.0.2",
63
- "@red-hat-developer-hub/backstage-plugin-bulk-import-common": "^1.8.0",
64
+ "@red-hat-developer-hub/backstage-plugin-bulk-import-common": "^1.9.0",
64
65
  "ajv-formats": "^3.0.1",
65
66
  "express": "^4.17.1",
66
67
  "git-url-parse": "^14.0.0",
@@ -71,12 +72,12 @@
71
72
  "openapi-backend": "^5.10.6"
72
73
  },
73
74
  "devDependencies": {
74
- "@backstage/backend-test-utils": "^1.7.0",
75
- "@backstage/catalog-client": "^1.10.2",
75
+ "@backstage/backend-test-utils": "^1.8.0",
76
+ "@backstage/catalog-client": "^1.11.0",
76
77
  "@backstage/catalog-model": "^1.7.5",
77
- "@backstage/cli": "^0.33.1",
78
+ "@backstage/cli": "^0.34.1",
78
79
  "@backstage/config": "^1.3.3",
79
- "@backstage/plugin-catalog-backend": "^3.0.0",
80
+ "@backstage/plugin-catalog-backend": "^3.0.1",
80
81
  "@backstage/types": "^1.2.1",
81
82
  "@openapitools/openapi-generator-cli": "2.20.2",
82
83
  "@spotify/prettier-config": "^15.0.0",