@red-hat-developer-hub/backstage-plugin-orchestrator-backend 5.2.2 → 6.0.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 +35 -0
- package/dist/plugin.cjs.js +1 -1
- package/dist/plugin.cjs.js.map +1 -1
- package/dist/routerWrapper/index.cjs.js +2 -2
- package/dist/routerWrapper/index.cjs.js.map +1 -1
- package/dist/service/DataIndexService.cjs.js +1 -1
- package/dist/service/DataIndexService.cjs.js.map +1 -1
- package/dist/service/OrchestratorService.cjs.js +7 -12
- package/dist/service/OrchestratorService.cjs.js.map +1 -1
- package/dist/service/SonataFlowService.cjs.js +16 -1
- package/dist/service/SonataFlowService.cjs.js.map +1 -1
- package/dist/service/api/v2.cjs.js +2 -2
- package/dist/service/api/v2.cjs.js.map +1 -1
- package/dist/service/router.cjs.js +170 -216
- package/dist/service/router.cjs.js.map +1 -1
- package/package.json +15 -22
- package/dist/package.json.cjs.js +0 -6
- package/dist/package.json.cjs.js.map +0 -1
- package/static/generated/envelope/combined.bundle.js +0 -1
- package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/7B8391DDA1E35A2797E163B741F050D7.cache.js +0 -80
- package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/E0FAC72ADB096551A5346E4435AA4F35.cache.js +0 -80
- package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/bootstrap-daterangepicker/daterangepicker.css +0 -365
- package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/bootstrap-select/css/bootstrap-select.min.css +0 -279
- package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/clear.cache.gif +0 -0
- package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/compilation-mappings.txt +0 -7
- package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/css/animate-3.5.2.min.cache.css +0 -2967
- package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/css/bootstrap-3.4.1.min.cache.css +0 -6971
- package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/css/bootstrap-datepicker3-1.6.4.min.cache.css +0 -471
- package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/css/bootstrap-datetimepicker-2.4.4.min.cache.css +0 -367
- package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/css/bootstrap-notify-custom.min.cache.css +0 -9
- package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/css/bootstrap-slider-9.2.0.min.cache.css +0 -264
- package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/css/bootstrap-theme-3.4.1.min.cache.css +0 -614
- package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/css/card-1.0.1.cache.css +0 -89
- package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/css/font-awesome-4.7.0.min.cache.css +0 -2335
- package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/css/patternfly-additions.min.css +0 -6662
- package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/css/patternfly.min.css +0 -10014
- package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/css/typeahead-0.10.5.min.cache.css +0 -69
- package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/fonts/FontAwesome.otf +0 -0
- package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/fonts/OpenSans-Bold-webfont.ttf +0 -0
- package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/fonts/OpenSans-BoldItalic-webfont.ttf +0 -0
- package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/fonts/OpenSans-ExtraBold-webfont.ttf +0 -0
- package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/fonts/OpenSans-ExtraBoldItalic-webfont.ttf +0 -0
- package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/fonts/OpenSans-Italic-webfont.ttf +0 -0
- package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/fonts/OpenSans-Light-webfont.ttf +0 -0
- package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/fonts/OpenSans-LightItalic-webfont.ttf +0 -0
- package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/fonts/OpenSans-Regular-webfont.ttf +0 -0
- package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/fonts/OpenSans-Semibold-webfont.ttf +0 -0
- package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/fonts/OpenSans-SemiboldItalic-webfont.ttf +0 -0
- package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/fonts/PatternFlyIcons-webfont.ttf +0 -0
- package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/fonts/fontawesome-webfont.eot +0 -0
- package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/fonts/fontawesome-webfont.svg +0 -2671
- package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/fonts/fontawesome-webfont.ttf +0 -0
- package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/fonts/fontawesome-webfont.woff +0 -0
- package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/fonts/fontawesome-webfont.woff2 +0 -0
- package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/fonts/glyphicons-halflings-regular.eot +0 -0
- package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/fonts/glyphicons-halflings-regular.svg +0 -288
- package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/fonts/glyphicons-halflings-regular.ttf +0 -0
- package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/fonts/glyphicons-halflings-regular.woff +0 -0
- package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/fonts/glyphicons-halflings-regular.woff2 +0 -0
- package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/jquery-ui/jquery-ui.min.css +0 -879
- package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/js/bootstrap-3.4.1.min.cache.js +0 -1498
- package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/js/gwtbootstrap3.js +0 -91
- package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/js/jquery-1.12.4.min.cache.js +0 -5007
- package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/org.kie.workbench.common.stunner.sw.KogitoSWEditor.devmode.js +0 -1
- package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/org.kie.workbench.common.stunner.sw.KogitoSWEditor.nocache.js +0 -27
- package/static/generated/envelope/diagram/org.kie.workbench.common.stunner.sw.KogitoSWEditor/uberfire-patternfly.css +0 -342
- package/static/generated/envelope/diagram.bundle.js +0 -1
- package/static/generated/envelope/editor.worker.js +0 -1
- package/static/generated/envelope/json.worker.js +0 -1
- package/static/generated/envelope/monaco-editor.chunk.js +0 -1
- package/static/generated/envelope/serverless-workflow-combined-editor-envelope.html +0 -10
- package/static/generated/envelope/serverless-workflow-diagram-editor-envelope.html +0 -10
- package/static/generated/envelope/serverless-workflow-text-editor-envelope.html +0 -10
- package/static/generated/envelope/text.bundle.js +0 -1
- package/static/generated/envelope/yaml.worker.worker.js +0 -22
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,40 @@
|
|
|
1
1
|
### Dependencies
|
|
2
2
|
|
|
3
|
+
## 6.0.0
|
|
4
|
+
|
|
5
|
+
### Major Changes
|
|
6
|
+
|
|
7
|
+
- ff929e2: feat(orchestrator): capturing the auth tokens from available SCM systems after user logsIn and then send it to backend-plugin.
|
|
8
|
+
|
|
9
|
+
### Minor Changes
|
|
10
|
+
|
|
11
|
+
- fc9ce7c: Backstage version bump to v1.37.1
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- 5214a15: Dev change only - use @janus-idp/cli 3.2.0 instead of 3.5.0
|
|
16
|
+
- 3ac726f: add workflow status (available/unavailable)
|
|
17
|
+
- fd078b4: Use upstream AuditorService instead of the Janus-specific AuditLogger.
|
|
18
|
+
- 2f33284: Update kie-tools, @janus/cli and Backstage supported version to the most recent ones.
|
|
19
|
+
- a9e5f32: Updated dependency `@openapitools/openapi-generator-cli` to `2.20.0`.
|
|
20
|
+
Updated dependency `prettier` to `3.5.3`.
|
|
21
|
+
Updated dependency `@redhat-developer/red-hat-developer-hub-theme` to `0.5.1`.
|
|
22
|
+
Updated dependency `@red-hat-developer-hub/backstage-plugin-theme` to `^0.6.0`.
|
|
23
|
+
Updated dependency `@janus-idp/cli` to `3.5.0`.
|
|
24
|
+
- 544c80a: Fix instance fetching to respect permissions
|
|
25
|
+
- Updated dependencies [2f33284]
|
|
26
|
+
- Updated dependencies [a9e5f32]
|
|
27
|
+
- Updated dependencies [fc9ce7c]
|
|
28
|
+
- @red-hat-developer-hub/backstage-plugin-orchestrator-common@1.27.0
|
|
29
|
+
|
|
30
|
+
## 5.2.3
|
|
31
|
+
|
|
32
|
+
### Patch Changes
|
|
33
|
+
|
|
34
|
+
- 691fd23: fix tests
|
|
35
|
+
- Updated dependencies [691fd23]
|
|
36
|
+
- @red-hat-developer-hub/backstage-plugin-orchestrator-common@1.26.2
|
|
37
|
+
|
|
3
38
|
## 5.2.2
|
|
4
39
|
|
|
5
40
|
### Patch Changes
|
package/dist/plugin.cjs.js
CHANGED
|
@@ -10,13 +10,13 @@ const orchestratorPlugin = backendPluginApi.createBackendPlugin({
|
|
|
10
10
|
env.registerInit({
|
|
11
11
|
deps: {
|
|
12
12
|
logger: backendPluginApi.coreServices.logger,
|
|
13
|
+
auditor: backendPluginApi.coreServices.auditor,
|
|
13
14
|
config: backendPluginApi.coreServices.rootConfig,
|
|
14
15
|
discovery: backendPluginApi.coreServices.discovery,
|
|
15
16
|
catalogApi: alpha.catalogServiceRef,
|
|
16
17
|
urlReader: backendPluginApi.coreServices.urlReader,
|
|
17
18
|
permissions: backendPluginApi.coreServices.permissions,
|
|
18
19
|
scheduler: backendPluginApi.coreServices.scheduler,
|
|
19
|
-
auth: backendPluginApi.coreServices.auth,
|
|
20
20
|
httpAuth: backendPluginApi.coreServices.httpAuth,
|
|
21
21
|
http: backendPluginApi.coreServices.httpRouter
|
|
22
22
|
},
|
package/dist/plugin.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.cjs.js","sources":["../src/plugin.ts"],"sourcesContent":["/*\n * Copyright
|
|
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;;;;"}
|
|
@@ -17,13 +17,13 @@ async function createRouter(args) {
|
|
|
17
17
|
return await router.createBackendRouter({
|
|
18
18
|
config: args.config,
|
|
19
19
|
logger: args.logger,
|
|
20
|
+
auditor: args.auditor,
|
|
20
21
|
discovery: args.discovery,
|
|
21
22
|
catalogApi: args.catalogApi,
|
|
22
23
|
urlReader: args.urlReader,
|
|
23
24
|
scheduler: args.scheduler,
|
|
24
25
|
permissions: args.permissions,
|
|
25
|
-
httpAuth: args.httpAuth
|
|
26
|
-
auth: args.auth
|
|
26
|
+
httpAuth: args.httpAuth
|
|
27
27
|
});
|
|
28
28
|
}
|
|
29
29
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../../src/routerWrapper/index.ts"],"sourcesContent":["/*\n * Copyright
|
|
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;;;;"}
|
|
@@ -148,7 +148,7 @@ class DataIndexService {
|
|
|
148
148
|
const { pagination, definitionIds, filter } = args;
|
|
149
149
|
if (pagination) pagination.sortField ??= constants.FETCH_PROCESS_INSTANCES_SORT_FIELD;
|
|
150
150
|
const processIdNotNullCondition = "processId: {isNull: false}";
|
|
151
|
-
const definitionIdsCondition = definitionIds ? `processId: {in: ${JSON.stringify(definitionIds)}}` : void 0;
|
|
151
|
+
const definitionIdsCondition = definitionIds && definitionIds.length > 0 ? `processId: {in: ${JSON.stringify(definitionIds)}}` : void 0;
|
|
152
152
|
const type = "ProcessInstance";
|
|
153
153
|
const filterCondition = filter ? filterBuilder.buildFilterCondition(
|
|
154
154
|
await this.inspectInputArgument(type),
|
|
@@ -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 = definitionIds\n ? `processId: {in: ${JSON.stringify(definitionIds)}}`\n : undefined;\n const type = 'ProcessInstance';\n const filterCondition = filter\n ? buildFilterCondition(\n await this.inspectInputArgument(type),\n type,\n filter,\n )\n : '';\n\n let whereClause = '';\n const conditions = [];\n\n if (processIdNotNullCondition) {\n conditions.push(`{${processIdNotNullCondition}}`);\n }\n\n if (definitionIdsCondition) {\n conditions.push(`{${definitionIdsCondition}}`);\n }\n\n if (filter) {\n conditions.push(`{${filterCondition}}`);\n }\n\n if (conditions.length === 0) {\n whereClause = processIdNotNullCondition;\n } else if (conditions.length === 1) {\n whereClause = conditions[0].slice(1, -1); // Remove the outer braces\n } else if (conditions.length > 1) {\n whereClause = `and: [${conditions.join(', ')}]`;\n }\n\n const graphQlQuery = buildGraphQlQuery({\n type: 'ProcessInstances',\n queryBody:\n 'id, processName, processId, businessKey, state, start, end, nodes { id }, variables, parentProcessInstance {id, processName, businessKey}',\n whereClause,\n pagination,\n });\n\n this.logger.debug(`GraphQL query: ${graphQlQuery}`);\n\n const result = await this.client.query<{\n ProcessInstances: ProcessInstance[];\n }>(graphQlQuery, {});\n this.logger.debug(\n `Fetch process instances result: ${JSON.stringify(result)}`,\n );\n\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 }\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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"}
|
|
@@ -52,13 +52,9 @@ class OrchestratorService {
|
|
|
52
52
|
return isWorkflowAvailable ? await this.dataIndexService.fetchInstanceVariables(instanceId) : void 0;
|
|
53
53
|
}
|
|
54
54
|
async fetchInstance(args) {
|
|
55
|
-
const { instanceId
|
|
55
|
+
const { instanceId } = args;
|
|
56
56
|
const instance = await this.dataIndexService.fetchInstance(instanceId);
|
|
57
|
-
|
|
58
|
-
instance?.processId,
|
|
59
|
-
cacheHandler
|
|
60
|
-
);
|
|
61
|
-
return isWorkflowAvailable ? instance : void 0;
|
|
57
|
+
return instance;
|
|
62
58
|
}
|
|
63
59
|
// SonataFlow Service Wrapper
|
|
64
60
|
async fetchWorkflowInfoOnService(args) {
|
|
@@ -110,12 +106,11 @@ class OrchestratorService {
|
|
|
110
106
|
return isWorkflowAvailable ? await this.sonataFlowService.retriggerInstance(args) : void 0;
|
|
111
107
|
}
|
|
112
108
|
async fetchWorkflowOverview(args) {
|
|
113
|
-
const { definitionId
|
|
114
|
-
const isWorkflowAvailable = this.workflowCacheService.isAvailable(
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
return isWorkflowAvailable ? await this.sonataFlowService.fetchWorkflowOverview(definitionId) : void 0;
|
|
109
|
+
const { definitionId } = args;
|
|
110
|
+
const isWorkflowAvailable = this.workflowCacheService.isAvailable(definitionId);
|
|
111
|
+
const overview = await this.sonataFlowService.fetchWorkflowOverview(definitionId);
|
|
112
|
+
if (overview) overview.isAvailable = isWorkflowAvailable;
|
|
113
|
+
return overview;
|
|
119
114
|
}
|
|
120
115
|
}
|
|
121
116
|
|
|
@@ -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 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, cacheHandler } = args;\n const instance = await this.dataIndexService.fetchInstance(instanceId);\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n instance?.processId,\n cacheHandler,\n );\n return isWorkflowAvailable ? instance : undefined;\n }\n\n // SonataFlow Service Wrapper\n\n public async fetchWorkflowInfoOnService(args: {\n definitionId: string;\n serviceUrl: string;\n cacheHandler?: CacheHandler;\n }): Promise<WorkflowInfo | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.sonataFlowService.fetchWorkflowInfoOnService(args)\n : undefined;\n }\n\n public async fetchWorkflowDefinition(args: {\n definitionId: string;\n cacheHandler?: CacheHandler;\n }): Promise<WorkflowDefinition | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.sonataFlowService.fetchWorkflowDefinition(definitionId)\n : undefined;\n }\n\n public async fetchWorkflowOverviews(args: {\n pagination?: Pagination;\n filter?: Filter;\n }): Promise<WorkflowOverview[] | undefined> {\n 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 businessKey?: string;\n cacheHandler?: CacheHandler;\n }): Promise<WorkflowExecutionResponse | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.sonataFlowService.executeWorkflow(args)\n : undefined;\n }\n\n public async retriggerWorkflow(args: {\n definitionId: string;\n instanceId: string;\n serviceUrl: string;\n cacheHandler?: CacheHandler;\n }): Promise<boolean | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.sonataFlowService.retriggerInstance(args)\n : undefined;\n }\n\n public async fetchWorkflowOverview(args: {\n definitionId: string;\n cacheHandler?: CacheHandler;\n }): Promise<WorkflowOverview | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.sonataFlowService.fetchWorkflowOverview(definitionId)\n : undefined;\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"OrchestratorService.cjs.js","sources":["../../src/service/OrchestratorService.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n AuthToken,\n Filter,\n ProcessInstance,\n ProcessInstanceVariables,\n WorkflowDefinition,\n WorkflowExecutionResponse,\n WorkflowInfo,\n WorkflowOverview,\n} from '@red-hat-developer-hub/backstage-plugin-orchestrator-common';\n\nimport { Pagination } from '../types/pagination';\nimport { DataIndexService } from './DataIndexService';\nimport { SonataFlowService } from './SonataFlowService';\nimport { CacheHandler, WorkflowCacheService } from './WorkflowCacheService';\n\nexport class OrchestratorService {\n constructor(\n private readonly sonataFlowService: SonataFlowService,\n private readonly dataIndexService: DataIndexService,\n private readonly workflowCacheService: WorkflowCacheService,\n ) {}\n\n // Data Index Service Wrapper\n public getWorkflowIds(): string[] {\n return this.workflowCacheService.definitionIds;\n }\n\n public async abortWorkflowInstance(args: {\n definitionId: string;\n instanceId: string;\n serviceUrl: string;\n cacheHandler?: CacheHandler;\n }): Promise<void> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.sonataFlowService.abortInstance(args)\n : undefined;\n }\n\n public async fetchWorkflowInfo(args: {\n definitionId: string;\n cacheHandler?: CacheHandler;\n }): Promise<WorkflowInfo | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.dataIndexService.fetchWorkflowInfo(definitionId)\n : undefined;\n }\n\n public async fetchInstances(args: {\n pagination?: Pagination;\n filter?: Filter;\n workflowIds?: string[];\n }): Promise<ProcessInstance[]> {\n const definitionIds = args.workflowIds\n ? args.workflowIds\n : this.workflowCacheService.definitionIds;\n return await this.dataIndexService.fetchInstances({\n definitionIds: definitionIds,\n pagination: args.pagination,\n filter: args.filter,\n });\n }\n\n public async fetchWorkflowSource(args: {\n definitionId: string;\n cacheHandler?: CacheHandler;\n }): Promise<string | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.dataIndexService.fetchWorkflowSource(definitionId)\n : undefined;\n }\n\n public async fetchInstanceVariables(args: {\n instanceId: string;\n cacheHandler?: CacheHandler;\n }): Promise<object | undefined> {\n const { instanceId, cacheHandler } = args;\n const definitionId =\n await this.dataIndexService.fetchDefinitionIdByInstanceId(instanceId);\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.dataIndexService.fetchInstanceVariables(instanceId)\n : undefined;\n }\n\n public async fetchInstance(args: {\n instanceId: string;\n cacheHandler?: CacheHandler;\n }): Promise<ProcessInstance | undefined> {\n const { instanceId } = args;\n const instance = await this.dataIndexService.fetchInstance(instanceId);\n return instance;\n }\n\n // SonataFlow Service Wrapper\n\n public async fetchWorkflowInfoOnService(args: {\n definitionId: string;\n serviceUrl: string;\n cacheHandler?: CacheHandler;\n }): Promise<WorkflowInfo | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.sonataFlowService.fetchWorkflowInfoOnService(args)\n : undefined;\n }\n\n public async fetchWorkflowDefinition(args: {\n definitionId: string;\n cacheHandler?: CacheHandler;\n }): Promise<WorkflowDefinition | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.sonataFlowService.fetchWorkflowDefinition(definitionId)\n : undefined;\n }\n\n public async fetchWorkflowOverviews(args: {\n pagination?: Pagination;\n filter?: Filter;\n }): Promise<WorkflowOverview[] | undefined> {\n const overviews = await this.sonataFlowService.fetchWorkflowOverviews({\n definitionIds: this.workflowCacheService.definitionIds?.concat(\n this.workflowCacheService.unavailableDefinitionIds,\n ),\n pagination: args.pagination,\n filter: args.filter,\n });\n\n return overviews?.map(overview => {\n const updatedOverview = overview;\n updatedOverview.isAvailable = this.workflowCacheService.isAvailable(\n updatedOverview.workflowId,\n );\n return updatedOverview;\n });\n }\n\n public async executeWorkflow(args: {\n definitionId: string;\n serviceUrl: string;\n inputData?: ProcessInstanceVariables;\n authTokens?: Array<AuthToken>;\n businessKey?: string;\n cacheHandler?: CacheHandler;\n }): Promise<WorkflowExecutionResponse | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.sonataFlowService.executeWorkflow(args)\n : undefined;\n }\n\n public async retriggerWorkflow(args: {\n definitionId: string;\n instanceId: string;\n serviceUrl: string;\n cacheHandler?: CacheHandler;\n }): Promise<boolean | undefined> {\n const { definitionId, cacheHandler } = args;\n const isWorkflowAvailable = this.workflowCacheService.isAvailable(\n definitionId,\n cacheHandler,\n );\n return isWorkflowAvailable\n ? await this.sonataFlowService.retriggerInstance(args)\n : undefined;\n }\n\n public async fetchWorkflowOverview(args: {\n definitionId: string;\n }): Promise<WorkflowOverview | undefined> {\n const { definitionId } = args;\n const isWorkflowAvailable =\n this.workflowCacheService.isAvailable(definitionId);\n const overview =\n await this.sonataFlowService.fetchWorkflowOverview(definitionId);\n if (overview) overview.isAvailable = isWorkflowAvailable; // workflow overview is avaiable but the workflow itself is not\n return overview;\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -52,10 +52,25 @@ class SonataFlowService {
|
|
|
52
52
|
}
|
|
53
53
|
async executeWorkflow(args) {
|
|
54
54
|
const urlToFetch = args.businessKey ? `${args.serviceUrl}/${args.definitionId}?businessKey=${args.businessKey}` : `${args.serviceUrl}/${args.definitionId}`;
|
|
55
|
+
const headers = {
|
|
56
|
+
"Content-Type": "application/json"
|
|
57
|
+
};
|
|
58
|
+
if (args.authTokens && Array.isArray(args.authTokens)) {
|
|
59
|
+
args.authTokens.forEach((tokenObj) => {
|
|
60
|
+
if (tokenObj.provider && tokenObj.token) {
|
|
61
|
+
const headerKey = `X-Authorization-${tokenObj.provider}`;
|
|
62
|
+
headers[headerKey] = String(tokenObj.token);
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
} else {
|
|
66
|
+
this.logger.debug(
|
|
67
|
+
"No authTokens provided or authTokens is not an array."
|
|
68
|
+
);
|
|
69
|
+
}
|
|
55
70
|
const response = await fetch(urlToFetch, {
|
|
56
71
|
method: "POST",
|
|
57
72
|
body: JSON.stringify(args.inputData || {}),
|
|
58
|
-
headers
|
|
73
|
+
headers
|
|
59
74
|
});
|
|
60
75
|
const json = await response.json();
|
|
61
76
|
if (json.id) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SonataFlowService.cjs.js","sources":["../../src/service/SonataFlowService.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { LoggerService } from '@backstage/backend-plugin-api';\n\nimport {\n extractWorkflowFormat,\n Filter,\n fromWorkflowSource,\n getWorkflowCategory,\n ProcessInstanceStateValues,\n ProcessInstanceVariables,\n WorkflowDefinition,\n WorkflowExecutionResponse,\n WorkflowInfo,\n WorkflowOverview,\n} from '@red-hat-developer-hub/backstage-plugin-orchestrator-common';\n\nimport { Pagination } from '../types/pagination';\nimport { DataIndexService } from './DataIndexService';\n\nexport class SonataFlowService {\n constructor(\n private readonly dataIndexService: DataIndexService,\n private readonly logger: LoggerService,\n ) {}\n\n public async fetchWorkflowInfoOnService(args: {\n definitionId: string;\n serviceUrl: string;\n }): Promise<WorkflowInfo | undefined> {\n const urlToFetch = `${args.serviceUrl}/management/processes/${args.definitionId}`;\n const response = await fetch(urlToFetch);\n const jsonResponse = await response.json();\n if (response.ok) {\n this.logger.debug(\n `Fetch workflow info result: ${JSON.stringify(jsonResponse)}`,\n );\n return jsonResponse;\n }\n this.logger.error(\n `Fetch workflow info failed with: ${JSON.stringify(jsonResponse)}`,\n );\n throw new Error(\n await this.createPrefixFetchErrorMessage(\n urlToFetch,\n response,\n jsonResponse,\n ),\n );\n }\n\n public async fetchWorkflowDefinition(\n definitionId: string,\n ): Promise<WorkflowDefinition | undefined> {\n const source =\n await this.dataIndexService.fetchWorkflowSource(definitionId);\n if (source) {\n return fromWorkflowSource(source);\n }\n return undefined;\n }\n\n public async fetchWorkflowOverviews(args: {\n definitionIds?: string[];\n pagination?: Pagination;\n filter?: Filter;\n }): Promise<WorkflowOverview[] | undefined> {\n const { definitionIds, pagination, filter } = args;\n const workflowInfos = await this.dataIndexService.fetchWorkflowInfos({\n definitionIds,\n pagination,\n filter,\n });\n if (!workflowInfos?.length) {\n return [];\n }\n const items = await Promise.all(\n workflowInfos\n .filter(info => info.source)\n .map(info => this.fetchWorkflowOverviewBySource(info.source!)),\n );\n return items.filter((item): item is WorkflowOverview => !!item);\n }\n\n public async executeWorkflow(args: {\n definitionId: string;\n serviceUrl: string;\n inputData?: ProcessInstanceVariables;\n businessKey?: string;\n }): Promise<WorkflowExecutionResponse | undefined> {\n const urlToFetch = args.businessKey\n ? `${args.serviceUrl}/${args.definitionId}?businessKey=${args.businessKey}`\n : `${args.serviceUrl}/${args.definitionId}`;\n\n const response = await fetch(urlToFetch, {\n method: 'POST',\n body: JSON.stringify(args.inputData || {}),\n headers: { 'content-type': 'application/json' },\n });\n\n const json = await response.json();\n if (json.id) {\n this.logger.debug(\n `Execute workflow successful. Response: ${JSON.stringify(json)}`,\n );\n return json;\n } else if (!response.ok) {\n const errorMessage = await this.createPrefixFetchErrorMessage(\n urlToFetch,\n response,\n json,\n 'POST',\n );\n this.logger.error(\n `Execute workflow failed. Response: ${JSON.stringify(json)}`,\n );\n throw new Error(errorMessage);\n } else {\n this.logger.error(\n `Execute workflow did not return a workflow instance ID. Response: ${JSON.stringify(\n json,\n )}`,\n );\n throw new Error('Execute workflow did not return a workflow instance ID');\n }\n }\n\n public async retriggerInstance(args: {\n definitionId: string;\n instanceId: string;\n serviceUrl: string;\n }): Promise<boolean> {\n const urlToFetch = `${args.serviceUrl}/management/processes/${args.definitionId}/instances/${args.instanceId}/retrigger`;\n\n const response = await fetch(urlToFetch, {\n method: 'POST',\n });\n\n if (!response.ok) {\n const json = await response.json();\n this.logger.error(`Retrigger failed with: ${JSON.stringify(json)}`);\n throw new Error(\n `${await this.createPrefixFetchErrorMessage(\n urlToFetch,\n response,\n json,\n 'POST',\n )}`,\n );\n }\n\n return true;\n }\n\n public async abortInstance(args: {\n definitionId: string;\n instanceId: string;\n serviceUrl: string;\n }): Promise<void> {\n const urlToFetch = `${args.serviceUrl}/management/processes/${args.definitionId}/instances/${args.instanceId}`;\n\n const response = await fetch(urlToFetch, {\n method: 'DELETE',\n });\n\n if (!response.ok) {\n const json = await response.json();\n this.logger.error(`Abort failed with: ${JSON.stringify(json)}`);\n throw new Error(\n `${await this.createPrefixFetchErrorMessage(\n urlToFetch,\n response,\n json,\n 'DELETE',\n )}`,\n );\n }\n }\n\n public async fetchWorkflowOverview(\n definitionId: string,\n ): Promise<WorkflowOverview | undefined> {\n const source =\n await this.dataIndexService.fetchWorkflowSource(definitionId);\n if (!source) {\n this.logger.debug(`Workflow source not found: ${definitionId}`);\n return undefined;\n }\n return await this.fetchWorkflowOverviewBySource(source);\n }\n\n private async fetchWorkflowOverviewBySource(\n source: string,\n ): Promise<WorkflowOverview | undefined> {\n let lastTriggered: Date = new Date(0);\n let lastRunStatus: ProcessInstanceStateValues | undefined;\n let lastRunId: string | undefined;\n const definition = fromWorkflowSource(source);\n\n const processInstances =\n await this.dataIndexService.fetchInstancesByDefinitionId({\n definitionId: definition.id,\n limit: 1,\n offset: 0,\n });\n\n const pInstance = processInstances[0];\n\n if (pInstance?.start) {\n lastRunId = pInstance.id;\n lastTriggered = new Date(pInstance.start);\n lastRunStatus = pInstance.state;\n }\n\n return {\n workflowId: definition.id,\n name: definition.name,\n format: extractWorkflowFormat(source),\n lastRunId,\n lastTriggeredMs: lastTriggered.getTime(),\n lastRunStatus,\n category: getWorkflowCategory(definition),\n description: definition.description,\n };\n }\n\n public async pingWorkflowService(args: {\n definitionId: string;\n serviceUrl: string;\n }): Promise<boolean> {\n const urlToFetch = `${args.serviceUrl}/management/processes/${args.definitionId}`;\n const response = await fetch(urlToFetch);\n return response.ok;\n }\n\n public async createPrefixFetchErrorMessage(\n urlToFetch: string,\n response: Response,\n jsonResponse: any,\n httpMethod = 'GET',\n ): Promise<string> {\n const errorInfo = [];\n let errorMsg = `Request ${httpMethod} ${urlToFetch} failed with: StatusCode: ${response.status}`;\n\n if (response.statusText) {\n errorInfo.push(`StatusText: ${response.statusText}`);\n }\n if (jsonResponse?.details) {\n errorInfo.push(`Details: ${jsonResponse?.details}`);\n }\n if (jsonResponse?.stack) {\n errorInfo.push(`Stack: ${jsonResponse?.stack}`);\n }\n if (jsonResponse?.message) {\n errorInfo.push(`Message: ${jsonResponse?.message}`);\n }\n if (jsonResponse?.failedNodeId) {\n errorInfo.push(`Failed Node Id: ${jsonResponse?.failedNodeId}`);\n }\n if (errorInfo.length > 0) {\n errorMsg += ` ${errorInfo.join(', ')}`;\n } else {\n errorMsg += ' Unexpected error';\n }\n\n return errorMsg;\n }\n}\n"],"names":["fromWorkflowSource","extractWorkflowFormat","getWorkflowCategory"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SonataFlowService.cjs.js","sources":["../../src/service/SonataFlowService.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { LoggerService } from '@backstage/backend-plugin-api';\n\nimport {\n AuthToken,\n extractWorkflowFormat,\n Filter,\n fromWorkflowSource,\n getWorkflowCategory,\n ProcessInstanceStateValues,\n ProcessInstanceVariables,\n WorkflowDefinition,\n WorkflowExecutionResponse,\n WorkflowInfo,\n WorkflowOverview,\n} from '@red-hat-developer-hub/backstage-plugin-orchestrator-common';\n\nimport { Pagination } from '../types/pagination';\nimport { DataIndexService } from './DataIndexService';\n\nexport class SonataFlowService {\n constructor(\n private readonly dataIndexService: DataIndexService,\n private readonly logger: LoggerService,\n ) {}\n\n public async fetchWorkflowInfoOnService(args: {\n definitionId: string;\n serviceUrl: string;\n }): Promise<WorkflowInfo | undefined> {\n const urlToFetch = `${args.serviceUrl}/management/processes/${args.definitionId}`;\n const response = await fetch(urlToFetch);\n const jsonResponse = await response.json();\n if (response.ok) {\n this.logger.debug(\n `Fetch workflow info result: ${JSON.stringify(jsonResponse)}`,\n );\n return jsonResponse;\n }\n this.logger.error(\n `Fetch workflow info failed with: ${JSON.stringify(jsonResponse)}`,\n );\n throw new Error(\n await this.createPrefixFetchErrorMessage(\n urlToFetch,\n response,\n jsonResponse,\n ),\n );\n }\n\n public async fetchWorkflowDefinition(\n definitionId: string,\n ): Promise<WorkflowDefinition | undefined> {\n const source =\n await this.dataIndexService.fetchWorkflowSource(definitionId);\n if (source) {\n return fromWorkflowSource(source);\n }\n return undefined;\n }\n\n public async fetchWorkflowOverviews(args: {\n definitionIds?: string[];\n pagination?: Pagination;\n filter?: Filter;\n }): Promise<WorkflowOverview[] | undefined> {\n const { definitionIds, pagination, filter } = args;\n const workflowInfos = await this.dataIndexService.fetchWorkflowInfos({\n definitionIds,\n pagination,\n filter,\n });\n if (!workflowInfos?.length) {\n return [];\n }\n const items = await Promise.all(\n workflowInfos\n .filter(info => info.source)\n .map(info => this.fetchWorkflowOverviewBySource(info.source!)),\n );\n return items.filter((item): item is WorkflowOverview => !!item);\n }\n\n public async executeWorkflow(args: {\n definitionId: string;\n serviceUrl: string;\n inputData?: ProcessInstanceVariables;\n authTokens?: Array<AuthToken>;\n businessKey?: string;\n }): Promise<WorkflowExecutionResponse | undefined> {\n const urlToFetch = args.businessKey\n ? `${args.serviceUrl}/${args.definitionId}?businessKey=${args.businessKey}`\n : `${args.serviceUrl}/${args.definitionId}`;\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n\n // Add X-Authentication headers from authTokens\n if (args.authTokens && Array.isArray(args.authTokens)) {\n args.authTokens.forEach(tokenObj => {\n if (tokenObj.provider && tokenObj.token) {\n const headerKey = `X-Authorization-${tokenObj.provider}`;\n headers[headerKey] = String(tokenObj.token); // Ensure token is a string\n }\n });\n } else {\n this.logger.debug(\n 'No authTokens provided or authTokens is not an array.',\n );\n }\n\n const response = await fetch(urlToFetch, {\n method: 'POST',\n body: JSON.stringify(args.inputData || {}),\n headers,\n });\n\n const json = await response.json();\n if (json.id) {\n this.logger.debug(\n `Execute workflow successful. Response: ${JSON.stringify(json)}`,\n );\n return json;\n } else if (!response.ok) {\n const errorMessage = await this.createPrefixFetchErrorMessage(\n urlToFetch,\n response,\n json,\n 'POST',\n );\n this.logger.error(\n `Execute workflow failed. Response: ${JSON.stringify(json)}`,\n );\n throw new Error(errorMessage);\n } else {\n this.logger.error(\n `Execute workflow did not return a workflow instance ID. Response: ${JSON.stringify(\n json,\n )}`,\n );\n throw new Error('Execute workflow did not return a workflow instance ID');\n }\n }\n\n public async retriggerInstance(args: {\n definitionId: string;\n instanceId: string;\n serviceUrl: string;\n }): Promise<boolean> {\n const urlToFetch = `${args.serviceUrl}/management/processes/${args.definitionId}/instances/${args.instanceId}/retrigger`;\n\n const response = await fetch(urlToFetch, {\n method: 'POST',\n });\n\n if (!response.ok) {\n const json = await response.json();\n this.logger.error(`Retrigger failed with: ${JSON.stringify(json)}`);\n throw new Error(\n `${await this.createPrefixFetchErrorMessage(\n urlToFetch,\n response,\n json,\n 'POST',\n )}`,\n );\n }\n\n return true;\n }\n\n public async abortInstance(args: {\n definitionId: string;\n instanceId: string;\n serviceUrl: string;\n }): Promise<void> {\n const urlToFetch = `${args.serviceUrl}/management/processes/${args.definitionId}/instances/${args.instanceId}`;\n\n const response = await fetch(urlToFetch, {\n method: 'DELETE',\n });\n\n if (!response.ok) {\n const json = await response.json();\n this.logger.error(`Abort failed with: ${JSON.stringify(json)}`);\n throw new Error(\n `${await this.createPrefixFetchErrorMessage(\n urlToFetch,\n response,\n json,\n 'DELETE',\n )}`,\n );\n }\n }\n\n public async fetchWorkflowOverview(\n definitionId: string,\n ): Promise<WorkflowOverview | undefined> {\n const source =\n await this.dataIndexService.fetchWorkflowSource(definitionId);\n if (!source) {\n this.logger.debug(`Workflow source not found: ${definitionId}`);\n return undefined;\n }\n return await this.fetchWorkflowOverviewBySource(source);\n }\n\n private async fetchWorkflowOverviewBySource(\n source: string,\n ): Promise<WorkflowOverview | undefined> {\n let lastTriggered: Date = new Date(0);\n let lastRunStatus: ProcessInstanceStateValues | undefined;\n let lastRunId: string | undefined;\n const definition = fromWorkflowSource(source);\n\n const processInstances =\n await this.dataIndexService.fetchInstancesByDefinitionId({\n definitionId: definition.id,\n limit: 1,\n offset: 0,\n });\n\n const pInstance = processInstances[0];\n\n if (pInstance?.start) {\n lastRunId = pInstance.id;\n lastTriggered = new Date(pInstance.start);\n lastRunStatus = pInstance.state;\n }\n\n return {\n workflowId: definition.id,\n name: definition.name,\n format: extractWorkflowFormat(source),\n lastRunId,\n lastTriggeredMs: lastTriggered.getTime(),\n lastRunStatus,\n category: getWorkflowCategory(definition),\n description: definition.description,\n };\n }\n\n public async pingWorkflowService(args: {\n definitionId: string;\n serviceUrl: string;\n }): Promise<boolean> {\n const urlToFetch = `${args.serviceUrl}/management/processes/${args.definitionId}`;\n const response = await fetch(urlToFetch);\n return response.ok;\n }\n\n public async createPrefixFetchErrorMessage(\n urlToFetch: string,\n response: Response,\n jsonResponse: any,\n httpMethod = 'GET',\n ): Promise<string> {\n const errorInfo = [];\n let errorMsg = `Request ${httpMethod} ${urlToFetch} failed with: StatusCode: ${response.status}`;\n\n if (response.statusText) {\n errorInfo.push(`StatusText: ${response.statusText}`);\n }\n if (jsonResponse?.details) {\n errorInfo.push(`Details: ${jsonResponse?.details}`);\n }\n if (jsonResponse?.stack) {\n errorInfo.push(`Stack: ${jsonResponse?.stack}`);\n }\n if (jsonResponse?.message) {\n errorInfo.push(`Message: ${jsonResponse?.message}`);\n }\n if (jsonResponse?.failedNodeId) {\n errorInfo.push(`Failed Node Id: ${jsonResponse?.failedNodeId}`);\n }\n if (errorInfo.length > 0) {\n errorMsg += ` ${errorInfo.join(', ')}`;\n } else {\n errorMsg += ' Unexpected error';\n }\n\n return errorMsg;\n }\n}\n"],"names":["fromWorkflowSource","extractWorkflowFormat","getWorkflowCategory"],"mappings":"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"}
|
|
@@ -32,8 +32,7 @@ class V2 {
|
|
|
32
32
|
}
|
|
33
33
|
async getWorkflowOverviewById(workflowId) {
|
|
34
34
|
const overview = await this.orchestratorService.fetchWorkflowOverview({
|
|
35
|
-
definitionId: workflowId
|
|
36
|
-
cacheHandler: "throw"
|
|
35
|
+
definitionId: workflowId
|
|
37
36
|
});
|
|
38
37
|
if (!overview) {
|
|
39
38
|
throw new Error(`Couldn't fetch workflow overview for ${workflowId}`);
|
|
@@ -103,6 +102,7 @@ class V2 {
|
|
|
103
102
|
const executionResponse = await this.orchestratorService.executeWorkflow({
|
|
104
103
|
definitionId: workflowId,
|
|
105
104
|
inputData: executeWorkflowRequestDTO.inputData,
|
|
105
|
+
authTokens: executeWorkflowRequestDTO.authTokens,
|
|
106
106
|
serviceUrl: definition.serviceUrl,
|
|
107
107
|
businessKey,
|
|
108
108
|
cacheHandler: "throw"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"v2.cjs.js","sources":["../../../src/service/api/v2.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ParsedRequest } from 'openapi-backend';\n\nimport {\n AssessedProcessInstanceDTO,\n ExecuteWorkflowRequestDTO,\n ExecuteWorkflowResponseDTO,\n Filter,\n ProcessInstance,\n ProcessInstanceListResultDTO,\n ProcessInstanceState,\n ProcessInstanceVariables,\n WorkflowDTO,\n WorkflowInfo,\n WorkflowOverviewDTO,\n WorkflowOverviewListResultDTO,\n WorkflowRunStatusDTO,\n} from '@red-hat-developer-hub/backstage-plugin-orchestrator-common';\n\nimport { Pagination } from '../../types/pagination';\nimport { retryAsyncFunction } from '../Helper';\nimport { OrchestratorService } from '../OrchestratorService';\nimport {\n mapToExecuteWorkflowResponseDTO,\n mapToProcessInstanceDTO,\n mapToWorkflowDTO,\n mapToWorkflowOverviewDTO,\n mapToWorkflowRunStatusDTO,\n} from './mapping/V2Mappings';\n\nconst FETCH_INSTANCE_MAX_ATTEMPTS = 10;\nconst FETCH_INSTANCE_RETRY_DELAY_MS = 1000;\n\nexport class V2 {\n constructor(private readonly orchestratorService: OrchestratorService) {}\n\n public async getWorkflowsOverview(\n pagination: Pagination,\n filter?: Filter,\n ): Promise<WorkflowOverviewListResultDTO> {\n const overviews = await this.orchestratorService.fetchWorkflowOverviews({\n pagination,\n filter,\n });\n if (!overviews) {\n throw new Error(\"Couldn't fetch workflow overviews\");\n }\n const result: WorkflowOverviewListResultDTO = {\n overviews: overviews.map(item => mapToWorkflowOverviewDTO(item)),\n paginationInfo: {\n pageSize: pagination.limit,\n offset: pagination.offset,\n },\n };\n return result;\n }\n\n public getWorkflowIds(): string[] {\n return this.orchestratorService.getWorkflowIds();\n }\n\n public async getWorkflowOverviewById(\n workflowId: string,\n ): Promise<WorkflowOverviewDTO> {\n const overview = await this.orchestratorService.fetchWorkflowOverview({\n definitionId: workflowId,\n cacheHandler: 'throw',\n });\n\n if (!overview) {\n throw new Error(`Couldn't fetch workflow overview for ${workflowId}`);\n }\n return mapToWorkflowOverviewDTO(overview);\n }\n\n public async getWorkflowById(workflowId: string): Promise<WorkflowDTO> {\n const resultV1 = await this.getWorkflowSourceById(workflowId);\n return mapToWorkflowDTO(resultV1);\n }\n\n public async getWorkflowSourceById(workflowId: string): Promise<string> {\n const source = await this.orchestratorService.fetchWorkflowSource({\n definitionId: workflowId,\n cacheHandler: 'throw',\n });\n\n if (!source) {\n throw new Error(`Couldn't fetch workflow source for ${workflowId}`);\n }\n\n return source;\n }\n\n public async getInstances(\n pagination?: Pagination,\n filter?: Filter,\n workflowIds?: string[],\n ): Promise<ProcessInstanceListResultDTO> {\n const instances = await this.orchestratorService.fetchInstances({\n pagination,\n filter,\n workflowIds,\n });\n\n const result: ProcessInstanceListResultDTO = {\n items: instances?.map(mapToProcessInstanceDTO),\n paginationInfo: {\n pageSize: pagination?.limit,\n offset: pagination?.offset,\n },\n };\n return result;\n }\n\n public async getInstanceById(\n instanceId: string,\n includeAssessment: boolean = false,\n ): Promise<AssessedProcessInstanceDTO> {\n const instance = await this.orchestratorService.fetchInstance({\n instanceId,\n cacheHandler: 'throw',\n });\n\n if (!instance) {\n throw new Error(`Couldn't fetch process instance ${instanceId}`);\n }\n\n let assessedByInstance: ProcessInstance | undefined;\n\n if (includeAssessment && instance.businessKey) {\n assessedByInstance = await this.orchestratorService.fetchInstance({\n instanceId: instance.businessKey,\n cacheHandler: 'throw',\n });\n }\n\n return {\n instance: mapToProcessInstanceDTO(instance),\n assessedBy: assessedByInstance\n ? mapToProcessInstanceDTO(assessedByInstance)\n : undefined,\n };\n }\n\n public async executeWorkflow(\n executeWorkflowRequestDTO: ExecuteWorkflowRequestDTO,\n workflowId: string,\n businessKey: string | undefined,\n ): Promise<ExecuteWorkflowResponseDTO> {\n const definition = await this.orchestratorService.fetchWorkflowInfo({\n definitionId: workflowId,\n cacheHandler: 'throw',\n });\n if (!definition) {\n throw new Error(`Couldn't fetch workflow definition for ${workflowId}`);\n }\n if (!definition.serviceUrl) {\n throw new Error(`ServiceURL is not defined for workflow ${workflowId}`);\n }\n const executionResponse = await this.orchestratorService.executeWorkflow({\n definitionId: workflowId,\n inputData:\n executeWorkflowRequestDTO.inputData as ProcessInstanceVariables,\n serviceUrl: definition.serviceUrl,\n businessKey,\n cacheHandler: 'throw',\n });\n\n if (!executionResponse) {\n throw new Error(`Couldn't execute workflow ${workflowId}`);\n }\n\n // Making sure the instance data is available before returning\n await retryAsyncFunction({\n asyncFn: () =>\n this.orchestratorService.fetchInstance({\n instanceId: executionResponse.id,\n cacheHandler: 'throw',\n }),\n maxAttempts: FETCH_INSTANCE_MAX_ATTEMPTS,\n delayMs: FETCH_INSTANCE_RETRY_DELAY_MS,\n });\n\n if (!executionResponse) {\n throw new Error('Error executing workflow with id ${workflowId}');\n }\n\n return mapToExecuteWorkflowResponseDTO(workflowId, executionResponse);\n }\n\n public async retriggerInstance(\n workflowId: string,\n instanceId: string,\n ): Promise<void> {\n const definition = await this.orchestratorService.fetchWorkflowInfo({\n definitionId: workflowId,\n cacheHandler: 'throw',\n });\n if (!definition) {\n throw new Error(`Couldn't fetch workflow definition for ${workflowId}`);\n }\n if (!definition.serviceUrl) {\n throw new Error(`ServiceURL is not defined for workflow ${workflowId}`);\n }\n const response = await this.orchestratorService.retriggerWorkflow({\n definitionId: workflowId,\n instanceId: instanceId,\n serviceUrl: definition.serviceUrl,\n cacheHandler: 'throw',\n });\n\n if (!response) {\n throw new Error(\n `Couldn't retrigger instance ${instanceId} of workflow ${workflowId}`,\n );\n }\n }\n\n public async abortWorkflow(\n workflowId: string,\n instanceId: string,\n ): Promise<string> {\n const definition = await this.orchestratorService.fetchWorkflowInfo({\n definitionId: workflowId,\n cacheHandler: 'throw',\n });\n if (!definition) {\n throw new Error(`Couldn't fetch workflow definition for ${workflowId}`);\n }\n if (!definition.serviceUrl) {\n throw new Error(`ServiceURL is not defined for workflow ${workflowId}`);\n }\n await this.orchestratorService.abortWorkflowInstance({\n definitionId: workflowId,\n instanceId: instanceId,\n serviceUrl: definition.serviceUrl,\n cacheHandler: 'throw',\n });\n return `Workflow instance ${instanceId} successfully aborted`;\n }\n\n public async getWorkflowStatuses(): Promise<WorkflowRunStatusDTO[]> {\n return [\n ProcessInstanceState.Active,\n ProcessInstanceState.Error,\n ProcessInstanceState.Completed,\n ProcessInstanceState.Aborted,\n ProcessInstanceState.Suspended,\n ProcessInstanceState.Pending,\n ].map(status => mapToWorkflowRunStatusDTO(status));\n }\n\n public async getWorkflowInputSchemaById(\n workflowId: string,\n serviceUrl: string,\n ): Promise<WorkflowInfo | undefined> {\n return this.orchestratorService.fetchWorkflowInfoOnService({\n definitionId: workflowId,\n serviceUrl: serviceUrl,\n cacheHandler: 'throw',\n });\n }\n\n public extractQueryParam(\n req: ParsedRequest,\n key: string,\n ): string | undefined {\n return req.query[key] as string | undefined;\n }\n}\n"],"names":["mapToWorkflowOverviewDTO","mapToWorkflowDTO","mapToProcessInstanceDTO","retryAsyncFunction","mapToExecuteWorkflowResponseDTO","ProcessInstanceState","mapToWorkflowRunStatusDTO"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"v2.cjs.js","sources":["../../../src/service/api/v2.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ParsedRequest } from 'openapi-backend';\n\nimport {\n AssessedProcessInstanceDTO,\n AuthToken,\n ExecuteWorkflowRequestDTO,\n ExecuteWorkflowResponseDTO,\n Filter,\n ProcessInstance,\n ProcessInstanceListResultDTO,\n ProcessInstanceState,\n ProcessInstanceVariables,\n WorkflowDTO,\n WorkflowInfo,\n WorkflowOverviewDTO,\n WorkflowOverviewListResultDTO,\n WorkflowRunStatusDTO,\n} from '@red-hat-developer-hub/backstage-plugin-orchestrator-common';\n\nimport { Pagination } from '../../types/pagination';\nimport { retryAsyncFunction } from '../Helper';\nimport { OrchestratorService } from '../OrchestratorService';\nimport {\n mapToExecuteWorkflowResponseDTO,\n mapToProcessInstanceDTO,\n mapToWorkflowDTO,\n mapToWorkflowOverviewDTO,\n mapToWorkflowRunStatusDTO,\n} from './mapping/V2Mappings';\n\nconst FETCH_INSTANCE_MAX_ATTEMPTS = 10;\nconst FETCH_INSTANCE_RETRY_DELAY_MS = 1000;\n\nexport class V2 {\n constructor(private readonly orchestratorService: OrchestratorService) {}\n\n public async getWorkflowsOverview(\n pagination: Pagination,\n filter?: Filter,\n ): Promise<WorkflowOverviewListResultDTO> {\n const overviews = await this.orchestratorService.fetchWorkflowOverviews({\n pagination,\n filter,\n });\n if (!overviews) {\n throw new Error(\"Couldn't fetch workflow overviews\");\n }\n const result: WorkflowOverviewListResultDTO = {\n overviews: overviews.map(item => mapToWorkflowOverviewDTO(item)),\n paginationInfo: {\n pageSize: pagination.limit,\n offset: pagination.offset,\n },\n };\n return result;\n }\n\n public getWorkflowIds(): string[] {\n return this.orchestratorService.getWorkflowIds();\n }\n\n public async getWorkflowOverviewById(\n workflowId: string,\n ): Promise<WorkflowOverviewDTO> {\n const overview = await this.orchestratorService.fetchWorkflowOverview({\n definitionId: workflowId,\n });\n\n if (!overview) {\n throw new Error(`Couldn't fetch workflow overview for ${workflowId}`);\n }\n return mapToWorkflowOverviewDTO(overview);\n }\n\n public async getWorkflowById(workflowId: string): Promise<WorkflowDTO> {\n const resultV1 = await this.getWorkflowSourceById(workflowId);\n return mapToWorkflowDTO(resultV1);\n }\n\n public async getWorkflowSourceById(workflowId: string): Promise<string> {\n const source = await this.orchestratorService.fetchWorkflowSource({\n definitionId: workflowId,\n cacheHandler: 'throw',\n });\n\n if (!source) {\n throw new Error(`Couldn't fetch workflow source for ${workflowId}`);\n }\n\n return source;\n }\n\n public async getInstances(\n pagination?: Pagination,\n filter?: Filter,\n workflowIds?: string[],\n ): Promise<ProcessInstanceListResultDTO> {\n const instances = await this.orchestratorService.fetchInstances({\n pagination,\n filter,\n workflowIds,\n });\n\n const result: ProcessInstanceListResultDTO = {\n items: instances?.map(mapToProcessInstanceDTO),\n paginationInfo: {\n pageSize: pagination?.limit,\n offset: pagination?.offset,\n },\n };\n return result;\n }\n\n public async getInstanceById(\n instanceId: string,\n includeAssessment: boolean = false,\n ): Promise<AssessedProcessInstanceDTO> {\n const instance = await this.orchestratorService.fetchInstance({\n instanceId,\n cacheHandler: 'throw',\n });\n\n if (!instance) {\n throw new Error(`Couldn't fetch process instance ${instanceId}`);\n }\n\n let assessedByInstance: ProcessInstance | undefined;\n\n if (includeAssessment && instance.businessKey) {\n assessedByInstance = await this.orchestratorService.fetchInstance({\n instanceId: instance.businessKey,\n cacheHandler: 'throw',\n });\n }\n\n return {\n instance: mapToProcessInstanceDTO(instance),\n assessedBy: assessedByInstance\n ? mapToProcessInstanceDTO(assessedByInstance)\n : undefined,\n };\n }\n\n public async executeWorkflow(\n executeWorkflowRequestDTO: ExecuteWorkflowRequestDTO,\n workflowId: string,\n businessKey: string | undefined,\n ): Promise<ExecuteWorkflowResponseDTO> {\n const definition = await this.orchestratorService.fetchWorkflowInfo({\n definitionId: workflowId,\n cacheHandler: 'throw',\n });\n if (!definition) {\n throw new Error(`Couldn't fetch workflow definition for ${workflowId}`);\n }\n if (!definition.serviceUrl) {\n throw new Error(`ServiceURL is not defined for workflow ${workflowId}`);\n }\n const executionResponse = await this.orchestratorService.executeWorkflow({\n definitionId: workflowId,\n inputData:\n executeWorkflowRequestDTO.inputData as ProcessInstanceVariables,\n authTokens: executeWorkflowRequestDTO.authTokens as Array<AuthToken>,\n serviceUrl: definition.serviceUrl,\n businessKey,\n cacheHandler: 'throw',\n });\n\n if (!executionResponse) {\n throw new Error(`Couldn't execute workflow ${workflowId}`);\n }\n\n // Making sure the instance data is available before returning\n await retryAsyncFunction({\n asyncFn: () =>\n this.orchestratorService.fetchInstance({\n instanceId: executionResponse.id,\n cacheHandler: 'throw',\n }),\n maxAttempts: FETCH_INSTANCE_MAX_ATTEMPTS,\n delayMs: FETCH_INSTANCE_RETRY_DELAY_MS,\n });\n\n if (!executionResponse) {\n throw new Error('Error executing workflow with id ${workflowId}');\n }\n\n return mapToExecuteWorkflowResponseDTO(workflowId, executionResponse);\n }\n\n public async retriggerInstance(\n workflowId: string,\n instanceId: string,\n ): Promise<void> {\n const definition = await this.orchestratorService.fetchWorkflowInfo({\n definitionId: workflowId,\n cacheHandler: 'throw',\n });\n if (!definition) {\n throw new Error(`Couldn't fetch workflow definition for ${workflowId}`);\n }\n if (!definition.serviceUrl) {\n throw new Error(`ServiceURL is not defined for workflow ${workflowId}`);\n }\n const response = await this.orchestratorService.retriggerWorkflow({\n definitionId: workflowId,\n instanceId: instanceId,\n serviceUrl: definition.serviceUrl,\n cacheHandler: 'throw',\n });\n\n if (!response) {\n throw new Error(\n `Couldn't retrigger instance ${instanceId} of workflow ${workflowId}`,\n );\n }\n }\n\n public async abortWorkflow(\n workflowId: string,\n instanceId: string,\n ): Promise<string> {\n const definition = await this.orchestratorService.fetchWorkflowInfo({\n definitionId: workflowId,\n cacheHandler: 'throw',\n });\n if (!definition) {\n throw new Error(`Couldn't fetch workflow definition for ${workflowId}`);\n }\n if (!definition.serviceUrl) {\n throw new Error(`ServiceURL is not defined for workflow ${workflowId}`);\n }\n await this.orchestratorService.abortWorkflowInstance({\n definitionId: workflowId,\n instanceId: instanceId,\n serviceUrl: definition.serviceUrl,\n cacheHandler: 'throw',\n });\n return `Workflow instance ${instanceId} successfully aborted`;\n }\n\n public async getWorkflowStatuses(): Promise<WorkflowRunStatusDTO[]> {\n return [\n ProcessInstanceState.Active,\n ProcessInstanceState.Error,\n ProcessInstanceState.Completed,\n ProcessInstanceState.Aborted,\n ProcessInstanceState.Suspended,\n ProcessInstanceState.Pending,\n ].map(status => mapToWorkflowRunStatusDTO(status));\n }\n\n public async getWorkflowInputSchemaById(\n workflowId: string,\n serviceUrl: string,\n ): Promise<WorkflowInfo | undefined> {\n return this.orchestratorService.fetchWorkflowInfoOnService({\n definitionId: workflowId,\n serviceUrl: serviceUrl,\n cacheHandler: 'throw',\n });\n }\n\n public extractQueryParam(\n req: ParsedRequest,\n key: string,\n ): string | undefined {\n return req.query[key] as string | undefined;\n }\n}\n"],"names":["mapToWorkflowOverviewDTO","mapToWorkflowDTO","mapToProcessInstanceDTO","retryAsyncFunction","mapToExecuteWorkflowResponseDTO","ProcessInstanceState","mapToWorkflowRunStatusDTO"],"mappings":"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"}
|