@5minds/node-red-contrib-processcube 0.14.0-feature-7cec87-lyytfjz9 → 0.14.0-feature-197b34-lyzwc8zw

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,45 +1,37 @@
1
- const process = require('process');
1
+ const process = require("process");
2
2
 
3
- const engine_client = require('@5minds/processcube_engine_client');
3
+ const engine_client = require("@5minds/processcube_engine_client");
4
4
 
5
- module.exports = function(RED) {
5
+ module.exports = function (RED) {
6
6
  function MessageEventTrigger(config) {
7
7
  RED.nodes.createNode(this, config);
8
8
  var node = this;
9
- var nodeContext = node.context();
10
9
 
11
10
  this.engine = this.server = RED.nodes.getNode(config.engine);
12
11
 
13
- const engineUrl = this.engine?.url || process.env.ENGINE_URL || 'http://engine:8000';
14
-
15
- var client = nodeContext.get('client');
16
-
17
- if (!client) {
18
- nodeContext.set('client', new engine_client.EngineClient(engineUrl));
19
- client = nodeContext.get('client');
20
- }
21
-
22
- node.on('input', function(msg) {
23
-
24
- client.events.triggerMessageEvent(
25
- config.messagename,
26
- {
27
- processInstanceId: config.processinstanceid,
28
- payload: msg.payload,
29
- identity: node.server.identity
30
- }
31
-
32
- ).then((result) => {
33
-
34
- msg.payload = result;
35
-
36
- node.send(msg);
37
- node.status({fill: "blue", shape: "dot", text: `message event triggered`});
38
-
39
- }).catch((error) => {
40
- node.error(error);
41
- });
12
+ const client = this.engine.getEngineClient();
13
+
14
+ node.on("input", function (msg) {
15
+ client.events
16
+ .triggerMessageEvent(config.messagename, {
17
+ processInstanceId: config.processinstanceid,
18
+ payload: msg.payload,
19
+ identity: node.server.identity,
20
+ })
21
+ .then((result) => {
22
+ msg.payload = result;
23
+
24
+ node.send(msg);
25
+ node.status({
26
+ fill: "blue",
27
+ shape: "dot",
28
+ text: `message event triggered`,
29
+ });
30
+ })
31
+ .catch((error) => {
32
+ node.error(error);
33
+ });
42
34
  });
43
35
  }
44
36
  RED.nodes.registerType("message-event-trigger", MessageEventTrigger);
45
- }
37
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@5minds/node-red-contrib-processcube",
3
- "version": "0.14.0-feature-7cec87-lyytfjz9",
3
+ "version": "0.14.0-feature-197b34-lyzwc8zw",
4
4
  "license": "MIT",
5
5
  "description": "Node-RED nodes for ProcessCube",
6
6
  "authors": [
package/process-start.js CHANGED
@@ -1,43 +1,38 @@
1
- const process = require('process');
2
- const engine_client = require('@5minds/processcube_engine_client');
1
+ const process = require("process");
2
+ const engine_client = require("@5minds/processcube_engine_client");
3
3
 
4
- module.exports = function(RED) {
4
+ module.exports = function (RED) {
5
5
  function ProcessStart(config) {
6
- RED.nodes.createNode(this,config);
6
+ RED.nodes.createNode(this, config);
7
7
  var node = this;
8
- var flowContext = node.context().flow;
9
- var nodeContext = node.context();
10
8
 
11
9
  this.engine = this.server = RED.nodes.getNode(config.engine);
12
10
 
13
- const engineUrl = this.engine?.url || process.env.ENGINE_URL || 'http://engine:8000';
14
-
15
- var client = nodeContext.get('client');
16
-
17
- if (!client) {
18
- nodeContext.set('client', new engine_client.EngineClient(engineUrl));
19
- client = nodeContext.get('client');
20
- }
21
-
22
- node.on('input', function(msg) {
11
+ const client = this.engine.getEngineClient();
23
12
 
13
+ node.on("input", function (msg) {
24
14
  const startParameters = {
25
15
  processModelId: msg.processModelId || config.processmodel,
26
16
  startEventId: msg.startEventId || config.startevent,
27
- initialToken: msg.payload
17
+ initialToken: msg.payload,
28
18
  };
29
19
 
30
- client.processDefinitions.startProcessInstance(startParameters, node.engine.identity).then((result) => {
31
-
32
- msg.payload = result;
33
-
34
- node.send(msg);
35
- node.status({fill: "blue", shape: "dot", text: `started ${result.processInstanceId}`});
36
-
37
- }).catch((error) => {
38
- node.error(error);
39
- });
20
+ client.processDefinitions
21
+ .startProcessInstance(startParameters, node.engine.identity)
22
+ .then((result) => {
23
+ msg.payload = result;
24
+
25
+ node.send(msg);
26
+ node.status({
27
+ fill: "blue",
28
+ shape: "dot",
29
+ text: `started ${result.processInstanceId}`,
30
+ });
31
+ })
32
+ .catch((error) => {
33
+ node.error(error);
34
+ });
40
35
  });
41
36
  }
42
37
  RED.nodes.registerType("process-start", ProcessStart);
43
- }
38
+ };
@@ -1,31 +1,23 @@
1
- const process = require('process');
2
- const EventEmitter = require('node:events');
1
+ const process = require("process");
2
+ const EventEmitter = require("node:events");
3
3
 
4
- const engine_client = require('@5minds/processcube_engine_client');
4
+ const engine_client = require("@5minds/processcube_engine_client");
5
5
 
6
- module.exports = function(RED) {
6
+ module.exports = function (RED) {
7
7
  function ProcessdefinitionQuery(config) {
8
- RED.nodes.createNode(this,config);
8
+ RED.nodes.createNode(this, config);
9
9
  var node = this;
10
10
  var flowContext = node.context().flow;
11
- var nodeContext = node.context();
12
11
 
13
12
  this.engine = this.server = RED.nodes.getNode(config.engine);
14
13
 
15
- const engineUrl = this.engine?.url || process.env.ENGINE_URL || 'http://engine:8000';
14
+ const client = this.engine.getEngineClient();
16
15
 
17
- var client = nodeContext.get('client');
18
-
19
- if (!client) {
20
- nodeContext.set('client', new engine_client.EngineClient(engineUrl));
21
- client = nodeContext.get('client');
22
- }
23
-
24
- var eventEmitter = flowContext.get('emitter');
16
+ var eventEmitter = flowContext.get("emitter");
25
17
 
26
18
  if (!eventEmitter) {
27
- flowContext.set('emitter', new EventEmitter());
28
- eventEmitter = flowContext.get('emitter');
19
+ flowContext.set("emitter", new EventEmitter());
20
+ eventEmitter = flowContext.get("emitter");
29
21
  }
30
22
 
31
23
  node.on("close", async () => {
@@ -33,38 +25,48 @@ module.exports = function(RED) {
33
25
  client = null;
34
26
  });
35
27
 
36
- node.on('input', function(msg) {
37
- let query = RED.util.evaluateNodeProperty(config.query, config.query_type, node, msg)
28
+ node.on("input", function (msg) {
29
+ let query = RED.util.evaluateNodeProperty(
30
+ config.query,
31
+ config.query_type,
32
+ node,
33
+ msg
34
+ );
38
35
  query = {
39
36
  ...query,
40
- identity: node.server.identity
37
+ identity: node.server.identity,
41
38
  };
42
-
43
- client.processDefinitions.getAll(query).then((matchingProcessDefinitions) => {
44
-
45
-
46
- if (config.models_only && matchingProcessDefinitions.totalCount > 0) {
47
- let models = [];
48
-
49
- matchingProcessDefinitions.processDefinitions.forEach(processDefinition => {
50
- processDefinition.processModels.forEach(model => {
51
- models.push(model);
52
- });
53
- });
54
-
55
- msg.payload = {
56
- models: models,
57
- totalCount: models.length
58
- };
59
-
60
- } else {
61
- msg.payload = matchingProcessDefinitions;
62
- }
63
-
64
39
 
65
- node.send(msg);
66
- });
40
+ client.processDefinitions
41
+ .getAll(query)
42
+ .then((matchingProcessDefinitions) => {
43
+ if (
44
+ config.models_only &&
45
+ matchingProcessDefinitions.totalCount > 0
46
+ ) {
47
+ let models = [];
48
+
49
+ matchingProcessDefinitions.processDefinitions.forEach(
50
+ (processDefinition) => {
51
+ processDefinition.processModels.forEach(
52
+ (model) => {
53
+ models.push(model);
54
+ }
55
+ );
56
+ }
57
+ );
58
+
59
+ msg.payload = {
60
+ models: models,
61
+ totalCount: models.length,
62
+ };
63
+ } else {
64
+ msg.payload = matchingProcessDefinitions;
65
+ }
66
+
67
+ node.send(msg);
68
+ });
67
69
  });
68
70
  }
69
71
  RED.nodes.registerType("processdefinition-query", ProcessdefinitionQuery);
70
- }
72
+ };
@@ -1,31 +1,23 @@
1
- const process = require('process');
2
- const EventEmitter = require('node:events');
1
+ const process = require("process");
2
+ const EventEmitter = require("node:events");
3
3
 
4
- const engine_client = require('@5minds/processcube_engine_client');
4
+ const engine_client = require("@5minds/processcube_engine_client");
5
5
 
6
- module.exports = function(RED) {
6
+ module.exports = function (RED) {
7
7
  function ProcessinstanceQuery(config) {
8
- RED.nodes.createNode(this,config);
8
+ RED.nodes.createNode(this, config);
9
9
  var node = this;
10
10
  var flowContext = node.context().flow;
11
- var nodeContext = node.context();
12
11
 
13
12
  this.engine = this.server = RED.nodes.getNode(config.engine);
14
13
 
15
- const engineUrl = this.engine?.url || process.env.ENGINE_URL || 'http://engine:8000';
14
+ const client = this.engine.getEngineClient();
16
15
 
17
- var client = nodeContext.get('client');
18
-
19
- if (!client) {
20
- nodeContext.set('client', new engine_client.EngineClient(engineUrl));
21
- client = nodeContext.get('client');
22
- }
23
-
24
- var eventEmitter = flowContext.get('emitter');
16
+ var eventEmitter = flowContext.get("emitter");
25
17
 
26
18
  if (!eventEmitter) {
27
- flowContext.set('emitter', new EventEmitter());
28
- eventEmitter = flowContext.get('emitter');
19
+ flowContext.set("emitter", new EventEmitter());
20
+ eventEmitter = flowContext.get("emitter");
29
21
  }
30
22
 
31
23
  node.on("close", async () => {
@@ -33,16 +25,22 @@ module.exports = function(RED) {
33
25
  client = null;
34
26
  });
35
27
 
36
- node.on('input', function(msg) {
37
- let query = RED.util.evaluateNodeProperty(config.query, config.query_type, node, msg)
38
-
39
- client.processInstances.query(query, { identity: node.server.identity }).then((matchingInstances) => {
40
-
41
- msg.payload = matchingInstances;
42
-
43
- node.send(msg);
44
- });
28
+ node.on("input", function (msg) {
29
+ let query = RED.util.evaluateNodeProperty(
30
+ config.query,
31
+ config.query_type,
32
+ node,
33
+ msg
34
+ );
35
+
36
+ client.processInstances
37
+ .query(query, { identity: node.server.identity })
38
+ .then((matchingInstances) => {
39
+ msg.payload = matchingInstances;
40
+
41
+ node.send(msg);
42
+ });
45
43
  });
46
44
  }
47
45
  RED.nodes.registerType("processinstance-query", ProcessinstanceQuery);
48
- }
46
+ };
@@ -1,45 +1,37 @@
1
- const process = require('process');
1
+ const process = require("process");
2
2
 
3
- const engine_client = require('@5minds/processcube_engine_client');
3
+ const engine_client = require("@5minds/processcube_engine_client");
4
4
 
5
- module.exports = function(RED) {
5
+ module.exports = function (RED) {
6
6
  function SignalEventTrigger(config) {
7
7
  RED.nodes.createNode(this, config);
8
8
  var node = this;
9
- var nodeContext = node.context();
10
9
 
11
10
  this.engine = this.server = RED.nodes.getNode(config.engine);
12
11
 
13
- const engineUrl = this.engine?.url || process.env.ENGINE_URL || 'http://engine:8000';
14
-
15
- var client = nodeContext.get('client');
16
-
17
- if (!client) {
18
- nodeContext.set('client', new engine_client.EngineClient(engineUrl));
19
- client = nodeContext.get('client');
20
- }
21
-
22
- node.on('input', function(msg) {
23
-
24
- client.events.triggerSignalEvent(
25
- config.signalname,
26
- {
27
- processInstanceId: config.processinstanceid,
28
- payload: msg.payload,
29
- identity: node.server.identity
30
- }
31
-
32
- ).then((result) => {
33
-
34
- msg.payload = result;
35
-
36
- node.send(msg);
37
- node.status({fill: "blue", shape: "dot", text: `signal event triggered`});
38
-
39
- }).catch((error) => {
40
- node.error(error);
41
- });
12
+ const client = this.engine.getEngineClient();
13
+
14
+ node.on("input", function (msg) {
15
+ client.events
16
+ .triggerSignalEvent(config.signalname, {
17
+ processInstanceId: config.processinstanceid,
18
+ payload: msg.payload,
19
+ identity: node.server.identity,
20
+ })
21
+ .then((result) => {
22
+ msg.payload = result;
23
+
24
+ node.send(msg);
25
+ node.status({
26
+ fill: "blue",
27
+ shape: "dot",
28
+ text: `signal event triggered`,
29
+ });
30
+ })
31
+ .catch((error) => {
32
+ node.error(error);
33
+ });
42
34
  });
43
35
  }
44
36
  RED.nodes.registerType("signal-event-trigger", SignalEventTrigger);
45
- }
37
+ };
@@ -1,58 +1,79 @@
1
- const process = require('process');
2
- const EventEmitter = require('node:events');
1
+ const process = require("process");
2
+ const EventEmitter = require("node:events");
3
3
 
4
- const engine_client = require('@5minds/processcube_engine_client');
4
+ const engine_client = require("@5minds/processcube_engine_client");
5
5
 
6
- module.exports = function(RED) {
6
+ module.exports = function (RED) {
7
7
  function UserTaskFinishedListener(config) {
8
8
  RED.nodes.createNode(this, config);
9
9
  var node = this;
10
10
  var flowContext = node.context().flow;
11
- var nodeContext = node.context();
12
11
 
13
12
  this.engine = this.server = RED.nodes.getNode(config.engine);
14
13
 
15
- const engineUrl = this.engine?.url || process.env.ENGINE_URL || 'http://engine:8000';
14
+ const client = this.engine.getEngineClient();
16
15
 
17
- var client = nodeContext.get('client');
18
-
19
- if (!client) {
20
- nodeContext.set('client', new engine_client.EngineClient(engineUrl));
21
- client = nodeContext.get('client');
22
- }
23
-
24
- var eventEmitter = flowContext.get('emitter');
16
+ var eventEmitter = flowContext.get("emitter");
25
17
 
26
18
  if (!eventEmitter) {
27
- flowContext.set('emitter', new EventEmitter());
28
- eventEmitter = flowContext.get('emitter');
19
+ flowContext.set("emitter", new EventEmitter());
20
+ eventEmitter = flowContext.get("emitter");
29
21
  }
30
22
 
31
23
  const register = async () => {
32
24
  let currentIdentity = node.server.identity;
33
- let subscription = await client.userTasks.onUserTaskFinished((userTaskFinishedNotification) => {
34
- node.send({ payload: { flowNodeInstanceId: userTaskFinishedNotification.flowNodeInstanceId, action: "finished", type: "usertask" } });
35
- }, { identity: currentIdentity });
36
-
37
- node.server.registerOnIdentityChanged(async (identity) => {
38
- client.userTasks.removeSubscription(subscription, currentIdentity);
25
+ let subscription = await client.userTasks.onUserTaskFinished(
26
+ (userTaskFinishedNotification) => {
27
+ node.send({
28
+ payload: {
29
+ flowNodeInstanceId:
30
+ userTaskFinishedNotification.flowNodeInstanceId,
31
+ action: "finished",
32
+ type: "usertask",
33
+ },
34
+ });
35
+ },
36
+ { identity: currentIdentity }
37
+ );
38
+
39
+ node.server.registerOnIdentityChanged(async (identity) => {
40
+ client.userTasks.removeSubscription(
41
+ subscription,
42
+ currentIdentity
43
+ );
39
44
  currentIdentity = identity;
40
-
41
- subscription = await client.userTasks.onUserTaskFinished((userTaskFinishedNotification) => {
42
- node.send({ payload: { flowNodeInstanceId: userTaskFinishedNotification.flowNodeInstanceId, action: "finished", type: "usertask" } });
43
- }, { identity: currentIdentity });
45
+
46
+ subscription = await client.userTasks.onUserTaskFinished(
47
+ (userTaskFinishedNotification) => {
48
+ node.send({
49
+ payload: {
50
+ flowNodeInstanceId:
51
+ userTaskFinishedNotification.flowNodeInstanceId,
52
+ action: "finished",
53
+ type: "usertask",
54
+ },
55
+ });
56
+ },
57
+ { identity: currentIdentity }
58
+ );
44
59
  });
45
-
60
+
46
61
  node.on("close", async () => {
47
- client.userTasks.removeSubscription(subscription, currentIdentity);
62
+ client.userTasks.removeSubscription(
63
+ subscription,
64
+ currentIdentity
65
+ );
48
66
  client.dispose();
49
67
  client = null;
50
68
  });
51
- }
69
+ };
52
70
 
53
71
  if (node.server) {
54
72
  register();
55
73
  }
56
74
  }
57
- RED.nodes.registerType("usertask-finished-listener", UserTaskFinishedListener);
58
- }
75
+ RED.nodes.registerType(
76
+ "usertask-finished-listener",
77
+ UserTaskFinishedListener
78
+ );
79
+ };
package/usertask-input.js CHANGED
@@ -1,40 +1,40 @@
1
- const process = require('process');
2
- const EventEmitter = require('node:events');
1
+ const process = require("process");
2
+ const EventEmitter = require("node:events");
3
3
 
4
- const engine_client = require('@5minds/processcube_engine_client');
4
+ const engine_client = require("@5minds/processcube_engine_client");
5
5
 
6
6
  function showStatus(node, msgCounter) {
7
7
  if (msgCounter >= 1) {
8
- node.status({fill: "blue", shape: "dot", text: `handling tasks ${msgCounter}`});
8
+ node.status({
9
+ fill: "blue",
10
+ shape: "dot",
11
+ text: `handling tasks ${msgCounter}`,
12
+ });
9
13
  } else {
10
- node.status({fill: "blue", shape: "ring", text: `subcribed ${msgCounter}`});
14
+ node.status({
15
+ fill: "blue",
16
+ shape: "ring",
17
+ text: `subcribed ${msgCounter}`,
18
+ });
11
19
  }
12
20
  }
13
21
 
14
- module.exports = function(RED) {
22
+ module.exports = function (RED) {
15
23
  function UserTaskInput(config) {
16
- RED.nodes.createNode(this,config);
24
+ RED.nodes.createNode(this, config);
17
25
  var node = this;
18
26
  var msgCounter = 0;
19
27
  var flowContext = node.context().flow;
20
- var nodeContext = node.context();
21
28
 
22
29
  this.engine = this.server = RED.nodes.getNode(config.engine);
23
30
 
24
- const engineUrl = this.engine?.url || process.env.ENGINE_URL || 'http://engine:8000';
25
-
26
- var client = nodeContext.get('client');
27
-
28
- if (!client) {
29
- nodeContext.set('client', new engine_client.EngineClient(engineUrl));
30
- client = nodeContext.get('client');
31
- }
31
+ const client = this.engine.getEngineClient();
32
32
 
33
- var eventEmitter = flowContext.get('emitter');
33
+ var eventEmitter = flowContext.get("emitter");
34
34
 
35
35
  if (!eventEmitter) {
36
- flowContext.set('emitter', new EventEmitter());
37
- eventEmitter = flowContext.get('emitter');
36
+ flowContext.set("emitter", new EventEmitter());
37
+ eventEmitter = flowContext.get("emitter");
38
38
  }
39
39
 
40
40
  node.on("close", async () => {
@@ -42,40 +42,54 @@ module.exports = function(RED) {
42
42
  client = null;
43
43
  });
44
44
 
45
- node.on('input', function(msg) {
46
- let query = RED.util.evaluateNodeProperty(config.query, config.query_type, node, msg)
45
+ node.on("input", function (msg) {
46
+ let query = RED.util.evaluateNodeProperty(
47
+ config.query,
48
+ config.query_type,
49
+ node,
50
+ msg
51
+ );
47
52
  query = {
48
53
  ...query,
49
- identity: node.server.identity
50
- }
54
+ identity: node.server.identity,
55
+ };
51
56
  client.userTasks.query(query).then((matchingFlowNodes) => {
52
-
53
- if (!config.force_send_array && matchingFlowNodes && matchingFlowNodes.userTasks && matchingFlowNodes.userTasks.length == 1) {
57
+ if (
58
+ !config.force_send_array &&
59
+ matchingFlowNodes &&
60
+ matchingFlowNodes.userTasks &&
61
+ matchingFlowNodes.userTasks.length == 1
62
+ ) {
54
63
  userTask = matchingFlowNodes.userTasks[0];
55
64
 
56
65
  msg.payload = { userTask: userTask };
57
66
  node.send(msg);
58
67
  } else {
59
68
  if (!config.force_send_array) {
60
- if (config.multisend && matchingFlowNodes.userTasks && matchingFlowNodes.userTasks.length > 1) {
69
+ if (
70
+ config.multisend &&
71
+ matchingFlowNodes.userTasks &&
72
+ matchingFlowNodes.userTasks.length > 1
73
+ ) {
61
74
  matchingFlowNodes.userTasks.forEach((userTask) => {
62
-
63
- msg.payload = { userTask: userTask } ;
75
+ msg.payload = { userTask: userTask };
64
76
  node.send(msg);
65
77
  });
66
78
  } else {
67
-
68
- msg.payload = { userTasks: matchingFlowNodes.userTasks };
79
+ msg.payload = {
80
+ userTasks: matchingFlowNodes.userTasks,
81
+ };
69
82
  node.send(msg);
70
83
  }
71
84
  } else {
72
-
73
- msg.payload = { userTasks: matchingFlowNodes.userTasks || [] };
85
+ msg.payload = {
86
+ userTasks: matchingFlowNodes.userTasks || [],
87
+ };
74
88
  node.send(msg);
75
89
  }
76
- }
90
+ }
77
91
  });
78
92
  });
79
93
  }
80
94
  RED.nodes.registerType("usertask-input", UserTaskInput);
81
- }
95
+ };
@@ -1,59 +1,76 @@
1
- const process = require('process');
2
- const EventEmitter = require('node:events');
1
+ const process = require("process");
2
+ const EventEmitter = require("node:events");
3
3
 
4
- const engine_client = require('@5minds/processcube_engine_client');
4
+ const engine_client = require("@5minds/processcube_engine_client");
5
5
 
6
- module.exports = function(RED) {
6
+ module.exports = function (RED) {
7
7
  function UserTaskNewListener(config) {
8
8
  RED.nodes.createNode(this, config);
9
9
  var node = this;
10
10
  var flowContext = node.context().flow;
11
- var nodeContext = node.context();
12
11
 
13
12
  this.engine = this.server = RED.nodes.getNode(config.engine);
14
13
 
15
- const engineUrl = this.engine?.url || process.env.ENGINE_URL || 'http://engine:8000';
14
+ const client = this.engine.getEngineClient();
16
15
 
17
- var client = nodeContext.get('client');
18
-
19
- if (!client) {
20
- nodeContext.set('client', new engine_client.EngineClient(engineUrl));
21
- client = nodeContext.get('client');
22
- }
23
-
24
- var eventEmitter = flowContext.get('emitter');
16
+ var eventEmitter = flowContext.get("emitter");
25
17
 
26
18
  if (!eventEmitter) {
27
- flowContext.set('emitter', new EventEmitter());
28
- eventEmitter = flowContext.get('emitter');
19
+ flowContext.set("emitter", new EventEmitter());
20
+ eventEmitter = flowContext.get("emitter");
29
21
  }
30
-
22
+
31
23
  const register = async () => {
32
24
  let currentIdentity = node.server.identity;
33
- let subscription = await client.userTasks.onUserTaskWaiting((userTaskWaitingNotification) => {
34
- node.send({ payload: { flowNodeInstanceId: userTaskWaitingNotification.flowNodeInstanceId, action: "new", type: "usertask" } });
35
- }, { identity: currentIdentity });
36
-
37
- node.server.registerOnIdentityChanged(async (identity) => {
38
- client.userTasks.removeSubscription(subscription, currentIdentity);
25
+ let subscription = await client.userTasks.onUserTaskWaiting(
26
+ (userTaskWaitingNotification) => {
27
+ node.send({
28
+ payload: {
29
+ flowNodeInstanceId:
30
+ userTaskWaitingNotification.flowNodeInstanceId,
31
+ action: "new",
32
+ type: "usertask",
33
+ },
34
+ });
35
+ },
36
+ { identity: currentIdentity }
37
+ );
38
+
39
+ node.server.registerOnIdentityChanged(async (identity) => {
40
+ client.userTasks.removeSubscription(
41
+ subscription,
42
+ currentIdentity
43
+ );
39
44
  currentIdentity = identity;
40
-
41
- subscription = await client.userTasks.onUserTaskWaiting((userTaskWaitingNotification) => {
42
- node.send({ payload: { flowNodeInstanceId: userTaskWaitingNotification.flowNodeInstanceId, action: "new", type: "usertask" } });
43
- }, { identity: currentIdentity });
45
+
46
+ subscription = await client.userTasks.onUserTaskWaiting(
47
+ (userTaskWaitingNotification) => {
48
+ node.send({
49
+ payload: {
50
+ flowNodeInstanceId:
51
+ userTaskWaitingNotification.flowNodeInstanceId,
52
+ action: "new",
53
+ type: "usertask",
54
+ },
55
+ });
56
+ },
57
+ { identity: currentIdentity }
58
+ );
44
59
  });
45
-
60
+
46
61
  node.on("close", async () => {
47
- client.userTasks.removeSubscription(subscription, currentIdentity);
62
+ client.userTasks.removeSubscription(
63
+ subscription,
64
+ currentIdentity
65
+ );
48
66
  client.dispose();
49
67
  client = null;
50
68
  });
51
- }
69
+ };
52
70
 
53
71
  if (node.server) {
54
72
  register();
55
73
  }
56
-
57
74
  }
58
75
  RED.nodes.registerType("usertask-new-listener", UserTaskNewListener);
59
- }
76
+ };
@@ -1,53 +1,57 @@
1
- const process = require('process');
2
- const EventEmitter = require('node:events');
1
+ const process = require("process");
2
+ const EventEmitter = require("node:events");
3
3
 
4
- const engine_client = require('@5minds/processcube_engine_client');
4
+ const engine_client = require("@5minds/processcube_engine_client");
5
5
 
6
- module.exports = function(RED) {
6
+ module.exports = function (RED) {
7
7
  function UserTaskOutput(config) {
8
-
9
8
  RED.nodes.createNode(this, config);
10
9
 
11
10
  var node = this;
12
11
  var flowContext = node.context().flow;
13
- var nodeContext = node.context();
14
12
 
15
13
  this.engine = this.server = RED.nodes.getNode(config.engine);
16
14
 
17
- const engineUrl = this.engine?.url || process.env.ENGINE_URL || 'http://engine:8000';
18
-
19
- var client = nodeContext.get('client');
20
-
21
- if (!client) {
22
- nodeContext.set('client', new engine_client.EngineClient(engineUrl));
23
- client = nodeContext.get('client');
24
- }
15
+ const client = this.engine.getEngineClient();
25
16
 
26
- var eventEmitter = flowContext.get('emitter');
17
+ var eventEmitter = flowContext.get("emitter");
27
18
 
28
19
  if (!eventEmitter) {
29
- flowContext.set('emitter', new EventEmitter());
30
- eventEmitter = flowContext.get('emitter');
20
+ flowContext.set("emitter", new EventEmitter());
21
+ eventEmitter = flowContext.get("emitter");
31
22
  }
32
23
 
33
- node.on('input', function(msg) {
24
+ node.on("input", function (msg) {
34
25
  if (msg.payload.userTask) {
35
-
36
- const flowNodeInstanceId = msg.payload.userTask.flowNodeInstanceId;
37
-
38
- const userTaskResult = RED.util.evaluateNodeProperty(config.result, config.result_type, node, msg);
39
-
40
- client.userTasks.finishUserTask(flowNodeInstanceId, userTaskResult, node.server.identity).then(() => {
41
-
42
- node.send(msg);
43
- }).catch(error => {
44
- node.error(error);
45
- });
26
+ const flowNodeInstanceId =
27
+ msg.payload.userTask.flowNodeInstanceId;
28
+
29
+ const userTaskResult = RED.util.evaluateNodeProperty(
30
+ config.result,
31
+ config.result_type,
32
+ node,
33
+ msg
34
+ );
35
+
36
+ client.userTasks
37
+ .finishUserTask(
38
+ flowNodeInstanceId,
39
+ userTaskResult,
40
+ node.server.identity
41
+ )
42
+ .then(() => {
43
+ node.send(msg);
44
+ })
45
+ .catch((error) => {
46
+ node.error(error);
47
+ });
46
48
  } else {
47
- node.error(`No UserTask found in message: ${JSON.stringify(msg.payload)}`);
49
+ node.error(
50
+ `No UserTask found in message: ${JSON.stringify(msg.payload)}`
51
+ );
48
52
  }
49
53
  });
50
54
  }
51
55
 
52
56
  RED.nodes.registerType("usertask-output", UserTaskOutput);
53
- }
57
+ };