@red-hat-developer-hub/backstage-plugin-orchestrator-backend 6.0.2 → 6.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,29 @@
1
1
  ### Dependencies
2
2
 
3
+ ## 6.1.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 53f3ffb: implemented authorization widget for enabling specifying the required auth providers in the schema so the UI can pick it up from there and forward to workflow execution
8
+
9
+ ### Patch Changes
10
+
11
+ - d68d693: Updated dependency `@types/express` to `4.17.23`.
12
+ - Updated dependencies [53f3ffb]
13
+ - @red-hat-developer-hub/backstage-plugin-orchestrator-common@1.28.0
14
+
15
+ ## 6.0.3
16
+
17
+ ### Patch Changes
18
+
19
+ - 4ecd9f0: Limit access to workflow instances to initiators only
20
+ - 9bc8af0: remove failed nodes from previous executions/retriggers
21
+ - 3b571b3: Updated dependency `@janus-idp/cli` to `3.6.1`.
22
+ - 7509a73: skip cache availability check in selected functions
23
+ - Updated dependencies [4ecd9f0]
24
+ - Updated dependencies [9bc8af0]
25
+ - @red-hat-developer-hub/backstage-plugin-orchestrator-common@1.27.3
26
+
3
27
  ## 6.0.2
4
28
 
5
29
  ### Patch Changes
@@ -18,7 +18,8 @@ const orchestratorPlugin = backendPluginApi.createBackendPlugin({
18
18
  permissions: backendPluginApi.coreServices.permissions,
19
19
  scheduler: backendPluginApi.coreServices.scheduler,
20
20
  httpAuth: backendPluginApi.coreServices.httpAuth,
21
- http: backendPluginApi.coreServices.httpRouter
21
+ http: backendPluginApi.coreServices.httpRouter,
22
+ userInfo: backendPluginApi.coreServices.userInfo
22
23
  },
23
24
  async init(props) {
24
25
  const { http } = props;
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.cjs.js","sources":["../src/plugin.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 coreServices,\n createBackendPlugin,\n} from '@backstage/backend-plugin-api';\nimport { catalogServiceRef } from '@backstage/plugin-catalog-node/alpha';\n\nimport { createRouter } from './routerWrapper';\n\n/**\n * @public\n * Orchestrator Backend Plugin\n */\nexport const orchestratorPlugin = createBackendPlugin({\n pluginId: 'orchestrator',\n register(env) {\n env.registerInit({\n deps: {\n logger: coreServices.logger,\n auditor: coreServices.auditor,\n config: coreServices.rootConfig,\n discovery: coreServices.discovery,\n catalogApi: catalogServiceRef,\n urlReader: coreServices.urlReader,\n permissions: coreServices.permissions,\n scheduler: coreServices.scheduler,\n httpAuth: coreServices.httpAuth,\n http: coreServices.httpRouter,\n },\n async init(props) {\n const { http } = props;\n const router = await createRouter(props);\n http.use(router);\n http.addAuthPolicy({\n path: '/health',\n allow: 'unauthenticated',\n });\n http.addAuthPolicy({\n path: '/static',\n allow: 'unauthenticated',\n });\n http.addAuthPolicy({\n path: '/docs',\n allow: 'unauthenticated',\n });\n },\n });\n },\n});\n"],"names":["createBackendPlugin","coreServices","catalogServiceRef","createRouter"],"mappings":";;;;;;AA4BO,MAAM,qBAAqBA,oCAAoB,CAAA;AAAA,EACpD,QAAU,EAAA,cAAA;AAAA,EACV,SAAS,GAAK,EAAA;AACZ,IAAA,GAAA,CAAI,YAAa,CAAA;AAAA,MACf,IAAM,EAAA;AAAA,QACJ,QAAQC,6BAAa,CAAA,MAAA;AAAA,QACrB,SAASA,6BAAa,CAAA,OAAA;AAAA,QACtB,QAAQA,6BAAa,CAAA,UAAA;AAAA,QACrB,WAAWA,6BAAa,CAAA,SAAA;AAAA,QACxB,UAAY,EAAAC,uBAAA;AAAA,QACZ,WAAWD,6BAAa,CAAA,SAAA;AAAA,QACxB,aAAaA,6BAAa,CAAA,WAAA;AAAA,QAC1B,WAAWA,6BAAa,CAAA,SAAA;AAAA,QACxB,UAAUA,6BAAa,CAAA,QAAA;AAAA,QACvB,MAAMA,6BAAa,CAAA;AAAA,OACrB;AAAA,MACA,MAAM,KAAK,KAAO,EAAA;AAChB,QAAM,MAAA,EAAE,MAAS,GAAA,KAAA;AACjB,QAAM,MAAA,MAAA,GAAS,MAAME,kBAAA,CAAa,KAAK,CAAA;AACvC,QAAA,IAAA,CAAK,IAAI,MAAM,CAAA;AACf,QAAA,IAAA,CAAK,aAAc,CAAA;AAAA,UACjB,IAAM,EAAA,SAAA;AAAA,UACN,KAAO,EAAA;AAAA,SACR,CAAA;AACD,QAAA,IAAA,CAAK,aAAc,CAAA;AAAA,UACjB,IAAM,EAAA,SAAA;AAAA,UACN,KAAO,EAAA;AAAA,SACR,CAAA;AACD,QAAA,IAAA,CAAK,aAAc,CAAA;AAAA,UACjB,IAAM,EAAA,OAAA;AAAA,UACN,KAAO,EAAA;AAAA,SACR,CAAA;AAAA;AACH,KACD,CAAA;AAAA;AAEL,CAAC;;;;"}
1
+ {"version":3,"file":"plugin.cjs.js","sources":["../src/plugin.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 coreServices,\n createBackendPlugin,\n} from '@backstage/backend-plugin-api';\nimport { catalogServiceRef } from '@backstage/plugin-catalog-node/alpha';\n\nimport { createRouter } from './routerWrapper';\n\n/**\n * @public\n * Orchestrator Backend Plugin\n */\nexport const orchestratorPlugin = createBackendPlugin({\n pluginId: 'orchestrator',\n register(env) {\n env.registerInit({\n deps: {\n logger: coreServices.logger,\n auditor: coreServices.auditor,\n config: coreServices.rootConfig,\n discovery: coreServices.discovery,\n catalogApi: catalogServiceRef,\n urlReader: coreServices.urlReader,\n permissions: coreServices.permissions,\n scheduler: coreServices.scheduler,\n httpAuth: coreServices.httpAuth,\n http: coreServices.httpRouter,\n userInfo: coreServices.userInfo,\n },\n async init(props) {\n const { http } = props;\n const router = await createRouter(props);\n http.use(router);\n http.addAuthPolicy({\n path: '/health',\n allow: 'unauthenticated',\n });\n http.addAuthPolicy({\n path: '/static',\n allow: 'unauthenticated',\n });\n http.addAuthPolicy({\n path: '/docs',\n allow: 'unauthenticated',\n });\n },\n });\n },\n});\n"],"names":["createBackendPlugin","coreServices","catalogServiceRef","createRouter"],"mappings":";;;;;;AA4BO,MAAM,qBAAqBA,oCAAoB,CAAA;AAAA,EACpD,QAAU,EAAA,cAAA;AAAA,EACV,SAAS,GAAK,EAAA;AACZ,IAAA,GAAA,CAAI,YAAa,CAAA;AAAA,MACf,IAAM,EAAA;AAAA,QACJ,QAAQC,6BAAa,CAAA,MAAA;AAAA,QACrB,SAASA,6BAAa,CAAA,OAAA;AAAA,QACtB,QAAQA,6BAAa,CAAA,UAAA;AAAA,QACrB,WAAWA,6BAAa,CAAA,SAAA;AAAA,QACxB,UAAY,EAAAC,uBAAA;AAAA,QACZ,WAAWD,6BAAa,CAAA,SAAA;AAAA,QACxB,aAAaA,6BAAa,CAAA,WAAA;AAAA,QAC1B,WAAWA,6BAAa,CAAA,SAAA;AAAA,QACxB,UAAUA,6BAAa,CAAA,QAAA;AAAA,QACvB,MAAMA,6BAAa,CAAA,UAAA;AAAA,QACnB,UAAUA,6BAAa,CAAA;AAAA,OACzB;AAAA,MACA,MAAM,KAAK,KAAO,EAAA;AAChB,QAAM,MAAA,EAAE,MAAS,GAAA,KAAA;AACjB,QAAM,MAAA,MAAA,GAAS,MAAME,kBAAA,CAAa,KAAK,CAAA;AACvC,QAAA,IAAA,CAAK,IAAI,MAAM,CAAA;AACf,QAAA,IAAA,CAAK,aAAc,CAAA;AAAA,UACjB,IAAM,EAAA,SAAA;AAAA,UACN,KAAO,EAAA;AAAA,SACR,CAAA;AACD,QAAA,IAAA,CAAK,aAAc,CAAA;AAAA,UACjB,IAAM,EAAA,SAAA;AAAA,UACN,KAAO,EAAA;AAAA,SACR,CAAA;AACD,QAAA,IAAA,CAAK,aAAc,CAAA;AAAA,UACjB,IAAM,EAAA,OAAA;AAAA,UACN,KAAO,EAAA;AAAA,SACR,CAAA;AAAA;AACH,KACD,CAAA;AAAA;AAEL,CAAC;;;;"}
@@ -23,7 +23,8 @@ async function createRouter(args) {
23
23
  urlReader: args.urlReader,
24
24
  scheduler: args.scheduler,
25
25
  permissions: args.permissions,
26
- httpAuth: args.httpAuth
26
+ httpAuth: args.httpAuth,
27
+ userInfo: args.userInfo
27
28
  });
28
29
  }
