@red-hat-developer-hub/backstage-plugin-orchestrator-backend 5.0.1 → 5.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +28 -0
- package/dist/helpers/filterBuilder.cjs.js +8 -25
- package/dist/helpers/filterBuilder.cjs.js.map +1 -1
- package/dist/service/DataIndexService.cjs.js +5 -31
- package/dist/service/DataIndexService.cjs.js.map +1 -1
- package/dist/service/OrchestratorService.cjs.js +4 -8
- package/dist/service/OrchestratorService.cjs.js.map +1 -1
- package/dist/service/SonataFlowService.cjs.js +0 -10
- package/dist/service/SonataFlowService.cjs.js.map +1 -1
- package/dist/service/api/mapping/V2Mappings.cjs.js +8 -39
- package/dist/service/api/mapping/V2Mappings.cjs.js.map +1 -1
- package/dist/service/api/v2.cjs.js +7 -10
- package/dist/service/api/v2.cjs.js.map +1 -1
- package/dist/service/router.cjs.js +164 -71
- package/dist/service/router.cjs.js.map +1 -1
- package/package.json +5 -6
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,33 @@
|
|
|
1
1
|
### Dependencies
|
|
2
2
|
|
|
3
|
+
## 5.1.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- d59e940: Updated dependency `@openapitools/openapi-generator-cli` to `2.15.3`.
|
|
8
|
+
Updated dependency `prettier` to `3.4.2`.
|
|
9
|
+
Updated dependency `@janus-idp/cli` to `1.19.1`.
|
|
10
|
+
Updated dependency `monaco-editor` to `0.52.2`.
|
|
11
|
+
Updated dependency `monaco-yaml` to `5.2.3`.
|
|
12
|
+
Updated dependency `sass` to `1.83.0`.
|
|
13
|
+
Updated dependency `webpack` to `5.97.1`.
|
|
14
|
+
- Updated dependencies [d59e940]
|
|
15
|
+
- Updated dependencies [9cc8c89]
|
|
16
|
+
- @red-hat-developer-hub/backstage-plugin-orchestrator-common@1.25.1
|
|
17
|
+
|
|
18
|
+
## 5.1.0
|
|
19
|
+
|
|
20
|
+
### Minor Changes
|
|
21
|
+
|
|
22
|
+
- 5ab913b: Access can now be managed on a per-workflow basis.
|
|
23
|
+
|
|
24
|
+
### Patch Changes
|
|
25
|
+
|
|
26
|
+
- 5b90f96: resolve dependency issues
|
|
27
|
+
- Updated dependencies [5b90f96]
|
|
28
|
+
- Updated dependencies [5ab913b]
|
|
29
|
+
- @red-hat-developer-hub/backstage-plugin-orchestrator-common@1.25.0
|
|
30
|
+
|
|
3
31
|
## 5.0.1
|
|
4
32
|
|
|
5
33
|
### Patch Changes
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var backstagePluginOrchestratorCommon = require('@red-hat-developer-hub/backstage-plugin-orchestrator-common');
|
|
4
|
-
var V2Mappings = require('../service/api/mapping/V2Mappings.cjs.js');
|
|
5
4
|
|
|
6
5
|
function isLogicalFilter(filter) {
|
|
7
6
|
return filter.filters !== void 0;
|
|
@@ -34,22 +33,6 @@ function isEnumFilter(fieldName, type) {
|
|
|
34
33
|
}
|
|
35
34
|
return false;
|
|
36
35
|
}
|
|
37
|
-
function convertEnumValue(fieldName, fieldValue, type) {
|
|
38
|
-
if (type === "ProcessInstance") {
|
|
39
|
-
if (fieldName === "state") {
|
|
40
|
-
const state = backstagePluginOrchestratorCommon.ProcessInstanceStatusDTO[fieldValue];
|
|
41
|
-
if (!state) {
|
|
42
|
-
throw new Error(
|
|
43
|
-
`status ${fieldValue} is not a valid value of ProcessInstanceStatusDTO`
|
|
44
|
-
);
|
|
45
|
-
}
|
|
46
|
-
return V2Mappings.getProcessInstanceStateFromStatusDTOString(state).valueOf();
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
throw new Error(
|
|
50
|
-
`Unsupported enum ${fieldName}: can't convert value ${fieldValue}`
|
|
51
|
-
);
|
|
52
|
-
}
|
|
53
36
|
function isValidEnumOperator(operator) {
|
|
54
37
|
return operator === backstagePluginOrchestratorCommon.FieldFilterOperatorEnum.In || operator === backstagePluginOrchestratorCommon.FieldFilterOperatorEnum.Eq;
|
|
55
38
|
}
|
|
@@ -60,11 +43,6 @@ function handleBinaryOperator(binaryFilter, fieldDef, type) {
|
|
|
60
43
|
`Invalid operator ${binaryFilter.operator} for enum field ${binaryFilter.field} filter`
|
|
61
44
|
);
|
|
62
45
|
}
|
|
63
|
-
binaryFilter.value = convertEnumValue(
|
|
64
|
-
binaryFilter.field,
|
|
65
|
-
binaryFilter.value,
|
|
66
|
-
type
|
|
67
|
-
);
|
|
68
46
|
}
|
|
69
47
|
const formattedValue = Array.isArray(binaryFilter.value) ? `[${binaryFilter.value.map((v) => formatValue(binaryFilter.field, v, fieldDef, type)).join(", ")}]` : formatValue(binaryFilter.field, binaryFilter.value, fieldDef, type);
|
|
70
48
|
return `${binaryFilter.field}: {${getGraphQLOperator(
|
|
@@ -85,8 +63,10 @@ function buildFilterCondition(introspection, type, filters) {
|
|
|
85
63
|
if (!fieldDef) {
|
|
86
64
|
throw new Error(`Can't find field "${filters.field}" definition`);
|
|
87
65
|
}
|
|
88
|
-
if (!isOperatorAllowedForField(filters.operator, fieldDef)) {
|
|
89
|
-
throw new Error(
|
|
66
|
+
if (!isOperatorAllowedForField(filters.operator, fieldDef, type)) {
|
|
67
|
+
throw new Error(
|
|
68
|
+
`Unsupported operator ${filters.operator} for field "${fieldDef.name}" of type "${fieldDef.type.name}"`
|
|
69
|
+
);
|
|
90
70
|
}
|
|
91
71
|
switch (filters.operator) {
|
|
92
72
|
case backstagePluginOrchestratorCommon.FieldFilterOperatorEnum.IsNull:
|
|
@@ -111,7 +91,10 @@ function isOperatorSupported(operator) {
|
|
|
111
91
|
function isFieldFilterSupported(fieldDef) {
|
|
112
92
|
return fieldDef?.type.name === backstagePluginOrchestratorCommon.TypeName.String;
|
|
113
93
|
}
|
|
114
|
-
function isOperatorAllowedForField(operator, fieldDef) {
|
|
94
|
+
function isOperatorAllowedForField(operator, fieldDef, type) {
|
|
95
|
+
if (isEnumFilter(fieldDef.name, type) && isValidEnumOperator(operator)) {
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
115
98
|
const allowedOperators = {
|
|
116
99
|
[backstagePluginOrchestratorCommon.TypeName.String]: [
|
|
117
100
|
backstagePluginOrchestratorCommon.FieldFilterOperatorEnum.In,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filterBuilder.cjs.js","sources":["../../src/helpers/filterBuilder.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n FieldFilter,\n FieldFilterOperatorEnum,\n Filter,\n IntrospectionField,\n LogicalFilter,\n ProcessInstanceStatusDTO,\n TypeName,\n} from '@red-hat-developer-hub/backstage-plugin-orchestrator-common';\n\nimport { getProcessInstanceStateFromStatusDTOString } from '../service/api/mapping/V2Mappings';\n\ntype ProcessType = 'ProcessDefinition' | 'ProcessInstance';\n\nfunction isLogicalFilter(filter: Filter): filter is LogicalFilter {\n return (filter as LogicalFilter).filters !== undefined;\n}\n\nfunction handleLogicalFilter(\n introspection: IntrospectionField[],\n type: ProcessType,\n filter: LogicalFilter,\n): string {\n if (!filter.operator) return '';\n\n const subClauses = filter.filters.map(f =>\n buildFilterCondition(introspection, type, f),\n );\n\n return `${filter.operator.toLowerCase()}: {${subClauses.join(', ')}}`;\n}\n\nfunction handleBetweenOperator(filter: FieldFilter): string {\n if (!Array.isArray(filter.value) || filter.value.length !== 2) {\n throw new Error('Between operator requires an array of two elements');\n }\n return `${filter.field}: {${getGraphQLOperator(\n FieldFilterOperatorEnum.Between,\n )}: {from: \"${filter.value[0]}\", to: \"${filter.value[1]}\"}}`;\n}\n\nfunction handleIsNullOperator(filter: FieldFilter): string {\n return `${filter.field}: {${getGraphQLOperator(\n FieldFilterOperatorEnum.IsNull,\n )}: ${convertToBoolean(filter.value)}}`;\n}\n\nfunction isEnumFilter(\n fieldName: string,\n type: 'ProcessDefinition' | 'ProcessInstance',\n): boolean {\n if (type === 'ProcessInstance') {\n if (fieldName === 'state') {\n return true;\n }\n }\n return false;\n}\n\nfunction convertEnumValue(\n fieldName: string,\n fieldValue: string,\n type: 'ProcessDefinition' | 'ProcessInstance',\n): string {\n if (type === 'ProcessInstance') {\n if (fieldName === 'state') {\n const state = (ProcessInstanceStatusDTO as any)[\n fieldValue as keyof typeof ProcessInstanceStatusDTO\n ];\n\n if (!state) {\n throw new Error(\n `status ${fieldValue} is not a valid value of ProcessInstanceStatusDTO`,\n );\n }\n return getProcessInstanceStateFromStatusDTOString(state).valueOf();\n }\n }\n throw new Error(\n `Unsupported enum ${fieldName}: can't convert value ${fieldValue}`,\n );\n}\n\nfunction isValidEnumOperator(operator: FieldFilterOperatorEnum): boolean {\n return (\n operator === FieldFilterOperatorEnum.In ||\n operator === FieldFilterOperatorEnum.Eq\n );\n}\n\nfunction handleBinaryOperator(\n binaryFilter: FieldFilter,\n fieldDef: IntrospectionField,\n type: 'ProcessDefinition' | 'ProcessInstance',\n): string {\n if (isEnumFilter(binaryFilter.field, type)) {\n if (!isValidEnumOperator(binaryFilter.operator)) {\n throw new Error(\n `Invalid operator ${binaryFilter.operator} for enum field ${binaryFilter.field} filter`,\n );\n }\n binaryFilter.value = convertEnumValue(\n binaryFilter.field,\n binaryFilter.value,\n type,\n );\n }\n const formattedValue = Array.isArray(binaryFilter.value)\n ? `[${binaryFilter.value\n .map(v => formatValue(binaryFilter.field, v, fieldDef, type))\n .join(', ')}]`\n : formatValue(binaryFilter.field, binaryFilter.value, fieldDef, type);\n return `${binaryFilter.field}: {${getGraphQLOperator(\n binaryFilter.operator,\n )}: ${formattedValue}}`;\n}\n\nexport function buildFilterCondition(\n introspection: IntrospectionField[],\n type: ProcessType,\n filters?: Filter,\n): string {\n if (!filters) {\n return '';\n }\n\n if (isLogicalFilter(filters)) {\n return handleLogicalFilter(introspection, type, filters);\n }\n\n if (!isOperatorSupported(filters.operator)) {\n throw new Error(`Unsopported operator ${filters.operator}`);\n }\n\n const fieldDef = introspection.find(f => f.name === filters.field);\n if (!fieldDef) {\n throw new Error(`Can't find field \"${filters.field}\" definition`);\n }\n\n if (!isOperatorAllowedForField(filters.operator, fieldDef)) {\n throw new Error(`Unsupported field type ${fieldDef.type.name}`);\n }\n\n switch (filters.operator) {\n case FieldFilterOperatorEnum.IsNull:\n return handleIsNullOperator(filters);\n case FieldFilterOperatorEnum.Between:\n return handleBetweenOperator(filters);\n case FieldFilterOperatorEnum.Eq:\n case FieldFilterOperatorEnum.Like:\n case FieldFilterOperatorEnum.In:\n case FieldFilterOperatorEnum.Gt:\n case FieldFilterOperatorEnum.Gte:\n case FieldFilterOperatorEnum.Lt:\n case FieldFilterOperatorEnum.Lte:\n return handleBinaryOperator(filters, fieldDef, type);\n\n default:\n throw new Error(`Can't build filter condition`);\n }\n}\n\nfunction isOperatorSupported(operator: FieldFilterOperatorEnum): boolean {\n return (\n operator === FieldFilterOperatorEnum.Eq ||\n operator === FieldFilterOperatorEnum.Like ||\n operator === FieldFilterOperatorEnum.In ||\n operator === FieldFilterOperatorEnum.IsNull ||\n operator === FieldFilterOperatorEnum.Gt ||\n operator === FieldFilterOperatorEnum.Gte ||\n operator === FieldFilterOperatorEnum.Lt ||\n operator === FieldFilterOperatorEnum.Lte ||\n operator === FieldFilterOperatorEnum.Between\n );\n}\n\nfunction isFieldFilterSupported(fieldDef: IntrospectionField): boolean {\n return fieldDef?.type.name === TypeName.String;\n}\n\nfunction isOperatorAllowedForField(\n operator: FieldFilterOperatorEnum,\n fieldDef: IntrospectionField,\n): boolean {\n const allowedOperators: Record<TypeName, FieldFilterOperatorEnum[]> = {\n [TypeName.String]: [\n FieldFilterOperatorEnum.In,\n FieldFilterOperatorEnum.Like,\n FieldFilterOperatorEnum.IsNull,\n FieldFilterOperatorEnum.Eq,\n ],\n [TypeName.Id]: [\n FieldFilterOperatorEnum.In,\n FieldFilterOperatorEnum.IsNull,\n FieldFilterOperatorEnum.Eq,\n ],\n [TypeName.Date]: [\n FieldFilterOperatorEnum.IsNull,\n FieldFilterOperatorEnum.Eq,\n FieldFilterOperatorEnum.Gt,\n FieldFilterOperatorEnum.Gte,\n FieldFilterOperatorEnum.Lt,\n FieldFilterOperatorEnum.Lte,\n FieldFilterOperatorEnum.Between,\n ],\n [TypeName.StringArray]: [],\n };\n const allowedForType = allowedOperators[fieldDef.type.name];\n return allowedForType ? allowedForType.includes(operator) : false;\n}\n\nfunction convertToBoolean(value: any): boolean {\n if (typeof value === 'boolean') {\n return value;\n }\n if (typeof value === 'string') {\n return value.toLowerCase() === 'true';\n }\n if (typeof value === 'number') {\n return value === 1;\n }\n return false; // Default to false for unsupported types\n}\n\nfunction formatValue(\n fieldName: string,\n fieldValue: any,\n fieldDef: IntrospectionField,\n type: ProcessType,\n): string {\n if (!isFieldFilterSupported) {\n throw new Error(`Unsupported field type ${fieldDef.type.name}`);\n }\n\n if (isEnumFilter(fieldName, type)) {\n return `${fieldValue}`;\n }\n if (\n fieldDef.type.name === TypeName.String ||\n fieldDef.type.name === TypeName.Id ||\n fieldDef.type.name === TypeName.Date\n ) {\n return `\"${fieldValue}\"`;\n }\n throw new Error(\n `Failed to format value for ${fieldName} ${fieldValue} with type ${fieldDef.type.name}`,\n );\n}\n\nfunction getGraphQLOperator(operator: FieldFilterOperatorEnum): string {\n switch (operator) {\n case 'EQ':\n return 'equal';\n case 'LIKE':\n return 'like';\n case 'IN':\n return 'in';\n case 'IS_NULL':\n return 'isNull';\n case 'GT':\n return 'greaterThan';\n case 'GTE':\n return 'greaterThanEqual';\n case 'LT':\n return 'lessThan';\n case 'LTE':\n return 'lessThanEqual';\n // case 'CONTAINS':\n // return \"contains\"\n // case 'CONTAINS_ALL':\n // case 'CONTAINS_ANY':\n case 'BETWEEN':\n return 'between';\n default:\n throw new Error(`Operation \"${operator}\" not supported`);\n }\n}\n"],"names":["FieldFilterOperatorEnum","ProcessInstanceStatusDTO","getProcessInstanceStateFromStatusDTOString","TypeName"],"mappings":";;;;;AA6BA,SAAS,gBAAgB,MAAyC,EAAA;AAChE,EAAA,OAAQ,OAAyB,OAAY,KAAA,KAAA,CAAA,CAAA;AAC/C,CAAA;AAEA,SAAS,mBAAA,CACP,aACA,EAAA,IAAA,EACA,MACQ,EAAA;AACR,EAAI,IAAA,CAAC,MAAO,CAAA,QAAA,EAAiB,OAAA,EAAA,CAAA;AAE7B,EAAM,MAAA,UAAA,GAAa,OAAO,OAAQ,CAAA,GAAA;AAAA,IAAI,CACpC,CAAA,KAAA,oBAAA,CAAqB,aAAe,EAAA,IAAA,EAAM,CAAC,CAAA;AAAA,GAC7C,CAAA;AAEA,EAAO,OAAA,CAAA,EAAG,OAAO,QAAS,CAAA,WAAA,EAAa,CAAM,GAAA,EAAA,UAAA,CAAW,IAAK,CAAA,IAAI,CAAC,CAAA,CAAA,CAAA,CAAA;AACpE,CAAA;AAEA,SAAS,sBAAsB,MAA6B,EAAA;AAC1D,EAAI,IAAA,CAAC,MAAM,OAAQ,CAAA,MAAA,CAAO,KAAK,CAAK,IAAA,MAAA,CAAO,KAAM,CAAA,MAAA,KAAW,CAAG,EAAA;AAC7D,IAAM,MAAA,IAAI,MAAM,oDAAoD,CAAA,CAAA;AAAA,GACtE;AACA,EAAO,OAAA,CAAA,EAAG,MAAO,CAAA,KAAK,CAAM,GAAA,EAAA,kBAAA;AAAA,IAC1BA,yDAAwB,CAAA,OAAA;AAAA,GACzB,CAAa,UAAA,EAAA,MAAA,CAAO,KAAM,CAAA,CAAC,CAAC,CAAW,QAAA,EAAA,MAAA,CAAO,KAAM,CAAA,CAAC,CAAC,CAAA,GAAA,CAAA,CAAA;AACzD,CAAA;AAEA,SAAS,qBAAqB,MAA6B,EAAA;AACzD,EAAO,OAAA,CAAA,EAAG,MAAO,CAAA,KAAK,CAAM,GAAA,EAAA,kBAAA;AAAA,IAC1BA,yDAAwB,CAAA,MAAA;AAAA,GACzB,CAAA,EAAA,EAAK,gBAAiB,CAAA,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA,CAAA,CAAA;AACtC,CAAA;AAEA,SAAS,YAAA,CACP,WACA,IACS,EAAA;AACT,EAAA,IAAI,SAAS,iBAAmB,EAAA;AAC9B,IAAA,IAAI,cAAc,OAAS,EAAA;AACzB,MAAO,OAAA,IAAA,CAAA;AAAA,KACT;AAAA,GACF;AACA,EAAO,OAAA,KAAA,CAAA;AACT,CAAA;AAEA,SAAS,gBAAA,CACP,SACA,EAAA,UAAA,EACA,IACQ,EAAA;AACR,EAAA,IAAI,SAAS,iBAAmB,EAAA;AAC9B,IAAA,IAAI,cAAc,OAAS,EAAA;AACzB,MAAM,MAAA,KAAA,GAASC,2DACb,UACF,CAAA,CAAA;AAEA,MAAA,IAAI,CAAC,KAAO,EAAA;AACV,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,UAAU,UAAU,CAAA,iDAAA,CAAA;AAAA,SACtB,CAAA;AAAA,OACF;AACA,MAAO,OAAAC,qDAAA,CAA2C,KAAK,CAAA,CAAE,OAAQ,EAAA,CAAA;AAAA,KACnE;AAAA,GACF;AACA,EAAA,MAAM,IAAI,KAAA;AAAA,IACR,CAAA,iBAAA,EAAoB,SAAS,CAAA,sBAAA,EAAyB,UAAU,CAAA,CAAA;AAAA,GAClE,CAAA;AACF,CAAA;AAEA,SAAS,oBAAoB,QAA4C,EAAA;AACvE,EAAA,OACE,QAAa,KAAAF,yDAAA,CAAwB,EACrC,IAAA,QAAA,KAAaA,yDAAwB,CAAA,EAAA,CAAA;AAEzC,CAAA;AAEA,SAAS,oBAAA,CACP,YACA,EAAA,QAAA,EACA,IACQ,EAAA;AACR,EAAA,IAAI,YAAa,CAAA,YAAA,CAAa,KAAO,EAAA,IAAI,CAAG,EAAA;AAC1C,IAAA,IAAI,CAAC,mBAAA,CAAoB,YAAa,CAAA,QAAQ,CAAG,EAAA;AAC/C,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAoB,iBAAA,EAAA,YAAA,CAAa,QAAQ,CAAA,gBAAA,EAAmB,aAAa,KAAK,CAAA,OAAA,CAAA;AAAA,OAChF,CAAA;AAAA,KACF;AACA,IAAA,YAAA,CAAa,KAAQ,GAAA,gBAAA;AAAA,MACnB,YAAa,CAAA,KAAA;AAAA,MACb,YAAa,CAAA,KAAA;AAAA,MACb,IAAA;AAAA,KACF,CAAA;AAAA,GACF;AACA,EAAA,MAAM,cAAiB,GAAA,KAAA,CAAM,OAAQ,CAAA,YAAA,CAAa,KAAK,CAAA,GACnD,CAAI,CAAA,EAAA,YAAA,CAAa,KACd,CAAA,GAAA,CAAI,CAAK,CAAA,KAAA,WAAA,CAAY,YAAa,CAAA,KAAA,EAAO,CAAG,EAAA,QAAA,EAAU,IAAI,CAAC,CAC3D,CAAA,IAAA,CAAK,IAAI,CAAC,CACb,CAAA,CAAA,GAAA,WAAA,CAAY,YAAa,CAAA,KAAA,EAAO,YAAa,CAAA,KAAA,EAAO,UAAU,IAAI,CAAA,CAAA;AACtE,EAAO,OAAA,CAAA,EAAG,YAAa,CAAA,KAAK,CAAM,GAAA,EAAA,kBAAA;AAAA,IAChC,YAAa,CAAA,QAAA;AAAA,GACd,KAAK,cAAc,CAAA,CAAA,CAAA,CAAA;AACtB,CAAA;AAEgB,SAAA,oBAAA,CACd,aACA,EAAA,IAAA,EACA,OACQ,EAAA;AACR,EAAA,IAAI,CAAC,OAAS,EAAA;AACZ,IAAO,OAAA,EAAA,CAAA;AAAA,GACT;AAEA,EAAI,IAAA,eAAA,CAAgB,OAAO,CAAG,EAAA;AAC5B,IAAO,OAAA,mBAAA,CAAoB,aAAe,EAAA,IAAA,EAAM,OAAO,CAAA,CAAA;AAAA,GACzD;AAEA,EAAA,IAAI,CAAC,mBAAA,CAAoB,OAAQ,CAAA,QAAQ,CAAG,EAAA;AAC1C,IAAA,MAAM,IAAI,KAAA,CAAM,CAAwB,qBAAA,EAAA,OAAA,CAAQ,QAAQ,CAAE,CAAA,CAAA,CAAA;AAAA,GAC5D;AAEA,EAAA,MAAM,WAAW,aAAc,CAAA,IAAA,CAAK,OAAK,CAAE,CAAA,IAAA,KAAS,QAAQ,KAAK,CAAA,CAAA;AACjE,EAAA,IAAI,CAAC,QAAU,EAAA;AACb,IAAA,MAAM,IAAI,KAAA,CAAM,CAAqB,kBAAA,EAAA,OAAA,CAAQ,KAAK,CAAc,YAAA,CAAA,CAAA,CAAA;AAAA,GAClE;AAEA,EAAA,IAAI,CAAC,yBAAA,CAA0B,OAAQ,CAAA,QAAA,EAAU,QAAQ,CAAG,EAAA;AAC1D,IAAA,MAAM,IAAI,KAAM,CAAA,CAAA,uBAAA,EAA0B,QAAS,CAAA,IAAA,CAAK,IAAI,CAAE,CAAA,CAAA,CAAA;AAAA,GAChE;AAEA,EAAA,QAAQ,QAAQ,QAAU;AAAA,IACxB,KAAKA,yDAAwB,CAAA,MAAA;AAC3B,MAAA,OAAO,qBAAqB,OAAO,CAAA,CAAA;AAAA,IACrC,KAAKA,yDAAwB,CAAA,OAAA;AAC3B,MAAA,OAAO,sBAAsB,OAAO,CAAA,CAAA;AAAA,IACtC,KAAKA,yDAAwB,CAAA,EAAA,CAAA;AAAA,IAC7B,KAAKA,yDAAwB,CAAA,IAAA,CAAA;AAAA,IAC7B,KAAKA,yDAAwB,CAAA,EAAA,CAAA;AAAA,IAC7B,KAAKA,yDAAwB,CAAA,EAAA,CAAA;AAAA,IAC7B,KAAKA,yDAAwB,CAAA,GAAA,CAAA;AAAA,IAC7B,KAAKA,yDAAwB,CAAA,EAAA,CAAA;AAAA,IAC7B,KAAKA,yDAAwB,CAAA,GAAA;AAC3B,MAAO,OAAA,oBAAA,CAAqB,OAAS,EAAA,QAAA,EAAU,IAAI,CAAA,CAAA;AAAA,IAErD;AACE,MAAM,MAAA,IAAI,MAAM,CAA8B,4BAAA,CAAA,CAAA,CAAA;AAAA,GAClD;AACF,CAAA;AAEA,SAAS,oBAAoB,QAA4C,EAAA;AACvE,EACE,OAAA,QAAA,KAAaA,yDAAwB,CAAA,EAAA,IACrC,QAAa,KAAAA,yDAAA,CAAwB,QACrC,QAAa,KAAAA,yDAAA,CAAwB,EACrC,IAAA,QAAA,KAAaA,yDAAwB,CAAA,MAAA,IACrC,aAAaA,yDAAwB,CAAA,EAAA,IACrC,QAAa,KAAAA,yDAAA,CAAwB,GACrC,IAAA,QAAA,KAAaA,yDAAwB,CAAA,EAAA,IACrC,QAAa,KAAAA,yDAAA,CAAwB,GACrC,IAAA,QAAA,KAAaA,yDAAwB,CAAA,OAAA,CAAA;AAEzC,CAAA;AAEA,SAAS,uBAAuB,QAAuC,EAAA;AACrE,EAAO,OAAA,QAAA,EAAU,IAAK,CAAA,IAAA,KAASG,0CAAS,CAAA,MAAA,CAAA;AAC1C,CAAA;AAEA,SAAS,yBAAA,CACP,UACA,QACS,EAAA;AACT,EAAA,MAAM,gBAAgE,GAAA;AAAA,IACpE,CAACA,0CAAS,CAAA,MAAM,GAAG;AAAA,MACjBH,yDAAwB,CAAA,EAAA;AAAA,MACxBA,yDAAwB,CAAA,IAAA;AAAA,MACxBA,yDAAwB,CAAA,MAAA;AAAA,MACxBA,yDAAwB,CAAA,EAAA;AAAA,KAC1B;AAAA,IACA,CAACG,0CAAS,CAAA,EAAE,GAAG;AAAA,MACbH,yDAAwB,CAAA,EAAA;AAAA,MACxBA,yDAAwB,CAAA,MAAA;AAAA,MACxBA,yDAAwB,CAAA,EAAA;AAAA,KAC1B;AAAA,IACA,CAACG,0CAAS,CAAA,IAAI,GAAG;AAAA,MACfH,yDAAwB,CAAA,MAAA;AAAA,MACxBA,yDAAwB,CAAA,EAAA;AAAA,MACxBA,yDAAwB,CAAA,EAAA;AAAA,MACxBA,yDAAwB,CAAA,GAAA;AAAA,MACxBA,yDAAwB,CAAA,EAAA;AAAA,MACxBA,yDAAwB,CAAA,GAAA;AAAA,MACxBA,yDAAwB,CAAA,OAAA;AAAA,KAC1B;AAAA,IACA,CAACG,0CAAA,CAAS,WAAW,GAAG,EAAC;AAAA,GAC3B,CAAA;AACA,EAAA,MAAM,cAAiB,GAAA,gBAAA,CAAiB,QAAS,CAAA,IAAA,CAAK,IAAI,CAAA,CAAA;AAC1D,EAAA,OAAO,cAAiB,GAAA,cAAA,CAAe,QAAS,CAAA,QAAQ,CAAI,GAAA,KAAA,CAAA;AAC9D,CAAA;AAEA,SAAS,iBAAiB,KAAqB,EAAA;AAC7C,EAAI,IAAA,OAAO,UAAU,SAAW,EAAA;AAC9B,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AACA,EAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC7B,IAAO,OAAA,KAAA,CAAM,aAAkB,KAAA,MAAA,CAAA;AAAA,GACjC;AACA,EAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC7B,IAAA,OAAO,KAAU,KAAA,CAAA,CAAA;AAAA,GACnB;AACA,EAAO,OAAA,KAAA,CAAA;AACT,CAAA;AAEA,SAAS,WACP,CAAA,SAAA,EACA,UACA,EAAA,QAAA,EACA,IACQ,EAAA;AACR,EAAA,IAAI,CAAC,sBAAwB,EAAA;AAC3B,IAAA,MAAM,IAAI,KAAM,CAAA,CAAA,uBAAA,EAA0B,QAAS,CAAA,IAAA,CAAK,IAAI,CAAE,CAAA,CAAA,CAAA;AAAA,GAChE;AAEA,EAAI,IAAA,YAAA,CAAa,SAAW,EAAA,IAAI,CAAG,EAAA;AACjC,IAAA,OAAO,GAAG,UAAU,CAAA,CAAA,CAAA;AAAA,GACtB;AACA,EAAA,IACE,QAAS,CAAA,IAAA,CAAK,IAAS,KAAAA,0CAAA,CAAS,UAChC,QAAS,CAAA,IAAA,CAAK,IAAS,KAAAA,0CAAA,CAAS,EAChC,IAAA,QAAA,CAAS,IAAK,CAAA,IAAA,KAASA,2CAAS,IAChC,EAAA;AACA,IAAA,OAAO,IAAI,UAAU,CAAA,CAAA,CAAA,CAAA;AAAA,GACvB;AACA,EAAA,MAAM,IAAI,KAAA;AAAA,IACR,8BAA8B,SAAS,CAAA,CAAA,EAAI,UAAU,CAAc,WAAA,EAAA,QAAA,CAAS,KAAK,IAAI,CAAA,CAAA;AAAA,GACvF,CAAA;AACF,CAAA;AAEA,SAAS,mBAAmB,QAA2C,EAAA;AACrE,EAAA,QAAQ,QAAU;AAAA,IAChB,KAAK,IAAA;AACH,MAAO,OAAA,OAAA,CAAA;AAAA,IACT,KAAK,MAAA;AACH,MAAO,OAAA,MAAA,CAAA;AAAA,IACT,KAAK,IAAA;AACH,MAAO,OAAA,IAAA,CAAA;AAAA,IACT,KAAK,SAAA;AACH,MAAO,OAAA,QAAA,CAAA;AAAA,IACT,KAAK,IAAA;AACH,MAAO,OAAA,aAAA,CAAA;AAAA,IACT,KAAK,KAAA;AACH,MAAO,OAAA,kBAAA,CAAA;AAAA,IACT,KAAK,IAAA;AACH,MAAO,OAAA,UAAA,CAAA;AAAA,IACT,KAAK,KAAA;AACH,MAAO,OAAA,eAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAKT,KAAK,SAAA;AACH,MAAO,OAAA,SAAA,CAAA;AAAA,IACT;AACE,MAAA,MAAM,IAAI,KAAA,CAAM,CAAc,WAAA,EAAA,QAAQ,CAAiB,eAAA,CAAA,CAAA,CAAA;AAAA,GAC3D;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"filterBuilder.cjs.js","sources":["../../src/helpers/filterBuilder.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n FieldFilter,\n FieldFilterOperatorEnum,\n Filter,\n IntrospectionField,\n LogicalFilter,\n TypeName,\n} from '@red-hat-developer-hub/backstage-plugin-orchestrator-common';\n\ntype ProcessType = 'ProcessDefinition' | 'ProcessInstance';\n\nfunction isLogicalFilter(filter: Filter): filter is LogicalFilter {\n return (filter as LogicalFilter).filters !== undefined;\n}\n\nfunction handleLogicalFilter(\n introspection: IntrospectionField[],\n type: ProcessType,\n filter: LogicalFilter,\n): string {\n if (!filter.operator) return '';\n\n const subClauses = filter.filters.map(f =>\n buildFilterCondition(introspection, type, f),\n );\n\n return `${filter.operator.toLowerCase()}: {${subClauses.join(', ')}}`;\n}\n\nfunction handleBetweenOperator(filter: FieldFilter): string {\n if (!Array.isArray(filter.value) || filter.value.length !== 2) {\n throw new Error('Between operator requires an array of two elements');\n }\n return `${filter.field}: {${getGraphQLOperator(\n FieldFilterOperatorEnum.Between,\n )}: {from: \"${filter.value[0]}\", to: \"${filter.value[1]}\"}}`;\n}\n\nfunction handleIsNullOperator(filter: FieldFilter): string {\n return `${filter.field}: {${getGraphQLOperator(\n FieldFilterOperatorEnum.IsNull,\n )}: ${convertToBoolean(filter.value)}}`;\n}\n\nfunction isEnumFilter(\n fieldName: string,\n type: 'ProcessDefinition' | 'ProcessInstance',\n): boolean {\n if (type === 'ProcessInstance') {\n if (fieldName === 'state') {\n return true;\n }\n }\n return false;\n}\n\nfunction isValidEnumOperator(operator: FieldFilterOperatorEnum): boolean {\n return (\n operator === FieldFilterOperatorEnum.In ||\n operator === FieldFilterOperatorEnum.Eq\n );\n}\n\nfunction handleBinaryOperator(\n binaryFilter: FieldFilter,\n fieldDef: IntrospectionField,\n type: 'ProcessDefinition' | 'ProcessInstance',\n): string {\n if (isEnumFilter(binaryFilter.field, type)) {\n if (!isValidEnumOperator(binaryFilter.operator)) {\n throw new Error(\n `Invalid operator ${binaryFilter.operator} for enum field ${binaryFilter.field} filter`,\n );\n }\n }\n const formattedValue = Array.isArray(binaryFilter.value)\n ? `[${binaryFilter.value\n .map(v => formatValue(binaryFilter.field, v, fieldDef, type))\n .join(', ')}]`\n : formatValue(binaryFilter.field, binaryFilter.value, fieldDef, type);\n return `${binaryFilter.field}: {${getGraphQLOperator(\n binaryFilter.operator,\n )}: ${formattedValue}}`;\n}\n\nexport function buildFilterCondition(\n introspection: IntrospectionField[],\n type: ProcessType,\n filters?: Filter,\n): string {\n if (!filters) {\n return '';\n }\n\n if (isLogicalFilter(filters)) {\n return handleLogicalFilter(introspection, type, filters);\n }\n\n if (!isOperatorSupported(filters.operator)) {\n throw new Error(`Unsopported operator ${filters.operator}`);\n }\n\n const fieldDef = introspection.find(f => f.name === filters.field);\n if (!fieldDef) {\n throw new Error(`Can't find field \"${filters.field}\" definition`);\n }\n\n if (!isOperatorAllowedForField(filters.operator, fieldDef, type)) {\n throw new Error(\n `Unsupported operator ${filters.operator} for field \"${fieldDef.name}\" of type \"${fieldDef.type.name}\"`,\n );\n }\n\n switch (filters.operator) {\n case FieldFilterOperatorEnum.IsNull:\n return handleIsNullOperator(filters);\n case FieldFilterOperatorEnum.Between:\n return handleBetweenOperator(filters);\n case FieldFilterOperatorEnum.Eq:\n case FieldFilterOperatorEnum.Like:\n case FieldFilterOperatorEnum.In:\n case FieldFilterOperatorEnum.Gt:\n case FieldFilterOperatorEnum.Gte:\n case FieldFilterOperatorEnum.Lt:\n case FieldFilterOperatorEnum.Lte:\n return handleBinaryOperator(filters, fieldDef, type);\n\n default:\n throw new Error(`Can't build filter condition`);\n }\n}\n\nfunction isOperatorSupported(operator: FieldFilterOperatorEnum): boolean {\n return (\n operator === FieldFilterOperatorEnum.Eq ||\n operator === FieldFilterOperatorEnum.Like ||\n operator === FieldFilterOperatorEnum.In ||\n operator === FieldFilterOperatorEnum.IsNull ||\n operator === FieldFilterOperatorEnum.Gt ||\n operator === FieldFilterOperatorEnum.Gte ||\n operator === FieldFilterOperatorEnum.Lt ||\n operator === FieldFilterOperatorEnum.Lte ||\n operator === FieldFilterOperatorEnum.Between\n );\n}\n\nfunction isFieldFilterSupported(fieldDef: IntrospectionField): boolean {\n return fieldDef?.type.name === TypeName.String;\n}\n\nfunction isOperatorAllowedForField(\n operator: FieldFilterOperatorEnum,\n fieldDef: IntrospectionField,\n type: ProcessType,\n): boolean {\n if (isEnumFilter(fieldDef.name, type) && isValidEnumOperator(operator)) {\n return true;\n }\n const allowedOperators: Record<TypeName, FieldFilterOperatorEnum[]> = {\n [TypeName.String]: [\n FieldFilterOperatorEnum.In,\n FieldFilterOperatorEnum.Like,\n FieldFilterOperatorEnum.IsNull,\n FieldFilterOperatorEnum.Eq,\n ],\n [TypeName.Id]: [\n FieldFilterOperatorEnum.In,\n FieldFilterOperatorEnum.IsNull,\n FieldFilterOperatorEnum.Eq,\n ],\n [TypeName.Date]: [\n FieldFilterOperatorEnum.IsNull,\n FieldFilterOperatorEnum.Eq,\n FieldFilterOperatorEnum.Gt,\n FieldFilterOperatorEnum.Gte,\n FieldFilterOperatorEnum.Lt,\n FieldFilterOperatorEnum.Lte,\n FieldFilterOperatorEnum.Between,\n ],\n [TypeName.StringArray]: [],\n };\n const allowedForType = allowedOperators[fieldDef.type.name];\n return allowedForType ? allowedForType.includes(operator) : false;\n}\n\nfunction convertToBoolean(value: any): boolean {\n if (typeof value === 'boolean') {\n return value;\n }\n if (typeof value === 'string') {\n return value.toLowerCase() === 'true';\n }\n if (typeof value === 'number') {\n return value === 1;\n }\n return false; // Default to false for unsupported types\n}\n\nfunction formatValue(\n fieldName: string,\n fieldValue: any,\n fieldDef: IntrospectionField,\n type: ProcessType,\n): string {\n if (!isFieldFilterSupported) {\n throw new Error(`Unsupported field type ${fieldDef.type.name}`);\n }\n\n if (isEnumFilter(fieldName, type)) {\n return `${fieldValue}`;\n }\n if (\n fieldDef.type.name === TypeName.String ||\n fieldDef.type.name === TypeName.Id ||\n fieldDef.type.name === TypeName.Date\n ) {\n return `\"${fieldValue}\"`;\n }\n throw new Error(\n `Failed to format value for ${fieldName} ${fieldValue} with type ${fieldDef.type.name}`,\n );\n}\n\nfunction getGraphQLOperator(operator: FieldFilterOperatorEnum): string {\n switch (operator) {\n case 'EQ':\n return 'equal';\n case 'LIKE':\n return 'like';\n case 'IN':\n return 'in';\n case 'IS_NULL':\n return 'isNull';\n case 'GT':\n return 'greaterThan';\n case 'GTE':\n return 'greaterThanEqual';\n case 'LT':\n return 'lessThan';\n case 'LTE':\n return 'lessThanEqual';\n // case 'CONTAINS':\n // return \"contains\"\n // case 'CONTAINS_ALL':\n // case 'CONTAINS_ANY':\n case 'BETWEEN':\n return 'between';\n default:\n throw new Error(`Operation \"${operator}\" not supported`);\n }\n}\n"],"names":["FieldFilterOperatorEnum","TypeName"],"mappings":"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"}
|
|
@@ -210,7 +210,11 @@ class DataIndexService {
|
|
|
210
210
|
this.logger.debug(
|
|
211
211
|
`Fetch process instances result: ${JSON.stringify(result)}`
|
|
212
212
|
);
|
|
213
|
-
|
|
213
|
+
if (result.error) {
|
|
214
|
+
this.logger.error(`Error when fetching instances: ${result.error}`);
|
|
215
|
+
throw result.error;
|
|
216
|
+
}
|
|
217
|
+
const processInstancesSrc = result.data ? result.data.ProcessInstances : [];
|
|
214
218
|
const processInstances = await Promise.all(
|
|
215
219
|
processInstancesSrc.map(async (instance) => {
|
|
216
220
|
return await this.getWorkflowDefinitionFromInstance(instance);
|
|
@@ -218,36 +222,6 @@ class DataIndexService {
|
|
|
218
222
|
);
|
|
219
223
|
return processInstances;
|
|
220
224
|
}
|
|
221
|
-
async fetchInstancesTotalCount(definitionIds, filter) {
|
|
222
|
-
const definitionIdsCondition = definitionIds ? `processId: {in: ${JSON.stringify(definitionIds)}}` : void 0;
|
|
223
|
-
this.initInputProcessDefinitionArgs();
|
|
224
|
-
const filterCondition = filter ? filterBuilder.buildFilterCondition(
|
|
225
|
-
await this.inspectInputArgument("ProcessInstance"),
|
|
226
|
-
"ProcessInstance",
|
|
227
|
-
filter
|
|
228
|
-
) : "";
|
|
229
|
-
let whereClause;
|
|
230
|
-
if (definitionIds && filter) {
|
|
231
|
-
whereClause = `and: [{${definitionIdsCondition}}, {${filterCondition}}]`;
|
|
232
|
-
} else if (definitionIdsCondition || filterCondition) {
|
|
233
|
-
whereClause = definitionIdsCondition ?? filterCondition;
|
|
234
|
-
}
|
|
235
|
-
const graphQlQuery = queryBuilder.buildGraphQlQuery({
|
|
236
|
-
type: "ProcessInstances",
|
|
237
|
-
queryBody: "id",
|
|
238
|
-
whereClause
|
|
239
|
-
});
|
|
240
|
-
this.logger.debug(`GraphQL query: ${graphQlQuery}`);
|
|
241
|
-
const result = await this.client.query(graphQlQuery, {});
|
|
242
|
-
if (result.error) {
|
|
243
|
-
this.logger.error(
|
|
244
|
-
`Error when fetching instances total count: ${result.error}`
|
|
245
|
-
);
|
|
246
|
-
throw result.error;
|
|
247
|
-
}
|
|
248
|
-
const idArr = result.data.ProcessInstances;
|
|
249
|
-
return idArr.length;
|
|
250
|
-
}
|
|
251
225
|
async getWorkflowDefinitionFromInstance(instance) {
|
|
252
226
|
const workflowInfo = await this.fetchWorkflowInfo(instance.processId);
|
|
253
227
|
if (!workflowInfo?.source) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataIndexService.cjs.js","sources":["../../src/service/DataIndexService.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { LoggerService } from '@backstage/backend-plugin-api';\n\nimport { Client, fetchExchange, gql } from '@urql/core';\n\nimport {\n Filter,\n fromWorkflowSource,\n getWorkflowCategory,\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 if (result?.error) {\n this.logger.error(`Error executing introspection query ${result.error}`);\n throw result.error;\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 abortWorkflowInstance(instanceId: string): Promise<void> {\n this.logger.info(`Aborting workflow instance ${instanceId}`);\n const ProcessInstanceAbortMutationDocument = gql`\n mutation ProcessInstanceAbortMutation($id: String) {\n ProcessInstanceAbort(id: $id)\n }\n `;\n\n const result = await this.client.mutation(\n ProcessInstanceAbortMutationDocument,\n { id: instanceId },\n );\n\n this.logger.debug(\n `Abort workflow instance result: ${JSON.stringify(result)}`,\n );\n\n if (result.error) {\n throw new Error(\n `Error aborting workflow instance ${instanceId}: ${result.error}`,\n );\n }\n this.logger.debug(`Successfully aborted workflow instance ${instanceId}`);\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 if (result.error) {\n this.logger.error(`Error fetching workflow definition ${result.error}`);\n throw result.error;\n }\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 if (result.error) {\n this.logger.error(`Error fetching workflow service urls ${result.error}`);\n throw result.error;\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 if (result.error) {\n this.logger.error(\n `Error fetching data index swf results ${result.error}`,\n );\n throw result.error;\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 = definitionIds\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, businessKey, state, start, end, nodes { id }, variables, 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(graphQlQuery, {});\n\n this.logger.debug(\n `Fetch process instances result: ${JSON.stringify(result)}`,\n );\n\n const processInstancesSrc = result.data\n .ProcessInstances as ProcessInstance[];\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 fetchInstancesTotalCount(\n definitionIds?: string[],\n filter?: Filter,\n ): Promise<number> {\n const definitionIdsCondition = definitionIds\n ? `processId: {in: ${JSON.stringify(definitionIds)}}`\n : undefined;\n this.initInputProcessDefinitionArgs();\n const filterCondition = filter\n ? buildFilterCondition(\n await this.inspectInputArgument('ProcessInstance'),\n 'ProcessInstance',\n filter,\n )\n : '';\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 }\n\n const graphQlQuery = buildGraphQlQuery({\n type: 'ProcessInstances',\n queryBody: 'id',\n whereClause,\n });\n this.logger.debug(`GraphQL query: ${graphQlQuery}`);\n\n const result = await this.client.query(graphQlQuery, {});\n\n if (result.error) {\n this.logger.error(\n `Error when fetching instances total count: ${result.error}`,\n );\n throw result.error;\n }\n\n const idArr = result.data.ProcessInstances as ProcessInstance[];\n\n return idArr.length;\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 const workflowDefinitionSrc: WorkflowDefinition = fromWorkflowSource(\n workflowInfo.source,\n );\n if (workflowInfo) {\n instance.category = getWorkflowCategory(workflowDefinitionSrc);\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 if (result.error) {\n this.logger.error(`Error when fetching workflow source: ${result.error}`);\n return undefined;\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 if (result.error) {\n this.logger.error(\n `Error when fetching workflow instances: ${result.error}`,\n );\n throw result.error;\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 if (result.error) {\n this.logger.error(\n `Error when fetching process instance variables: ${result.error}`,\n );\n throw result.error;\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 if (result.error) {\n this.logger.error(\n `Error when fetching process id from instance: ${result.error}`,\n );\n throw result.error;\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 businessKey\n state\n start\n end\n nodes {\n id\n nodeId\n definitionId\n type\n name\n enter\n exit\n }\n variables\n parentProcessInstance {\n id\n processName\n businessKey\n }\n error {\n nodeDefinitionId\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 if (result.error) {\n this.logger.error(\n `Error when fetching process instances: ${result.error}`,\n );\n throw result.error;\n }\n\n const processInstances = result.data.ProcessInstances as ProcessInstance[];\n\n if (processInstances.length === 0) {\n return undefined;\n }\n\n const instance = processInstances[0];\n\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 const workflowDefinitionSrc: WorkflowDefinition = fromWorkflowSource(\n workflowInfo.source,\n );\n if (workflowInfo) {\n instance.category = getWorkflowCategory(workflowDefinitionSrc);\n instance.description = workflowDefinitionSrc.description;\n }\n return instance;\n }\n}\n"],"names":["ErrorBuilder","Client","fetchExchange","gql","buildFilterCondition","buildGraphQlQuery","FETCH_PROCESS_INSTANCES_SORT_FIELD","fromWorkflowSource","getWorkflowCategory","parseWorkflowVariables"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DataIndexService.cjs.js","sources":["../../src/service/DataIndexService.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { LoggerService } from '@backstage/backend-plugin-api';\n\nimport { Client, fetchExchange, gql } from '@urql/core';\n\nimport {\n Filter,\n fromWorkflowSource,\n getWorkflowCategory,\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 if (result?.error) {\n this.logger.error(`Error executing introspection query ${result.error}`);\n throw result.error;\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 abortWorkflowInstance(instanceId: string): Promise<void> {\n this.logger.info(`Aborting workflow instance ${instanceId}`);\n const ProcessInstanceAbortMutationDocument = gql`\n mutation ProcessInstanceAbortMutation($id: String) {\n ProcessInstanceAbort(id: $id)\n }\n `;\n\n const result = await this.client.mutation(\n ProcessInstanceAbortMutationDocument,\n { id: instanceId },\n );\n\n this.logger.debug(\n `Abort workflow instance result: ${JSON.stringify(result)}`,\n );\n\n if (result.error) {\n throw new Error(\n `Error aborting workflow instance ${instanceId}: ${result.error}`,\n );\n }\n this.logger.debug(`Successfully aborted workflow instance ${instanceId}`);\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 if (result.error) {\n this.logger.error(`Error fetching workflow definition ${result.error}`);\n throw result.error;\n }\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 if (result.error) {\n this.logger.error(`Error fetching workflow service urls ${result.error}`);\n throw result.error;\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 if (result.error) {\n this.logger.error(\n `Error fetching data index swf results ${result.error}`,\n );\n throw result.error;\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 = definitionIds\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, businessKey, state, start, end, nodes { id }, variables, 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 if (result.error) {\n this.logger.error(`Error when fetching instances: ${result.error}`);\n throw result.error;\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 const workflowDefinitionSrc: WorkflowDefinition = fromWorkflowSource(\n workflowInfo.source,\n );\n if (workflowInfo) {\n instance.category = getWorkflowCategory(workflowDefinitionSrc);\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 if (result.error) {\n this.logger.error(`Error when fetching workflow source: ${result.error}`);\n return undefined;\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 if (result.error) {\n this.logger.error(\n `Error when fetching workflow instances: ${result.error}`,\n );\n throw result.error;\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 if (result.error) {\n this.logger.error(\n `Error when fetching process instance variables: ${result.error}`,\n );\n throw result.error;\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 if (result.error) {\n this.logger.error(\n `Error when fetching process id from instance: ${result.error}`,\n );\n throw result.error;\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 businessKey\n state\n start\n end\n nodes {\n id\n nodeId\n definitionId\n type\n name\n enter\n exit\n }\n variables\n parentProcessInstance {\n id\n processName\n businessKey\n }\n error {\n nodeDefinitionId\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 if (result.error) {\n this.logger.error(\n `Error when fetching process instances: ${result.error}`,\n );\n throw result.error;\n }\n\n const processInstances = result.data.ProcessInstances as ProcessInstance[];\n\n if (processInstances.length === 0) {\n return undefined;\n }\n\n const instance = processInstances[0];\n\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 const workflowDefinitionSrc: WorkflowDefinition = fromWorkflowSource(\n workflowInfo.source,\n );\n if (workflowInfo) {\n instance.category = getWorkflowCategory(workflowDefinitionSrc);\n instance.description = workflowDefinitionSrc.description;\n }\n return instance;\n }\n}\n"],"names":["ErrorBuilder","Client","fetchExchange","gql","buildFilterCondition","buildGraphQlQuery","FETCH_PROCESS_INSTANCES_SORT_FIELD","fromWorkflowSource","getWorkflowCategory","parseWorkflowVariables"],"mappings":"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"}
|
|
@@ -7,6 +7,9 @@ class OrchestratorService {
|
|
|
7
7
|
this.workflowCacheService = workflowCacheService;
|
|
8
8
|
}
|
|
9
9
|
// Data Index Service Wrapper
|
|
10
|
+
getWorkflowIds() {
|
|
11
|
+
return this.workflowCacheService.definitionIds;
|
|
12
|
+
}
|
|
10
13
|
async abortWorkflowInstance(args) {
|
|
11
14
|
const { instanceId, cacheHandler } = args;
|
|
12
15
|
const definitionId = await this.dataIndexService.fetchDefinitionIdByInstanceId(instanceId);
|
|
@@ -25,20 +28,13 @@ class OrchestratorService {
|
|
|
25
28
|
return isWorkflowAvailable ? await this.dataIndexService.fetchWorkflowInfo(definitionId) : void 0;
|
|
26
29
|
}
|
|
27
30
|
async fetchInstances(args) {
|
|
28
|
-
const definitionIds = args.
|
|
31
|
+
const definitionIds = args.workflowIds ? args.workflowIds : this.workflowCacheService.definitionIds;
|
|
29
32
|
return await this.dataIndexService.fetchInstances({
|
|
30
33
|
definitionIds,
|
|
31
34
|
pagination: args.pagination,
|
|
32
35
|
filter: args.filter
|
|
33
36
|
});
|
|
34
37
|
}
|
|
35
|
-
async fetchInstancesTotalCount(workflowId, filter) {
|
|
36
|
-
const definitionIds = workflowId ? [workflowId] : this.workflowCacheService.definitionIds;
|
|
37
|
-
return await this.dataIndexService.fetchInstancesTotalCount(
|
|
38
|
-
definitionIds,
|
|
39
|
-
filter
|
|
40
|
-
);
|
|
41
|
-
}
|
|
42
38
|
async fetchWorkflowSource(args) {
|
|
43
39
|
const { definitionId, cacheHandler } = args;
|
|
44
40
|
const isWorkflowAvailable = this.workflowCacheService.isAvailable(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OrchestratorService.cjs.js","sources":["../../src/service/OrchestratorService.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n Filter,\n ProcessInstance,\n ProcessInstanceVariables,\n WorkflowDefinition,\n WorkflowExecutionResponse,\n WorkflowInfo,\n WorkflowOverview,\n} from '@red-hat-developer-hub/backstage-plugin-orchestrator-common';\n\nimport { Pagination } from '../types/pagination';\nimport { DataIndexService } from './DataIndexService';\nimport { SonataFlowService } from './SonataFlowService';\nimport { CacheHandler, WorkflowCacheService } from './WorkflowCacheService';\n\nexport class OrchestratorService {\n constructor(\n private readonly sonataFlowService: SonataFlowService,\n private readonly dataIndexService: DataIndexService,\n private readonly workflowCacheService: WorkflowCacheService,\n ) {}\n\n // Data Index Service Wrapper\n\n public async abortWorkflowInstance(args: {\n instanceId: string;\n cacheHandler?: CacheHandler;\n }): Promise<void> {\n const { instanceId, cacheHandler } = args;\n const definitionId =\n await this.dataIndexService.fetchDefinitionIdByInstanceId(instanceId);\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.dataIndexService.abortWorkflowInstance(instanceId)\n : undefined;\n }\n\n public async fetchWorkflowInfo(args: {\n definitionId: string;\n cacheHandler?: CacheHandler;\n }): Promise<WorkflowInfo | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.dataIndexService.fetchWorkflowInfo(definitionId)\n : undefined;\n }\n\n public async fetchInstances(args: {\n pagination?: Pagination;\n filter?: Filter;\n workflowId?: string;\n }): Promise<ProcessInstance[]> {\n const definitionIds = args.workflowId\n ? [args.workflowId]\n : this.workflowCacheService.definitionIds;\n return await this.dataIndexService.fetchInstances({\n definitionIds: definitionIds,\n pagination: args.pagination,\n filter: args.filter,\n });\n }\n\n public async fetchInstancesTotalCount(\n workflowId?: string,\n filter?: Filter,\n ): Promise<number> {\n const definitionIds = workflowId\n ? [workflowId]\n : this.workflowCacheService.definitionIds;\n return await this.dataIndexService.fetchInstancesTotalCount(\n definitionIds,\n filter,\n );\n }\n\n public async fetchWorkflowSource(args: {\n definitionId: string;\n cacheHandler?: CacheHandler;\n }): Promise<string | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.dataIndexService.fetchWorkflowSource(definitionId)\n : undefined;\n }\n\n public async fetchInstanceVariables(args: {\n instanceId: string;\n cacheHandler?: CacheHandler;\n }): Promise<object | undefined> {\n const { instanceId, cacheHandler } = args;\n const definitionId =\n await this.dataIndexService.fetchDefinitionIdByInstanceId(instanceId);\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.dataIndexService.fetchInstanceVariables(instanceId)\n : undefined;\n }\n\n public async fetchInstance(args: {\n instanceId: string;\n cacheHandler?: CacheHandler;\n }): Promise<ProcessInstance | undefined> {\n const { instanceId, cacheHandler } = args;\n const instance = await this.dataIndexService.fetchInstance(instanceId);\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n instance?.processId,\n cacheHandler,\n );\n return isWorkflowAvailable ? instance : undefined;\n }\n\n // SonataFlow Service Wrapper\n\n public async fetchWorkflowInfoOnService(args: {\n definitionId: string;\n serviceUrl: string;\n cacheHandler?: CacheHandler;\n }): Promise<WorkflowInfo | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.sonataFlowService.fetchWorkflowInfoOnService(args)\n : undefined;\n }\n\n public async fetchWorkflowDefinition(args: {\n definitionId: string;\n cacheHandler?: CacheHandler;\n }): Promise<WorkflowDefinition | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.sonataFlowService.fetchWorkflowDefinition(definitionId)\n : undefined;\n }\n\n public async fetchWorkflowOverviews(args: {\n pagination?: Pagination;\n filter?: Filter;\n }): Promise<WorkflowOverview[] | undefined> {\n return await this.sonataFlowService.fetchWorkflowOverviews({\n definitionIds: this.workflowCacheService.definitionIds,\n pagination: args.pagination,\n filter: args.filter,\n });\n }\n\n public async executeWorkflow(args: {\n definitionId: string;\n serviceUrl: string;\n inputData?: ProcessInstanceVariables;\n businessKey?: string;\n cacheHandler?: CacheHandler;\n }): Promise<WorkflowExecutionResponse | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.sonataFlowService.executeWorkflow(args)\n : undefined;\n }\n\n public async retriggerWorkflow(args: {\n definitionId: string;\n instanceId: string;\n serviceUrl: string;\n cacheHandler?: CacheHandler;\n }): Promise<boolean | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.sonataFlowService.retriggerInstance(args)\n : undefined;\n }\n\n public async fetchWorkflowOverview(args: {\n definitionId: string;\n cacheHandler?: CacheHandler;\n }): Promise<WorkflowOverview | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.sonataFlowService.fetchWorkflowOverview(definitionId)\n : undefined;\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"OrchestratorService.cjs.js","sources":["../../src/service/OrchestratorService.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n Filter,\n ProcessInstance,\n ProcessInstanceVariables,\n WorkflowDefinition,\n WorkflowExecutionResponse,\n WorkflowInfo,\n WorkflowOverview,\n} from '@red-hat-developer-hub/backstage-plugin-orchestrator-common';\n\nimport { Pagination } from '../types/pagination';\nimport { DataIndexService } from './DataIndexService';\nimport { SonataFlowService } from './SonataFlowService';\nimport { CacheHandler, WorkflowCacheService } from './WorkflowCacheService';\n\nexport class OrchestratorService {\n constructor(\n private readonly sonataFlowService: SonataFlowService,\n private readonly dataIndexService: DataIndexService,\n private readonly workflowCacheService: WorkflowCacheService,\n ) {}\n\n // Data Index Service Wrapper\n public getWorkflowIds(): string[] {\n return this.workflowCacheService.definitionIds;\n }\n\n public async abortWorkflowInstance(args: {\n instanceId: string;\n cacheHandler?: CacheHandler;\n }): Promise<void> {\n const { instanceId, cacheHandler } = args;\n const definitionId =\n await this.dataIndexService.fetchDefinitionIdByInstanceId(instanceId);\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.dataIndexService.abortWorkflowInstance(instanceId)\n : undefined;\n }\n\n public async fetchWorkflowInfo(args: {\n definitionId: string;\n cacheHandler?: CacheHandler;\n }): Promise<WorkflowInfo | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.dataIndexService.fetchWorkflowInfo(definitionId)\n : undefined;\n }\n\n public async fetchInstances(args: {\n pagination?: Pagination;\n filter?: Filter;\n workflowIds?: string[];\n }): Promise<ProcessInstance[]> {\n const definitionIds = args.workflowIds\n ? args.workflowIds\n : this.workflowCacheService.definitionIds;\n return await this.dataIndexService.fetchInstances({\n definitionIds: definitionIds,\n pagination: args.pagination,\n filter: args.filter,\n });\n }\n\n public async fetchWorkflowSource(args: {\n definitionId: string;\n cacheHandler?: CacheHandler;\n }): Promise<string | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.dataIndexService.fetchWorkflowSource(definitionId)\n : undefined;\n }\n\n public async fetchInstanceVariables(args: {\n instanceId: string;\n cacheHandler?: CacheHandler;\n }): Promise<object | undefined> {\n const { instanceId, cacheHandler } = args;\n const definitionId =\n await this.dataIndexService.fetchDefinitionIdByInstanceId(instanceId);\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.dataIndexService.fetchInstanceVariables(instanceId)\n : undefined;\n }\n\n public async fetchInstance(args: {\n instanceId: string;\n cacheHandler?: CacheHandler;\n }): Promise<ProcessInstance | undefined> {\n const { instanceId, cacheHandler } = args;\n const instance = await this.dataIndexService.fetchInstance(instanceId);\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n instance?.processId,\n cacheHandler,\n );\n return isWorkflowAvailable ? instance : undefined;\n }\n\n // SonataFlow Service Wrapper\n\n public async fetchWorkflowInfoOnService(args: {\n definitionId: string;\n serviceUrl: string;\n cacheHandler?: CacheHandler;\n }): Promise<WorkflowInfo | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.sonataFlowService.fetchWorkflowInfoOnService(args)\n : undefined;\n }\n\n public async fetchWorkflowDefinition(args: {\n definitionId: string;\n cacheHandler?: CacheHandler;\n }): Promise<WorkflowDefinition | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.sonataFlowService.fetchWorkflowDefinition(definitionId)\n : undefined;\n }\n\n public async fetchWorkflowOverviews(args: {\n pagination?: Pagination;\n filter?: Filter;\n }): Promise<WorkflowOverview[] | undefined> {\n return await this.sonataFlowService.fetchWorkflowOverviews({\n definitionIds: this.workflowCacheService.definitionIds,\n pagination: args.pagination,\n filter: args.filter,\n });\n }\n\n public async executeWorkflow(args: {\n definitionId: string;\n serviceUrl: string;\n inputData?: ProcessInstanceVariables;\n businessKey?: string;\n cacheHandler?: CacheHandler;\n }): Promise<WorkflowExecutionResponse | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.sonataFlowService.executeWorkflow(args)\n : undefined;\n }\n\n public async retriggerWorkflow(args: {\n definitionId: string;\n instanceId: string;\n serviceUrl: string;\n cacheHandler?: CacheHandler;\n }): Promise<boolean | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.sonataFlowService.retriggerInstance(args)\n : undefined;\n }\n\n public async fetchWorkflowOverview(args: {\n definitionId: string;\n cacheHandler?: CacheHandler;\n }): Promise<WorkflowOverview | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.sonataFlowService.fetchWorkflowOverview(definitionId)\n : undefined;\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -129,16 +129,6 @@ class SonataFlowService {
|
|
|
129
129
|
const response = await fetch(urlToFetch);
|
|
130
130
|
return response.ok;
|
|
131
131
|
}
|
|
132
|
-
async updateInstanceInputData(args) {
|
|
133
|
-
const { definitionId, serviceUrl, instanceId, inputData } = args;
|
|
134
|
-
const urlToFetch = `${serviceUrl}/${definitionId}/${instanceId}`;
|
|
135
|
-
const response = await fetch(urlToFetch, {
|
|
136
|
-
method: "PATCH",
|
|
137
|
-
body: JSON.stringify(inputData),
|
|
138
|
-
headers: { "content-type": "application/json" }
|
|
139
|
-
});
|
|
140
|
-
return response.ok;
|
|
141
|
-
}
|
|
142
132
|
async createPrefixFetchErrorMessage(urlToFetch, response, httpMethod = "GET") {
|
|
143
133
|
const res = await response.json();
|
|
144
134
|
const errorInfo = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SonataFlowService.cjs.js","sources":["../../src/service/SonataFlowService.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { LoggerService } from '@backstage/backend-plugin-api';\n\nimport {\n extractWorkflowFormat,\n Filter,\n fromWorkflowSource,\n getWorkflowCategory,\n ProcessInstanceStateValues,\n ProcessInstanceVariables,\n WorkflowDefinition,\n WorkflowExecutionResponse,\n WorkflowInfo,\n WorkflowOverview,\n} from '@red-hat-developer-hub/backstage-plugin-orchestrator-common';\n\nimport { Pagination } from '../types/pagination';\nimport { DataIndexService } from './DataIndexService';\n\nexport class SonataFlowService {\n constructor(\n private readonly dataIndexService: DataIndexService,\n private readonly logger: LoggerService,\n ) {}\n\n public async fetchWorkflowInfoOnService(args: {\n definitionId: string;\n serviceUrl: string;\n }): Promise<WorkflowInfo | undefined> {\n const urlToFetch = `${args.serviceUrl}/management/processes/${args.definitionId}`;\n const response = await fetch(urlToFetch);\n\n if (response.ok) {\n const json = await response.json();\n this.logger.debug(`Fetch workflow info result: ${JSON.stringify(json)}`);\n return json;\n }\n throw new Error(\n await this.createPrefixFetchErrorMessage(urlToFetch, response),\n );\n }\n\n public async fetchWorkflowDefinition(\n definitionId: string,\n ): Promise<WorkflowDefinition | undefined> {\n const source =\n await this.dataIndexService.fetchWorkflowSource(definitionId);\n if (source) {\n return fromWorkflowSource(source);\n }\n return undefined;\n }\n\n public async fetchWorkflowOverviews(args: {\n definitionIds?: string[];\n pagination?: Pagination;\n filter?: Filter;\n }): Promise<WorkflowOverview[] | undefined> {\n const { definitionIds, pagination, filter } = args;\n const workflowInfos = await this.dataIndexService.fetchWorkflowInfos({\n definitionIds,\n pagination,\n filter,\n });\n if (!workflowInfos?.length) {\n return [];\n }\n const items = await Promise.all(\n workflowInfos\n .filter(info => info.source)\n .map(info => this.fetchWorkflowOverviewBySource(info.source!)),\n );\n return items.filter((item): item is WorkflowOverview => !!item);\n }\n\n public async executeWorkflow(args: {\n definitionId: string;\n serviceUrl: string;\n inputData?: ProcessInstanceVariables;\n businessKey?: string;\n }): Promise<WorkflowExecutionResponse | undefined> {\n const urlToFetch = args.businessKey\n ? `${args.serviceUrl}/${args.definitionId}?businessKey=${args.businessKey}`\n : `${args.serviceUrl}/${args.definitionId}`;\n\n const response = await fetch(urlToFetch, {\n method: 'POST',\n body: JSON.stringify(args.inputData || {}),\n headers: { 'content-type': 'application/json' },\n });\n\n const json = await response.json();\n if (json.id) {\n this.logger.debug(\n `Execute workflow successful. Response: ${JSON.stringify(json)}`,\n );\n return json;\n } else if (!response.ok) {\n const errorMessage = await this.createPrefixFetchErrorMessage(\n urlToFetch,\n response,\n 'POST',\n );\n this.logger.error(\n `Execute workflow failed. Response: ${JSON.stringify(json)}`,\n );\n throw new Error(errorMessage);\n } else {\n this.logger.error(\n `Execute workflow did not return a workflow instance ID. Response: ${JSON.stringify(\n json,\n )}`,\n );\n throw new Error('Execute workflow did not return a workflow instance ID');\n }\n }\n\n public async retriggerInstance(args: {\n definitionId: string;\n instanceId: string;\n serviceUrl: string;\n }): Promise<boolean> {\n const urlToFetch = `${args.serviceUrl}/management/processes/${args.definitionId}/instances/${args.instanceId}/retrigger`;\n\n const response = await fetch(urlToFetch, {\n method: 'POST',\n });\n\n if (!response.ok) {\n throw new Error(\n `${await this.createPrefixFetchErrorMessage(\n urlToFetch,\n response,\n 'POST',\n )}`,\n );\n }\n\n return true;\n }\n\n public async fetchWorkflowOverview(\n definitionId: string,\n ): Promise<WorkflowOverview | undefined> {\n const source =\n await this.dataIndexService.fetchWorkflowSource(definitionId);\n if (!source) {\n this.logger.debug(`Workflow source not found: ${definitionId}`);\n return undefined;\n }\n return await this.fetchWorkflowOverviewBySource(source);\n }\n\n private async fetchWorkflowOverviewBySource(\n source: string,\n ): Promise<WorkflowOverview | undefined> {\n let lastTriggered: Date = new Date(0);\n let lastRunStatus: ProcessInstanceStateValues | undefined;\n let lastRunId: string | undefined;\n const definition = fromWorkflowSource(source);\n\n const processInstances =\n await this.dataIndexService.fetchInstancesByDefinitionId({\n definitionId: definition.id,\n limit: 1,\n offset: 0,\n });\n\n const pInstance = processInstances[0];\n\n if (pInstance?.start) {\n lastRunId = pInstance.id;\n lastTriggered = new Date(pInstance.start);\n lastRunStatus = pInstance.state;\n }\n\n return {\n workflowId: definition.id,\n name: definition.name,\n format: extractWorkflowFormat(source),\n lastRunId,\n lastTriggeredMs: lastTriggered.getTime(),\n lastRunStatus,\n category: getWorkflowCategory(definition),\n description: definition.description,\n };\n }\n\n public async pingWorkflowService(args: {\n definitionId: string;\n serviceUrl: string;\n }): Promise<boolean> {\n const urlToFetch = `${args.serviceUrl}/management/processes/${args.definitionId}`;\n const response = await fetch(urlToFetch);\n return response.ok;\n }\n\n public async updateInstanceInputData(args: {\n definitionId: string;\n serviceUrl: string;\n instanceId: string;\n inputData: ProcessInstanceVariables;\n }): Promise<boolean> {\n const { definitionId, serviceUrl, instanceId, inputData } = args;\n const urlToFetch = `${serviceUrl}/${definitionId}/${instanceId}`;\n const response = await fetch(urlToFetch, {\n method: 'PATCH',\n body: JSON.stringify(inputData),\n headers: { 'content-type': 'application/json' },\n });\n return response.ok;\n }\n\n public async createPrefixFetchErrorMessage(\n urlToFetch: string,\n response: Response,\n httpMethod = 'GET',\n ): Promise<string> {\n const res = await response.json();\n const errorInfo = [];\n let errorMsg = `Request ${httpMethod} ${urlToFetch} failed with: StatusCode: ${response.status}`;\n\n if (response.statusText) {\n errorInfo.push(`StatusText: ${response.statusText}`);\n }\n if (res?.details) {\n errorInfo.push(`Details: ${res?.details}`);\n }\n if (res?.stack) {\n errorInfo.push(`Stack: ${res?.stack}`);\n }\n if (errorInfo.length > 0) {\n errorMsg += ` ${errorInfo.join(', ')}`;\n } else {\n errorMsg += ' Unexpected error';\n }\n\n return errorMsg;\n }\n}\n"],"names":["fromWorkflowSource","extractWorkflowFormat","getWorkflowCategory"],"mappings":";;;;AAiCO,MAAM,iBAAkB,CAAA;AAAA,EAC7B,WAAA,CACmB,kBACA,MACjB,EAAA;AAFiB,IAAA,IAAA,CAAA,gBAAA,GAAA,gBAAA,CAAA;AACA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA,CAAA;AAAA,GAChB;AAAA,EAEH,MAAa,2BAA2B,IAGF,EAAA;AACpC,IAAA,MAAM,aAAa,CAAG,EAAA,IAAA,CAAK,UAAU,CAAA,sBAAA,EAAyB,KAAK,YAAY,CAAA,CAAA,CAAA;AAC/E,IAAM,MAAA,QAAA,GAAW,MAAM,KAAA,CAAM,UAAU,CAAA,CAAA;AAEvC,IAAA,IAAI,SAAS,EAAI,EAAA;AACf,MAAM,MAAA,IAAA,GAAO,MAAM,QAAA,CAAS,IAAK,EAAA,CAAA;AACjC,MAAA,IAAA,CAAK,OAAO,KAAM,CAAA,CAAA,4BAAA,EAA+B,KAAK,SAAU,CAAA,IAAI,CAAC,CAAE,CAAA,CAAA,CAAA;AACvE,MAAO,OAAA,IAAA,CAAA;AAAA,KACT;AACA,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,MAAM,IAAA,CAAK,6BAA8B,CAAA,UAAA,EAAY,QAAQ,CAAA;AAAA,KAC/D,CAAA;AAAA,GACF;AAAA,EAEA,MAAa,wBACX,YACyC,EAAA;AACzC,IAAA,MAAM,MACJ,GAAA,MAAM,IAAK,CAAA,gBAAA,CAAiB,oBAAoB,YAAY,CAAA,CAAA;AAC9D,IAAA,IAAI,MAAQ,EAAA;AACV,MAAA,OAAOA,qDAAmB,MAAM,CAAA,CAAA;AAAA,KAClC;AACA,IAAO,OAAA,KAAA,CAAA,CAAA;AAAA,GACT;AAAA,EAEA,MAAa,uBAAuB,IAIQ,EAAA;AAC1C,IAAA,MAAM,EAAE,aAAA,EAAe,UAAY,EAAA,MAAA,EAAW,GAAA,IAAA,CAAA;AAC9C,IAAA,MAAM,aAAgB,GAAA,MAAM,IAAK,CAAA,gBAAA,CAAiB,kBAAmB,CAAA;AAAA,MACnE,aAAA;AAAA,MACA,UAAA;AAAA,MACA,MAAA;AAAA,KACD,CAAA,CAAA;AACD,IAAI,IAAA,CAAC,eAAe,MAAQ,EAAA;AAC1B,MAAA,OAAO,EAAC,CAAA;AAAA,KACV;AACA,IAAM,MAAA,KAAA,GAAQ,MAAM,OAAQ,CAAA,GAAA;AAAA,MAC1B,aACG,CAAA,MAAA,CAAO,CAAQ,IAAA,KAAA,IAAA,CAAK,MAAM,CAAA,CAC1B,GAAI,CAAA,CAAA,IAAA,KAAQ,IAAK,CAAA,6BAAA,CAA8B,IAAK,CAAA,MAAO,CAAC,CAAA;AAAA,KACjE,CAAA;AACA,IAAA,OAAO,MAAM,MAAO,CAAA,CAAC,IAAmC,KAAA,CAAC,CAAC,IAAI,CAAA,CAAA;AAAA,GAChE;AAAA,EAEA,MAAa,gBAAgB,IAKsB,EAAA;AACjD,IAAA,MAAM,aAAa,IAAK,CAAA,WAAA,GACpB,GAAG,IAAK,CAAA,UAAU,IAAI,IAAK,CAAA,YAAY,CAAgB,aAAA,EAAA,IAAA,CAAK,WAAW,CACvE,CAAA,GAAA,CAAA,EAAG,KAAK,UAAU,CAAA,CAAA,EAAI,KAAK,YAAY,CAAA,CAAA,CAAA;AAE3C,IAAM,MAAA,QAAA,GAAW,MAAM,KAAA,CAAM,UAAY,EAAA;AAAA,MACvC,MAAQ,EAAA,MAAA;AAAA,MACR,MAAM,IAAK,CAAA,SAAA,CAAU,IAAK,CAAA,SAAA,IAAa,EAAE,CAAA;AAAA,MACzC,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAmB,EAAA;AAAA,KAC/C,CAAA,CAAA;AAED,IAAM,MAAA,IAAA,GAAO,MAAM,QAAA,CAAS,IAAK,EAAA,CAAA;AACjC,IAAA,IAAI,KAAK,EAAI,EAAA;AACX,MAAA,IAAA,CAAK,MAAO,CAAA,KAAA;AAAA,QACV,CAA0C,uCAAA,EAAA,IAAA,CAAK,SAAU,CAAA,IAAI,CAAC,CAAA,CAAA;AAAA,OAChE,CAAA;AACA,MAAO,OAAA,IAAA,CAAA;AAAA,KACT,MAAA,IAAW,CAAC,QAAA,CAAS,EAAI,EAAA;AACvB,MAAM,MAAA,YAAA,GAAe,MAAM,IAAK,CAAA,6BAAA;AAAA,QAC9B,UAAA;AAAA,QACA,QAAA;AAAA,QACA,MAAA;AAAA,OACF,CAAA;AACA,MAAA,IAAA,CAAK,MAAO,CAAA,KAAA;AAAA,QACV,CAAsC,mCAAA,EAAA,IAAA,CAAK,SAAU,CAAA,IAAI,CAAC,CAAA,CAAA;AAAA,OAC5D,CAAA;AACA,MAAM,MAAA,IAAI,MAAM,YAAY,CAAA,CAAA;AAAA,KACvB,MAAA;AACL,MAAA,IAAA,CAAK,MAAO,CAAA,KAAA;AAAA,QACV,qEAAqE,IAAK,CAAA,SAAA;AAAA,UACxE,IAAA;AAAA,SACD,CAAA,CAAA;AAAA,OACH,CAAA;AACA,MAAM,MAAA,IAAI,MAAM,wDAAwD,CAAA,CAAA;AAAA,KAC1E;AAAA,GACF;AAAA,EAEA,MAAa,kBAAkB,IAIV,EAAA;AACnB,IAAM,MAAA,UAAA,GAAa,GAAG,IAAK,CAAA,UAAU,yBAAyB,IAAK,CAAA,YAAY,CAAc,WAAA,EAAA,IAAA,CAAK,UAAU,CAAA,UAAA,CAAA,CAAA;AAE5G,IAAM,MAAA,QAAA,GAAW,MAAM,KAAA,CAAM,UAAY,EAAA;AAAA,MACvC,MAAQ,EAAA,MAAA;AAAA,KACT,CAAA,CAAA;AAED,IAAI,IAAA,CAAC,SAAS,EAAI,EAAA;AAChB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,EAAG,MAAM,IAAK,CAAA,6BAAA;AAAA,UACZ,UAAA;AAAA,UACA,QAAA;AAAA,UACA,MAAA;AAAA,SACD,CAAA,CAAA;AAAA,OACH,CAAA;AAAA,KACF;AAEA,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAAA,EAEA,MAAa,sBACX,YACuC,EAAA;AACvC,IAAA,MAAM,MACJ,GAAA,MAAM,IAAK,CAAA,gBAAA,CAAiB,oBAAoB,YAAY,CAAA,CAAA;AAC9D,IAAA,IAAI,CAAC,MAAQ,EAAA;AACX,MAAA,IAAA,CAAK,MAAO,CAAA,KAAA,CAAM,CAA8B,2BAAA,EAAA,YAAY,CAAE,CAAA,CAAA,CAAA;AAC9D,MAAO,OAAA,KAAA,CAAA,CAAA;AAAA,KACT;AACA,IAAO,OAAA,MAAM,IAAK,CAAA,6BAAA,CAA8B,MAAM,CAAA,CAAA;AAAA,GACxD;AAAA,EAEA,MAAc,8BACZ,MACuC,EAAA;AACvC,IAAI,IAAA,aAAA,mBAA0B,IAAA,IAAA,CAAK,CAAC,CAAA,CAAA;AACpC,IAAI,IAAA,aAAA,CAAA;AACJ,IAAI,IAAA,SAAA,CAAA;AACJ,IAAM,MAAA,UAAA,GAAaA,qDAAmB,MAAM,CAAA,CAAA;AAE5C,IAAA,MAAM,gBACJ,GAAA,MAAM,IAAK,CAAA,gBAAA,CAAiB,4BAA6B,CAAA;AAAA,MACvD,cAAc,UAAW,CAAA,EAAA;AAAA,MACzB,KAAO,EAAA,CAAA;AAAA,MACP,MAAQ,EAAA,CAAA;AAAA,KACT,CAAA,CAAA;AAEH,IAAM,MAAA,SAAA,GAAY,iBAAiB,CAAC,CAAA,CAAA;AAEpC,IAAA,IAAI,WAAW,KAAO,EAAA;AACpB,MAAA,SAAA,GAAY,SAAU,CAAA,EAAA,CAAA;AACtB,MAAgB,aAAA,GAAA,IAAI,IAAK,CAAA,SAAA,CAAU,KAAK,CAAA,CAAA;AACxC,MAAA,aAAA,GAAgB,SAAU,CAAA,KAAA,CAAA;AAAA,KAC5B;AAEA,IAAO,OAAA;AAAA,MACL,YAAY,UAAW,CAAA,EAAA;AAAA,MACvB,MAAM,UAAW,CAAA,IAAA;AAAA,MACjB,MAAA,EAAQC,wDAAsB,MAAM,CAAA;AAAA,MACpC,SAAA;AAAA,MACA,eAAA,EAAiB,cAAc,OAAQ,EAAA;AAAA,MACvC,aAAA;AAAA,MACA,QAAA,EAAUC,sDAAoB,UAAU,CAAA;AAAA,MACxC,aAAa,UAAW,CAAA,WAAA;AAAA,KAC1B,CAAA;AAAA,GACF;AAAA,EAEA,MAAa,oBAAoB,IAGZ,EAAA;AACnB,IAAA,MAAM,aAAa,CAAG,EAAA,IAAA,CAAK,UAAU,CAAA,sBAAA,EAAyB,KAAK,YAAY,CAAA,CAAA,CAAA;AAC/E,IAAM,MAAA,QAAA,GAAW,MAAM,KAAA,CAAM,UAAU,CAAA,CAAA;AACvC,IAAA,OAAO,QAAS,CAAA,EAAA,CAAA;AAAA,GAClB;AAAA,EAEA,MAAa,wBAAwB,IAKhB,EAAA;AACnB,IAAA,MAAM,EAAE,YAAA,EAAc,UAAY,EAAA,UAAA,EAAY,WAAc,GAAA,IAAA,CAAA;AAC5D,IAAA,MAAM,aAAa,CAAG,EAAA,UAAU,CAAI,CAAA,EAAA,YAAY,IAAI,UAAU,CAAA,CAAA,CAAA;AAC9D,IAAM,MAAA,QAAA,GAAW,MAAM,KAAA,CAAM,UAAY,EAAA;AAAA,MACvC,MAAQ,EAAA,OAAA;AAAA,MACR,IAAA,EAAM,IAAK,CAAA,SAAA,CAAU,SAAS,CAAA;AAAA,MAC9B,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAmB,EAAA;AAAA,KAC/C,CAAA,CAAA;AACD,IAAA,OAAO,QAAS,CAAA,EAAA,CAAA;AAAA,GAClB;AAAA,EAEA,MAAa,6BAAA,CACX,UACA,EAAA,QAAA,EACA,aAAa,KACI,EAAA;AACjB,IAAM,MAAA,GAAA,GAAM,MAAM,QAAA,CAAS,IAAK,EAAA,CAAA;AAChC,IAAA,MAAM,YAAY,EAAC,CAAA;AACnB,IAAA,IAAI,WAAW,CAAW,QAAA,EAAA,UAAU,IAAI,UAAU,CAAA,0BAAA,EAA6B,SAAS,MAAM,CAAA,CAAA,CAAA;AAE9F,IAAA,IAAI,SAAS,UAAY,EAAA;AACvB,MAAA,SAAA,CAAU,IAAK,CAAA,CAAA,YAAA,EAAe,QAAS,CAAA,UAAU,CAAE,CAAA,CAAA,CAAA;AAAA,KACrD;AACA,IAAA,IAAI,KAAK,OAAS,EAAA;AAChB,MAAA,SAAA,CAAU,IAAK,CAAA,CAAA,SAAA,EAAY,GAAK,EAAA,OAAO,CAAE,CAAA,CAAA,CAAA;AAAA,KAC3C;AACA,IAAA,IAAI,KAAK,KAAO,EAAA;AACd,MAAA,SAAA,CAAU,IAAK,CAAA,CAAA,OAAA,EAAU,GAAK,EAAA,KAAK,CAAE,CAAA,CAAA,CAAA;AAAA,KACvC;AACA,IAAI,IAAA,SAAA,CAAU,SAAS,CAAG,EAAA;AACxB,MAAA,QAAA,IAAY,CAAI,CAAA,EAAA,SAAA,CAAU,IAAK,CAAA,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,KAC/B,MAAA;AACL,MAAY,QAAA,IAAA,mBAAA,CAAA;AAAA,KACd;AAEA,IAAO,OAAA,QAAA,CAAA;AAAA,GACT;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"SonataFlowService.cjs.js","sources":["../../src/service/SonataFlowService.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { LoggerService } from '@backstage/backend-plugin-api';\n\nimport {\n extractWorkflowFormat,\n Filter,\n fromWorkflowSource,\n getWorkflowCategory,\n ProcessInstanceStateValues,\n ProcessInstanceVariables,\n WorkflowDefinition,\n WorkflowExecutionResponse,\n WorkflowInfo,\n WorkflowOverview,\n} from '@red-hat-developer-hub/backstage-plugin-orchestrator-common';\n\nimport { Pagination } from '../types/pagination';\nimport { DataIndexService } from './DataIndexService';\n\nexport class SonataFlowService {\n constructor(\n private readonly dataIndexService: DataIndexService,\n private readonly logger: LoggerService,\n ) {}\n\n public async fetchWorkflowInfoOnService(args: {\n definitionId: string;\n serviceUrl: string;\n }): Promise<WorkflowInfo | undefined> {\n const urlToFetch = `${args.serviceUrl}/management/processes/${args.definitionId}`;\n const response = await fetch(urlToFetch);\n\n if (response.ok) {\n const json = await response.json();\n this.logger.debug(`Fetch workflow info result: ${JSON.stringify(json)}`);\n return json;\n }\n throw new Error(\n await this.createPrefixFetchErrorMessage(urlToFetch, response),\n );\n }\n\n public async fetchWorkflowDefinition(\n definitionId: string,\n ): Promise<WorkflowDefinition | undefined> {\n const source =\n await this.dataIndexService.fetchWorkflowSource(definitionId);\n if (source) {\n return fromWorkflowSource(source);\n }\n return undefined;\n }\n\n public async fetchWorkflowOverviews(args: {\n definitionIds?: string[];\n pagination?: Pagination;\n filter?: Filter;\n }): Promise<WorkflowOverview[] | undefined> {\n const { definitionIds, pagination, filter } = args;\n const workflowInfos = await this.dataIndexService.fetchWorkflowInfos({\n definitionIds,\n pagination,\n filter,\n });\n if (!workflowInfos?.length) {\n return [];\n }\n const items = await Promise.all(\n workflowInfos\n .filter(info => info.source)\n .map(info => this.fetchWorkflowOverviewBySource(info.source!)),\n );\n return items.filter((item): item is WorkflowOverview => !!item);\n }\n\n public async executeWorkflow(args: {\n definitionId: string;\n serviceUrl: string;\n inputData?: ProcessInstanceVariables;\n businessKey?: string;\n }): Promise<WorkflowExecutionResponse | undefined> {\n const urlToFetch = args.businessKey\n ? `${args.serviceUrl}/${args.definitionId}?businessKey=${args.businessKey}`\n : `${args.serviceUrl}/${args.definitionId}`;\n\n const response = await fetch(urlToFetch, {\n method: 'POST',\n body: JSON.stringify(args.inputData || {}),\n headers: { 'content-type': 'application/json' },\n });\n\n const json = await response.json();\n if (json.id) {\n this.logger.debug(\n `Execute workflow successful. Response: ${JSON.stringify(json)}`,\n );\n return json;\n } else if (!response.ok) {\n const errorMessage = await this.createPrefixFetchErrorMessage(\n urlToFetch,\n response,\n 'POST',\n );\n this.logger.error(\n `Execute workflow failed. Response: ${JSON.stringify(json)}`,\n );\n throw new Error(errorMessage);\n } else {\n this.logger.error(\n `Execute workflow did not return a workflow instance ID. Response: ${JSON.stringify(\n json,\n )}`,\n );\n throw new Error('Execute workflow did not return a workflow instance ID');\n }\n }\n\n public async retriggerInstance(args: {\n definitionId: string;\n instanceId: string;\n serviceUrl: string;\n }): Promise<boolean> {\n const urlToFetch = `${args.serviceUrl}/management/processes/${args.definitionId}/instances/${args.instanceId}/retrigger`;\n\n const response = await fetch(urlToFetch, {\n method: 'POST',\n });\n\n if (!response.ok) {\n throw new Error(\n `${await this.createPrefixFetchErrorMessage(\n urlToFetch,\n response,\n 'POST',\n )}`,\n );\n }\n\n return true;\n }\n\n public async fetchWorkflowOverview(\n definitionId: string,\n ): Promise<WorkflowOverview | undefined> {\n const source =\n await this.dataIndexService.fetchWorkflowSource(definitionId);\n if (!source) {\n this.logger.debug(`Workflow source not found: ${definitionId}`);\n return undefined;\n }\n return await this.fetchWorkflowOverviewBySource(source);\n }\n\n private async fetchWorkflowOverviewBySource(\n source: string,\n ): Promise<WorkflowOverview | undefined> {\n let lastTriggered: Date = new Date(0);\n let lastRunStatus: ProcessInstanceStateValues | undefined;\n let lastRunId: string | undefined;\n const definition = fromWorkflowSource(source);\n\n const processInstances =\n await this.dataIndexService.fetchInstancesByDefinitionId({\n definitionId: definition.id,\n limit: 1,\n offset: 0,\n });\n\n const pInstance = processInstances[0];\n\n if (pInstance?.start) {\n lastRunId = pInstance.id;\n lastTriggered = new Date(pInstance.start);\n lastRunStatus = pInstance.state;\n }\n\n return {\n workflowId: definition.id,\n name: definition.name,\n format: extractWorkflowFormat(source),\n lastRunId,\n lastTriggeredMs: lastTriggered.getTime(),\n lastRunStatus,\n category: getWorkflowCategory(definition),\n description: definition.description,\n };\n }\n\n public async pingWorkflowService(args: {\n definitionId: string;\n serviceUrl: string;\n }): Promise<boolean> {\n const urlToFetch = `${args.serviceUrl}/management/processes/${args.definitionId}`;\n const response = await fetch(urlToFetch);\n return response.ok;\n }\n\n public async createPrefixFetchErrorMessage(\n urlToFetch: string,\n response: Response,\n httpMethod = 'GET',\n ): Promise<string> {\n const res = await response.json();\n const errorInfo = [];\n let errorMsg = `Request ${httpMethod} ${urlToFetch} failed with: StatusCode: ${response.status}`;\n\n if (response.statusText) {\n errorInfo.push(`StatusText: ${response.statusText}`);\n }\n if (res?.details) {\n errorInfo.push(`Details: ${res?.details}`);\n }\n if (res?.stack) {\n errorInfo.push(`Stack: ${res?.stack}`);\n }\n if (errorInfo.length > 0) {\n errorMsg += ` ${errorInfo.join(', ')}`;\n } else {\n errorMsg += ' Unexpected error';\n }\n\n return errorMsg;\n }\n}\n"],"names":["fromWorkflowSource","extractWorkflowFormat","getWorkflowCategory"],"mappings":";;;;AAiCO,MAAM,iBAAkB,CAAA;AAAA,EAC7B,WAAA,CACmB,kBACA,MACjB,EAAA;AAFiB,IAAA,IAAA,CAAA,gBAAA,GAAA,gBAAA,CAAA;AACA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA,CAAA;AAAA,GAChB;AAAA,EAEH,MAAa,2BAA2B,IAGF,EAAA;AACpC,IAAA,MAAM,aAAa,CAAG,EAAA,IAAA,CAAK,UAAU,CAAA,sBAAA,EAAyB,KAAK,YAAY,CAAA,CAAA,CAAA;AAC/E,IAAM,MAAA,QAAA,GAAW,MAAM,KAAA,CAAM,UAAU,CAAA,CAAA;AAEvC,IAAA,IAAI,SAAS,EAAI,EAAA;AACf,MAAM,MAAA,IAAA,GAAO,MAAM,QAAA,CAAS,IAAK,EAAA,CAAA;AACjC,MAAA,IAAA,CAAK,OAAO,KAAM,CAAA,CAAA,4BAAA,EAA+B,KAAK,SAAU,CAAA,IAAI,CAAC,CAAE,CAAA,CAAA,CAAA;AACvE,MAAO,OAAA,IAAA,CAAA;AAAA,KACT;AACA,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,MAAM,IAAA,CAAK,6BAA8B,CAAA,UAAA,EAAY,QAAQ,CAAA;AAAA,KAC/D,CAAA;AAAA,GACF;AAAA,EAEA,MAAa,wBACX,YACyC,EAAA;AACzC,IAAA,MAAM,MACJ,GAAA,MAAM,IAAK,CAAA,gBAAA,CAAiB,oBAAoB,YAAY,CAAA,CAAA;AAC9D,IAAA,IAAI,MAAQ,EAAA;AACV,MAAA,OAAOA,qDAAmB,MAAM,CAAA,CAAA;AAAA,KAClC;AACA,IAAO,OAAA,KAAA,CAAA,CAAA;AAAA,GACT;AAAA,EAEA,MAAa,uBAAuB,IAIQ,EAAA;AAC1C,IAAA,MAAM,EAAE,aAAA,EAAe,UAAY,EAAA,MAAA,EAAW,GAAA,IAAA,CAAA;AAC9C,IAAA,MAAM,aAAgB,GAAA,MAAM,IAAK,CAAA,gBAAA,CAAiB,kBAAmB,CAAA;AAAA,MACnE,aAAA;AAAA,MACA,UAAA;AAAA,MACA,MAAA;AAAA,KACD,CAAA,CAAA;AACD,IAAI,IAAA,CAAC,eAAe,MAAQ,EAAA;AAC1B,MAAA,OAAO,EAAC,CAAA;AAAA,KACV;AACA,IAAM,MAAA,KAAA,GAAQ,MAAM,OAAQ,CAAA,GAAA;AAAA,MAC1B,aACG,CAAA,MAAA,CAAO,CAAQ,IAAA,KAAA,IAAA,CAAK,MAAM,CAAA,CAC1B,GAAI,CAAA,CAAA,IAAA,KAAQ,IAAK,CAAA,6BAAA,CAA8B,IAAK,CAAA,MAAO,CAAC,CAAA;AAAA,KACjE,CAAA;AACA,IAAA,OAAO,MAAM,MAAO,CAAA,CAAC,IAAmC,KAAA,CAAC,CAAC,IAAI,CAAA,CAAA;AAAA,GAChE;AAAA,EAEA,MAAa,gBAAgB,IAKsB,EAAA;AACjD,IAAA,MAAM,aAAa,IAAK,CAAA,WAAA,GACpB,GAAG,IAAK,CAAA,UAAU,IAAI,IAAK,CAAA,YAAY,CAAgB,aAAA,EAAA,IAAA,CAAK,WAAW,CACvE,CAAA,GAAA,CAAA,EAAG,KAAK,UAAU,CAAA,CAAA,EAAI,KAAK,YAAY,CAAA,CAAA,CAAA;AAE3C,IAAM,MAAA,QAAA,GAAW,MAAM,KAAA,CAAM,UAAY,EAAA;AAAA,MACvC,MAAQ,EAAA,MAAA;AAAA,MACR,MAAM,IAAK,CAAA,SAAA,CAAU,IAAK,CAAA,SAAA,IAAa,EAAE,CAAA;AAAA,MACzC,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAmB,EAAA;AAAA,KAC/C,CAAA,CAAA;AAED,IAAM,MAAA,IAAA,GAAO,MAAM,QAAA,CAAS,IAAK,EAAA,CAAA;AACjC,IAAA,IAAI,KAAK,EAAI,EAAA;AACX,MAAA,IAAA,CAAK,MAAO,CAAA,KAAA;AAAA,QACV,CAA0C,uCAAA,EAAA,IAAA,CAAK,SAAU,CAAA,IAAI,CAAC,CAAA,CAAA;AAAA,OAChE,CAAA;AACA,MAAO,OAAA,IAAA,CAAA;AAAA,KACT,MAAA,IAAW,CAAC,QAAA,CAAS,EAAI,EAAA;AACvB,MAAM,MAAA,YAAA,GAAe,MAAM,IAAK,CAAA,6BAAA;AAAA,QAC9B,UAAA;AAAA,QACA,QAAA;AAAA,QACA,MAAA;AAAA,OACF,CAAA;AACA,MAAA,IAAA,CAAK,MAAO,CAAA,KAAA;AAAA,QACV,CAAsC,mCAAA,EAAA,IAAA,CAAK,SAAU,CAAA,IAAI,CAAC,CAAA,CAAA;AAAA,OAC5D,CAAA;AACA,MAAM,MAAA,IAAI,MAAM,YAAY,CAAA,CAAA;AAAA,KACvB,MAAA;AACL,MAAA,IAAA,CAAK,MAAO,CAAA,KAAA;AAAA,QACV,qEAAqE,IAAK,CAAA,SAAA;AAAA,UACxE,IAAA;AAAA,SACD,CAAA,CAAA;AAAA,OACH,CAAA;AACA,MAAM,MAAA,IAAI,MAAM,wDAAwD,CAAA,CAAA;AAAA,KAC1E;AAAA,GACF;AAAA,EAEA,MAAa,kBAAkB,IAIV,EAAA;AACnB,IAAM,MAAA,UAAA,GAAa,GAAG,IAAK,CAAA,UAAU,yBAAyB,IAAK,CAAA,YAAY,CAAc,WAAA,EAAA,IAAA,CAAK,UAAU,CAAA,UAAA,CAAA,CAAA;AAE5G,IAAM,MAAA,QAAA,GAAW,MAAM,KAAA,CAAM,UAAY,EAAA;AAAA,MACvC,MAAQ,EAAA,MAAA;AAAA,KACT,CAAA,CAAA;AAED,IAAI,IAAA,CAAC,SAAS,EAAI,EAAA;AAChB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,EAAG,MAAM,IAAK,CAAA,6BAAA;AAAA,UACZ,UAAA;AAAA,UACA,QAAA;AAAA,UACA,MAAA;AAAA,SACD,CAAA,CAAA;AAAA,OACH,CAAA;AAAA,KACF;AAEA,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAAA,EAEA,MAAa,sBACX,YACuC,EAAA;AACvC,IAAA,MAAM,MACJ,GAAA,MAAM,IAAK,CAAA,gBAAA,CAAiB,oBAAoB,YAAY,CAAA,CAAA;AAC9D,IAAA,IAAI,CAAC,MAAQ,EAAA;AACX,MAAA,IAAA,CAAK,MAAO,CAAA,KAAA,CAAM,CAA8B,2BAAA,EAAA,YAAY,CAAE,CAAA,CAAA,CAAA;AAC9D,MAAO,OAAA,KAAA,CAAA,CAAA;AAAA,KACT;AACA,IAAO,OAAA,MAAM,IAAK,CAAA,6BAAA,CAA8B,MAAM,CAAA,CAAA;AAAA,GACxD;AAAA,EAEA,MAAc,8BACZ,MACuC,EAAA;AACvC,IAAI,IAAA,aAAA,mBAA0B,IAAA,IAAA,CAAK,CAAC,CAAA,CAAA;AACpC,IAAI,IAAA,aAAA,CAAA;AACJ,IAAI,IAAA,SAAA,CAAA;AACJ,IAAM,MAAA,UAAA,GAAaA,qDAAmB,MAAM,CAAA,CAAA;AAE5C,IAAA,MAAM,gBACJ,GAAA,MAAM,IAAK,CAAA,gBAAA,CAAiB,4BAA6B,CAAA;AAAA,MACvD,cAAc,UAAW,CAAA,EAAA;AAAA,MACzB,KAAO,EAAA,CAAA;AAAA,MACP,MAAQ,EAAA,CAAA;AAAA,KACT,CAAA,CAAA;AAEH,IAAM,MAAA,SAAA,GAAY,iBAAiB,CAAC,CAAA,CAAA;AAEpC,IAAA,IAAI,WAAW,KAAO,EAAA;AACpB,MAAA,SAAA,GAAY,SAAU,CAAA,EAAA,CAAA;AACtB,MAAgB,aAAA,GAAA,IAAI,IAAK,CAAA,SAAA,CAAU,KAAK,CAAA,CAAA;AACxC,MAAA,aAAA,GAAgB,SAAU,CAAA,KAAA,CAAA;AAAA,KAC5B;AAEA,IAAO,OAAA;AAAA,MACL,YAAY,UAAW,CAAA,EAAA;AAAA,MACvB,MAAM,UAAW,CAAA,IAAA;AAAA,MACjB,MAAA,EAAQC,wDAAsB,MAAM,CAAA;AAAA,MACpC,SAAA;AAAA,MACA,eAAA,EAAiB,cAAc,OAAQ,EAAA;AAAA,MACvC,aAAA;AAAA,MACA,QAAA,EAAUC,sDAAoB,UAAU,CAAA;AAAA,MACxC,aAAa,UAAW,CAAA,WAAA;AAAA,KAC1B,CAAA;AAAA,GACF;AAAA,EAEA,MAAa,oBAAoB,IAGZ,EAAA;AACnB,IAAA,MAAM,aAAa,CAAG,EAAA,IAAA,CAAK,UAAU,CAAA,sBAAA,EAAyB,KAAK,YAAY,CAAA,CAAA,CAAA;AAC/E,IAAM,MAAA,QAAA,GAAW,MAAM,KAAA,CAAM,UAAU,CAAA,CAAA;AACvC,IAAA,OAAO,QAAS,CAAA,EAAA,CAAA;AAAA,GAClB;AAAA,EAEA,MAAa,6BAAA,CACX,UACA,EAAA,QAAA,EACA,aAAa,KACI,EAAA;AACjB,IAAM,MAAA,GAAA,GAAM,MAAM,QAAA,CAAS,IAAK,EAAA,CAAA;AAChC,IAAA,MAAM,YAAY,EAAC,CAAA;AACnB,IAAA,IAAI,WAAW,CAAW,QAAA,EAAA,UAAU,IAAI,UAAU,CAAA,0BAAA,EAA6B,SAAS,MAAM,CAAA,CAAA,CAAA;AAE9F,IAAA,IAAI,SAAS,UAAY,EAAA;AACvB,MAAA,SAAA,CAAU,IAAK,CAAA,CAAA,YAAA,EAAe,QAAS,CAAA,UAAU,CAAE,CAAA,CAAA,CAAA;AAAA,KACrD;AACA,IAAA,IAAI,KAAK,OAAS,EAAA;AAChB,MAAA,SAAA,CAAU,IAAK,CAAA,CAAA,SAAA,EAAY,GAAK,EAAA,OAAO,CAAE,CAAA,CAAA,CAAA;AAAA,KAC3C;AACA,IAAA,IAAI,KAAK,KAAO,EAAA;AACd,MAAA,SAAA,CAAU,IAAK,CAAA,CAAA,OAAA,EAAU,GAAK,EAAA,KAAK,CAAE,CAAA,CAAA,CAAA;AAAA,KACvC;AACA,IAAI,IAAA,SAAA,CAAU,SAAS,CAAG,EAAA;AACxB,MAAA,QAAA,IAAY,CAAI,CAAA,EAAA,SAAA,CAAU,IAAK,CAAA,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,KAC/B,MAAA;AACL,MAAY,QAAA,IAAA,mBAAA,CAAA;AAAA,KACd;AAEA,IAAO,OAAA,QAAA,CAAA;AAAA,GACT;AACF;;;;"}
|
|
@@ -46,44 +46,14 @@ function mapWorkflowCategoryDTO(category) {
|
|
|
46
46
|
return "infrastructure";
|
|
47
47
|
}
|
|
48
48
|
function getProcessInstancesStatusDTOFromString(state) {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
return "Completed";
|
|
56
|
-
case backstagePluginOrchestratorCommon.ProcessInstanceState.Aborted.valueOf():
|
|
57
|
-
return "Aborted";
|
|
58
|
-
case backstagePluginOrchestratorCommon.ProcessInstanceState.Suspended.valueOf():
|
|
59
|
-
return "Suspended";
|
|
60
|
-
case backstagePluginOrchestratorCommon.ProcessInstanceState.Pending.valueOf():
|
|
61
|
-
return "Pending";
|
|
62
|
-
default:
|
|
63
|
-
throw new Error(
|
|
64
|
-
`state ${state} is not one of the values of type ProcessInstanceStatusDTO`
|
|
65
|
-
);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
function getProcessInstanceStateFromStatusDTOString(status) {
|
|
69
|
-
switch (status) {
|
|
70
|
-
case "Active":
|
|
71
|
-
return backstagePluginOrchestratorCommon.ProcessInstanceState.Active.valueOf();
|
|
72
|
-
case "Error":
|
|
73
|
-
return backstagePluginOrchestratorCommon.ProcessInstanceState.Error.valueOf();
|
|
74
|
-
case "Completed":
|
|
75
|
-
return backstagePluginOrchestratorCommon.ProcessInstanceState.Completed.valueOf();
|
|
76
|
-
case "Aborted":
|
|
77
|
-
return backstagePluginOrchestratorCommon.ProcessInstanceState.Aborted.valueOf();
|
|
78
|
-
case "Suspended":
|
|
79
|
-
return backstagePluginOrchestratorCommon.ProcessInstanceState.Suspended.valueOf();
|
|
80
|
-
case "Pending":
|
|
81
|
-
return backstagePluginOrchestratorCommon.ProcessInstanceState.Pending.valueOf();
|
|
82
|
-
default:
|
|
83
|
-
throw new Error(
|
|
84
|
-
`status ${status} is not one of the values of type ProcessInstanceState`
|
|
85
|
-
);
|
|
49
|
+
if (!Object.values(backstagePluginOrchestratorCommon.ProcessInstanceStatusDTO).includes(
|
|
50
|
+
state
|
|
51
|
+
)) {
|
|
52
|
+
throw new Error(
|
|
53
|
+
`state ${state} is not one of the values of type ProcessInstanceStatusDTO`
|
|
54
|
+
);
|
|
86
55
|
}
|
|
56
|
+
return state;
|
|
87
57
|
}
|
|
88
58
|
function mapToProcessInstanceDTO(processInstance) {
|
|
89
59
|
const start = moment__default.default(processInstance.start);
|
|
@@ -110,7 +80,7 @@ function mapToProcessInstanceDTO(processInstance) {
|
|
|
110
80
|
duration,
|
|
111
81
|
// @ts-ignore
|
|
112
82
|
workflowdata: variables?.workflowdata,
|
|
113
|
-
|
|
83
|
+
state: processInstance.state ? getProcessInstancesStatusDTOFromString(processInstance.state) : void 0,
|
|
114
84
|
nodes: processInstance.nodes.map(mapToNodeInstanceDTO)
|
|
115
85
|
};
|
|
116
86
|
}
|
|
@@ -134,7 +104,6 @@ function mapToWorkflowRunStatusDTO(status) {
|
|
|
134
104
|
};
|
|
135
105
|
}
|
|
136
106
|
|
|
137
|
-
exports.getProcessInstanceStateFromStatusDTOString = getProcessInstanceStateFromStatusDTOString;
|
|
138
107
|
exports.getProcessInstancesStatusDTOFromString = getProcessInstancesStatusDTOFromString;
|
|
139
108
|
exports.getWorkflowCategoryDTO = getWorkflowCategoryDTO;
|
|
140
109
|
exports.getWorkflowFormatDTO = getWorkflowFormatDTO;
|