@red-hat-developer-hub/backstage-plugin-orchestrator-backend 6.0.0 → 6.0.1
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 +9 -0
- package/dist/service/OrchestratorService.cjs.js +10 -0
- package/dist/service/OrchestratorService.cjs.js.map +1 -1
- package/dist/service/api/v2.cjs.js +5 -0
- package/dist/service/api/v2.cjs.js.map +1 -1
- package/dist/service/router.cjs.js +29 -0
- package/dist/service/router.cjs.js.map +1 -1
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
### Dependencies
|
|
2
2
|
|
|
3
|
+
## 6.0.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 56c160b: Add endpoind to ping workflow service
|
|
8
|
+
- 571d93e: Updated dependency `@types/express` to `4.17.22`.
|
|
9
|
+
- Updated dependencies [56c160b]
|
|
10
|
+
- @red-hat-developer-hub/backstage-plugin-orchestrator-common@1.27.1
|
|
11
|
+
|
|
3
12
|
## 6.0.0
|
|
4
13
|
|
|
5
14
|
### Major Changes
|
|
@@ -112,6 +112,16 @@ class OrchestratorService {
|
|
|
112
112
|
if (overview) overview.isAvailable = isWorkflowAvailable;
|
|
113
113
|
return overview;
|
|
114
114
|
}
|
|
115
|
+
async pingWorkflowService(args) {
|
|
116
|
+
const { definitionId } = args;
|
|
117
|
+
const idUrlMap = await this.dataIndexService.fetchWorkflowServiceUrls();
|
|
118
|
+
const serviceUrl = idUrlMap[definitionId];
|
|
119
|
+
const isServiceUp = await this.sonataFlowService.pingWorkflowService({
|
|
120
|
+
definitionId,
|
|
121
|
+
serviceUrl
|
|
122
|
+
});
|
|
123
|
+
return isServiceUp;
|
|
124
|
+
}
|
|
115
125
|
}
|
|
116
126
|
|
|
117
127
|
exports.OrchestratorService = OrchestratorService;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OrchestratorService.cjs.js","sources":["../../src/service/OrchestratorService.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n AuthToken,\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 definitionId: string;\n instanceId: string;\n serviceUrl: string;\n cacheHandler?: CacheHandler;\n }): Promise<void> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.sonataFlowService.abortInstance(args)\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 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 } = args;\n const instance = await this.dataIndexService.fetchInstance(instanceId);\n return instance;\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 const overviews = await this.sonataFlowService.fetchWorkflowOverviews({\n definitionIds: this.workflowCacheService.definitionIds?.concat(\n this.workflowCacheService.unavailableDefinitionIds,\n ),\n pagination: args.pagination,\n filter: args.filter,\n });\n\n return overviews?.map(overview => {\n const updatedOverview = overview;\n updatedOverview.isAvailable = this.workflowCacheService.isAvailable(\n updatedOverview.workflowId,\n );\n return updatedOverview;\n });\n }\n\n public async executeWorkflow(args: {\n definitionId: string;\n serviceUrl: string;\n inputData?: ProcessInstanceVariables;\n authTokens?: Array<AuthToken>;\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 }): Promise<WorkflowOverview | undefined> {\n const { definitionId } = args;\n const isWorkflowAvailable =\n this.workflowCacheService.isAvailable(definitionId);\n const overview =\n await this.sonataFlowService.fetchWorkflowOverview(definitionId);\n if (overview) overview.isAvailable = isWorkflowAvailable; // workflow overview is avaiable but the workflow itself is not\n return overview;\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"OrchestratorService.cjs.js","sources":["../../src/service/OrchestratorService.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n AuthToken,\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 definitionId: string;\n instanceId: string;\n serviceUrl: string;\n cacheHandler?: CacheHandler;\n }): Promise<void> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.sonataFlowService.abortInstance(args)\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 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 } = args;\n const instance = await this.dataIndexService.fetchInstance(instanceId);\n return instance;\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 const overviews = await this.sonataFlowService.fetchWorkflowOverviews({\n definitionIds: this.workflowCacheService.definitionIds?.concat(\n this.workflowCacheService.unavailableDefinitionIds,\n ),\n pagination: args.pagination,\n filter: args.filter,\n });\n\n return overviews?.map(overview => {\n const updatedOverview = overview;\n updatedOverview.isAvailable = this.workflowCacheService.isAvailable(\n updatedOverview.workflowId,\n );\n return updatedOverview;\n });\n }\n\n public async executeWorkflow(args: {\n definitionId: string;\n serviceUrl: string;\n inputData?: ProcessInstanceVariables;\n authTokens?: Array<AuthToken>;\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 }): Promise<WorkflowOverview | undefined> {\n const { definitionId } = args;\n const isWorkflowAvailable =\n this.workflowCacheService.isAvailable(definitionId);\n const overview =\n await this.sonataFlowService.fetchWorkflowOverview(definitionId);\n if (overview) overview.isAvailable = isWorkflowAvailable; // workflow overview is avaiable but the workflow itself is not\n return overview;\n }\n\n public async pingWorkflowService(args: {\n definitionId: string;\n }): Promise<boolean | undefined> {\n const { definitionId } = args;\n const idUrlMap = await this.dataIndexService.fetchWorkflowServiceUrls();\n const serviceUrl = idUrlMap[definitionId];\n const isServiceUp = await this.sonataFlowService.pingWorkflowService({\n definitionId,\n serviceUrl,\n });\n return isServiceUp;\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -182,6 +182,11 @@ class V2 {
|
|
|
182
182
|
cacheHandler: "throw"
|
|
183
183
|
});
|
|
184
184
|
}
|
|
185
|
+
async pingWorkflowService(workflowId) {
|
|
186
|
+
return this.orchestratorService.pingWorkflowService({
|
|
187
|
+
definitionId: workflowId
|
|
188
|
+
});
|
|
189
|
+
}
|
|
185
190
|
extractQueryParam(req, key) {
|
|
186
191
|
return req.query[key];
|
|
187
192
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"v2.cjs.js","sources":["../../../src/service/api/v2.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ParsedRequest } from 'openapi-backend';\n\nimport {\n AssessedProcessInstanceDTO,\n AuthToken,\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 },\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 });\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\n const result: ProcessInstanceListResultDTO = {\n items: instances?.map(mapToProcessInstanceDTO),\n paginationInfo: {\n pageSize: pagination?.limit,\n offset: pagination?.offset,\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 authTokens: executeWorkflowRequestDTO.authTokens as Array<AuthToken>,\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(\n workflowId: string,\n instanceId: string,\n ): Promise<string> {\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 await this.orchestratorService.abortWorkflowInstance({\n definitionId: workflowId,\n instanceId: instanceId,\n serviceUrl: definition.serviceUrl,\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 Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ParsedRequest } from 'openapi-backend';\n\nimport {\n AssessedProcessInstanceDTO,\n AuthToken,\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 },\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 });\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\n const result: ProcessInstanceListResultDTO = {\n items: instances?.map(mapToProcessInstanceDTO),\n paginationInfo: {\n pageSize: pagination?.limit,\n offset: pagination?.offset,\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 authTokens: executeWorkflowRequestDTO.authTokens as Array<AuthToken>,\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(\n workflowId: string,\n instanceId: string,\n ): Promise<string> {\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 await this.orchestratorService.abortWorkflowInstance({\n definitionId: workflowId,\n instanceId: instanceId,\n serviceUrl: definition.serviceUrl,\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 async pingWorkflowService(\n workflowId: string,\n ): Promise<boolean | undefined> {\n return this.orchestratorService.pingWorkflowService({\n definitionId: workflowId,\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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"}
|
|
@@ -522,6 +522,35 @@ function setupInternalRoutes(services, routerApi, permissions, httpAuth, auditor
|
|
|
522
522
|
});
|
|
523
523
|
}
|
|
524
524
|
);
|
|
525
|
+
routerApi.openApiBackend.register(
|
|
526
|
+
"pingWorkflowServiceById",
|
|
527
|
+
async (c, req, res, next) => {
|
|
528
|
+
const workflowId = c.request.params.workflowId;
|
|
529
|
+
const auditEvent = await auditor.createEvent({
|
|
530
|
+
eventId: "ping-workflow-service",
|
|
531
|
+
request: req
|
|
532
|
+
});
|
|
533
|
+
const decision = await authorize(
|
|
534
|
+
req,
|
|
535
|
+
[
|
|
536
|
+
backstagePluginOrchestratorCommon.orchestratorWorkflowPermission,
|
|
537
|
+
backstagePluginOrchestratorCommon.orchestratorWorkflowSpecificPermission(workflowId)
|
|
538
|
+
],
|
|
539
|
+
permissions,
|
|
540
|
+
httpAuth
|
|
541
|
+
);
|
|
542
|
+
if (decision.result === pluginPermissionCommon.AuthorizeResult.DENY) {
|
|
543
|
+
manageDenyAuthorization(auditEvent);
|
|
544
|
+
}
|
|
545
|
+
return routerApi.v2.pingWorkflowService(workflowId).then((result) => {
|
|
546
|
+
auditEvent.success();
|
|
547
|
+
res.json(result);
|
|
548
|
+
}).catch((error) => {
|
|
549
|
+
auditEvent.fail({ error });
|
|
550
|
+
next(error);
|
|
551
|
+
});
|
|
552
|
+
}
|
|
553
|
+
);
|
|
525
554
|
routerApi.openApiBackend.register(
|
|
526
555
|
"getInstances",
|
|
527
556
|
async (_c, req, res, next) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.cjs.js","sources":["../../src/service/router.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { MiddlewareFactory } from '@backstage/backend-defaults/rootHttpRouter';\nimport {\n AuditorService,\n AuditorServiceEvent,\n HttpAuthService,\n LoggerService,\n PermissionsService,\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 { 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 { 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 auditor,\n discovery,\n catalogApi,\n urlReader,\n scheduler,\n permissions,\n httpAuth,\n } = options;\n const publicServices = initPublicServices(logger, config, scheduler);\n\n const routerApi = await initRouterApi(publicServices.orchestratorService);\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.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 auditor,\n );\n setupExternalRoutes(router, discovery, scaffolderService, auditor);\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 auditor\n .createEvent({\n eventId: 'generic-error-handler',\n request: req,\n // Keep at high since this is a fallback - any error should be caught in handlers\n severityLevel: 'high',\n meta: {},\n })\n .then(event => {\n event.fail({\n meta: {},\n error,\n });\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 auditor: AuditorService,\n) {\n function manageDenyAuthorization(auditEvent: AuditorServiceEvent) {\n const error = new UnauthorizedError();\n auditEvent.fail({\n meta: {\n message: 'Not authorized to request the endpoint',\n },\n error: new UnauthorizedError(),\n });\n\n throw error;\n }\n\n // v2\n routerApi.openApiBackend.register(\n 'getWorkflowsOverview',\n async (_c, req, res: express.Response, next) => {\n const auditEvent = await auditor.createEvent({\n eventId: 'get-workflow-overview',\n request: req,\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 auditEvent.success({\n meta: {\n workflowsCount: workflows.overviews?.length,\n },\n });\n res.json(workflows);\n } catch (error) {\n auditEvent.fail({ error });\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\n const auditEvent = await auditor.createEvent({\n eventId: 'get-workflow-source',\n request: req,\n meta: {\n actionType: 'by-id',\n workflowId,\n },\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(auditEvent);\n }\n\n try {\n const result = await routerApi.v2.getWorkflowSourceById(workflowId);\n auditEvent.success();\n res.status(200).contentType('text/plain').send(result);\n } catch (error) {\n auditEvent.fail({ error });\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\n const auditEvent = await auditor.createEvent({\n eventId: 'execute-workflow',\n request: req,\n meta: {\n workflowId,\n },\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(auditEvent);\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 => {\n auditEvent.success({ meta: { id: result.id } });\n return res.status(200).json(result);\n })\n .catch(error => {\n auditEvent.fail({ error });\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\n const auditEvent = await auditor.createEvent({\n eventId: 'retrigger-instance',\n request: req,\n meta: {\n workflowId,\n instanceId,\n },\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(auditEvent);\n }\n\n await routerApi.v2\n .retriggerInstance(workflowId, instanceId)\n .then(result => {\n auditEvent.success();\n return res.status(200).json(result);\n })\n .catch(error => {\n auditEvent.fail({ error });\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\n const auditEvent = await auditor.createEvent({\n eventId: 'get-workflow-overview',\n request: req,\n meta: {\n actionType: 'by-id',\n workflowId,\n },\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(auditEvent);\n }\n\n return routerApi.v2\n .getWorkflowOverviewById(workflowId)\n .then(result => {\n auditEvent.success({\n meta: {\n workflowId: result.workflowId,\n },\n });\n return res.json(result);\n })\n .catch(error => {\n auditEvent.fail({ error });\n next(error);\n });\n },\n );\n\n // v2\n routerApi.openApiBackend.register(\n 'getWorkflowStatuses',\n async (_c, request: express.Request, res: express.Response, next) => {\n const auditEvent = await auditor.createEvent({\n eventId: 'get-workflow-statuses',\n request,\n });\n\n // Anyone is authorized to call this endpoint\n\n return routerApi.v2\n .getWorkflowStatuses()\n .then(result => {\n auditEvent.success();\n res.status(200).json(result);\n })\n .catch(error => {\n auditEvent.fail({ error });\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\n const auditEvent = await auditor.createEvent({\n eventId: 'get-workflow-input-schema',\n request: req,\n meta: {\n actionType: 'by-id',\n workflowId,\n instanceId,\n },\n });\n\n try {\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(auditEvent);\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: Error) => {\n auditEvent.fail({ error });\n res.status(500).json({\n message: error.message || INTERNAL_SERVER_ERROR_MESSAGE,\n });\n });\n\n if (!workflowInfo?.inputSchema?.properties) {\n auditEvent.success({\n meta: {\n message: 'Successfully found nothing.',\n },\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 auditEvent.success({\n meta: {\n workflowId: workflowInfo.id,\n },\n });\n res.status(200).json({\n inputSchema: workflowInfo.inputSchema,\n data: inputData,\n });\n } catch (error) {\n auditEvent.fail({ error });\n next(error);\n }\n },\n );\n\n // v2\n routerApi.openApiBackend.register(\n 'getWorkflowInstances',\n async (c, req: express.Request, res: express.Response, next) => {\n const workflowId = c.request.params.workflowId as string;\n\n const auditEvent = await auditor.createEvent({\n eventId: 'get-workflow-instances',\n request: req,\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(auditEvent);\n }\n\n return routerApi.v2\n .getInstances(buildPagination(req), getRequestFilters(req), [\n workflowId,\n ])\n .then(result => {\n auditEvent.success();\n res.json(result);\n })\n .catch(error => {\n auditEvent.fail({ error });\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 auditEvent = await auditor.createEvent({\n eventId: 'get-instances',\n request: req,\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 if (!authorizedWorkflowIds || authorizedWorkflowIds.length === 0)\n res.json([]);\n\n const result = await routerApi.v2.getInstances(\n buildPagination(req),\n getRequestFilters(req),\n authorizedWorkflowIds,\n );\n\n auditEvent.success({ meta: { authorizedWorkflowIds } });\n res.json(result);\n } catch (error) {\n auditEvent.fail({ error });\n next(error);\n }\n },\n );\n\n // v2\n routerApi.openApiBackend.register(\n 'getInstanceById',\n async (c, request: express.Request, res: express.Response, next) => {\n const instanceId = c.request.params.instanceId as string;\n\n const auditEvent = await auditor.createEvent({\n eventId: 'get-instance',\n request,\n meta: {\n actionType: 'by-id',\n instanceId,\n },\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 request,\n [\n orchestratorWorkflowPermission,\n orchestratorWorkflowSpecificPermission(workflowId),\n ],\n permissions,\n httpAuth,\n );\n if (decision.result === AuthorizeResult.DENY) {\n manageDenyAuthorization(auditEvent);\n }\n\n auditEvent.success();\n res.status(200).json(assessedInstance);\n } catch (error) {\n auditEvent.fail({ error });\n next(error);\n }\n },\n );\n\n // v2\n routerApi.openApiBackend.register(\n 'abortWorkflow',\n async (c, request, res, next) => {\n const instanceId = c.request.params.instanceId as string;\n\n const auditEvent = await auditor.createEvent({\n eventId: 'abort-workflow',\n request,\n meta: {\n actionType: 'by-id',\n instanceId,\n },\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 request,\n [\n orchestratorWorkflowUsePermission,\n orchestratorWorkflowUseSpecificPermission(workflowId),\n ],\n permissions,\n httpAuth,\n );\n if (decision.result === AuthorizeResult.DENY) {\n manageDenyAuthorization(auditEvent);\n }\n\n const result = await routerApi.v2.abortWorkflow(workflowId, instanceId);\n auditEvent.success({ meta: { result } });\n res.status(200).json(result);\n } catch (error) {\n auditEvent.fail({ error });\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 auditor: AuditorService,\n) {\n router.get('/actions', async (req, res) => {\n const auditEvent = await auditor.createEvent({\n eventId: 'actions',\n request: req,\n });\n const scaffolderUrl = await discovery.getBaseUrl('scaffolder');\n const response = await fetch(`${scaffolderUrl}/v2/actions`);\n const json = await response.json();\n auditEvent.success();\n res.status(response.status).json(json);\n });\n\n router.post('/actions/:actionId', async (req, res) => {\n const { actionId } = req.params;\n const instanceId: string | undefined = req.header('kogitoprocinstanceid');\n const body: JsonObject = (await req.body) as JsonObject;\n\n const auditEvent = await auditor.createEvent({\n eventId: 'actions',\n request: req,\n meta: {\n actionType: 'by-id',\n instanceId,\n },\n });\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 auditEvent.success();\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","Router","createPermissionIntegrationRouter","orchestratorPermissions","express","ScaffolderService","MiddlewareFactory","DataIndexService","SonataFlowService","WorkflowCacheService","OrchestratorService","DataInputSchemaService","OpenAPIBackend","openApiDocument","fullFormats","v2","V2","UnauthorizedError","buildPagination","orchestratorWorkflowUsePermission","orchestratorWorkflowUseSpecificPermission","QUERY_PARAM_BUSINESS_KEY","INTERNAL_SERVER_ERROR_MESSAGE","QUERY_PARAM_INCLUDE_ASSESSMENT"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"router.cjs.js","sources":["../../src/service/router.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { MiddlewareFactory } from '@backstage/backend-defaults/rootHttpRouter';\nimport {\n AuditorService,\n AuditorServiceEvent,\n HttpAuthService,\n LoggerService,\n PermissionsService,\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 { 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 { 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 auditor,\n discovery,\n catalogApi,\n urlReader,\n scheduler,\n permissions,\n httpAuth,\n } = options;\n const publicServices = initPublicServices(logger, config, scheduler);\n\n const routerApi = await initRouterApi(publicServices.orchestratorService);\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.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 auditor,\n );\n setupExternalRoutes(router, discovery, scaffolderService, auditor);\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 auditor\n .createEvent({\n eventId: 'generic-error-handler',\n request: req,\n // Keep at high since this is a fallback - any error should be caught in handlers\n severityLevel: 'high',\n meta: {},\n })\n .then(event => {\n event.fail({\n meta: {},\n error,\n });\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 auditor: AuditorService,\n) {\n function manageDenyAuthorization(auditEvent: AuditorServiceEvent) {\n const error = new UnauthorizedError();\n auditEvent.fail({\n meta: {\n message: 'Not authorized to request the endpoint',\n },\n error: new UnauthorizedError(),\n });\n\n throw error;\n }\n\n // v2\n routerApi.openApiBackend.register(\n 'getWorkflowsOverview',\n async (_c, req, res: express.Response, next) => {\n const auditEvent = await auditor.createEvent({\n eventId: 'get-workflow-overview',\n request: req,\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 auditEvent.success({\n meta: {\n workflowsCount: workflows.overviews?.length,\n },\n });\n res.json(workflows);\n } catch (error) {\n auditEvent.fail({ error });\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\n const auditEvent = await auditor.createEvent({\n eventId: 'get-workflow-source',\n request: req,\n meta: {\n actionType: 'by-id',\n workflowId,\n },\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(auditEvent);\n }\n\n try {\n const result = await routerApi.v2.getWorkflowSourceById(workflowId);\n auditEvent.success();\n res.status(200).contentType('text/plain').send(result);\n } catch (error) {\n auditEvent.fail({ error });\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\n const auditEvent = await auditor.createEvent({\n eventId: 'execute-workflow',\n request: req,\n meta: {\n workflowId,\n },\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(auditEvent);\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 => {\n auditEvent.success({ meta: { id: result.id } });\n return res.status(200).json(result);\n })\n .catch(error => {\n auditEvent.fail({ error });\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\n const auditEvent = await auditor.createEvent({\n eventId: 'retrigger-instance',\n request: req,\n meta: {\n workflowId,\n instanceId,\n },\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(auditEvent);\n }\n\n await routerApi.v2\n .retriggerInstance(workflowId, instanceId)\n .then(result => {\n auditEvent.success();\n return res.status(200).json(result);\n })\n .catch(error => {\n auditEvent.fail({ error });\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\n const auditEvent = await auditor.createEvent({\n eventId: 'get-workflow-overview',\n request: req,\n meta: {\n actionType: 'by-id',\n workflowId,\n },\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(auditEvent);\n }\n\n return routerApi.v2\n .getWorkflowOverviewById(workflowId)\n .then(result => {\n auditEvent.success({\n meta: {\n workflowId: result.workflowId,\n },\n });\n return res.json(result);\n })\n .catch(error => {\n auditEvent.fail({ error });\n next(error);\n });\n },\n );\n\n // v2\n routerApi.openApiBackend.register(\n 'getWorkflowStatuses',\n async (_c, request: express.Request, res: express.Response, next) => {\n const auditEvent = await auditor.createEvent({\n eventId: 'get-workflow-statuses',\n request,\n });\n\n // Anyone is authorized to call this endpoint\n\n return routerApi.v2\n .getWorkflowStatuses()\n .then(result => {\n auditEvent.success();\n res.status(200).json(result);\n })\n .catch(error => {\n auditEvent.fail({ error });\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\n const auditEvent = await auditor.createEvent({\n eventId: 'get-workflow-input-schema',\n request: req,\n meta: {\n actionType: 'by-id',\n workflowId,\n instanceId,\n },\n });\n\n try {\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(auditEvent);\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: Error) => {\n auditEvent.fail({ error });\n res.status(500).json({\n message: error.message || INTERNAL_SERVER_ERROR_MESSAGE,\n });\n });\n\n if (!workflowInfo?.inputSchema?.properties) {\n auditEvent.success({\n meta: {\n message: 'Successfully found nothing.',\n },\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 auditEvent.success({\n meta: {\n workflowId: workflowInfo.id,\n },\n });\n res.status(200).json({\n inputSchema: workflowInfo.inputSchema,\n data: inputData,\n });\n } catch (error) {\n auditEvent.fail({ error });\n next(error);\n }\n },\n );\n\n // v2\n routerApi.openApiBackend.register(\n 'getWorkflowInstances',\n async (c, req: express.Request, res: express.Response, next) => {\n const workflowId = c.request.params.workflowId as string;\n\n const auditEvent = await auditor.createEvent({\n eventId: 'get-workflow-instances',\n request: req,\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(auditEvent);\n }\n\n return routerApi.v2\n .getInstances(buildPagination(req), getRequestFilters(req), [\n workflowId,\n ])\n .then(result => {\n auditEvent.success();\n res.json(result);\n })\n .catch(error => {\n auditEvent.fail({ error });\n next(error);\n });\n },\n );\n\n // v2\n routerApi.openApiBackend.register(\n 'pingWorkflowServiceById',\n async (c, req: express.Request, res: express.Response, next) => {\n const workflowId = c.request.params.workflowId as string;\n\n const auditEvent = await auditor.createEvent({\n eventId: 'ping-workflow-service',\n request: req,\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(auditEvent);\n }\n\n return routerApi.v2\n .pingWorkflowService(workflowId)\n .then(result => {\n auditEvent.success();\n res.json(result);\n })\n .catch(error => {\n auditEvent.fail({ error });\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 auditEvent = await auditor.createEvent({\n eventId: 'get-instances',\n request: req,\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 if (!authorizedWorkflowIds || authorizedWorkflowIds.length === 0)\n res.json([]);\n\n const result = await routerApi.v2.getInstances(\n buildPagination(req),\n getRequestFilters(req),\n authorizedWorkflowIds,\n );\n\n auditEvent.success({ meta: { authorizedWorkflowIds } });\n res.json(result);\n } catch (error) {\n auditEvent.fail({ error });\n next(error);\n }\n },\n );\n\n // v2\n routerApi.openApiBackend.register(\n 'getInstanceById',\n async (c, request: express.Request, res: express.Response, next) => {\n const instanceId = c.request.params.instanceId as string;\n\n const auditEvent = await auditor.createEvent({\n eventId: 'get-instance',\n request,\n meta: {\n actionType: 'by-id',\n instanceId,\n },\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 request,\n [\n orchestratorWorkflowPermission,\n orchestratorWorkflowSpecificPermission(workflowId),\n ],\n permissions,\n httpAuth,\n );\n if (decision.result === AuthorizeResult.DENY) {\n manageDenyAuthorization(auditEvent);\n }\n\n auditEvent.success();\n res.status(200).json(assessedInstance);\n } catch (error) {\n auditEvent.fail({ error });\n next(error);\n }\n },\n );\n\n // v2\n routerApi.openApiBackend.register(\n 'abortWorkflow',\n async (c, request, res, next) => {\n const instanceId = c.request.params.instanceId as string;\n\n const auditEvent = await auditor.createEvent({\n eventId: 'abort-workflow',\n request,\n meta: {\n actionType: 'by-id',\n instanceId,\n },\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 request,\n [\n orchestratorWorkflowUsePermission,\n orchestratorWorkflowUseSpecificPermission(workflowId),\n ],\n permissions,\n httpAuth,\n );\n if (decision.result === AuthorizeResult.DENY) {\n manageDenyAuthorization(auditEvent);\n }\n\n const result = await routerApi.v2.abortWorkflow(workflowId, instanceId);\n auditEvent.success({ meta: { result } });\n res.status(200).json(result);\n } catch (error) {\n auditEvent.fail({ error });\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 auditor: AuditorService,\n) {\n router.get('/actions', async (req, res) => {\n const auditEvent = await auditor.createEvent({\n eventId: 'actions',\n request: req,\n });\n const scaffolderUrl = await discovery.getBaseUrl('scaffolder');\n const response = await fetch(`${scaffolderUrl}/v2/actions`);\n const json = await response.json();\n auditEvent.success();\n res.status(response.status).json(json);\n });\n\n router.post('/actions/:actionId', async (req, res) => {\n const { actionId } = req.params;\n const instanceId: string | undefined = req.header('kogitoprocinstanceid');\n const body: JsonObject = (await req.body) as JsonObject;\n\n const auditEvent = await auditor.createEvent({\n eventId: 'actions',\n request: req,\n meta: {\n actionType: 'by-id',\n instanceId,\n },\n });\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 auditEvent.success();\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","Router","createPermissionIntegrationRouter","orchestratorPermissions","express","ScaffolderService","MiddlewareFactory","DataIndexService","SonataFlowService","WorkflowCacheService","OrchestratorService","DataInputSchemaService","OpenAPIBackend","openApiDocument","fullFormats","v2","V2","UnauthorizedError","buildPagination","orchestratorWorkflowUsePermission","orchestratorWorkflowUseSpecificPermission","QUERY_PARAM_BUSINESS_KEY","INTERNAL_SERVER_ERROR_MESSAGE","QUERY_PARAM_INCLUDE_ASSESSMENT"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@red-hat-developer-hub/backstage-plugin-orchestrator-backend",
|
|
3
|
-
"version": "6.0.
|
|
3
|
+
"version": "6.0.1",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"main": "./dist/index.cjs.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
},
|
|
10
10
|
"backstage": {
|
|
11
11
|
"role": "backend-plugin",
|
|
12
|
-
"supported-versions": "1.
|
|
12
|
+
"supported-versions": "1.36.1",
|
|
13
13
|
"pluginId": "orchestrator",
|
|
14
14
|
"pluginPackages": [
|
|
15
15
|
"@red-hat-developer-hub/backstage-plugin-orchestrator",
|
|
@@ -78,7 +78,7 @@
|
|
|
78
78
|
"@backstage/plugin-permission-node": "^0.9.0",
|
|
79
79
|
"@backstage/plugin-scaffolder-backend": "^1.31.0",
|
|
80
80
|
"@backstage/plugin-scaffolder-node": "^0.8.0",
|
|
81
|
-
"@red-hat-developer-hub/backstage-plugin-orchestrator-common": "^1.27.
|
|
81
|
+
"@red-hat-developer-hub/backstage-plugin-orchestrator-common": "^1.27.1",
|
|
82
82
|
"@urql/core": "^4.1.4",
|
|
83
83
|
"ajv-formats": "^2.1.1",
|
|
84
84
|
"cloudevents": "^8.0.0",
|
|
@@ -96,7 +96,7 @@
|
|
|
96
96
|
"@backstage/cli": "^0.31.1",
|
|
97
97
|
"@janus-idp/backstage-plugin-audit-log-node": "^1.7.1",
|
|
98
98
|
"@janus-idp/cli": "3.5.0",
|
|
99
|
-
"@types/express": "4.17.
|
|
99
|
+
"@types/express": "4.17.22",
|
|
100
100
|
"@types/fs-extra": "11.0.4",
|
|
101
101
|
"@types/json-schema": "7.0.15",
|
|
102
102
|
"prettier": "3.5.3"
|