29
30
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../../src/routerWrapper/index.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 type {\n AuditorService,\n DiscoveryService,\n HttpAuthService,\n LoggerService,\n PermissionsService,\n SchedulerService,\n UrlReaderService,\n} from '@backstage/backend-plugin-api';\nimport type { CatalogApi } from '@backstage/catalog-client';\nimport type { Config } from '@backstage/config';\n\nimport express from 'express';\n\nimport { DevModeService } from '../service/DevModeService';\nimport { createBackendRouter } from '../service/router';\n\nexport interface RouterOptions {\n config: Config;\n logger: LoggerService;\n auditor: AuditorService;\n discovery: DiscoveryService;\n catalogApi: CatalogApi;\n urlReader: UrlReaderService;\n scheduler: SchedulerService;\n permissions: PermissionsService;\n httpAuth: HttpAuthService;\n}\n\nexport async function createRouter(\n args: RouterOptions,\n): Promise<express.Router> {\n const autoStartDevMode =\n args.config.getOptionalBoolean(\n 'orchestrator.sonataFlowService.autoStart',\n ) ?? false;\n\n if (autoStartDevMode) {\n const devModeService = new DevModeService(args.config, args.logger);\n\n const isSonataFlowUp = await devModeService.launchDevMode();\n\n if (!isSonataFlowUp) {\n args.logger.error('SonataFlow is not up. Check your configuration.');\n }\n }\n\n return await createBackendRouter({\n config: args.config,\n logger: args.logger,\n auditor: args.auditor,\n discovery: args.discovery,\n catalogApi: args.catalogApi,\n urlReader: args.urlReader,\n scheduler: args.scheduler,\n permissions: args.permissions,\n httpAuth: args.httpAuth,\n });\n}\n"],"names":["DevModeService","createBackendRouter"],"mappings":";;;;;AA6CA,eAAsB,aACpB,IACyB,EAAA;AACzB,EAAM,MAAA,gBAAA,GACJ,KAAK,MAAO,CAAA,kBAAA;AAAA,IACV;AAAA,GACG,IAAA,KAAA;AAEP,EAAA,IAAI,gBAAkB,EAAA;AACpB,IAAA,MAAM,iBAAiB,IAAIA,6BAAA,CAAe,IAAK,CAAA,MAAA,EAAQ,KAAK,MAAM,CAAA;AAElE,IAAM,MAAA,cAAA,GAAiB,MAAM,cAAA,CAAe,aAAc,EAAA;AAE1D,IAAA,IAAI,CAAC,cAAgB,EAAA;AACnB,MAAK,IAAA,CAAA,MAAA,CAAO,MAAM,iDAAiD,CAAA;AAAA;AACrE;AAGF,EAAA,OAAO,MAAMC,0BAAoB,CAAA;AAAA,IAC/B,QAAQ,IAAK,CAAA,MAAA;AAAA,IACb,QAAQ,IAAK,CAAA,MAAA;AAAA,IACb,SAAS,IAAK,CAAA,OAAA;AAAA,IACd,WAAW,IAAK,CAAA,SAAA;AAAA,IAChB,YAAY,IAAK,CAAA,UAAA;AAAA,IACjB,WAAW,IAAK,CAAA,SAAA;AAAA,IAChB,WAAW,IAAK,CAAA,SAAA;AAAA,IAChB,aAAa,IAAK,CAAA,WAAA;AAAA,IAClB,UAAU,IAAK,CAAA;AAAA,GAChB,CAAA;AACH;;;;"}
1
+ {"version":3,"file":"index.cjs.js","sources":["../../src/routerWrapper/index.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 type {\n AuditorService,\n DiscoveryService,\n HttpAuthService,\n LoggerService,\n PermissionsService,\n SchedulerService,\n UrlReaderService,\n UserInfoService,\n} from '@backstage/backend-plugin-api';\nimport type { CatalogApi } from '@backstage/catalog-client';\nimport type { Config } from '@backstage/config';\n\nimport express from 'express';\n\nimport { DevModeService } from '../service/DevModeService';\nimport { createBackendRouter } from '../service/router';\n\nexport interface RouterOptions {\n config: Config;\n logger: LoggerService;\n auditor: AuditorService;\n discovery: DiscoveryService;\n catalogApi: CatalogApi;\n urlReader: UrlReaderService;\n scheduler: SchedulerService;\n permissions: PermissionsService;\n httpAuth: HttpAuthService;\n userInfo: UserInfoService;\n}\n\nexport async function createRouter(\n args: RouterOptions,\n): Promise<express.Router> {\n const autoStartDevMode =\n args.config.getOptionalBoolean(\n 'orchestrator.sonataFlowService.autoStart',\n ) ?? false;\n\n if (autoStartDevMode) {\n const devModeService = new DevModeService(args.config, args.logger);\n\n const isSonataFlowUp = await devModeService.launchDevMode();\n\n if (!isSonataFlowUp) {\n args.logger.error('SonataFlow is not up. Check your configuration.');\n }\n }\n\n return await createBackendRouter({\n config: args.config,\n logger: args.logger,\n auditor: args.auditor,\n discovery: args.discovery,\n catalogApi: args.catalogApi,\n urlReader: args.urlReader,\n scheduler: args.scheduler,\n permissions: args.permissions,\n httpAuth: args.httpAuth,\n userInfo: args.userInfo,\n });\n}\n"],"names":["DevModeService","createBackendRouter"],"mappings":";;;;;AA+CA,eAAsB,aACpB,IACyB,EAAA;AACzB,EAAM,MAAA,gBAAA,GACJ,KAAK,MAAO,CAAA,kBAAA;AAAA,IACV;AAAA,GACG,IAAA,KAAA;AAEP,EAAA,IAAI,gBAAkB,EAAA;AACpB,IAAA,MAAM,iBAAiB,IAAIA,6BAAA,CAAe,IAAK,CAAA,MAAA,EAAQ,KAAK,MAAM,CAAA;AAElE,IAAM,MAAA,cAAA,GAAiB,MAAM,cAAA,CAAe,aAAc,EAAA;AAE1D,IAAA,IAAI,CAAC,cAAgB,EAAA;AACnB,MAAK,IAAA,CAAA,MAAA,CAAO,MAAM,iDAAiD,CAAA;AAAA;AACrE;AAGF,EAAA,OAAO,MAAMC,0BAAoB,CAAA;AAAA,IAC/B,QAAQ,IAAK,CAAA,MAAA;AAAA,IACb,QAAQ,IAAK,CAAA,MAAA;AAAA,IACb,SAAS,IAAK,CAAA,OAAA;AAAA,IACd,WAAW,IAAK,CAAA,SAAA;AAAA,IAChB,YAAY,IAAK,CAAA,UAAA;AAAA,IACjB,WAAW,IAAK,CAAA,SAAA;AAAA,IAChB,WAAW,IAAK,CAAA,SAAA;AAAA,IAChB,aAAa,IAAK,CAAA,WAAA;AAAA,IAClB,UAAU,IAAK,CAAA,QAAA;AAAA,IACf,UAAU,IAAK,CAAA;AAAA,GAChB,CAAA;AACH;;;;"}
@@ -290,6 +290,7 @@ class DataIndexService {
290
290
  name
291
291
  enter
292
292
  exit
293
+ errorMessage
293
294
  }
294
295
  variables
295
296
  parentProcessInstance {
@@ -299,6 +300,7 @@ class DataIndexService {
299
300
  }
300
301
  error {
301
302
  nodeDefinitionId
303
+ nodeInstanceId
302
304
  message
303
305
  }
304
306
  }
@@ -318,11 +320,11 @@ class DataIndexService {
318
320
  if (processInstances.length === 0) {
319
321
  return void 0;
320
322
  }
321
- const instance = processInstances[0];
323
+ const instance = this.removeNodes(processInstances[0]);
322
324
  const workflowInfo = await this.fetchWorkflowInfo(instance.processId);
323
325
  if (!workflowInfo?.source) {
324
326
  throw new Error(
325
- `Workflow defintion is required to fetch instance ${instance.id}`
327
+ `Workflow definition is required to fetch instance ${instance.id}`
326
328
  );
327
329
  }
328
330
  const workflowDefinitionSrc = backstagePluginOrchestratorCommon.fromWorkflowSource(
@@ -348,6 +350,13 @@ class DataIndexService {
348
350
  throw result.error;
349
351
  }
350
352
  }
353
+ removeNodes(instance) {
354
+ const errorNodeId = instance.error?.nodeInstanceId;
355
+ instance.nodes = instance.nodes.filter((node) => {
356
+ return !node.errorMessage || node.id === errorNodeId;
357
+ });
358
+ return instance;
359
+ }
351
360
  }
352
361
 
353
362
  exports.DataIndexService = DataIndexService;
