@5minds/node-red-contrib-processcube 0.14.0-feature-612fd3-lywvsveq → 0.14.0-feature-ebe375-lyxawl6i

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/Dockerfile CHANGED
@@ -1,4 +1,4 @@
1
- FROM node:20 as builder
1
+ FROM node:20 AS builder
2
2
 
3
3
  COPY ./ /src/node-red-contrib-processcube
4
4
 
@@ -12,6 +12,9 @@ services:
12
12
  volumes:
13
13
  - ./nodered/:/nodered/
14
14
  - ./examples/:/examples/
15
+ depends_on:
16
+ - engine
17
+ - authority
15
18
 
16
19
  engine:
17
20
  image: 5minds/processcube_engine:2024-1
@@ -24,6 +27,8 @@ services:
24
27
  iam__baseUrl: http://authority:11560
25
28
  iam__allowAnonymousRootAccess: true
26
29
  command: --seed-dir=/processes --port 8000
30
+ depends_on:
31
+ - authority
27
32
 
28
33
  authority:
29
34
  image: 5minds/processcube_authority:3.0.4
@@ -10,22 +10,26 @@ module.exports = function(RED) {
10
10
 
11
11
  const externalTaskId = msg.externalTaskId;
12
12
 
13
- let error = msg.error;
13
+ let msgError = msg.error;
14
14
 
15
- if (error === undefined) {
16
- error.message = "An error occurred";
17
- error.source = msg.payload;
15
+ if (msgError === undefined) {
16
+ msgError.message = "An error occurred";
18
17
  }
19
18
 
20
- msg.payload = {
21
- "error": {
22
- errorCode: config.error,
23
- errorMessage: error.message,
24
- errorDetails: error.source
25
- }
26
- };
19
+ msg.errorCode = config.error;
20
+ msg.errorMessage = msgError.message;
21
+ //msg.errorDetails = RED.util.encodeObject(msg); // circular structure
27
22
 
28
- eventEmitter.emit(`handle-${externalTaskId}`, msg, true);
23
+ const error = new Error(msg.errorMessage);
24
+ error.errorCode = msg.errorCode;
25
+ error.errorDetails = RED.util.encodeObject(msg);
26
+
27
+ // TODO: hack cause https://github.com/5minds/ProcessCube.Engine.Client.ts/blob/develop/src/ExternalTaskWorker.ts#L180
28
+ error.stack = error.errorDetails;
29
+ error.externalTaskId = externalTaskId;
30
+ error._msgid = msg._msgid;
31
+
32
+ eventEmitter.emit(`handle-${externalTaskId}`, error, true);
29
33
 
30
34
  node.send(msg);
31
35
  });
@@ -20,7 +20,6 @@ module.exports = function(RED) {
20
20
  var flowContext = node.context().flow;
21
21
  var nodeContext = node.context();
22
22
 
23
-
24
23
  this.engine = this.server = RED.nodes.getNode(config.engine);
25
24
 
26
25
  const engineUrl = this.engine?.url || process.env.ENGINE_URL || 'http://engine:8000';
@@ -46,27 +45,35 @@ module.exports = function(RED) {
46
45
  return await new Promise((resolve, reject) => {
47
46
 
48
47
  const handleFinishTask = (msg) => {
48
+ let result = RED.util.encodeObject(msg.payload);
49
+
50
+ node.log(`handle event for external task ${externalTask.flowNodeInstanceId} and process it with result ${result} on msg._msgid ${msg._msgid}.`);
51
+
49
52
  if (msg.externalTaskId) {
50
53
  delete started_external_tasks[msg.externalTaskId];
51
54
  }
52
55
 
53
56
  showStatus(node, Object.keys(started_external_tasks).length);
54
57
 
55
- let result = RED.util.encodeObject(msg.payload);
56
58
 
57
59
  resolve(result);
58
60
  };
59
61
 
60
62
  const handleErrorTask = (msg) => {
63
+
64
+ node.log(`handle error event for external task ${externalTask.flowNodeInstanceId} with result ${msg} on msg._msgid ${msg._msgid}.`);
65
+
61
66
  if (msg.externalTaskId) {
62
67
  delete started_external_tasks[msg.externalTaskId];
63
68
  }
64
69
 
65
70
  showStatus(node, Object.keys(started_external_tasks).length);
66
71
 
67
- let result = RED.util.encodeObject(msg);
68
72
 
69
- reject(result);
73
+ // TODO: with reject, the default error handling is proceed
74
+ // SEE: https://github.com/5minds/ProcessCube.Engine.Client.ts/blob/develop/src/ExternalTaskWorker.ts#L180
75
+ // reject(result);
76
+ resolve(msg);
70
77
  };
71
78
 
72
79
  eventEmitter.once(`handle-${externalTask.flowNodeInstanceId}`, (msg, isError = false) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@5minds/node-red-contrib-processcube",
3
- "version": "0.14.0-feature-612fd3-lywvsveq",
3
+ "version": "0.14.0-feature-ebe375-lyxawl6i",
4
4
  "license": "MIT",
5
5
  "description": "Node-RED nodes for ProcessCube",
6
6
  "authors": [
@@ -13,14 +13,29 @@ module.exports = function(RED) {
13
13
  this.identity = null;
14
14
  this.registerOnIdentityChanged = function (callback) {
15
15
  identityChangedCallbacks.push(callback);
16
- }
16
+ };
17
+
17
18
  this.setIdentity = (identity) => {
18
19
  this.identity = identity;
19
20
 
20
21
  for (const callback of identityChangedCallbacks) {
21
22
  callback(identity);
22
23
  }
23
- }
24
+ };
25
+
26
+ var nodeContext = node.context();
27
+
28
+ this.getEngineClient = () => {
29
+ const engineUrl = this.url || process.env.ENGINE_URL || 'http://engine:8000';
30
+ let client = nodeContext.get('client');
31
+
32
+ if (!client) {
33
+ nodeContext.set('client', new engine_client.EngineClient(engineUrl));
34
+ client = nodeContext.get('client');
35
+ }
36
+
37
+ return client;
38
+ };
24
39
 
25
40
  if (this.credentials.clientId && this.credentials.clientSecret) {
26
41
  const engineClient = new engine_client.EngineClient(this.url);