bpmn-client 1.2.1 → 1.3.8

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/monitor.js ADDED
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const _1 = require("./");
13
+ console.log("Testing BPMNClient");
14
+ const dotenv = require('dotenv');
15
+ const res = dotenv.config();
16
+ console.log(res);
17
+ monitor();
18
+ function monitor() {
19
+ return __awaiter(this, void 0, void 0, function* () {
20
+ const server = new _1.BPMNClient(process.env.HOST, process.env.PORT, process.env.API_KEY);
21
+ console.log('running monitor');
22
+ for (var i = 0; i < 1000; i++) {
23
+ yield checkStatus(server);
24
+ yield delay(15000, 'test');
25
+ }
26
+ });
27
+ }
28
+ function checkStatus(server, reason = '') {
29
+ return __awaiter(this, void 0, void 0, function* () {
30
+ var list = yield server.engine.status();
31
+ var insT = 0, insR = 0, itmT = 0, itmR = 0, tokT = 0, tokR = 0;
32
+ for (var i = 0; i < list.length; i++) {
33
+ var exec = list[i];
34
+ var dInstance = null;
35
+ insT++;
36
+ tokT += exec.instance.tokens.length;
37
+ if (exec.instance.status == 'running')
38
+ insR++;
39
+ var started = dateDiff(exec.instance.startedAt);
40
+ var ended = dateDiff(exec.instance.endedAt);
41
+ var msg = ` Instance for '${exec.instance.name}' Status: ${exec.status} Started At ${started} Ended ${ended} items: ${exec.instance.items.length}`;
42
+ try {
43
+ dInstance = yield server.datastore.findInstances({ id: exec.instance.id }, {});
44
+ //console.log(reason+' logs:',exec.instance.logs.length, dInstance.logs.length,dInstance.data.caseId);
45
+ if (dInstance.length > 0)
46
+ msg += ' items:' + dInstance[0].items.length;
47
+ }
48
+ catch (exc) {
49
+ msg += ' no instance' + exc.toString();
50
+ }
51
+ console.log(msg);
52
+ }
53
+ console.log(`${reason} ->Instances: Total: ${insT} Running: ${insR}`); // Tokens: ${tokT} `);
54
+ });
55
+ }
56
+ function delay(time, result) {
57
+ return __awaiter(this, void 0, void 0, function* () {
58
+ return new Promise(function (resolve) {
59
+ setTimeout(function () {
60
+ resolve(result);
61
+ }, time);
62
+ });
63
+ });
64
+ }
65
+ function dateDiff(dateStr) {
66
+ var endDate = new Date();
67
+ var startTime = new Date(dateStr);
68
+ var time1 = endDate.getTime();
69
+ var time2 = startTime;
70
+ var seconds = Math.abs(time1 - time2) / 1000;
71
+ // get total seconds between the times
72
+ var delta = seconds; //Math.abs(date_future - date_now) / 1000;
73
+ // calculate (and subtract) whole days
74
+ var days = Math.floor(delta / 86400);
75
+ delta -= days * 86400;
76
+ // calculate (and subtract) whole hours
77
+ var hours = Math.floor(delta / 3600) % 24;
78
+ delta -= hours * 3600;
79
+ // calculate (and subtract) whole minutes
80
+ var minutes = Math.floor(delta / 60) % 60;
81
+ delta -= minutes * 60;
82
+ // what's left is seconds
83
+ var seconds = Math.floor(delta % 60); // in theory the modulus is not required
84
+ if (days > 0)
85
+ return (days + " days");
86
+ if (hours > 0)
87
+ return (hours + " hours");
88
+ if (minutes > 0)
89
+ return (minutes + " minutes");
90
+ return (seconds + " seconds");
91
+ }
package/monitor.ts ADDED
@@ -0,0 +1,100 @@
1
+ import { BPMNClient } from './';
2
+
3
+
4
+ console.log("Testing BPMNClient");
5
+ const dotenv = require('dotenv');
6
+ const res = dotenv.config();
7
+
8
+ console.log(res);
9
+ monitor();
10
+
11
+ async function monitor() {
12
+
13
+ const server = new BPMNClient(process.env.HOST, process.env.PORT, process.env.API_KEY);
14
+
15
+ console.log('running monitor');
16
+ for (var i = 0; i < 1000; i++) {
17
+ await checkStatus(server);
18
+ await delay(15000, 'test');
19
+ }
20
+
21
+
22
+ }
23
+ async function checkStatus(server, reason = '') {
24
+
25
+
26
+ var list = await server.engine.status();
27
+
28
+ var insT = 0, insR = 0, itmT = 0, itmR = 0, tokT = 0, tokR = 0;
29
+ for (var i = 0; i < list.length; i++) {
30
+ var exec = list[i];
31
+ var dInstance = null;
32
+ insT++;
33
+ tokT += exec.instance.tokens.length;
34
+ if (exec.instance.status == 'running') insR++;
35
+ var started = dateDiff(exec.instance.startedAt);
36
+ var ended = dateDiff(exec.instance.endedAt);
37
+
38
+
39
+ var msg = ` Instance for '${exec.instance.name}' Status: ${exec.status} Started At ${started} Ended ${ended} items: ${exec.instance.items.length}`;
40
+ try {
41
+ dInstance = await server.datastore.findInstances({ id: exec.instance.id }, {});
42
+ //console.log(reason+' logs:',exec.instance.logs.length, dInstance.logs.length,dInstance.data.caseId);
43
+ if (dInstance.length > 0)
44
+ msg += ' items:' + dInstance[0].items.length;
45
+ }
46
+ catch (exc) {
47
+ msg += ' no instance' + exc.toString();
48
+ }
49
+ console.log(msg);
50
+
51
+ }
52
+ console.log(`${reason} ->Instances: Total: ${insT} Running: ${insR}`);// Tokens: ${tokT} `);
53
+ }
54
+
55
+ async function delay(time, result) {
56
+ return new Promise(function (resolve) {
57
+ setTimeout(function () {
58
+ resolve(result);
59
+ }, time);
60
+ });
61
+ }
62
+
63
+
64
+
65
+
66
+ function dateDiff(dateStr) {
67
+
68
+ var endDate = new Date();
69
+ var startTime = new Date(dateStr);
70
+ var time1 = endDate.getTime();
71
+ var time2 = startTime as unknown as number;
72
+
73
+ var seconds = Math.abs(time1 - time2) / 1000;
74
+
75
+
76
+ // get total seconds between the times
77
+ var delta = seconds; //Math.abs(date_future - date_now) / 1000;
78
+
79
+ // calculate (and subtract) whole days
80
+ var days = Math.floor(delta / 86400);
81
+ delta -= days * 86400;
82
+
83
+ // calculate (and subtract) whole hours
84
+ var hours = Math.floor(delta / 3600) % 24;
85
+ delta -= hours * 3600;
86
+
87
+ // calculate (and subtract) whole minutes
88
+ var minutes = Math.floor(delta / 60) % 60;
89
+ delta -= minutes * 60;
90
+
91
+ // what's left is seconds
92
+ var seconds = Math.floor(delta % 60); // in theory the modulus is not required
93
+ if (days > 0)
94
+ return (days + " days");
95
+ if (hours > 0)
96
+ return (hours + " hours");
97
+ if (minutes > 0)
98
+ return (minutes + " minutes");
99
+ return (seconds + " seconds");
100
+ }
package/package.json CHANGED
@@ -1,17 +1,14 @@
1
1
  {
2
2
  "name": "bpmn-client",
3
- "version": "1.2.1",
3
+ "version": "1.3.8",
4
4
  "license": "MIT",
5
5
  "scripts": {
6
6
  "build": "tsc --build",
7
+ "compileRun": "tsc --build && node cli.js",
8
+ "dev": "nodemon -e ts --exec \"npm run compileRun\"",
7
9
  "clean": "tsc --build --clean",
8
- "start": "node app.ts",
9
- "test": "mocha -R dot",
10
- "posttest": "eslint . --cache && npm run toc",
11
- "wintest": "node_modules/.bin/mocha",
12
- "start:watch": "tsc-watch --project . --onSuccess \"nodemon ./test.ts\"",
13
- "toc": "node scripts/generate-api-toc ./docs/API.md,./docs/Examples.md",
14
- "test-md": "node scripts/test-markdown.js ./docs/API.md && node scripts/test-markdown.js ./docs/Examples.md"
10
+ "start": "node cli.ts",
11
+ "test": "mocha -exit --config=test\\.mocharc.json"
15
12
  },
16
13
  "description": "Client API for BPMN-Server webservices",
17
14
  "keywords": [
package/src/BPMNClient.js CHANGED
@@ -19,7 +19,7 @@ class WebService {
19
19
  return __awaiter(this, void 0, void 0, function* () {
20
20
  var driver = http;
21
21
  var body = JSON.stringify(params);
22
- console.log(options, params);
22
+ // console.log(options, params);
23
23
  if (options.port == 443)
24
24
  driver = https;
25
25
  let data = '';
@@ -27,7 +27,8 @@ class WebService {
27
27
  return new Promise(function (resolve, reject) {
28
28
  try {
29
29
  driver.request(options, function (res) {
30
- console.log('STATUS: ' + res.statusCode);
30
+ // console.log('STATUS: ' + res.statusCode);
31
+ this.response = res;
31
32
  //console.log(res);
32
33
  self.statusCode = res.statusCode;
33
34
  res.setEncoding('utf8');
@@ -35,8 +36,14 @@ class WebService {
35
36
  data += chunk;
36
37
  });
37
38
  res.on('end', () => {
38
- self.result = JSON.parse(data);
39
- resolve(self.result);
39
+ try {
40
+ self.result = JSON.parse(data);
41
+ resolve(self.result);
42
+ }
43
+ catch (exc) {
44
+ console.log(data);
45
+ console.log(exc);
46
+ }
40
47
  });
41
48
  }).on("error", (err) => {
42
49
  console.log("Error: " + err.message);
@@ -140,9 +147,9 @@ class ClientEngine {
140
147
  return instance;
141
148
  });
142
149
  }
143
- throwMessage(messageId, data) {
150
+ throwMessage(messageId, data = {}, messageMatchingKey = {}) {
144
151
  return __awaiter(this, void 0, void 0, function* () {
145
- const ret = yield this.client.put('engine/throwMessage', { "messageId": messageId, "data": data });
152
+ const ret = yield this.client.post('engine/throwMessage', { "messageId": messageId, "data": data, messageMatchingKey });
146
153
  if (ret['errors']) {
147
154
  console.log(ret['errors']);
148
155
  throw new Error(ret['errors']);
@@ -150,9 +157,9 @@ class ClientEngine {
150
157
  return ret;
151
158
  });
152
159
  }
153
- throwSignal(signalId, data) {
160
+ throwSignal(signalId, data = {}, messageMatchingKey = {}) {
154
161
  return __awaiter(this, void 0, void 0, function* () {
155
- const ret = yield this.client.put('engine/throwSignal', { "signalId": signalId, "data": data });
162
+ const ret = yield this.client.post('engine/throwSignal', { "signalId": signalId, "data": data, messageMatchingKey });
156
163
  if (ret['errors']) {
157
164
  console.log(ret['errors']);
158
165
  throw new Error(ret['errors']);
@@ -171,6 +178,16 @@ class ClientEngine {
171
178
  return instance;
172
179
  });
173
180
  }
181
+ status() {
182
+ return __awaiter(this, void 0, void 0, function* () {
183
+ const ret = yield this.client.get('engine/status', {});
184
+ if (ret['errors']) {
185
+ console.log(ret['errors']);
186
+ throw new Error(ret['errors']);
187
+ }
188
+ return ret;
189
+ });
190
+ }
174
191
  }
175
192
  exports.ClientEngine = ClientEngine;
176
193
  class ClientDatastore {
@@ -201,7 +218,7 @@ class ClientDatastore {
201
218
  }
202
219
  deleteInstances(query) {
203
220
  return __awaiter(this, void 0, void 0, function* () {
204
- return yield this.client.del('datastore/delete', query);
221
+ return yield this.client.del('datastore/deleteInstances', query);
205
222
  });
206
223
  }
207
224
  }
package/src/BPMNClient.ts CHANGED
@@ -8,13 +8,14 @@ const http = require('http');
8
8
  class WebService {
9
9
  statusCode;
10
10
  result;
11
+ response;
11
12
  constructor() { }
12
13
  async invoke(params, options) {
13
14
 
14
15
  var driver = http;
15
16
  var body = JSON.stringify(params);
16
17
 
17
- console.log(options, params);
18
+ // console.log(options, params);
18
19
  if (options.port == 443)
19
20
  driver = https;
20
21
 
@@ -24,7 +25,8 @@ class WebService {
24
25
  try {
25
26
 
26
27
  driver.request(options, function (res) {
27
- console.log('STATUS: ' + res.statusCode);
28
+ // console.log('STATUS: ' + res.statusCode);
29
+ this.response = res;
28
30
  //console.log(res);
29
31
  self.statusCode = res.statusCode;
30
32
  res.setEncoding('utf8');
@@ -32,9 +34,14 @@ class WebService {
32
34
  data += chunk;
33
35
  });
34
36
  res.on('end', () => {
35
- self.result = JSON.parse(data);
36
-
37
- resolve(self.result);
37
+ try {
38
+ self.result = JSON.parse(data);
39
+ resolve(self.result);
40
+ }
41
+ catch (exc) {
42
+ console.log(data);
43
+ console.log(exc);
44
+ }
38
45
  });
39
46
 
40
47
 
@@ -130,7 +137,7 @@ class ClientEngine {
130
137
  constructor(client) {
131
138
  this.client = client;
132
139
  }
133
- async start(name, data = {} , startNodeId = null, options = {}): Promise<IInstanceData> {
140
+ async start(name, data = {}, startNodeId = null, options = {}): Promise<IInstanceData> {
134
141
  const ret = await this.client.post('engine/start',
135
142
  { name, data, startNodeId, options });
136
143
  if (ret['errors']) {
@@ -150,16 +157,16 @@ class ClientEngine {
150
157
  return instance;
151
158
  }
152
159
 
153
- async throwMessage(messageId, data) {
154
- const ret = await this.client.put('engine/throwMessage', { "messageId": messageId , "data": data });
160
+ async throwMessage(messageId, data = {} , messageMatchingKey = {}) {
161
+ const ret = await this.client.post('engine/throwMessage', { "messageId": messageId, "data": data, messageMatchingKey });
155
162
  if (ret['errors']) {
156
163
  console.log(ret['errors']);
157
164
  throw new Error(ret['errors']);
158
165
  }
159
166
  return ret;
160
167
  }
161
- async throwSignal(signalId, data) {
162
- const ret = await this.client.put('engine/throwSignal', { "signalId": signalId, "data": data });
168
+ async throwSignal(signalId, data = {} , messageMatchingKey = {}) {
169
+ const ret = await this.client.post('engine/throwSignal', { "signalId": signalId, "data": data, messageMatchingKey });
163
170
  if (ret['errors']) {
164
171
  console.log(ret['errors']);
165
172
  throw new Error(ret['errors']);
@@ -176,6 +183,14 @@ class ClientEngine {
176
183
  const instance = ret['instance'] as IInstanceData;
177
184
  return instance;
178
185
  }
186
+ async status() {
187
+ const ret = await this.client.get('engine/status', {});
188
+ if (ret['errors']) {
189
+ console.log(ret['errors']);
190
+ throw new Error(ret['errors']);
191
+ }
192
+ return ret;
193
+ }
179
194
  }
180
195
  class ClientDatastore {
181
196
  private client: BPMNClient;
@@ -203,7 +218,7 @@ class ClientDatastore {
203
218
  return instances;
204
219
  }
205
220
  async deleteInstances(query) {
206
- return await this.client.del('datastore/delete', query);
221
+ return await this.client.del('datastore/deleteInstances', query);
207
222
  }
208
223
  }
209
224
  class ClientDefinitions {
@@ -0,0 +1,12 @@
1
+ {
2
+ "diff": true,
3
+ "extension": [ "js" ],
4
+ "package": "package.json",
5
+ "reporter": "spec",
6
+ "slow": 1500,
7
+ "timeout": 50000,
8
+ "recursive": true,
9
+ "file": [ "test/helpers/setup.js" ],
10
+ "ui": "mocha-cakes-2",
11
+ "watch-files": [ "test/feature/*.js" ]
12
+ }
package/test/feature/.env CHANGED
@@ -1,5 +1,3 @@
1
1
  API_KEY=1234
2
- MONGO_DB_URL=mongodb://localhost:27017?retryWrites=true&w=majority
3
- MONGO_DB_NAME=bpmn
4
- SENDGRID_API_KEY=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
2
+
5
3
 
@@ -3,10 +3,10 @@ const { BPMNClient } = require("../../src/");
3
3
 
4
4
 
5
5
  const API_KEY = '12345';
6
- //const HOST = 'localhost';
7
- //const PORT = '3000';
8
- const HOST = 'test.omniworkflow.com';
9
- const PORT = '443';
6
+ const HOST = 'localhost';
7
+ const PORT = '3000';
8
+ //const HOST = 'test.omniworkflow.com';
9
+ //const PORT = '443';
10
10
 
11
11
  const BASE_URL = 'api';
12
12
 
@@ -89,6 +89,11 @@ Feature('Buy Used Car- clean and repair', () => {
89
89
 
90
90
  });
91
91
 
92
+ and('find engine status', async () => {
93
+
94
+ var insts = await server.engine.status();
95
+
96
+ });
92
97
 
93
98
  //
94
99
  and('find instances', async () => {
package/test.env ADDED
@@ -0,0 +1,4 @@
1
+ API_KEY=12345
2
+ HOST=test.omniworkflow.com
3
+ PORT=443
4
+ BASE_URL=api
package/test.js CHANGED
@@ -13,12 +13,42 @@ const _1 = require("./");
13
13
  console.log("Testing BPMNClient");
14
14
  const dotenv = require('dotenv');
15
15
  const res = dotenv.config();
16
- console.log(res);
17
- test();
16
+ const server = new _1.BPMNClient(process.env.HOST, process.env.PORT, process.env.API_KEY);
17
+ testMessage();
18
+ function displayInstance(instanceId) {
19
+ return __awaiter(this, void 0, void 0, function* () {
20
+ let insts = yield server.datastore.findInstances({ id: instanceId });
21
+ for (var i = 0; i < insts.length; i++) {
22
+ let inst = insts[i];
23
+ var items = inst.items;
24
+ console.log(`name: ${inst.name} status: ${inst.status} instanceId: ${inst.id}
25
+ startedAt: ${inst.startedAt} endedAt ${inst.endedAt}`, 'data:', inst.data);
26
+ for (var j = 0; j < items.length; j++) {
27
+ let item = items[j];
28
+ console.log(`element: ${item.elementId} status: ${item.status} id: ${item.id}`);
29
+ }
30
+ }
31
+ });
32
+ }
33
+ function testMessage() {
34
+ return __awaiter(this, void 0, void 0, function* () {
35
+ const messageId = 'Message-104';
36
+ let messageData = {};
37
+ console.log('calling');
38
+ let response = yield server.engine.throwMessage(messageId, messageData);
39
+ if (response['id'])
40
+ return yield displayInstance(response['id']);
41
+ else
42
+ return null;
43
+ });
44
+ }
18
45
  function test() {
19
46
  return __awaiter(this, void 0, void 0, function* () {
20
47
  const server = new _1.BPMNClient(process.env.HOST, process.env.PORT, process.env.API_KEY);
21
48
  const caseId = 3040;
49
+ var delResp = yield server.datastore.deleteInstances({ name: 'Buy Used Car' });
50
+ //console.log(delResp);
51
+ //return;
22
52
  var defs = yield server.definitions.list();
23
53
  console.log(defs);
24
54
  var def = yield server.definitions.load('Buy Used Car');
@@ -39,6 +69,10 @@ function test() {
39
69
  catch (exc) {
40
70
  console.log(exc);
41
71
  }
72
+ var items = yield server.datastore.findItems({ "items.status": "end", "items.elementId": "task_Buy" });
73
+ items.forEach(item => {
74
+ console.log('item: id==>' + item.elementId, item.type, item.name, 'status==>', item.status);
75
+ });
42
76
  var insts = yield server.datastore.findInstances({ data: { caseId: caseId } });
43
77
  insts.forEach(inst => {
44
78
  console.log('Inst for CaseId id==>' + inst.id, inst.name, inst.data.caseId, 'status==>', inst.status);
@@ -62,3 +96,12 @@ function test() {
62
96
  });
63
97
  });
64
98
  }
99
+ function delay(time, result) {
100
+ return __awaiter(this, void 0, void 0, function* () {
101
+ return new Promise(function (resolve) {
102
+ setTimeout(function () {
103
+ resolve(result);
104
+ }, time);
105
+ });
106
+ });
107
+ }
package/test.ts CHANGED
@@ -5,15 +5,51 @@ console.log("Testing BPMNClient");
5
5
  const dotenv = require('dotenv');
6
6
  const res = dotenv.config();
7
7
 
8
- console.log(res);
9
- test();
8
+ const server = new BPMNClient(process.env.HOST, process.env.PORT, process.env.API_KEY);
9
+
10
+ testMessage();
11
+
12
+ async function displayInstance(instanceId) {
13
+
14
+ let insts = await server.datastore.findInstances({ id: instanceId })
15
+
16
+ for (var i = 0; i < insts.length; i++) {
17
+ let inst = insts[i];
18
+ var items = inst.items;
19
+ console.log(`name: ${inst.name} status: ${inst.status} instanceId: ${inst.id}
20
+ startedAt: ${inst.startedAt} endedAt ${inst.endedAt}`, 'data:', inst.data);
21
+ for (var j = 0; j < items.length; j++) {
22
+ let item = items[j];
23
+ console.log(`element: ${item.elementId} status: ${item.status} id: ${item.id}`);
24
+ }
25
+ }
26
+ }
27
+
28
+
29
+ async function testMessage() {
30
+ const messageId = 'Message-104';
31
+
32
+ let messageData = {};
33
+
34
+ console.log('calling');
35
+ let response = await server.engine.throwMessage(messageId, messageData);
36
+ if (response['id'])
37
+ return await displayInstance(response['id']);
38
+ else
39
+ return null;
40
+ }
41
+
10
42
 
11
43
  async function test() {
12
44
 
13
- const server= new BPMNClient(process.env.HOST, process.env.PORT, process.env.API_KEY);
45
+ const server = new BPMNClient(process.env.HOST, process.env.PORT, process.env.API_KEY);
14
46
 
15
47
  const caseId = 3040;
16
48
 
49
+
50
+ var delResp = await server.datastore.deleteInstances({ name: 'Buy Used Car' });
51
+ //console.log(delResp);
52
+ //return;
17
53
  var defs = await server.definitions.list();
18
54
 
19
55
  console.log(defs);
@@ -61,6 +97,16 @@ async function test() {
61
97
 
62
98
 
63
99
 
100
+
101
+ var items = await server.datastore.findItems({ "items.status": "end", "items.elementId": "task_Buy" });
102
+
103
+
104
+ items.forEach(item => {
105
+ console.log('item: id==>' + item.elementId, item.type, item.name, 'status==>', item.status);
106
+ });
107
+
108
+
109
+
64
110
  var insts = await server.datastore.findInstances({ data: { caseId: caseId } });
65
111
 
66
112
  insts.forEach(inst => {
@@ -94,7 +140,14 @@ async function test() {
94
140
  items.forEach(item => {
95
141
  console.log('item: id==>' + item.elementId, item.type, item.name, 'status==>', item.status);
96
142
  });
143
+ }
97
144
 
145
+ async function delay(time, result) {
146
+ return new Promise(function (resolve) {
147
+ setTimeout(function () {
148
+ resolve(result);
149
+ }, time);
150
+ });
98
151
  }
99
152
 
100
153