@red-hat-developer-hub/backstage-plugin-orchestrator-backend 8.3.0 → 8.3.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 +7 -0
- package/dist/helpers/filterBuilder.cjs.js +83 -15
- package/dist/helpers/filterBuilder.cjs.js.map +1 -1
- package/dist/helpers/queryBuilder.cjs.js +38 -20
- package/dist/helpers/queryBuilder.cjs.js.map +1 -1
- package/dist/service/DataIndexService.cjs.js +88 -23
- package/dist/service/DataIndexService.cjs.js.map +1 -1
- package/dist/types/pagination.cjs.js.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var backstagePluginOrchestratorCommon = require('@red-hat-developer-hub/backstage-plugin-orchestrator-common');
|
|
4
|
+
var node_crypto = require('node:crypto');
|
|
4
5
|
|
|
5
6
|
const supportedOperators = [
|
|
6
7
|
backstagePluginOrchestratorCommon.FieldFilterOperatorEnum.Eq,
|
|
@@ -42,11 +43,15 @@ function isNestedFilter(filter) {
|
|
|
42
43
|
return filter.nested !== void 0;
|
|
43
44
|
}
|
|
44
45
|
function handleLogicalFilter(introspection, type, filter) {
|
|
45
|
-
if (!filter.operator) return
|
|
46
|
+
if (!filter.operator) return {};
|
|
46
47
|
const subClauses = filter.filters.map(
|
|
47
48
|
(f) => buildFilterCondition(introspection, type, f)
|
|
48
49
|
);
|
|
49
|
-
|
|
50
|
+
const filterClause = {
|
|
51
|
+
clause: `${filter.operator.toLowerCase()}: {${subClauses.map((cl) => cl.clause).join(", ")}}`,
|
|
52
|
+
clauseVariable: subClauses.flatMap((cl) => cl.clauseVariable)
|
|
53
|
+
};
|
|
54
|
+
return filterClause;
|
|
50
55
|
}
|
|
51
56
|
function handleNestedFilter(introspection, type, filter) {
|
|
52
57
|
const subClauses = buildFilterCondition(
|
|
@@ -55,20 +60,54 @@ function handleNestedFilter(introspection, type, filter) {
|
|
|
55
60
|
filter.nested,
|
|
56
61
|
true
|
|
57
62
|
);
|
|
58
|
-
|
|
63
|
+
const filterClause = {
|
|
64
|
+
clauseVariable: subClauses.clauseVariable,
|
|
65
|
+
clause: `${filter.field}: {${subClauses.clause}}`
|
|
66
|
+
};
|
|
67
|
+
return filterClause;
|
|
59
68
|
}
|
|
60
69
|
function handleBetweenOperator(filter) {
|
|
61
70
|
if (!Array.isArray(filter.value) || filter.value.length !== 2) {
|
|
62
71
|
throw new Error("Between operator requires an array of two elements");
|
|
63
72
|
}
|
|
64
|
-
|
|
73
|
+
const filterClauseVariableArray = [];
|
|
74
|
+
const clauseVariableName1 = `clauseVariable${nonSecureRandomAlphaNumeric()}`;
|
|
75
|
+
const filterClauseVariable1 = {
|
|
76
|
+
clauseVariableName: clauseVariableName1,
|
|
77
|
+
formattedValue: filter.value[0],
|
|
78
|
+
clauseVariableType: "String"
|
|
79
|
+
};
|
|
80
|
+
const clauseVariableName2 = `clauseVariable${nonSecureRandomAlphaNumeric()}`;
|
|
81
|
+
const filterClauseVariable2 = {
|
|
82
|
+
clauseVariableName: clauseVariableName2,
|
|
83
|
+
formattedValue: filter.value[1],
|
|
84
|
+
clauseVariableType: "String"
|
|
85
|
+
};
|
|
86
|
+
const clause = `${filter.field}: {${getGraphQLOperator(
|
|
65
87
|
backstagePluginOrchestratorCommon.FieldFilterOperatorEnum.Between
|
|
66
|
-
)}: {from:
|
|
88
|
+
)}: {from: $${clauseVariableName1}, to: $${clauseVariableName2}}}`;
|
|
89
|
+
filterClauseVariableArray.push(filterClauseVariable1, filterClauseVariable2);
|
|
90
|
+
const filterClause = {
|
|
91
|
+
clause,
|
|
92
|
+
clauseVariable: filterClauseVariableArray
|
|
93
|
+
};
|
|
94
|
+
return filterClause;
|
|
67
95
|
}
|
|
68
96
|
function handleIsNullOperator(filter) {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
97
|
+
const clauseVariableName = `clauseVariable${nonSecureRandomAlphaNumeric()}`;
|
|
98
|
+
const clause = `${filter.field}: {${getGraphQLOperator(backstagePluginOrchestratorCommon.FieldFilterOperatorEnum.IsNull)}: $${clauseVariableName}}`;
|
|
99
|
+
const filterClauseVariable = {
|
|
100
|
+
clauseVariableName,
|
|
101
|
+
formattedValue: convertToBoolean(filter.value),
|
|
102
|
+
clauseVariableType: "Boolean"
|
|
103
|
+
};
|
|
104
|
+
const filterClauseVariableArray = [];
|
|
105
|
+
filterClauseVariableArray.push(filterClauseVariable);
|
|
106
|
+
const clauseObject = {
|
|
107
|
+
clauseVariable: filterClauseVariableArray,
|
|
108
|
+
clause
|
|
109
|
+
};
|
|
110
|
+
return clauseObject;
|
|
72
111
|
}
|
|
73
112
|
function isEnumFilter(fieldName, type) {
|
|
74
113
|
if (type === "ProcessInstance") {
|
|
@@ -89,14 +128,40 @@ function handleBinaryOperator(binaryFilter, fieldDef, type) {
|
|
|
89
128
|
);
|
|
90
129
|
}
|
|
91
130
|
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
131
|
+
let formattedValue;
|
|
132
|
+
let paramType;
|
|
133
|
+
if (Array.isArray(binaryFilter.value)) {
|
|
134
|
+
formattedValue = binaryFilter.value.map(
|
|
135
|
+
(v) => formatValue(binaryFilter.field, v, fieldDef, type)
|
|
136
|
+
);
|
|
137
|
+
paramType = isEnumFilter(binaryFilter.field, type) ? "[ProcessInstanceState!]" : "[String!]";
|
|
138
|
+
} else {
|
|
139
|
+
formattedValue = formatValue(
|
|
140
|
+
binaryFilter.field,
|
|
141
|
+
binaryFilter.value,
|
|
142
|
+
fieldDef,
|
|
143
|
+
type
|
|
144
|
+
);
|
|
145
|
+
paramType = "String";
|
|
146
|
+
}
|
|
147
|
+
const clauseVariableName = `clauseVariable${nonSecureRandomAlphaNumeric()}`;
|
|
148
|
+
const clause = `${binaryFilter.field}: {${getGraphQLOperator(binaryFilter.operator)}: $${clauseVariableName}}`;
|
|
149
|
+
const filterClauseVariable = {
|
|
150
|
+
clauseVariableName,
|
|
151
|
+
formattedValue,
|
|
152
|
+
clauseVariableType: paramType
|
|
153
|
+
};
|
|
154
|
+
const filterClauseVariableArray = [];
|
|
155
|
+
filterClauseVariableArray.push(filterClauseVariable);
|
|
156
|
+
const clauseObject = {
|
|
157
|
+
clauseVariable: filterClauseVariableArray,
|
|
158
|
+
clause
|
|
159
|
+
};
|
|
160
|
+
return clauseObject;
|
|
96
161
|
}
|
|
97
162
|
function buildFilterCondition(introspection, type, filters, isNested) {
|
|
98
163
|
if (!filters) {
|
|
99
|
-
return
|
|
164
|
+
return {};
|
|
100
165
|
}
|
|
101
166
|
if (isNestedFilter(filters)) {
|
|
102
167
|
return handleNestedFilter(introspection, type, filters);
|
|
@@ -166,7 +231,7 @@ function convertToBoolean(value) {
|
|
|
166
231
|
}
|
|
167
232
|
function formatValue(fieldName, fieldValue, fieldDef, type) {
|
|
168
233
|
if (!fieldDef) {
|
|
169
|
-
return
|
|
234
|
+
return `${fieldValue}`;
|
|
170
235
|
}
|
|
171
236
|
if (!isFieldFilterSupported) {
|
|
172
237
|
throw new Error(`Unsupported field type ${fieldDef.type.name}`);
|
|
@@ -175,7 +240,7 @@ function formatValue(fieldName, fieldValue, fieldDef, type) {
|
|
|
175
240
|
return `${fieldValue}`;
|
|
176
241
|
}
|
|
177
242
|
if (fieldDef.type.name === backstagePluginOrchestratorCommon.TypeName.String || fieldDef.type.name === backstagePluginOrchestratorCommon.TypeName.Id || fieldDef.type.name === backstagePluginOrchestratorCommon.TypeName.Date) {
|
|
178
|
-
return
|
|
243
|
+
return `${fieldValue}`;
|
|
179
244
|
}
|
|
180
245
|
throw new Error(
|
|
181
246
|
`Failed to format value for ${fieldName} ${fieldValue} with type ${fieldDef.type.name}`
|
|
@@ -205,6 +270,9 @@ function getGraphQLOperator(operator) {
|
|
|
205
270
|
throw new Error(`Operation "${operator}" not supported`);
|
|
206
271
|
}
|
|
207
272
|
}
|
|
273
|
+
function nonSecureRandomAlphaNumeric() {
|
|
274
|
+
return node_crypto.randomBytes(8).toString("hex");
|
|
275
|
+
}
|
|
208
276
|
|
|
209
277
|
exports.buildFilterCondition = buildFilterCondition;
|
|
210
278
|
exports.isOperatorAllowedForField = isOperatorAllowedForField;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filterBuilder.cjs.js","sources":["../../src/helpers/filterBuilder.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n FieldFilter,\n FieldFilterOperatorEnum,\n Filter,\n IntrospectionField,\n LogicalFilter,\n NestedFilter,\n TypeName,\n} from '@red-hat-developer-hub/backstage-plugin-orchestrator-common';\n\ntype ProcessType = 'ProcessDefinition' | 'ProcessInstance';\n\nconst supportedOperators = [\n FieldFilterOperatorEnum.Eq,\n FieldFilterOperatorEnum.Like,\n FieldFilterOperatorEnum.In,\n FieldFilterOperatorEnum.IsNull,\n FieldFilterOperatorEnum.Gt,\n FieldFilterOperatorEnum.Gte,\n FieldFilterOperatorEnum.Lt,\n FieldFilterOperatorEnum.Lte,\n FieldFilterOperatorEnum.Between,\n];\n\nconst supportedOperatorsByType: 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};\n\nfunction isLogicalFilter(filter: Filter): filter is LogicalFilter {\n return (filter as LogicalFilter).filters !== undefined;\n}\n\nfunction isNestedFilter(filter: Filter): filter is NestedFilter {\n return (filter as NestedFilter).nested !== 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 handleNestedFilter(\n introspection: IntrospectionField[],\n type: ProcessType,\n filter: NestedFilter,\n): string {\n const subClauses = buildFilterCondition(\n introspection,\n type,\n filter.nested,\n true,\n );\n\n return `${filter.field}: {${subClauses}}`;\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 | undefined,\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 isNested?: boolean,\n): string {\n if (!filters) {\n return '';\n }\n\n if (isNestedFilter(filters)) {\n return handleNestedFilter(introspection, type, filters);\n }\n\n if (isLogicalFilter(filters)) {\n return handleLogicalFilter(introspection, type, filters);\n }\n\n if (!isOperatorSupported(filters.operator)) {\n throw new Error(\n `Unsupported operator ${filters.operator}. Supported operators are: ${supportedOperators.join(', ')}`,\n );\n }\n\n let fieldDef;\n\n if (!isNested) {\n 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 const allowedOperators =\n supportedOperatorsByType[fieldDef.type.name] || [];\n throw new Error(\n `Unsupported operator ${filters.operator} for field \"${fieldDef.name}\" of type \"${fieldDef.type.name}\". Allowed operators are: ${allowedOperators.join(', ')}`,\n );\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 supportedOperators.includes(operator);\n}\n\nfunction isFieldFilterSupported(fieldDef: IntrospectionField): boolean {\n return fieldDef?.type.name === TypeName.String;\n}\n\nexport function 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\n const allowedForType = supportedOperatorsByType[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 | undefined,\n type: ProcessType,\n): string {\n if (!fieldDef) {\n return `\"${fieldValue}\"`;\n }\n\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 '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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"}
|
|
1
|
+
{"version":3,"file":"filterBuilder.cjs.js","sources":["../../src/helpers/filterBuilder.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n FieldFilter,\n FieldFilterOperatorEnum,\n Filter,\n IntrospectionField,\n LogicalFilter,\n NestedFilter,\n TypeName,\n} from '@red-hat-developer-hub/backstage-plugin-orchestrator-common';\n\nimport { randomBytes } from 'node:crypto';\n\nimport { FilterClause, FilterClauseVariable } from '../types/filterClause';\n\ntype ProcessType = 'ProcessDefinition' | 'ProcessInstance';\n\nconst supportedOperators = [\n FieldFilterOperatorEnum.Eq,\n FieldFilterOperatorEnum.Like,\n FieldFilterOperatorEnum.In,\n FieldFilterOperatorEnum.IsNull,\n FieldFilterOperatorEnum.Gt,\n FieldFilterOperatorEnum.Gte,\n FieldFilterOperatorEnum.Lt,\n FieldFilterOperatorEnum.Lte,\n FieldFilterOperatorEnum.Between,\n];\n\nconst supportedOperatorsByType: 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};\n\nfunction isLogicalFilter(filter: Filter): filter is LogicalFilter {\n return (filter as LogicalFilter).filters !== undefined;\n}\n\nfunction isNestedFilter(filter: Filter): filter is NestedFilter {\n return (filter as NestedFilter).nested !== undefined;\n}\n\nfunction handleLogicalFilter(\n introspection: IntrospectionField[],\n type: ProcessType,\n filter: LogicalFilter,\n): FilterClause {\n if (!filter.operator) return {} as FilterClause;\n\n const subClauses = filter.filters.map(f =>\n buildFilterCondition(introspection, type, f),\n );\n\n const filterClause: FilterClause = {\n clause: `${filter.operator.toLowerCase()}: {${subClauses.map(cl => cl.clause).join(', ')}}`,\n clauseVariable: subClauses.flatMap(cl => cl.clauseVariable),\n };\n return filterClause;\n}\n\nfunction handleNestedFilter(\n introspection: IntrospectionField[],\n type: ProcessType,\n filter: NestedFilter,\n): FilterClause {\n const subClauses = buildFilterCondition(\n introspection,\n type,\n filter.nested,\n true,\n );\n\n const filterClause: FilterClause = {\n clauseVariable: subClauses.clauseVariable,\n clause: `${filter.field}: {${subClauses.clause}}`,\n };\n\n return filterClause;\n}\n\nfunction handleBetweenOperator(filter: FieldFilter): FilterClause {\n if (!Array.isArray(filter.value) || filter.value.length !== 2) {\n throw new Error('Between operator requires an array of two elements');\n }\n const filterClauseVariableArray: FilterClauseVariable[] = [];\n const clauseVariableName1 = `clauseVariable${nonSecureRandomAlphaNumeric()}`;\n const filterClauseVariable1: FilterClauseVariable = {\n clauseVariableName: clauseVariableName1,\n formattedValue: filter.value[0],\n clauseVariableType: 'String',\n };\n\n const clauseVariableName2 = `clauseVariable${nonSecureRandomAlphaNumeric()}`;\n const filterClauseVariable2: FilterClauseVariable = {\n clauseVariableName: clauseVariableName2,\n formattedValue: filter.value[1],\n clauseVariableType: 'String',\n };\n\n const clause = `${filter.field}: {${getGraphQLOperator(\n FieldFilterOperatorEnum.Between,\n )}: {from: $${clauseVariableName1}, to: $${clauseVariableName2}}}`;\n filterClauseVariableArray.push(filterClauseVariable1, filterClauseVariable2);\n const filterClause: FilterClause = {\n clause: clause,\n clauseVariable: filterClauseVariableArray,\n };\n\n return filterClause;\n}\n\nfunction handleIsNullOperator(filter: FieldFilter): FilterClause {\n const clauseVariableName = `clauseVariable${nonSecureRandomAlphaNumeric()}`;\n const clause = `${filter.field}: {${getGraphQLOperator(FieldFilterOperatorEnum.IsNull)}: $${clauseVariableName}}`;\n\n const filterClauseVariable: FilterClauseVariable = {\n clauseVariableName: clauseVariableName,\n formattedValue: convertToBoolean(filter.value),\n clauseVariableType: 'Boolean',\n };\n const filterClauseVariableArray: FilterClauseVariable[] = [];\n filterClauseVariableArray.push(filterClauseVariable);\n const clauseObject: FilterClause = {\n clauseVariable: filterClauseVariableArray,\n clause,\n };\n\n return clauseObject;\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 | undefined,\n type: 'ProcessDefinition' | 'ProcessInstance',\n): FilterClause {\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 let formattedValue: any;\n let paramType: string;\n if (Array.isArray(binaryFilter.value)) {\n formattedValue = binaryFilter.value.map(v =>\n formatValue(binaryFilter.field, v, fieldDef, type),\n );\n paramType = isEnumFilter(binaryFilter.field, type)\n ? '[ProcessInstanceState!]'\n : '[String!]';\n } else {\n formattedValue = formatValue(\n binaryFilter.field,\n binaryFilter.value,\n fieldDef,\n type,\n );\n paramType = 'String';\n }\n\n const clauseVariableName = `clauseVariable${nonSecureRandomAlphaNumeric()}`;\n const clause = `${binaryFilter.field}: {${getGraphQLOperator(binaryFilter.operator)}: $${clauseVariableName}}`;\n const filterClauseVariable: FilterClauseVariable = {\n clauseVariableName: clauseVariableName,\n formattedValue: formattedValue,\n clauseVariableType: paramType,\n };\n const filterClauseVariableArray: FilterClauseVariable[] = [];\n filterClauseVariableArray.push(filterClauseVariable);\n const clauseObject: FilterClause = {\n clauseVariable: filterClauseVariableArray,\n clause,\n };\n\n return clauseObject;\n}\n\nexport function buildFilterCondition(\n introspection: IntrospectionField[],\n type: ProcessType,\n filters?: Filter,\n isNested?: boolean,\n): FilterClause {\n if (!filters) {\n return {} as FilterClause;\n }\n\n if (isNestedFilter(filters)) {\n return handleNestedFilter(introspection, type, filters);\n }\n\n if (isLogicalFilter(filters)) {\n return handleLogicalFilter(introspection, type, filters);\n }\n\n if (!isOperatorSupported(filters.operator)) {\n throw new Error(\n `Unsupported operator ${filters.operator}. Supported operators are: ${supportedOperators.join(', ')}`,\n );\n }\n\n let fieldDef;\n\n if (!isNested) {\n 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 const allowedOperators =\n supportedOperatorsByType[fieldDef.type.name] || [];\n throw new Error(\n `Unsupported operator ${filters.operator} for field \"${fieldDef.name}\" of type \"${fieldDef.type.name}\". Allowed operators are: ${allowedOperators.join(', ')}`,\n );\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 supportedOperators.includes(operator);\n}\n\nfunction isFieldFilterSupported(fieldDef: IntrospectionField): boolean {\n return fieldDef?.type.name === TypeName.String;\n}\n\nexport function 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\n const allowedForType = supportedOperatorsByType[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 | undefined,\n type: ProcessType,\n): string {\n if (!fieldDef) {\n return `${fieldValue}`;\n }\n\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 'BETWEEN':\n return 'between';\n default:\n throw new Error(`Operation \"${operator}\" not supported`);\n }\n}\n\n// Function for getting 4 random digits to append to the clause variable name.\n// Not used for any secrets or anything\nfunction nonSecureRandomAlphaNumeric() {\n return randomBytes(8).toString('hex');\n}\n"],"names":["FieldFilterOperatorEnum","TypeName","randomBytes"],"mappings":"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"}
|
|
@@ -1,12 +1,20 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
function buildGraphQlQuery(args) {
|
|
4
|
-
|
|
4
|
+
const queryHeaderStart = "query (";
|
|
5
|
+
const queryHeaderEnd = ")";
|
|
6
|
+
const queryHeaderPaginationOrderByParams = `$paginationInfo: Pagination, $orderByInfo: ${args.type.slice(0, -1)}OrderBy`;
|
|
7
|
+
const filterParams = args.filterCondition?.clauseVariable?.map((cl) => {
|
|
8
|
+
return `$${cl.clauseVariableName}: ${cl.clauseVariableType}`;
|
|
9
|
+
}).join(", ");
|
|
10
|
+
const params = [queryHeaderPaginationOrderByParams, filterParams].filter(Boolean).join(", ");
|
|
11
|
+
let query = `${queryHeaderStart}${params}${queryHeaderEnd}{${args.type}`;
|
|
5
12
|
const whereClause = buildWhereClause(args.whereClause);
|
|
6
|
-
const paginationClause =
|
|
7
|
-
|
|
13
|
+
const paginationClause = "pagination: $paginationInfo";
|
|
14
|
+
const orderByClause = "orderBy: $orderByInfo";
|
|
15
|
+
{
|
|
8
16
|
query += " (";
|
|
9
|
-
query += [whereClause, paginationClause].filter(Boolean).join(", ");
|
|
17
|
+
query += [whereClause, orderByClause, paginationClause].filter(Boolean).join(", ");
|
|
10
18
|
query += ") ";
|
|
11
19
|
}
|
|
12
20
|
query += ` {${args.queryBody} } }`;
|
|
@@ -15,26 +23,36 @@ function buildGraphQlQuery(args) {
|
|
|
15
23
|
function buildWhereClause(whereClause) {
|
|
16
24
|
return whereClause ? `where: {${whereClause}}` : "";
|
|
17
25
|
}
|
|
18
|
-
function
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
parts.push(
|
|
23
|
-
`orderBy: {${pagination.sortField}: ${pagination.order !== void 0 ? pagination.order?.toUpperCase() : "ASC"}}`
|
|
24
|
-
);
|
|
26
|
+
function buildOrderByVariables(pagination) {
|
|
27
|
+
const orderByVariable = {};
|
|
28
|
+
if (pagination?.sortField !== void 0) {
|
|
29
|
+
orderByVariable[pagination.sortField] = pagination.order?.toUpperCase() ?? "ASC";
|
|
25
30
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
}
|
|
30
|
-
if (pagination
|
|
31
|
-
|
|
31
|
+
return orderByVariable;
|
|
32
|
+
}
|
|
33
|
+
function buildPaginationVariables(pagination) {
|
|
34
|
+
const paginationVariable = {};
|
|
35
|
+
if (pagination?.limit !== void 0) {
|
|
36
|
+
paginationVariable.limit = pagination.limit;
|
|
32
37
|
}
|
|
33
|
-
if (
|
|
34
|
-
|
|
38
|
+
if (pagination?.offset !== void 0) {
|
|
39
|
+
paginationVariable.offset = pagination.offset;
|
|
35
40
|
}
|
|
36
|
-
return
|
|
41
|
+
return paginationVariable;
|
|
42
|
+
}
|
|
43
|
+
function buildQueryParamVariable(pagination, filterCondition) {
|
|
44
|
+
const paramVariables = {
|
|
45
|
+
paginationInfo: buildPaginationVariables(pagination),
|
|
46
|
+
orderByInfo: buildOrderByVariables(pagination)
|
|
47
|
+
};
|
|
48
|
+
filterCondition?.clauseVariable?.forEach((p) => {
|
|
49
|
+
paramVariables[p.clauseVariableName] = p.formattedValue;
|
|
50
|
+
});
|
|
51
|
+
return paramVariables;
|
|
37
52
|
}
|
|
38
53
|
|
|
39
54
|
exports.buildGraphQlQuery = buildGraphQlQuery;
|
|
55
|
+
exports.buildOrderByVariables = buildOrderByVariables;
|
|
56
|
+
exports.buildPaginationVariables = buildPaginationVariables;
|
|
57
|
+
exports.buildQueryParamVariable = buildQueryParamVariable;
|
|
40
58
|
//# sourceMappingURL=queryBuilder.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queryBuilder.cjs.js","sources":["../../src/helpers/queryBuilder.ts"],"sourcesContent":["/*\n * Copyright
|
|
1
|
+
{"version":3,"file":"queryBuilder.cjs.js","sources":["../../src/helpers/queryBuilder.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FilterClause } from '../types/filterClause';\nimport { Pagination, PaginationQueryVariable } from '../types/pagination';\n\nexport function buildGraphQlQuery(args: {\n type: 'ProcessDefinitions' | 'ProcessInstances' | 'Jobs';\n queryBody: string;\n whereClause?: string;\n pagination?: Pagination;\n filterCondition?: FilterClause;\n}): string {\n const queryHeaderStart = 'query (';\n const queryHeaderEnd = ')';\n\n const queryHeaderPaginationOrderByParams = `$paginationInfo: Pagination, $orderByInfo: ${args.type.slice(0, -1)}OrderBy`;\n\n const filterParams = args.filterCondition?.clauseVariable\n ?.map(cl => {\n return `$${cl.clauseVariableName}: ${cl.clauseVariableType}`;\n })\n .join(', ');\n\n const params = [queryHeaderPaginationOrderByParams, filterParams]\n .filter(Boolean)\n .join(', ');\n\n let query = `${queryHeaderStart}${params}${queryHeaderEnd}{${args.type}`;\n const whereClause = buildWhereClause(args.whereClause);\n\n const paginationClause = 'pagination: $paginationInfo';\n const orderByClause = 'orderBy: $orderByInfo';\n\n if (whereClause || paginationClause || orderByClause) {\n query += ' (';\n query += [whereClause, orderByClause, paginationClause]\n .filter(Boolean)\n .join(', ');\n query += ') ';\n }\n\n query += ` {${args.queryBody} } }`;\n\n return query.replace(/\\s+/g, ' ').trim();\n}\n\nfunction buildWhereClause(whereClause?: string): string {\n return whereClause ? `where: {${whereClause}}` : '';\n}\n\nexport function buildOrderByVariables(pagination?: Pagination): {\n [key: string]: string;\n} {\n const orderByVariable: { [key: string]: string } = {};\n\n if (pagination?.sortField !== undefined) {\n orderByVariable[pagination.sortField] =\n pagination.order?.toUpperCase() ?? 'ASC';\n }\n\n return orderByVariable;\n}\n\nexport function buildPaginationVariables(\n pagination?: Pagination,\n): PaginationQueryVariable {\n const paginationVariable: PaginationQueryVariable = {};\n\n if (pagination?.limit !== undefined) {\n paginationVariable.limit = pagination.limit;\n }\n\n if (pagination?.offset !== undefined) {\n paginationVariable.offset = pagination.offset;\n }\n return paginationVariable;\n}\n\nexport function buildQueryParamVariable(\n pagination?: Pagination,\n filterCondition?: FilterClause,\n) {\n const paramVariables: any = {\n paginationInfo: buildPaginationVariables(pagination),\n orderByInfo: buildOrderByVariables(pagination),\n };\n\n filterCondition?.clauseVariable?.forEach(p => {\n paramVariables[p.clauseVariableName] = p.formattedValue;\n });\n\n return paramVariables;\n}\n"],"names":[],"mappings":";;AAmBO,SAAS,kBAAkB,IAAA,EAMvB;AACT,EAAA,MAAM,gBAAA,GAAmB,SAAA;AACzB,EAAA,MAAM,cAAA,GAAiB,GAAA;AAEvB,EAAA,MAAM,qCAAqC,CAAA,2CAAA,EAA8C,IAAA,CAAK,KAAK,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,OAAA,CAAA;AAE/G,EAAA,MAAM,YAAA,GAAe,IAAA,CAAK,eAAA,EAAiB,cAAA,EACvC,IAAI,CAAA,EAAA,KAAM;AACV,IAAA,OAAO,CAAA,CAAA,EAAI,EAAA,CAAG,kBAAkB,CAAA,EAAA,EAAK,GAAG,kBAAkB,CAAA,CAAA;AAAA,EAC5D,CAAC,CAAA,CACA,IAAA,CAAK,IAAI,CAAA;AAEZ,EAAA,MAAM,MAAA,GAAS,CAAC,kCAAA,EAAoC,YAAY,EAC7D,MAAA,CAAO,OAAO,CAAA,CACd,IAAA,CAAK,IAAI,CAAA;AAEZ,EAAA,IAAI,KAAA,GAAQ,GAAG,gBAAgB,CAAA,EAAG,MAAM,CAAA,EAAG,cAAc,CAAA,CAAA,EAAI,IAAA,CAAK,IAAI,CAAA,CAAA;AACtE,EAAA,MAAM,WAAA,GAAc,gBAAA,CAAiB,IAAA,CAAK,WAAW,CAAA;AAErD,EAAA,MAAM,gBAAA,GAAmB,6BAAA;AACzB,EAAA,MAAM,aAAA,GAAgB,uBAAA;AAEtB,EAAsD;AACpD,IAAA,KAAA,IAAS,IAAA;AACT,IAAA,KAAA,IAAS,CAAC,aAAa,aAAA,EAAe,gBAAgB,EACnD,MAAA,CAAO,OAAO,CAAA,CACd,IAAA,CAAK,IAAI,CAAA;AACZ,IAAA,KAAA,IAAS,IAAA;AAAA,EACX;AAEA,EAAA,KAAA,IAAS,CAAA,EAAA,EAAK,KAAK,SAAS,CAAA,IAAA,CAAA;AAE5B,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,MAAA,EAAQ,GAAG,EAAE,IAAA,EAAK;AACzC;AAEA,SAAS,iBAAiB,WAAA,EAA8B;AACtD,EAAA,OAAO,WAAA,GAAc,CAAA,QAAA,EAAW,WAAW,CAAA,CAAA,CAAA,GAAM,EAAA;AACnD;AAEO,SAAS,sBAAsB,UAAA,EAEpC;AACA,EAAA,MAAM,kBAA6C,EAAC;AAEpD,EAAA,IAAI,UAAA,EAAY,cAAc,MAAA,EAAW;AACvC,IAAA,eAAA,CAAgB,WAAW,SAAS,CAAA,GAClC,UAAA,CAAW,KAAA,EAAO,aAAY,IAAK,KAAA;AAAA,EACvC;AAEA,EAAA,OAAO,eAAA;AACT;AAEO,SAAS,yBACd,UAAA,EACyB;AACzB,EAAA,MAAM,qBAA8C,EAAC;AAErD,EAAA,IAAI,UAAA,EAAY,UAAU,MAAA,EAAW;AACnC,IAAA,kBAAA,CAAmB,QAAQ,UAAA,CAAW,KAAA;AAAA,EACxC;AAEA,EAAA,IAAI,UAAA,EAAY,WAAW,MAAA,EAAW;AACpC,IAAA,kBAAA,CAAmB,SAAS,UAAA,CAAW,MAAA;AAAA,EACzC;AACA,EAAA,OAAO,kBAAA;AACT;AAEO,SAAS,uBAAA,CACd,YACA,eAAA,EACA;AACA,EAAA,MAAM,cAAA,GAAsB;AAAA,IAC1B,cAAA,EAAgB,yBAAyB,UAAU,CAAA;AAAA,IACnD,WAAA,EAAa,sBAAsB,UAAU;AAAA,GAC/C;AAEA,EAAA,eAAA,EAAiB,cAAA,EAAgB,QAAQ,CAAA,CAAA,KAAK;AAC5C,IAAA,cAAA,CAAe,CAAA,CAAE,kBAAkB,CAAA,GAAI,CAAA,CAAE,cAAA;AAAA,EAC3C,CAAC,CAAA;AAED,EAAA,OAAO,cAAA;AACT;;;;;;;"}
|
|
@@ -84,8 +84,22 @@ class DataIndexService {
|
|
|
84
84
|
return pairs;
|
|
85
85
|
}
|
|
86
86
|
async fetchWorkflowInfo(definitionId) {
|
|
87
|
-
const graphQlQuery = `
|
|
88
|
-
|
|
87
|
+
const graphQlQuery = core.gql`
|
|
88
|
+
query FindProcessInstanceQuery($definitionId: String!) {
|
|
89
|
+
ProcessDefinitions(where: { id: { equal: $definitionId } }) {
|
|
90
|
+
id
|
|
91
|
+
name
|
|
92
|
+
version
|
|
93
|
+
type
|
|
94
|
+
endpoint
|
|
95
|
+
serviceUrl
|
|
96
|
+
source
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
`;
|
|
100
|
+
const result = await this.client.query(graphQlQuery, {
|
|
101
|
+
definitionId
|
|
102
|
+
});
|
|
89
103
|
this.logger.debug(
|
|
90
104
|
`Get workflow definition result: ${JSON.stringify(result)}`
|
|
91
105
|
);
|
|
@@ -143,9 +157,9 @@ class DataIndexService {
|
|
|
143
157
|
) : void 0;
|
|
144
158
|
let whereClause;
|
|
145
159
|
if (definitionIdsCondition && filterCondition) {
|
|
146
|
-
whereClause = `and: [{${definitionIdsCondition}}, {${filterCondition}}]`;
|
|
160
|
+
whereClause = `and: [{${definitionIdsCondition}}, {${filterCondition?.clause}}]`;
|
|
147
161
|
} else if (definitionIdsCondition || filterCondition) {
|
|
148
|
-
whereClause = definitionIdsCondition ?? filterCondition;
|
|
162
|
+
whereClause = definitionIdsCondition ?? filterCondition?.clause;
|
|
149
163
|
} else {
|
|
150
164
|
whereClause = void 0;
|
|
151
165
|
}
|
|
@@ -153,10 +167,12 @@ class DataIndexService {
|
|
|
153
167
|
type: "ProcessDefinitions",
|
|
154
168
|
queryBody: "id, name, version, type, endpoint, serviceUrl, source, metadata",
|
|
155
169
|
whereClause,
|
|
156
|
-
|
|
170
|
+
filterCondition
|
|
157
171
|
});
|
|
158
172
|
this.logger.debug(`GraphQL query: ${graphQlQuery}`);
|
|
159
|
-
const
|
|
173
|
+
const paramVariables = queryBuilder.buildQueryParamVariable(pagination, filterCondition);
|
|
174
|
+
this.logger.debug(`GraphQL query params:`, paramVariables);
|
|
175
|
+
const result = await this.client.query(graphQlQuery, paramVariables);
|
|
160
176
|
this.logger.debug(
|
|
161
177
|
`Get workflow definitions result: ${JSON.stringify(result)}`
|
|
162
178
|
);
|
|
@@ -176,7 +192,7 @@ class DataIndexService {
|
|
|
176
192
|
await this.inspectInputArgument(type),
|
|
177
193
|
type,
|
|
178
194
|
filter
|
|
179
|
-
) :
|
|
195
|
+
) : void 0;
|
|
180
196
|
let whereClause = "";
|
|
181
197
|
const conditions = [];
|
|
182
198
|
{
|
|
@@ -185,8 +201,8 @@ class DataIndexService {
|
|
|
185
201
|
if (definitionIdsCondition) {
|
|
186
202
|
conditions.push(`{${definitionIdsCondition}}`);
|
|
187
203
|
}
|
|
188
|
-
if (
|
|
189
|
-
conditions.push(`{${filterCondition}}`);
|
|
204
|
+
if (filterCondition) {
|
|
205
|
+
conditions.push(`{${filterCondition?.clause}}`);
|
|
190
206
|
}
|
|
191
207
|
if (conditions.length === 0) {
|
|
192
208
|
whereClause = processIdNotNullCondition;
|
|
@@ -199,10 +215,12 @@ class DataIndexService {
|
|
|
199
215
|
type: "ProcessInstances",
|
|
200
216
|
queryBody: "id, processName, processId, state, start, end, nodes { id }, variables, executionSummary, parentProcessInstance {id, processName, businessKey}",
|
|
201
217
|
whereClause,
|
|
202
|
-
|
|
218
|
+
filterCondition
|
|
203
219
|
});
|
|
204
220
|
this.logger.debug(`GraphQL query: ${graphQlQuery}`);
|
|
205
|
-
const
|
|
221
|
+
const paramVariables = queryBuilder.buildQueryParamVariable(pagination, filterCondition);
|
|
222
|
+
this.logger.debug(`GraphQL query params:`, paramVariables);
|
|
223
|
+
const result = await this.client.query(graphQlQuery, paramVariables);
|
|
206
224
|
this.logger.debug(
|
|
207
225
|
`Fetch process instances result: ${JSON.stringify(result)}`
|
|
208
226
|
);
|
|
@@ -232,7 +250,7 @@ class DataIndexService {
|
|
|
232
250
|
type,
|
|
233
251
|
targetEntityFilter
|
|
234
252
|
);
|
|
235
|
-
const whereClause = `and: [{${processIdNotNullCondition}}, {${filterCondition}}]`;
|
|
253
|
+
const whereClause = `and: [{${processIdNotNullCondition}}, {${filterCondition.clause}}]`;
|
|
236
254
|
const pagination = {
|
|
237
255
|
limit: 1e3,
|
|
238
256
|
offset: 0
|
|
@@ -241,10 +259,12 @@ class DataIndexService {
|
|
|
241
259
|
type: "ProcessInstances",
|
|
242
260
|
queryBody: "processId",
|
|
243
261
|
whereClause,
|
|
244
|
-
|
|
262
|
+
filterCondition
|
|
245
263
|
});
|
|
246
264
|
this.logger.debug(`GraphQL query: ${graphQlQuery}`);
|
|
247
|
-
const
|
|
265
|
+
const paramVariables = queryBuilder.buildQueryParamVariable(pagination, filterCondition);
|
|
266
|
+
this.logger.debug(`GraphQL query params:`, paramVariables);
|
|
267
|
+
const result = await this.client.query(graphQlQuery, paramVariables);
|
|
248
268
|
this.logger.debug(
|
|
249
269
|
`Fetch definition ids from instances history result: ${JSON.stringify(result)}`
|
|
250
270
|
);
|
|
@@ -271,8 +291,17 @@ class DataIndexService {
|
|
|
271
291
|
return instance;
|
|
272
292
|
}
|
|
273
293
|
async fetchWorkflowSource(definitionId) {
|
|
274
|
-
const graphQlQuery = `
|
|
275
|
-
|
|
294
|
+
const graphQlQuery = core.gql`
|
|
295
|
+
query FindProcessInstanceQuery($definitionId: String!) {
|
|
296
|
+
ProcessDefinitions(where: { id: { equal: $definitionId } }) {
|
|
297
|
+
id
|
|
298
|
+
source
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
`;
|
|
302
|
+
const result = await this.client.query(graphQlQuery, {
|
|
303
|
+
definitionId
|
|
304
|
+
});
|
|
276
305
|
this.logger.debug(
|
|
277
306
|
`Fetch workflow source result: ${JSON.stringify(result)}`
|
|
278
307
|
);
|
|
@@ -288,9 +317,29 @@ class DataIndexService {
|
|
|
288
317
|
return processDefinitions[0].source;
|
|
289
318
|
}
|
|
290
319
|
async fetchInstancesByDefinitionId(args) {
|
|
291
|
-
const targetEntityWhereCondition = args.targetEntity ? `, variables: {targetEntity: {equal:
|
|
292
|
-
const graphQlQuery = `
|
|
293
|
-
|
|
320
|
+
const targetEntityWhereCondition = args.targetEntity ? `, variables: {targetEntity: {equal: $targetEntity } }` : "";
|
|
321
|
+
const graphQlQuery = core.gql`
|
|
322
|
+
query FindProcessInstanceQuery($definitionId: String!, $limit: Int!, $offset: Int! ${args.targetEntity ? `, $targetEntity: String` : ""}) {
|
|
323
|
+
ProcessInstances(
|
|
324
|
+
where: {processId: {equal: $definitionId } ${targetEntityWhereCondition} },
|
|
325
|
+
orderBy: {start:DESC},
|
|
326
|
+
pagination: {limit: $limit, offset: $offset}
|
|
327
|
+
) { id, processName, state, start, end }
|
|
328
|
+
}
|
|
329
|
+
`;
|
|
330
|
+
const result = await this.client.query(
|
|
331
|
+
graphQlQuery,
|
|
332
|
+
args.targetEntity ? {
|
|
333
|
+
definitionId: args.definitionId,
|
|
334
|
+
limit: args.limit,
|
|
335
|
+
offset: args.offset,
|
|
336
|
+
targetEntity: args.targetEntity
|
|
337
|
+
} : {
|
|
338
|
+
definitionId: args.definitionId,
|
|
339
|
+
limit: args.limit,
|
|
340
|
+
offset: args.offset
|
|
341
|
+
}
|
|
342
|
+
);
|
|
294
343
|
this.logger.debug(
|
|
295
344
|
`Fetch workflow instances result: ${JSON.stringify(result)}`
|
|
296
345
|
);
|
|
@@ -301,8 +350,16 @@ class DataIndexService {
|
|
|
301
350
|
return result.data.ProcessInstances;
|
|
302
351
|
}
|
|
303
352
|
async fetchInstanceVariables(instanceId) {
|
|
304
|
-
const graphQlQuery = `
|
|
305
|
-
|
|
353
|
+
const graphQlQuery = core.gql`
|
|
354
|
+
query FindProcessInstanceQuery($instanceId: String!) {
|
|
355
|
+
ProcessInstances(where: { id: { equal: $instanceId } }) {
|
|
356
|
+
variables
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
`;
|
|
360
|
+
const result = await this.client.query(graphQlQuery, {
|
|
361
|
+
instanceId
|
|
362
|
+
});
|
|
306
363
|
this.logger.debug(
|
|
307
364
|
`Fetch process instance variables result: ${JSON.stringify(result)}`
|
|
308
365
|
);
|
|
@@ -317,8 +374,16 @@ class DataIndexService {
|
|
|
317
374
|
return backstagePluginOrchestratorCommon.parseWorkflowVariables(processInstances[0].variables);
|
|
318
375
|
}
|
|
319
376
|
async fetchDefinitionIdByInstanceId(instanceId) {
|
|
320
|
-
const graphQlQuery = `
|
|
321
|
-
|
|
377
|
+
const graphQlQuery = core.gql`
|
|
378
|
+
query FindProcessInstanceQuery($instanceId: String!) {
|
|
379
|
+
ProcessInstances(where: { id: { equal: $instanceId } }) {
|
|
380
|
+
processId
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
`;
|
|
384
|
+
const result = await this.client.query(graphQlQuery, {
|
|
385
|
+
instanceId
|
|
386
|
+
});
|
|
322
387
|
this.logger.debug(
|
|
323
388
|
`Fetch process id from instance result: ${JSON.stringify(result)}`
|
|
324
389
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataIndexService.cjs.js","sources":["../../src/service/DataIndexService.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { LoggerService } from '@backstage/backend-plugin-api';\n\nimport { Client, fetchExchange, gql } from '@urql/core';\n\nimport {\n Filter,\n fromWorkflowSource,\n IntrospectionField,\n NestedFilter,\n parseWorkflowVariables,\n ProcessInstance,\n WorkflowDefinition,\n WorkflowInfo,\n} from '@red-hat-developer-hub/backstage-plugin-orchestrator-common';\n\nimport { ErrorBuilder } from '../helpers/errorBuilder';\nimport { buildFilterCondition } from '../helpers/filterBuilder';\nimport { buildGraphQlQuery } from '../helpers/queryBuilder';\nimport { Pagination } from '../types/pagination';\nimport { FETCH_PROCESS_INSTANCES_SORT_FIELD } from './constants';\n\nexport class DataIndexService {\n private readonly client: Client;\n public processDefinitionArguments: IntrospectionField[] = [];\n public processInstanceArguments: IntrospectionField[] = [];\n\n public constructor(\n private readonly dataIndexUrl: string,\n private readonly logger: LoggerService,\n ) {\n if (!dataIndexUrl.length) {\n throw ErrorBuilder.GET_NO_DATA_INDEX_URL_ERR();\n }\n\n this.client = this.getNewGraphQLClient();\n }\n\n private getNewGraphQLClient(): Client {\n const diURL = `${this.dataIndexUrl}/graphql`;\n return new Client({\n url: diURL,\n exchanges: [fetchExchange],\n });\n }\n\n public async initInputProcessDefinitionArgs(): Promise<IntrospectionField[]> {\n if (this.processDefinitionArguments.length === 0) {\n this.processDefinitionArguments =\n await this.inspectInputArgument('ProcessDefinition');\n }\n return this.processDefinitionArguments; // For testing purposes\n }\n\n public graphQLArgumentQuery(type: string): string {\n return `query ${type}Argument {\n __type(name: \"${type}Argument\") {\n kind\n name\n inputFields {\n name\n type {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n }\n }\n }\n }\n }\n }\n }`;\n }\n\n public async inspectInputArgument(\n type: string,\n ): Promise<IntrospectionField[]> {\n const result = await this.client.query(this.graphQLArgumentQuery(type), {});\n\n this.logger.debug(`Introspection query result: ${JSON.stringify(result)}`);\n\n this.handleGraphqlClientError(\n 'Error executing introspection query',\n result,\n );\n\n const pairs: IntrospectionField[] = [];\n if (result?.data?.__type?.inputFields) {\n for (const field of result.data.__type.inputFields) {\n if (\n field.name !== 'and' &&\n field.name !== 'or' &&\n field.name !== 'not'\n ) {\n pairs.push({\n name: field.name,\n type: {\n name: field.type.name,\n kind: field.type.kind,\n ofType: field.type.ofType,\n },\n });\n }\n }\n }\n return pairs;\n }\n\n public async fetchWorkflowInfo(\n definitionId: string,\n ): Promise<WorkflowInfo | undefined> {\n const graphQlQuery = `{ ProcessDefinitions ( where: {id: {equal: \"${definitionId}\" } } ) { id, name, version, type, endpoint, serviceUrl, source } }`;\n\n const result = await this.client.query(graphQlQuery, {});\n\n this.logger.debug(\n `Get workflow definition result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError('Error fetching workflow definition', result);\n\n const processDefinitions = result.data.ProcessDefinitions as WorkflowInfo[];\n\n if (processDefinitions.length === 0) {\n this.logger.info(`No workflow definition found for ${definitionId}`);\n return undefined;\n }\n\n return processDefinitions[0];\n }\n\n public async fetchWorkflowServiceUrls(): Promise<Record<string, string>> {\n const graphQlQuery = `{ ProcessDefinitions { id, serviceUrl } }`;\n\n const result = await this.client.query(graphQlQuery, {});\n\n this.logger.debug(\n `Get workflow service urls result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error fetching workflow service urls',\n result,\n );\n\n const processDefinitions = result.data.ProcessDefinitions as WorkflowInfo[];\n return processDefinitions\n .filter(definition => definition.serviceUrl)\n .map(definition => ({ [definition.id]: definition.serviceUrl! }))\n .reduce((acc, curr) => ({ ...acc, ...curr }), {});\n }\n\n private filterDeletedWorkflows(workflows: WorkflowInfo[]): WorkflowInfo[] {\n // filter deleted workflows, that were deleted via deleting SonataFlow CR, operator marks them as unavailable\n // Note this is different then the isAvailable status in WorkflowOverviewDTO, that is used to mark workflows that are not available on the service for unexpected reasons\n\n const availableWorkflows: WorkflowInfo[] = [];\n const unavailableWorkflows: WorkflowInfo[] = [];\n\n workflows.forEach(workflow => {\n const isUnavailable = workflow.metadata?.status === 'unavailable';\n if (isUnavailable) {\n unavailableWorkflows.push(workflow);\n } else {\n availableWorkflows.push(workflow);\n }\n });\n\n this.logger.debug(\n `filtered deleted workflows when fetching workflow infos: ${JSON.stringify(\n unavailableWorkflows.map(w => ({\n id: w.id,\n name: w.name,\n status: w.metadata?.status,\n })),\n )}`,\n );\n\n return availableWorkflows;\n }\n\n public async fetchWorkflowInfos(args: {\n definitionIds?: string[];\n pagination?: Pagination;\n filter?: Filter;\n }): Promise<WorkflowInfo[]> {\n this.logger.info(`fetchWorkflowInfos() called: ${this.dataIndexUrl}`);\n const { definitionIds, pagination, filter } = args;\n\n const definitionIdsCondition =\n definitionIds !== undefined && definitionIds.length > 0\n ? `id: {in: ${JSON.stringify(definitionIds)}}`\n : undefined;\n\n const filterCondition = filter\n ? buildFilterCondition(\n await this.initInputProcessDefinitionArgs(),\n 'ProcessDefinition',\n filter,\n )\n : undefined;\n\n let whereClause: string | undefined;\n if (definitionIdsCondition && filterCondition) {\n whereClause = `and: [{${definitionIdsCondition}}, {${filterCondition}}]`;\n } else if (definitionIdsCondition || filterCondition) {\n whereClause = definitionIdsCondition ?? filterCondition;\n } else {\n whereClause = undefined;\n }\n\n const graphQlQuery = buildGraphQlQuery({\n type: 'ProcessDefinitions',\n queryBody:\n 'id, name, version, type, endpoint, serviceUrl, source, metadata',\n whereClause,\n pagination,\n });\n this.logger.debug(`GraphQL query: ${graphQlQuery}`);\n const result = await this.client.query(graphQlQuery, {});\n this.logger.debug(\n `Get workflow definitions result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error fetching data index swf results',\n result,\n );\n\n return this.filterDeletedWorkflows(result.data.ProcessDefinitions);\n }\n\n public async fetchInstances(args: {\n definitionIds?: string[];\n pagination?: Pagination;\n filter?: Filter;\n }): Promise<ProcessInstance[]> {\n const { pagination, definitionIds, filter } = args;\n if (pagination) pagination.sortField ??= FETCH_PROCESS_INSTANCES_SORT_FIELD;\n\n const processIdNotNullCondition = 'processId: {isNull: false}';\n const definitionIdsCondition =\n definitionIds && definitionIds.length > 0\n ? `processId: {in: ${JSON.stringify(definitionIds)}}`\n : undefined;\n const type = 'ProcessInstance';\n const filterCondition = filter\n ? buildFilterCondition(\n await this.inspectInputArgument(type),\n type,\n filter,\n )\n : '';\n\n let whereClause = '';\n const conditions = [];\n\n if (processIdNotNullCondition) {\n conditions.push(`{${processIdNotNullCondition}}`);\n }\n\n if (definitionIdsCondition) {\n conditions.push(`{${definitionIdsCondition}}`);\n }\n\n if (filter) {\n conditions.push(`{${filterCondition}}`);\n }\n\n if (conditions.length === 0) {\n whereClause = processIdNotNullCondition;\n } else if (conditions.length === 1) {\n whereClause = conditions[0].slice(1, -1); // Remove the outer braces\n } else if (conditions.length > 1) {\n whereClause = `and: [${conditions.join(', ')}]`;\n }\n\n const graphQlQuery = buildGraphQlQuery({\n type: 'ProcessInstances',\n queryBody:\n 'id, processName, processId, state, start, end, nodes { id }, variables, executionSummary, parentProcessInstance {id, processName, businessKey}',\n whereClause,\n pagination,\n });\n\n this.logger.debug(`GraphQL query: ${graphQlQuery}`);\n\n const result = await this.client.query<{\n ProcessInstances: ProcessInstance[];\n }>(graphQlQuery, {});\n this.logger.debug(\n `Fetch process instances result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError('Error when fetching instances', result);\n\n const processInstancesSrc = result.data ? result.data.ProcessInstances : [];\n\n const processInstances = await Promise.all(\n processInstancesSrc.map(async instance => {\n return await this.getWorkflowDefinitionFromInstance(instance);\n }),\n );\n return processInstances;\n }\n\n public async fetchDefinitionIdsFromInstances(args: {\n targetEntity: string;\n }): Promise<string[]> {\n const { targetEntity } = args;\n\n const processIdNotNullCondition = 'processId: {isNull: false}';\n\n const type = 'ProcessInstance';\n const targetEntityFilter: NestedFilter = {\n field: 'variables',\n nested: {\n operator: 'EQ',\n field: 'targetEntity',\n value: targetEntity,\n },\n };\n\n const filterCondition = buildFilterCondition(\n await this.inspectInputArgument(type),\n type,\n targetEntityFilter,\n );\n\n const whereClause = `and: [{${processIdNotNullCondition}}, {${filterCondition}}]`;\n\n // Apply a limit to prevent memory exhaustion and network timeouts when entities\n // have thousands of process instances. Entities with more instances than this limit\n // may not see all their associated workflows.\n const pagination = {\n limit: 1000,\n offset: 0,\n };\n\n const graphQlQuery = buildGraphQlQuery({\n type: 'ProcessInstances',\n queryBody: 'processId',\n whereClause,\n pagination,\n });\n\n this.logger.debug(`GraphQL query: ${graphQlQuery}`);\n\n const result = await this.client.query<{\n ProcessInstances: ProcessInstance[];\n }>(graphQlQuery, {});\n this.logger.debug(\n `Fetch definition ids from instances history result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error when fetching definition ids from instances history',\n result,\n );\n\n const processInstancesSrc = result.data ? result.data.ProcessInstances : [];\n const distinctProcessIds = [\n ...new Set(processInstancesSrc.map(instance => instance.processId)),\n ]; // graphql doesn't support distinct so we need to use a set to get the distinct process ids\n return distinctProcessIds;\n }\n\n private async getWorkflowDefinitionFromInstance(instance: ProcessInstance) {\n const workflowInfo = await this.fetchWorkflowInfo(instance.processId);\n if (!workflowInfo?.source) {\n throw new Error(\n `Workflow defintion is required to fetch instance ${instance.id}`,\n );\n }\n if (workflowInfo) {\n instance.description = workflowInfo.description;\n }\n return instance;\n }\n\n public async fetchWorkflowSource(\n definitionId: string,\n ): Promise<string | undefined> {\n const graphQlQuery = `{ ProcessDefinitions ( where: {id: {equal: \"${definitionId}\" } } ) { id, source } }`;\n\n const result = await this.client.query(graphQlQuery, {});\n\n this.logger.debug(\n `Fetch workflow source result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error when fetching workflow source',\n result,\n );\n\n const processDefinitions = result.data.ProcessDefinitions as WorkflowInfo[];\n\n if (processDefinitions.length === 0) {\n this.logger.info(`No workflow source found for ${definitionId}`);\n return undefined;\n }\n\n return processDefinitions[0].source;\n }\n\n public async fetchInstancesByDefinitionId(args: {\n definitionId: string;\n limit: number;\n offset: number;\n targetEntity?: string;\n }): Promise<ProcessInstance[]> {\n const targetEntityWhereCondition = args.targetEntity\n ? `, variables: {targetEntity: {equal: \"${args.targetEntity}\" } }`\n : '';\n\n const graphQlQuery = `{ ProcessInstances( where: {processId: {equal: \"${args.definitionId}\" } ${targetEntityWhereCondition} }, orderBy: {start:DESC}, pagination: {limit: ${args.limit}, offset: ${args.offset}}) { id, processName, state, start, end } }`;\n\n const result = await this.client.query(graphQlQuery, {});\n\n this.logger.debug(\n `Fetch workflow instances result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error when fetching workflow instances',\n result,\n );\n\n return result.data.ProcessInstances;\n }\n\n public async fetchInstanceVariables(\n instanceId: string,\n ): Promise<object | undefined> {\n const graphQlQuery = `{ ProcessInstances (where: { id: {equal: \"${instanceId}\" } } ) { variables } }`;\n\n const result = await this.client.query(graphQlQuery, {});\n\n this.logger.debug(\n `Fetch process instance variables result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error when fetching process instance variables',\n result,\n );\n\n const processInstances = result.data.ProcessInstances as ProcessInstance[];\n\n if (processInstances.length === 0) {\n return undefined;\n }\n\n return parseWorkflowVariables(processInstances[0].variables as object);\n }\n\n public async fetchDefinitionIdByInstanceId(\n instanceId: string,\n ): Promise<string | undefined> {\n const graphQlQuery = `{ ProcessInstances (where: { id: {equal: \"${instanceId}\" } } ) { processId } }`;\n\n const result = await this.client.query(graphQlQuery, {});\n\n this.logger.debug(\n `Fetch process id from instance result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error when fetching process id from instance',\n result,\n );\n\n const processInstances = result.data.ProcessInstances as ProcessInstance[];\n\n if (processInstances.length === 0) {\n return undefined;\n }\n\n return processInstances[0].processId;\n }\n\n public async fetchInstance(\n instanceId: string,\n ): Promise<ProcessInstance | undefined> {\n const FindProcessInstanceQuery = gql`\n query FindProcessInstanceQuery($instanceId: String!) {\n ProcessInstances(where: { id: { equal: $instanceId } }) {\n id\n processName\n processId\n serviceUrl\n executionSummary\n state\n start\n end\n nodes {\n id\n nodeId\n definitionId\n type\n name\n enter\n exit\n errorMessage\n }\n variables\n parentProcessInstance {\n id\n processName\n businessKey\n }\n error {\n nodeDefinitionId\n nodeInstanceId\n message\n }\n }\n }\n `;\n\n const result = await this.client.query(FindProcessInstanceQuery, {\n instanceId,\n });\n\n this.logger.debug(\n `Fetch process instance result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error when fetching process instances',\n result,\n );\n\n const processInstances = result.data.ProcessInstances as ProcessInstance[];\n\n if (processInstances.length === 0) {\n return undefined;\n }\n\n const instance = this.removeNodes(processInstances[0]);\n\n const workflowInfo = await this.fetchWorkflowInfo(instance.processId);\n if (!workflowInfo?.source) {\n throw new Error(\n `Workflow definition is required to fetch instance ${instance.id}`,\n );\n }\n const workflowDefinitionSrc: WorkflowDefinition = fromWorkflowSource(\n workflowInfo.source,\n );\n if (workflowInfo) {\n instance.description = workflowDefinitionSrc.description;\n }\n return instance;\n }\n\n private handleGraphqlClientError(scenario: string, result: any) {\n if (!result?.error) {\n return;\n }\n\n this.logger.error(scenario, result);\n\n const networkError = result.error.networkError?.cause?.message;\n if (networkError) {\n const toThrow = new Error(`${result.error.message}. ${networkError}`);\n toThrow.name = 'Network Error';\n throw toThrow;\n }\n\n const graphQLErrors = result.error.graphQLErrors;\n if (\n result.data &&\n Array.isArray(graphQLErrors) &&\n graphQLErrors.length > 0\n ) {\n const graphQLError = graphQLErrors[0];\n if (\n graphQLError?.extensions?.classification === 'DataFetchingException'\n ) {\n // we have data (perhaps partial) and it is a data fetch error ==> log and ignore\n return;\n }\n }\n\n throw result.error;\n }\n\n private removeNodes(instance: ProcessInstance): ProcessInstance {\n const errorNodeId = instance.error?.nodeInstanceId;\n instance.nodes = instance.nodes.filter(node => {\n return !node.errorMessage || node.id === errorNodeId;\n });\n return instance;\n }\n}\n"],"names":["ErrorBuilder","Client","fetchExchange","buildFilterCondition","buildGraphQlQuery","FETCH_PROCESS_INSTANCES_SORT_FIELD","parseWorkflowVariables","gql","fromWorkflowSource"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DataIndexService.cjs.js","sources":["../../src/service/DataIndexService.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { LoggerService } from '@backstage/backend-plugin-api';\n\nimport { Client, fetchExchange, gql } from '@urql/core';\n\nimport {\n Filter,\n fromWorkflowSource,\n IntrospectionField,\n NestedFilter,\n parseWorkflowVariables,\n ProcessInstance,\n WorkflowDefinition,\n WorkflowInfo,\n} from '@red-hat-developer-hub/backstage-plugin-orchestrator-common';\n\nimport { ErrorBuilder } from '../helpers/errorBuilder';\nimport { buildFilterCondition } from '../helpers/filterBuilder';\nimport {\n buildGraphQlQuery,\n buildQueryParamVariable,\n} from '../helpers/queryBuilder';\nimport { Pagination } from '../types/pagination';\nimport { FETCH_PROCESS_INSTANCES_SORT_FIELD } from './constants';\n\nexport class DataIndexService {\n private readonly client: Client;\n public processDefinitionArguments: IntrospectionField[] = [];\n public processInstanceArguments: IntrospectionField[] = [];\n\n public constructor(\n private readonly dataIndexUrl: string,\n private readonly logger: LoggerService,\n ) {\n if (!dataIndexUrl.length) {\n throw ErrorBuilder.GET_NO_DATA_INDEX_URL_ERR();\n }\n\n this.client = this.getNewGraphQLClient();\n }\n\n private getNewGraphQLClient(): Client {\n const diURL = `${this.dataIndexUrl}/graphql`;\n return new Client({\n url: diURL,\n exchanges: [fetchExchange],\n });\n }\n\n public async initInputProcessDefinitionArgs(): Promise<IntrospectionField[]> {\n if (this.processDefinitionArguments.length === 0) {\n this.processDefinitionArguments =\n await this.inspectInputArgument('ProcessDefinition');\n }\n return this.processDefinitionArguments; // For testing purposes\n }\n\n public graphQLArgumentQuery(type: string): string {\n return `query ${type}Argument {\n __type(name: \"${type}Argument\") {\n kind\n name\n inputFields {\n name\n type {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n }\n }\n }\n }\n }\n }\n }`;\n }\n\n public async inspectInputArgument(\n type: string,\n ): Promise<IntrospectionField[]> {\n const result = await this.client.query(this.graphQLArgumentQuery(type), {});\n\n this.logger.debug(`Introspection query result: ${JSON.stringify(result)}`);\n\n this.handleGraphqlClientError(\n 'Error executing introspection query',\n result,\n );\n\n const pairs: IntrospectionField[] = [];\n if (result?.data?.__type?.inputFields) {\n for (const field of result.data.__type.inputFields) {\n if (\n field.name !== 'and' &&\n field.name !== 'or' &&\n field.name !== 'not'\n ) {\n pairs.push({\n name: field.name,\n type: {\n name: field.type.name,\n kind: field.type.kind,\n ofType: field.type.ofType,\n },\n });\n }\n }\n }\n return pairs;\n }\n\n public async fetchWorkflowInfo(\n definitionId: string,\n ): Promise<WorkflowInfo | undefined> {\n const graphQlQuery = gql`\n query FindProcessInstanceQuery($definitionId: String!) {\n ProcessDefinitions(where: { id: { equal: $definitionId } }) {\n id\n name\n version\n type\n endpoint\n serviceUrl\n source\n }\n }\n `;\n\n const result = await this.client.query(graphQlQuery, {\n definitionId,\n });\n\n this.logger.debug(\n `Get workflow definition result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError('Error fetching workflow definition', result);\n\n const processDefinitions = result.data.ProcessDefinitions as WorkflowInfo[];\n\n if (processDefinitions.length === 0) {\n this.logger.info(`No workflow definition found for ${definitionId}`);\n return undefined;\n }\n\n return processDefinitions[0];\n }\n\n public async fetchWorkflowServiceUrls(): Promise<Record<string, string>> {\n const graphQlQuery = `{ ProcessDefinitions { id, serviceUrl } }`;\n\n const result = await this.client.query(graphQlQuery, {});\n\n this.logger.debug(\n `Get workflow service urls result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error fetching workflow service urls',\n result,\n );\n\n const processDefinitions = result.data.ProcessDefinitions as WorkflowInfo[];\n return processDefinitions\n .filter(definition => definition.serviceUrl)\n .map(definition => ({ [definition.id]: definition.serviceUrl! }))\n .reduce((acc, curr) => ({ ...acc, ...curr }), {});\n }\n\n private filterDeletedWorkflows(workflows: WorkflowInfo[]): WorkflowInfo[] {\n // filter deleted workflows, that were deleted via deleting SonataFlow CR, operator marks them as unavailable\n // Note this is different then the isAvailable status in WorkflowOverviewDTO, that is used to mark workflows that are not available on the service for unexpected reasons\n\n const availableWorkflows: WorkflowInfo[] = [];\n const unavailableWorkflows: WorkflowInfo[] = [];\n\n workflows.forEach(workflow => {\n const isUnavailable = workflow.metadata?.status === 'unavailable';\n if (isUnavailable) {\n unavailableWorkflows.push(workflow);\n } else {\n availableWorkflows.push(workflow);\n }\n });\n\n this.logger.debug(\n `filtered deleted workflows when fetching workflow infos: ${JSON.stringify(\n unavailableWorkflows.map(w => ({\n id: w.id,\n name: w.name,\n status: w.metadata?.status,\n })),\n )}`,\n );\n\n return availableWorkflows;\n }\n\n public async fetchWorkflowInfos(args: {\n definitionIds?: string[];\n pagination?: Pagination;\n filter?: Filter;\n }): Promise<WorkflowInfo[]> {\n this.logger.info(`fetchWorkflowInfos() called: ${this.dataIndexUrl}`);\n const { definitionIds, pagination, filter } = args;\n\n const definitionIdsCondition =\n definitionIds !== undefined && definitionIds.length > 0\n ? `id: {in: ${JSON.stringify(definitionIds)}}`\n : undefined;\n\n const filterCondition = filter\n ? buildFilterCondition(\n await this.initInputProcessDefinitionArgs(),\n 'ProcessDefinition',\n filter,\n )\n : undefined;\n\n let whereClause: string | undefined;\n if (definitionIdsCondition && filterCondition) {\n whereClause = `and: [{${definitionIdsCondition}}, {${filterCondition?.clause}}]`;\n } else if (definitionIdsCondition || filterCondition) {\n whereClause = definitionIdsCondition ?? filterCondition?.clause;\n } else {\n whereClause = undefined;\n }\n\n const graphQlQuery = buildGraphQlQuery({\n type: 'ProcessDefinitions',\n queryBody:\n 'id, name, version, type, endpoint, serviceUrl, source, metadata',\n whereClause,\n pagination,\n filterCondition: filterCondition,\n });\n this.logger.debug(`GraphQL query: ${graphQlQuery}`);\n\n const paramVariables = buildQueryParamVariable(pagination, filterCondition);\n\n this.logger.debug(`GraphQL query params:`, paramVariables);\n\n const result = await this.client.query(graphQlQuery, paramVariables);\n this.logger.debug(\n `Get workflow definitions result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error fetching data index swf results',\n result,\n );\n\n return this.filterDeletedWorkflows(result.data.ProcessDefinitions);\n }\n\n public async fetchInstances(args: {\n definitionIds?: string[];\n pagination?: Pagination;\n filter?: Filter;\n }): Promise<ProcessInstance[]> {\n const { pagination, definitionIds, filter } = args;\n if (pagination) pagination.sortField ??= FETCH_PROCESS_INSTANCES_SORT_FIELD;\n\n const processIdNotNullCondition = 'processId: {isNull: false}';\n const definitionIdsCondition =\n definitionIds && definitionIds.length > 0\n ? `processId: {in: ${JSON.stringify(definitionIds)}}`\n : undefined;\n const type = 'ProcessInstance';\n const filterCondition = filter\n ? buildFilterCondition(\n await this.inspectInputArgument(type),\n type,\n filter,\n )\n : undefined;\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 (filterCondition) {\n conditions.push(`{${filterCondition?.clause}}`);\n }\n\n if (conditions.length === 0) {\n whereClause = processIdNotNullCondition;\n } else if (conditions.length === 1) {\n whereClause = conditions[0].slice(1, -1); // Remove the outer braces\n } else if (conditions.length > 1) {\n whereClause = `and: [${conditions.join(', ')}]`;\n }\n\n const graphQlQuery = buildGraphQlQuery({\n type: 'ProcessInstances',\n queryBody:\n 'id, processName, processId, state, start, end, nodes { id }, variables, executionSummary, parentProcessInstance {id, processName, businessKey}',\n whereClause,\n pagination,\n filterCondition: filterCondition,\n });\n\n this.logger.debug(`GraphQL query: ${graphQlQuery}`);\n\n const paramVariables = buildQueryParamVariable(pagination, filterCondition);\n\n this.logger.debug(`GraphQL query params:`, paramVariables);\n\n const result = await this.client.query<{\n ProcessInstances: ProcessInstance[];\n }>(graphQlQuery, paramVariables);\n this.logger.debug(\n `Fetch process instances result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError('Error when fetching instances', result);\n\n const processInstancesSrc = result.data ? result.data.ProcessInstances : [];\n\n const processInstances = await Promise.all(\n processInstancesSrc.map(async instance => {\n return await this.getWorkflowDefinitionFromInstance(instance);\n }),\n );\n return processInstances;\n }\n\n public async fetchDefinitionIdsFromInstances(args: {\n targetEntity: string;\n }): Promise<string[]> {\n const { targetEntity } = args;\n\n const processIdNotNullCondition = 'processId: {isNull: false}';\n\n const type = 'ProcessInstance';\n const targetEntityFilter: NestedFilter = {\n field: 'variables',\n nested: {\n operator: 'EQ',\n field: 'targetEntity',\n value: targetEntity,\n },\n };\n\n const filterCondition = buildFilterCondition(\n await this.inspectInputArgument(type),\n type,\n targetEntityFilter,\n );\n\n const whereClause = `and: [{${processIdNotNullCondition}}, {${filterCondition.clause}}]`;\n\n // Apply a limit to prevent memory exhaustion and network timeouts when entities\n // have thousands of process instances. Entities with more instances than this limit\n // may not see all their associated workflows.\n const pagination = {\n limit: 1000,\n offset: 0,\n };\n\n const graphQlQuery = buildGraphQlQuery({\n type: 'ProcessInstances',\n queryBody: 'processId',\n whereClause,\n pagination,\n filterCondition,\n });\n\n this.logger.debug(`GraphQL query: ${graphQlQuery}`);\n\n const paramVariables = buildQueryParamVariable(pagination, filterCondition);\n\n this.logger.debug(`GraphQL query params:`, paramVariables);\n\n const result = await this.client.query<{\n ProcessInstances: ProcessInstance[];\n }>(graphQlQuery, paramVariables);\n this.logger.debug(\n `Fetch definition ids from instances history result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error when fetching definition ids from instances history',\n result,\n );\n\n const processInstancesSrc = result.data ? result.data.ProcessInstances : [];\n const distinctProcessIds = [\n ...new Set(processInstancesSrc.map(instance => instance.processId)),\n ]; // graphql doesn't support distinct so we need to use a set to get the distinct process ids\n return distinctProcessIds;\n }\n\n private async getWorkflowDefinitionFromInstance(instance: ProcessInstance) {\n const workflowInfo = await this.fetchWorkflowInfo(instance.processId);\n if (!workflowInfo?.source) {\n throw new Error(\n `Workflow defintion is required to fetch instance ${instance.id}`,\n );\n }\n if (workflowInfo) {\n instance.description = workflowInfo.description;\n }\n return instance;\n }\n\n public async fetchWorkflowSource(\n definitionId: string,\n ): Promise<string | undefined> {\n const graphQlQuery = gql`\n query FindProcessInstanceQuery($definitionId: String!) {\n ProcessDefinitions(where: { id: { equal: $definitionId } }) {\n id\n source\n }\n }\n `;\n\n const result = await this.client.query(graphQlQuery, {\n definitionId,\n });\n\n this.logger.debug(\n `Fetch workflow source result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error when fetching workflow source',\n result,\n );\n\n const processDefinitions = result.data.ProcessDefinitions as WorkflowInfo[];\n\n if (processDefinitions.length === 0) {\n this.logger.info(`No workflow source found for ${definitionId}`);\n return undefined;\n }\n\n return processDefinitions[0].source;\n }\n\n public async fetchInstancesByDefinitionId(args: {\n definitionId: string;\n limit: number;\n offset: number;\n targetEntity?: string;\n }): Promise<ProcessInstance[]> {\n const targetEntityWhereCondition = args.targetEntity\n ? `, variables: {targetEntity: {equal: $targetEntity } }`\n : '';\n\n const graphQlQuery = gql`\n query FindProcessInstanceQuery($definitionId: String!, $limit: Int!, $offset: Int! ${args.targetEntity ? `, $targetEntity: String` : ''}) {\n ProcessInstances(\n where: {processId: {equal: $definitionId } ${targetEntityWhereCondition} },\n orderBy: {start:DESC},\n pagination: {limit: $limit, offset: $offset}\n ) { id, processName, state, start, end }\n }\n `;\n\n const result = await this.client.query(\n graphQlQuery,\n args.targetEntity\n ? {\n definitionId: args.definitionId,\n limit: args.limit,\n offset: args.offset,\n targetEntity: args.targetEntity,\n }\n : {\n definitionId: args.definitionId,\n limit: args.limit,\n offset: args.offset,\n },\n );\n\n this.logger.debug(\n `Fetch workflow instances result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error when fetching workflow instances',\n result,\n );\n\n return result.data.ProcessInstances;\n }\n\n public async fetchInstanceVariables(\n instanceId: string,\n ): Promise<object | undefined> {\n const graphQlQuery = gql`\n query FindProcessInstanceQuery($instanceId: String!) {\n ProcessInstances(where: { id: { equal: $instanceId } }) {\n variables\n }\n }\n `;\n\n const result = await this.client.query(graphQlQuery, {\n instanceId,\n });\n\n this.logger.debug(\n `Fetch process instance variables result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error when fetching process instance variables',\n result,\n );\n\n const processInstances = result.data.ProcessInstances as ProcessInstance[];\n\n if (processInstances.length === 0) {\n return undefined;\n }\n\n return parseWorkflowVariables(processInstances[0].variables as object);\n }\n\n public async fetchDefinitionIdByInstanceId(\n instanceId: string,\n ): Promise<string | undefined> {\n const graphQlQuery = gql`\n query FindProcessInstanceQuery($instanceId: String!) {\n ProcessInstances(where: { id: { equal: $instanceId } }) {\n processId\n }\n }\n `;\n\n const result = await this.client.query(graphQlQuery, {\n instanceId,\n });\n\n this.logger.debug(\n `Fetch process id from instance result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error when fetching process id from instance',\n result,\n );\n\n const processInstances = result.data.ProcessInstances as ProcessInstance[];\n\n if (processInstances.length === 0) {\n return undefined;\n }\n\n return processInstances[0].processId;\n }\n\n public async fetchInstance(\n instanceId: string,\n ): Promise<ProcessInstance | undefined> {\n const FindProcessInstanceQuery = gql`\n query FindProcessInstanceQuery($instanceId: String!) {\n ProcessInstances(where: { id: { equal: $instanceId } }) {\n id\n processName\n processId\n serviceUrl\n executionSummary\n state\n start\n end\n nodes {\n id\n nodeId\n definitionId\n type\n name\n enter\n exit\n errorMessage\n }\n variables\n parentProcessInstance {\n id\n processName\n businessKey\n }\n error {\n nodeDefinitionId\n nodeInstanceId\n message\n }\n }\n }\n `;\n\n const result = await this.client.query(FindProcessInstanceQuery, {\n instanceId,\n });\n\n this.logger.debug(\n `Fetch process instance result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error when fetching process instances',\n result,\n );\n\n const processInstances = result.data.ProcessInstances as ProcessInstance[];\n\n if (processInstances.length === 0) {\n return undefined;\n }\n\n const instance = this.removeNodes(processInstances[0]);\n\n const workflowInfo = await this.fetchWorkflowInfo(instance.processId);\n if (!workflowInfo?.source) {\n throw new Error(\n `Workflow definition is required to fetch instance ${instance.id}`,\n );\n }\n const workflowDefinitionSrc: WorkflowDefinition = fromWorkflowSource(\n workflowInfo.source,\n );\n if (workflowInfo) {\n instance.description = workflowDefinitionSrc.description;\n }\n return instance;\n }\n\n private handleGraphqlClientError(scenario: string, result: any) {\n if (!result?.error) {\n return;\n }\n\n this.logger.error(scenario, result);\n\n const networkError = result.error.networkError?.cause?.message;\n if (networkError) {\n const toThrow = new Error(`${result.error.message}. ${networkError}`);\n toThrow.name = 'Network Error';\n throw toThrow;\n }\n\n const graphQLErrors = result.error.graphQLErrors;\n if (\n result.data &&\n Array.isArray(graphQLErrors) &&\n graphQLErrors.length > 0\n ) {\n const graphQLError = graphQLErrors[0];\n if (\n graphQLError?.extensions?.classification === 'DataFetchingException'\n ) {\n // we have data (perhaps partial) and it is a data fetch error ==> log and ignore\n return;\n }\n }\n\n throw result.error;\n }\n\n private removeNodes(instance: ProcessInstance): ProcessInstance {\n const errorNodeId = instance.error?.nodeInstanceId;\n instance.nodes = instance.nodes.filter(node => {\n return !node.errorMessage || node.id === errorNodeId;\n });\n return instance;\n }\n}\n"],"names":["ErrorBuilder","Client","fetchExchange","gql","buildFilterCondition","buildGraphQlQuery","buildQueryParamVariable","FETCH_PROCESS_INSTANCES_SORT_FIELD","parseWorkflowVariables","fromWorkflowSource"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pagination.cjs.js","sources":["../../src/types/pagination.ts"],"sourcesContent":["/*\n * Copyright
|
|
1
|
+
{"version":3,"file":"pagination.cjs.js","sources":["../../src/types/pagination.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Request } from 'express-serve-static-core';\n\nimport { PaginationInfoDTO } from '@red-hat-developer-hub/backstage-plugin-orchestrator-common';\n\nexport interface Pagination {\n offset?: number;\n limit?: number;\n order?: string;\n sortField?: string;\n}\n\nexport interface PaginationQueryVariable {\n offset?: number;\n limit?: number;\n}\n\nexport function buildPagination(req: Request): Pagination {\n const pagination: Pagination = {\n limit: undefined,\n offset: undefined,\n order: undefined,\n sortField: undefined,\n };\n\n if (!req.body?.paginationInfo) {\n return pagination;\n }\n const { offset, pageSize, orderBy, orderDirection } = req.body\n .paginationInfo as PaginationInfoDTO;\n\n if (!isNaN(Number(offset))) {\n pagination.offset = Number(offset);\n }\n\n if (!isNaN(Number(pageSize))) {\n pagination.limit = Number(pageSize);\n }\n\n if (orderBy) {\n pagination.sortField = String(orderBy);\n }\n\n if (orderDirection) {\n pagination.order = String(orderDirection).toUpperCase();\n }\n return pagination;\n}\n\nexport function buildPaginationTmp(\n paginationInfo?: PaginationInfoDTO,\n): Pagination {\n const pagination: Pagination = {\n limit: undefined,\n offset: undefined,\n order: undefined,\n sortField: undefined,\n };\n\n if (!paginationInfo) {\n return pagination;\n }\n const { offset, pageSize, orderBy, orderDirection } = paginationInfo;\n\n if (!isNaN(Number(offset))) {\n pagination.offset = Number(offset);\n }\n\n if (!isNaN(Number(pageSize))) {\n pagination.limit = Number(pageSize);\n }\n\n if (orderBy) {\n pagination.sortField = String(orderBy);\n }\n\n if (orderDirection) {\n pagination.order = String(orderDirection).toUpperCase();\n }\n return pagination;\n}\n"],"names":[],"mappings":";;AAgCO,SAAS,gBAAgB,GAAA,EAA0B;AACxD,EAAA,MAAM,UAAA,GAAyB;AAAA,IAC7B,KAAA,EAAO,MAAA;AAAA,IACP,MAAA,EAAQ,MAAA;AAAA,IACR,KAAA,EAAO,MAAA;AAAA,IACP,SAAA,EAAW;AAAA,GACb;AAEA,EAAA,IAAI,CAAC,GAAA,CAAI,IAAA,EAAM,cAAA,EAAgB;AAC7B,IAAA,OAAO,UAAA;AAAA,EACT;AACA,EAAA,MAAM,EAAE,MAAA,EAAQ,QAAA,EAAU,SAAS,cAAA,EAAe,GAAI,IAAI,IAAA,CACvD,cAAA;AAEH,EAAA,IAAI,CAAC,KAAA,CAAM,MAAA,CAAO,MAAM,CAAC,CAAA,EAAG;AAC1B,IAAA,UAAA,CAAW,MAAA,GAAS,OAAO,MAAM,CAAA;AAAA,EACnC;AAEA,EAAA,IAAI,CAAC,KAAA,CAAM,MAAA,CAAO,QAAQ,CAAC,CAAA,EAAG;AAC5B,IAAA,UAAA,CAAW,KAAA,GAAQ,OAAO,QAAQ,CAAA;AAAA,EACpC;AAEA,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,UAAA,CAAW,SAAA,GAAY,OAAO,OAAO,CAAA;AAAA,EACvC;AAEA,EAAA,IAAI,cAAA,EAAgB;AAClB,IAAA,UAAA,CAAW,KAAA,GAAQ,MAAA,CAAO,cAAc,CAAA,CAAE,WAAA,EAAY;AAAA,EACxD;AACA,EAAA,OAAO,UAAA;AACT;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@red-hat-developer-hub/backstage-plugin-orchestrator-backend",
|
|
3
|
-
"version": "8.3.
|
|
3
|
+
"version": "8.3.1",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"main": "./dist/index.cjs.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -85,7 +85,7 @@
|
|
|
85
85
|
"@backstage/plugin-scaffolder-backend": "^2.2.0",
|
|
86
86
|
"@backstage/plugin-scaffolder-node": "^0.11.0",
|
|
87
87
|
"@red-hat-developer-hub/backstage-plugin-orchestrator-common": "^3.1.0",
|
|
88
|
-
"@urql/core": "^
|
|
88
|
+
"@urql/core": "^6.0.1",
|
|
89
89
|
"ajv-formats": "^2.1.1",
|
|
90
90
|
"cloudevents": "^8.0.0",
|
|
91
91
|
"express": "^4.21.2",
|