@red-hat-developer-hub/backstage-plugin-orchestrator-backend 8.0.1 → 8.0.3
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 +19 -0
- package/dist/service/DataIndexService.cjs.js +77 -6
- package/dist/service/DataIndexService.cjs.js.map +1 -1
- package/dist/service/OrchestratorService.cjs.js +3 -0
- package/dist/service/OrchestratorService.cjs.js.map +1 -1
- package/dist/service/SonataFlowService.cjs.js +29 -17
- package/dist/service/SonataFlowService.cjs.js.map +1 -1
- package/dist/service/api/mapping/V2Mappings.cjs.js +1 -0
- package/dist/service/api/mapping/V2Mappings.cjs.js.map +1 -1
- package/dist/service/api/v2.cjs.js +32 -5
- package/dist/service/api/v2.cjs.js.map +1 -1
- package/dist/service/router.cjs.js +40 -1
- package/dist/service/router.cjs.js.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
### Dependencies
|
|
2
2
|
|
|
3
|
+
## 8.0.3
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- fac94ef: fix(orchestrator): on retrigger workflow, tokens requested by the AuthRequester are forwarded
|
|
8
|
+
- 4fd43f1: filter deleted workflows from workflows table
|
|
9
|
+
- Updated dependencies [fac94ef]
|
|
10
|
+
- Updated dependencies [16439ad]
|
|
11
|
+
- Updated dependencies [4fd43f1]
|
|
12
|
+
- @red-hat-developer-hub/backstage-plugin-orchestrator-common@3.0.3
|
|
13
|
+
|
|
14
|
+
## 8.0.2
|
|
15
|
+
|
|
16
|
+
### Patch Changes
|
|
17
|
+
|
|
18
|
+
- 26e602a: add workflows tab to catalog entities
|
|
19
|
+
- Updated dependencies [26e602a]
|
|
20
|
+
- @red-hat-developer-hub/backstage-plugin-orchestrator-common@3.0.2
|
|
21
|
+
|
|
3
22
|
## 8.0.1
|
|
4
23
|
|
|
5
24
|
### Patch Changes
|
|
@@ -110,6 +110,28 @@ class DataIndexService {
|
|
|
110
110
|
const processDefinitions = result.data.ProcessDefinitions;
|
|
111
111
|
return processDefinitions.filter((definition) => definition.serviceUrl).map((definition) => ({ [definition.id]: definition.serviceUrl })).reduce((acc, curr) => ({ ...acc, ...curr }), {});
|
|
112
112
|
}
|
|
113
|
+
filterDeletedWorkflows(workflows) {
|
|
114
|
+
const availableWorkflows = [];
|
|
115
|
+
const unavailableWorkflows = [];
|
|
116
|
+
workflows.forEach((workflow) => {
|
|
117
|
+
const isUnavailable = workflow.metadata?.status === "unavailable";
|
|
118
|
+
if (isUnavailable) {
|
|
119
|
+
unavailableWorkflows.push(workflow);
|
|
120
|
+
} else {
|
|
121
|
+
availableWorkflows.push(workflow);
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
this.logger.debug(
|
|
125
|
+
`filtered deleted workflows when fetching workflow infos: ${JSON.stringify(
|
|
126
|
+
unavailableWorkflows.map((w) => ({
|
|
127
|
+
id: w.id,
|
|
128
|
+
name: w.name,
|
|
129
|
+
status: w.metadata?.status
|
|
130
|
+
}))
|
|
131
|
+
)}`
|
|
132
|
+
);
|
|
133
|
+
return availableWorkflows;
|
|
134
|
+
}
|
|
113
135
|
async fetchWorkflowInfos(args) {
|
|
114
136
|
this.logger.info(`fetchWorkflowInfos() called: ${this.dataIndexUrl}`);
|
|
115
137
|
const { definitionIds, pagination, filter } = args;
|
|
@@ -120,7 +142,7 @@ class DataIndexService {
|
|
|
120
142
|
filter
|
|
121
143
|
) : void 0;
|
|
122
144
|
let whereClause;
|
|
123
|
-
if (
|
|
145
|
+
if (definitionIdsCondition && filterCondition) {
|
|
124
146
|
whereClause = `and: [{${definitionIdsCondition}}, {${filterCondition}}]`;
|
|
125
147
|
} else if (definitionIdsCondition || filterCondition) {
|
|
126
148
|
whereClause = definitionIdsCondition ?? filterCondition;
|
|
@@ -129,7 +151,7 @@ class DataIndexService {
|
|
|
129
151
|
}
|
|
130
152
|
const graphQlQuery = queryBuilder.buildGraphQlQuery({
|
|
131
153
|
type: "ProcessDefinitions",
|
|
132
|
-
queryBody: "id, name, version, type, endpoint, serviceUrl, source",
|
|
154
|
+
queryBody: "id, name, version, type, endpoint, serviceUrl, source, metadata",
|
|
133
155
|
whereClause,
|
|
134
156
|
pagination
|
|
135
157
|
});
|
|
@@ -142,7 +164,7 @@ class DataIndexService {
|
|
|
142
164
|
"Error fetching data index swf results",
|
|
143
165
|
result
|
|
144
166
|
);
|
|
145
|
-
return result.data.ProcessDefinitions;
|
|
167
|
+
return this.filterDeletedWorkflows(result.data.ProcessDefinitions);
|
|
146
168
|
}
|
|
147
169
|
async fetchInstances(args) {
|
|
148
170
|
const { pagination, definitionIds, filter } = args;
|
|
@@ -193,6 +215,49 @@ class DataIndexService {
|
|
|
193
215
|
);
|
|
194
216
|
return processInstances;
|
|
195
217
|
}
|
|
218
|
+
async fetchDefinitionIdsFromInstances(args) {
|
|
219
|
+
const { targetEntity } = args;
|
|
220
|
+
const processIdNotNullCondition = "processId: {isNull: false}";
|
|
221
|
+
const type = "ProcessInstance";
|
|
222
|
+
const targetEntityFilter = {
|
|
223
|
+
field: "variables",
|
|
224
|
+
nested: {
|
|
225
|
+
operator: "EQ",
|
|
226
|
+
field: "targetEntity",
|
|
227
|
+
value: targetEntity
|
|
228
|
+
}
|
|
229
|
+
};
|
|
230
|
+
const filterCondition = filterBuilder.buildFilterCondition(
|
|
231
|
+
await this.inspectInputArgument(type),
|
|
232
|
+
type,
|
|
233
|
+
targetEntityFilter
|
|
234
|
+
);
|
|
235
|
+
const whereClause = `and: [{${processIdNotNullCondition}}, {${filterCondition}}]`;
|
|
236
|
+
const pagination = {
|
|
237
|
+
limit: 1e3,
|
|
238
|
+
offset: 0
|
|
239
|
+
};
|
|
240
|
+
const graphQlQuery = queryBuilder.buildGraphQlQuery({
|
|
241
|
+
type: "ProcessInstances",
|
|
242
|
+
queryBody: "processId",
|
|
243
|
+
whereClause,
|
|
244
|
+
pagination
|
|
245
|
+
});
|
|
246
|
+
this.logger.debug(`GraphQL query: ${graphQlQuery}`);
|
|
247
|
+
const result = await this.client.query(graphQlQuery, {});
|
|
248
|
+
this.logger.debug(
|
|
249
|
+
`Fetch definition ids from instances history result: ${JSON.stringify(result)}`
|
|
250
|
+
);
|
|
251
|
+
this.handleGraphqlClientError(
|
|
252
|
+
"Error when fetching definition ids from instances history",
|
|
253
|
+
result
|
|
254
|
+
);
|
|
255
|
+
const processInstancesSrc = result.data ? result.data.ProcessInstances : [];
|
|
256
|
+
const distinctProcessIds = [
|
|
257
|
+
...new Set(processInstancesSrc.map((instance) => instance.processId))
|
|
258
|
+
];
|
|
259
|
+
return distinctProcessIds;
|
|
260
|
+
}
|
|
196
261
|
async getWorkflowDefinitionFromInstance(instance) {
|
|
197
262
|
const workflowInfo = await this.fetchWorkflowInfo(instance.processId);
|
|
198
263
|
if (!workflowInfo?.source) {
|
|
@@ -335,15 +400,21 @@ class DataIndexService {
|
|
|
335
400
|
if (!result?.error) {
|
|
336
401
|
return;
|
|
337
402
|
}
|
|
338
|
-
this.logger.error(
|
|
403
|
+
this.logger.error(scenario, result);
|
|
339
404
|
const networkError = result.error.networkError?.cause?.message;
|
|
340
405
|
if (networkError) {
|
|
341
406
|
const toThrow = new Error(`${result.error.message}. ${networkError}`);
|
|
342
407
|
toThrow.name = "Network Error";
|
|
343
408
|
throw toThrow;
|
|
344
|
-
} else {
|
|
345
|
-
throw result.error;
|
|
346
409
|
}
|
|
410
|
+
const graphQLErrors = result.error.graphQLErrors;
|
|
411
|
+
if (result.data && Array.isArray(graphQLErrors) && graphQLErrors.length > 0) {
|
|
412
|
+
const graphQLError = graphQLErrors[0];
|
|
413
|
+
if (graphQLError?.extensions?.classification === "DataFetchingException") {
|
|
414
|
+
return;
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
throw result.error;
|
|
347
418
|
}
|
|
348
419
|
removeNodes(instance) {
|
|
349
420
|
const errorNodeId = instance.error?.nodeInstanceId;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataIndexService.cjs.js","sources":["../../src/service/DataIndexService.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 { LoggerService } from '@backstage/backend-plugin-api';\n\nimport { Client, fetchExchange, gql } from '@urql/core';\n\nimport {\n Filter,\n fromWorkflowSource,\n IntrospectionField,\n parseWorkflowVariables,\n ProcessInstance,\n WorkflowDefinition,\n WorkflowInfo,\n} from '@red-hat-developer-hub/backstage-plugin-orchestrator-common';\n\nimport { ErrorBuilder } from '../helpers/errorBuilder';\nimport { buildFilterCondition } from '../helpers/filterBuilder';\nimport { buildGraphQlQuery } from '../helpers/queryBuilder';\nimport { Pagination } from '../types/pagination';\nimport { FETCH_PROCESS_INSTANCES_SORT_FIELD } from './constants';\n\nexport class DataIndexService {\n private readonly client: Client;\n public processDefinitionArguments: IntrospectionField[] = [];\n public processInstanceArguments: IntrospectionField[] = [];\n\n public constructor(\n private readonly dataIndexUrl: string,\n private readonly logger: LoggerService,\n ) {\n if (!dataIndexUrl.length) {\n throw ErrorBuilder.GET_NO_DATA_INDEX_URL_ERR();\n }\n\n this.client = this.getNewGraphQLClient();\n }\n\n private getNewGraphQLClient(): Client {\n const diURL = `${this.dataIndexUrl}/graphql`;\n return new Client({\n url: diURL,\n exchanges: [fetchExchange],\n });\n }\n\n public async initInputProcessDefinitionArgs(): Promise<IntrospectionField[]> {\n if (this.processDefinitionArguments.length === 0) {\n this.processDefinitionArguments =\n await this.inspectInputArgument('ProcessDefinition');\n }\n return this.processDefinitionArguments; // For testing purposes\n }\n\n public graphQLArgumentQuery(type: string): string {\n return `query ${type}Argument {\n __type(name: \"${type}Argument\") {\n kind\n name\n inputFields {\n name\n type {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n }\n }\n }\n }\n }\n }\n }`;\n }\n\n public async inspectInputArgument(\n type: string,\n ): Promise<IntrospectionField[]> {\n const result = await this.client.query(this.graphQLArgumentQuery(type), {});\n\n this.logger.debug(`Introspection query result: ${JSON.stringify(result)}`);\n\n this.handleGraphqlClientError(\n 'Error executing introspection query',\n result,\n );\n\n const pairs: IntrospectionField[] = [];\n if (result?.data?.__type?.inputFields) {\n for (const field of result.data.__type.inputFields) {\n if (\n field.name !== 'and' &&\n field.name !== 'or' &&\n field.name !== 'not'\n ) {\n pairs.push({\n name: field.name,\n type: {\n name: field.type.name,\n kind: field.type.kind,\n ofType: field.type.ofType,\n },\n });\n }\n }\n }\n return pairs;\n }\n\n public async fetchWorkflowInfo(\n definitionId: string,\n ): Promise<WorkflowInfo | undefined> {\n const graphQlQuery = `{ ProcessDefinitions ( where: {id: {equal: \"${definitionId}\" } } ) { id, name, version, type, endpoint, serviceUrl, source } }`;\n\n const result = await this.client.query(graphQlQuery, {});\n\n this.logger.debug(\n `Get workflow definition result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError('Error fetching workflow definition', result);\n\n const processDefinitions = result.data.ProcessDefinitions as WorkflowInfo[];\n\n if (processDefinitions.length === 0) {\n this.logger.info(`No workflow definition found for ${definitionId}`);\n return undefined;\n }\n\n return processDefinitions[0];\n }\n\n public async fetchWorkflowServiceUrls(): Promise<Record<string, string>> {\n const graphQlQuery = `{ ProcessDefinitions { id, serviceUrl } }`;\n\n const result = await this.client.query(graphQlQuery, {});\n\n this.logger.debug(\n `Get workflow service urls result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error fetching workflow service urls',\n result,\n );\n\n const processDefinitions = result.data.ProcessDefinitions as WorkflowInfo[];\n return processDefinitions\n .filter(definition => definition.serviceUrl)\n .map(definition => ({ [definition.id]: definition.serviceUrl! }))\n .reduce((acc, curr) => ({ ...acc, ...curr }), {});\n }\n\n public async fetchWorkflowInfos(args: {\n definitionIds?: string[];\n pagination?: Pagination;\n filter?: Filter;\n }): Promise<WorkflowInfo[]> {\n this.logger.info(`fetchWorkflowInfos() called: ${this.dataIndexUrl}`);\n const { definitionIds, pagination, filter } = args;\n\n const definitionIdsCondition =\n definitionIds !== undefined && definitionIds.length > 0\n ? `id: {in: ${JSON.stringify(definitionIds)}}`\n : undefined;\n\n const filterCondition = filter\n ? buildFilterCondition(\n await this.initInputProcessDefinitionArgs(),\n 'ProcessDefinition',\n filter,\n )\n : undefined;\n\n let whereClause: string | undefined;\n if (definitionIds && filter) {\n whereClause = `and: [{${definitionIdsCondition}}, {${filterCondition}}]`;\n } else if (definitionIdsCondition || filterCondition) {\n whereClause = definitionIdsCondition ?? filterCondition;\n } else {\n whereClause = undefined;\n }\n\n const graphQlQuery = buildGraphQlQuery({\n type: 'ProcessDefinitions',\n queryBody: 'id, name, version, type, endpoint, serviceUrl, source',\n whereClause,\n pagination,\n });\n this.logger.debug(`GraphQL query: ${graphQlQuery}`);\n const result = await this.client.query(graphQlQuery, {});\n this.logger.debug(\n `Get workflow definitions result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error fetching data index swf results',\n result,\n );\n\n return result.data.ProcessDefinitions;\n }\n\n public async fetchInstances(args: {\n definitionIds?: string[];\n pagination?: Pagination;\n filter?: Filter;\n }): Promise<ProcessInstance[]> {\n const { pagination, definitionIds, filter } = args;\n if (pagination) pagination.sortField ??= FETCH_PROCESS_INSTANCES_SORT_FIELD;\n\n const processIdNotNullCondition = 'processId: {isNull: false}';\n const definitionIdsCondition =\n definitionIds && definitionIds.length > 0\n ? `processId: {in: ${JSON.stringify(definitionIds)}}`\n : undefined;\n const type = 'ProcessInstance';\n const filterCondition = filter\n ? buildFilterCondition(\n await this.inspectInputArgument(type),\n type,\n filter,\n )\n : '';\n\n let whereClause = '';\n const conditions = [];\n\n if (processIdNotNullCondition) {\n conditions.push(`{${processIdNotNullCondition}}`);\n }\n\n if (definitionIdsCondition) {\n conditions.push(`{${definitionIdsCondition}}`);\n }\n\n if (filter) {\n conditions.push(`{${filterCondition}}`);\n }\n\n if (conditions.length === 0) {\n whereClause = processIdNotNullCondition;\n } else if (conditions.length === 1) {\n whereClause = conditions[0].slice(1, -1); // Remove the outer braces\n } else if (conditions.length > 1) {\n whereClause = `and: [${conditions.join(', ')}]`;\n }\n\n const graphQlQuery = buildGraphQlQuery({\n type: 'ProcessInstances',\n queryBody:\n 'id, processName, processId, state, start, end, nodes { id }, variables, executionSummary, parentProcessInstance {id, processName, businessKey}',\n whereClause,\n pagination,\n });\n\n this.logger.debug(`GraphQL query: ${graphQlQuery}`);\n\n const result = await this.client.query<{\n ProcessInstances: ProcessInstance[];\n }>(graphQlQuery, {});\n this.logger.debug(\n `Fetch process instances result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError('Error when fetching instances', result);\n\n const processInstancesSrc = result.data ? result.data.ProcessInstances : [];\n\n const processInstances = await Promise.all(\n processInstancesSrc.map(async instance => {\n return await this.getWorkflowDefinitionFromInstance(instance);\n }),\n );\n return processInstances;\n }\n\n private async getWorkflowDefinitionFromInstance(instance: ProcessInstance) {\n const workflowInfo = await this.fetchWorkflowInfo(instance.processId);\n if (!workflowInfo?.source) {\n throw new Error(\n `Workflow defintion is required to fetch instance ${instance.id}`,\n );\n }\n if (workflowInfo) {\n instance.description = workflowInfo.description;\n }\n return instance;\n }\n\n public async fetchWorkflowSource(\n definitionId: string,\n ): Promise<string | undefined> {\n const graphQlQuery = `{ ProcessDefinitions ( where: {id: {equal: \"${definitionId}\" } } ) { id, source } }`;\n\n const result = await this.client.query(graphQlQuery, {});\n\n this.logger.debug(\n `Fetch workflow source result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error when fetching workflow source',\n result,\n );\n\n const processDefinitions = result.data.ProcessDefinitions as WorkflowInfo[];\n\n if (processDefinitions.length === 0) {\n this.logger.info(`No workflow source found for ${definitionId}`);\n return undefined;\n }\n\n return processDefinitions[0].source;\n }\n\n public async fetchInstancesByDefinitionId(args: {\n definitionId: string;\n limit: number;\n offset: number;\n }): Promise<ProcessInstance[]> {\n const graphQlQuery = `{ ProcessInstances(where: {processId: {equal: \"${args.definitionId}\" } }, orderBy: {start:DESC}, pagination: {limit: ${args.limit}, offset: ${args.offset}}) { id, processName, state, start, end } }`;\n\n const result = await this.client.query(graphQlQuery, {});\n\n this.logger.debug(\n `Fetch workflow instances result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error when fetching workflow instances',\n result,\n );\n\n return result.data.ProcessInstances;\n }\n\n public async fetchInstanceVariables(\n instanceId: string,\n ): Promise<object | undefined> {\n const graphQlQuery = `{ ProcessInstances (where: { id: {equal: \"${instanceId}\" } } ) { variables } }`;\n\n const result = await this.client.query(graphQlQuery, {});\n\n this.logger.debug(\n `Fetch process instance variables result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error when fetching process instance variables',\n result,\n );\n\n const processInstances = result.data.ProcessInstances as ProcessInstance[];\n\n if (processInstances.length === 0) {\n return undefined;\n }\n\n return parseWorkflowVariables(processInstances[0].variables as object);\n }\n\n public async fetchDefinitionIdByInstanceId(\n instanceId: string,\n ): Promise<string | undefined> {\n const graphQlQuery = `{ ProcessInstances (where: { id: {equal: \"${instanceId}\" } } ) { processId } }`;\n\n const result = await this.client.query(graphQlQuery, {});\n\n this.logger.debug(\n `Fetch process id from instance result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error when fetching process id from instance',\n result,\n );\n\n const processInstances = result.data.ProcessInstances as ProcessInstance[];\n\n if (processInstances.length === 0) {\n return undefined;\n }\n\n return processInstances[0].processId;\n }\n\n public async fetchInstance(\n instanceId: string,\n ): Promise<ProcessInstance | undefined> {\n const FindProcessInstanceQuery = gql`\n query FindProcessInstanceQuery($instanceId: String!) {\n ProcessInstances(where: { id: { equal: $instanceId } }) {\n id\n processName\n processId\n serviceUrl\n executionSummary\n state\n start\n end\n nodes {\n id\n nodeId\n definitionId\n type\n name\n enter\n exit\n errorMessage\n }\n variables\n parentProcessInstance {\n id\n processName\n businessKey\n }\n error {\n nodeDefinitionId\n nodeInstanceId\n message\n }\n }\n }\n `;\n\n const result = await this.client.query(FindProcessInstanceQuery, {\n instanceId,\n });\n\n this.logger.debug(\n `Fetch process instance result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error when fetching process instances',\n result,\n );\n\n const processInstances = result.data.ProcessInstances as ProcessInstance[];\n\n if (processInstances.length === 0) {\n return undefined;\n }\n\n const instance = this.removeNodes(processInstances[0]);\n\n const workflowInfo = await this.fetchWorkflowInfo(instance.processId);\n if (!workflowInfo?.source) {\n throw new Error(\n `Workflow definition is required to fetch instance ${instance.id}`,\n );\n }\n const workflowDefinitionSrc: WorkflowDefinition = fromWorkflowSource(\n workflowInfo.source,\n );\n if (workflowInfo) {\n instance.description = workflowDefinitionSrc.description;\n }\n return instance;\n }\n\n private handleGraphqlClientError(scenario: string, result: any) {\n if (!result?.error) {\n return;\n }\n this.logger.error(`${scenario} ${result}`);\n const networkError = result.error.networkError?.cause?.message;\n if (networkError) {\n const toThrow = new Error(`${result.error.message}. ${networkError}`);\n toThrow.name = 'Network Error';\n throw toThrow;\n } else {\n throw result.error;\n }\n }\n\n private removeNodes(instance: ProcessInstance): ProcessInstance {\n const errorNodeId = instance.error?.nodeInstanceId;\n instance.nodes = instance.nodes.filter(node => {\n return !node.errorMessage || node.id === errorNodeId;\n });\n return instance;\n }\n}\n"],"names":["ErrorBuilder","Client","fetchExchange","buildFilterCondition","buildGraphQlQuery","FETCH_PROCESS_INSTANCES_SORT_FIELD","parseWorkflowVariables","gql","fromWorkflowSource"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DataIndexService.cjs.js","sources":["../../src/service/DataIndexService.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 { LoggerService } from '@backstage/backend-plugin-api';\n\nimport { Client, fetchExchange, gql } from '@urql/core';\n\nimport {\n Filter,\n fromWorkflowSource,\n IntrospectionField,\n NestedFilter,\n parseWorkflowVariables,\n ProcessInstance,\n WorkflowDefinition,\n WorkflowInfo,\n} from '@red-hat-developer-hub/backstage-plugin-orchestrator-common';\n\nimport { ErrorBuilder } from '../helpers/errorBuilder';\nimport { buildFilterCondition } from '../helpers/filterBuilder';\nimport { buildGraphQlQuery } from '../helpers/queryBuilder';\nimport { Pagination } from '../types/pagination';\nimport { FETCH_PROCESS_INSTANCES_SORT_FIELD } from './constants';\n\nexport class DataIndexService {\n private readonly client: Client;\n public processDefinitionArguments: IntrospectionField[] = [];\n public processInstanceArguments: IntrospectionField[] = [];\n\n public constructor(\n private readonly dataIndexUrl: string,\n private readonly logger: LoggerService,\n ) {\n if (!dataIndexUrl.length) {\n throw ErrorBuilder.GET_NO_DATA_INDEX_URL_ERR();\n }\n\n this.client = this.getNewGraphQLClient();\n }\n\n private getNewGraphQLClient(): Client {\n const diURL = `${this.dataIndexUrl}/graphql`;\n return new Client({\n url: diURL,\n exchanges: [fetchExchange],\n });\n }\n\n public async initInputProcessDefinitionArgs(): Promise<IntrospectionField[]> {\n if (this.processDefinitionArguments.length === 0) {\n this.processDefinitionArguments =\n await this.inspectInputArgument('ProcessDefinition');\n }\n return this.processDefinitionArguments; // For testing purposes\n }\n\n public graphQLArgumentQuery(type: string): string {\n return `query ${type}Argument {\n __type(name: \"${type}Argument\") {\n kind\n name\n inputFields {\n name\n type {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n }\n }\n }\n }\n }\n }\n }`;\n }\n\n public async inspectInputArgument(\n type: string,\n ): Promise<IntrospectionField[]> {\n const result = await this.client.query(this.graphQLArgumentQuery(type), {});\n\n this.logger.debug(`Introspection query result: ${JSON.stringify(result)}`);\n\n this.handleGraphqlClientError(\n 'Error executing introspection query',\n result,\n );\n\n const pairs: IntrospectionField[] = [];\n if (result?.data?.__type?.inputFields) {\n for (const field of result.data.__type.inputFields) {\n if (\n field.name !== 'and' &&\n field.name !== 'or' &&\n field.name !== 'not'\n ) {\n pairs.push({\n name: field.name,\n type: {\n name: field.type.name,\n kind: field.type.kind,\n ofType: field.type.ofType,\n },\n });\n }\n }\n }\n return pairs;\n }\n\n public async fetchWorkflowInfo(\n definitionId: string,\n ): Promise<WorkflowInfo | undefined> {\n const graphQlQuery = `{ ProcessDefinitions ( where: {id: {equal: \"${definitionId}\" } } ) { id, name, version, type, endpoint, serviceUrl, source } }`;\n\n const result = await this.client.query(graphQlQuery, {});\n\n this.logger.debug(\n `Get workflow definition result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError('Error fetching workflow definition', result);\n\n const processDefinitions = result.data.ProcessDefinitions as WorkflowInfo[];\n\n if (processDefinitions.length === 0) {\n this.logger.info(`No workflow definition found for ${definitionId}`);\n return undefined;\n }\n\n return processDefinitions[0];\n }\n\n public async fetchWorkflowServiceUrls(): Promise<Record<string, string>> {\n const graphQlQuery = `{ ProcessDefinitions { id, serviceUrl } }`;\n\n const result = await this.client.query(graphQlQuery, {});\n\n this.logger.debug(\n `Get workflow service urls result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error fetching workflow service urls',\n result,\n );\n\n const processDefinitions = result.data.ProcessDefinitions as WorkflowInfo[];\n return processDefinitions\n .filter(definition => definition.serviceUrl)\n .map(definition => ({ [definition.id]: definition.serviceUrl! }))\n .reduce((acc, curr) => ({ ...acc, ...curr }), {});\n }\n\n private filterDeletedWorkflows(workflows: WorkflowInfo[]): WorkflowInfo[] {\n // filter deleted workflows, that were deleted via deleting SonataFlow CR, operator marks them as unavailable\n // Note this is different then the isAvailable status in WorkflowOverviewDTO, that is used to mark workflows that are not available on the service for unexpected reasons\n\n const availableWorkflows: WorkflowInfo[] = [];\n const unavailableWorkflows: WorkflowInfo[] = [];\n\n workflows.forEach(workflow => {\n const isUnavailable = workflow.metadata?.status === 'unavailable';\n if (isUnavailable) {\n unavailableWorkflows.push(workflow);\n } else {\n availableWorkflows.push(workflow);\n }\n });\n\n this.logger.debug(\n `filtered deleted workflows when fetching workflow infos: ${JSON.stringify(\n unavailableWorkflows.map(w => ({\n id: w.id,\n name: w.name,\n status: w.metadata?.status,\n })),\n )}`,\n );\n\n return availableWorkflows;\n }\n\n public async fetchWorkflowInfos(args: {\n definitionIds?: string[];\n pagination?: Pagination;\n filter?: Filter;\n }): Promise<WorkflowInfo[]> {\n this.logger.info(`fetchWorkflowInfos() called: ${this.dataIndexUrl}`);\n const { definitionIds, pagination, filter } = args;\n\n const definitionIdsCondition =\n definitionIds !== undefined && definitionIds.length > 0\n ? `id: {in: ${JSON.stringify(definitionIds)}}`\n : undefined;\n\n const filterCondition = filter\n ? buildFilterCondition(\n await this.initInputProcessDefinitionArgs(),\n 'ProcessDefinition',\n filter,\n )\n : undefined;\n\n let whereClause: string | undefined;\n if (definitionIdsCondition && filterCondition) {\n whereClause = `and: [{${definitionIdsCondition}}, {${filterCondition}}]`;\n } else if (definitionIdsCondition || filterCondition) {\n whereClause = definitionIdsCondition ?? filterCondition;\n } else {\n whereClause = undefined;\n }\n\n const graphQlQuery = buildGraphQlQuery({\n type: 'ProcessDefinitions',\n queryBody:\n 'id, name, version, type, endpoint, serviceUrl, source, metadata',\n whereClause,\n pagination,\n });\n this.logger.debug(`GraphQL query: ${graphQlQuery}`);\n const result = await this.client.query(graphQlQuery, {});\n this.logger.debug(\n `Get workflow definitions result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error fetching data index swf results',\n result,\n );\n\n return this.filterDeletedWorkflows(result.data.ProcessDefinitions);\n }\n\n public async fetchInstances(args: {\n definitionIds?: string[];\n pagination?: Pagination;\n filter?: Filter;\n }): Promise<ProcessInstance[]> {\n const { pagination, definitionIds, filter } = args;\n if (pagination) pagination.sortField ??= FETCH_PROCESS_INSTANCES_SORT_FIELD;\n\n const processIdNotNullCondition = 'processId: {isNull: false}';\n const definitionIdsCondition =\n definitionIds && definitionIds.length > 0\n ? `processId: {in: ${JSON.stringify(definitionIds)}}`\n : undefined;\n const type = 'ProcessInstance';\n const filterCondition = filter\n ? buildFilterCondition(\n await this.inspectInputArgument(type),\n type,\n filter,\n )\n : '';\n\n let whereClause = '';\n const conditions = [];\n\n if (processIdNotNullCondition) {\n conditions.push(`{${processIdNotNullCondition}}`);\n }\n\n if (definitionIdsCondition) {\n conditions.push(`{${definitionIdsCondition}}`);\n }\n\n if (filter) {\n conditions.push(`{${filterCondition}}`);\n }\n\n if (conditions.length === 0) {\n whereClause = processIdNotNullCondition;\n } else if (conditions.length === 1) {\n whereClause = conditions[0].slice(1, -1); // Remove the outer braces\n } else if (conditions.length > 1) {\n whereClause = `and: [${conditions.join(', ')}]`;\n }\n\n const graphQlQuery = buildGraphQlQuery({\n type: 'ProcessInstances',\n queryBody:\n 'id, processName, processId, state, start, end, nodes { id }, variables, executionSummary, parentProcessInstance {id, processName, businessKey}',\n whereClause,\n pagination,\n });\n\n this.logger.debug(`GraphQL query: ${graphQlQuery}`);\n\n const result = await this.client.query<{\n ProcessInstances: ProcessInstance[];\n }>(graphQlQuery, {});\n this.logger.debug(\n `Fetch process instances result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError('Error when fetching instances', result);\n\n const processInstancesSrc = result.data ? result.data.ProcessInstances : [];\n\n const processInstances = await Promise.all(\n processInstancesSrc.map(async instance => {\n return await this.getWorkflowDefinitionFromInstance(instance);\n }),\n );\n return processInstances;\n }\n\n public async fetchDefinitionIdsFromInstances(args: {\n targetEntity: string;\n }): Promise<string[]> {\n const { targetEntity } = args;\n\n const processIdNotNullCondition = 'processId: {isNull: false}';\n\n const type = 'ProcessInstance';\n const targetEntityFilter: NestedFilter = {\n field: 'variables',\n nested: {\n operator: 'EQ',\n field: 'targetEntity',\n value: targetEntity,\n },\n };\n\n const filterCondition = buildFilterCondition(\n await this.inspectInputArgument(type),\n type,\n targetEntityFilter,\n );\n\n const whereClause = `and: [{${processIdNotNullCondition}}, {${filterCondition}}]`;\n\n // Apply a limit to prevent memory exhaustion and network timeouts when entities\n // have thousands of process instances. Entities with more instances than this limit\n // may not see all their associated workflows.\n const pagination = {\n limit: 1000,\n offset: 0,\n };\n\n const graphQlQuery = buildGraphQlQuery({\n type: 'ProcessInstances',\n queryBody: 'processId',\n whereClause,\n pagination,\n });\n\n this.logger.debug(`GraphQL query: ${graphQlQuery}`);\n\n const result = await this.client.query<{\n ProcessInstances: ProcessInstance[];\n }>(graphQlQuery, {});\n this.logger.debug(\n `Fetch definition ids from instances history result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error when fetching definition ids from instances history',\n result,\n );\n\n const processInstancesSrc = result.data ? result.data.ProcessInstances : [];\n const distinctProcessIds = [\n ...new Set(processInstancesSrc.map(instance => instance.processId)),\n ]; // graphql doesn't support distinct so we need to use a set to get the distinct process ids\n return distinctProcessIds;\n }\n\n private async getWorkflowDefinitionFromInstance(instance: ProcessInstance) {\n const workflowInfo = await this.fetchWorkflowInfo(instance.processId);\n if (!workflowInfo?.source) {\n throw new Error(\n `Workflow defintion is required to fetch instance ${instance.id}`,\n );\n }\n if (workflowInfo) {\n instance.description = workflowInfo.description;\n }\n return instance;\n }\n\n public async fetchWorkflowSource(\n definitionId: string,\n ): Promise<string | undefined> {\n const graphQlQuery = `{ ProcessDefinitions ( where: {id: {equal: \"${definitionId}\" } } ) { id, source } }`;\n\n const result = await this.client.query(graphQlQuery, {});\n\n this.logger.debug(\n `Fetch workflow source result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error when fetching workflow source',\n result,\n );\n\n const processDefinitions = result.data.ProcessDefinitions as WorkflowInfo[];\n\n if (processDefinitions.length === 0) {\n this.logger.info(`No workflow source found for ${definitionId}`);\n return undefined;\n }\n\n return processDefinitions[0].source;\n }\n\n public async fetchInstancesByDefinitionId(args: {\n definitionId: string;\n limit: number;\n offset: number;\n }): Promise<ProcessInstance[]> {\n const graphQlQuery = `{ ProcessInstances(where: {processId: {equal: \"${args.definitionId}\" } }, orderBy: {start:DESC}, pagination: {limit: ${args.limit}, offset: ${args.offset}}) { id, processName, state, start, end } }`;\n\n const result = await this.client.query(graphQlQuery, {});\n\n this.logger.debug(\n `Fetch workflow instances result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error when fetching workflow instances',\n result,\n );\n\n return result.data.ProcessInstances;\n }\n\n public async fetchInstanceVariables(\n instanceId: string,\n ): Promise<object | undefined> {\n const graphQlQuery = `{ ProcessInstances (where: { id: {equal: \"${instanceId}\" } } ) { variables } }`;\n\n const result = await this.client.query(graphQlQuery, {});\n\n this.logger.debug(\n `Fetch process instance variables result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error when fetching process instance variables',\n result,\n );\n\n const processInstances = result.data.ProcessInstances as ProcessInstance[];\n\n if (processInstances.length === 0) {\n return undefined;\n }\n\n return parseWorkflowVariables(processInstances[0].variables as object);\n }\n\n public async fetchDefinitionIdByInstanceId(\n instanceId: string,\n ): Promise<string | undefined> {\n const graphQlQuery = `{ ProcessInstances (where: { id: {equal: \"${instanceId}\" } } ) { processId } }`;\n\n const result = await this.client.query(graphQlQuery, {});\n\n this.logger.debug(\n `Fetch process id from instance result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error when fetching process id from instance',\n result,\n );\n\n const processInstances = result.data.ProcessInstances as ProcessInstance[];\n\n if (processInstances.length === 0) {\n return undefined;\n }\n\n return processInstances[0].processId;\n }\n\n public async fetchInstance(\n instanceId: string,\n ): Promise<ProcessInstance | undefined> {\n const FindProcessInstanceQuery = gql`\n query FindProcessInstanceQuery($instanceId: String!) {\n ProcessInstances(where: { id: { equal: $instanceId } }) {\n id\n processName\n processId\n serviceUrl\n executionSummary\n state\n start\n end\n nodes {\n id\n nodeId\n definitionId\n type\n name\n enter\n exit\n errorMessage\n }\n variables\n parentProcessInstance {\n id\n processName\n businessKey\n }\n error {\n nodeDefinitionId\n nodeInstanceId\n message\n }\n }\n }\n `;\n\n const result = await this.client.query(FindProcessInstanceQuery, {\n instanceId,\n });\n\n this.logger.debug(\n `Fetch process instance result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error when fetching process instances',\n result,\n );\n\n const processInstances = result.data.ProcessInstances as ProcessInstance[];\n\n if (processInstances.length === 0) {\n return undefined;\n }\n\n const instance = this.removeNodes(processInstances[0]);\n\n const workflowInfo = await this.fetchWorkflowInfo(instance.processId);\n if (!workflowInfo?.source) {\n throw new Error(\n `Workflow definition is required to fetch instance ${instance.id}`,\n );\n }\n const workflowDefinitionSrc: WorkflowDefinition = fromWorkflowSource(\n workflowInfo.source,\n );\n if (workflowInfo) {\n instance.description = workflowDefinitionSrc.description;\n }\n return instance;\n }\n\n private handleGraphqlClientError(scenario: string, result: any) {\n if (!result?.error) {\n return;\n }\n\n this.logger.error(scenario, result);\n\n const networkError = result.error.networkError?.cause?.message;\n if (networkError) {\n const toThrow = new Error(`${result.error.message}. ${networkError}`);\n toThrow.name = 'Network Error';\n throw toThrow;\n }\n\n const graphQLErrors = result.error.graphQLErrors;\n if (\n result.data &&\n Array.isArray(graphQLErrors) &&\n graphQLErrors.length > 0\n ) {\n const graphQLError = graphQLErrors[0];\n if (\n graphQLError?.extensions?.classification === 'DataFetchingException'\n ) {\n // we have data (perhaps partial) and it is a data fetch error ==> log and ignore\n return;\n }\n }\n\n throw result.error;\n }\n\n private removeNodes(instance: ProcessInstance): ProcessInstance {\n const errorNodeId = instance.error?.nodeInstanceId;\n instance.nodes = instance.nodes.filter(node => {\n return !node.errorMessage || node.id === errorNodeId;\n });\n return instance;\n }\n}\n"],"names":["ErrorBuilder","Client","fetchExchange","buildFilterCondition","buildGraphQlQuery","FETCH_PROCESS_INSTANCES_SORT_FIELD","parseWorkflowVariables","gql","fromWorkflowSource"],"mappings":"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"}
|
|
@@ -25,6 +25,9 @@ class OrchestratorService {
|
|
|
25
25
|
filter: args.filter
|
|
26
26
|
});
|
|
27
27
|
}
|
|
28
|
+
async fetchDefinitionIdsFromInstances(args) {
|
|
29
|
+
return await this.dataIndexService.fetchDefinitionIdsFromInstances(args);
|
|
30
|
+
}
|
|
28
31
|
async fetchWorkflowSource(args) {
|
|
29
32
|
const { definitionId } = args;
|
|
30
33
|
return await this.dataIndexService.fetchWorkflowSource(definitionId);
|
|
@@ -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 { 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 }): Promise<void> {\n return await this.sonataFlowService.abortInstance(args);\n }\n\n public async fetchWorkflowInfo(args: {\n definitionId: string;\n }): Promise<WorkflowInfo | undefined> {\n const { definitionId } = args;\n return await this.dataIndexService.fetchWorkflowInfo(definitionId);\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 }): Promise<string | undefined> {\n const { definitionId } = args;\n return await this.dataIndexService.fetchWorkflowSource(definitionId);\n }\n\n public async fetchInstanceVariables(args: {\n instanceId: string;\n }): Promise<object | undefined> {\n const { instanceId } = args;\n return await this.dataIndexService.fetchInstanceVariables(instanceId);\n }\n\n public async fetchInstance(args: {\n instanceId: string;\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 }): Promise<WorkflowInfo | undefined> {\n return await this.sonataFlowService.fetchWorkflowInfoOnService(args);\n }\n\n public async fetchWorkflowDefinition(args: {\n definitionId: string;\n }): Promise<WorkflowDefinition | undefined> {\n const { definitionId } = args;\n return await this.sonataFlowService.fetchWorkflowDefinition(definitionId);\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 backstageToken?: string | undefined;\n }): Promise<WorkflowExecutionResponse | undefined> {\n return await this.sonataFlowService.executeWorkflow(args);\n }\n\n public async retriggerWorkflow(args: {\n definitionId: string;\n instanceId: string;\n serviceUrl: string;\n }): Promise<boolean | undefined> {\n return this.sonataFlowService.retriggerInstance(args);\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 serviceUrl: string;\n }): Promise<boolean | undefined> {\n const { definitionId, serviceUrl } = args;\n const isServiceUp = await this.sonataFlowService.pingWorkflowService({\n definitionId,\n serviceUrl,\n });\n return isServiceUp;\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 { 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 }): Promise<void> {\n return await this.sonataFlowService.abortInstance(args);\n }\n\n public async fetchWorkflowInfo(args: {\n definitionId: string;\n }): Promise<WorkflowInfo | undefined> {\n const { definitionId } = args;\n return await this.dataIndexService.fetchWorkflowInfo(definitionId);\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 fetchDefinitionIdsFromInstances(args: {\n targetEntity: string;\n }): Promise<string[]> {\n return await this.dataIndexService.fetchDefinitionIdsFromInstances(args);\n }\n\n public async fetchWorkflowSource(args: {\n definitionId: string;\n }): Promise<string | undefined> {\n const { definitionId } = args;\n return await this.dataIndexService.fetchWorkflowSource(definitionId);\n }\n\n public async fetchInstanceVariables(args: {\n instanceId: string;\n }): Promise<object | undefined> {\n const { instanceId } = args;\n return await this.dataIndexService.fetchInstanceVariables(instanceId);\n }\n\n public async fetchInstance(args: {\n instanceId: string;\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 }): Promise<WorkflowInfo | undefined> {\n return await this.sonataFlowService.fetchWorkflowInfoOnService(args);\n }\n\n public async fetchWorkflowDefinition(args: {\n definitionId: string;\n }): Promise<WorkflowDefinition | undefined> {\n const { definitionId } = args;\n return await this.sonataFlowService.fetchWorkflowDefinition(definitionId);\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 backstageToken?: string | undefined;\n }): Promise<WorkflowExecutionResponse | undefined> {\n return await this.sonataFlowService.executeWorkflow(args);\n }\n\n public async retriggerWorkflow(args: {\n definitionId: string;\n instanceId: string;\n serviceUrl: string;\n authTokens?: Array<AuthToken>;\n backstageToken?: string | undefined;\n }): Promise<boolean | undefined> {\n return this.sonataFlowService.retriggerInstance(args);\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 serviceUrl: string;\n }): Promise<boolean | undefined> {\n const { definitionId, serviceUrl } = args;\n const isServiceUp = await this.sonataFlowService.pingWorkflowService({\n definitionId,\n serviceUrl,\n });\n return isServiceUp;\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -61,22 +61,7 @@ class SonataFlowService {
|
|
|
61
61
|
const headers = {
|
|
62
62
|
"Content-Type": "application/json"
|
|
63
63
|
};
|
|
64
|
-
|
|
65
|
-
args.authTokens.forEach((tokenObj) => {
|
|
66
|
-
if (tokenObj.provider && tokenObj.token) {
|
|
67
|
-
const headerKey = `X-Authorization-${capitalize__default.default(tokenObj.provider)}`;
|
|
68
|
-
headers[headerKey] = String(tokenObj.token);
|
|
69
|
-
}
|
|
70
|
-
});
|
|
71
|
-
} else {
|
|
72
|
-
this.logger.debug(
|
|
73
|
-
"No authTokens provided or authTokens is not an array."
|
|
74
|
-
);
|
|
75
|
-
}
|
|
76
|
-
if (args.backstageToken) {
|
|
77
|
-
const headerKey = "X-Authorization-Backstage";
|
|
78
|
-
headers[headerKey] = args.backstageToken;
|
|
79
|
-
}
|
|
64
|
+
this.addAuthHeaders(headers, args.authTokens, args.backstageToken);
|
|
80
65
|
const headerKeys = Object.keys(headers);
|
|
81
66
|
this.logger.info(
|
|
82
67
|
`Executing workflow ${args.definitionId} with headers: ${headerKeys.join(", ")}`
|
|
@@ -113,12 +98,39 @@ class SonataFlowService {
|
|
|
113
98
|
);
|
|
114
99
|
throw new Error("Execute workflow did not return a workflow instance ID");
|
|
115
100
|
}
|
|
101
|
+
addAuthHeaders(headers, authTokens, backstageToken) {
|
|
102
|
+
if (authTokens && Array.isArray(authTokens)) {
|
|
103
|
+
authTokens.forEach((tokenObj) => {
|
|
104
|
+
if (tokenObj.provider && tokenObj.token) {
|
|
105
|
+
const headerKey = `X-Authorization-${capitalize__default.default(tokenObj.provider)}`;
|
|
106
|
+
headers[headerKey] = String(tokenObj.token);
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
} else {
|
|
110
|
+
this.logger.debug(
|
|
111
|
+
"No authTokens provided or authTokens is not an array."
|
|
112
|
+
);
|
|
113
|
+
}
|
|
114
|
+
if (backstageToken) {
|
|
115
|
+
const headerKey = "X-Authorization-Backstage";
|
|
116
|
+
headers[headerKey] = backstageToken;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
116
119
|
async retriggerInstance(args) {
|
|
120
|
+
const headers = {
|
|
121
|
+
"Content-Type": "application/json"
|
|
122
|
+
};
|
|
123
|
+
this.addAuthHeaders(headers, args.authTokens, args.backstageToken);
|
|
124
|
+
const headerKeys = Object.keys(headers);
|
|
125
|
+
this.logger.info(
|
|
126
|
+
`Retriggering workflow ${args.definitionId} with headers: ${headerKeys.join(", ")}`
|
|
127
|
+
);
|
|
117
128
|
const urlToFetch = `${args.serviceUrl}/management/processes/${args.definitionId}/instances/${args.instanceId}/retrigger`;
|
|
118
129
|
let response;
|
|
119
130
|
try {
|
|
120
131
|
response = await fetch(urlToFetch, {
|
|
121
|
-
method: "POST"
|
|
132
|
+
method: "POST",
|
|
133
|
+
headers
|
|
122
134
|
});
|
|
123
135
|
} catch (error) {
|
|
124
136
|
this.logger.error(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SonataFlowService.cjs.js","sources":["../../src/service/SonataFlowService.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 { LoggerService } from '@backstage/backend-plugin-api';\n\nimport capitalize from 'lodash/capitalize';\n\nimport {\n AuthToken,\n extractWorkflowFormat,\n Filter,\n fromWorkflowSource,\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 let response: Response | undefined;\n try {\n response = await fetch(urlToFetch);\n } catch (error) {\n this.logger.error(\n `Failed to fetch from ${urlToFetch}: ${(error as Error).message}`,\n );\n }\n\n const jsonResponse = await this.handleWorkflowServiceResponse(\n 'Get workflow info',\n args.definitionId,\n urlToFetch,\n response,\n 'GET',\n );\n this.logger.debug(\n `Fetch workflow info result: ${JSON.stringify(jsonResponse)}`,\n );\n return jsonResponse;\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 authTokens?: Array<AuthToken>;\n backstageToken?: string | undefined;\n }): Promise<WorkflowExecutionResponse | undefined> {\n const urlToFetch = `${args.serviceUrl}/${args.definitionId}`;\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n\n // Add X-Authentication headers from authTokens\n if (args.authTokens && Array.isArray(args.authTokens)) {\n args.authTokens.forEach(tokenObj => {\n if (tokenObj.provider && tokenObj.token) {\n const headerKey = `X-Authorization-${capitalize(tokenObj.provider)}`;\n headers[headerKey] = String(tokenObj.token); // Ensure token is a string\n }\n });\n } else {\n this.logger.debug(\n 'No authTokens provided or authTokens is not an array.',\n );\n }\n\n if (args.backstageToken) {\n const headerKey = 'X-Authorization-Backstage';\n headers[headerKey] = args.backstageToken;\n }\n\n const headerKeys = Object.keys(headers);\n this.logger.info(\n `Executing workflow ${args.definitionId} with headers: ${headerKeys.join(', ')}`,\n );\n\n let response: Response | undefined;\n try {\n response = await fetch(urlToFetch, {\n method: 'POST',\n body: JSON.stringify(args.inputData || {}),\n headers,\n });\n } catch (error) {\n this.logger.error(\n `Failed to fetch from ${urlToFetch}: ${(error as Error).message}`,\n );\n }\n\n const json = await this.handleWorkflowServiceResponse(\n 'Execute',\n args.definitionId,\n urlToFetch,\n response,\n 'POST',\n );\n if (json.id) {\n this.logger.debug(\n `Execute workflow successful. Response: ${JSON.stringify(json)}`,\n );\n return json;\n }\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 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 let response: Response | undefined;\n try {\n response = await fetch(urlToFetch, {\n method: 'POST',\n });\n } catch (error) {\n this.logger.error(\n `Failed to fetch from ${urlToFetch}: ${(error as Error).message}`,\n );\n }\n\n await this.handleWorkflowServiceResponse(\n 'Retrigger',\n args.definitionId,\n urlToFetch,\n response,\n 'POST',\n );\n\n return true;\n }\n\n public async abortInstance(args: {\n definitionId: string;\n instanceId: string;\n serviceUrl: string;\n }): Promise<void> {\n const urlToFetch = `${args.serviceUrl}/management/processes/${args.definitionId}/instances/${args.instanceId}`;\n\n let response: Response | undefined;\n try {\n response = await fetch(urlToFetch, {\n method: 'DELETE',\n });\n } catch (error) {\n this.logger.error(\n `Failed to fetch from ${urlToFetch}: ${(error as Error).message}`,\n );\n }\n\n await this.handleWorkflowServiceResponse(\n 'Abort',\n args.definitionId,\n urlToFetch,\n response,\n 'DELETE',\n );\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 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 let response: Response | undefined;\n try {\n response = await fetch(urlToFetch);\n } catch (error) {\n this.logger.error(\n `Failed to fetch from ${urlToFetch}: ${(error as Error).message}`,\n );\n return false;\n }\n return response.ok;\n }\n\n private async handleWorkflowServiceResponse(\n operation: 'Abort' | 'Execute' | 'Retrigger' | 'Get workflow info',\n workflowId: string,\n urlToFetch: string,\n response: Response | undefined,\n httpMethod: Request['method'],\n ): Promise<any> {\n const logErrorPrefix = `Error during operation '${operation}' on workflow ${workflowId} with service URL ${urlToFetch}`;\n if (!response) {\n throw new Error(`${logErrorPrefix} : fetch failed`);\n }\n const errorLines: string[] = [];\n errorLines.push(`HTTP ${httpMethod} request to ${urlToFetch} failed.`);\n errorLines.push(`Status Code: ${response.status}`);\n if (response.statusText) {\n errorLines.push(`Status Text: ${response.statusText}`);\n }\n try {\n const jsonResponse = await response.json();\n if ((jsonResponse.id && operation === 'Execute') || response.ok) {\n // Treat as successful from the UI perspective.\n // This allows navigation to the instance page even if the workflow execution\n // fails immediately after initiation. The presence of an instance id or a successful\n // 'ok' status indicates the initiation was successful.\n return jsonResponse;\n }\n if (jsonResponse?.message) {\n errorLines.push(`Message: ${jsonResponse.message}`);\n }\n if (jsonResponse?.details) {\n errorLines.push(`Details: ${jsonResponse.details}`);\n }\n if (jsonResponse?.stack) {\n errorLines.push(`Stack Trace: ${jsonResponse.stack}`);\n }\n if (jsonResponse?.failedNodeId) {\n errorLines.push(`Failed Node ID: ${jsonResponse.failedNodeId}`);\n }\n this.logger.error(`${logErrorPrefix}: ${JSON.stringify(jsonResponse)}`);\n } catch (jsonParseError) {\n this.logger.error(\n `${logErrorPrefix}. The details of this error cannot be provided because the response body was not in a parsable format.`,\n );\n }\n throw new Error(errorLines.join('\\n'));\n }\n}\n"],"names":["fromWorkflowSource","capitalize","extractWorkflowFormat"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SonataFlowService.cjs.js","sources":["../../src/service/SonataFlowService.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 { LoggerService } from '@backstage/backend-plugin-api';\n\nimport capitalize from 'lodash/capitalize';\n\nimport {\n AuthToken,\n extractWorkflowFormat,\n Filter,\n fromWorkflowSource,\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 let response: Response | undefined;\n try {\n response = await fetch(urlToFetch);\n } catch (error) {\n this.logger.error(\n `Failed to fetch from ${urlToFetch}: ${(error as Error).message}`,\n );\n }\n\n const jsonResponse = await this.handleWorkflowServiceResponse(\n 'Get workflow info',\n args.definitionId,\n urlToFetch,\n response,\n 'GET',\n );\n this.logger.debug(\n `Fetch workflow info result: ${JSON.stringify(jsonResponse)}`,\n );\n return jsonResponse;\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 authTokens?: Array<AuthToken>;\n backstageToken?: string | undefined;\n }): Promise<WorkflowExecutionResponse | undefined> {\n const urlToFetch = `${args.serviceUrl}/${args.definitionId}`;\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n\n this.addAuthHeaders(headers, args.authTokens, args.backstageToken);\n const headerKeys = Object.keys(headers);\n this.logger.info(\n `Executing workflow ${args.definitionId} with headers: ${headerKeys.join(', ')}`,\n );\n\n let response: Response | undefined;\n try {\n response = await fetch(urlToFetch, {\n method: 'POST',\n body: JSON.stringify(args.inputData || {}),\n headers,\n });\n } catch (error) {\n this.logger.error(\n `Failed to fetch from ${urlToFetch}: ${(error as Error).message}`,\n );\n }\n\n const json = await this.handleWorkflowServiceResponse(\n 'Execute',\n args.definitionId,\n urlToFetch,\n response,\n 'POST',\n );\n if (json.id) {\n this.logger.debug(\n `Execute workflow successful. Response: ${JSON.stringify(json)}`,\n );\n return json;\n }\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 private addAuthHeaders(\n headers: Record<string, string>,\n authTokens?: Array<AuthToken>,\n backstageToken?: string | undefined,\n ) {\n // Add X-Authentication headers from authTokens\n if (authTokens && Array.isArray(authTokens)) {\n authTokens.forEach(tokenObj => {\n if (tokenObj.provider && tokenObj.token) {\n const headerKey = `X-Authorization-${capitalize(tokenObj.provider)}`;\n headers[headerKey] = String(tokenObj.token); // Ensure token is a string\n }\n });\n } else {\n this.logger.debug(\n 'No authTokens provided or authTokens is not an array.',\n );\n }\n\n if (backstageToken) {\n const headerKey = 'X-Authorization-Backstage';\n headers[headerKey] = backstageToken;\n }\n }\n\n public async retriggerInstance(args: {\n definitionId: string;\n instanceId: string;\n serviceUrl: string;\n authTokens?: Array<AuthToken>;\n backstageToken?: string | undefined;\n }): Promise<boolean> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n\n this.addAuthHeaders(headers, args.authTokens, args.backstageToken);\n const headerKeys = Object.keys(headers);\n this.logger.info(\n `Retriggering workflow ${args.definitionId} with headers: ${headerKeys.join(', ')}`,\n );\n\n const urlToFetch = `${args.serviceUrl}/management/processes/${args.definitionId}/instances/${args.instanceId}/retrigger`;\n\n let response: Response | undefined;\n try {\n response = await fetch(urlToFetch, {\n method: 'POST',\n headers,\n });\n } catch (error) {\n this.logger.error(\n `Failed to fetch from ${urlToFetch}: ${(error as Error).message}`,\n );\n }\n\n await this.handleWorkflowServiceResponse(\n 'Retrigger',\n args.definitionId,\n urlToFetch,\n response,\n 'POST',\n );\n\n return true;\n }\n\n public async abortInstance(args: {\n definitionId: string;\n instanceId: string;\n serviceUrl: string;\n }): Promise<void> {\n const urlToFetch = `${args.serviceUrl}/management/processes/${args.definitionId}/instances/${args.instanceId}`;\n\n let response: Response | undefined;\n try {\n response = await fetch(urlToFetch, {\n method: 'DELETE',\n });\n } catch (error) {\n this.logger.error(\n `Failed to fetch from ${urlToFetch}: ${(error as Error).message}`,\n );\n }\n\n await this.handleWorkflowServiceResponse(\n 'Abort',\n args.definitionId,\n urlToFetch,\n response,\n 'DELETE',\n );\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 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 let response: Response | undefined;\n try {\n response = await fetch(urlToFetch);\n } catch (error) {\n this.logger.error(\n `Failed to fetch from ${urlToFetch}: ${(error as Error).message}`,\n );\n return false;\n }\n return response.ok;\n }\n\n private async handleWorkflowServiceResponse(\n operation: 'Abort' | 'Execute' | 'Retrigger' | 'Get workflow info',\n workflowId: string,\n urlToFetch: string,\n response: Response | undefined,\n httpMethod: Request['method'],\n ): Promise<any> {\n const logErrorPrefix = `Error during operation '${operation}' on workflow ${workflowId} with service URL ${urlToFetch}`;\n if (!response) {\n throw new Error(`${logErrorPrefix} : fetch failed`);\n }\n const errorLines: string[] = [];\n errorLines.push(`HTTP ${httpMethod} request to ${urlToFetch} failed.`);\n errorLines.push(`Status Code: ${response.status}`);\n if (response.statusText) {\n errorLines.push(`Status Text: ${response.statusText}`);\n }\n try {\n const jsonResponse = await response.json();\n if ((jsonResponse.id && operation === 'Execute') || response.ok) {\n // Treat as successful from the UI perspective.\n // This allows navigation to the instance page even if the workflow execution\n // fails immediately after initiation. The presence of an instance id or a successful\n // 'ok' status indicates the initiation was successful.\n return jsonResponse;\n }\n if (jsonResponse?.message) {\n errorLines.push(`Message: ${jsonResponse.message}`);\n }\n if (jsonResponse?.details) {\n errorLines.push(`Details: ${jsonResponse.details}`);\n }\n if (jsonResponse?.stack) {\n errorLines.push(`Stack Trace: ${jsonResponse.stack}`);\n }\n if (jsonResponse?.failedNodeId) {\n errorLines.push(`Failed Node ID: ${jsonResponse.failedNodeId}`);\n }\n this.logger.error(`${logErrorPrefix}: ${JSON.stringify(jsonResponse)}`);\n } catch (jsonParseError) {\n this.logger.error(\n `${logErrorPrefix}. The details of this error cannot be provided because the response body was not in a parsable format.`,\n );\n }\n throw new Error(errorLines.join('\\n'));\n }\n}\n"],"names":["fromWorkflowSource","capitalize","extractWorkflowFormat"],"mappings":"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"}
|
|
@@ -67,6 +67,7 @@ function mapToProcessInstanceDTO(processInstance) {
|
|
|
67
67
|
// @ts-ignore
|
|
68
68
|
workflowdata: variables?.workflowdata,
|
|
69
69
|
initiatorEntity: variables?.initiatorEntity,
|
|
70
|
+
targetEntity: variables?.targetEntity,
|
|
70
71
|
state: processInstance.state ? getProcessInstancesStatusDTOFromString(processInstance.state) : void 0,
|
|
71
72
|
nodes: processInstance.nodes.map(mapToNodeInstanceDTO)
|
|
72
73
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"V2Mappings.cjs.js","sources":["../../../../src/service/api/mapping/V2Mappings.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 moment from 'moment';\n\nimport {\n capitalize,\n ExecuteWorkflowResponseDTO,\n extractWorkflowFormat,\n fromWorkflowSource,\n NodeInstance,\n NodeInstanceDTO,\n ProcessInstance,\n ProcessInstanceDTO,\n ProcessInstanceState,\n ProcessInstanceStatusDTO,\n WorkflowDTO,\n WorkflowExecutionResponse,\n WorkflowFormatDTO,\n WorkflowOverview,\n WorkflowOverviewDTO,\n WorkflowRunStatusDTO,\n type ProcessInstanceStatusDTO as ProcessInstanceStatusDTOType,\n} from '@red-hat-developer-hub/backstage-plugin-orchestrator-common';\n\n// Mapping functions\nexport function mapToWorkflowOverviewDTO(\n overview: WorkflowOverview,\n): WorkflowOverviewDTO {\n return {\n name: overview.name,\n format: overview.format,\n workflowId: overview.workflowId,\n description: overview.description,\n lastRunId: overview.lastRunId,\n lastRunStatus: overview.lastRunStatus\n ? getProcessInstancesStatusDTOFromString(overview.lastRunStatus)\n : undefined,\n lastTriggeredMs: overview.lastTriggeredMs,\n isAvailable: overview.isAvailable,\n };\n}\n\nexport function getWorkflowFormatDTO(source: string): WorkflowFormatDTO {\n return extractWorkflowFormat(source);\n}\n\nexport function mapToWorkflowDTO(source: string): WorkflowDTO {\n const definition = fromWorkflowSource(source);\n return {\n annotations: definition.annotations,\n description: definition.description,\n name: definition.name,\n format: getWorkflowFormatDTO(source),\n id: definition.id,\n };\n}\n\nexport function getProcessInstancesStatusDTOFromString(\n state: string,\n): ProcessInstanceStatusDTOType {\n if (\n !Object.values(ProcessInstanceStatusDTO).includes(\n state as ProcessInstanceStatusDTOType,\n )\n ) {\n throw new Error(\n `state ${state} is not one of the values of type ProcessInstanceStatusDTO`,\n );\n }\n return state as ProcessInstanceStatusDTOType;\n}\n\nexport function mapToProcessInstanceDTO(\n processInstance: ProcessInstance,\n): ProcessInstanceDTO {\n const start = moment(processInstance.start);\n const end = moment(processInstance.end);\n const duration = processInstance.end\n ? moment.duration(start.diff(end)).humanize()\n : undefined;\n\n let variables: Record<string, unknown> | undefined;\n if (typeof processInstance?.variables === 'string') {\n variables = JSON.parse(processInstance?.variables);\n } else {\n variables = processInstance?.variables;\n }\n\n return {\n id: processInstance.id,\n processId: processInstance.processId,\n processName: processInstance.processName,\n description: processInstance.description,\n serviceUrl: processInstance.serviceUrl,\n executionSummary: processInstance.executionSummary,\n endpoint: processInstance.endpoint,\n error: processInstance.error,\n start: processInstance.start,\n end: processInstance.end,\n duration: duration,\n // @ts-ignore\n workflowdata: variables?.workflowdata,\n initiatorEntity: variables?.initiatorEntity as string,\n state: processInstance.state\n ? getProcessInstancesStatusDTOFromString(processInstance.state)\n : undefined,\n nodes: processInstance.nodes.map(mapToNodeInstanceDTO),\n };\n}\n\nexport function mapToNodeInstanceDTO(\n nodeInstance: NodeInstance,\n): NodeInstanceDTO {\n return { ...nodeInstance, __typename: 'NodeInstance' };\n}\n\nexport function mapToExecuteWorkflowResponseDTO(\n workflowId: string,\n workflowExecutionResponse: WorkflowExecutionResponse,\n): ExecuteWorkflowResponseDTO {\n if (!workflowExecutionResponse?.id) {\n throw new Error(\n `Error while mapping ExecuteWorkflowResponse to ExecuteWorkflowResponseDTO for workflow with id ${workflowId}`,\n );\n }\n\n return {\n id: workflowExecutionResponse.id,\n };\n}\n\nexport function mapToWorkflowRunStatusDTO(\n status: ProcessInstanceState,\n): WorkflowRunStatusDTO {\n return {\n key: capitalize(status),\n value: status,\n };\n}\n"],"names":["extractWorkflowFormat","fromWorkflowSource","ProcessInstanceStatusDTO","moment","capitalize"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"V2Mappings.cjs.js","sources":["../../../../src/service/api/mapping/V2Mappings.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 moment from 'moment';\n\nimport {\n capitalize,\n ExecuteWorkflowResponseDTO,\n extractWorkflowFormat,\n fromWorkflowSource,\n NodeInstance,\n NodeInstanceDTO,\n ProcessInstance,\n ProcessInstanceDTO,\n ProcessInstanceState,\n ProcessInstanceStatusDTO,\n WorkflowDTO,\n WorkflowExecutionResponse,\n WorkflowFormatDTO,\n WorkflowOverview,\n WorkflowOverviewDTO,\n WorkflowRunStatusDTO,\n type ProcessInstanceStatusDTO as ProcessInstanceStatusDTOType,\n} from '@red-hat-developer-hub/backstage-plugin-orchestrator-common';\n\n// Mapping functions\nexport function mapToWorkflowOverviewDTO(\n overview: WorkflowOverview,\n): WorkflowOverviewDTO {\n return {\n name: overview.name,\n format: overview.format,\n workflowId: overview.workflowId,\n description: overview.description,\n lastRunId: overview.lastRunId,\n lastRunStatus: overview.lastRunStatus\n ? getProcessInstancesStatusDTOFromString(overview.lastRunStatus)\n : undefined,\n lastTriggeredMs: overview.lastTriggeredMs,\n isAvailable: overview.isAvailable,\n };\n}\n\nexport function getWorkflowFormatDTO(source: string): WorkflowFormatDTO {\n return extractWorkflowFormat(source);\n}\n\nexport function mapToWorkflowDTO(source: string): WorkflowDTO {\n const definition = fromWorkflowSource(source);\n return {\n annotations: definition.annotations,\n description: definition.description,\n name: definition.name,\n format: getWorkflowFormatDTO(source),\n id: definition.id,\n };\n}\n\nexport function getProcessInstancesStatusDTOFromString(\n state: string,\n): ProcessInstanceStatusDTOType {\n if (\n !Object.values(ProcessInstanceStatusDTO).includes(\n state as ProcessInstanceStatusDTOType,\n )\n ) {\n throw new Error(\n `state ${state} is not one of the values of type ProcessInstanceStatusDTO`,\n );\n }\n return state as ProcessInstanceStatusDTOType;\n}\n\nexport function mapToProcessInstanceDTO(\n processInstance: ProcessInstance,\n): ProcessInstanceDTO {\n const start = moment(processInstance.start);\n const end = moment(processInstance.end);\n const duration = processInstance.end\n ? moment.duration(start.diff(end)).humanize()\n : undefined;\n\n let variables: Record<string, unknown> | undefined;\n if (typeof processInstance?.variables === 'string') {\n variables = JSON.parse(processInstance?.variables);\n } else {\n variables = processInstance?.variables;\n }\n\n return {\n id: processInstance.id,\n processId: processInstance.processId,\n processName: processInstance.processName,\n description: processInstance.description,\n serviceUrl: processInstance.serviceUrl,\n executionSummary: processInstance.executionSummary,\n endpoint: processInstance.endpoint,\n error: processInstance.error,\n start: processInstance.start,\n end: processInstance.end,\n duration: duration,\n // @ts-ignore\n workflowdata: variables?.workflowdata,\n initiatorEntity: variables?.initiatorEntity as string,\n targetEntity: variables?.targetEntity as string,\n state: processInstance.state\n ? getProcessInstancesStatusDTOFromString(processInstance.state)\n : undefined,\n nodes: processInstance.nodes.map(mapToNodeInstanceDTO),\n };\n}\n\nexport function mapToNodeInstanceDTO(\n nodeInstance: NodeInstance,\n): NodeInstanceDTO {\n return { ...nodeInstance, __typename: 'NodeInstance' };\n}\n\nexport function mapToExecuteWorkflowResponseDTO(\n workflowId: string,\n workflowExecutionResponse: WorkflowExecutionResponse,\n): ExecuteWorkflowResponseDTO {\n if (!workflowExecutionResponse?.id) {\n throw new Error(\n `Error while mapping ExecuteWorkflowResponse to ExecuteWorkflowResponseDTO for workflow with id ${workflowId}`,\n );\n }\n\n return {\n id: workflowExecutionResponse.id,\n };\n}\n\nexport function mapToWorkflowRunStatusDTO(\n status: ProcessInstanceState,\n): WorkflowRunStatusDTO {\n return {\n key: capitalize(status),\n value: status,\n };\n}\n"],"names":["extractWorkflowFormat","fromWorkflowSource","ProcessInstanceStatusDTO","moment","capitalize"],"mappings":"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"}
|
|
@@ -10,6 +10,30 @@ class V2 {
|
|
|
10
10
|
constructor(orchestratorService) {
|
|
11
11
|
this.orchestratorService = orchestratorService;
|
|
12
12
|
}
|
|
13
|
+
async getWorkflowsOverviewForEntity(targetEntity, annotationWorkflowIds) {
|
|
14
|
+
let combinedWorkflowIds = annotationWorkflowIds;
|
|
15
|
+
if (targetEntity) {
|
|
16
|
+
const definitionIdsFromInstances = await this.orchestratorService.fetchDefinitionIdsFromInstances({
|
|
17
|
+
targetEntity
|
|
18
|
+
});
|
|
19
|
+
if (definitionIdsFromInstances.length > 0) {
|
|
20
|
+
combinedWorkflowIds = Array.from(
|
|
21
|
+
/* @__PURE__ */ new Set([...combinedWorkflowIds, ...definitionIdsFromInstances])
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
if (combinedWorkflowIds.length === 0) {
|
|
26
|
+
return {
|
|
27
|
+
overviews: []
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
const workflowIdsFilter = {
|
|
31
|
+
field: "id",
|
|
32
|
+
operator: "IN",
|
|
33
|
+
value: combinedWorkflowIds
|
|
34
|
+
};
|
|
35
|
+
return this.getWorkflowsOverview(void 0, workflowIdsFilter);
|
|
36
|
+
}
|
|
13
37
|
async getWorkflowsOverview(pagination, filter) {
|
|
14
38
|
const overviews = await this.orchestratorService.fetchWorkflowOverviews({
|
|
15
39
|
pagination,
|
|
@@ -21,8 +45,8 @@ class V2 {
|
|
|
21
45
|
const result = {
|
|
22
46
|
overviews: overviews.map((item) => V2Mappings.mapToWorkflowOverviewDTO(item)),
|
|
23
47
|
paginationInfo: {
|
|
24
|
-
pageSize: pagination
|
|
25
|
-
offset: pagination
|
|
48
|
+
pageSize: pagination?.limit,
|
|
49
|
+
offset: pagination?.offset
|
|
26
50
|
}
|
|
27
51
|
};
|
|
28
52
|
return result;
|
|
@@ -90,7 +114,8 @@ class V2 {
|
|
|
90
114
|
definitionId: workflowId,
|
|
91
115
|
inputData: {
|
|
92
116
|
workflowdata: executeWorkflowRequestDTO.inputData,
|
|
93
|
-
initiatorEntity
|
|
117
|
+
initiatorEntity,
|
|
118
|
+
targetEntity: executeWorkflowRequestDTO.targetEntity
|
|
94
119
|
},
|
|
95
120
|
authTokens: executeWorkflowRequestDTO.authTokens,
|
|
96
121
|
serviceUrl: definition.serviceUrl,
|
|
@@ -111,7 +136,7 @@ class V2 {
|
|
|
111
136
|
}
|
|
112
137
|
return V2Mappings.mapToExecuteWorkflowResponseDTO(workflowId, executionResponse);
|
|
113
138
|
}
|
|
114
|
-
async retriggerInstance(workflowId, instanceId) {
|
|
139
|
+
async retriggerInstance(workflowId, instanceId, retriggerInstanceRequestDTO, backstageToken) {
|
|
115
140
|
const definition = await this.orchestratorService.fetchWorkflowInfo({
|
|
116
141
|
definitionId: workflowId
|
|
117
142
|
});
|
|
@@ -124,7 +149,9 @@ class V2 {
|
|
|
124
149
|
const response = await this.orchestratorService.retriggerWorkflow({
|
|
125
150
|
definitionId: workflowId,
|
|
126
151
|
instanceId,
|
|
127
|
-
serviceUrl: definition.serviceUrl
|
|
152
|
+
serviceUrl: definition.serviceUrl,
|
|
153
|
+
authTokens: retriggerInstanceRequestDTO.authTokens,
|
|
154
|
+
backstageToken
|
|
128
155
|
});
|
|
129
156
|
if (!response) {
|
|
130
157
|
throw new Error(
|
|
@@ -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 AuthToken,\n ExecuteWorkflowRequestDTO,\n ExecuteWorkflowResponseDTO,\n Filter,\n ProcessInstanceDTO,\n ProcessInstanceListResultDTO,\n ProcessInstanceState,\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 });\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 ): Promise<ProcessInstanceDTO> {\n const instance = await this.orchestratorService.fetchInstance({\n instanceId,\n });\n\n if (!instance) {\n throw new Error(`Couldn't fetch process instance ${instanceId}`);\n }\n\n return mapToProcessInstanceDTO(instance);\n }\n\n public async executeWorkflow(\n executeWorkflowRequestDTO: ExecuteWorkflowRequestDTO,\n workflowId: string,\n initiatorEntity: string,\n backstageToken: string | undefined,\n ): Promise<ExecuteWorkflowResponseDTO> {\n const definition = await this.orchestratorService.fetchWorkflowInfo({\n definitionId: workflowId,\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 workflowdata: executeWorkflowRequestDTO.inputData,\n initiatorEntity: initiatorEntity,\n },\n authTokens: executeWorkflowRequestDTO.authTokens as Array<AuthToken>,\n serviceUrl: definition.serviceUrl,\n backstageToken,\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 }),\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 });\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 });\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 });\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 });\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 });\n }\n\n public async pingWorkflowService(\n workflowId: string,\n ): Promise<boolean | undefined> {\n const definition = await this.orchestratorService.fetchWorkflowInfo({\n definitionId: workflowId,\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 isAvailableNow = await this.orchestratorService.pingWorkflowService({\n definitionId: workflowId,\n serviceUrl: definition.serviceUrl,\n });\n if (!isAvailableNow) {\n throw new Error(\n `Workflow service for workflow ${workflowId} at ${definition.serviceUrl}/management/processes/${workflowId} is not available at the moment.`,\n );\n }\n return isAvailableNow;\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 AuthToken,\n ExecuteWorkflowRequestDTO,\n ExecuteWorkflowResponseDTO,\n Filter,\n ProcessInstanceDTO,\n ProcessInstanceListResultDTO,\n ProcessInstanceState,\n RetriggerInstanceRequestDTO,\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 getWorkflowsOverviewForEntity(\n targetEntity: string,\n annotationWorkflowIds: string[],\n ): Promise<WorkflowOverviewListResultDTO> {\n let combinedWorkflowIds: string[] = annotationWorkflowIds;\n\n if (targetEntity) {\n const definitionIdsFromInstances =\n await this.orchestratorService.fetchDefinitionIdsFromInstances({\n targetEntity,\n });\n\n if (definitionIdsFromInstances.length > 0) {\n combinedWorkflowIds = Array.from(\n new Set([...combinedWorkflowIds, ...definitionIdsFromInstances]),\n );\n }\n }\n\n // If no workflow IDs are provided, return empty result\n if (combinedWorkflowIds.length === 0) {\n return {\n overviews: [],\n };\n }\n\n const workflowIdsFilter: Filter = {\n field: 'id',\n operator: 'IN',\n value: combinedWorkflowIds,\n };\n\n return this.getWorkflowsOverview(undefined, workflowIdsFilter);\n }\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 });\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 ): Promise<ProcessInstanceDTO> {\n const instance = await this.orchestratorService.fetchInstance({\n instanceId,\n });\n\n if (!instance) {\n throw new Error(`Couldn't fetch process instance ${instanceId}`);\n }\n\n return mapToProcessInstanceDTO(instance);\n }\n\n public async executeWorkflow(\n executeWorkflowRequestDTO: ExecuteWorkflowRequestDTO,\n workflowId: string,\n initiatorEntity: string,\n backstageToken: string | undefined,\n ): Promise<ExecuteWorkflowResponseDTO> {\n const definition = await this.orchestratorService.fetchWorkflowInfo({\n definitionId: workflowId,\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 workflowdata: executeWorkflowRequestDTO.inputData,\n initiatorEntity: initiatorEntity,\n targetEntity: executeWorkflowRequestDTO.targetEntity,\n },\n authTokens: executeWorkflowRequestDTO.authTokens as Array<AuthToken>,\n serviceUrl: definition.serviceUrl,\n backstageToken,\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 }),\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 retriggerInstanceRequestDTO: RetriggerInstanceRequestDTO,\n backstageToken: string | undefined,\n ): Promise<void> {\n const definition = await this.orchestratorService.fetchWorkflowInfo({\n definitionId: workflowId,\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 authTokens: retriggerInstanceRequestDTO.authTokens as Array<AuthToken>,\n backstageToken,\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 });\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 });\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 });\n }\n\n public async pingWorkflowService(\n workflowId: string,\n ): Promise<boolean | undefined> {\n const definition = await this.orchestratorService.fetchWorkflowInfo({\n definitionId: workflowId,\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 isAvailableNow = await this.orchestratorService.pingWorkflowService({\n definitionId: workflowId,\n serviceUrl: definition.serviceUrl,\n });\n if (!isAvailableNow) {\n throw new Error(\n `Workflow service for workflow ${workflowId} at ${definition.serviceUrl}/management/processes/${workflowId} is not available at the moment.`,\n );\n }\n return isAvailableNow;\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":";;;;;;AA6CA,MAAM,2BAAA,GAA8B,EAAA;AACpC,MAAM,6BAAA,GAAgC,GAAA;AAE/B,MAAM,EAAA,CAAG;AAAA,EACd,YAA6B,mBAAA,EAA0C;AAA1C,IAAA,IAAA,CAAA,mBAAA,GAAA,mBAAA;AAAA,EAA2C;AAAA,EAExE,MAAa,6BAAA,CACX,YAAA,EACA,qBAAA,EACwC;AACxC,IAAA,IAAI,mBAAA,GAAgC,qBAAA;AAEpC,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,MAAM,0BAAA,GACJ,MAAM,IAAA,CAAK,mBAAA,CAAoB,+BAAA,CAAgC;AAAA,QAC7D;AAAA,OACD,CAAA;AAEH,MAAA,IAAI,0BAAA,CAA2B,SAAS,CAAA,EAAG;AACzC,QAAA,mBAAA,GAAsB,KAAA,CAAM,IAAA;AAAA,8BACtB,GAAA,CAAI,CAAC,GAAG,mBAAA,EAAqB,GAAG,0BAA0B,CAAC;AAAA,SACjE;AAAA,MACF;AAAA,IACF;AAGA,IAAA,IAAI,mBAAA,CAAoB,WAAW,CAAA,EAAG;AACpC,MAAA,OAAO;AAAA,QACL,WAAW;AAAC,OACd;AAAA,IACF;AAEA,IAAA,MAAM,iBAAA,GAA4B;AAAA,MAChC,KAAA,EAAO,IAAA;AAAA,MACP,QAAA,EAAU,IAAA;AAAA,MACV,KAAA,EAAO;AAAA,KACT;AAEA,IAAA,OAAO,IAAA,CAAK,oBAAA,CAAqB,MAAA,EAAW,iBAAiB,CAAA;AAAA,EAC/D;AAAA,EAEA,MAAa,oBAAA,CACX,UAAA,EACA,MAAA,EACwC;AACxC,IAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,mBAAA,CAAoB,sBAAA,CAAuB;AAAA,MACtE,UAAA;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,MAAM,IAAI,MAAM,mCAAmC,CAAA;AAAA,IACrD;AACA,IAAA,MAAM,MAAA,GAAwC;AAAA,MAC5C,WAAW,SAAA,CAAU,GAAA,CAAI,CAAA,IAAA,KAAQA,mCAAA,CAAyB,IAAI,CAAC,CAAA;AAAA,MAC/D,cAAA,EAAgB;AAAA,QACd,UAAU,UAAA,EAAY,KAAA;AAAA,QACtB,QAAQ,UAAA,EAAY;AAAA;AACtB,KACF;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEO,cAAA,GAA2B;AAChC,IAAA,OAAO,IAAA,CAAK,oBAAoB,cAAA,EAAe;AAAA,EACjD;AAAA,EAEA,MAAa,wBACX,UAAA,EAC8B;AAC9B,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,mBAAA,CAAoB,qBAAA,CAAsB;AAAA,MACpE,YAAA,EAAc;AAAA,KACf,CAAA;AAED,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAwC,UAAU,CAAA,CAAE,CAAA;AAAA,IACtE;AACA,IAAA,OAAOA,oCAAyB,QAAQ,CAAA;AAAA,EAC1C;AAAA,EAEA,MAAa,gBAAgB,UAAA,EAA0C;AACrE,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,qBAAA,CAAsB,UAAU,CAAA;AAC5D,IAAA,OAAOC,4BAAiB,QAAQ,CAAA;AAAA,EAClC;AAAA,EAEA,MAAa,sBAAsB,UAAA,EAAqC;AACtE,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,mBAAA,CAAoB,mBAAA,CAAoB;AAAA,MAChE,YAAA,EAAc;AAAA,KACf,CAAA;AAED,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mCAAA,EAAsC,UAAU,CAAA,CAAE,CAAA;AAAA,IACpE;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,MAAa,YAAA,CACX,UAAA,EACA,MAAA,EACA,WAAA,EACuC;AACvC,IAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,mBAAA,CAAoB,cAAA,CAAe;AAAA,MAC9D,UAAA;AAAA,MACA,MAAA;AAAA,MACA;AAAA,KACD,CAAA;AAED,IAAA,MAAM,MAAA,GAAuC;AAAA,MAC3C,KAAA,EAAO,SAAA,EAAW,GAAA,CAAIC,kCAAuB,CAAA;AAAA,MAC7C,cAAA,EAAgB;AAAA,QACd,UAAU,UAAA,EAAY,KAAA;AAAA,QACtB,QAAQ,UAAA,EAAY;AAAA;AACtB,KACF;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,MAAa,gBACX,UAAA,EAC6B;AAC7B,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,mBAAA,CAAoB,aAAA,CAAc;AAAA,MAC5D;AAAA,KACD,CAAA;AAED,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,gCAAA,EAAmC,UAAU,CAAA,CAAE,CAAA;AAAA,IACjE;AAEA,IAAA,OAAOA,mCAAwB,QAAQ,CAAA;AAAA,EACzC;AAAA,EAEA,MAAa,eAAA,CACX,yBAAA,EACA,UAAA,EACA,iBACA,cAAA,EACqC;AACrC,IAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,mBAAA,CAAoB,iBAAA,CAAkB;AAAA,MAClE,YAAA,EAAc;AAAA,KACf,CAAA;AACD,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,uCAAA,EAA0C,UAAU,CAAA,CAAE,CAAA;AAAA,IACxE;AACA,IAAA,IAAI,CAAC,WAAW,UAAA,EAAY;AAC1B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,uCAAA,EAA0C,UAAU,CAAA,CAAE,CAAA;AAAA,IACxE;AACA,IAAA,MAAM,iBAAA,GAAoB,MAAM,IAAA,CAAK,mBAAA,CAAoB,eAAA,CAAgB;AAAA,MACvE,YAAA,EAAc,UAAA;AAAA,MACd,SAAA,EAAW;AAAA,QACT,cAAc,yBAAA,CAA0B,SAAA;AAAA,QACxC,eAAA;AAAA,QACA,cAAc,yBAAA,CAA0B;AAAA,OAC1C;AAAA,MACA,YAAY,yBAAA,CAA0B,UAAA;AAAA,MACtC,YAAY,UAAA,CAAW,UAAA;AAAA,MACvB;AAAA,KACD,CAAA;AAED,IAAA,IAAI,CAAC,iBAAA,EAAmB;AACtB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,0BAAA,EAA6B,UAAU,CAAA,CAAE,CAAA;AAAA,IAC3D;AAGA,IAAA,MAAMC,yBAAA,CAAmB;AAAA,MACvB,OAAA,EAAS,MACP,IAAA,CAAK,mBAAA,CAAoB,aAAA,CAAc;AAAA,QACrC,YAAY,iBAAA,CAAkB;AAAA,OAC/B,CAAA;AAAA,MACH,WAAA,EAAa,2BAAA;AAAA,MACb,OAAA,EAAS;AAAA,KACV,CAAA;AAED,IAAA,IAAI,CAAC,iBAAA,EAAmB;AACtB,MAAA,MAAM,IAAI,MAAM,gDAAgD,CAAA;AAAA,IAClE;AAEA,IAAA,OAAOC,0CAAA,CAAgC,YAAY,iBAAiB,CAAA;AAAA,EACtE;AAAA,EAEA,MAAa,iBAAA,CACX,UAAA,EACA,UAAA,EACA,6BACA,cAAA,EACe;AACf,IAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,mBAAA,CAAoB,iBAAA,CAAkB;AAAA,MAClE,YAAA,EAAc;AAAA,KACf,CAAA;AACD,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,uCAAA,EAA0C,UAAU,CAAA,CAAE,CAAA;AAAA,IACxE;AACA,IAAA,IAAI,CAAC,WAAW,UAAA,EAAY;AAC1B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,uCAAA,EAA0C,UAAU,CAAA,CAAE,CAAA;AAAA,IACxE;AACA,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,mBAAA,CAAoB,iBAAA,CAAkB;AAAA,MAChE,YAAA,EAAc,UAAA;AAAA,MACd,UAAA;AAAA,MACA,YAAY,UAAA,CAAW,UAAA;AAAA,MACvB,YAAY,2BAAA,CAA4B,UAAA;AAAA,MACxC;AAAA,KACD,CAAA;AAED,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,4BAAA,EAA+B,UAAU,CAAA,aAAA,EAAgB,UAAU,CAAA;AAAA,OACrE;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAa,aAAA,CACX,UAAA,EACA,UAAA,EACiB;AACjB,IAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,mBAAA,CAAoB,iBAAA,CAAkB;AAAA,MAClE,YAAA,EAAc;AAAA,KACf,CAAA;AACD,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,uCAAA,EAA0C,UAAU,CAAA,CAAE,CAAA;AAAA,IACxE;AACA,IAAA,IAAI,CAAC,WAAW,UAAA,EAAY;AAC1B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,uCAAA,EAA0C,UAAU,CAAA,CAAE,CAAA;AAAA,IACxE;AACA,IAAA,MAAM,IAAA,CAAK,oBAAoB,qBAAA,CAAsB;AAAA,MACnD,YAAA,EAAc,UAAA;AAAA,MACd,UAAA;AAAA,MACA,YAAY,UAAA,CAAW;AAAA,KACxB,CAAA;AACD,IAAA,OAAO,qBAAqB,UAAU,CAAA,qBAAA,CAAA;AAAA,EACxC;AAAA,EAEA,MAAa,mBAAA,GAAuD;AAClE,IAAA,OAAO;AAAA,MACLC,sDAAA,CAAqB,MAAA;AAAA,MACrBA,sDAAA,CAAqB,KAAA;AAAA,MACrBA,sDAAA,CAAqB,SAAA;AAAA,MACrBA,sDAAA,CAAqB,OAAA;AAAA,MACrBA,sDAAA,CAAqB,SAAA;AAAA,MACrBA,sDAAA,CAAqB;AAAA,KACvB,CAAE,GAAA,CAAI,CAAA,MAAA,KAAUC,oCAAA,CAA0B,MAAM,CAAC,CAAA;AAAA,EACnD;AAAA,EAEA,MAAa,0BAAA,CACX,UAAA,EACA,UAAA,EACmC;AACnC,IAAA,OAAO,IAAA,CAAK,oBAAoB,0BAAA,CAA2B;AAAA,MACzD,YAAA,EAAc,UAAA;AAAA,MACd;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,MAAa,oBACX,UAAA,EAC8B;AAC9B,IAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,mBAAA,CAAoB,iBAAA,CAAkB;AAAA,MAClE,YAAA,EAAc;AAAA,KACf,CAAA;AACD,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,uCAAA,EAA0C,UAAU,CAAA,CAAE,CAAA;AAAA,IACxE;AACA,IAAA,IAAI,CAAC,WAAW,UAAA,EAAY;AAC1B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,uCAAA,EAA0C,UAAU,CAAA,CAAE,CAAA;AAAA,IACxE;AACA,IAAA,MAAM,cAAA,GAAiB,MAAM,IAAA,CAAK,mBAAA,CAAoB,mBAAA,CAAoB;AAAA,MACxE,YAAA,EAAc,UAAA;AAAA,MACd,YAAY,UAAA,CAAW;AAAA,KACxB,CAAA;AACD,IAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,iCAAiC,UAAU,CAAA,IAAA,EAAO,UAAA,CAAW,UAAU,yBAAyB,UAAU,CAAA,gCAAA;AAAA,OAC5G;AAAA,IACF;AACA,IAAA,OAAO,cAAA;AAAA,EACT;AAAA,EAEO,iBAAA,CACL,KACA,GAAA,EACoB;AACpB,IAAA,OAAO,GAAA,CAAI,MAAM,GAAG,CAAA;AAAA,EACtB;AACF;;;;"}
|
|
@@ -209,6 +209,38 @@ function setupInternalRoutes(services, routerApi, permissions, httpAuth, auditor
|
|
|
209
209
|
});
|
|
210
210
|
throw error;
|
|
211
211
|
}
|
|
212
|
+
routerApi.openApiBackend.register(
|
|
213
|
+
"getWorkflowsOverviewForEntity",
|
|
214
|
+
async (_c, req, res, next) => {
|
|
215
|
+
const auditEvent = await auditor.createEvent({
|
|
216
|
+
eventId: "get-workflow-overview-entity",
|
|
217
|
+
request: req
|
|
218
|
+
});
|
|
219
|
+
const targetEntity = req.body.targetEntity;
|
|
220
|
+
const annotationWorkflowIds = req.body.annotationWorkflowIds;
|
|
221
|
+
try {
|
|
222
|
+
const result = await routerApi.v2.getWorkflowsOverviewForEntity(
|
|
223
|
+
targetEntity,
|
|
224
|
+
annotationWorkflowIds
|
|
225
|
+
);
|
|
226
|
+
const workflows = await filterAuthorizedWorkflows(
|
|
227
|
+
req,
|
|
228
|
+
permissions,
|
|
229
|
+
httpAuth,
|
|
230
|
+
result
|
|
231
|
+
);
|
|
232
|
+
auditEvent.success({
|
|
233
|
+
meta: {
|
|
234
|
+
workflowsCount: workflows.overviews?.length
|
|
235
|
+
}
|
|
236
|
+
});
|
|
237
|
+
res.json(workflows);
|
|
238
|
+
} catch (error) {
|
|
239
|
+
auditEvent.fail({ error });
|
|
240
|
+
next(error);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
);
|
|
212
244
|
routerApi.openApiBackend.register(
|
|
213
245
|
"getWorkflowsOverview",
|
|
214
246
|
async (_c, req, res, next) => {
|
|
@@ -319,6 +351,8 @@ function setupInternalRoutes(services, routerApi, permissions, httpAuth, auditor
|
|
|
319
351
|
async (c, req, res, next) => {
|
|
320
352
|
const workflowId = c.request.params.workflowId;
|
|
321
353
|
const instanceId = c.request.params.instanceId;
|
|
354
|
+
const token = req.headers.authorization?.split(" ")[1];
|
|
355
|
+
const retriggerInstanceRequestDTO = req.body;
|
|
322
356
|
const auditEvent = await auditor.createEvent({
|
|
323
357
|
eventId: "retrigger-instance",
|
|
324
358
|
request: req,
|
|
@@ -339,7 +373,12 @@ function setupInternalRoutes(services, routerApi, permissions, httpAuth, auditor
|
|
|
339
373
|
if (decision.result === pluginPermissionCommon.AuthorizeResult.DENY) {
|
|
340
374
|
manageDenyAuthorization(auditEvent);
|
|
341
375
|
}
|
|
342
|
-
await routerApi.v2.retriggerInstance(
|
|
376
|
+
await routerApi.v2.retriggerInstance(
|
|
377
|
+
workflowId,
|
|
378
|
+
instanceId,
|
|
379
|
+
retriggerInstanceRequestDTO,
|
|
380
|
+
token
|
|
381
|
+
).then((result) => {
|
|
343
382
|
auditEvent.success();
|
|
344
383
|
return res.status(200).json(result);
|
|
345
384
|
}).catch((error) => {
|
|
@@ -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 UserInfoService,\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 FieldFilter,\n Filter,\n NestedFilter,\n openApiDocument,\n orchestratorInstanceAdminViewPermission,\n orchestratorPermissions,\n orchestratorWorkflowPermission,\n orchestratorWorkflowSpecificPermission,\n orchestratorWorkflowUsePermission,\n orchestratorWorkflowUseSpecificPermission,\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 { 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 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 isUserAuthorizedForInstanceAdminViewPermission = async (\n request: HttpRequest,\n permissionsSvc: PermissionsService,\n httpAuth: HttpAuthService,\n): Promise<boolean> => {\n const credentials = await httpAuth.credentials(request);\n const [decision] = await permissionsSvc.authorize(\n [{ permission: orchestratorInstanceAdminViewPermission }],\n { credentials },\n );\n\n return decision.result === AuthorizeResult.ALLOW;\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 userInfo,\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 userInfo,\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({ logAllErrors: true })); // log also openapi errors\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('OPENAPI 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 userInfo: UserInfoService,\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 const credentials = await httpAuth.credentials(req);\n const token = req.headers.authorization?.split(' ')[1];\n const initiatorEntity = await (\n await userInfo.getUserInfo(credentials)\n ).userEntityRef;\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 executeWorkflowRequestDTO = req.body;\n\n return routerApi.v2\n .executeWorkflow(\n executeWorkflowRequestDTO,\n workflowId,\n initiatorEntity,\n token,\n )\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 });\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 });\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 })\n : undefined;\n\n const workflowData = instanceVariables\n ? services.dataInputSchemaService.extractWorkflowData(\n instanceVariables,\n )\n : undefined;\n\n const workflowInfo = await routerApi.v2.getWorkflowInputSchemaById(\n workflowId,\n serviceUrl,\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] === undefined) {\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 credentials = await httpAuth.credentials(req);\n const initiatorEntity = (await userInfo.getUserInfo(credentials))\n .userEntityRef;\n const isUserAuthorizedForInstanceAdminView: boolean = // This permission will let user see ALL instances (including ones others created)\n await isUserAuthorizedForInstanceAdminViewPermission(\n req,\n permissions,\n httpAuth,\n );\n\n const requestFilters = getRequestFilters(req);\n\n let filters = requestFilters;\n\n if (!isUserAuthorizedForInstanceAdminView) {\n const initiatorEntityFilter: FieldFilter = {\n operator: 'EQ',\n value: initiatorEntity,\n field: 'initiatorEntity',\n };\n\n const nestedVariablesFilter: NestedFilter = {\n field: 'variables',\n nested: initiatorEntityFilter,\n };\n\n if (requestFilters === undefined) {\n filters = nestedVariablesFilter;\n } else {\n // combine filters\n filters = {\n operator: 'AND',\n filters: [nestedVariablesFilter, requestFilters],\n };\n }\n }\n\n const result = await routerApi.v2.getInstances(\n buildPagination(req),\n filters,\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 try {\n const instance = await routerApi.v2.getInstanceById(instanceId);\n\n const workflowId = 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 const credentials = await httpAuth.credentials(request);\n const initiatorEntity = (await userInfo.getUserInfo(credentials))\n .userEntityRef;\n // Check if user is authorized to view all instances\n const isUserAuthorizedForInstanceAdminView =\n await isUserAuthorizedForInstanceAdminViewPermission(\n request,\n permissions,\n httpAuth,\n );\n\n // If not an admin, enforce initiatorEntity check\n if (!isUserAuthorizedForInstanceAdminView) {\n const instanceInitiatorEntity = instance.initiatorEntity;\n if (instanceInitiatorEntity !== initiatorEntity) {\n throw new Error(\n `Unauthorized to access instance ${instanceId} not initiated by user.`,\n );\n }\n }\n\n auditEvent.success();\n res.status(200).json(instance);\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 instance = await routerApi.v2.getInstanceById(instanceId);\n const workflowId = 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","orchestratorInstanceAdminViewPermission","orchestratorWorkflowPermission","orchestratorWorkflowSpecificPermission","Router","createPermissionIntegrationRouter","orchestratorPermissions","express","ScaffolderService","MiddlewareFactory","DataIndexService","SonataFlowService","WorkflowCacheService","OrchestratorService","DataInputSchemaService","OpenAPIBackend","openApiDocument","fullFormats","v2","V2","UnauthorizedError","buildPagination","orchestratorWorkflowUsePermission","orchestratorWorkflowUseSpecificPermission"],"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 UserInfoService,\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 FieldFilter,\n Filter,\n NestedFilter,\n openApiDocument,\n orchestratorInstanceAdminViewPermission,\n orchestratorPermissions,\n orchestratorWorkflowPermission,\n orchestratorWorkflowSpecificPermission,\n orchestratorWorkflowUsePermission,\n orchestratorWorkflowUseSpecificPermission,\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 { 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 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 isUserAuthorizedForInstanceAdminViewPermission = async (\n request: HttpRequest,\n permissionsSvc: PermissionsService,\n httpAuth: HttpAuthService,\n): Promise<boolean> => {\n const credentials = await httpAuth.credentials(request);\n const [decision] = await permissionsSvc.authorize(\n [{ permission: orchestratorInstanceAdminViewPermission }],\n { credentials },\n );\n\n return decision.result === AuthorizeResult.ALLOW;\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 userInfo,\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 userInfo,\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({ logAllErrors: true })); // log also openapi errors\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('OPENAPI 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 userInfo: UserInfoService,\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 // v2\n routerApi.openApiBackend.register(\n 'getWorkflowsOverviewForEntity',\n async (_c, req, res: express.Response, next) => {\n const auditEvent = await auditor.createEvent({\n eventId: 'get-workflow-overview-entity',\n request: req,\n });\n const targetEntity = req.body.targetEntity as string;\n const annotationWorkflowIds = req.body.annotationWorkflowIds as string[];\n try {\n const result = await routerApi.v2.getWorkflowsOverviewForEntity(\n targetEntity,\n annotationWorkflowIds,\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 '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 const credentials = await httpAuth.credentials(req);\n const token = req.headers.authorization?.split(' ')[1];\n const initiatorEntity = await (\n await userInfo.getUserInfo(credentials)\n ).userEntityRef;\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 executeWorkflowRequestDTO = req.body;\n\n return routerApi.v2\n .executeWorkflow(\n executeWorkflowRequestDTO,\n workflowId,\n initiatorEntity,\n token,\n )\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 const token = req.headers.authorization?.split(' ')[1];\n const retriggerInstanceRequestDTO = req.body;\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(\n workflowId,\n instanceId,\n retriggerInstanceRequestDTO,\n token,\n )\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 });\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 });\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 })\n : undefined;\n\n const workflowData = instanceVariables\n ? services.dataInputSchemaService.extractWorkflowData(\n instanceVariables,\n )\n : undefined;\n\n const workflowInfo = await routerApi.v2.getWorkflowInputSchemaById(\n workflowId,\n serviceUrl,\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] === undefined) {\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 credentials = await httpAuth.credentials(req);\n const initiatorEntity = (await userInfo.getUserInfo(credentials))\n .userEntityRef;\n const isUserAuthorizedForInstanceAdminView: boolean = // This permission will let user see ALL instances (including ones others created)\n await isUserAuthorizedForInstanceAdminViewPermission(\n req,\n permissions,\n httpAuth,\n );\n\n const requestFilters = getRequestFilters(req);\n\n let filters = requestFilters;\n\n if (!isUserAuthorizedForInstanceAdminView) {\n const initiatorEntityFilter: FieldFilter = {\n operator: 'EQ',\n value: initiatorEntity,\n field: 'initiatorEntity',\n };\n\n const nestedVariablesFilter: NestedFilter = {\n field: 'variables',\n nested: initiatorEntityFilter,\n };\n\n if (requestFilters === undefined) {\n filters = nestedVariablesFilter;\n } else {\n // combine filters\n filters = {\n operator: 'AND',\n filters: [nestedVariablesFilter, requestFilters],\n };\n }\n }\n\n const result = await routerApi.v2.getInstances(\n buildPagination(req),\n filters,\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 try {\n const instance = await routerApi.v2.getInstanceById(instanceId);\n\n const workflowId = 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 const credentials = await httpAuth.credentials(request);\n const initiatorEntity = (await userInfo.getUserInfo(credentials))\n .userEntityRef;\n // Check if user is authorized to view all instances\n const isUserAuthorizedForInstanceAdminView =\n await isUserAuthorizedForInstanceAdminViewPermission(\n request,\n permissions,\n httpAuth,\n );\n\n // If not an admin, enforce initiatorEntity check\n if (!isUserAuthorizedForInstanceAdminView) {\n const instanceInitiatorEntity = instance.initiatorEntity;\n if (instanceInitiatorEntity !== initiatorEntity) {\n throw new Error(\n `Unauthorized to access instance ${instanceId} not initiated by user.`,\n );\n }\n }\n\n auditEvent.success();\n res.status(200).json(instance);\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 instance = await routerApi.v2.getInstanceById(instanceId);\n const workflowId = 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","orchestratorInstanceAdminViewPermission","orchestratorWorkflowPermission","orchestratorWorkflowSpecificPermission","Router","createPermissionIntegrationRouter","orchestratorPermissions","express","ScaffolderService","MiddlewareFactory","DataIndexService","SonataFlowService","WorkflowCacheService","OrchestratorService","DataInputSchemaService","OpenAPIBackend","openApiDocument","fullFormats","v2","V2","UnauthorizedError","buildPagination","orchestratorWorkflowUsePermission","orchestratorWorkflowUseSpecificPermission"],"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": "8.0.
|
|
3
|
+
"version": "8.0.3",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"main": "./dist/index.cjs.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -85,7 +85,7 @@
|
|
|
85
85
|
"@backstage/plugin-permission-node": "^0.10.0",
|
|
86
86
|
"@backstage/plugin-scaffolder-backend": "^1.33.0",
|
|
87
87
|
"@backstage/plugin-scaffolder-node": "^0.8.2",
|
|
88
|
-
"@red-hat-developer-hub/backstage-plugin-orchestrator-common": "^3.0.
|
|
88
|
+
"@red-hat-developer-hub/backstage-plugin-orchestrator-common": "^3.0.3",
|
|
89
89
|
"@urql/core": "^4.1.4",
|
|
90
90
|
"ajv-formats": "^2.1.1",
|
|
91
91
|
"cloudevents": "^8.0.0",
|