@red-hat-developer-hub/backstage-plugin-orchestrator-backend 5.0.1 → 5.1.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.
- package/CHANGELOG.md +13 -0
- package/dist/service/OrchestratorService.cjs.js +6 -3
- package/dist/service/OrchestratorService.cjs.js.map +1 -1
- package/dist/service/SonataFlowService.cjs.js +0 -10
- package/dist/service/SonataFlowService.cjs.js.map +1 -1
- package/dist/service/api/v2.cjs.js +6 -3
- package/dist/service/api/v2.cjs.js.map +1 -1
- package/dist/service/router.cjs.js +164 -71
- package/dist/service/router.cjs.js.map +1 -1
- package/package.json +2 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
### Dependencies
|
|
2
2
|
|
|
3
|
+
## 5.1.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 5ab913b: Access can now be managed on a per-workflow basis.
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- 5b90f96: resolve dependency issues
|
|
12
|
+
- Updated dependencies [5b90f96]
|
|
13
|
+
- Updated dependencies [5ab913b]
|
|
14
|
+
- @red-hat-developer-hub/backstage-plugin-orchestrator-common@1.25.0
|
|
15
|
+
|
|
3
16
|
## 5.0.1
|
|
4
17
|
|
|
5
18
|
### Patch Changes
|
|
@@ -7,6 +7,9 @@ class OrchestratorService {
|
|
|
7
7
|
this.workflowCacheService = workflowCacheService;
|
|
8
8
|
}
|
|
9
9
|
// Data Index Service Wrapper
|
|
10
|
+
getWorkflowIds() {
|
|
11
|
+
return this.workflowCacheService.definitionIds;
|
|
12
|
+
}
|
|
10
13
|
async abortWorkflowInstance(args) {
|
|
11
14
|
const { instanceId, cacheHandler } = args;
|
|
12
15
|
const definitionId = await this.dataIndexService.fetchDefinitionIdByInstanceId(instanceId);
|
|
@@ -25,15 +28,15 @@ class OrchestratorService {
|
|
|
25
28
|
return isWorkflowAvailable ? await this.dataIndexService.fetchWorkflowInfo(definitionId) : void 0;
|
|
26
29
|
}
|
|
27
30
|
async fetchInstances(args) {
|
|
28
|
-
const definitionIds = args.
|
|
31
|
+
const definitionIds = args.workflowIds ? args.workflowIds : this.workflowCacheService.definitionIds;
|
|
29
32
|
return await this.dataIndexService.fetchInstances({
|
|
30
33
|
definitionIds,
|
|
31
34
|
pagination: args.pagination,
|
|
32
35
|
filter: args.filter
|
|
33
36
|
});
|
|
34
37
|
}
|
|
35
|
-
async fetchInstancesTotalCount(
|
|
36
|
-
const definitionIds =
|
|
38
|
+
async fetchInstancesTotalCount(workflowIds, filter) {
|
|
39
|
+
const definitionIds = workflowIds ? workflowIds : this.workflowCacheService.definitionIds;
|
|
37
40
|
return await this.dataIndexService.fetchInstancesTotalCount(
|
|
38
41
|
definitionIds,
|
|
39
42
|
filter
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OrchestratorService.cjs.js","sources":["../../src/service/OrchestratorService.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\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 */\nimport {\n Filter,\n ProcessInstance,\n ProcessInstanceVariables,\n WorkflowDefinition,\n WorkflowExecutionResponse,\n WorkflowInfo,\n WorkflowOverview,\n} from '@red-hat-developer-hub/backstage-plugin-orchestrator-common';\n\nimport { Pagination } from '../types/pagination';\nimport { DataIndexService } from './DataIndexService';\nimport { SonataFlowService } from './SonataFlowService';\nimport { CacheHandler, WorkflowCacheService } from './WorkflowCacheService';\n\nexport class OrchestratorService {\n constructor(\n private readonly sonataFlowService: SonataFlowService,\n private readonly dataIndexService: DataIndexService,\n private readonly workflowCacheService: WorkflowCacheService,\n ) {}\n\n // Data Index Service Wrapper\n\n public async abortWorkflowInstance(args: {\n instanceId: string;\n cacheHandler?: CacheHandler;\n }): Promise<void> {\n const { instanceId, cacheHandler } = args;\n const definitionId =\n await this.dataIndexService.fetchDefinitionIdByInstanceId(instanceId);\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.dataIndexService.abortWorkflowInstance(instanceId)\n : undefined;\n }\n\n public async fetchWorkflowInfo(args: {\n definitionId: string;\n cacheHandler?: CacheHandler;\n }): Promise<WorkflowInfo | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.dataIndexService.fetchWorkflowInfo(definitionId)\n : undefined;\n }\n\n public async fetchInstances(args: {\n pagination?: Pagination;\n filter?: Filter;\n workflowId?: string;\n }): Promise<ProcessInstance[]> {\n const definitionIds = args.workflowId\n ? [args.workflowId]\n : this.workflowCacheService.definitionIds;\n return await this.dataIndexService.fetchInstances({\n definitionIds: definitionIds,\n pagination: args.pagination,\n filter: args.filter,\n });\n }\n\n public async fetchInstancesTotalCount(\n workflowId?: string,\n filter?: Filter,\n ): Promise<number> {\n const definitionIds = workflowId\n ? [workflowId]\n : this.workflowCacheService.definitionIds;\n return await this.dataIndexService.fetchInstancesTotalCount(\n definitionIds,\n filter,\n );\n }\n\n public async fetchWorkflowSource(args: {\n definitionId: string;\n cacheHandler?: CacheHandler;\n }): Promise<string | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.dataIndexService.fetchWorkflowSource(definitionId)\n : undefined;\n }\n\n public async fetchInstanceVariables(args: {\n instanceId: string;\n cacheHandler?: CacheHandler;\n }): Promise<object | undefined> {\n const { instanceId, cacheHandler } = args;\n const definitionId =\n await this.dataIndexService.fetchDefinitionIdByInstanceId(instanceId);\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.dataIndexService.fetchInstanceVariables(instanceId)\n : undefined;\n }\n\n public async fetchInstance(args: {\n instanceId: string;\n cacheHandler?: CacheHandler;\n }): Promise<ProcessInstance | undefined> {\n const { instanceId, cacheHandler } = args;\n const instance = await this.dataIndexService.fetchInstance(instanceId);\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n instance?.processId,\n cacheHandler,\n );\n return isWorkflowAvailable ? instance : undefined;\n }\n\n // SonataFlow Service Wrapper\n\n public async fetchWorkflowInfoOnService(args: {\n definitionId: string;\n serviceUrl: string;\n cacheHandler?: CacheHandler;\n }): Promise<WorkflowInfo | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.sonataFlowService.fetchWorkflowInfoOnService(args)\n : undefined;\n }\n\n public async fetchWorkflowDefinition(args: {\n definitionId: string;\n cacheHandler?: CacheHandler;\n }): Promise<WorkflowDefinition | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.sonataFlowService.fetchWorkflowDefinition(definitionId)\n : undefined;\n }\n\n public async fetchWorkflowOverviews(args: {\n pagination?: Pagination;\n filter?: Filter;\n }): Promise<WorkflowOverview[] | undefined> {\n return await this.sonataFlowService.fetchWorkflowOverviews({\n definitionIds: this.workflowCacheService.definitionIds,\n pagination: args.pagination,\n filter: args.filter,\n });\n }\n\n public async executeWorkflow(args: {\n definitionId: string;\n serviceUrl: string;\n inputData?: ProcessInstanceVariables;\n businessKey?: string;\n cacheHandler?: CacheHandler;\n }): Promise<WorkflowExecutionResponse | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.sonataFlowService.executeWorkflow(args)\n : undefined;\n }\n\n public async retriggerWorkflow(args: {\n definitionId: string;\n instanceId: string;\n serviceUrl: string;\n cacheHandler?: CacheHandler;\n }): Promise<boolean | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.sonataFlowService.retriggerInstance(args)\n : undefined;\n }\n\n public async fetchWorkflowOverview(args: {\n definitionId: string;\n cacheHandler?: CacheHandler;\n }): Promise<WorkflowOverview | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.sonataFlowService.fetchWorkflowOverview(definitionId)\n : undefined;\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"OrchestratorService.cjs.js","sources":["../../src/service/OrchestratorService.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\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 */\nimport {\n Filter,\n ProcessInstance,\n ProcessInstanceVariables,\n WorkflowDefinition,\n WorkflowExecutionResponse,\n WorkflowInfo,\n WorkflowOverview,\n} from '@red-hat-developer-hub/backstage-plugin-orchestrator-common';\n\nimport { Pagination } from '../types/pagination';\nimport { DataIndexService } from './DataIndexService';\nimport { SonataFlowService } from './SonataFlowService';\nimport { CacheHandler, WorkflowCacheService } from './WorkflowCacheService';\n\nexport class OrchestratorService {\n constructor(\n private readonly sonataFlowService: SonataFlowService,\n private readonly dataIndexService: DataIndexService,\n private readonly workflowCacheService: WorkflowCacheService,\n ) {}\n\n // Data Index Service Wrapper\n public getWorkflowIds(): string[] {\n return this.workflowCacheService.definitionIds;\n }\n\n public async abortWorkflowInstance(args: {\n instanceId: string;\n cacheHandler?: CacheHandler;\n }): Promise<void> {\n const { instanceId, cacheHandler } = args;\n const definitionId =\n await this.dataIndexService.fetchDefinitionIdByInstanceId(instanceId);\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.dataIndexService.abortWorkflowInstance(instanceId)\n : undefined;\n }\n\n public async fetchWorkflowInfo(args: {\n definitionId: string;\n cacheHandler?: CacheHandler;\n }): Promise<WorkflowInfo | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.dataIndexService.fetchWorkflowInfo(definitionId)\n : undefined;\n }\n\n public async fetchInstances(args: {\n pagination?: Pagination;\n filter?: Filter;\n workflowIds?: string[];\n }): Promise<ProcessInstance[]> {\n const definitionIds = args.workflowIds\n ? args.workflowIds\n : this.workflowCacheService.definitionIds;\n return await this.dataIndexService.fetchInstances({\n definitionIds: definitionIds,\n pagination: args.pagination,\n filter: args.filter,\n });\n }\n\n public async fetchInstancesTotalCount(\n workflowIds?: string[],\n filter?: Filter,\n ): Promise<number> {\n const definitionIds = workflowIds\n ? workflowIds\n : this.workflowCacheService.definitionIds;\n return await this.dataIndexService.fetchInstancesTotalCount(\n definitionIds,\n filter,\n );\n }\n\n public async fetchWorkflowSource(args: {\n definitionId: string;\n cacheHandler?: CacheHandler;\n }): Promise<string | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.dataIndexService.fetchWorkflowSource(definitionId)\n : undefined;\n }\n\n public async fetchInstanceVariables(args: {\n instanceId: string;\n cacheHandler?: CacheHandler;\n }): Promise<object | undefined> {\n const { instanceId, cacheHandler } = args;\n const definitionId =\n await this.dataIndexService.fetchDefinitionIdByInstanceId(instanceId);\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.dataIndexService.fetchInstanceVariables(instanceId)\n : undefined;\n }\n\n public async fetchInstance(args: {\n instanceId: string;\n cacheHandler?: CacheHandler;\n }): Promise<ProcessInstance | undefined> {\n const { instanceId, cacheHandler } = args;\n const instance = await this.dataIndexService.fetchInstance(instanceId);\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n instance?.processId,\n cacheHandler,\n );\n return isWorkflowAvailable ? instance : undefined;\n }\n\n // SonataFlow Service Wrapper\n\n public async fetchWorkflowInfoOnService(args: {\n definitionId: string;\n serviceUrl: string;\n cacheHandler?: CacheHandler;\n }): Promise<WorkflowInfo | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.sonataFlowService.fetchWorkflowInfoOnService(args)\n : undefined;\n }\n\n public async fetchWorkflowDefinition(args: {\n definitionId: string;\n cacheHandler?: CacheHandler;\n }): Promise<WorkflowDefinition | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.sonataFlowService.fetchWorkflowDefinition(definitionId)\n : undefined;\n }\n\n public async fetchWorkflowOverviews(args: {\n pagination?: Pagination;\n filter?: Filter;\n }): Promise<WorkflowOverview[] | undefined> {\n return await this.sonataFlowService.fetchWorkflowOverviews({\n definitionIds: this.workflowCacheService.definitionIds,\n pagination: args.pagination,\n filter: args.filter,\n });\n }\n\n public async executeWorkflow(args: {\n definitionId: string;\n serviceUrl: string;\n inputData?: ProcessInstanceVariables;\n businessKey?: string;\n cacheHandler?: CacheHandler;\n }): Promise<WorkflowExecutionResponse | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.sonataFlowService.executeWorkflow(args)\n : undefined;\n }\n\n public async retriggerWorkflow(args: {\n definitionId: string;\n instanceId: string;\n serviceUrl: string;\n cacheHandler?: CacheHandler;\n }): Promise<boolean | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.sonataFlowService.retriggerInstance(args)\n : undefined;\n }\n\n public async fetchWorkflowOverview(args: {\n definitionId: string;\n cacheHandler?: CacheHandler;\n }): Promise<WorkflowOverview | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.sonataFlowService.fetchWorkflowOverview(definitionId)\n : undefined;\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -129,16 +129,6 @@ class SonataFlowService {
|
|
|
129
129
|
const response = await fetch(urlToFetch);
|
|
130
130
|
return response.ok;
|
|
131
131
|
}
|
|
132
|
-
async updateInstanceInputData(args) {
|
|
133
|
-
const { definitionId, serviceUrl, instanceId, inputData } = args;
|
|
134
|
-
const urlToFetch = `${serviceUrl}/${definitionId}/${instanceId}`;
|
|
135
|
-
const response = await fetch(urlToFetch, {
|
|
136
|
-
method: "PATCH",
|
|
137
|
-
body: JSON.stringify(inputData),
|
|
138
|
-
headers: { "content-type": "application/json" }
|
|
139
|
-
});
|
|
140
|
-
return response.ok;
|
|
141
|
-
}
|
|
142
132
|
async createPrefixFetchErrorMessage(urlToFetch, response, httpMethod = "GET") {
|
|
143
133
|
const res = await response.json();
|
|
144
134
|
const errorInfo = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SonataFlowService.cjs.js","sources":["../../src/service/SonataFlowService.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\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 */\nimport { LoggerService } from '@backstage/backend-plugin-api';\n\nimport {\n extractWorkflowFormat,\n Filter,\n fromWorkflowSource,\n getWorkflowCategory,\n ProcessInstanceStateValues,\n ProcessInstanceVariables,\n WorkflowDefinition,\n WorkflowExecutionResponse,\n WorkflowInfo,\n WorkflowOverview,\n} from '@red-hat-developer-hub/backstage-plugin-orchestrator-common';\n\nimport { Pagination } from '../types/pagination';\nimport { DataIndexService } from './DataIndexService';\n\nexport class SonataFlowService {\n constructor(\n private readonly dataIndexService: DataIndexService,\n private readonly logger: LoggerService,\n ) {}\n\n public async fetchWorkflowInfoOnService(args: {\n definitionId: string;\n serviceUrl: string;\n }): Promise<WorkflowInfo | undefined> {\n const urlToFetch = `${args.serviceUrl}/management/processes/${args.definitionId}`;\n const response = await fetch(urlToFetch);\n\n if (response.ok) {\n const json = await response.json();\n this.logger.debug(`Fetch workflow info result: ${JSON.stringify(json)}`);\n return json;\n }\n throw new Error(\n await this.createPrefixFetchErrorMessage(urlToFetch, response),\n );\n }\n\n public async fetchWorkflowDefinition(\n definitionId: string,\n ): Promise<WorkflowDefinition | undefined> {\n const source =\n await this.dataIndexService.fetchWorkflowSource(definitionId);\n if (source) {\n return fromWorkflowSource(source);\n }\n return undefined;\n }\n\n public async fetchWorkflowOverviews(args: {\n definitionIds?: string[];\n pagination?: Pagination;\n filter?: Filter;\n }): Promise<WorkflowOverview[] | undefined> {\n const { definitionIds, pagination, filter } = args;\n const workflowInfos = await this.dataIndexService.fetchWorkflowInfos({\n definitionIds,\n pagination,\n filter,\n });\n if (!workflowInfos?.length) {\n return [];\n }\n const items = await Promise.all(\n workflowInfos\n .filter(info => info.source)\n .map(info => this.fetchWorkflowOverviewBySource(info.source!)),\n );\n return items.filter((item): item is WorkflowOverview => !!item);\n }\n\n public async executeWorkflow(args: {\n definitionId: string;\n serviceUrl: string;\n inputData?: ProcessInstanceVariables;\n businessKey?: string;\n }): Promise<WorkflowExecutionResponse | undefined> {\n const urlToFetch = args.businessKey\n ? `${args.serviceUrl}/${args.definitionId}?businessKey=${args.businessKey}`\n : `${args.serviceUrl}/${args.definitionId}`;\n\n const response = await fetch(urlToFetch, {\n method: 'POST',\n body: JSON.stringify(args.inputData || {}),\n headers: { 'content-type': 'application/json' },\n });\n\n const json = await response.json();\n if (json.id) {\n this.logger.debug(\n `Execute workflow successful. Response: ${JSON.stringify(json)}`,\n );\n return json;\n } else if (!response.ok) {\n const errorMessage = await this.createPrefixFetchErrorMessage(\n urlToFetch,\n response,\n 'POST',\n );\n this.logger.error(\n `Execute workflow failed. Response: ${JSON.stringify(json)}`,\n );\n throw new Error(errorMessage);\n } else {\n this.logger.error(\n `Execute workflow did not return a workflow instance ID. Response: ${JSON.stringify(\n json,\n )}`,\n );\n throw new Error('Execute workflow did not return a workflow instance ID');\n }\n }\n\n public async retriggerInstance(args: {\n definitionId: string;\n instanceId: string;\n serviceUrl: string;\n }): Promise<boolean> {\n const urlToFetch = `${args.serviceUrl}/management/processes/${args.definitionId}/instances/${args.instanceId}/retrigger`;\n\n const response = await fetch(urlToFetch, {\n method: 'POST',\n });\n\n if (!response.ok) {\n throw new Error(\n `${await this.createPrefixFetchErrorMessage(\n urlToFetch,\n response,\n 'POST',\n )}`,\n );\n }\n\n return true;\n }\n\n public async fetchWorkflowOverview(\n definitionId: string,\n ): Promise<WorkflowOverview | undefined> {\n const source =\n await this.dataIndexService.fetchWorkflowSource(definitionId);\n if (!source) {\n this.logger.debug(`Workflow source not found: ${definitionId}`);\n return undefined;\n }\n return await this.fetchWorkflowOverviewBySource(source);\n }\n\n private async fetchWorkflowOverviewBySource(\n source: string,\n ): Promise<WorkflowOverview | undefined> {\n let lastTriggered: Date = new Date(0);\n let lastRunStatus: ProcessInstanceStateValues | undefined;\n let lastRunId: string | undefined;\n const definition = fromWorkflowSource(source);\n\n const processInstances =\n await this.dataIndexService.fetchInstancesByDefinitionId({\n definitionId: definition.id,\n limit: 1,\n offset: 0,\n });\n\n const pInstance = processInstances[0];\n\n if (pInstance?.start) {\n lastRunId = pInstance.id;\n lastTriggered = new Date(pInstance.start);\n lastRunStatus = pInstance.state;\n }\n\n return {\n workflowId: definition.id,\n name: definition.name,\n format: extractWorkflowFormat(source),\n lastRunId,\n lastTriggeredMs: lastTriggered.getTime(),\n lastRunStatus,\n category: getWorkflowCategory(definition),\n description: definition.description,\n };\n }\n\n public async pingWorkflowService(args: {\n definitionId: string;\n serviceUrl: string;\n }): Promise<boolean> {\n const urlToFetch = `${args.serviceUrl}/management/processes/${args.definitionId}`;\n const response = await fetch(urlToFetch);\n return response.ok;\n }\n\n public async updateInstanceInputData(args: {\n definitionId: string;\n serviceUrl: string;\n instanceId: string;\n inputData: ProcessInstanceVariables;\n }): Promise<boolean> {\n const { definitionId, serviceUrl, instanceId, inputData } = args;\n const urlToFetch = `${serviceUrl}/${definitionId}/${instanceId}`;\n const response = await fetch(urlToFetch, {\n method: 'PATCH',\n body: JSON.stringify(inputData),\n headers: { 'content-type': 'application/json' },\n });\n return response.ok;\n }\n\n public async createPrefixFetchErrorMessage(\n urlToFetch: string,\n response: Response,\n httpMethod = 'GET',\n ): Promise<string> {\n const res = await response.json();\n const errorInfo = [];\n let errorMsg = `Request ${httpMethod} ${urlToFetch} failed with: StatusCode: ${response.status}`;\n\n if (response.statusText) {\n errorInfo.push(`StatusText: ${response.statusText}`);\n }\n if (res?.details) {\n errorInfo.push(`Details: ${res?.details}`);\n }\n if (res?.stack) {\n errorInfo.push(`Stack: ${res?.stack}`);\n }\n if (errorInfo.length > 0) {\n errorMsg += ` ${errorInfo.join(', ')}`;\n } else {\n errorMsg += ' Unexpected error';\n }\n\n return errorMsg;\n }\n}\n"],"names":["fromWorkflowSource","extractWorkflowFormat","getWorkflowCategory"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SonataFlowService.cjs.js","sources":["../../src/service/SonataFlowService.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\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 */\nimport { LoggerService } from '@backstage/backend-plugin-api';\n\nimport {\n extractWorkflowFormat,\n Filter,\n fromWorkflowSource,\n getWorkflowCategory,\n ProcessInstanceStateValues,\n ProcessInstanceVariables,\n WorkflowDefinition,\n WorkflowExecutionResponse,\n WorkflowInfo,\n WorkflowOverview,\n} from '@red-hat-developer-hub/backstage-plugin-orchestrator-common';\n\nimport { Pagination } from '../types/pagination';\nimport { DataIndexService } from './DataIndexService';\n\nexport class SonataFlowService {\n constructor(\n private readonly dataIndexService: DataIndexService,\n private readonly logger: LoggerService,\n ) {}\n\n public async fetchWorkflowInfoOnService(args: {\n definitionId: string;\n serviceUrl: string;\n }): Promise<WorkflowInfo | undefined> {\n const urlToFetch = `${args.serviceUrl}/management/processes/${args.definitionId}`;\n const response = await fetch(urlToFetch);\n\n if (response.ok) {\n const json = await response.json();\n this.logger.debug(`Fetch workflow info result: ${JSON.stringify(json)}`);\n return json;\n }\n throw new Error(\n await this.createPrefixFetchErrorMessage(urlToFetch, response),\n );\n }\n\n public async fetchWorkflowDefinition(\n definitionId: string,\n ): Promise<WorkflowDefinition | undefined> {\n const source =\n await this.dataIndexService.fetchWorkflowSource(definitionId);\n if (source) {\n return fromWorkflowSource(source);\n }\n return undefined;\n }\n\n public async fetchWorkflowOverviews(args: {\n definitionIds?: string[];\n pagination?: Pagination;\n filter?: Filter;\n }): Promise<WorkflowOverview[] | undefined> {\n const { definitionIds, pagination, filter } = args;\n const workflowInfos = await this.dataIndexService.fetchWorkflowInfos({\n definitionIds,\n pagination,\n filter,\n });\n if (!workflowInfos?.length) {\n return [];\n }\n const items = await Promise.all(\n workflowInfos\n .filter(info => info.source)\n .map(info => this.fetchWorkflowOverviewBySource(info.source!)),\n );\n return items.filter((item): item is WorkflowOverview => !!item);\n }\n\n public async executeWorkflow(args: {\n definitionId: string;\n serviceUrl: string;\n inputData?: ProcessInstanceVariables;\n businessKey?: string;\n }): Promise<WorkflowExecutionResponse | undefined> {\n const urlToFetch = args.businessKey\n ? `${args.serviceUrl}/${args.definitionId}?businessKey=${args.businessKey}`\n : `${args.serviceUrl}/${args.definitionId}`;\n\n const response = await fetch(urlToFetch, {\n method: 'POST',\n body: JSON.stringify(args.inputData || {}),\n headers: { 'content-type': 'application/json' },\n });\n\n const json = await response.json();\n if (json.id) {\n this.logger.debug(\n `Execute workflow successful. Response: ${JSON.stringify(json)}`,\n );\n return json;\n } else if (!response.ok) {\n const errorMessage = await this.createPrefixFetchErrorMessage(\n urlToFetch,\n response,\n 'POST',\n );\n this.logger.error(\n `Execute workflow failed. Response: ${JSON.stringify(json)}`,\n );\n throw new Error(errorMessage);\n } else {\n this.logger.error(\n `Execute workflow did not return a workflow instance ID. Response: ${JSON.stringify(\n json,\n )}`,\n );\n throw new Error('Execute workflow did not return a workflow instance ID');\n }\n }\n\n public async retriggerInstance(args: {\n definitionId: string;\n instanceId: string;\n serviceUrl: string;\n }): Promise<boolean> {\n const urlToFetch = `${args.serviceUrl}/management/processes/${args.definitionId}/instances/${args.instanceId}/retrigger`;\n\n const response = await fetch(urlToFetch, {\n method: 'POST',\n });\n\n if (!response.ok) {\n throw new Error(\n `${await this.createPrefixFetchErrorMessage(\n urlToFetch,\n response,\n 'POST',\n )}`,\n );\n }\n\n return true;\n }\n\n public async fetchWorkflowOverview(\n definitionId: string,\n ): Promise<WorkflowOverview | undefined> {\n const source =\n await this.dataIndexService.fetchWorkflowSource(definitionId);\n if (!source) {\n this.logger.debug(`Workflow source not found: ${definitionId}`);\n return undefined;\n }\n return await this.fetchWorkflowOverviewBySource(source);\n }\n\n private async fetchWorkflowOverviewBySource(\n source: string,\n ): Promise<WorkflowOverview | undefined> {\n let lastTriggered: Date = new Date(0);\n let lastRunStatus: ProcessInstanceStateValues | undefined;\n let lastRunId: string | undefined;\n const definition = fromWorkflowSource(source);\n\n const processInstances =\n await this.dataIndexService.fetchInstancesByDefinitionId({\n definitionId: definition.id,\n limit: 1,\n offset: 0,\n });\n\n const pInstance = processInstances[0];\n\n if (pInstance?.start) {\n lastRunId = pInstance.id;\n lastTriggered = new Date(pInstance.start);\n lastRunStatus = pInstance.state;\n }\n\n return {\n workflowId: definition.id,\n name: definition.name,\n format: extractWorkflowFormat(source),\n lastRunId,\n lastTriggeredMs: lastTriggered.getTime(),\n lastRunStatus,\n category: getWorkflowCategory(definition),\n description: definition.description,\n };\n }\n\n public async pingWorkflowService(args: {\n definitionId: string;\n serviceUrl: string;\n }): Promise<boolean> {\n const urlToFetch = `${args.serviceUrl}/management/processes/${args.definitionId}`;\n const response = await fetch(urlToFetch);\n return response.ok;\n }\n\n public async createPrefixFetchErrorMessage(\n urlToFetch: string,\n response: Response,\n httpMethod = 'GET',\n ): Promise<string> {\n const res = await response.json();\n const errorInfo = [];\n let errorMsg = `Request ${httpMethod} ${urlToFetch} failed with: StatusCode: ${response.status}`;\n\n if (response.statusText) {\n errorInfo.push(`StatusText: ${response.statusText}`);\n }\n if (res?.details) {\n errorInfo.push(`Details: ${res?.details}`);\n }\n if (res?.stack) {\n errorInfo.push(`Stack: ${res?.stack}`);\n }\n if (errorInfo.length > 0) {\n errorMsg += ` ${errorInfo.join(', ')}`;\n } else {\n errorMsg += ' Unexpected error';\n }\n\n return errorMsg;\n }\n}\n"],"names":["fromWorkflowSource","extractWorkflowFormat","getWorkflowCategory"],"mappings":"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"}
|
|
@@ -28,6 +28,9 @@ class V2 {
|
|
|
28
28
|
};
|
|
29
29
|
return result;
|
|
30
30
|
}
|
|
31
|
+
getWorkflowIds() {
|
|
32
|
+
return this.orchestratorService.getWorkflowIds();
|
|
33
|
+
}
|
|
31
34
|
async getWorkflowOverviewById(workflowId) {
|
|
32
35
|
const overview = await this.orchestratorService.fetchWorkflowOverview({
|
|
33
36
|
definitionId: workflowId,
|
|
@@ -52,14 +55,14 @@ class V2 {
|
|
|
52
55
|
}
|
|
53
56
|
return source;
|
|
54
57
|
}
|
|
55
|
-
async getInstances(pagination, filter,
|
|
58
|
+
async getInstances(pagination, filter, workflowIds) {
|
|
56
59
|
const instances = await this.orchestratorService.fetchInstances({
|
|
57
60
|
pagination,
|
|
58
61
|
filter,
|
|
59
|
-
|
|
62
|
+
workflowIds
|
|
60
63
|
});
|
|
61
64
|
const totalCount = await this.orchestratorService.fetchInstancesTotalCount(
|
|
62
|
-
|
|
65
|
+
workflowIds,
|
|
63
66
|
filter
|
|
64
67
|
);
|
|
65
68
|
const result = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"v2.cjs.js","sources":["../../../src/service/api/v2.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\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 */\nimport { ParsedRequest } from 'openapi-backend';\n\nimport {\n AssessedProcessInstanceDTO,\n ExecuteWorkflowRequestDTO,\n ExecuteWorkflowResponseDTO,\n Filter,\n ProcessInstance,\n ProcessInstanceListResultDTO,\n ProcessInstanceState,\n ProcessInstanceVariables,\n WorkflowDTO,\n WorkflowInfo,\n WorkflowOverviewDTO,\n WorkflowOverviewListResultDTO,\n WorkflowRunStatusDTO,\n} from '@red-hat-developer-hub/backstage-plugin-orchestrator-common';\n\nimport { Pagination } from '../../types/pagination';\nimport { retryAsyncFunction } from '../Helper';\nimport { OrchestratorService } from '../OrchestratorService';\nimport {\n mapToExecuteWorkflowResponseDTO,\n mapToProcessInstanceDTO,\n mapToWorkflowDTO,\n mapToWorkflowOverviewDTO,\n mapToWorkflowRunStatusDTO,\n} from './mapping/V2Mappings';\n\nconst FETCH_INSTANCE_MAX_ATTEMPTS = 10;\nconst FETCH_INSTANCE_RETRY_DELAY_MS = 1000;\n\nexport class V2 {\n constructor(private readonly orchestratorService: OrchestratorService) {}\n\n public async getWorkflowsOverview(\n pagination: Pagination,\n filter?: Filter,\n ): Promise<WorkflowOverviewListResultDTO> {\n const overviews = await this.orchestratorService.fetchWorkflowOverviews({\n pagination,\n filter,\n });\n if (!overviews) {\n throw new Error(\"Couldn't fetch workflow overviews\");\n }\n const result: WorkflowOverviewListResultDTO = {\n overviews: overviews.map(item => mapToWorkflowOverviewDTO(item)),\n paginationInfo: {\n pageSize: pagination.limit,\n offset: pagination.offset,\n totalCount: overviews.length,\n },\n };\n return result;\n }\n\n public async getWorkflowOverviewById(\n workflowId: string,\n ): Promise<WorkflowOverviewDTO> {\n const overview = await this.orchestratorService.fetchWorkflowOverview({\n definitionId: workflowId,\n cacheHandler: 'throw',\n });\n\n if (!overview) {\n throw new Error(`Couldn't fetch workflow overview for ${workflowId}`);\n }\n return mapToWorkflowOverviewDTO(overview);\n }\n\n public async getWorkflowById(workflowId: string): Promise<WorkflowDTO> {\n const resultV1 = await this.getWorkflowSourceById(workflowId);\n return mapToWorkflowDTO(resultV1);\n }\n\n public async getWorkflowSourceById(workflowId: string): Promise<string> {\n const source = await this.orchestratorService.fetchWorkflowSource({\n definitionId: workflowId,\n cacheHandler: 'throw',\n });\n\n if (!source) {\n throw new Error(`Couldn't fetch workflow source for ${workflowId}`);\n }\n\n return source;\n }\n\n public async getInstances(\n pagination?: Pagination,\n filter?: Filter,\n workflowId?: string,\n ): Promise<ProcessInstanceListResultDTO> {\n const instances = await this.orchestratorService.fetchInstances({\n pagination,\n filter,\n workflowId,\n });\n const totalCount = await this.orchestratorService.fetchInstancesTotalCount(\n workflowId,\n filter,\n );\n\n const result: ProcessInstanceListResultDTO = {\n items: instances?.map(mapToProcessInstanceDTO),\n paginationInfo: {\n pageSize: pagination?.limit,\n offset: pagination?.offset,\n totalCount: totalCount,\n },\n };\n return result;\n }\n\n public async getInstanceById(\n instanceId: string,\n includeAssessment: boolean = false,\n ): Promise<AssessedProcessInstanceDTO> {\n const instance = await this.orchestratorService.fetchInstance({\n instanceId,\n cacheHandler: 'throw',\n });\n\n if (!instance) {\n throw new Error(`Couldn't fetch process instance ${instanceId}`);\n }\n\n let assessedByInstance: ProcessInstance | undefined;\n\n if (includeAssessment && instance.businessKey) {\n assessedByInstance = await this.orchestratorService.fetchInstance({\n instanceId: instance.businessKey,\n cacheHandler: 'throw',\n });\n }\n\n return {\n instance: mapToProcessInstanceDTO(instance),\n assessedBy: assessedByInstance\n ? mapToProcessInstanceDTO(assessedByInstance)\n : undefined,\n };\n }\n\n public async executeWorkflow(\n executeWorkflowRequestDTO: ExecuteWorkflowRequestDTO,\n workflowId: string,\n businessKey: string | undefined,\n ): Promise<ExecuteWorkflowResponseDTO> {\n const definition = await this.orchestratorService.fetchWorkflowInfo({\n definitionId: workflowId,\n cacheHandler: 'throw',\n });\n if (!definition) {\n throw new Error(`Couldn't fetch workflow definition for ${workflowId}`);\n }\n if (!definition.serviceUrl) {\n throw new Error(`ServiceURL is not defined for workflow ${workflowId}`);\n }\n const executionResponse = await this.orchestratorService.executeWorkflow({\n definitionId: workflowId,\n inputData:\n executeWorkflowRequestDTO.inputData as ProcessInstanceVariables,\n serviceUrl: definition.serviceUrl,\n businessKey,\n cacheHandler: 'throw',\n });\n\n if (!executionResponse) {\n throw new Error(`Couldn't execute workflow ${workflowId}`);\n }\n\n // Making sure the instance data is available before returning\n await retryAsyncFunction({\n asyncFn: () =>\n this.orchestratorService.fetchInstance({\n instanceId: executionResponse.id,\n cacheHandler: 'throw',\n }),\n maxAttempts: FETCH_INSTANCE_MAX_ATTEMPTS,\n delayMs: FETCH_INSTANCE_RETRY_DELAY_MS,\n });\n\n if (!executionResponse) {\n throw new Error('Error executing workflow with id ${workflowId}');\n }\n\n return mapToExecuteWorkflowResponseDTO(workflowId, executionResponse);\n }\n\n public async retriggerInstance(\n workflowId: string,\n instanceId: string,\n ): Promise<void> {\n const definition = await this.orchestratorService.fetchWorkflowInfo({\n definitionId: workflowId,\n cacheHandler: 'throw',\n });\n if (!definition) {\n throw new Error(`Couldn't fetch workflow definition for ${workflowId}`);\n }\n if (!definition.serviceUrl) {\n throw new Error(`ServiceURL is not defined for workflow ${workflowId}`);\n }\n const response = await this.orchestratorService.retriggerWorkflow({\n definitionId: workflowId,\n instanceId: instanceId,\n serviceUrl: definition.serviceUrl,\n cacheHandler: 'throw',\n });\n\n if (!response) {\n throw new Error(\n `Couldn't retrigger instance ${instanceId} of workflow ${workflowId}`,\n );\n }\n }\n\n public async abortWorkflow(instanceId: string): Promise<string> {\n await this.orchestratorService.abortWorkflowInstance({\n instanceId,\n cacheHandler: 'throw',\n });\n return `Workflow instance ${instanceId} successfully aborted`;\n }\n\n public async getWorkflowStatuses(): Promise<WorkflowRunStatusDTO[]> {\n return [\n ProcessInstanceState.Active,\n ProcessInstanceState.Error,\n ProcessInstanceState.Completed,\n ProcessInstanceState.Aborted,\n ProcessInstanceState.Suspended,\n ProcessInstanceState.Pending,\n ].map(status => mapToWorkflowRunStatusDTO(status));\n }\n\n public async getWorkflowInputSchemaById(\n workflowId: string,\n serviceUrl: string,\n ): Promise<WorkflowInfo | undefined> {\n return this.orchestratorService.fetchWorkflowInfoOnService({\n definitionId: workflowId,\n serviceUrl: serviceUrl,\n cacheHandler: 'throw',\n });\n }\n\n public extractQueryParam(\n req: ParsedRequest,\n key: string,\n ): string | undefined {\n return req.query[key] as string | undefined;\n }\n}\n"],"names":["mapToWorkflowOverviewDTO","mapToWorkflowDTO","mapToProcessInstanceDTO","retryAsyncFunction","mapToExecuteWorkflowResponseDTO","ProcessInstanceState","mapToWorkflowRunStatusDTO"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"v2.cjs.js","sources":["../../../src/service/api/v2.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\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 */\nimport { ParsedRequest } from 'openapi-backend';\n\nimport {\n AssessedProcessInstanceDTO,\n ExecuteWorkflowRequestDTO,\n ExecuteWorkflowResponseDTO,\n Filter,\n ProcessInstance,\n ProcessInstanceListResultDTO,\n ProcessInstanceState,\n ProcessInstanceVariables,\n WorkflowDTO,\n WorkflowInfo,\n WorkflowOverviewDTO,\n WorkflowOverviewListResultDTO,\n WorkflowRunStatusDTO,\n} from '@red-hat-developer-hub/backstage-plugin-orchestrator-common';\n\nimport { Pagination } from '../../types/pagination';\nimport { retryAsyncFunction } from '../Helper';\nimport { OrchestratorService } from '../OrchestratorService';\nimport {\n mapToExecuteWorkflowResponseDTO,\n mapToProcessInstanceDTO,\n mapToWorkflowDTO,\n mapToWorkflowOverviewDTO,\n mapToWorkflowRunStatusDTO,\n} from './mapping/V2Mappings';\n\nconst FETCH_INSTANCE_MAX_ATTEMPTS = 10;\nconst FETCH_INSTANCE_RETRY_DELAY_MS = 1000;\n\nexport class V2 {\n constructor(private readonly orchestratorService: OrchestratorService) {}\n\n public async getWorkflowsOverview(\n pagination: Pagination,\n filter?: Filter,\n ): Promise<WorkflowOverviewListResultDTO> {\n const overviews = await this.orchestratorService.fetchWorkflowOverviews({\n pagination,\n filter,\n });\n if (!overviews) {\n throw new Error(\"Couldn't fetch workflow overviews\");\n }\n const result: WorkflowOverviewListResultDTO = {\n overviews: overviews.map(item => mapToWorkflowOverviewDTO(item)),\n paginationInfo: {\n pageSize: pagination.limit,\n offset: pagination.offset,\n totalCount: overviews.length,\n },\n };\n return result;\n }\n\n public getWorkflowIds(): string[] {\n return this.orchestratorService.getWorkflowIds();\n }\n\n public async getWorkflowOverviewById(\n workflowId: string,\n ): Promise<WorkflowOverviewDTO> {\n const overview = await this.orchestratorService.fetchWorkflowOverview({\n definitionId: workflowId,\n cacheHandler: 'throw',\n });\n\n if (!overview) {\n throw new Error(`Couldn't fetch workflow overview for ${workflowId}`);\n }\n return mapToWorkflowOverviewDTO(overview);\n }\n\n public async getWorkflowById(workflowId: string): Promise<WorkflowDTO> {\n const resultV1 = await this.getWorkflowSourceById(workflowId);\n return mapToWorkflowDTO(resultV1);\n }\n\n public async getWorkflowSourceById(workflowId: string): Promise<string> {\n const source = await this.orchestratorService.fetchWorkflowSource({\n definitionId: workflowId,\n cacheHandler: 'throw',\n });\n\n if (!source) {\n throw new Error(`Couldn't fetch workflow source for ${workflowId}`);\n }\n\n return source;\n }\n\n public async getInstances(\n pagination?: Pagination,\n filter?: Filter,\n workflowIds?: string[],\n ): Promise<ProcessInstanceListResultDTO> {\n const instances = await this.orchestratorService.fetchInstances({\n pagination,\n filter,\n workflowIds,\n });\n const totalCount = await this.orchestratorService.fetchInstancesTotalCount(\n workflowIds,\n filter,\n );\n\n const result: ProcessInstanceListResultDTO = {\n items: instances?.map(mapToProcessInstanceDTO),\n paginationInfo: {\n pageSize: pagination?.limit,\n offset: pagination?.offset,\n totalCount: totalCount,\n },\n };\n return result;\n }\n\n public async getInstanceById(\n instanceId: string,\n includeAssessment: boolean = false,\n ): Promise<AssessedProcessInstanceDTO> {\n const instance = await this.orchestratorService.fetchInstance({\n instanceId,\n cacheHandler: 'throw',\n });\n\n if (!instance) {\n throw new Error(`Couldn't fetch process instance ${instanceId}`);\n }\n\n let assessedByInstance: ProcessInstance | undefined;\n\n if (includeAssessment && instance.businessKey) {\n assessedByInstance = await this.orchestratorService.fetchInstance({\n instanceId: instance.businessKey,\n cacheHandler: 'throw',\n });\n }\n\n return {\n instance: mapToProcessInstanceDTO(instance),\n assessedBy: assessedByInstance\n ? mapToProcessInstanceDTO(assessedByInstance)\n : undefined,\n };\n }\n\n public async executeWorkflow(\n executeWorkflowRequestDTO: ExecuteWorkflowRequestDTO,\n workflowId: string,\n businessKey: string | undefined,\n ): Promise<ExecuteWorkflowResponseDTO> {\n const definition = await this.orchestratorService.fetchWorkflowInfo({\n definitionId: workflowId,\n cacheHandler: 'throw',\n });\n if (!definition) {\n throw new Error(`Couldn't fetch workflow definition for ${workflowId}`);\n }\n if (!definition.serviceUrl) {\n throw new Error(`ServiceURL is not defined for workflow ${workflowId}`);\n }\n const executionResponse = await this.orchestratorService.executeWorkflow({\n definitionId: workflowId,\n inputData:\n executeWorkflowRequestDTO.inputData as ProcessInstanceVariables,\n serviceUrl: definition.serviceUrl,\n businessKey,\n cacheHandler: 'throw',\n });\n\n if (!executionResponse) {\n throw new Error(`Couldn't execute workflow ${workflowId}`);\n }\n\n // Making sure the instance data is available before returning\n await retryAsyncFunction({\n asyncFn: () =>\n this.orchestratorService.fetchInstance({\n instanceId: executionResponse.id,\n cacheHandler: 'throw',\n }),\n maxAttempts: FETCH_INSTANCE_MAX_ATTEMPTS,\n delayMs: FETCH_INSTANCE_RETRY_DELAY_MS,\n });\n\n if (!executionResponse) {\n throw new Error('Error executing workflow with id ${workflowId}');\n }\n\n return mapToExecuteWorkflowResponseDTO(workflowId, executionResponse);\n }\n\n public async retriggerInstance(\n workflowId: string,\n instanceId: string,\n ): Promise<void> {\n const definition = await this.orchestratorService.fetchWorkflowInfo({\n definitionId: workflowId,\n cacheHandler: 'throw',\n });\n if (!definition) {\n throw new Error(`Couldn't fetch workflow definition for ${workflowId}`);\n }\n if (!definition.serviceUrl) {\n throw new Error(`ServiceURL is not defined for workflow ${workflowId}`);\n }\n const response = await this.orchestratorService.retriggerWorkflow({\n definitionId: workflowId,\n instanceId: instanceId,\n serviceUrl: definition.serviceUrl,\n cacheHandler: 'throw',\n });\n\n if (!response) {\n throw new Error(\n `Couldn't retrigger instance ${instanceId} of workflow ${workflowId}`,\n );\n }\n }\n\n public async abortWorkflow(instanceId: string): Promise<string> {\n await this.orchestratorService.abortWorkflowInstance({\n instanceId,\n cacheHandler: 'throw',\n });\n return `Workflow instance ${instanceId} successfully aborted`;\n }\n\n public async getWorkflowStatuses(): Promise<WorkflowRunStatusDTO[]> {\n return [\n ProcessInstanceState.Active,\n ProcessInstanceState.Error,\n ProcessInstanceState.Completed,\n ProcessInstanceState.Aborted,\n ProcessInstanceState.Suspended,\n ProcessInstanceState.Pending,\n ].map(status => mapToWorkflowRunStatusDTO(status));\n }\n\n public async getWorkflowInputSchemaById(\n workflowId: string,\n serviceUrl: string,\n ): Promise<WorkflowInfo | undefined> {\n return this.orchestratorService.fetchWorkflowInfoOnService({\n definitionId: workflowId,\n serviceUrl: serviceUrl,\n cacheHandler: 'throw',\n });\n }\n\n public extractQueryParam(\n req: ParsedRequest,\n key: string,\n ): string | undefined {\n return req.query[key] as string | undefined;\n }\n}\n"],"names":["mapToWorkflowOverviewDTO","mapToWorkflowDTO","mapToProcessInstanceDTO","retryAsyncFunction","mapToExecuteWorkflowResponseDTO","ProcessInstanceState","mapToWorkflowRunStatusDTO"],"mappings":"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"}
|
|
@@ -25,11 +25,61 @@ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'defau
|
|
|
25
25
|
|
|
26
26
|
var express__default = /*#__PURE__*/_interopDefaultCompat(express);
|
|
27
27
|
|
|
28
|
-
const authorize = async (request,
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
28
|
+
const authorize = async (request, anyOfPermissions, permissionsSvc, httpAuth) => {
|
|
29
|
+
const credentials = await httpAuth.credentials(request);
|
|
30
|
+
const decisionResponses = await Promise.all(
|
|
31
|
+
anyOfPermissions.map(
|
|
32
|
+
(permission) => permissionsSvc.authorize([{ permission }], {
|
|
33
|
+
credentials
|
|
34
|
+
})
|
|
35
|
+
)
|
|
36
|
+
);
|
|
37
|
+
const decisions = decisionResponses.map(
|
|
38
|
+
(d) => d[0]
|
|
39
|
+
);
|
|
40
|
+
const allow = decisions.find((d) => d.result === pluginPermissionCommon.AuthorizeResult.ALLOW);
|
|
41
|
+
return allow || {
|
|
42
|
+
result: pluginPermissionCommon.AuthorizeResult.DENY
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
const filterAuthorizedWorkflowIds = async (request, permissionsSvc, httpAuth, workflowIds) => {
|
|
46
|
+
const credentials = await httpAuth.credentials(request);
|
|
47
|
+
const genericWorkflowPermissionDecision = await permissionsSvc.authorize(
|
|
48
|
+
[{ permission: backstagePluginOrchestratorCommon.orchestratorWorkflowPermission }],
|
|
49
|
+
{
|
|
50
|
+
credentials
|
|
51
|
+
}
|
|
52
|
+
);
|
|
53
|
+
if (genericWorkflowPermissionDecision[0].result === pluginPermissionCommon.AuthorizeResult.ALLOW) {
|
|
54
|
+
return workflowIds;
|
|
55
|
+
}
|
|
56
|
+
const specificWorkflowRequests = workflowIds.map((workflowId) => ({
|
|
57
|
+
permission: backstagePluginOrchestratorCommon.orchestratorWorkflowSpecificPermission(workflowId)
|
|
58
|
+
}));
|
|
59
|
+
const decisions = await permissionsSvc.authorize(specificWorkflowRequests, {
|
|
60
|
+
credentials
|
|
61
|
+
});
|
|
62
|
+
return workflowIds.filter(
|
|
63
|
+
(_, idx) => decisions[idx].result === pluginPermissionCommon.AuthorizeResult.ALLOW
|
|
64
|
+
);
|
|
65
|
+
};
|
|
66
|
+
const filterAuthorizedWorkflows = async (request, permissionsSvc, httpAuth, workflows) => {
|
|
67
|
+
if (!workflows.overviews) {
|
|
68
|
+
return workflows;
|
|
69
|
+
}
|
|
70
|
+
const authorizedWorkflowIds = await filterAuthorizedWorkflowIds(
|
|
71
|
+
request,
|
|
72
|
+
permissionsSvc,
|
|
73
|
+
httpAuth,
|
|
74
|
+
workflows.overviews.map((w) => w.workflowId)
|
|
75
|
+
);
|
|
76
|
+
const filtered = {
|
|
77
|
+
...workflows,
|
|
78
|
+
overviews: workflows.overviews.filter(
|
|
79
|
+
(w) => authorizedWorkflowIds.includes(w.workflowId)
|
|
80
|
+
)
|
|
81
|
+
};
|
|
82
|
+
return filtered;
|
|
33
83
|
};
|
|
34
84
|
async function createBackendRouter(options) {
|
|
35
85
|
const {
|
|
@@ -80,12 +130,18 @@ async function createBackendRouter(options) {
|
|
|
80
130
|
if (!next) {
|
|
81
131
|
throw new Error("next is undefined");
|
|
82
132
|
}
|
|
83
|
-
return routerApi.openApiBackend.handleRequest(
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
133
|
+
return routerApi.openApiBackend.handleRequest(req, req, res, next).catch((error) => {
|
|
134
|
+
auditLogger.auditLog({
|
|
135
|
+
eventName: "genericErrorHandler",
|
|
136
|
+
stage: "completion",
|
|
137
|
+
status: "failed",
|
|
138
|
+
level: "error",
|
|
139
|
+
request: req,
|
|
140
|
+
message: `Exception thrown during processing request ${req.path} , ${error.message || error.name || error}`,
|
|
141
|
+
errors: [error]
|
|
142
|
+
});
|
|
143
|
+
next(error);
|
|
144
|
+
});
|
|
89
145
|
});
|
|
90
146
|
const middleware = rootHttpRouter.MiddlewareFactory.create({ logger, config });
|
|
91
147
|
router.use(middleware.error());
|
|
@@ -199,19 +255,22 @@ function setupInternalRoutes(services, routerApi, permissions, httpAuth, auditLo
|
|
|
199
255
|
request: req,
|
|
200
256
|
message: `Received request to '${endpoint}' endpoint`
|
|
201
257
|
});
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
258
|
+
try {
|
|
259
|
+
const result = await routerApi.v2.getWorkflowsOverview(
|
|
260
|
+
pagination.buildPagination(req),
|
|
261
|
+
getRequestFilters(req)
|
|
262
|
+
);
|
|
263
|
+
const workflows = await filterAuthorizedWorkflows(
|
|
264
|
+
req,
|
|
265
|
+
permissions,
|
|
266
|
+
httpAuth,
|
|
267
|
+
result
|
|
268
|
+
);
|
|
269
|
+
res.json(workflows);
|
|
270
|
+
} catch (error) {
|
|
212
271
|
auditLogRequestError(error, endpointName, endpoint, req);
|
|
213
272
|
next(error);
|
|
214
|
-
}
|
|
273
|
+
}
|
|
215
274
|
}
|
|
216
275
|
);
|
|
217
276
|
routerApi.openApiBackend.register(
|
|
@@ -230,7 +289,10 @@ function setupInternalRoutes(services, routerApi, permissions, httpAuth, auditLo
|
|
|
230
289
|
});
|
|
231
290
|
const decision = await authorize(
|
|
232
291
|
_req,
|
|
233
|
-
|
|
292
|
+
[
|
|
293
|
+
backstagePluginOrchestratorCommon.orchestratorWorkflowPermission,
|
|
294
|
+
backstagePluginOrchestratorCommon.orchestratorWorkflowSpecificPermission(workflowId)
|
|
295
|
+
],
|
|
234
296
|
permissions,
|
|
235
297
|
httpAuth
|
|
236
298
|
);
|
|
@@ -262,7 +324,10 @@ function setupInternalRoutes(services, routerApi, permissions, httpAuth, auditLo
|
|
|
262
324
|
});
|
|
263
325
|
const decision = await authorize(
|
|
264
326
|
req,
|
|
265
|
-
|
|
327
|
+
[
|
|
328
|
+
backstagePluginOrchestratorCommon.orchestratorWorkflowUsePermission,
|
|
329
|
+
backstagePluginOrchestratorCommon.orchestratorWorkflowUseSpecificPermission(workflowId)
|
|
330
|
+
],
|
|
266
331
|
permissions,
|
|
267
332
|
httpAuth
|
|
268
333
|
);
|
|
@@ -297,7 +362,10 @@ function setupInternalRoutes(services, routerApi, permissions, httpAuth, auditLo
|
|
|
297
362
|
});
|
|
298
363
|
const decision = await authorize(
|
|
299
364
|
req,
|
|
300
|
-
|
|
365
|
+
[
|
|
366
|
+
backstagePluginOrchestratorCommon.orchestratorWorkflowUsePermission,
|
|
367
|
+
backstagePluginOrchestratorCommon.orchestratorWorkflowUseSpecificPermission(workflowId)
|
|
368
|
+
],
|
|
301
369
|
permissions,
|
|
302
370
|
httpAuth
|
|
303
371
|
);
|
|
@@ -326,7 +394,10 @@ function setupInternalRoutes(services, routerApi, permissions, httpAuth, auditLo
|
|
|
326
394
|
});
|
|
327
395
|
const decision = await authorize(
|
|
328
396
|
_req,
|
|
329
|
-
|
|
397
|
+
[
|
|
398
|
+
backstagePluginOrchestratorCommon.orchestratorWorkflowPermission,
|
|
399
|
+
backstagePluginOrchestratorCommon.orchestratorWorkflowSpecificPermission(workflowId)
|
|
400
|
+
],
|
|
330
401
|
permissions,
|
|
331
402
|
httpAuth
|
|
332
403
|
);
|
|
@@ -352,15 +423,6 @@ function setupInternalRoutes(services, routerApi, permissions, httpAuth, auditLo
|
|
|
352
423
|
request: _req,
|
|
353
424
|
message: `Received request to '${endpoint}' endpoint`
|
|
354
425
|
});
|
|
355
|
-
const decision = await authorize(
|
|
356
|
-
_req,
|
|
357
|
-
backstagePluginOrchestratorCommon.orchestratorWorkflowInstanceReadPermission,
|
|
358
|
-
permissions,
|
|
359
|
-
httpAuth
|
|
360
|
-
);
|
|
361
|
-
if (decision.result === pluginPermissionCommon.AuthorizeResult.DENY) {
|
|
362
|
-
manageDenyAuthorization(endpointName, endpoint, _req);
|
|
363
|
-
}
|
|
364
426
|
return routerApi.v2.getWorkflowStatuses().then((result) => res.status(200).json(result)).catch((error) => {
|
|
365
427
|
auditLogRequestError(error, endpointName, endpoint, _req);
|
|
366
428
|
next(error);
|
|
@@ -385,7 +447,10 @@ function setupInternalRoutes(services, routerApi, permissions, httpAuth, auditLo
|
|
|
385
447
|
});
|
|
386
448
|
const decision = await authorize(
|
|
387
449
|
req,
|
|
388
|
-
|
|
450
|
+
[
|
|
451
|
+
backstagePluginOrchestratorCommon.orchestratorWorkflowPermission,
|
|
452
|
+
backstagePluginOrchestratorCommon.orchestratorWorkflowSpecificPermission(workflowId)
|
|
453
|
+
],
|
|
389
454
|
permissions,
|
|
390
455
|
httpAuth
|
|
391
456
|
);
|
|
@@ -474,14 +539,19 @@ function setupInternalRoutes(services, routerApi, permissions, httpAuth, auditLo
|
|
|
474
539
|
});
|
|
475
540
|
const decision = await authorize(
|
|
476
541
|
req,
|
|
477
|
-
|
|
542
|
+
[
|
|
543
|
+
backstagePluginOrchestratorCommon.orchestratorWorkflowPermission,
|
|
544
|
+
backstagePluginOrchestratorCommon.orchestratorWorkflowSpecificPermission(workflowId)
|
|
545
|
+
],
|
|
478
546
|
permissions,
|
|
479
547
|
httpAuth
|
|
480
548
|
);
|
|
481
549
|
if (decision.result === pluginPermissionCommon.AuthorizeResult.DENY) {
|
|
482
550
|
manageDenyAuthorization(endpointName, endpoint, req);
|
|
483
551
|
}
|
|
484
|
-
return routerApi.v2.getInstances(pagination.buildPagination(req), getRequestFilters(req),
|
|
552
|
+
return routerApi.v2.getInstances(pagination.buildPagination(req), getRequestFilters(req), [
|
|
553
|
+
workflowId
|
|
554
|
+
]).then((result) => res.json(result)).catch((error) => {
|
|
485
555
|
auditLogRequestError(error, endpointName, endpoint, req);
|
|
486
556
|
next(error);
|
|
487
557
|
});
|
|
@@ -500,19 +570,24 @@ function setupInternalRoutes(services, routerApi, permissions, httpAuth, auditLo
|
|
|
500
570
|
request: req,
|
|
501
571
|
message: `Received request to '${endpoint}' endpoint`
|
|
502
572
|
});
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
573
|
+
try {
|
|
574
|
+
const allWorkflowIds = routerApi.v2.getWorkflowIds();
|
|
575
|
+
const authorizedWorkflowIds = await filterAuthorizedWorkflowIds(
|
|
576
|
+
req,
|
|
577
|
+
permissions,
|
|
578
|
+
httpAuth,
|
|
579
|
+
allWorkflowIds
|
|
580
|
+
);
|
|
581
|
+
const result = await routerApi.v2.getInstances(
|
|
582
|
+
pagination.buildPagination(req),
|
|
583
|
+
getRequestFilters(req),
|
|
584
|
+
authorizedWorkflowIds
|
|
585
|
+
);
|
|
586
|
+
res.json(result);
|
|
587
|
+
} catch (error) {
|
|
513
588
|
auditLogRequestError(error, endpointName, endpoint, req);
|
|
514
589
|
next(error);
|
|
515
|
-
}
|
|
590
|
+
}
|
|
516
591
|
}
|
|
517
592
|
);
|
|
518
593
|
routerApi.openApiBackend.register(
|
|
@@ -529,23 +604,33 @@ function setupInternalRoutes(services, routerApi, permissions, httpAuth, auditLo
|
|
|
529
604
|
request: _req,
|
|
530
605
|
message: `Received request to '${endpoint}' endpoint`
|
|
531
606
|
});
|
|
532
|
-
const decision = await authorize(
|
|
533
|
-
_req,
|
|
534
|
-
backstagePluginOrchestratorCommon.orchestratorWorkflowInstanceReadPermission,
|
|
535
|
-
permissions,
|
|
536
|
-
httpAuth
|
|
537
|
-
);
|
|
538
|
-
if (decision.result === pluginPermissionCommon.AuthorizeResult.DENY) {
|
|
539
|
-
manageDenyAuthorization(endpointName, endpoint, _req);
|
|
540
|
-
}
|
|
541
607
|
const includeAssessment = routerApi.v2.extractQueryParam(
|
|
542
608
|
c.request,
|
|
543
609
|
backstagePluginOrchestratorCommon.QUERY_PARAM_INCLUDE_ASSESSMENT
|
|
544
610
|
);
|
|
545
|
-
|
|
611
|
+
try {
|
|
612
|
+
const assessedInstance = await routerApi.v2.getInstanceById(
|
|
613
|
+
instanceId,
|
|
614
|
+
!!includeAssessment
|
|
615
|
+
);
|
|
616
|
+
const workflowId = assessedInstance.instance.processId;
|
|
617
|
+
const decision = await authorize(
|
|
618
|
+
_req,
|
|
619
|
+
[
|
|
620
|
+
backstagePluginOrchestratorCommon.orchestratorWorkflowPermission,
|
|
621
|
+
backstagePluginOrchestratorCommon.orchestratorWorkflowSpecificPermission(workflowId)
|
|
622
|
+
],
|
|
623
|
+
permissions,
|
|
624
|
+
httpAuth
|
|
625
|
+
);
|
|
626
|
+
if (decision.result === pluginPermissionCommon.AuthorizeResult.DENY) {
|
|
627
|
+
manageDenyAuthorization(endpointName, endpoint, _req);
|
|
628
|
+
}
|
|
629
|
+
res.status(200).json(assessedInstance);
|
|
630
|
+
} catch (error) {
|
|
546
631
|
auditLogRequestError(error, endpointName, endpoint, _req);
|
|
547
632
|
next(error);
|
|
548
|
-
}
|
|
633
|
+
}
|
|
549
634
|
}
|
|
550
635
|
);
|
|
551
636
|
routerApi.openApiBackend.register(
|
|
@@ -562,19 +647,27 @@ function setupInternalRoutes(services, routerApi, permissions, httpAuth, auditLo
|
|
|
562
647
|
request: _req,
|
|
563
648
|
message: `Received request to '${endpoint}' endpoint`
|
|
564
649
|
});
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
650
|
+
try {
|
|
651
|
+
const assessedInstance = await routerApi.v2.getInstanceById(instanceId);
|
|
652
|
+
const workflowId = assessedInstance.instance.processId;
|
|
653
|
+
const decision = await authorize(
|
|
654
|
+
_req,
|
|
655
|
+
[
|
|
656
|
+
backstagePluginOrchestratorCommon.orchestratorWorkflowUsePermission,
|
|
657
|
+
backstagePluginOrchestratorCommon.orchestratorWorkflowUseSpecificPermission(workflowId)
|
|
658
|
+
],
|
|
659
|
+
permissions,
|
|
660
|
+
httpAuth
|
|
661
|
+
);
|
|
662
|
+
if (decision.result === pluginPermissionCommon.AuthorizeResult.DENY) {
|
|
663
|
+
manageDenyAuthorization(endpointName, endpoint, _req);
|
|
664
|
+
}
|
|
665
|
+
const result = await routerApi.v2.abortWorkflow(instanceId);
|
|
666
|
+
res.status(200).json(result);
|
|
667
|
+
} catch (error) {
|
|
575
668
|
auditLogRequestError(error, endpointName, endpoint, _req);
|
|
576
669
|
next(error);
|
|
577
|
-
}
|
|
670
|
+
}
|
|
578
671
|
}
|
|
579
672
|
);
|
|
580
673
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.cjs.js","sources":["../../src/service/router.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\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 */\nimport { MiddlewareFactory } from '@backstage/backend-defaults/rootHttpRouter';\nimport {\n HttpAuthService,\n LoggerService,\n PermissionsService,\n resolvePackagePath,\n SchedulerService,\n} from '@backstage/backend-plugin-api';\nimport type { Config } from '@backstage/config';\nimport type { DiscoveryApi } from '@backstage/core-plugin-api';\nimport {\n AuthorizeResult,\n BasicPermission,\n} from '@backstage/plugin-permission-common';\nimport { createPermissionIntegrationRouter } from '@backstage/plugin-permission-node';\nimport type { JsonObject, JsonValue } from '@backstage/types';\n\nimport { UnauthorizedError } from '@backstage-community/plugin-rbac-common';\nimport {\n AuditLogger,\n DefaultAuditLogger,\n} from '@janus-idp/backstage-plugin-audit-log-node';\nimport { fullFormats } from 'ajv-formats/dist/formats';\nimport express, { Router } from 'express';\nimport { Request as HttpRequest } from 'express-serve-static-core';\nimport { OpenAPIBackend, Request } from 'openapi-backend';\n\nimport {\n Filter,\n openApiDocument,\n orchestratorPermissions,\n orchestratorWorkflowExecutePermission,\n orchestratorWorkflowInstanceAbortPermission,\n orchestratorWorkflowInstanceReadPermission,\n orchestratorWorkflowInstancesReadPermission,\n orchestratorWorkflowReadPermission,\n QUERY_PARAM_BUSINESS_KEY,\n QUERY_PARAM_INCLUDE_ASSESSMENT,\n} from '@red-hat-developer-hub/backstage-plugin-orchestrator-common';\n\nimport * as pkg from '../../package.json';\nimport { RouterOptions } from '../routerWrapper';\nimport { buildPagination } from '../types/pagination';\nimport { V2 } from './api/v2';\nimport { INTERNAL_SERVER_ERROR_MESSAGE } from './constants';\nimport { DataIndexService } from './DataIndexService';\nimport { DataInputSchemaService } from './DataInputSchemaService';\nimport { OrchestratorService } from './OrchestratorService';\nimport { ScaffolderService } from './ScaffolderService';\nimport { SonataFlowService } from './SonataFlowService';\nimport { WorkflowCacheService } from './WorkflowCacheService';\n\ninterface PublicServices {\n dataInputSchemaService: DataInputSchemaService;\n orchestratorService: OrchestratorService;\n}\n\ninterface RouterApi {\n openApiBackend: OpenAPIBackend;\n v2: V2;\n}\n\nconst authorize = async (\n request: HttpRequest,\n permission: BasicPermission,\n permissionsSvc: PermissionsService,\n httpAuth: HttpAuthService,\n) => {\n const decision = (\n await permissionsSvc.authorize([{ permission: permission }], {\n credentials: await httpAuth.credentials(request),\n })\n )[0];\n\n return decision;\n};\n\nexport async function createBackendRouter(\n options: RouterOptions,\n): Promise<Router> {\n const {\n config,\n logger,\n discovery,\n catalogApi,\n urlReader,\n scheduler,\n permissions,\n auth,\n httpAuth,\n } = options;\n const publicServices = initPublicServices(logger, config, scheduler);\n\n const routerApi = await initRouterApi(publicServices.orchestratorService);\n\n const auditLogger = new DefaultAuditLogger({\n logger: logger,\n authService: auth,\n httpAuthService: httpAuth,\n });\n\n const router = Router();\n const permissionsIntegrationRouter = createPermissionIntegrationRouter({\n permissions: orchestratorPermissions,\n });\n router.use(express.json());\n router.use(permissionsIntegrationRouter);\n router.use('/workflows', express.text());\n router.use('/static', express.static(resolvePackagePath(pkg.name, 'static')));\n router.get('/health', (_, response) => {\n logger.info('PONG!');\n response.json({ status: 'ok' });\n });\n\n const scaffolderService: ScaffolderService = new ScaffolderService(\n logger,\n config,\n catalogApi,\n urlReader,\n );\n\n setupInternalRoutes(\n publicServices,\n routerApi,\n permissions,\n httpAuth,\n auditLogger,\n );\n setupExternalRoutes(router, discovery, scaffolderService, auditLogger);\n\n router.use((req, res, next) => {\n if (!next) {\n throw new Error('next is undefined');\n }\n\n return routerApi.openApiBackend.handleRequest(\n req as Request,\n req,\n res,\n next,\n );\n });\n\n const middleware = MiddlewareFactory.create({ logger, config });\n\n router.use(middleware.error());\n\n return router;\n}\n\nfunction initPublicServices(\n logger: LoggerService,\n config: Config,\n scheduler: SchedulerService,\n): PublicServices {\n const dataIndexUrl = config.getString('orchestrator.dataIndexService.url');\n const dataIndexService = new DataIndexService(dataIndexUrl, logger);\n const sonataFlowService = new SonataFlowService(dataIndexService, logger);\n\n const workflowCacheService = new WorkflowCacheService(\n logger,\n dataIndexService,\n sonataFlowService,\n );\n workflowCacheService.schedule({ scheduler: scheduler });\n\n const orchestratorService = new OrchestratorService(\n sonataFlowService,\n dataIndexService,\n workflowCacheService,\n );\n\n const dataInputSchemaService = new DataInputSchemaService();\n\n return {\n orchestratorService,\n dataInputSchemaService,\n };\n}\n\nasync function initRouterApi(\n orchestratorService: OrchestratorService,\n): Promise<RouterApi> {\n const openApiBackend = new OpenAPIBackend({\n definition: openApiDocument,\n strict: false,\n ajvOpts: {\n strict: false,\n strictSchema: false,\n verbose: true,\n addUsedSchema: false,\n formats: fullFormats, // open issue: https://github.com/openapistack/openapi-backend/issues/280\n },\n handlers: {\n validationFail: async (\n c,\n _req: express.Request,\n res: express.Response,\n ) => {\n console.log('validationFail', c.operation);\n res.status(400).json({ err: c.validation.errors });\n },\n notFound: async (_c, req: express.Request, res: express.Response) => {\n res.status(404).json({ err: `${req.path} path not found` });\n },\n notImplemented: async (_c, req: express.Request, res: express.Response) =>\n res.status(500).json({ err: `${req.path} not implemented` }),\n },\n });\n await openApiBackend.init();\n const v2 = new V2(orchestratorService);\n return { v2, openApiBackend };\n}\n\n// ======================================================\n// Internal Backstage API calls to delegate to SonataFlow\n// ======================================================\nfunction setupInternalRoutes(\n services: PublicServices,\n routerApi: RouterApi,\n permissions: PermissionsService,\n httpAuth: HttpAuthService,\n auditLogger: AuditLogger,\n) {\n function manageDenyAuthorization(\n endpointName: string,\n endpoint: string,\n req: HttpRequest,\n ) {\n const error = new UnauthorizedError();\n auditLogger.auditLog({\n eventName: `${endpointName}EndpointHit`,\n stage: 'authorization',\n status: 'failed',\n level: 'error',\n request: req,\n response: {\n status: 403,\n body: {\n errors: [\n {\n name: error.name,\n message: error.message,\n },\n ],\n },\n },\n errors: [error],\n message: `Not authorize to request the ${endpoint} endpoint`,\n });\n throw error;\n }\n\n function auditLogRequestError(\n error: any,\n endpointName: string,\n endpoint: string,\n req: HttpRequest,\n ) {\n auditLogger.auditLog({\n eventName: `${endpointName}EndpointHit`,\n stage: 'completion',\n status: 'failed',\n level: 'error',\n request: req,\n response: {\n status: 500,\n body: {\n errors: [\n {\n name: error.name,\n message: error.message || INTERNAL_SERVER_ERROR_MESSAGE,\n },\n ],\n },\n },\n errors: [error],\n message: `Error occured while requesting the '${endpoint}' endpoint`,\n });\n }\n\n // v2\n routerApi.openApiBackend.register(\n 'getWorkflowsOverview',\n async (_c, req, res: express.Response, next) => {\n const endpointName = 'getWorkflowsOverview';\n const endpoint = '/v2/workflows/overview';\n\n auditLogger.auditLog({\n eventName: 'getWorkflowsOverview',\n stage: 'start',\n status: 'succeeded',\n level: 'debug',\n request: req,\n message: `Received request to '${endpoint}' endpoint`,\n });\n const decision = await authorize(\n req,\n orchestratorWorkflowInstancesReadPermission,\n permissions,\n httpAuth,\n );\n if (decision.result === AuthorizeResult.DENY) {\n manageDenyAuthorization(endpointName, endpoint, req);\n }\n return routerApi.v2\n .getWorkflowsOverview(buildPagination(req), getRequestFilters(req))\n .then(result => res.json(result))\n .catch(error => {\n auditLogRequestError(error, endpointName, endpoint, req);\n next(error);\n });\n },\n );\n\n // v2\n routerApi.openApiBackend.register(\n 'getWorkflowSourceById',\n async (c, _req, res, next) => {\n const workflowId = c.request.params.workflowId as string;\n const endpointName = 'getWorkflowSourceById';\n const endpoint = `/v2/workflows/${workflowId}/source`;\n\n auditLogger.auditLog({\n eventName: endpointName,\n stage: 'start',\n status: 'succeeded',\n level: 'debug',\n request: _req,\n message: `Received request to '${endpoint}' endpoint`,\n });\n\n const decision = await authorize(\n _req,\n orchestratorWorkflowReadPermission,\n permissions,\n httpAuth,\n );\n if (decision.result === AuthorizeResult.DENY) {\n manageDenyAuthorization(endpointName, endpoint, _req);\n }\n\n try {\n const result = await routerApi.v2.getWorkflowSourceById(workflowId);\n res.status(200).contentType('text/plain').send(result);\n } catch (error) {\n auditLogRequestError(error, endpointName, endpoint, _req);\n next(error);\n }\n },\n );\n\n // v2\n routerApi.openApiBackend.register(\n 'executeWorkflow',\n async (c, req: express.Request, res: express.Response, next) => {\n const workflowId = c.request.params.workflowId as string;\n const endpointName = 'executeWorkflow';\n const endpoint = `/v2/workflows/${workflowId}/execute`;\n\n auditLogger.auditLog({\n eventName: endpointName,\n stage: 'start',\n status: 'succeeded',\n level: 'debug',\n request: req,\n message: `Received request to '${endpoint}' endpoint`,\n });\n\n const decision = await authorize(\n req,\n orchestratorWorkflowExecutePermission,\n permissions,\n httpAuth,\n );\n if (decision.result === AuthorizeResult.DENY) {\n manageDenyAuthorization(endpointName, endpoint, req);\n }\n\n const businessKey = routerApi.v2.extractQueryParam(\n c.request,\n QUERY_PARAM_BUSINESS_KEY,\n );\n\n const executeWorkflowRequestDTO = req.body;\n\n return routerApi.v2\n .executeWorkflow(executeWorkflowRequestDTO, workflowId, businessKey)\n .then(result => res.status(200).json(result))\n .catch(error => {\n auditLogRequestError(error, endpointName, endpoint, req);\n next(error);\n });\n },\n );\n\n // v2\n routerApi.openApiBackend.register(\n 'retriggerInstance',\n async (c, req: express.Request, res: express.Response, next) => {\n const workflowId = c.request.params.workflowId as string;\n const instanceId = c.request.params.instanceId as string;\n const endpointName = 'retriggerInstance';\n const endpoint = `/v2/workflows/${workflowId}/${instanceId}/retrigger`;\n\n auditLogger.auditLog({\n eventName: endpointName,\n stage: 'start',\n status: 'succeeded',\n level: 'debug',\n request: req,\n message: `Received request to '${endpoint}' endpoint`,\n });\n\n const decision = await authorize(\n req,\n orchestratorWorkflowExecutePermission,\n permissions,\n httpAuth,\n );\n if (decision.result === AuthorizeResult.DENY) {\n manageDenyAuthorization(endpointName, endpoint, req);\n }\n\n await routerApi.v2\n .retriggerInstance(workflowId, instanceId)\n .then(result => res.status(200).json(result))\n .catch(error => {\n auditLogRequestError(error, endpointName, endpoint, req);\n next(error);\n });\n },\n );\n\n // v2\n routerApi.openApiBackend.register(\n 'getWorkflowOverviewById',\n async (c, _req: express.Request, res: express.Response, next) => {\n const workflowId = c.request.params.workflowId as string;\n const endpointName = 'getWorkflowOverviewById';\n const endpoint = `/v2/workflows/${workflowId}/overview`;\n\n auditLogger.auditLog({\n eventName: endpointName,\n stage: 'start',\n status: 'succeeded',\n level: 'debug',\n request: _req,\n message: `Received request to '${endpoint}' endpoint`,\n });\n\n const decision = await authorize(\n _req,\n orchestratorWorkflowReadPermission,\n permissions,\n httpAuth,\n );\n if (decision.result === AuthorizeResult.DENY) {\n manageDenyAuthorization(endpointName, endpoint, _req);\n }\n return routerApi.v2\n .getWorkflowOverviewById(workflowId)\n .then(result => res.json(result))\n .catch(error => {\n auditLogRequestError(error, endpointName, endpoint, _req);\n next(error);\n });\n },\n );\n\n // v2\n routerApi.openApiBackend.register(\n 'getWorkflowStatuses',\n async (_c, _req: express.Request, res: express.Response, next) => {\n const endpointName = 'getWorkflowStatuses';\n const endpoint = '/v2/workflows/instances/statuses';\n\n auditLogger.auditLog({\n eventName: endpointName,\n stage: 'start',\n status: 'succeeded',\n level: 'debug',\n request: _req,\n message: `Received request to '${endpoint}' endpoint`,\n });\n const decision = await authorize(\n _req,\n orchestratorWorkflowInstanceReadPermission,\n permissions,\n httpAuth,\n );\n if (decision.result === AuthorizeResult.DENY) {\n manageDenyAuthorization(endpointName, endpoint, _req);\n }\n return routerApi.v2\n .getWorkflowStatuses()\n .then(result => res.status(200).json(result))\n .catch(error => {\n auditLogRequestError(error, endpointName, endpoint, _req);\n next(error);\n });\n },\n );\n\n // v2\n routerApi.openApiBackend.register(\n 'getWorkflowInputSchemaById',\n async (c, req: express.Request, res: express.Response, next) => {\n const workflowId = c.request.params.workflowId as string;\n const instanceId = c.request.query.instanceId as string;\n const endpointName = 'getWorkflowInputSchemaById';\n const endpoint = `/v2/workflows/${workflowId}/inputSchema`;\n try {\n auditLogger.auditLog({\n eventName: endpointName,\n stage: 'start',\n status: 'succeeded',\n level: 'debug',\n request: req,\n message: `Received request to '${endpoint}' endpoint`,\n });\n const decision = await authorize(\n req,\n orchestratorWorkflowInstanceReadPermission,\n permissions,\n httpAuth,\n );\n if (decision.result === AuthorizeResult.DENY) {\n manageDenyAuthorization(endpointName, endpoint, req);\n }\n\n const workflowDefinition =\n await services.orchestratorService.fetchWorkflowInfo({\n definitionId: workflowId,\n cacheHandler: 'throw',\n });\n\n if (!workflowDefinition) {\n throw new Error(\n `Failed to fetch workflow info for workflow ${workflowId}`,\n );\n }\n const serviceUrl = workflowDefinition.serviceUrl;\n if (!serviceUrl) {\n throw new Error(\n `Service URL is not defined for workflow ${workflowId}`,\n );\n }\n\n const definition =\n await services.orchestratorService.fetchWorkflowDefinition({\n definitionId: workflowId,\n cacheHandler: 'throw',\n });\n\n if (!definition) {\n throw new Error(\n 'Failed to fetch workflow definition for workflow ${workflowId}',\n );\n }\n\n if (!definition.dataInputSchema) {\n res.status(200).json({});\n return;\n }\n\n const instanceVariables = instanceId\n ? await services.orchestratorService.fetchInstanceVariables({\n instanceId,\n cacheHandler: 'throw',\n })\n : undefined;\n\n const workflowData = instanceVariables\n ? services.dataInputSchemaService.extractWorkflowData(\n instanceVariables,\n )\n : undefined;\n\n const workflowInfo = await routerApi.v2\n .getWorkflowInputSchemaById(workflowId, serviceUrl)\n .catch((error: { message: string }) => {\n auditLogRequestError(error, endpointName, endpoint, req);\n res.status(500).json({\n message: error.message || INTERNAL_SERVER_ERROR_MESSAGE,\n });\n });\n\n if (\n !workflowInfo ||\n !workflowInfo.inputSchema ||\n !workflowInfo.inputSchema.properties\n ) {\n res.status(200).json({});\n return;\n }\n\n const inputSchemaProps = workflowInfo.inputSchema.properties;\n let inputData;\n\n if (workflowData) {\n inputData = Object.keys(inputSchemaProps)\n .filter(k => k in workflowData)\n .reduce((result, k) => {\n if (!workflowData[k]) {\n return result;\n }\n result[k] = workflowData[k];\n return result;\n }, {} as JsonObject);\n }\n\n res.status(200).json({\n inputSchema: workflowInfo.inputSchema,\n data: inputData,\n });\n } catch (err) {\n auditLogRequestError(err, endpointName, endpoint, req);\n next(err);\n }\n },\n );\n\n // v2\n routerApi.openApiBackend.register(\n 'getWorkflowInstances',\n async (c, req: express.Request, res: express.Response, next) => {\n const endpointName = 'getWorkflowInstances';\n const workflowId = c.request.params.workflowId as string;\n const endpoint = `/v2/workflows/${workflowId}/instances`;\n\n auditLogger.auditLog({\n eventName: endpointName,\n stage: 'start',\n status: 'succeeded',\n level: 'debug',\n request: req,\n message: `Received request to '${endpoint}' endpoint`,\n });\n\n const decision = await authorize(\n req,\n orchestratorWorkflowInstancesReadPermission,\n permissions,\n httpAuth,\n );\n if (decision.result === AuthorizeResult.DENY) {\n manageDenyAuthorization(endpointName, endpoint, req);\n }\n return routerApi.v2\n .getInstances(buildPagination(req), getRequestFilters(req), workflowId)\n .then(result => res.json(result))\n .catch(error => {\n auditLogRequestError(error, endpointName, endpoint, req);\n next(error);\n });\n },\n );\n\n // v2\n routerApi.openApiBackend.register(\n 'getInstances',\n async (_c, req: express.Request, res: express.Response, next) => {\n const endpointName = 'getInstances';\n const endpoint = `/v2/workflows/instances`;\n\n auditLogger.auditLog({\n eventName: endpointName,\n stage: 'start',\n status: 'succeeded',\n level: 'debug',\n request: req,\n message: `Received request to '${endpoint}' endpoint`,\n });\n\n const decision = await authorize(\n req,\n orchestratorWorkflowInstancesReadPermission,\n permissions,\n httpAuth,\n );\n if (decision.result === AuthorizeResult.DENY) {\n manageDenyAuthorization(endpointName, endpoint, req);\n }\n return routerApi.v2\n .getInstances(buildPagination(req), getRequestFilters(req))\n .then(result => res.json(result))\n .catch(error => {\n auditLogRequestError(error, endpointName, endpoint, req);\n next(error);\n });\n },\n );\n\n // v2\n routerApi.openApiBackend.register(\n 'getInstanceById',\n async (c, _req: express.Request, res: express.Response, next) => {\n const instanceId = c.request.params.instanceId as string;\n const endpointName = 'getInstanceById';\n const endpoint = `/v2/workflows/instances/${instanceId}`;\n\n auditLogger.auditLog({\n eventName: endpointName,\n stage: 'start',\n status: 'succeeded',\n level: 'debug',\n request: _req,\n message: `Received request to '${endpoint}' endpoint`,\n });\n\n const decision = await authorize(\n _req,\n orchestratorWorkflowInstanceReadPermission,\n permissions,\n httpAuth,\n );\n if (decision.result === AuthorizeResult.DENY) {\n manageDenyAuthorization(endpointName, endpoint, _req);\n }\n\n const includeAssessment = routerApi.v2.extractQueryParam(\n c.request,\n QUERY_PARAM_INCLUDE_ASSESSMENT,\n );\n\n return routerApi.v2\n .getInstanceById(instanceId, !!includeAssessment)\n .then(result => res.status(200).json(result))\n .catch(error => {\n auditLogRequestError(error, endpointName, endpoint, _req);\n next(error);\n });\n },\n );\n\n // v2\n routerApi.openApiBackend.register(\n 'abortWorkflow',\n async (c, _req, res, next) => {\n const instanceId = c.request.params.instanceId as string;\n const endpointName = 'abortWorkflow';\n const endpoint = `/v2/workflows/instances/${instanceId}/abort`;\n\n auditLogger.auditLog({\n eventName: endpointName,\n stage: 'start',\n status: 'succeeded',\n level: 'debug',\n request: _req,\n message: `Received request to '${endpoint}' endpoint`,\n });\n\n const decision = await authorize(\n _req,\n orchestratorWorkflowInstanceAbortPermission,\n permissions,\n httpAuth,\n );\n if (decision.result === AuthorizeResult.DENY) {\n manageDenyAuthorization(endpointName, endpoint, _req);\n }\n return routerApi.v2\n .abortWorkflow(instanceId)\n .then(result => res.json(result))\n .catch(error => {\n auditLogRequestError(error, endpointName, endpoint, _req);\n next(error);\n });\n },\n );\n}\n\n// ======================================================\n// External SonataFlow API calls to delegate to Backstage\n// ======================================================\nfunction setupExternalRoutes(\n router: express.Router,\n discovery: DiscoveryApi,\n scaffolderService: ScaffolderService,\n auditLogger: AuditLogger,\n) {\n router.get('/actions', async (req, res) => {\n auditLogger.auditLog({\n eventName: 'ActionsEndpointHit',\n stage: 'start',\n status: 'succeeded',\n level: 'debug',\n request: req,\n message: `Received request to '/actions' endpoint`,\n });\n const scaffolderUrl = await discovery.getBaseUrl('scaffolder');\n const response = await fetch(`${scaffolderUrl}/v2/actions`);\n const json = await response.json();\n res.status(response.status).json(json);\n });\n\n router.post('/actions/:actionId', async (req, res) => {\n const { actionId } = req.params;\n auditLogger.auditLog({\n eventName: 'ActionsActionIdEndpointHit',\n stage: 'start',\n status: 'succeeded',\n level: 'debug',\n request: req,\n message: `Received request to '/actions/${actionId}' endpoint`,\n });\n const instanceId: string | undefined = req.header('kogitoprocinstanceid');\n const body: JsonObject = (await req.body) as JsonObject;\n\n const filteredBody = Object.fromEntries(\n Object.entries(body).filter(\n ([, value]) => value !== undefined && value !== null,\n ),\n );\n\n const result: JsonValue = await scaffolderService.executeAction({\n actionId,\n instanceId,\n input: filteredBody,\n });\n res.status(200).json(result);\n });\n}\n\nfunction getRequestFilters(req: HttpRequest): Filter | undefined {\n return req.body.filters ? (req.body.filters as Filter) : undefined;\n}\n"],"names":["DefaultAuditLogger","Router","createPermissionIntegrationRouter","orchestratorPermissions","express","resolvePackagePath","pkg.name","ScaffolderService","MiddlewareFactory","DataIndexService","SonataFlowService","WorkflowCacheService","OrchestratorService","DataInputSchemaService","OpenAPIBackend","openApiDocument","fullFormats","v2","V2","UnauthorizedError","INTERNAL_SERVER_ERROR_MESSAGE","orchestratorWorkflowInstancesReadPermission","AuthorizeResult","buildPagination","orchestratorWorkflowReadPermission","orchestratorWorkflowExecutePermission","QUERY_PARAM_BUSINESS_KEY","orchestratorWorkflowInstanceReadPermission","QUERY_PARAM_INCLUDE_ASSESSMENT","orchestratorWorkflowInstanceAbortPermission"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"router.cjs.js","sources":["../../src/service/router.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\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 */\nimport { MiddlewareFactory } from '@backstage/backend-defaults/rootHttpRouter';\nimport {\n HttpAuthService,\n LoggerService,\n PermissionsService,\n resolvePackagePath,\n SchedulerService,\n} from '@backstage/backend-plugin-api';\nimport type { Config } from '@backstage/config';\nimport type { DiscoveryApi } from '@backstage/core-plugin-api';\nimport {\n AuthorizePermissionRequest,\n AuthorizePermissionResponse,\n AuthorizeResult,\n BasicPermission,\n} from '@backstage/plugin-permission-common';\nimport { createPermissionIntegrationRouter } from '@backstage/plugin-permission-node';\nimport type { JsonObject, JsonValue } from '@backstage/types';\n\nimport { UnauthorizedError } from '@backstage-community/plugin-rbac-common';\nimport {\n AuditLogger,\n DefaultAuditLogger,\n} from '@janus-idp/backstage-plugin-audit-log-node';\nimport { fullFormats } from 'ajv-formats/dist/formats';\nimport express, { Router } from 'express';\nimport { Request as HttpRequest } from 'express-serve-static-core';\nimport { OpenAPIBackend, Request } from 'openapi-backend';\n\nimport {\n Filter,\n openApiDocument,\n orchestratorPermissions,\n orchestratorWorkflowPermission,\n orchestratorWorkflowSpecificPermission,\n orchestratorWorkflowUsePermission,\n orchestratorWorkflowUseSpecificPermission,\n QUERY_PARAM_BUSINESS_KEY,\n QUERY_PARAM_INCLUDE_ASSESSMENT,\n WorkflowOverviewListResultDTO,\n} from '@red-hat-developer-hub/backstage-plugin-orchestrator-common';\n\nimport * as pkg from '../../package.json';\nimport { RouterOptions } from '../routerWrapper';\nimport { buildPagination } from '../types/pagination';\nimport { V2 } from './api/v2';\nimport { INTERNAL_SERVER_ERROR_MESSAGE } from './constants';\nimport { DataIndexService } from './DataIndexService';\nimport { DataInputSchemaService } from './DataInputSchemaService';\nimport { OrchestratorService } from './OrchestratorService';\nimport { ScaffolderService } from './ScaffolderService';\nimport { SonataFlowService } from './SonataFlowService';\nimport { WorkflowCacheService } from './WorkflowCacheService';\n\ninterface PublicServices {\n dataInputSchemaService: DataInputSchemaService;\n orchestratorService: OrchestratorService;\n}\n\ninterface RouterApi {\n openApiBackend: OpenAPIBackend;\n v2: V2;\n}\n\nconst authorize = async (\n request: HttpRequest,\n anyOfPermissions: BasicPermission[],\n permissionsSvc: PermissionsService,\n httpAuth: HttpAuthService,\n): Promise<AuthorizePermissionResponse> => {\n const credentials = await httpAuth.credentials(request);\n\n const decisionResponses: AuthorizePermissionResponse[][] = await Promise.all(\n anyOfPermissions.map(permission =>\n permissionsSvc.authorize([{ permission }], {\n credentials,\n }),\n ),\n );\n const decisions: AuthorizePermissionResponse[] = decisionResponses.map(\n d => d[0],\n );\n\n const allow = decisions.find(d => d.result === AuthorizeResult.ALLOW);\n return (\n allow || {\n result: AuthorizeResult.DENY,\n }\n );\n};\n\nconst filterAuthorizedWorkflowIds = async (\n request: HttpRequest,\n permissionsSvc: PermissionsService,\n httpAuth: HttpAuthService,\n workflowIds: string[],\n): Promise<string[]> => {\n const credentials = await httpAuth.credentials(request);\n const genericWorkflowPermissionDecision = await permissionsSvc.authorize(\n [{ permission: orchestratorWorkflowPermission }],\n {\n credentials,\n },\n );\n\n if (genericWorkflowPermissionDecision[0].result === AuthorizeResult.ALLOW) {\n // The user can see all workflows\n return workflowIds;\n }\n\n const specificWorkflowRequests: AuthorizePermissionRequest[] =\n workflowIds.map(workflowId => ({\n permission: orchestratorWorkflowSpecificPermission(workflowId),\n }));\n\n const decisions = await permissionsSvc.authorize(specificWorkflowRequests, {\n credentials,\n });\n\n return workflowIds.filter(\n (_, idx) => decisions[idx].result === AuthorizeResult.ALLOW,\n );\n};\n\nconst filterAuthorizedWorkflows = async (\n request: HttpRequest,\n permissionsSvc: PermissionsService,\n httpAuth: HttpAuthService,\n workflows: WorkflowOverviewListResultDTO,\n): Promise<WorkflowOverviewListResultDTO> => {\n if (!workflows.overviews) {\n return workflows;\n }\n\n const authorizedWorkflowIds = await filterAuthorizedWorkflowIds(\n request,\n permissionsSvc,\n httpAuth,\n workflows.overviews.map(w => w.workflowId),\n );\n\n const filtered = {\n ...workflows,\n overviews: workflows.overviews.filter(w =>\n authorizedWorkflowIds.includes(w.workflowId),\n ),\n };\n\n return filtered;\n};\n\nexport async function createBackendRouter(\n options: RouterOptions,\n): Promise<Router> {\n const {\n config,\n logger,\n discovery,\n catalogApi,\n urlReader,\n scheduler,\n permissions,\n auth,\n httpAuth,\n } = options;\n const publicServices = initPublicServices(logger, config, scheduler);\n\n const routerApi = await initRouterApi(publicServices.orchestratorService);\n\n const auditLogger = new DefaultAuditLogger({\n logger: logger,\n authService: auth,\n httpAuthService: httpAuth,\n });\n\n const router = Router();\n const permissionsIntegrationRouter = createPermissionIntegrationRouter({\n permissions: orchestratorPermissions,\n });\n router.use(express.json());\n router.use(permissionsIntegrationRouter);\n router.use('/workflows', express.text());\n router.use('/static', express.static(resolvePackagePath(pkg.name, 'static')));\n router.get('/health', (_, response) => {\n logger.info('PONG!');\n response.json({ status: 'ok' });\n });\n\n const scaffolderService: ScaffolderService = new ScaffolderService(\n logger,\n config,\n catalogApi,\n urlReader,\n );\n\n setupInternalRoutes(\n publicServices,\n routerApi,\n permissions,\n httpAuth,\n auditLogger,\n );\n setupExternalRoutes(router, discovery, scaffolderService, auditLogger);\n\n router.use((req, res, next) => {\n if (!next) {\n throw new Error('next is undefined');\n }\n\n return routerApi.openApiBackend\n .handleRequest(req as Request, req, res, next)\n .catch(error => {\n auditLogger.auditLog({\n eventName: 'genericErrorHandler',\n stage: 'completion',\n status: 'failed',\n level: 'error',\n request: req,\n message: `Exception thrown during processing request ${req.path} , ${error.message || error.name || error}`,\n errors: [error],\n });\n\n next(error);\n });\n });\n\n const middleware = MiddlewareFactory.create({ logger, config });\n\n router.use(middleware.error());\n\n return router;\n}\n\nfunction initPublicServices(\n logger: LoggerService,\n config: Config,\n scheduler: SchedulerService,\n): PublicServices {\n const dataIndexUrl = config.getString('orchestrator.dataIndexService.url');\n const dataIndexService = new DataIndexService(dataIndexUrl, logger);\n const sonataFlowService = new SonataFlowService(dataIndexService, logger);\n\n const workflowCacheService = new WorkflowCacheService(\n logger,\n dataIndexService,\n sonataFlowService,\n );\n workflowCacheService.schedule({ scheduler: scheduler });\n\n const orchestratorService = new OrchestratorService(\n sonataFlowService,\n dataIndexService,\n workflowCacheService,\n );\n\n const dataInputSchemaService = new DataInputSchemaService();\n\n return {\n orchestratorService,\n dataInputSchemaService,\n };\n}\n\nasync function initRouterApi(\n orchestratorService: OrchestratorService,\n): Promise<RouterApi> {\n const openApiBackend = new OpenAPIBackend({\n definition: openApiDocument,\n strict: false,\n ajvOpts: {\n strict: false,\n strictSchema: false,\n verbose: true,\n addUsedSchema: false,\n formats: fullFormats, // open issue: https://github.com/openapistack/openapi-backend/issues/280\n },\n handlers: {\n validationFail: async (\n c,\n _req: express.Request,\n res: express.Response,\n ) => {\n console.log('validationFail', c.operation);\n res.status(400).json({ err: c.validation.errors });\n },\n notFound: async (_c, req: express.Request, res: express.Response) => {\n res.status(404).json({ err: `${req.path} path not found` });\n },\n notImplemented: async (_c, req: express.Request, res: express.Response) =>\n res.status(500).json({ err: `${req.path} not implemented` }),\n },\n });\n await openApiBackend.init();\n const v2 = new V2(orchestratorService);\n return { v2, openApiBackend };\n}\n\n// ======================================================\n// Internal Backstage API calls to delegate to SonataFlow\n// ======================================================\nfunction setupInternalRoutes(\n services: PublicServices,\n routerApi: RouterApi,\n permissions: PermissionsService,\n httpAuth: HttpAuthService,\n auditLogger: AuditLogger,\n) {\n function manageDenyAuthorization(\n endpointName: string,\n endpoint: string,\n req: HttpRequest,\n ) {\n const error = new UnauthorizedError();\n auditLogger.auditLog({\n eventName: `${endpointName}EndpointHit`,\n stage: 'authorization',\n status: 'failed',\n level: 'error',\n request: req,\n response: {\n status: 403,\n body: {\n errors: [\n {\n name: error.name,\n message: error.message,\n },\n ],\n },\n },\n errors: [error],\n message: `Not authorize to request the ${endpoint} endpoint`,\n });\n throw error;\n }\n\n function auditLogRequestError(\n error: any,\n endpointName: string,\n endpoint: string,\n req: HttpRequest,\n ) {\n auditLogger.auditLog({\n eventName: `${endpointName}EndpointHit`,\n stage: 'completion',\n status: 'failed',\n level: 'error',\n request: req,\n response: {\n status: 500,\n body: {\n errors: [\n {\n name: error.name,\n message: error.message || INTERNAL_SERVER_ERROR_MESSAGE,\n },\n ],\n },\n },\n errors: [error],\n message: `Error occured while requesting the '${endpoint}' endpoint`,\n });\n }\n\n // v2\n routerApi.openApiBackend.register(\n 'getWorkflowsOverview',\n async (_c, req, res: express.Response, next) => {\n const endpointName = 'getWorkflowsOverview';\n const endpoint = '/v2/workflows/overview';\n\n auditLogger.auditLog({\n eventName: 'getWorkflowsOverview',\n stage: 'start',\n status: 'succeeded',\n level: 'debug',\n request: req,\n message: `Received request to '${endpoint}' endpoint`,\n });\n\n try {\n const result = await routerApi.v2.getWorkflowsOverview(\n buildPagination(req),\n getRequestFilters(req),\n );\n\n const workflows = await filterAuthorizedWorkflows(\n req,\n permissions,\n httpAuth,\n result,\n );\n res.json(workflows);\n } catch (error) {\n auditLogRequestError(error, endpointName, endpoint, req);\n next(error);\n }\n },\n );\n\n // v2\n routerApi.openApiBackend.register(\n 'getWorkflowSourceById',\n async (c, _req, res, next) => {\n const workflowId = c.request.params.workflowId as string;\n const endpointName = 'getWorkflowSourceById';\n const endpoint = `/v2/workflows/${workflowId}/source`;\n\n auditLogger.auditLog({\n eventName: endpointName,\n stage: 'start',\n status: 'succeeded',\n level: 'debug',\n request: _req,\n message: `Received request to '${endpoint}' endpoint`,\n });\n\n const decision = await authorize(\n _req,\n [\n orchestratorWorkflowPermission,\n orchestratorWorkflowSpecificPermission(workflowId),\n ],\n permissions,\n httpAuth,\n );\n if (decision.result === AuthorizeResult.DENY) {\n manageDenyAuthorization(endpointName, endpoint, _req);\n }\n\n try {\n const result = await routerApi.v2.getWorkflowSourceById(workflowId);\n res.status(200).contentType('text/plain').send(result);\n } catch (error) {\n auditLogRequestError(error, endpointName, endpoint, _req);\n next(error);\n }\n },\n );\n\n // v2\n routerApi.openApiBackend.register(\n 'executeWorkflow',\n async (c, req: express.Request, res: express.Response, next) => {\n const workflowId = c.request.params.workflowId as string;\n const endpointName = 'executeWorkflow';\n const endpoint = `/v2/workflows/${workflowId}/execute`;\n\n auditLogger.auditLog({\n eventName: endpointName,\n stage: 'start',\n status: 'succeeded',\n level: 'debug',\n request: req,\n message: `Received request to '${endpoint}' endpoint`,\n });\n\n const decision = await authorize(\n req,\n [\n orchestratorWorkflowUsePermission,\n orchestratorWorkflowUseSpecificPermission(workflowId),\n ],\n permissions,\n httpAuth,\n );\n if (decision.result === AuthorizeResult.DENY) {\n manageDenyAuthorization(endpointName, endpoint, req);\n }\n\n const businessKey = routerApi.v2.extractQueryParam(\n c.request,\n QUERY_PARAM_BUSINESS_KEY,\n );\n\n const executeWorkflowRequestDTO = req.body;\n\n return routerApi.v2\n .executeWorkflow(executeWorkflowRequestDTO, workflowId, businessKey)\n .then(result => res.status(200).json(result))\n .catch(error => {\n auditLogRequestError(error, endpointName, endpoint, req);\n next(error);\n });\n },\n );\n\n // v2\n routerApi.openApiBackend.register(\n 'retriggerInstance',\n async (c, req: express.Request, res: express.Response, next) => {\n const workflowId = c.request.params.workflowId as string;\n const instanceId = c.request.params.instanceId as string;\n const endpointName = 'retriggerInstance';\n const endpoint = `/v2/workflows/${workflowId}/${instanceId}/retrigger`;\n\n auditLogger.auditLog({\n eventName: endpointName,\n stage: 'start',\n status: 'succeeded',\n level: 'debug',\n request: req,\n message: `Received request to '${endpoint}' endpoint`,\n });\n\n const decision = await authorize(\n req,\n [\n orchestratorWorkflowUsePermission,\n orchestratorWorkflowUseSpecificPermission(workflowId),\n ],\n permissions,\n httpAuth,\n );\n if (decision.result === AuthorizeResult.DENY) {\n manageDenyAuthorization(endpointName, endpoint, req);\n }\n\n await routerApi.v2\n .retriggerInstance(workflowId, instanceId)\n .then(result => res.status(200).json(result))\n .catch(error => {\n auditLogRequestError(error, endpointName, endpoint, req);\n next(error);\n });\n },\n );\n\n // v2\n routerApi.openApiBackend.register(\n 'getWorkflowOverviewById',\n async (c, _req: express.Request, res: express.Response, next) => {\n const workflowId = c.request.params.workflowId as string;\n const endpointName = 'getWorkflowOverviewById';\n const endpoint = `/v2/workflows/${workflowId}/overview`;\n\n auditLogger.auditLog({\n eventName: endpointName,\n stage: 'start',\n status: 'succeeded',\n level: 'debug',\n request: _req,\n message: `Received request to '${endpoint}' endpoint`,\n });\n\n const decision = await authorize(\n _req,\n [\n orchestratorWorkflowPermission,\n orchestratorWorkflowSpecificPermission(workflowId),\n ],\n permissions,\n httpAuth,\n );\n if (decision.result === AuthorizeResult.DENY) {\n manageDenyAuthorization(endpointName, endpoint, _req);\n }\n\n return routerApi.v2\n .getWorkflowOverviewById(workflowId)\n .then(result => res.json(result))\n .catch(error => {\n auditLogRequestError(error, endpointName, endpoint, _req);\n next(error);\n });\n },\n );\n\n // v2\n routerApi.openApiBackend.register(\n 'getWorkflowStatuses',\n async (_c, _req: express.Request, res: express.Response, next) => {\n const endpointName = 'getWorkflowStatuses';\n const endpoint = '/v2/workflows/instances/statuses';\n\n auditLogger.auditLog({\n eventName: endpointName,\n stage: 'start',\n status: 'succeeded',\n level: 'debug',\n request: _req,\n message: `Received request to '${endpoint}' endpoint`,\n });\n // Anyone is authorized to call this endpoint\n\n return routerApi.v2\n .getWorkflowStatuses()\n .then(result => res.status(200).json(result))\n .catch(error => {\n auditLogRequestError(error, endpointName, endpoint, _req);\n next(error);\n });\n },\n );\n\n // v2\n routerApi.openApiBackend.register(\n 'getWorkflowInputSchemaById',\n async (c, req: express.Request, res: express.Response, next) => {\n const workflowId = c.request.params.workflowId as string;\n const instanceId = c.request.query.instanceId as string;\n const endpointName = 'getWorkflowInputSchemaById';\n const endpoint = `/v2/workflows/${workflowId}/inputSchema`;\n try {\n auditLogger.auditLog({\n eventName: endpointName,\n stage: 'start',\n status: 'succeeded',\n level: 'debug',\n request: req,\n message: `Received request to '${endpoint}' endpoint`,\n });\n const decision = await authorize(\n req,\n [\n orchestratorWorkflowPermission,\n orchestratorWorkflowSpecificPermission(workflowId),\n ],\n permissions,\n httpAuth,\n );\n if (decision.result === AuthorizeResult.DENY) {\n manageDenyAuthorization(endpointName, endpoint, req);\n }\n\n const workflowDefinition =\n await services.orchestratorService.fetchWorkflowInfo({\n definitionId: workflowId,\n cacheHandler: 'throw',\n });\n\n if (!workflowDefinition) {\n throw new Error(\n `Failed to fetch workflow info for workflow ${workflowId}`,\n );\n }\n const serviceUrl = workflowDefinition.serviceUrl;\n if (!serviceUrl) {\n throw new Error(\n `Service URL is not defined for workflow ${workflowId}`,\n );\n }\n\n const definition =\n await services.orchestratorService.fetchWorkflowDefinition({\n definitionId: workflowId,\n cacheHandler: 'throw',\n });\n\n if (!definition) {\n throw new Error(\n 'Failed to fetch workflow definition for workflow ${workflowId}',\n );\n }\n\n if (!definition.dataInputSchema) {\n res.status(200).json({});\n return;\n }\n\n const instanceVariables = instanceId\n ? await services.orchestratorService.fetchInstanceVariables({\n instanceId,\n cacheHandler: 'throw',\n })\n : undefined;\n\n const workflowData = instanceVariables\n ? services.dataInputSchemaService.extractWorkflowData(\n instanceVariables,\n )\n : undefined;\n\n const workflowInfo = await routerApi.v2\n .getWorkflowInputSchemaById(workflowId, serviceUrl)\n .catch((error: { message: string }) => {\n auditLogRequestError(error, endpointName, endpoint, req);\n res.status(500).json({\n message: error.message || INTERNAL_SERVER_ERROR_MESSAGE,\n });\n });\n\n if (\n !workflowInfo ||\n !workflowInfo.inputSchema ||\n !workflowInfo.inputSchema.properties\n ) {\n res.status(200).json({});\n return;\n }\n\n const inputSchemaProps = workflowInfo.inputSchema.properties;\n let inputData;\n\n if (workflowData) {\n inputData = Object.keys(inputSchemaProps)\n .filter(k => k in workflowData)\n .reduce((result, k) => {\n if (!workflowData[k]) {\n return result;\n }\n result[k] = workflowData[k];\n return result;\n }, {} as JsonObject);\n }\n\n res.status(200).json({\n inputSchema: workflowInfo.inputSchema,\n data: inputData,\n });\n } catch (err) {\n auditLogRequestError(err, endpointName, endpoint, req);\n next(err);\n }\n },\n );\n\n // v2\n routerApi.openApiBackend.register(\n 'getWorkflowInstances',\n async (c, req: express.Request, res: express.Response, next) => {\n const endpointName = 'getWorkflowInstances';\n const workflowId = c.request.params.workflowId as string;\n const endpoint = `/v2/workflows/${workflowId}/instances`;\n\n auditLogger.auditLog({\n eventName: endpointName,\n stage: 'start',\n status: 'succeeded',\n level: 'debug',\n request: req,\n message: `Received request to '${endpoint}' endpoint`,\n });\n\n const decision = await authorize(\n req,\n [\n orchestratorWorkflowPermission,\n orchestratorWorkflowSpecificPermission(workflowId),\n ],\n permissions,\n httpAuth,\n );\n if (decision.result === AuthorizeResult.DENY) {\n manageDenyAuthorization(endpointName, endpoint, req);\n }\n return routerApi.v2\n .getInstances(buildPagination(req), getRequestFilters(req), [\n workflowId,\n ])\n .then(result => res.json(result))\n .catch(error => {\n auditLogRequestError(error, endpointName, endpoint, req);\n next(error);\n });\n },\n );\n\n // v2\n routerApi.openApiBackend.register(\n 'getInstances',\n async (_c, req: express.Request, res: express.Response, next) => {\n const endpointName = 'getInstances';\n const endpoint = `/v2/workflows/instances`;\n\n auditLogger.auditLog({\n eventName: endpointName,\n stage: 'start',\n status: 'succeeded',\n level: 'debug',\n request: req,\n message: `Received request to '${endpoint}' endpoint`,\n });\n\n try {\n // Once we assign user to the instance in the future, we can rework this filtering\n const allWorkflowIds = routerApi.v2.getWorkflowIds();\n const authorizedWorkflowIds: string[] =\n await filterAuthorizedWorkflowIds(\n req,\n permissions,\n httpAuth,\n allWorkflowIds,\n );\n\n const result = await routerApi.v2.getInstances(\n buildPagination(req),\n getRequestFilters(req),\n authorizedWorkflowIds,\n );\n\n res.json(result);\n } catch (error) {\n auditLogRequestError(error, endpointName, endpoint, req);\n next(error);\n }\n },\n );\n\n // v2\n routerApi.openApiBackend.register(\n 'getInstanceById',\n async (c, _req: express.Request, res: express.Response, next) => {\n const instanceId = c.request.params.instanceId as string;\n const endpointName = 'getInstanceById';\n const endpoint = `/v2/workflows/instances/${instanceId}`;\n\n auditLogger.auditLog({\n eventName: endpointName,\n stage: 'start',\n status: 'succeeded',\n level: 'debug',\n request: _req,\n message: `Received request to '${endpoint}' endpoint`,\n });\n\n const includeAssessment = routerApi.v2.extractQueryParam(\n c.request,\n QUERY_PARAM_INCLUDE_ASSESSMENT,\n );\n\n try {\n const assessedInstance = await routerApi.v2.getInstanceById(\n instanceId,\n !!includeAssessment,\n );\n\n const workflowId = assessedInstance.instance.processId;\n\n const decision = await authorize(\n _req,\n [\n orchestratorWorkflowPermission,\n orchestratorWorkflowSpecificPermission(workflowId),\n ],\n permissions,\n httpAuth,\n );\n if (decision.result === AuthorizeResult.DENY) {\n manageDenyAuthorization(endpointName, endpoint, _req);\n }\n\n res.status(200).json(assessedInstance);\n } catch (error) {\n auditLogRequestError(error, endpointName, endpoint, _req);\n next(error);\n }\n },\n );\n\n // v2\n routerApi.openApiBackend.register(\n 'abortWorkflow',\n async (c, _req, res, next) => {\n const instanceId = c.request.params.instanceId as string;\n const endpointName = 'abortWorkflow';\n const endpoint = `/v2/workflows/instances/${instanceId}/abort`;\n\n auditLogger.auditLog({\n eventName: endpointName,\n stage: 'start',\n status: 'succeeded',\n level: 'debug',\n request: _req,\n message: `Received request to '${endpoint}' endpoint`,\n });\n\n try {\n const assessedInstance = await routerApi.v2.getInstanceById(instanceId);\n const workflowId = assessedInstance.instance.processId;\n\n const decision = await authorize(\n _req,\n [\n orchestratorWorkflowUsePermission,\n orchestratorWorkflowUseSpecificPermission(workflowId),\n ],\n permissions,\n httpAuth,\n );\n if (decision.result === AuthorizeResult.DENY) {\n manageDenyAuthorization(endpointName, endpoint, _req);\n }\n\n const result = await routerApi.v2.abortWorkflow(instanceId);\n res.status(200).json(result);\n } catch (error) {\n auditLogRequestError(error, endpointName, endpoint, _req);\n next(error);\n }\n },\n );\n}\n\n// ======================================================\n// External SonataFlow API calls to delegate to Backstage\n// ======================================================\nfunction setupExternalRoutes(\n router: express.Router,\n discovery: DiscoveryApi,\n scaffolderService: ScaffolderService,\n auditLogger: AuditLogger,\n) {\n router.get('/actions', async (req, res) => {\n auditLogger.auditLog({\n eventName: 'ActionsEndpointHit',\n stage: 'start',\n status: 'succeeded',\n level: 'debug',\n request: req,\n message: `Received request to '/actions' endpoint`,\n });\n const scaffolderUrl = await discovery.getBaseUrl('scaffolder');\n const response = await fetch(`${scaffolderUrl}/v2/actions`);\n const json = await response.json();\n res.status(response.status).json(json);\n });\n\n router.post('/actions/:actionId', async (req, res) => {\n const { actionId } = req.params;\n auditLogger.auditLog({\n eventName: 'ActionsActionIdEndpointHit',\n stage: 'start',\n status: 'succeeded',\n level: 'debug',\n request: req,\n message: `Received request to '/actions/${actionId}' endpoint`,\n });\n const instanceId: string | undefined = req.header('kogitoprocinstanceid');\n const body: JsonObject = (await req.body) as JsonObject;\n\n const filteredBody = Object.fromEntries(\n Object.entries(body).filter(\n ([, value]) => value !== undefined && value !== null,\n ),\n );\n\n const result: JsonValue = await scaffolderService.executeAction({\n actionId,\n instanceId,\n input: filteredBody,\n });\n res.status(200).json(result);\n });\n}\n\nfunction getRequestFilters(req: HttpRequest): Filter | undefined {\n return req.body.filters ? (req.body.filters as Filter) : undefined;\n}\n"],"names":["AuthorizeResult","orchestratorWorkflowPermission","orchestratorWorkflowSpecificPermission","DefaultAuditLogger","Router","createPermissionIntegrationRouter","orchestratorPermissions","express","resolvePackagePath","pkg.name","ScaffolderService","MiddlewareFactory","DataIndexService","SonataFlowService","WorkflowCacheService","OrchestratorService","DataInputSchemaService","OpenAPIBackend","openApiDocument","fullFormats","v2","V2","UnauthorizedError","INTERNAL_SERVER_ERROR_MESSAGE","buildPagination","orchestratorWorkflowUsePermission","orchestratorWorkflowUseSpecificPermission","QUERY_PARAM_BUSINESS_KEY","QUERY_PARAM_INCLUDE_ASSESSMENT"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AA+EA,MAAM,SAAY,GAAA,OAChB,OACA,EAAA,gBAAA,EACA,gBACA,QACyC,KAAA;AACzC,EAAA,MAAM,WAAc,GAAA,MAAM,QAAS,CAAA,WAAA,CAAY,OAAO,CAAA,CAAA;AAEtD,EAAM,MAAA,iBAAA,GAAqD,MAAM,OAAQ,CAAA,GAAA;AAAA,IACvE,gBAAiB,CAAA,GAAA;AAAA,MAAI,gBACnB,cAAe,CAAA,SAAA,CAAU,CAAC,EAAE,UAAA,EAAY,CAAG,EAAA;AAAA,QACzC,WAAA;AAAA,OACD,CAAA;AAAA,KACH;AAAA,GACF,CAAA;AACA,EAAA,MAAM,YAA2C,iBAAkB,CAAA,GAAA;AAAA,IACjE,CAAA,CAAA,KAAK,EAAE,CAAC,CAAA;AAAA,GACV,CAAA;AAEA,EAAA,MAAM,QAAQ,SAAU,CAAA,IAAA,CAAK,OAAK,CAAE,CAAA,MAAA,KAAWA,uCAAgB,KAAK,CAAA,CAAA;AACpE,EAAA,OACE,KAAS,IAAA;AAAA,IACP,QAAQA,sCAAgB,CAAA,IAAA;AAAA,GAC1B,CAAA;AAEJ,CAAA,CAAA;AAEA,MAAM,2BAA8B,GAAA,OAClC,OACA,EAAA,cAAA,EACA,UACA,WACsB,KAAA;AACtB,EAAA,MAAM,WAAc,GAAA,MAAM,QAAS,CAAA,WAAA,CAAY,OAAO,CAAA,CAAA;AACtD,EAAM,MAAA,iCAAA,GAAoC,MAAM,cAAe,CAAA,SAAA;AAAA,IAC7D,CAAC,EAAE,UAAY,EAAAC,gEAAA,EAAgC,CAAA;AAAA,IAC/C;AAAA,MACE,WAAA;AAAA,KACF;AAAA,GACF,CAAA;AAEA,EAAA,IAAI,iCAAkC,CAAA,CAAC,CAAE,CAAA,MAAA,KAAWD,uCAAgB,KAAO,EAAA;AAEzE,IAAO,OAAA,WAAA,CAAA;AAAA,GACT;AAEA,EAAM,MAAA,wBAAA,GACJ,WAAY,CAAA,GAAA,CAAI,CAAe,UAAA,MAAA;AAAA,IAC7B,UAAA,EAAYE,yEAAuC,UAAU,CAAA;AAAA,GAC7D,CAAA,CAAA,CAAA;AAEJ,EAAA,MAAM,SAAY,GAAA,MAAM,cAAe,CAAA,SAAA,CAAU,wBAA0B,EAAA;AAAA,IACzE,WAAA;AAAA,GACD,CAAA,CAAA;AAED,EAAA,OAAO,WAAY,CAAA,MAAA;AAAA,IACjB,CAAC,CAAG,EAAA,GAAA,KAAQ,UAAU,GAAG,CAAA,CAAE,WAAWF,sCAAgB,CAAA,KAAA;AAAA,GACxD,CAAA;AACF,CAAA,CAAA;AAEA,MAAM,yBAA4B,GAAA,OAChC,OACA,EAAA,cAAA,EACA,UACA,SAC2C,KAAA;AAC3C,EAAI,IAAA,CAAC,UAAU,SAAW,EAAA;AACxB,IAAO,OAAA,SAAA,CAAA;AAAA,GACT;AAEA,EAAA,MAAM,wBAAwB,MAAM,2BAAA;AAAA,IAClC,OAAA;AAAA,IACA,cAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAU,CAAA,SAAA,CAAU,GAAI,CAAA,CAAA,CAAA,KAAK,EAAE,UAAU,CAAA;AAAA,GAC3C,CAAA;AAEA,EAAA,MAAM,QAAW,GAAA;AAAA,IACf,GAAG,SAAA;AAAA,IACH,SAAA,EAAW,UAAU,SAAU,CAAA,MAAA;AAAA,MAAO,CACpC,CAAA,KAAA,qBAAA,CAAsB,QAAS,CAAA,CAAA,CAAE,UAAU,CAAA;AAAA,KAC7C;AAAA,GACF,CAAA;AAEA,EAAO,OAAA,QAAA,CAAA;AACT,CAAA,CAAA;AAEA,eAAsB,oBACpB,OACiB,EAAA;AACjB,EAAM,MAAA;AAAA,IACJ,MAAA;AAAA,IACA,MAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,WAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAA;AAAA,GACE,GAAA,OAAA,CAAA;AACJ,EAAA,MAAM,cAAiB,GAAA,kBAAA,CAAmB,MAAQ,EAAA,MAAA,EAAQ,SAAS,CAAA,CAAA;AAEnE,EAAA,MAAM,SAAY,GAAA,MAAM,aAAc,CAAA,cAAA,CAAe,mBAAmB,CAAA,CAAA;AAExE,EAAM,MAAA,WAAA,GAAc,IAAIG,8CAAmB,CAAA;AAAA,IACzC,MAAA;AAAA,IACA,WAAa,EAAA,IAAA;AAAA,IACb,eAAiB,EAAA,QAAA;AAAA,GAClB,CAAA,CAAA;AAED,EAAA,MAAM,SAASC,cAAO,EAAA,CAAA;AACtB,EAAA,MAAM,+BAA+BC,sDAAkC,CAAA;AAAA,IACrE,WAAa,EAAAC,yDAAA;AAAA,GACd,CAAA,CAAA;AACD,EAAO,MAAA,CAAA,GAAA,CAAIC,wBAAQ,CAAA,IAAA,EAAM,CAAA,CAAA;AACzB,EAAA,MAAA,CAAO,IAAI,4BAA4B,CAAA,CAAA;AACvC,EAAA,MAAA,CAAO,GAAI,CAAA,YAAA,EAAcA,wBAAQ,CAAA,IAAA,EAAM,CAAA,CAAA;AACvC,EAAO,MAAA,CAAA,GAAA,CAAI,WAAWA,wBAAQ,CAAA,MAAA,CAAOC,oCAAmBC,aAAI,EAAM,QAAQ,CAAC,CAAC,CAAA,CAAA;AAC5E,EAAA,MAAA,CAAO,GAAI,CAAA,SAAA,EAAW,CAAC,CAAA,EAAG,QAAa,KAAA;AACrC,IAAA,MAAA,CAAO,KAAK,OAAO,CAAA,CAAA;AACnB,IAAA,QAAA,CAAS,IAAK,CAAA,EAAE,MAAQ,EAAA,IAAA,EAAM,CAAA,CAAA;AAAA,GAC/B,CAAA,CAAA;AAED,EAAA,MAAM,oBAAuC,IAAIC,mCAAA;AAAA,IAC/C,MAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA;AAAA,GACF,CAAA;AAEA,EAAA,mBAAA;AAAA,IACE,cAAA;AAAA,IACA,SAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA;AAAA,GACF,CAAA;AACA,EAAoB,mBAAA,CAAA,MAAA,EAAQ,SAAW,EAAA,iBAAA,EAAmB,WAAW,CAAA,CAAA;AAErE,EAAA,MAAA,CAAO,GAAI,CAAA,CAAC,GAAK,EAAA,GAAA,EAAK,IAAS,KAAA;AAC7B,IAAA,IAAI,CAAC,IAAM,EAAA;AACT,MAAM,MAAA,IAAI,MAAM,mBAAmB,CAAA,CAAA;AAAA,KACrC;AAEA,IAAO,OAAA,SAAA,CAAU,eACd,aAAc,CAAA,GAAA,EAAgB,KAAK,GAAK,EAAA,IAAI,CAC5C,CAAA,KAAA,CAAM,CAAS,KAAA,KAAA;AACd,MAAA,WAAA,CAAY,QAAS,CAAA;AAAA,QACnB,SAAW,EAAA,qBAAA;AAAA,QACX,KAAO,EAAA,YAAA;AAAA,QACP,MAAQ,EAAA,QAAA;AAAA,QACR,KAAO,EAAA,OAAA;AAAA,QACP,OAAS,EAAA,GAAA;AAAA,QACT,OAAA,EAAS,8CAA8C,GAAI,CAAA,IAAI,MAAM,KAAM,CAAA,OAAA,IAAW,KAAM,CAAA,IAAA,IAAQ,KAAK,CAAA,CAAA;AAAA,QACzG,MAAA,EAAQ,CAAC,KAAK,CAAA;AAAA,OACf,CAAA,CAAA;AAED,MAAA,IAAA,CAAK,KAAK,CAAA,CAAA;AAAA,KACX,CAAA,CAAA;AAAA,GACJ,CAAA,CAAA;AAED,EAAA,MAAM,aAAaC,gCAAkB,CAAA,MAAA,CAAO,EAAE,MAAA,EAAQ,QAAQ,CAAA,CAAA;AAE9D,EAAO,MAAA,CAAA,GAAA,CAAI,UAAW,CAAA,KAAA,EAAO,CAAA,CAAA;AAE7B,EAAO,OAAA,MAAA,CAAA;AACT,CAAA;AAEA,SAAS,kBAAA,CACP,MACA,EAAA,MAAA,EACA,SACgB,EAAA;AAChB,EAAM,MAAA,YAAA,GAAe,MAAO,CAAA,SAAA,CAAU,mCAAmC,CAAA,CAAA;AACzE,EAAA,MAAM,gBAAmB,GAAA,IAAIC,iCAAiB,CAAA,YAAA,EAAc,MAAM,CAAA,CAAA;AAClE,EAAA,MAAM,iBAAoB,GAAA,IAAIC,mCAAkB,CAAA,gBAAA,EAAkB,MAAM,CAAA,CAAA;AAExE,EAAA,MAAM,uBAAuB,IAAIC,yCAAA;AAAA,IAC/B,MAAA;AAAA,IACA,gBAAA;AAAA,IACA,iBAAA;AAAA,GACF,CAAA;AACA,EAAqB,oBAAA,CAAA,QAAA,CAAS,EAAE,SAAA,EAAsB,CAAA,CAAA;AAEtD,EAAA,MAAM,sBAAsB,IAAIC,uCAAA;AAAA,IAC9B,iBAAA;AAAA,IACA,gBAAA;AAAA,IACA,oBAAA;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,sBAAA,GAAyB,IAAIC,6CAAuB,EAAA,CAAA;AAE1D,EAAO,OAAA;AAAA,IACL,mBAAA;AAAA,IACA,sBAAA;AAAA,GACF,CAAA;AACF,CAAA;AAEA,eAAe,cACb,mBACoB,EAAA;AACpB,EAAM,MAAA,cAAA,GAAiB,IAAIC,6BAAe,CAAA;AAAA,IACxC,UAAY,EAAAC,iDAAA;AAAA,IACZ,MAAQ,EAAA,KAAA;AAAA,IACR,OAAS,EAAA;AAAA,MACP,MAAQ,EAAA,KAAA;AAAA,MACR,YAAc,EAAA,KAAA;AAAA,MACd,OAAS,EAAA,IAAA;AAAA,MACT,aAAe,EAAA,KAAA;AAAA,MACf,OAAS,EAAAC,mBAAA;AAAA;AAAA,KACX;AAAA,IACA,QAAU,EAAA;AAAA,MACR,cAAgB,EAAA,OACd,CACA,EAAA,IAAA,EACA,GACG,KAAA;AACH,QAAQ,OAAA,CAAA,GAAA,CAAI,gBAAkB,EAAA,CAAA,CAAE,SAAS,CAAA,CAAA;AACzC,QAAI,GAAA,CAAA,MAAA,CAAO,GAAG,CAAE,CAAA,IAAA,CAAK,EAAE,GAAK,EAAA,CAAA,CAAE,UAAW,CAAA,MAAA,EAAQ,CAAA,CAAA;AAAA,OACnD;AAAA,MACA,QAAU,EAAA,OAAO,EAAI,EAAA,GAAA,EAAsB,GAA0B,KAAA;AACnE,QAAI,GAAA,CAAA,MAAA,CAAO,GAAG,CAAA,CAAE,IAAK,CAAA,EAAE,KAAK,CAAG,EAAA,GAAA,CAAI,IAAI,CAAA,eAAA,CAAA,EAAmB,CAAA,CAAA;AAAA,OAC5D;AAAA,MACA,gBAAgB,OAAO,EAAA,EAAI,GAAsB,EAAA,GAAA,KAC/C,IAAI,MAAO,CAAA,GAAG,CAAE,CAAA,IAAA,CAAK,EAAE,GAAK,EAAA,CAAA,EAAG,GAAI,CAAA,IAAI,oBAAoB,CAAA;AAAA,KAC/D;AAAA,GACD,CAAA,CAAA;AACD,EAAA,MAAM,eAAe,IAAK,EAAA,CAAA;AAC1B,EAAM,MAAAC,IAAA,GAAK,IAAIC,KAAA,CAAG,mBAAmB,CAAA,CAAA;AACrC,EAAO,OAAA,MAAED,MAAI,cAAe,EAAA,CAAA;AAC9B,CAAA;AAKA,SAAS,mBACP,CAAA,QAAA,EACA,SACA,EAAA,WAAA,EACA,UACA,WACA,EAAA;AACA,EAAS,SAAA,uBAAA,CACP,YACA,EAAA,QAAA,EACA,GACA,EAAA;AACA,IAAM,MAAA,KAAA,GAAQ,IAAIE,kCAAkB,EAAA,CAAA;AACpC,IAAA,WAAA,CAAY,QAAS,CAAA;AAAA,MACnB,SAAA,EAAW,GAAG,YAAY,CAAA,WAAA,CAAA;AAAA,MAC1B,KAAO,EAAA,eAAA;AAAA,MACP,MAAQ,EAAA,QAAA;AAAA,MACR,KAAO,EAAA,OAAA;AAAA,MACP,OAAS,EAAA,GAAA;AAAA,MACT,QAAU,EAAA;AAAA,QACR,MAAQ,EAAA,GAAA;AAAA,QACR,IAAM,EAAA;AAAA,UACJ,MAAQ,EAAA;AAAA,YACN;AAAA,cACE,MAAM,KAAM,CAAA,IAAA;AAAA,cACZ,SAAS,KAAM,CAAA,OAAA;AAAA,aACjB;AAAA,WACF;AAAA,SACF;AAAA,OACF;AAAA,MACA,MAAA,EAAQ,CAAC,KAAK,CAAA;AAAA,MACd,OAAA,EAAS,gCAAgC,QAAQ,CAAA,SAAA,CAAA;AAAA,KAClD,CAAA,CAAA;AACD,IAAM,MAAA,KAAA,CAAA;AAAA,GACR;AAEA,EAAA,SAAS,oBACP,CAAA,KAAA,EACA,YACA,EAAA,QAAA,EACA,GACA,EAAA;AACA,IAAA,WAAA,CAAY,QAAS,CAAA;AAAA,MACnB,SAAA,EAAW,GAAG,YAAY,CAAA,WAAA,CAAA;AAAA,MAC1B,KAAO,EAAA,YAAA;AAAA,MACP,MAAQ,EAAA,QAAA;AAAA,MACR,KAAO,EAAA,OAAA;AAAA,MACP,OAAS,EAAA,GAAA;AAAA,MACT,QAAU,EAAA;AAAA,QACR,MAAQ,EAAA,GAAA;AAAA,QACR,IAAM,EAAA;AAAA,UACJ,MAAQ,EAAA;AAAA,YACN;AAAA,cACE,MAAM,KAAM,CAAA,IAAA;AAAA,cACZ,OAAA,EAAS,MAAM,OAAW,IAAAC,uCAAA;AAAA,aAC5B;AAAA,WACF;AAAA,SACF;AAAA,OACF;AAAA,MACA,MAAA,EAAQ,CAAC,KAAK,CAAA;AAAA,MACd,OAAA,EAAS,uCAAuC,QAAQ,CAAA,UAAA,CAAA;AAAA,KACzD,CAAA,CAAA;AAAA,GACH;AAGA,EAAA,SAAA,CAAU,cAAe,CAAA,QAAA;AAAA,IACvB,sBAAA;AAAA,IACA,OAAO,EAAA,EAAI,GAAK,EAAA,GAAA,EAAuB,IAAS,KAAA;AAC9C,MAAA,MAAM,YAAe,GAAA,sBAAA,CAAA;AACrB,MAAA,MAAM,QAAW,GAAA,wBAAA,CAAA;AAEjB,MAAA,WAAA,CAAY,QAAS,CAAA;AAAA,QACnB,SAAW,EAAA,sBAAA;AAAA,QACX,KAAO,EAAA,OAAA;AAAA,QACP,MAAQ,EAAA,WAAA;AAAA,QACR,KAAO,EAAA,OAAA;AAAA,QACP,OAAS,EAAA,GAAA;AAAA,QACT,OAAA,EAAS,wBAAwB,QAAQ,CAAA,UAAA,CAAA;AAAA,OAC1C,CAAA,CAAA;AAED,MAAI,IAAA;AACF,QAAM,MAAA,MAAA,GAAS,MAAM,SAAA,CAAU,EAAG,CAAA,oBAAA;AAAA,UAChCC,2BAAgB,GAAG,CAAA;AAAA,UACnB,kBAAkB,GAAG,CAAA;AAAA,SACvB,CAAA;AAEA,QAAA,MAAM,YAAY,MAAM,yBAAA;AAAA,UACtB,GAAA;AAAA,UACA,WAAA;AAAA,UACA,QAAA;AAAA,UACA,MAAA;AAAA,SACF,CAAA;AACA,QAAA,GAAA,CAAI,KAAK,SAAS,CAAA,CAAA;AAAA,eACX,KAAO,EAAA;AACd,QAAqB,oBAAA,CAAA,KAAA,EAAO,YAAc,EAAA,QAAA,EAAU,GAAG,CAAA,CAAA;AACvD,QAAA,IAAA,CAAK,KAAK,CAAA,CAAA;AAAA,OACZ;AAAA,KACF;AAAA,GACF,CAAA;AAGA,EAAA,SAAA,CAAU,cAAe,CAAA,QAAA;AAAA,IACvB,uBAAA;AAAA,IACA,OAAO,CAAA,EAAG,IAAM,EAAA,GAAA,EAAK,IAAS,KAAA;AAC5B,MAAM,MAAA,UAAA,GAAa,CAAE,CAAA,OAAA,CAAQ,MAAO,CAAA,UAAA,CAAA;AACpC,MAAA,MAAM,YAAe,GAAA,uBAAA,CAAA;AACrB,MAAM,MAAA,QAAA,GAAW,iBAAiB,UAAU,CAAA,OAAA,CAAA,CAAA;AAE5C,MAAA,WAAA,CAAY,QAAS,CAAA;AAAA,QACnB,SAAW,EAAA,YAAA;AAAA,QACX,KAAO,EAAA,OAAA;AAAA,QACP,MAAQ,EAAA,WAAA;AAAA,QACR,KAAO,EAAA,OAAA;AAAA,QACP,OAAS,EAAA,IAAA;AAAA,QACT,OAAA,EAAS,wBAAwB,QAAQ,CAAA,UAAA,CAAA;AAAA,OAC1C,CAAA,CAAA;AAED,MAAA,MAAM,WAAW,MAAM,SAAA;AAAA,QACrB,IAAA;AAAA,QACA;AAAA,UACEvB,gEAAA;AAAA,UACAC,yEAAuC,UAAU,CAAA;AAAA,SACnD;AAAA,QACA,WAAA;AAAA,QACA,QAAA;AAAA,OACF,CAAA;AACA,MAAI,IAAA,QAAA,CAAS,MAAW,KAAAF,sCAAA,CAAgB,IAAM,EAAA;AAC5C,QAAwB,uBAAA,CAAA,YAAA,EAAc,UAAU,IAAI,CAAA,CAAA;AAAA,OACtD;AAEA,MAAI,IAAA;AACF,QAAA,MAAM,MAAS,GAAA,MAAM,SAAU,CAAA,EAAA,CAAG,sBAAsB,UAAU,CAAA,CAAA;AAClE,QAAA,GAAA,CAAI,OAAO,GAAG,CAAA,CAAE,YAAY,YAAY,CAAA,CAAE,KAAK,MAAM,CAAA,CAAA;AAAA,eAC9C,KAAO,EAAA;AACd,QAAqB,oBAAA,CAAA,KAAA,EAAO,YAAc,EAAA,QAAA,EAAU,IAAI,CAAA,CAAA;AACxD,QAAA,IAAA,CAAK,KAAK,CAAA,CAAA;AAAA,OACZ;AAAA,KACF;AAAA,GACF,CAAA;AAGA,EAAA,SAAA,CAAU,cAAe,CAAA,QAAA;AAAA,IACvB,iBAAA;AAAA,IACA,OAAO,CAAA,EAAG,GAAsB,EAAA,GAAA,EAAuB,IAAS,KAAA;AAC9D,MAAM,MAAA,UAAA,GAAa,CAAE,CAAA,OAAA,CAAQ,MAAO,CAAA,UAAA,CAAA;AACpC,MAAA,MAAM,YAAe,GAAA,iBAAA,CAAA;AACrB,MAAM,MAAA,QAAA,GAAW,iBAAiB,UAAU,CAAA,QAAA,CAAA,CAAA;AAE5C,MAAA,WAAA,CAAY,QAAS,CAAA;AAAA,QACnB,SAAW,EAAA,YAAA;AAAA,QACX,KAAO,EAAA,OAAA;AAAA,QACP,MAAQ,EAAA,WAAA;AAAA,QACR,KAAO,EAAA,OAAA;AAAA,QACP,OAAS,EAAA,GAAA;AAAA,QACT,OAAA,EAAS,wBAAwB,QAAQ,CAAA,UAAA,CAAA;AAAA,OAC1C,CAAA,CAAA;AAED,MAAA,MAAM,WAAW,MAAM,SAAA;AAAA,QACrB,GAAA;AAAA,QACA;AAAA,UACEyB,mEAAA;AAAA,UACAC,4EAA0C,UAAU,CAAA;AAAA,SACtD;AAAA,QACA,WAAA;AAAA,QACA,QAAA;AAAA,OACF,CAAA;AACA,MAAI,IAAA,QAAA,CAAS,MAAW,KAAA1B,sCAAA,CAAgB,IAAM,EAAA;AAC5C,QAAwB,uBAAA,CAAA,YAAA,EAAc,UAAU,GAAG,CAAA,CAAA;AAAA,OACrD;AAEA,MAAM,MAAA,WAAA,GAAc,UAAU,EAAG,CAAA,iBAAA;AAAA,QAC/B,CAAE,CAAA,OAAA;AAAA,QACF2B,0DAAA;AAAA,OACF,CAAA;AAEA,MAAA,MAAM,4BAA4B,GAAI,CAAA,IAAA,CAAA;AAEtC,MAAA,OAAO,UAAU,EACd,CAAA,eAAA,CAAgB,2BAA2B,UAAY,EAAA,WAAW,EAClE,IAAK,CAAA,CAAA,MAAA,KAAU,GAAI,CAAA,MAAA,CAAO,GAAG,CAAE,CAAA,IAAA,CAAK,MAAM,CAAC,CAAA,CAC3C,MAAM,CAAS,KAAA,KAAA;AACd,QAAqB,oBAAA,CAAA,KAAA,EAAO,YAAc,EAAA,QAAA,EAAU,GAAG,CAAA,CAAA;AACvD,QAAA,IAAA,CAAK,KAAK,CAAA,CAAA;AAAA,OACX,CAAA,CAAA;AAAA,KACL;AAAA,GACF,CAAA;AAGA,EAAA,SAAA,CAAU,cAAe,CAAA,QAAA;AAAA,IACvB,mBAAA;AAAA,IACA,OAAO,CAAA,EAAG,GAAsB,EAAA,GAAA,EAAuB,IAAS,KAAA;AAC9D,MAAM,MAAA,UAAA,GAAa,CAAE,CAAA,OAAA,CAAQ,MAAO,CAAA,UAAA,CAAA;AACpC,MAAM,MAAA,UAAA,GAAa,CAAE,CAAA,OAAA,CAAQ,MAAO,CAAA,UAAA,CAAA;AACpC,MAAA,MAAM,YAAe,GAAA,mBAAA,CAAA;AACrB,MAAA,MAAM,QAAW,GAAA,CAAA,cAAA,EAAiB,UAAU,CAAA,CAAA,EAAI,UAAU,CAAA,UAAA,CAAA,CAAA;AAE1D,MAAA,WAAA,CAAY,QAAS,CAAA;AAAA,QACnB,SAAW,EAAA,YAAA;AAAA,QACX,KAAO,EAAA,OAAA;AAAA,QACP,MAAQ,EAAA,WAAA;AAAA,QACR,KAAO,EAAA,OAAA;AAAA,QACP,OAAS,EAAA,GAAA;AAAA,QACT,OAAA,EAAS,wBAAwB,QAAQ,CAAA,UAAA,CAAA;AAAA,OAC1C,CAAA,CAAA;AAED,MAAA,MAAM,WAAW,MAAM,SAAA;AAAA,QACrB,GAAA;AAAA,QACA;AAAA,UACEF,mEAAA;AAAA,UACAC,4EAA0C,UAAU,CAAA;AAAA,SACtD;AAAA,QACA,WAAA;AAAA,QACA,QAAA;AAAA,OACF,CAAA;AACA,MAAI,IAAA,QAAA,CAAS,MAAW,KAAA1B,sCAAA,CAAgB,IAAM,EAAA;AAC5C,QAAwB,uBAAA,CAAA,YAAA,EAAc,UAAU,GAAG,CAAA,CAAA;AAAA,OACrD;AAEA,MAAA,MAAM,UAAU,EACb,CAAA,iBAAA,CAAkB,UAAY,EAAA,UAAU,EACxC,IAAK,CAAA,CAAA,MAAA,KAAU,GAAI,CAAA,MAAA,CAAO,GAAG,CAAE,CAAA,IAAA,CAAK,MAAM,CAAC,CAAA,CAC3C,MAAM,CAAS,KAAA,KAAA;AACd,QAAqB,oBAAA,CAAA,KAAA,EAAO,YAAc,EAAA,QAAA,EAAU,GAAG,CAAA,CAAA;AACvD,QAAA,IAAA,CAAK,KAAK,CAAA,CAAA;AAAA,OACX,CAAA,CAAA;AAAA,KACL;AAAA,GACF,CAAA;AAGA,EAAA,SAAA,CAAU,cAAe,CAAA,QAAA;AAAA,IACvB,yBAAA;AAAA,IACA,OAAO,CAAA,EAAG,IAAuB,EAAA,GAAA,EAAuB,IAAS,KAAA;AAC/D,MAAM,MAAA,UAAA,GAAa,CAAE,CAAA,OAAA,CAAQ,MAAO,CAAA,UAAA,CAAA;AACpC,MAAA,MAAM,YAAe,GAAA,yBAAA,CAAA;AACrB,MAAM,MAAA,QAAA,GAAW,iBAAiB,UAAU,CAAA,SAAA,CAAA,CAAA;AAE5C,MAAA,WAAA,CAAY,QAAS,CAAA;AAAA,QACnB,SAAW,EAAA,YAAA;AAAA,QACX,KAAO,EAAA,OAAA;AAAA,QACP,MAAQ,EAAA,WAAA;AAAA,QACR,KAAO,EAAA,OAAA;AAAA,QACP,OAAS,EAAA,IAAA;AAAA,QACT,OAAA,EAAS,wBAAwB,QAAQ,CAAA,UAAA,CAAA;AAAA,OAC1C,CAAA,CAAA;AAED,MAAA,MAAM,WAAW,MAAM,SAAA;AAAA,QACrB,IAAA;AAAA,QACA;AAAA,UACEC,gEAAA;AAAA,UACAC,yEAAuC,UAAU,CAAA;AAAA,SACnD;AAAA,QACA,WAAA;AAAA,QACA,QAAA;AAAA,OACF,CAAA;AACA,MAAI,IAAA,QAAA,CAAS,MAAW,KAAAF,sCAAA,CAAgB,IAAM,EAAA;AAC5C,QAAwB,uBAAA,CAAA,YAAA,EAAc,UAAU,IAAI,CAAA,CAAA;AAAA,OACtD;AAEA,MAAA,OAAO,SAAU,CAAA,EAAA,CACd,uBAAwB,CAAA,UAAU,CAClC,CAAA,IAAA,CAAK,CAAU,MAAA,KAAA,GAAA,CAAI,IAAK,CAAA,MAAM,CAAC,CAAA,CAC/B,MAAM,CAAS,KAAA,KAAA;AACd,QAAqB,oBAAA,CAAA,KAAA,EAAO,YAAc,EAAA,QAAA,EAAU,IAAI,CAAA,CAAA;AACxD,QAAA,IAAA,CAAK,KAAK,CAAA,CAAA;AAAA,OACX,CAAA,CAAA;AAAA,KACL;AAAA,GACF,CAAA;AAGA,EAAA,SAAA,CAAU,cAAe,CAAA,QAAA;AAAA,IACvB,qBAAA;AAAA,IACA,OAAO,EAAA,EAAI,IAAuB,EAAA,GAAA,EAAuB,IAAS,KAAA;AAChE,MAAA,MAAM,YAAe,GAAA,qBAAA,CAAA;AACrB,MAAA,MAAM,QAAW,GAAA,kCAAA,CAAA;AAEjB,MAAA,WAAA,CAAY,QAAS,CAAA;AAAA,QACnB,SAAW,EAAA,YAAA;AAAA,QACX,KAAO,EAAA,OAAA;AAAA,QACP,MAAQ,EAAA,WAAA;AAAA,QACR,KAAO,EAAA,OAAA;AAAA,QACP,OAAS,EAAA,IAAA;AAAA,QACT,OAAA,EAAS,wBAAwB,QAAQ,CAAA,UAAA,CAAA;AAAA,OAC1C,CAAA,CAAA;AAGD,MAAA,OAAO,SAAU,CAAA,EAAA,CACd,mBAAoB,EAAA,CACpB,KAAK,CAAU,MAAA,KAAA,GAAA,CAAI,MAAO,CAAA,GAAG,EAAE,IAAK,CAAA,MAAM,CAAC,CAAA,CAC3C,MAAM,CAAS,KAAA,KAAA;AACd,QAAqB,oBAAA,CAAA,KAAA,EAAO,YAAc,EAAA,QAAA,EAAU,IAAI,CAAA,CAAA;AACxD,QAAA,IAAA,CAAK,KAAK,CAAA,CAAA;AAAA,OACX,CAAA,CAAA;AAAA,KACL;AAAA,GACF,CAAA;AAGA,EAAA,SAAA,CAAU,cAAe,CAAA,QAAA;AAAA,IACvB,4BAAA;AAAA,IACA,OAAO,CAAA,EAAG,GAAsB,EAAA,GAAA,EAAuB,IAAS,KAAA;AAC9D,MAAM,MAAA,UAAA,GAAa,CAAE,CAAA,OAAA,CAAQ,MAAO,CAAA,UAAA,CAAA;AACpC,MAAM,MAAA,UAAA,GAAa,CAAE,CAAA,OAAA,CAAQ,KAAM,CAAA,UAAA,CAAA;AACnC,MAAA,MAAM,YAAe,GAAA,4BAAA,CAAA;AACrB,MAAM,MAAA,QAAA,GAAW,iBAAiB,UAAU,CAAA,YAAA,CAAA,CAAA;AAC5C,MAAI,IAAA;AACF,QAAA,WAAA,CAAY,QAAS,CAAA;AAAA,UACnB,SAAW,EAAA,YAAA;AAAA,UACX,KAAO,EAAA,OAAA;AAAA,UACP,MAAQ,EAAA,WAAA;AAAA,UACR,KAAO,EAAA,OAAA;AAAA,UACP,OAAS,EAAA,GAAA;AAAA,UACT,OAAA,EAAS,wBAAwB,QAAQ,CAAA,UAAA,CAAA;AAAA,SAC1C,CAAA,CAAA;AACD,QAAA,MAAM,WAAW,MAAM,SAAA;AAAA,UACrB,GAAA;AAAA,UACA;AAAA,YACEC,gEAAA;AAAA,YACAC,yEAAuC,UAAU,CAAA;AAAA,WACnD;AAAA,UACA,WAAA;AAAA,UACA,QAAA;AAAA,SACF,CAAA;AACA,QAAI,IAAA,QAAA,CAAS,MAAW,KAAAF,sCAAA,CAAgB,IAAM,EAAA;AAC5C,UAAwB,uBAAA,CAAA,YAAA,EAAc,UAAU,GAAG,CAAA,CAAA;AAAA,SACrD;AAEA,QAAA,MAAM,kBACJ,GAAA,MAAM,QAAS,CAAA,mBAAA,CAAoB,iBAAkB,CAAA;AAAA,UACnD,YAAc,EAAA,UAAA;AAAA,UACd,YAAc,EAAA,OAAA;AAAA,SACf,CAAA,CAAA;AAEH,QAAA,IAAI,CAAC,kBAAoB,EAAA;AACvB,UAAA,MAAM,IAAI,KAAA;AAAA,YACR,8CAA8C,UAAU,CAAA,CAAA;AAAA,WAC1D,CAAA;AAAA,SACF;AACA,QAAA,MAAM,aAAa,kBAAmB,CAAA,UAAA,CAAA;AACtC,QAAA,IAAI,CAAC,UAAY,EAAA;AACf,UAAA,MAAM,IAAI,KAAA;AAAA,YACR,2CAA2C,UAAU,CAAA,CAAA;AAAA,WACvD,CAAA;AAAA,SACF;AAEA,QAAA,MAAM,UACJ,GAAA,MAAM,QAAS,CAAA,mBAAA,CAAoB,uBAAwB,CAAA;AAAA,UACzD,YAAc,EAAA,UAAA;AAAA,UACd,YAAc,EAAA,OAAA;AAAA,SACf,CAAA,CAAA;AAEH,QAAA,IAAI,CAAC,UAAY,EAAA;AACf,UAAA,MAAM,IAAI,KAAA;AAAA,YACR,gEAAA;AAAA,WACF,CAAA;AAAA,SACF;AAEA,QAAI,IAAA,CAAC,WAAW,eAAiB,EAAA;AAC/B,UAAA,GAAA,CAAI,MAAO,CAAA,GAAG,CAAE,CAAA,IAAA,CAAK,EAAE,CAAA,CAAA;AACvB,UAAA,OAAA;AAAA,SACF;AAEA,QAAA,MAAM,iBAAoB,GAAA,UAAA,GACtB,MAAM,QAAA,CAAS,oBAAoB,sBAAuB,CAAA;AAAA,UACxD,UAAA;AAAA,UACA,YAAc,EAAA,OAAA;AAAA,SACf,CACD,GAAA,KAAA,CAAA,CAAA;AAEJ,QAAM,MAAA,YAAA,GAAe,iBACjB,GAAA,QAAA,CAAS,sBAAuB,CAAA,mBAAA;AAAA,UAC9B,iBAAA;AAAA,SAEF,GAAA,KAAA,CAAA,CAAA;AAEJ,QAAM,MAAA,YAAA,GAAe,MAAM,SAAA,CAAU,EAClC,CAAA,0BAAA,CAA2B,YAAY,UAAU,CAAA,CACjD,KAAM,CAAA,CAAC,KAA+B,KAAA;AACrC,UAAqB,oBAAA,CAAA,KAAA,EAAO,YAAc,EAAA,QAAA,EAAU,GAAG,CAAA,CAAA;AACvD,UAAI,GAAA,CAAA,MAAA,CAAO,GAAG,CAAA,CAAE,IAAK,CAAA;AAAA,YACnB,OAAA,EAAS,MAAM,OAAW,IAAAuB,uCAAA;AAAA,WAC3B,CAAA,CAAA;AAAA,SACF,CAAA,CAAA;AAEH,QACE,IAAA,CAAC,gBACD,CAAC,YAAA,CAAa,eACd,CAAC,YAAA,CAAa,YAAY,UAC1B,EAAA;AACA,UAAA,GAAA,CAAI,MAAO,CAAA,GAAG,CAAE,CAAA,IAAA,CAAK,EAAE,CAAA,CAAA;AACvB,UAAA,OAAA;AAAA,SACF;AAEA,QAAM,MAAA,gBAAA,GAAmB,aAAa,WAAY,CAAA,UAAA,CAAA;AAClD,QAAI,IAAA,SAAA,CAAA;AAEJ,QAAA,IAAI,YAAc,EAAA;AAChB,UAAA,SAAA,GAAY,MAAO,CAAA,IAAA,CAAK,gBAAgB,CAAA,CACrC,MAAO,CAAA,CAAA,CAAA,KAAK,CAAK,IAAA,YAAY,CAC7B,CAAA,MAAA,CAAO,CAAC,MAAA,EAAQ,CAAM,KAAA;AACrB,YAAI,IAAA,CAAC,YAAa,CAAA,CAAC,CAAG,EAAA;AACpB,cAAO,OAAA,MAAA,CAAA;AAAA,aACT;AACA,YAAO,MAAA,CAAA,CAAC,CAAI,GAAA,YAAA,CAAa,CAAC,CAAA,CAAA;AAC1B,YAAO,OAAA,MAAA,CAAA;AAAA,WACT,EAAG,EAAgB,CAAA,CAAA;AAAA,SACvB;AAEA,QAAI,GAAA,CAAA,MAAA,CAAO,GAAG,CAAA,CAAE,IAAK,CAAA;AAAA,UACnB,aAAa,YAAa,CAAA,WAAA;AAAA,UAC1B,IAAM,EAAA,SAAA;AAAA,SACP,CAAA,CAAA;AAAA,eACM,GAAK,EAAA;AACZ,QAAqB,oBAAA,CAAA,GAAA,EAAK,YAAc,EAAA,QAAA,EAAU,GAAG,CAAA,CAAA;AACrD,QAAA,IAAA,CAAK,GAAG,CAAA,CAAA;AAAA,OACV;AAAA,KACF;AAAA,GACF,CAAA;AAGA,EAAA,SAAA,CAAU,cAAe,CAAA,QAAA;AAAA,IACvB,sBAAA;AAAA,IACA,OAAO,CAAA,EAAG,GAAsB,EAAA,GAAA,EAAuB,IAAS,KAAA;AAC9D,MAAA,MAAM,YAAe,GAAA,sBAAA,CAAA;AACrB,MAAM,MAAA,UAAA,GAAa,CAAE,CAAA,OAAA,CAAQ,MAAO,CAAA,UAAA,CAAA;AACpC,MAAM,MAAA,QAAA,GAAW,iBAAiB,UAAU,CAAA,UAAA,CAAA,CAAA;AAE5C,MAAA,WAAA,CAAY,QAAS,CAAA;AAAA,QACnB,SAAW,EAAA,YAAA;AAAA,QACX,KAAO,EAAA,OAAA;AAAA,QACP,MAAQ,EAAA,WAAA;AAAA,QACR,KAAO,EAAA,OAAA;AAAA,QACP,OAAS,EAAA,GAAA;AAAA,QACT,OAAA,EAAS,wBAAwB,QAAQ,CAAA,UAAA,CAAA;AAAA,OAC1C,CAAA,CAAA;AAED,MAAA,MAAM,WAAW,MAAM,SAAA;AAAA,QACrB,GAAA;AAAA,QACA;AAAA,UACEtB,gEAAA;AAAA,UACAC,yEAAuC,UAAU,CAAA;AAAA,SACnD;AAAA,QACA,WAAA;AAAA,QACA,QAAA;AAAA,OACF,CAAA;AACA,MAAI,IAAA,QAAA,CAAS,MAAW,KAAAF,sCAAA,CAAgB,IAAM,EAAA;AAC5C,QAAwB,uBAAA,CAAA,YAAA,EAAc,UAAU,GAAG,CAAA,CAAA;AAAA,OACrD;AACA,MAAO,OAAA,SAAA,CAAU,GACd,YAAa,CAAAwB,0BAAA,CAAgB,GAAG,CAAG,EAAA,iBAAA,CAAkB,GAAG,CAAG,EAAA;AAAA,QAC1D,UAAA;AAAA,OACD,CACA,CAAA,IAAA,CAAK,CAAU,MAAA,KAAA,GAAA,CAAI,KAAK,MAAM,CAAC,CAC/B,CAAA,KAAA,CAAM,CAAS,KAAA,KAAA;AACd,QAAqB,oBAAA,CAAA,KAAA,EAAO,YAAc,EAAA,QAAA,EAAU,GAAG,CAAA,CAAA;AACvD,QAAA,IAAA,CAAK,KAAK,CAAA,CAAA;AAAA,OACX,CAAA,CAAA;AAAA,KACL;AAAA,GACF,CAAA;AAGA,EAAA,SAAA,CAAU,cAAe,CAAA,QAAA;AAAA,IACvB,cAAA;AAAA,IACA,OAAO,EAAA,EAAI,GAAsB,EAAA,GAAA,EAAuB,IAAS,KAAA;AAC/D,MAAA,MAAM,YAAe,GAAA,cAAA,CAAA;AACrB,MAAA,MAAM,QAAW,GAAA,CAAA,uBAAA,CAAA,CAAA;AAEjB,MAAA,WAAA,CAAY,QAAS,CAAA;AAAA,QACnB,SAAW,EAAA,YAAA;AAAA,QACX,KAAO,EAAA,OAAA;AAAA,QACP,MAAQ,EAAA,WAAA;AAAA,QACR,KAAO,EAAA,OAAA;AAAA,QACP,OAAS,EAAA,GAAA;AAAA,QACT,OAAA,EAAS,wBAAwB,QAAQ,CAAA,UAAA,CAAA;AAAA,OAC1C,CAAA,CAAA;AAED,MAAI,IAAA;AAEF,QAAM,MAAA,cAAA,GAAiB,SAAU,CAAA,EAAA,CAAG,cAAe,EAAA,CAAA;AACnD,QAAA,MAAM,wBACJ,MAAM,2BAAA;AAAA,UACJ,GAAA;AAAA,UACA,WAAA;AAAA,UACA,QAAA;AAAA,UACA,cAAA;AAAA,SACF,CAAA;AAEF,QAAM,MAAA,MAAA,GAAS,MAAM,SAAA,CAAU,EAAG,CAAA,YAAA;AAAA,UAChCA,2BAAgB,GAAG,CAAA;AAAA,UACnB,kBAAkB,GAAG,CAAA;AAAA,UACrB,qBAAA;AAAA,SACF,CAAA;AAEA,QAAA,GAAA,CAAI,KAAK,MAAM,CAAA,CAAA;AAAA,eACR,KAAO,EAAA;AACd,QAAqB,oBAAA,CAAA,KAAA,EAAO,YAAc,EAAA,QAAA,EAAU,GAAG,CAAA,CAAA;AACvD,QAAA,IAAA,CAAK,KAAK,CAAA,CAAA;AAAA,OACZ;AAAA,KACF;AAAA,GACF,CAAA;AAGA,EAAA,SAAA,CAAU,cAAe,CAAA,QAAA;AAAA,IACvB,iBAAA;AAAA,IACA,OAAO,CAAA,EAAG,IAAuB,EAAA,GAAA,EAAuB,IAAS,KAAA;AAC/D,MAAM,MAAA,UAAA,GAAa,CAAE,CAAA,OAAA,CAAQ,MAAO,CAAA,UAAA,CAAA;AACpC,MAAA,MAAM,YAAe,GAAA,iBAAA,CAAA;AACrB,MAAM,MAAA,QAAA,GAAW,2BAA2B,UAAU,CAAA,CAAA,CAAA;AAEtD,MAAA,WAAA,CAAY,QAAS,CAAA;AAAA,QACnB,SAAW,EAAA,YAAA;AAAA,QACX,KAAO,EAAA,OAAA;AAAA,QACP,MAAQ,EAAA,WAAA;AAAA,QACR,KAAO,EAAA,OAAA;AAAA,QACP,OAAS,EAAA,IAAA;AAAA,QACT,OAAA,EAAS,wBAAwB,QAAQ,CAAA,UAAA,CAAA;AAAA,OAC1C,CAAA,CAAA;AAED,MAAM,MAAA,iBAAA,GAAoB,UAAU,EAAG,CAAA,iBAAA;AAAA,QACrC,CAAE,CAAA,OAAA;AAAA,QACFI,gEAAA;AAAA,OACF,CAAA;AAEA,MAAI,IAAA;AACF,QAAM,MAAA,gBAAA,GAAmB,MAAM,SAAA,CAAU,EAAG,CAAA,eAAA;AAAA,UAC1C,UAAA;AAAA,UACA,CAAC,CAAC,iBAAA;AAAA,SACJ,CAAA;AAEA,QAAM,MAAA,UAAA,GAAa,iBAAiB,QAAS,CAAA,SAAA,CAAA;AAE7C,QAAA,MAAM,WAAW,MAAM,SAAA;AAAA,UACrB,IAAA;AAAA,UACA;AAAA,YACE3B,gEAAA;AAAA,YACAC,yEAAuC,UAAU,CAAA;AAAA,WACnD;AAAA,UACA,WAAA;AAAA,UACA,QAAA;AAAA,SACF,CAAA;AACA,QAAI,IAAA,QAAA,CAAS,MAAW,KAAAF,sCAAA,CAAgB,IAAM,EAAA;AAC5C,UAAwB,uBAAA,CAAA,YAAA,EAAc,UAAU,IAAI,CAAA,CAAA;AAAA,SACtD;AAEA,QAAA,GAAA,CAAI,MAAO,CAAA,GAAG,CAAE,CAAA,IAAA,CAAK,gBAAgB,CAAA,CAAA;AAAA,eAC9B,KAAO,EAAA;AACd,QAAqB,oBAAA,CAAA,KAAA,EAAO,YAAc,EAAA,QAAA,EAAU,IAAI,CAAA,CAAA;AACxD,QAAA,IAAA,CAAK,KAAK,CAAA,CAAA;AAAA,OACZ;AAAA,KACF;AAAA,GACF,CAAA;AAGA,EAAA,SAAA,CAAU,cAAe,CAAA,QAAA;AAAA,IACvB,eAAA;AAAA,IACA,OAAO,CAAA,EAAG,IAAM,EAAA,GAAA,EAAK,IAAS,KAAA;AAC5B,MAAM,MAAA,UAAA,GAAa,CAAE,CAAA,OAAA,CAAQ,MAAO,CAAA,UAAA,CAAA;AACpC,MAAA,MAAM,YAAe,GAAA,eAAA,CAAA;AACrB,MAAM,MAAA,QAAA,GAAW,2BAA2B,UAAU,CAAA,MAAA,CAAA,CAAA;AAEtD,MAAA,WAAA,CAAY,QAAS,CAAA;AAAA,QACnB,SAAW,EAAA,YAAA;AAAA,QACX,KAAO,EAAA,OAAA;AAAA,QACP,MAAQ,EAAA,WAAA;AAAA,QACR,KAAO,EAAA,OAAA;AAAA,QACP,OAAS,EAAA,IAAA;AAAA,QACT,OAAA,EAAS,wBAAwB,QAAQ,CAAA,UAAA,CAAA;AAAA,OAC1C,CAAA,CAAA;AAED,MAAI,IAAA;AACF,QAAA,MAAM,gBAAmB,GAAA,MAAM,SAAU,CAAA,EAAA,CAAG,gBAAgB,UAAU,CAAA,CAAA;AACtE,QAAM,MAAA,UAAA,GAAa,iBAAiB,QAAS,CAAA,SAAA,CAAA;AAE7C,QAAA,MAAM,WAAW,MAAM,SAAA;AAAA,UACrB,IAAA;AAAA,UACA;AAAA,YACEyB,mEAAA;AAAA,YACAC,4EAA0C,UAAU,CAAA;AAAA,WACtD;AAAA,UACA,WAAA;AAAA,UACA,QAAA;AAAA,SACF,CAAA;AACA,QAAI,IAAA,QAAA,CAAS,MAAW,KAAA1B,sCAAA,CAAgB,IAAM,EAAA;AAC5C,UAAwB,uBAAA,CAAA,YAAA,EAAc,UAAU,IAAI,CAAA,CAAA;AAAA,SACtD;AAEA,QAAA,MAAM,MAAS,GAAA,MAAM,SAAU,CAAA,EAAA,CAAG,cAAc,UAAU,CAAA,CAAA;AAC1D,QAAA,GAAA,CAAI,MAAO,CAAA,GAAG,CAAE,CAAA,IAAA,CAAK,MAAM,CAAA,CAAA;AAAA,eACpB,KAAO,EAAA;AACd,QAAqB,oBAAA,CAAA,KAAA,EAAO,YAAc,EAAA,QAAA,EAAU,IAAI,CAAA,CAAA;AACxD,QAAA,IAAA,CAAK,KAAK,CAAA,CAAA;AAAA,OACZ;AAAA,KACF;AAAA,GACF,CAAA;AACF,CAAA;AAKA,SAAS,mBACP,CAAA,MAAA,EACA,SACA,EAAA,iBAAA,EACA,WACA,EAAA;AACA,EAAA,MAAA,CAAO,GAAI,CAAA,UAAA,EAAY,OAAO,GAAA,EAAK,GAAQ,KAAA;AACzC,IAAA,WAAA,CAAY,QAAS,CAAA;AAAA,MACnB,SAAW,EAAA,oBAAA;AAAA,MACX,KAAO,EAAA,OAAA;AAAA,MACP,MAAQ,EAAA,WAAA;AAAA,MACR,KAAO,EAAA,OAAA;AAAA,MACP,OAAS,EAAA,GAAA;AAAA,MACT,OAAS,EAAA,CAAA,uCAAA,CAAA;AAAA,KACV,CAAA,CAAA;AACD,IAAA,MAAM,aAAgB,GAAA,MAAM,SAAU,CAAA,UAAA,CAAW,YAAY,CAAA,CAAA;AAC7D,IAAA,MAAM,QAAW,GAAA,MAAM,KAAM,CAAA,CAAA,EAAG,aAAa,CAAa,WAAA,CAAA,CAAA,CAAA;AAC1D,IAAM,MAAA,IAAA,GAAO,MAAM,QAAA,CAAS,IAAK,EAAA,CAAA;AACjC,IAAA,GAAA,CAAI,MAAO,CAAA,QAAA,CAAS,MAAM,CAAA,CAAE,KAAK,IAAI,CAAA,CAAA;AAAA,GACtC,CAAA,CAAA;AAED,EAAA,MAAA,CAAO,IAAK,CAAA,oBAAA,EAAsB,OAAO,GAAA,EAAK,GAAQ,KAAA;AACpD,IAAM,MAAA,EAAE,QAAS,EAAA,GAAI,GAAI,CAAA,MAAA,CAAA;AACzB,IAAA,WAAA,CAAY,QAAS,CAAA;AAAA,MACnB,SAAW,EAAA,4BAAA;AAAA,MACX,KAAO,EAAA,OAAA;AAAA,MACP,MAAQ,EAAA,WAAA;AAAA,MACR,KAAO,EAAA,OAAA;AAAA,MACP,OAAS,EAAA,GAAA;AAAA,MACT,OAAA,EAAS,iCAAiC,QAAQ,CAAA,UAAA,CAAA;AAAA,KACnD,CAAA,CAAA;AACD,IAAM,MAAA,UAAA,GAAiC,GAAI,CAAA,MAAA,CAAO,sBAAsB,CAAA,CAAA;AACxE,IAAM,MAAA,IAAA,GAAoB,MAAM,GAAI,CAAA,IAAA,CAAA;AAEpC,IAAA,MAAM,eAAe,MAAO,CAAA,WAAA;AAAA,MAC1B,MAAA,CAAO,OAAQ,CAAA,IAAI,CAAE,CAAA,MAAA;AAAA,QACnB,CAAC,GAAG,KAAK,CAAM,KAAA,KAAA,KAAU,UAAa,KAAU,KAAA,IAAA;AAAA,OAClD;AAAA,KACF,CAAA;AAEA,IAAM,MAAA,MAAA,GAAoB,MAAM,iBAAA,CAAkB,aAAc,CAAA;AAAA,MAC9D,QAAA;AAAA,MACA,UAAA;AAAA,MACA,KAAO,EAAA,YAAA;AAAA,KACR,CAAA,CAAA;AACD,IAAA,GAAA,CAAI,MAAO,CAAA,GAAG,CAAE,CAAA,IAAA,CAAK,MAAM,CAAA,CAAA;AAAA,GAC5B,CAAA,CAAA;AACH,CAAA;AAEA,SAAS,kBAAkB,GAAsC,EAAA;AAC/D,EAAA,OAAO,GAAI,CAAA,IAAA,CAAK,OAAW,GAAA,GAAA,CAAI,KAAK,OAAqB,GAAA,KAAA,CAAA,CAAA;AAC3D;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@red-hat-developer-hub/backstage-plugin-orchestrator-backend",
|
|
3
|
-
"version": "5.0
|
|
3
|
+
"version": "5.1.0",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"main": "./dist/index.cjs.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -75,7 +75,7 @@
|
|
|
75
75
|
"@backstage/plugin-permission-node": "^0.8.4",
|
|
76
76
|
"@backstage/plugin-scaffolder-backend": "^1.26.2",
|
|
77
77
|
"@backstage/plugin-scaffolder-node": "^0.5.0",
|
|
78
|
-
"@red-hat-developer-hub/backstage-plugin-orchestrator-common": "^1.
|
|
78
|
+
"@red-hat-developer-hub/backstage-plugin-orchestrator-common": "^1.25.0",
|
|
79
79
|
"@urql/core": "^4.1.4",
|
|
80
80
|
"ajv-formats": "^2.1.1",
|
|
81
81
|
"cloudevents": "^8.0.0",
|
|
@@ -83,7 +83,6 @@
|
|
|
83
83
|
"express-promise-router": "^4.1.1",
|
|
84
84
|
"fs-extra": "^10.1.0",
|
|
85
85
|
"isomorphic-git": "^1.23.0",
|
|
86
|
-
"json-schema": "^0.4.0",
|
|
87
86
|
"moment": "^2.29.4",
|
|
88
87
|
"openapi-backend": "^5.10.5",
|
|
89
88
|
"yn": "^5.0.0"
|