@@ -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 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 this.handleGraphqlClientError(\n 'Error executing introspection query',\n result,\n );\n\n const pairs: IntrospectionField[] = [];\n if (result?.data?.__type?.inputFields) {\n for (const field of result.data.__type.inputFields) {\n if (\n field.name !== 'and' &&\n field.name !== 'or' &&\n field.name !== 'not'\n ) {\n pairs.push({\n name: field.name,\n type: {\n name: field.type.name,\n kind: field.type.kind,\n ofType: field.type.ofType,\n },\n });\n }\n }\n }\n return pairs;\n }\n\n public async fetchWorkflowInfo(\n definitionId: string,\n ): Promise<WorkflowInfo | undefined> {\n const graphQlQuery = `{ ProcessDefinitions ( where: {id: {equal: \"${definitionId}\" } } ) { id, name, version, type, endpoint, serviceUrl, source } }`;\n\n const result = await this.client.query(graphQlQuery, {});\n\n this.logger.debug(\n `Get workflow definition result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError('Error fetching workflow definition', result);\n\n const processDefinitions = result.data.ProcessDefinitions as WorkflowInfo[];\n\n if (processDefinitions.length === 0) {\n this.logger.info(`No workflow definition found for ${definitionId}`);\n return undefined;\n }\n\n return processDefinitions[0];\n }\n\n public async fetchWorkflowServiceUrls(): Promise<Record<string, string>> {\n const graphQlQuery = `{ ProcessDefinitions { id, serviceUrl } }`;\n\n const result = await this.client.query(graphQlQuery, {});\n\n this.logger.debug(\n `Get workflow service urls result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error fetching workflow service urls',\n result,\n );\n\n const processDefinitions = result.data.ProcessDefinitions as WorkflowInfo[];\n return processDefinitions\n .filter(definition => definition.serviceUrl)\n .map(definition => ({ [definition.id]: definition.serviceUrl! }))\n .reduce((acc, curr) => ({ ...acc, ...curr }), {});\n }\n\n public async fetchWorkflowInfos(args: {\n definitionIds?: string[];\n pagination?: Pagination;\n filter?: Filter;\n }): Promise<WorkflowInfo[]> {\n this.logger.info(`fetchWorkflowInfos() called: ${this.dataIndexUrl}`);\n const { definitionIds, pagination, filter } = args;\n\n const definitionIdsCondition =\n definitionIds !== undefined && definitionIds.length > 0\n ? `id: {in: ${JSON.stringify(definitionIds)}}`\n : undefined;\n\n const filterCondition = filter\n ? buildFilterCondition(\n await this.initInputProcessDefinitionArgs(),\n 'ProcessDefinition',\n filter,\n )\n : undefined;\n\n let whereClause: string | undefined;\n if (definitionIds && filter) {\n whereClause = `and: [{${definitionIdsCondition}}, {${filterCondition}}]`;\n } else if (definitionIdsCondition || filterCondition) {\n whereClause = definitionIdsCondition ?? filterCondition;\n } else {\n whereClause = undefined;\n }\n\n const graphQlQuery = buildGraphQlQuery({\n type: 'ProcessDefinitions',\n queryBody: 'id, name, version, type, endpoint, serviceUrl, source',\n whereClause,\n pagination,\n });\n this.logger.debug(`GraphQL query: ${graphQlQuery}`);\n const result = await this.client.query(graphQlQuery, {});\n this.logger.debug(\n `Get workflow definitions result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error fetching data index swf results',\n result,\n );\n\n return result.data.ProcessDefinitions;\n }\n\n public async fetchInstances(args: {\n definitionIds?: string[];\n pagination?: Pagination;\n filter?: Filter;\n }): Promise<ProcessInstance[]> {\n const { pagination, definitionIds, filter } = args;\n if (pagination) pagination.sortField ??= FETCH_PROCESS_INSTANCES_SORT_FIELD;\n\n const processIdNotNullCondition = 'processId: {isNull: false}';\n const definitionIdsCondition =\n definitionIds && definitionIds.length > 0\n ? `processId: {in: ${JSON.stringify(definitionIds)}}`\n : undefined;\n const type = 'ProcessInstance';\n const filterCondition = filter\n ? buildFilterCondition(\n await this.inspectInputArgument(type),\n type,\n filter,\n )\n : '';\n\n let whereClause = '';\n const conditions = [];\n\n if (processIdNotNullCondition) {\n conditions.push(`{${processIdNotNullCondition}}`);\n }\n\n if (definitionIdsCondition) {\n conditions.push(`{${definitionIdsCondition}}`);\n }\n\n if (filter) {\n conditions.push(`{${filterCondition}}`);\n }\n\n if (conditions.length === 0) {\n whereClause = processIdNotNullCondition;\n } else if (conditions.length === 1) {\n whereClause = conditions[0].slice(1, -1); // Remove the outer braces\n } else if (conditions.length > 1) {\n whereClause = `and: [${conditions.join(', ')}]`;\n }\n\n const graphQlQuery = buildGraphQlQuery({\n type: 'ProcessInstances',\n queryBody:\n 'id, processName, processId, 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\n this.handleGraphqlClientError('Error when fetching instances', result);\n\n const processInstancesSrc = result.data ? result.data.ProcessInstances : [];\n\n const processInstances = await Promise.all(\n processInstancesSrc.map(async instance => {\n return await this.getWorkflowDefinitionFromInstance(instance);\n }),\n );\n return processInstances;\n }\n\n private async getWorkflowDefinitionFromInstance(instance: ProcessInstance) {\n const workflowInfo = await this.fetchWorkflowInfo(instance.processId);\n if (!workflowInfo?.source) {\n throw new Error(\n `Workflow defintion is required to fetch instance ${instance.id}`,\n );\n }\n 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 this.handleGraphqlClientError(\n 'Error when fetching workflow source',\n result,\n );\n\n const processDefinitions = result.data.ProcessDefinitions as WorkflowInfo[];\n\n if (processDefinitions.length === 0) {\n this.logger.info(`No workflow source found for ${definitionId}`);\n return undefined;\n }\n\n return processDefinitions[0].source;\n }\n\n public async fetchInstancesByDefinitionId(args: {\n definitionId: string;\n limit: number;\n offset: number;\n }): Promise<ProcessInstance[]> {\n const graphQlQuery = `{ ProcessInstances(where: {processId: {equal: \"${args.definitionId}\" } }, orderBy: {start:DESC}, pagination: {limit: ${args.limit}, offset: ${args.offset}}) { id, processName, state, start, end } }`;\n\n const result = await this.client.query(graphQlQuery, {});\n\n this.logger.debug(\n `Fetch workflow instances result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error when fetching workflow instances',\n result,\n );\n\n return result.data.ProcessInstances;\n }\n\n public async fetchInstanceVariables(\n instanceId: string,\n ): Promise<object | undefined> {\n const graphQlQuery = `{ ProcessInstances (where: { id: {equal: \"${instanceId}\" } } ) { variables } }`;\n\n const result = await this.client.query(graphQlQuery, {});\n\n this.logger.debug(\n `Fetch process instance variables result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error when fetching process instance variables',\n result,\n );\n\n const processInstances = result.data.ProcessInstances as ProcessInstance[];\n\n if (processInstances.length === 0) {\n return undefined;\n }\n\n return parseWorkflowVariables(processInstances[0].variables as object);\n }\n\n public async fetchDefinitionIdByInstanceId(\n instanceId: string,\n ): Promise<string | undefined> {\n const graphQlQuery = `{ ProcessInstances (where: { id: {equal: \"${instanceId}\" } } ) { processId } }`;\n\n const result = await this.client.query(graphQlQuery, {});\n\n this.logger.debug(\n `Fetch process id from instance result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error when fetching process id from instance',\n result,\n );\n\n const processInstances = result.data.ProcessInstances as ProcessInstance[];\n\n if (processInstances.length === 0) {\n return undefined;\n }\n\n return processInstances[0].processId;\n }\n\n public async fetchInstance(\n instanceId: string,\n ): Promise<ProcessInstance | undefined> {\n const FindProcessInstanceQuery = gql`\n query FindProcessInstanceQuery($instanceId: String!) {\n ProcessInstances(where: { id: { equal: $instanceId } }) {\n id\n processName\n processId\n serviceUrl\n 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 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 = 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 private handleGraphqlClientError(scenario: string, result: any) {\n if (!result?.error) {\n return;\n }\n this.logger.error(`${scenario} ${result}`);\n const networkError = result.error.networkError?.cause?.message;\n if (networkError) {\n const toThrow = new Error(`${result.error.message}. ${networkError}`);\n toThrow.name = 'Network Error';\n throw toThrow;\n } else {\n throw result.error;\n }\n }\n}\n"],"names":["ErrorBuilder","Client","fetchExchange","buildFilterCondition","buildGraphQlQuery","FETCH_PROCESS_INSTANCES_SORT_FIELD","fromWorkflowSource","getWorkflowCategory","parseWorkflowVariables","gql"],"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 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 this.handleGraphqlClientError(\n 'Error executing introspection query',\n result,\n );\n\n const pairs: IntrospectionField[] = [];\n if (result?.data?.__type?.inputFields) {\n for (const field of result.data.__type.inputFields) {\n if (\n field.name !== 'and' &&\n field.name !== 'or' &&\n field.name !== 'not'\n ) {\n pairs.push({\n name: field.name,\n type: {\n name: field.type.name,\n kind: field.type.kind,\n ofType: field.type.ofType,\n },\n });\n }\n }\n }\n return pairs;\n }\n\n public async fetchWorkflowInfo(\n definitionId: string,\n ): Promise<WorkflowInfo | undefined> {\n const graphQlQuery = `{ ProcessDefinitions ( where: {id: {equal: \"${definitionId}\" } } ) { id, name, version, type, endpoint, serviceUrl, source } }`;\n\n const result = await this.client.query(graphQlQuery, {});\n\n this.logger.debug(\n `Get workflow definition result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError('Error fetching workflow definition', result);\n\n const processDefinitions = result.data.ProcessDefinitions as WorkflowInfo[];\n\n if (processDefinitions.length === 0) {\n this.logger.info(`No workflow definition found for ${definitionId}`);\n return undefined;\n }\n\n return processDefinitions[0];\n }\n\n public async fetchWorkflowServiceUrls(): Promise<Record<string, string>> {\n const graphQlQuery = `{ ProcessDefinitions { id, serviceUrl } }`;\n\n const result = await this.client.query(graphQlQuery, {});\n\n this.logger.debug(\n `Get workflow service urls result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error fetching workflow service urls',\n result,\n );\n\n const processDefinitions = result.data.ProcessDefinitions as WorkflowInfo[];\n return processDefinitions\n .filter(definition => definition.serviceUrl)\n .map(definition => ({ [definition.id]: definition.serviceUrl! }))\n .reduce((acc, curr) => ({ ...acc, ...curr }), {});\n }\n\n public async fetchWorkflowInfos(args: {\n definitionIds?: string[];\n pagination?: Pagination;\n filter?: Filter;\n }): Promise<WorkflowInfo[]> {\n this.logger.info(`fetchWorkflowInfos() called: ${this.dataIndexUrl}`);\n const { definitionIds, pagination, filter } = args;\n\n const definitionIdsCondition =\n definitionIds !== undefined && definitionIds.length > 0\n ? `id: {in: ${JSON.stringify(definitionIds)}}`\n : undefined;\n\n const filterCondition = filter\n ? buildFilterCondition(\n await this.initInputProcessDefinitionArgs(),\n 'ProcessDefinition',\n filter,\n )\n : undefined;\n\n let whereClause: string | undefined;\n if (definitionIds && filter) {\n whereClause = `and: [{${definitionIdsCondition}}, {${filterCondition}}]`;\n } else if (definitionIdsCondition || filterCondition) {\n whereClause = definitionIdsCondition ?? filterCondition;\n } else {\n whereClause = undefined;\n }\n\n const graphQlQuery = buildGraphQlQuery({\n type: 'ProcessDefinitions',\n queryBody: 'id, name, version, type, endpoint, serviceUrl, source',\n whereClause,\n pagination,\n });\n this.logger.debug(`GraphQL query: ${graphQlQuery}`);\n const result = await this.client.query(graphQlQuery, {});\n this.logger.debug(\n `Get workflow definitions result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error fetching data index swf results',\n result,\n );\n\n return result.data.ProcessDefinitions;\n }\n\n public async fetchInstances(args: {\n definitionIds?: string[];\n pagination?: Pagination;\n filter?: Filter;\n }): Promise<ProcessInstance[]> {\n const { pagination, definitionIds, filter } = args;\n if (pagination) pagination.sortField ??= FETCH_PROCESS_INSTANCES_SORT_FIELD;\n\n const processIdNotNullCondition = 'processId: {isNull: false}';\n const definitionIdsCondition =\n definitionIds && definitionIds.length > 0\n ? `processId: {in: ${JSON.stringify(definitionIds)}}`\n : undefined;\n const type = 'ProcessInstance';\n const filterCondition = filter\n ? buildFilterCondition(\n await this.inspectInputArgument(type),\n type,\n filter,\n )\n : '';\n\n let whereClause = '';\n const conditions = [];\n\n if (processIdNotNullCondition) {\n conditions.push(`{${processIdNotNullCondition}}`);\n }\n\n if (definitionIdsCondition) {\n conditions.push(`{${definitionIdsCondition}}`);\n }\n\n if (filter) {\n conditions.push(`{${filterCondition}}`);\n }\n\n if (conditions.length === 0) {\n whereClause = processIdNotNullCondition;\n } else if (conditions.length === 1) {\n whereClause = conditions[0].slice(1, -1); // Remove the outer braces\n } else if (conditions.length > 1) {\n whereClause = `and: [${conditions.join(', ')}]`;\n }\n\n const graphQlQuery = buildGraphQlQuery({\n type: 'ProcessInstances',\n queryBody:\n 'id, processName, processId, 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\n this.handleGraphqlClientError('Error when fetching instances', result);\n\n const processInstancesSrc = result.data ? result.data.ProcessInstances : [];\n\n const processInstances = await Promise.all(\n processInstancesSrc.map(async instance => {\n return await this.getWorkflowDefinitionFromInstance(instance);\n }),\n );\n return processInstances;\n }\n\n private async getWorkflowDefinitionFromInstance(instance: ProcessInstance) {\n const workflowInfo = await this.fetchWorkflowInfo(instance.processId);\n if (!workflowInfo?.source) {\n throw new Error(\n `Workflow defintion is required to fetch instance ${instance.id}`,\n );\n }\n 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 this.handleGraphqlClientError(\n 'Error when fetching workflow source',\n result,\n );\n\n const processDefinitions = result.data.ProcessDefinitions as WorkflowInfo[];\n\n if (processDefinitions.length === 0) {\n this.logger.info(`No workflow source found for ${definitionId}`);\n return undefined;\n }\n\n return processDefinitions[0].source;\n }\n\n public async fetchInstancesByDefinitionId(args: {\n definitionId: string;\n limit: number;\n offset: number;\n }): Promise<ProcessInstance[]> {\n const graphQlQuery = `{ ProcessInstances(where: {processId: {equal: \"${args.definitionId}\" } }, orderBy: {start:DESC}, pagination: {limit: ${args.limit}, offset: ${args.offset}}) { id, processName, state, start, end } }`;\n\n const result = await this.client.query(graphQlQuery, {});\n\n this.logger.debug(\n `Fetch workflow instances result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error when fetching workflow instances',\n result,\n );\n\n return result.data.ProcessInstances;\n }\n\n public async fetchInstanceVariables(\n instanceId: string,\n ): Promise<object | undefined> {\n const graphQlQuery = `{ ProcessInstances (where: { id: {equal: \"${instanceId}\" } } ) { variables } }`;\n\n const result = await this.client.query(graphQlQuery, {});\n\n this.logger.debug(\n `Fetch process instance variables result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error when fetching process instance variables',\n result,\n );\n\n const processInstances = result.data.ProcessInstances as ProcessInstance[];\n\n if (processInstances.length === 0) {\n return undefined;\n }\n\n return parseWorkflowVariables(processInstances[0].variables as object);\n }\n\n public async fetchDefinitionIdByInstanceId(\n instanceId: string,\n ): Promise<string | undefined> {\n const graphQlQuery = `{ ProcessInstances (where: { id: {equal: \"${instanceId}\" } } ) { processId } }`;\n\n const result = await this.client.query(graphQlQuery, {});\n\n this.logger.debug(\n `Fetch process id from instance result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error when fetching process id from instance',\n result,\n );\n\n const processInstances = result.data.ProcessInstances as ProcessInstance[];\n\n if (processInstances.length === 0) {\n return undefined;\n }\n\n return processInstances[0].processId;\n }\n\n public async fetchInstance(\n instanceId: string,\n ): Promise<ProcessInstance | undefined> {\n const FindProcessInstanceQuery = gql`\n query FindProcessInstanceQuery($instanceId: String!) {\n ProcessInstances(where: { id: { equal: $instanceId } }) {\n id\n processName\n processId\n serviceUrl\n businessKey\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.category = getWorkflowCategory(workflowDefinitionSrc);\n instance.description = workflowDefinitionSrc.description;\n }\n return instance;\n }\n\n private handleGraphqlClientError(scenario: string, result: any) {\n if (!result?.error) {\n return;\n }\n this.logger.error(`${scenario} ${result}`);\n const networkError = result.error.networkError?.cause?.message;\n if (networkError) {\n const toThrow = new Error(`${result.error.message}. ${networkError}`);\n toThrow.name = 'Network Error';\n throw toThrow;\n } else {\n throw result.error;\n }\n }\n\n private removeNodes(instance: ProcessInstance): ProcessInstance {\n const errorNodeId = instance.error?.nodeInstanceId;\n instance.nodes = instance.nodes.filter(node => {\n return !node.errorMessage || node.id === errorNodeId;\n });\n return instance;\n }\n}\n"],"names":["ErrorBuilder","Client","fetchExchange","buildFilterCondition","buildGraphQlQuery","FETCH_PROCESS_INSTANCES_SORT_FIELD","fromWorkflowSource","getWorkflowCategory","parseWorkflowVariables","gql"],"mappings":";;;;;;;;;AAqCO,MAAM,gBAAiB,CAAA;AAAA,EAKrB,WAAA,CACY,cACA,MACjB,EAAA;AAFiB,IAAA,IAAA,CAAA,YAAA,GAAA,YAAA;AACA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAEjB,IAAI,IAAA,CAAC,aAAa,MAAQ,EAAA;AACxB,MAAA,MAAMA,0BAAa,yBAA0B,EAAA;AAAA;AAG/C,IAAK,IAAA,CAAA,MAAA,GAAS,KAAK,mBAAoB,EAAA;AAAA;AACzC,EAbiB,MAAA;AAAA,EACV,6BAAmD,EAAC;AAAA,EACpD,2BAAiD,EAAC;AAAA,EAajD,mBAA8B,GAAA;AACpC,IAAM,MAAA,KAAA,GAAQ,CAAG,EAAA,IAAA,CAAK,YAAY,CAAA,QAAA,CAAA;AAClC,IAAA,OAAO,IAAIC,WAAO,CAAA;AAAA,MAChB,GAAK,EAAA,KAAA;AAAA,MACL,SAAA,EAAW,CAACC,kBAAa;AAAA,KAC1B,CAAA;AAAA;AACH,EAEA,MAAa,8BAAgE,GAAA;AAC3E,IAAI,IAAA,IAAA,CAAK,0BAA2B,CAAA,MAAA,KAAW,CAAG,EAAA;AAChD,MAAA,IAAA,CAAK,0BACH,GAAA,MAAM,IAAK,CAAA,oBAAA,CAAqB,mBAAmB,CAAA;AAAA;AAEvD,IAAA,OAAO,IAAK,CAAA,0BAAA;AAAA;AACd,EAEO,qBAAqB,IAAsB,EAAA;AAChD,IAAA,OAAO,SAAS,IAAI,CAAA;AAAA,sBAAA,EACA,IAAI,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAAA,CAAA;AAAA;AAwB1B,EAEA,MAAa,qBACX,IAC+B,EAAA;AAC/B,IAAM,MAAA,MAAA,GAAS,MAAM,IAAA,CAAK,MAAO,CAAA,KAAA,CAAM,KAAK,oBAAqB,CAAA,IAAI,CAAG,EAAA,EAAE,CAAA;AAE1E,IAAA,IAAA,CAAK,OAAO,KAAM,CAAA,CAAA,4BAAA,EAA+B,KAAK,SAAU,CAAA,MAAM,CAAC,CAAE,CAAA,CAAA;AAEzE,IAAK,IAAA,CAAA,wBAAA;AAAA,MACH,qCAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,MAAM,QAA8B,EAAC;AACrC,IAAI,IAAA,MAAA,EAAQ,IAAM,EAAA,MAAA,EAAQ,WAAa,EAAA;AACrC,MAAA,KAAA,MAAW,KAAS,IAAA,MAAA,CAAO,IAAK,CAAA,MAAA,CAAO,WAAa,EAAA;AAClD,QACE,IAAA,KAAA,CAAM,SAAS,KACf,IAAA,KAAA,CAAM,SAAS,IACf,IAAA,KAAA,CAAM,SAAS,KACf,EAAA;AACA,UAAA,KAAA,CAAM,IAAK,CAAA;AAAA,YACT,MAAM,KAAM,CAAA,IAAA;AAAA,YACZ,IAAM,EAAA;AAAA,cACJ,IAAA,EAAM,MAAM,IAAK,CAAA,IAAA;AAAA,cACjB,IAAA,EAAM,MAAM,IAAK,CAAA,IAAA;AAAA,cACjB,MAAA,EAAQ,MAAM,IAAK,CAAA;AAAA;AACrB,WACD,CAAA;AAAA;AACH;AACF;AAEF,IAAO,OAAA,KAAA;AAAA;AACT,EAEA,MAAa,kBACX,YACmC,EAAA;AACnC,IAAM,MAAA,YAAA,GAAe,+CAA+C,YAAY,CAAA,mEAAA,CAAA;AAEhF,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,OAAO,KAAM,CAAA,YAAA,EAAc,EAAE,CAAA;AAEvD,IAAA,IAAA,CAAK,MAAO,CAAA,KAAA;AAAA,MACV,CAAmC,gCAAA,EAAA,IAAA,CAAK,SAAU,CAAA,MAAM,CAAC,CAAA;AAAA,KAC3D;AAEA,IAAK,IAAA,CAAA,wBAAA,CAAyB,sCAAsC,MAAM,CAAA;AAE1E,IAAM,MAAA,kBAAA,GAAqB,OAAO,IAAK,CAAA,kBAAA;AAEvC,IAAI,IAAA,kBAAA,CAAmB,WAAW,CAAG,EAAA;AACnC,MAAA,IAAA,CAAK,MAAO,CAAA,IAAA,CAAK,CAAoC,iCAAA,EAAA,YAAY,CAAE,CAAA,CAAA;AACnE,MAAO,OAAA,MAAA;AAAA;AAGT,IAAA,OAAO,mBAAmB,CAAC,CAAA;AAAA;AAC7B,EAEA,MAAa,wBAA4D,GAAA;AACvE,IAAA,MAAM,YAAe,GAAA,CAAA,yCAAA,CAAA;AAErB,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,OAAO,KAAM,CAAA,YAAA,EAAc,EAAE,CAAA;AAEvD,IAAA,IAAA,CAAK,MAAO,CAAA,KAAA;AAAA,MACV,CAAqC,kCAAA,EAAA,IAAA,CAAK,SAAU,CAAA,MAAM,CAAC,CAAA;AAAA,KAC7D;AAEA,IAAK,IAAA,CAAA,wBAAA;AAAA,MACH,sCAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAM,MAAA,kBAAA,GAAqB,OAAO,IAAK,CAAA,kBAAA;AACvC,IAAA,OAAO,kBACJ,CAAA,MAAA,CAAO,CAAc,UAAA,KAAA,UAAA,CAAW,UAAU,CAAA,CAC1C,GAAI,CAAA,CAAA,UAAA,MAAe,EAAE,CAAC,UAAW,CAAA,EAAE,GAAG,UAAA,CAAW,UAAY,EAAA,CAAE,CAC/D,CAAA,MAAA,CAAO,CAAC,GAAA,EAAK,IAAU,MAAA,EAAE,GAAG,GAAA,EAAK,GAAG,IAAA,EAAS,CAAA,EAAA,EAAE,CAAA;AAAA;AACpD,EAEA,MAAa,mBAAmB,IAIJ,EAAA;AAC1B,IAAA,IAAA,CAAK,MAAO,CAAA,IAAA,CAAK,CAAgC,6BAAA,EAAA,IAAA,CAAK,YAAY,CAAE,CAAA,CAAA;AACpE,IAAA,MAAM,EAAE,aAAA,EAAe,UAAY,EAAA,MAAA,EAAW,GAAA,IAAA;AAE9C,IAAM,MAAA,sBAAA,GACJ,aAAkB,KAAA,MAAA,IAAa,aAAc,CAAA,MAAA,GAAS,CAClD,GAAA,CAAA,SAAA,EAAY,IAAK,CAAA,SAAA,CAAU,aAAa,CAAC,CACzC,CAAA,CAAA,GAAA,MAAA;AAEN,IAAA,MAAM,kBAAkB,MACpB,GAAAC,kCAAA;AAAA,MACE,MAAM,KAAK,8BAA+B,EAAA;AAAA,MAC1C,mBAAA;AAAA,MACA;AAAA,KAEF,GAAA,MAAA;AAEJ,IAAI,IAAA,WAAA;AACJ,IAAA,IAAI,iBAAiB,MAAQ,EAAA;AAC3B,MAAc,WAAA,GAAA,CAAA,OAAA,EAAU,sBAAsB,CAAA,IAAA,EAAO,eAAe,CAAA,EAAA,CAAA;AAAA,KACtE,MAAA,IAAW,0BAA0B,eAAiB,EAAA;AACpD,MAAA,WAAA,GAAc,sBAA0B,IAAA,eAAA;AAAA,KACnC,MAAA;AACL,MAAc,WAAA,GAAA,MAAA;AAAA;AAGhB,IAAA,MAAM,eAAeC,8BAAkB,CAAA;AAAA,MACrC,IAAM,EAAA,oBAAA;AAAA,MACN,SAAW,EAAA,uDAAA;AAAA,MACX,WAAA;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,IAAA,CAAK,MAAO,CAAA,KAAA,CAAM,CAAkB,eAAA,EAAA,YAAY,CAAE,CAAA,CAAA;AAClD,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,OAAO,KAAM,CAAA,YAAA,EAAc,EAAE,CAAA;AACvD,IAAA,IAAA,CAAK,MAAO,CAAA,KAAA;AAAA,MACV,CAAoC,iCAAA,EAAA,IAAA,CAAK,SAAU,CAAA,MAAM,CAAC,CAAA;AAAA,KAC5D;AAEA,IAAK,IAAA,CAAA,wBAAA;AAAA,MACH,uCAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,OAAO,OAAO,IAAK,CAAA,kBAAA;AAAA;AACrB,EAEA,MAAa,eAAe,IAIG,EAAA;AAC7B,IAAA,MAAM,EAAE,UAAA,EAAY,aAAe,EAAA,MAAA,EAAW,GAAA,IAAA;AAC9C,IAAI,IAAA,UAAA,aAAuB,SAAc,KAAAC,4CAAA;AAEzC,IAAA,MAAM,yBAA4B,GAAA,4BAAA;AAClC,IAAM,MAAA,sBAAA,GACJ,aAAiB,IAAA,aAAA,CAAc,MAAS,GAAA,CAAA,GACpC,mBAAmB,IAAK,CAAA,SAAA,CAAU,aAAa,CAAC,CAChD,CAAA,CAAA,GAAA,MAAA;AACN,IAAA,MAAM,IAAO,GAAA,iBAAA;AACb,IAAA,MAAM,kBAAkB,MACpB,GAAAF,kCAAA;AAAA,MACE,MAAM,IAAK,CAAA,oBAAA,CAAqB,IAAI,CAAA;AAAA,MACpC,IAAA;AAAA,MACA;AAAA,KAEF,GAAA,EAAA;AAEJ,IAAA,IAAI,WAAc,GAAA,EAAA;AAClB,IAAA,MAAM,aAAa,EAAC;AAEpB,IAA+B;AAC7B,MAAW,UAAA,CAAA,IAAA,CAAK,CAAI,CAAA,EAAA,yBAAyB,CAAG,CAAA,CAAA,CAAA;AAAA;AAGlD,IAAA,IAAI,sBAAwB,EAAA;AAC1B,MAAW,UAAA,CAAA,IAAA,CAAK,CAAI,CAAA,EAAA,sBAAsB,CAAG,CAAA,CAAA,CAAA;AAAA;AAG/C,IAAA,IAAI,MAAQ,EAAA;AACV,MAAW,UAAA,CAAA,IAAA,CAAK,CAAI,CAAA,EAAA,eAAe,CAAG,CAAA,CAAA,CAAA;AAAA;AAGxC,IAAI,IAAA,UAAA,CAAW,WAAW,CAAG,EAAA;AAC3B,MAAc,WAAA,GAAA,yBAAA;AAAA,KAChB,MAAA,IAAW,UAAW,CAAA,MAAA,KAAW,CAAG,EAAA;AAClC,MAAA,WAAA,GAAc,UAAW,CAAA,CAAC,CAAE,CAAA,KAAA,CAAM,GAAG,EAAE,CAAA;AAAA,KACzC,MAAA,IAAW,UAAW,CAAA,MAAA,GAAS,CAAG,EAAA;AAChC,MAAA,WAAA,GAAc,CAAS,MAAA,EAAA,UAAA,CAAW,IAAK,CAAA,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA;AAG9C,IAAA,MAAM,eAAeC,8BAAkB,CAAA;AAAA,MACrC,IAAM,EAAA,kBAAA;AAAA,MACN,SACE,EAAA,2IAAA;AAAA,MACF,WAAA;AAAA,MACA;AAAA,KACD,CAAA;AAED,IAAA,IAAA,CAAK,MAAO,CAAA,KAAA,CAAM,CAAkB,eAAA,EAAA,YAAY,CAAE,CAAA,CAAA;AAElD,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,OAAO,KAE9B,CAAA,YAAA,EAAc,EAAE,CAAA;AACnB,IAAA,IAAA,CAAK,MAAO,CAAA,KAAA;AAAA,MACV,CAAmC,gCAAA,EAAA,IAAA,CAAK,SAAU,CAAA,MAAM,CAAC,CAAA;AAAA,KAC3D;AAEA,IAAK,IAAA,CAAA,wBAAA,CAAyB,iCAAiC,MAAM,CAAA;AAErE,IAAA,MAAM,sBAAsB,MAAO,CAAA,IAAA,GAAO,MAAO,CAAA,IAAA,CAAK,mBAAmB,EAAC;AAE1E,IAAM,MAAA,gBAAA,GAAmB,MAAM,OAAQ,CAAA,GAAA;AAAA,MACrC,mBAAA,CAAoB,GAAI,CAAA,OAAM,QAAY,KAAA;AACxC,QAAO,OAAA,MAAM,IAAK,CAAA,iCAAA,CAAkC,QAAQ,CAAA;AAAA,OAC7D;AAAA,KACH;AACA,IAAO,OAAA,gBAAA;AAAA;AACT,EAEA,MAAc,kCAAkC,QAA2B,EAAA;AACzE,IAAA,MAAM,YAAe,GAAA,MAAM,IAAK,CAAA,iBAAA,CAAkB,SAAS,SAAS,CAAA;AACpE,IAAI,IAAA,CAAC,cAAc,MAAQ,EAAA;AACzB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,iDAAA,EAAoD,SAAS,EAAE,CAAA;AAAA,OACjE;AAAA;AAEF,IAAA,MAAM,qBAA4C,GAAAE,oDAAA;AAAA,MAChD,YAAa,CAAA;AAAA,KACf;AACA,IAAA,IAAI,YAAc,EAAA;AAChB,MAAS,QAAA,CAAA,QAAA,GAAWC,sDAAoB,qBAAqB,CAAA;AAC7D,MAAA,QAAA,CAAS,cAAc,YAAa,CAAA,WAAA;AAAA;AAEtC,IAAO,OAAA,QAAA;AAAA;AACT,EAEA,MAAa,oBACX,YAC6B,EAAA;AAC7B,IAAM,MAAA,YAAA,GAAe,+CAA+C,YAAY,CAAA,wBAAA,CAAA;AAEhF,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,OAAO,KAAM,CAAA,YAAA,EAAc,EAAE,CAAA;AAEvD,IAAA,IAAA,CAAK,MAAO,CAAA,KAAA;AAAA,MACV,CAAiC,8BAAA,EAAA,IAAA,CAAK,SAAU,CAAA,MAAM,CAAC,CAAA;AAAA,KACzD;AAEA,IAAK,IAAA,CAAA,wBAAA;AAAA,MACH,qCAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAM,MAAA,kBAAA,GAAqB,OAAO,IAAK,CAAA,kBAAA;AAEvC,IAAI,IAAA,kBAAA,CAAmB,WAAW,CAAG,EAAA;AACnC,MAAA,IAAA,CAAK,MAAO,CAAA,IAAA,CAAK,CAAgC,6BAAA,EAAA,YAAY,CAAE,CAAA,CAAA;AAC/D,MAAO,OAAA,MAAA;AAAA;AAGT,IAAO,OAAA,kBAAA,CAAmB,CAAC,CAAE,CAAA,MAAA;AAAA;AAC/B,EAEA,MAAa,6BAA6B,IAIX,EAAA;AAC7B,IAAM,MAAA,YAAA,GAAe,kDAAkD,IAAK,CAAA,YAAY,qDAAqD,IAAK,CAAA,KAAK,CAAa,UAAA,EAAA,IAAA,CAAK,MAAM,CAAA,2CAAA,CAAA;AAE/K,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,OAAO,KAAM,CAAA,YAAA,EAAc,EAAE,CAAA;AAEvD,IAAA,IAAA,CAAK,MAAO,CAAA,KAAA;AAAA,MACV,CAAoC,iCAAA,EAAA,IAAA,CAAK,SAAU,CAAA,MAAM,CAAC,CAAA;AAAA,KAC5D;AAEA,IAAK,IAAA,CAAA,wBAAA;AAAA,MACH,wCAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,OAAO,OAAO,IAAK,CAAA,gBAAA;AAAA;AACrB,EAEA,MAAa,uBACX,UAC6B,EAAA;AAC7B,IAAM,MAAA,YAAA,GAAe,6CAA6C,UAAU,CAAA,uBAAA,CAAA;AAE5E,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,OAAO,KAAM,CAAA,YAAA,EAAc,EAAE,CAAA;AAEvD,IAAA,IAAA,CAAK,MAAO,CAAA,KAAA;AAAA,MACV,CAA4C,yCAAA,EAAA,IAAA,CAAK,SAAU,CAAA,MAAM,CAAC,CAAA;AAAA,KACpE;AAEA,IAAK,IAAA,CAAA,wBAAA;AAAA,MACH,gDAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAM,MAAA,gBAAA,GAAmB,OAAO,IAAK,CAAA,gBAAA;AAErC,IAAI,IAAA,gBAAA,CAAiB,WAAW,CAAG,EAAA;AACjC,MAAO,OAAA,MAAA;AAAA;AAGT,IAAA,OAAOC,wDAAuB,CAAA,gBAAA,CAAiB,CAAC,CAAA,CAAE,SAAmB,CAAA;AAAA;AACvE,EAEA,MAAa,8BACX,UAC6B,EAAA;AAC7B,IAAM,MAAA,YAAA,GAAe,6CAA6C,UAAU,CAAA,uBAAA,CAAA;AAE5E,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,OAAO,KAAM,CAAA,YAAA,EAAc,EAAE,CAAA;AAEvD,IAAA,IAAA,CAAK,MAAO,CAAA,KAAA;AAAA,MACV,CAA0C,uCAAA,EAAA,IAAA,CAAK,SAAU,CAAA,MAAM,CAAC,CAAA;AAAA,KAClE;AAEA,IAAK,IAAA,CAAA,wBAAA;AAAA,MACH,8CAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAM,MAAA,gBAAA,GAAmB,OAAO,IAAK,CAAA,gBAAA;AAErC,IAAI,IAAA,gBAAA,CAAiB,WAAW,CAAG,EAAA;AACjC,MAAO,OAAA,MAAA;AAAA;AAGT,IAAO,OAAA,gBAAA,CAAiB,CAAC,CAAE,CAAA,SAAA;AAAA;AAC7B,EAEA,MAAa,cACX,UACsC,EAAA;AACtC,IAAA,MAAM,wBAA2B,GAAAC,QAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CAAA;AAoCjC,IAAA,MAAM,MAAS,GAAA,MAAM,IAAK,CAAA,MAAA,CAAO,MAAM,wBAA0B,EAAA;AAAA,MAC/D;AAAA,KACD,CAAA;AAED,IAAA,IAAA,CAAK,MAAO,CAAA,KAAA;AAAA,MACV,CAAkC,+BAAA,EAAA,IAAA,CAAK,SAAU,CAAA,MAAM,CAAC,CAAA;AAAA,KAC1D;AAEA,IAAK,IAAA,CAAA,wBAAA;AAAA,MACH,uCAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAM,MAAA,gBAAA,GAAmB,OAAO,IAAK,CAAA,gBAAA;AAErC,IAAI,IAAA,gBAAA,CAAiB,WAAW,CAAG,EAAA;AACjC,MAAO,OAAA,MAAA;AAAA;AAGT,IAAA,MAAM,QAAW,GAAA,IAAA,CAAK,WAAY,CAAA,gBAAA,CAAiB,CAAC,CAAC,CAAA;AAErD,IAAA,MAAM,YAAe,GAAA,MAAM,IAAK,CAAA,iBAAA,CAAkB,SAAS,SAAS,CAAA;AACpE,IAAI,IAAA,CAAC,cAAc,MAAQ,EAAA;AACzB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,kDAAA,EAAqD,SAAS,EAAE,CAAA;AAAA,OAClE;AAAA;AAEF,IAAA,MAAM,qBAA4C,GAAAH,oDAAA;AAAA,MAChD,YAAa,CAAA;AAAA,KACf;AACA,IAAA,IAAI,YAAc,EAAA;AAChB,MAAS,QAAA,CAAA,QAAA,GAAWC,sDAAoB,qBAAqB,CAAA;AAC7D,MAAA,QAAA,CAAS,cAAc,qBAAsB,CAAA,WAAA;AAAA;AAE/C,IAAO,OAAA,QAAA;AAAA;AACT,EAEQ,wBAAA,CAAyB,UAAkB,MAAa,EAAA;AAC9D,IAAI,IAAA,CAAC,QAAQ,KAAO,EAAA;AAClB,MAAA;AAAA;AAEF,IAAA,IAAA,CAAK,OAAO,KAAM,CAAA,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,MAAM,CAAE,CAAA,CAAA;AACzC,IAAA,MAAM,YAAe,GAAA,MAAA,CAAO,KAAM,CAAA,YAAA,EAAc,KAAO,EAAA,OAAA;AACvD,IAAA,IAAI,YAAc,EAAA;AAChB,MAAM,MAAA,OAAA,GAAU,IAAI,KAAM,CAAA,CAAA,EAAG,OAAO,KAAM,CAAA,OAAO,CAAK,EAAA,EAAA,YAAY,CAAE,CAAA,CAAA;AACpE,MAAA,OAAA,CAAQ,IAAO,GAAA,eAAA;AACf,MAAM,MAAA,OAAA;AAAA,KACD,MAAA;AACL,MAAA,MAAM,MAAO,CAAA,KAAA;AAAA;AACf;AACF,EAEQ,YAAY,QAA4C,EAAA;AAC9D,IAAM,MAAA,WAAA,GAAc,SAAS,KAAO,EAAA,cAAA;AACpC,IAAA,QAAA,CAAS,KAAQ,GAAA,QAAA,CAAS,KAAM,CAAA,MAAA,CAAO,CAAQ,IAAA,KAAA;AAC7C,MAAA,OAAO,CAAC,IAAA,CAAK,YAAgB,IAAA,IAAA,CAAK,EAAO,KAAA,WAAA;AAAA,KAC1C,CAAA;AACD,IAAO,OAAA,QAAA;AAAA;AAEX;;;;"}
@@ -11,20 +11,11 @@ class OrchestratorService {
11
11
  return this.workflowCacheService.definitionIds;
12
12
  }
13
13
  async abortWorkflowInstance(args) {
14
- const { definitionId, cacheHandler } = args;
15
- const isWorkflowAvailable = this.workflowCacheService.isAvailable(
16
- definitionId,
17
- cacheHandler
18
- );
19
- return isWorkflowAvailable ? await this.sonataFlowService.abortInstance(args) : void 0;
14
+ return await this.sonataFlowService.abortInstance(args);
20
15
  }
21
16
  async fetchWorkflowInfo(args) {
22
- const { definitionId, cacheHandler } = args;
23
- const isWorkflowAvailable = this.workflowCacheService.isAvailable(
24
- definitionId,
25
- cacheHandler
26
- );
27
- return isWorkflowAvailable ? await this.dataIndexService.fetchWorkflowInfo(definitionId) : void 0;
17
+ const { definitionId } = args;
18
+ return await this.dataIndexService.fetchWorkflowInfo(definitionId);
28
19
  }
29
20
  async fetchInstances(args) {
30
21
  const definitionIds = args.workflowIds ? args.workflowIds : this.workflowCacheService.definitionIds;
@@ -35,21 +26,12 @@ class OrchestratorService {
35
26
  });
36
27
  }
37
28
  async fetchWorkflowSource(args) {
38
- const { definitionId, cacheHandler } = args;
39
- const isWorkflowAvailable = this.workflowCacheService.isAvailable(
40
- definitionId,
41
- cacheHandler
42
- );
43
- return isWorkflowAvailable ? await this.dataIndexService.fetchWorkflowSource(definitionId) : void 0;
29
+ const { definitionId } = args;
30
+ return await this.dataIndexService.fetchWorkflowSource(definitionId);
44
31
  }
45
32
  async fetchInstanceVariables(args) {
46
- const { instanceId, cacheHandler } = args;
47
- const definitionId = await this.dataIndexService.fetchDefinitionIdByInstanceId(instanceId);
48
- const isWorkflowAvailable = this.workflowCacheService.isAvailable(
49
- definitionId,
50
- cacheHandler
51
- );
52
- return isWorkflowAvailable ? await this.dataIndexService.fetchInstanceVariables(instanceId) : void 0;
33
+ const { instanceId } = args;
34
+ return await this.dataIndexService.fetchInstanceVariables(instanceId);
53
35
  }
54
36
  async fetchInstance(args) {
55
37
  const { instanceId } = args;
@@ -58,20 +40,11 @@ class OrchestratorService {
58
40
  }
59
41
  // SonataFlow Service Wrapper
60
42
  async fetchWorkflowInfoOnService(args) {
61
- const { definitionId, cacheHandler } = args;
62
- const isWorkflowAvailable = this.workflowCacheService.isAvailable(
63
- definitionId,
64
- cacheHandler
65
- );
66
- return isWorkflowAvailable ? await this.sonataFlowService.fetchWorkflowInfoOnService(args) : void 0;
43
+ return await this.sonataFlowService.fetchWorkflowInfoOnService(args);
67
44
  }
68
45
  async fetchWorkflowDefinition(args) {
69
- const { definitionId, cacheHandler } = args;
70
- const isWorkflowAvailable = this.workflowCacheService.isAvailable(
71
- definitionId,
72
- cacheHandler
73
- );
74
- return isWorkflowAvailable ? await this.sonataFlowService.fetchWorkflowDefinition(definitionId) : void 0;
46
+ const { definitionId } = args;
47
+ return await this.sonataFlowService.fetchWorkflowDefinition(definitionId);
75
48
  }
76
49
  async fetchWorkflowOverviews(args) {
77
50
  const overviews = await this.sonataFlowService.fetchWorkflowOverviews({
@@ -90,20 +63,10 @@ class OrchestratorService {
90
63
  });
91
64
  }
92
65
  async executeWorkflow(args) {
93
- const { definitionId, cacheHandler } = args;
94
- const isWorkflowAvailable = this.workflowCacheService.isAvailable(
95
- definitionId,
96
- cacheHandler
97
- );
98
- return isWorkflowAvailable ? await this.sonataFlowService.executeWorkflow(args) : void 0;
66
+ return await this.sonataFlowService.executeWorkflow(args);
99
67
  }
100
68
  async retriggerWorkflow(args) {
101
- const { definitionId, cacheHandler } = args;
102
- const isWorkflowAvailable = this.workflowCacheService.isAvailable(
103
- definitionId,
104
- cacheHandler
105
- );
106
- return isWorkflowAvailable ? await this.sonataFlowService.retriggerInstance(args) : void 0;
69
+ return this.sonataFlowService.retriggerInstance(args);
107
70
  }
108
71
  async fetchWorkflowOverview(args) {
109
72
  const { definitionId } = args;
@@ -113,9 +76,7 @@ class OrchestratorService {
113
76
  return overview;
114
77
  }
115
78
  async pingWorkflowService(args) {
116
- const { definitionId } = args;
117
- const idUrlMap = await this.dataIndexService.fetchWorkflowServiceUrls();
118
- const serviceUrl = idUrlMap[definitionId];
79
+ const { definitionId, serviceUrl } = args;
119
80
  const isServiceUp = await this.sonataFlowService.pingWorkflowService({
120
81
  definitionId,
121
82
  serviceUrl
@@ -1 +1 @@
1
- {"version":3,"file":"OrchestratorService.cjs.js","sources":["../../src/service/OrchestratorService.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n AuthToken,\n Filter,\n ProcessInstance,\n ProcessInstanceVariables,\n WorkflowDefinition,\n WorkflowExecutionResponse,\n WorkflowInfo,\n WorkflowOverview,\n} from '@red-hat-developer-hub/backstage-plugin-orchestrator-common';\n\nimport { Pagination } from '../types/pagination';\nimport { DataIndexService } from './DataIndexService';\nimport { SonataFlowService } from './SonataFlowService';\nimport { CacheHandler, WorkflowCacheService } from './WorkflowCacheService';\n\nexport class OrchestratorService {\n constructor(\n private readonly sonataFlowService: SonataFlowService,\n private readonly dataIndexService: DataIndexService,\n private readonly workflowCacheService: WorkflowCacheService,\n ) {}\n\n // Data Index Service Wrapper\n public getWorkflowIds(): string[] {\n return this.workflowCacheService.definitionIds;\n }\n\n public async abortWorkflowInstance(args: {\n definitionId: string;\n instanceId: string;\n serviceUrl: string;\n cacheHandler?: CacheHandler;\n }): Promise<void> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.sonataFlowService.abortInstance(args)\n : undefined;\n }\n\n public async fetchWorkflowInfo(args: {\n definitionId: string;\n cacheHandler?: CacheHandler;\n }): Promise<WorkflowInfo | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.dataIndexService.fetchWorkflowInfo(definitionId)\n : undefined;\n }\n\n public async fetchInstances(args: {\n pagination?: Pagination;\n filter?: Filter;\n workflowIds?: string[];\n }): Promise<ProcessInstance[]> {\n const definitionIds = args.workflowIds\n ? args.workflowIds\n : this.workflowCacheService.definitionIds;\n return await this.dataIndexService.fetchInstances({\n definitionIds: definitionIds,\n pagination: args.pagination,\n filter: args.filter,\n });\n }\n\n public async fetchWorkflowSource(args: {\n definitionId: string;\n cacheHandler?: CacheHandler;\n }): Promise<string | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.dataIndexService.fetchWorkflowSource(definitionId)\n : undefined;\n }\n\n public async fetchInstanceVariables(args: {\n instanceId: string;\n cacheHandler?: CacheHandler;\n }): Promise<object | undefined> {\n const { instanceId, cacheHandler } = args;\n const definitionId =\n await this.dataIndexService.fetchDefinitionIdByInstanceId(instanceId);\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.dataIndexService.fetchInstanceVariables(instanceId)\n : undefined;\n }\n\n public async fetchInstance(args: {\n instanceId: string;\n cacheHandler?: CacheHandler;\n }): Promise<ProcessInstance | undefined> {\n const { instanceId } = args;\n const instance = await this.dataIndexService.fetchInstance(instanceId);\n return instance;\n }\n\n // SonataFlow Service Wrapper\n\n public async fetchWorkflowInfoOnService(args: {\n definitionId: string;\n serviceUrl: string;\n cacheHandler?: CacheHandler;\n }): Promise<WorkflowInfo | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.sonataFlowService.fetchWorkflowInfoOnService(args)\n : undefined;\n }\n\n public async fetchWorkflowDefinition(args: {\n definitionId: string;\n cacheHandler?: CacheHandler;\n }): Promise<WorkflowDefinition | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.sonataFlowService.fetchWorkflowDefinition(definitionId)\n : undefined;\n }\n\n public async fetchWorkflowOverviews(args: {\n pagination?: Pagination;\n filter?: Filter;\n }): Promise<WorkflowOverview[] | undefined> {\n const overviews = await this.sonataFlowService.fetchWorkflowOverviews({\n definitionIds: this.workflowCacheService.definitionIds?.concat(\n this.workflowCacheService.unavailableDefinitionIds,\n ),\n pagination: args.pagination,\n filter: args.filter,\n });\n\n return overviews?.map(overview => {\n const updatedOverview = overview;\n updatedOverview.isAvailable = this.workflowCacheService.isAvailable(\n updatedOverview.workflowId,\n );\n return updatedOverview;\n });\n }\n\n public async executeWorkflow(args: {\n definitionId: string;\n serviceUrl: string;\n inputData?: ProcessInstanceVariables;\n authTokens?: Array<AuthToken>;\n businessKey?: string;\n cacheHandler?: CacheHandler;\n }): Promise<WorkflowExecutionResponse | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.sonataFlowService.executeWorkflow(args)\n : undefined;\n }\n\n public async retriggerWorkflow(args: {\n definitionId: string;\n instanceId: string;\n serviceUrl: string;\n cacheHandler?: CacheHandler;\n }): Promise<boolean | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.sonataFlowService.retriggerInstance(args)\n : undefined;\n }\n\n public async fetchWorkflowOverview(args: {\n definitionId: string;\n }): Promise<WorkflowOverview | undefined> {\n const { definitionId } = args;\n const isWorkflowAvailable =\n this.workflowCacheService.isAvailable(definitionId);\n const overview =\n await this.sonataFlowService.fetchWorkflowOverview(definitionId);\n if (overview) overview.isAvailable = isWorkflowAvailable; // workflow overview is avaiable but the workflow itself is not\n return overview;\n }\n\n public async pingWorkflowService(args: {\n definitionId: string;\n }): Promise<boolean | undefined> {\n const { definitionId } = args;\n const idUrlMap = await this.dataIndexService.fetchWorkflowServiceUrls();\n const serviceUrl = idUrlMap[definitionId];\n const isServiceUp = await this.sonataFlowService.pingWorkflowService({\n definitionId,\n serviceUrl,\n });\n return isServiceUp;\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"OrchestratorService.cjs.js","sources":["../../src/service/OrchestratorService.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n AuthToken,\n Filter,\n ProcessInstance,\n ProcessInstanceVariables,\n WorkflowDefinition,\n WorkflowExecutionResponse,\n WorkflowInfo,\n WorkflowOverview,\n} from '@red-hat-developer-hub/backstage-plugin-orchestrator-common';\n\nimport { Pagination } from '../types/pagination';\nimport { DataIndexService } from './DataIndexService';\nimport { SonataFlowService } from './SonataFlowService';\nimport { WorkflowCacheService } from './WorkflowCacheService';\n\nexport class OrchestratorService {\n constructor(\n private readonly sonataFlowService: SonataFlowService,\n private readonly dataIndexService: DataIndexService,\n private readonly workflowCacheService: WorkflowCacheService,\n ) {}\n\n // Data Index Service Wrapper\n public getWorkflowIds(): string[] {\n return this.workflowCacheService.definitionIds;\n }\n\n public async abortWorkflowInstance(args: {\n definitionId: string;\n instanceId: string;\n serviceUrl: string;\n }): Promise<void> {\n return await this.sonataFlowService.abortInstance(args);\n }\n\n public async fetchWorkflowInfo(args: {\n definitionId: string;\n }): Promise<WorkflowInfo | undefined> {\n const { definitionId } = args;\n return await this.dataIndexService.fetchWorkflowInfo(definitionId);\n }\n\n public async fetchInstances(args: {\n pagination?: Pagination;\n filter?: Filter;\n workflowIds?: string[];\n }): Promise<ProcessInstance[]> {\n const definitionIds = args.workflowIds\n ? args.workflowIds\n : this.workflowCacheService.definitionIds;\n return await this.dataIndexService.fetchInstances({\n definitionIds: definitionIds,\n pagination: args.pagination,\n filter: args.filter,\n });\n }\n\n public async fetchWorkflowSource(args: {\n definitionId: string;\n }): Promise<string | undefined> {\n const { definitionId } = args;\n return await this.dataIndexService.fetchWorkflowSource(definitionId);\n }\n\n public async fetchInstanceVariables(args: {\n instanceId: string;\n }): Promise<object | undefined> {\n const { instanceId } = args;\n return await this.dataIndexService.fetchInstanceVariables(instanceId);\n }\n\n public async fetchInstance(args: {\n instanceId: string;\n }): Promise<ProcessInstance | undefined> {\n const { instanceId } = args;\n const instance = await this.dataIndexService.fetchInstance(instanceId);\n return instance;\n }\n\n // SonataFlow Service Wrapper\n\n public async fetchWorkflowInfoOnService(args: {\n definitionId: string;\n serviceUrl: string;\n }): Promise<WorkflowInfo | undefined> {\n return await this.sonataFlowService.fetchWorkflowInfoOnService(args);\n }\n\n public async fetchWorkflowDefinition(args: {\n definitionId: string;\n }): Promise<WorkflowDefinition | undefined> {\n const { definitionId } = args;\n return await this.sonataFlowService.fetchWorkflowDefinition(definitionId);\n }\n\n public async fetchWorkflowOverviews(args: {\n pagination?: Pagination;\n filter?: Filter;\n }): Promise<WorkflowOverview[] | undefined> {\n const overviews = await this.sonataFlowService.fetchWorkflowOverviews({\n definitionIds: this.workflowCacheService.definitionIds?.concat(\n this.workflowCacheService.unavailableDefinitionIds,\n ),\n pagination: args.pagination,\n filter: args.filter,\n });\n\n return overviews?.map(overview => {\n const updatedOverview = overview;\n updatedOverview.isAvailable = this.workflowCacheService.isAvailable(\n updatedOverview.workflowId,\n );\n return updatedOverview;\n });\n }\n\n public async executeWorkflow(args: {\n definitionId: string;\n serviceUrl: string;\n inputData?: ProcessInstanceVariables;\n authTokens?: Array<AuthToken>;\n businessKey?: string;\n }): Promise<WorkflowExecutionResponse | undefined> {\n return await this.sonataFlowService.executeWorkflow(args);\n }\n\n public async retriggerWorkflow(args: {\n definitionId: string;\n instanceId: string;\n serviceUrl: string;\n }): Promise<boolean | undefined> {\n return this.sonataFlowService.retriggerInstance(args);\n }\n\n public async fetchWorkflowOverview(args: {\n definitionId: string;\n }): Promise<WorkflowOverview | undefined> {\n const { definitionId } = args;\n const isWorkflowAvailable =\n this.workflowCacheService.isAvailable(definitionId);\n const overview =\n await this.sonataFlowService.fetchWorkflowOverview(definitionId);\n if (overview) overview.isAvailable = isWorkflowAvailable; // workflow overview is avaiable but the workflow itself is not\n return overview;\n }\n\n public async pingWorkflowService(args: {\n definitionId: string;\n serviceUrl: string;\n }): Promise<boolean | undefined> {\n const { definitionId, serviceUrl } = args;\n const isServiceUp = await this.sonataFlowService.pingWorkflowService({\n definitionId,\n serviceUrl,\n });\n return isServiceUp;\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1,7 +1,12 @@
1
1
  'use strict';
2
2
 
3
+ var capitalize = require('lodash/capitalize');
3
4
  var backstagePluginOrchestratorCommon = require('@red-hat-developer-hub/backstage-plugin-orchestrator-common');
4
5
 
6
+ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
7
+
8
+ var capitalize__default = /*#__PURE__*/_interopDefaultCompat(capitalize);
9
+
5
10
  class SonataFlowService {
6
11
  constructor(dataIndexService, logger) {
7
12
  this.dataIndexService = dataIndexService;
@@ -10,23 +15,17 @@ class SonataFlowService {
10
15
  async fetchWorkflowInfoOnService(args) {
11
16
  const urlToFetch = `${args.serviceUrl}/management/processes/${args.definitionId}`;
12
17
  const response = await fetch(urlToFetch);
13
- const jsonResponse = await response.json();
14
- if (response.ok) {
15
- this.logger.debug(
16
- `Fetch workflow info result: ${JSON.stringify(jsonResponse)}`
17
- );
18
- return jsonResponse;
19
- }
20
- this.logger.error(
21
- `Fetch workflow info failed with: ${JSON.stringify(jsonResponse)}`
18
+ const jsonResponse = await this.handleWorkflowServiceResponse(
19
+ "Get workflow info",
20
+ args.definitionId,
21
+ urlToFetch,
22
+ response,
23
+ "GET"
22
24
  );
23
- throw new Error(
24
- await this.createPrefixFetchErrorMessage(
25
- urlToFetch,
26
- response,
27
- jsonResponse
28
- )
25
+ this.logger.debug(
26
+ `Fetch workflow info result: ${JSON.stringify(jsonResponse)}`
29
27
  );
28
+ return jsonResponse;
30
29
  }
31
30
  async fetchWorkflowDefinition(definitionId) {
32
31
  const source = await this.dataIndexService.fetchWorkflowSource(definitionId);
@@ -58,7 +57,7 @@ class SonataFlowService {
58
57
  if (args.authTokens && Array.isArray(args.authTokens)) {
59
58
  args.authTokens.forEach((tokenObj) => {
60
59
  if (tokenObj.provider && tokenObj.token) {
61
- const headerKey = `X-Authorization-${tokenObj.provider}`;
60
+ const headerKey = `X-${capitalize__default.default(tokenObj.provider)}-Authorization`;
62
61
  headers[headerKey] = String(tokenObj.token);
63
62
  }
64
63
  });
@@ -72,49 +71,38 @@ class SonataFlowService {
72
71
  body: JSON.stringify(args.inputData || {}),
73
72
  headers
74
73
  });
75
- const json = await response.json();
74
+ const json = await this.handleWorkflowServiceResponse(
75
+ "Execute",
76
+ args.definitionId,
77
+ urlToFetch,
78
+ response,
79
+ "POST"
80
+ );
76
81
  if (json.id) {
77
82
  this.logger.debug(
78
83
  `Execute workflow successful. Response: ${JSON.stringify(json)}`
79
84
  );
80
85
  return json;
81
- } else if (!response.ok) {
82
- const errorMessage = await this.createPrefixFetchErrorMessage(
83
- urlToFetch,
84
- response,
85
- json,
86
- "POST"
87
- );
88
- this.logger.error(
89
- `Execute workflow failed. Response: ${JSON.stringify(json)}`
90
- );
91
- throw new Error(errorMessage);
92
- } else {
93
- this.logger.error(
94
- `Execute workflow did not return a workflow instance ID. Response: ${JSON.stringify(
95
- json
96
- )}`
97
- );
98
- throw new Error("Execute workflow did not return a workflow instance ID");
99
86
  }
87
+ this.logger.error(
88
+ `Execute workflow did not return a workflow instance ID. Response: ${JSON.stringify(
89
+ json
90
+ )}`
91
+ );
92
+ throw new Error("Execute workflow did not return a workflow instance ID");
100
93
  }
101
94
  async retriggerInstance(args) {
102
95
  const urlToFetch = `${args.serviceUrl}/management/processes/${args.definitionId}/instances/${args.instanceId}/retrigger`;
103
96
  const response = await fetch(urlToFetch, {
104
97
  method: "POST"
105
98
  });
106
- if (!response.ok) {
107
- const json = await response.json();
108
- this.logger.error(`Retrigger failed with: ${JSON.stringify(json)}`);
109
- throw new Error(
110
- `${await this.createPrefixFetchErrorMessage(
111
- urlToFetch,
112
- response,
113
- json,
114
- "POST"
115
- )}`
116
- );
117
- }
99
+ await this.handleWorkflowServiceResponse(
100
+ "Retrigger",
101
+ args.definitionId,
102
+ urlToFetch,
103
+ response,
104
+ "POST"
105
+ );
118
106
  return true;
119
107
  }
120
108
  async abortInstance(args) {
@@ -122,18 +110,13 @@ class SonataFlowService {
122
110
  const response = await fetch(urlToFetch, {
123
111
  method: "DELETE"
124
112
  });
125
- if (!response.ok) {
126
- const json = await response.json();
127
- this.logger.error(`Abort failed with: ${JSON.stringify(json)}`);
128
- throw new Error(
129
- `${await this.createPrefixFetchErrorMessage(
130
- urlToFetch,
131
- response,
132
- json,
133
- "DELETE"
134
- )}`
135
- );
136
- }
113
+ await this.handleWorkflowServiceResponse(
114
+ "Abort",
115
+ args.definitionId,
116
+ urlToFetch,
117
+ response,
118
+ "DELETE"
119
+ );
137
120
  }
138
121
  async fetchWorkflowOverview(definitionId) {
139
122
  const source = await this.dataIndexService.fetchWorkflowSource(definitionId);
@@ -175,30 +158,38 @@ class SonataFlowService {
175
158
  const response = await fetch(urlToFetch);
176
159
  return response.ok;
177
160
  }
178
- async createPrefixFetchErrorMessage(urlToFetch, response, jsonResponse, httpMethod = "GET") {
179
- const errorInfo = [];
180
- let errorMsg = `Request ${httpMethod} ${urlToFetch} failed with: StatusCode: ${response.status}`;
161
+ async handleWorkflowServiceResponse(operation, workflowId, serviceUrl, response, httpMethod) {
162
+ const logErrorPrefix = `Error during operation '${operation}' on workflow ${workflowId} with service URL ${serviceUrl}`;
163
+ const errorLines = [];
164
+ errorLines.push(`HTTP ${httpMethod} request to ${serviceUrl} failed.`);
165
+ errorLines.push(`Status Code: ${response.status}`);
181
166
  if (response.statusText) {
182
- errorInfo.push(`StatusText: ${response.statusText}`);
167
+ errorLines.push(`Status Text: ${response.statusText}`);
183
168
  }
184
- if (jsonResponse?.details) {
185
- errorInfo.push(`Details: ${jsonResponse?.details}`);
186
- }
187
- if (jsonResponse?.stack) {
188
- errorInfo.push(`Stack: ${jsonResponse?.stack}`);
189
- }
190
- if (jsonResponse?.message) {
191
- errorInfo.push(`Message: ${jsonResponse?.message}`);
192
- }
193
- if (jsonResponse?.failedNodeId) {
194
- errorInfo.push(`Failed Node Id: ${jsonResponse?.failedNodeId}`);
195
- }
196
- if (errorInfo.length > 0) {
197
- errorMsg += ` ${errorInfo.join(", ")}`;
198
- } else {
199
- errorMsg += " Unexpected error";
169
+ try {
170
+ const jsonResponse = await response.json();
171
+ if (jsonResponse.id && operation === "Execute" || response.ok) {
172
+ return jsonResponse;
173
+ }
174
+ if (jsonResponse?.message) {
175
+ errorLines.push(`Message: ${jsonResponse.message}`);
176
+ }
177
+ if (jsonResponse?.details) {
178
+ errorLines.push(`Details: ${jsonResponse.details}`);
179
+ }
180
+ if (jsonResponse?.stack) {
181
+ errorLines.push(`Stack Trace: ${jsonResponse.stack}`);
182
+ }
183
+ if (jsonResponse?.failedNodeId) {
184
+ errorLines.push(`Failed Node ID: ${jsonResponse.failedNodeId}`);
185
+ }
186
+ this.logger.error(`${logErrorPrefix}: ${JSON.stringify(jsonResponse)}`);
187
+ } catch (jsonParseError) {
188
+ this.logger.error(
189
+ `${logErrorPrefix}. The details of this error cannot be provided because the response body was not in a parsable format.`
190
+ );
200
191
  }
201
- return errorMsg;
192
+ throw new Error(errorLines.join("\n"));
202
193
  }
203
194
  }
204
195