botium-core 1.13.0 → 1.13.1

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.
@@ -14,7 +14,7 @@ var randomatic = require('randomatic');
14
14
  var lodash = require('lodash');
15
15
  var boolean$1 = require('boolean');
16
16
  var events = require('events');
17
- var debug$l = require('debug');
17
+ var debug$m = require('debug');
18
18
  var vm2 = require('vm2');
19
19
  var isClass = require('is-class');
20
20
  var crypto = require('crypto');
@@ -53,7 +53,7 @@ var randomatic__default = /*#__PURE__*/_interopDefaultLegacy(randomatic);
53
53
  var lodash__default = /*#__PURE__*/_interopDefaultLegacy(lodash);
54
54
  var boolean__default = /*#__PURE__*/_interopDefaultLegacy(boolean$1);
55
55
  var events__default = /*#__PURE__*/_interopDefaultLegacy(events);
56
- var debug__default = /*#__PURE__*/_interopDefaultLegacy(debug$l);
56
+ var debug__default = /*#__PURE__*/_interopDefaultLegacy(debug$m);
57
57
  var vm2__default = /*#__PURE__*/_interopDefaultLegacy(vm2);
58
58
  var isClass__default = /*#__PURE__*/_interopDefaultLegacy(isClass);
59
59
  var crypto__default = /*#__PURE__*/_interopDefaultLegacy(crypto);
@@ -79,7 +79,7 @@ var express__default = /*#__PURE__*/_interopDefaultLegacy(express);
79
79
  var bodyParser__default = /*#__PURE__*/_interopDefaultLegacy(bodyParser);
80
80
 
81
81
  var name = "botium-core";
82
- var version$1 = "1.13.0";
82
+ var version$1 = "1.13.1";
83
83
  var description = "The Selenium for Chatbots";
84
84
  var main = "index.js";
85
85
  var module$1 = "dist/botium-es.js";
@@ -111,17 +111,17 @@ var bugs = {
111
111
  };
112
112
  var homepage = "https://www.botium.ai";
113
113
  var dependencies = {
114
- "@babel/runtime": "^7.18.3",
114
+ "@babel/runtime": "^7.18.6",
115
115
  async: "^3.2.4",
116
116
  "body-parser": "^1.20.0",
117
117
  boolean: "^3.2.0",
118
118
  bottleneck: "^2.19.5",
119
- "csv-parse": "^5.2.0",
119
+ "csv-parse": "^5.3.0",
120
120
  debug: "^4.3.4",
121
121
  esprima: "^4.0.1",
122
122
  express: "^4.18.1",
123
123
  globby: "11.0.4",
124
- ioredis: "^5.0.6",
124
+ ioredis: "^5.1.0",
125
125
  "is-class": "^0.0.9",
126
126
  "is-json": "^2.0.1",
127
127
  jsonpath: "^1.1.1",
@@ -129,7 +129,7 @@ var dependencies = {
129
129
  "markdown-it": "^13.0.1",
130
130
  "mime-types": "^2.1.35",
131
131
  mkdirp: "^1.0.4",
132
- moment: "^2.29.3",
132
+ moment: "^2.29.4",
133
133
  mustache: "^4.2.0",
134
134
  "promise-retry": "^2.0.1",
135
135
  "promise.allsettled": "^1.0.5",
@@ -144,33 +144,33 @@ var dependencies = {
144
144
  "swagger-jsdoc": "^6.2.1",
145
145
  "swagger-ui-express": "^4.4.0",
146
146
  uuid: "^8.3.2",
147
- vm2: "^3.9.9",
147
+ vm2: "^3.9.10",
148
148
  "write-yaml": "^1.0.0",
149
149
  xlsx: "^0.18.5",
150
150
  xregexp: "^5.1.1",
151
151
  yaml: "^2.1.1"
152
152
  };
153
153
  var devDependencies = {
154
- "@babel/core": "^7.18.5",
155
- "@babel/node": "^7.18.5",
156
- "@babel/plugin-transform-runtime": "^7.18.5",
157
- "@babel/preset-env": "^7.18.2",
154
+ "@babel/core": "^7.18.6",
155
+ "@babel/node": "^7.18.6",
156
+ "@babel/plugin-transform-runtime": "^7.18.6",
157
+ "@babel/preset-env": "^7.18.6",
158
158
  chai: "^4.3.6",
159
159
  "chai-as-promised": "^7.1.1",
160
160
  "cross-env": "^7.0.3",
161
- eslint: "^8.18.0",
161
+ eslint: "^8.19.0",
162
162
  "eslint-config-standard": "^17.0.0",
163
163
  "eslint-plugin-import": "^2.26.0",
164
- "eslint-plugin-n": "^15.2.3",
164
+ "eslint-plugin-n": "^15.2.4",
165
165
  "eslint-plugin-promise": "^6.0.0",
166
166
  "eslint-plugin-standard": "^4.1.0",
167
167
  "license-checker": "^25.0.1",
168
168
  "license-compatibility-checker": "^0.3.5",
169
169
  mocha: "^10.0.0",
170
- nock: "^13.2.7",
171
- "npm-check-updates": "^14.0.1",
170
+ nock: "^13.2.8",
171
+ "npm-check-updates": "^15.2.6",
172
172
  nyc: "^15.1.0",
173
- rollup: "^2.75.6",
173
+ rollup: "^2.76.0",
174
174
  "rollup-plugin-babel": "^4.4.0",
175
175
  "rollup-plugin-commonjs": "^10.1.0",
176
176
  "rollup-plugin-json": "^4.0.0",
@@ -1231,7 +1231,7 @@ LogicHookConsts.DEFAULT_USER_INPUTS;
1231
1231
  const {
1232
1232
  NodeVM: NodeVM$2
1233
1233
  } = vm2__default["default"];
1234
- const debug$k = debug__default["default"]('botium-core-asserterUtils');
1234
+ const debug$l = debug__default["default"]('botium-core-asserterUtils');
1235
1235
  const {
1236
1236
  BotiumError: BotiumError$6
1237
1237
  } = BotiumError_1;
@@ -1296,7 +1296,7 @@ var LogicHookUtils_1 = class LogicHookUtils {
1296
1296
  _fetchAsserters() {
1297
1297
  this.caps[Capabilities.ASSERTERS].forEach(asserter => {
1298
1298
  if (this.asserters[asserter.ref]) {
1299
- debug$k(`${asserter.ref} asserter already exists, overwriting.`);
1299
+ debug$l(`${asserter.ref} asserter already exists, overwriting.`);
1300
1300
  }
1301
1301
 
1302
1302
  this.asserters[asserter.ref] = this._loadClass(asserter, 'asserter');
@@ -1310,7 +1310,7 @@ var LogicHookUtils_1 = class LogicHookUtils {
1310
1310
  _fetchLogicHooks() {
1311
1311
  this.caps[Capabilities.LOGIC_HOOKS].forEach(logicHook => {
1312
1312
  if (this.logicHooks[logicHook.ref]) {
1313
- debug$k(`${logicHook.ref} logic hook already exists, overwriting.`);
1313
+ debug$l(`${logicHook.ref} logic hook already exists, overwriting.`);
1314
1314
  }
1315
1315
 
1316
1316
  this.logicHooks[logicHook.ref] = this._loadClass(logicHook, 'logichook');
@@ -1324,7 +1324,7 @@ var LogicHookUtils_1 = class LogicHookUtils {
1324
1324
  _fetchUserInputs() {
1325
1325
  this.caps[Capabilities.USER_INPUTS].forEach(userInput => {
1326
1326
  if (this.userInputs[userInput.ref]) {
1327
- debug$k(`${userInput.ref} userinput already exists, overwriting.`);
1327
+ debug$l(`${userInput.ref} userinput already exists, overwriting.`);
1328
1328
  }
1329
1329
 
1330
1330
  this.userInputs[userInput.ref] = this._loadClass(userInput, 'userinput');
@@ -1467,7 +1467,7 @@ var LogicHookUtils_1 = class LogicHookUtils {
1467
1467
  });
1468
1468
  return vm.run(script);
1469
1469
  } catch (err) {
1470
- throw new Error(`${err.message || err}`);
1470
+ throw new Error(`Script ${key} is not valid - ${err.message || err}`);
1471
1471
  }
1472
1472
  } else {
1473
1473
  throw new Error(`Script "${key}" is not valid - only functions and javascript code accepted`);
@@ -1558,7 +1558,7 @@ var LogicHookUtils_1 = class LogicHookUtils {
1558
1558
  }
1559
1559
  }
1560
1560
 
1561
- loadErr.forEach(debug$k);
1561
+ loadErr.forEach(debug$l);
1562
1562
  }
1563
1563
 
1564
1564
  throw new Error(`Failed to fetch ${ref} ${hookType}, no idea how to load ...`);
@@ -2417,7 +2417,7 @@ var helper = {
2417
2417
  linesToScriptingMemories: linesToScriptingMemories$2
2418
2418
  };
2419
2419
 
2420
- const debug$j = debug__default["default"]('botium-core-ScriptingMemory');
2420
+ const debug$k = debug__default["default"]('botium-core-ScriptingMemory');
2421
2421
  const {
2422
2422
  v1: uuidv1
2423
2423
  } = uuid__default["default"];
@@ -2675,7 +2675,7 @@ const extractVarNames = text => {
2675
2675
  };
2676
2676
 
2677
2677
  const fill = (container, scriptingMemory, result, utterance, scriptingEvents) => {
2678
- debug$j(`fill start: ${util__default["default"].inspect(scriptingMemory)}`);
2678
+ debug$k(`fill start: ${util__default["default"].inspect(scriptingMemory)}`);
2679
2679
  let varRegex;
2680
2680
 
2681
2681
  switch (container.caps[Capabilities.SCRIPTING_MEMORY_MATCHING_MODE]) {
@@ -2719,14 +2719,14 @@ const fill = (container, scriptingMemory, result, utterance, scriptingEvents) =>
2719
2719
  const varName = varMatches[i - 1];
2720
2720
 
2721
2721
  if (RESERVED_WORDS.indexOf(varName) >= 0) {
2722
- debug$j(`fill Variable "${varName}" is not overwritten, because it is reserved word. `);
2722
+ debug$k(`fill Variable "${varName}" is not overwritten, because it is reserved word. `);
2723
2723
  } else {
2724
2724
  scriptingMemory[varName] = resultMatches[i];
2725
2725
  }
2726
2726
  }
2727
2727
  }
2728
2728
  });
2729
- debug$j(`fill end: ${util__default["default"].inspect(scriptingMemory)}`);
2729
+ debug$k(`fill end: ${util__default["default"].inspect(scriptingMemory)}`);
2730
2730
  }
2731
2731
  };
2732
2732
 
@@ -2745,6 +2745,47 @@ ScriptingMemory.extractVarNames;
2745
2745
  ScriptingMemory.RESERVED_WORDS;
2746
2746
  ScriptingMemory.SCRIPTING_FUNCTIONS;
2747
2747
 
2748
+ const debug$j = debug__default["default"]('botium-core-RetryHelper');
2749
+ var RetryHelper_1 = class RetryHelper {
2750
+ constructor(caps, section, options = {}) {
2751
+ this.retryErrorPatterns = [];
2752
+ const onErrorRegexp = caps[`RETRY_${section.toUpperCase()}_ONERROR_REGEXP`] || [];
2753
+
2754
+ if (onErrorRegexp) {
2755
+ if (lodash__default["default"].isArray(onErrorRegexp)) {
2756
+ onErrorRegexp.forEach(r => {
2757
+ if (lodash__default["default"].isString(r)) this.retryErrorPatterns.push(new RegExp(r, 'i'));else this.retryErrorPatterns.push(r);
2758
+ });
2759
+ } else if (lodash__default["default"].isString(onErrorRegexp)) {
2760
+ this.retryErrorPatterns.push(new RegExp(onErrorRegexp, 'i'));
2761
+ } else {
2762
+ this.retryErrorPatterns.push(onErrorRegexp);
2763
+ }
2764
+ } // to turn on retries, NUMRETRIES or ONERROR_REGEXP has to be set
2765
+
2766
+
2767
+ this.retrySettings = {
2768
+ retries: caps[`RETRY_${section.toUpperCase()}_NUMRETRIES`] || (!lodash__default["default"].isNil(options.numRetries) ? options.numRetries : this.retryErrorPatterns.length === 0 ? 0 : 1),
2769
+ factor: caps[`RETRY_${section.toUpperCase()}_FACTOR`] || (lodash__default["default"].isNil(options.factor) ? 1 : options.factor),
2770
+ minTimeout: caps[`RETRY_${section.toUpperCase()}_MINTIMEOUT`] || (lodash__default["default"].isNil(options.minTimeout) ? 1000 : options.minTimeout)
2771
+ };
2772
+ debug$j(`Retry for ${section} is ${this.retrySettings.retries > 0 ? 'enabled' : 'disabled'}. Settings: ${JSON.stringify(this.retrySettings)} Patterns: ${JSON.stringify(this.retryErrorPatterns.map(r => r.toString()))}`);
2773
+ }
2774
+
2775
+ shouldRetry(err) {
2776
+ if (!err) return false;
2777
+ if (this.retryErrorPatterns.length === 0) return true;
2778
+ const errString = util__default["default"].inspect(err);
2779
+
2780
+ for (const re of this.retryErrorPatterns) {
2781
+ if (errString.match(re)) return true;
2782
+ }
2783
+
2784
+ return false;
2785
+ }
2786
+
2787
+ };
2788
+
2748
2789
  const debug$i = debug__default["default"]('botium-core-Convo');
2749
2790
  const {
2750
2791
  BotiumError: BotiumError$4,
@@ -2970,6 +3011,26 @@ class Convo$6 {
2970
3011
  }
2971
3012
 
2972
3013
  async Run(container) {
3014
+ const retryHelper = new RetryHelper_1(container.caps, 'CONVO');
3015
+ return promiseRetry__default["default"](async (retry, number) => {
3016
+ return this.RunImpl(container).catch(err => {
3017
+ const retryRemaining = retryHelper.retrySettings.retries - number + 1;
3018
+
3019
+ if (retryHelper.shouldRetry(err)) {
3020
+ debug$i(`Convo failed with error "${err.message || JSON.stringify(err)}". Retry ${retryRemaining > 0 ? 'enabled' : 'disabled'} (remaining #${retryRemaining}/${retryHelper.retrySettings.retries}, criterion matches)`);
3021
+ retry(err);
3022
+ } else {
3023
+ if (retryHelper.retryErrorPatterns.length > 0) {
3024
+ debug$i(`Convo failed with error "${err.message || JSON.stringify(err)}". Retry 'disabled' (remaining (#${retryRemaining}/${retryHelper.retrySettings.retries}), criterion does not match)`);
3025
+ }
3026
+
3027
+ throw err;
3028
+ }
3029
+ });
3030
+ }, retryHelper.retrySettings);
3031
+ }
3032
+
3033
+ async RunImpl(container) {
2973
3034
  const transcript = new Transcript({
2974
3035
  steps: [],
2975
3036
  attachments: [],
@@ -3641,42 +3702,6 @@ var Convo_1 = {
3641
3702
  ConvoStep: ConvoStep$1
3642
3703
  };
3643
3704
 
3644
- var RetryHelper_1 = class RetryHelper {
3645
- constructor(caps, section) {
3646
- this.retrySettings = {
3647
- retries: caps[`RETRY_${section.toUpperCase()}_NUMRETRIES`] || 1,
3648
- factor: caps[`RETRY_${section.toUpperCase()}_FACTOR`] || 1,
3649
- minTimeout: caps[`RETRY_${section.toUpperCase()}_MINTIMEOUT`] || 1000
3650
- };
3651
- this.retryErrorPatterns = [];
3652
- const onErrorRegexp = caps[`RETRY_${section.toUpperCase()}_ONERROR_REGEXP`] || [];
3653
-
3654
- if (onErrorRegexp) {
3655
- if (lodash__default["default"].isArray(onErrorRegexp)) {
3656
- onErrorRegexp.forEach(r => {
3657
- if (lodash__default["default"].isString(r)) this.retryErrorPatterns.push(new RegExp(r, 'i'));else this.retryErrorPatterns.push(r);
3658
- });
3659
- } else if (lodash__default["default"].isString(onErrorRegexp)) {
3660
- this.retryErrorPatterns.push(new RegExp(onErrorRegexp, 'i'));
3661
- } else {
3662
- this.retryErrorPatterns.push(onErrorRegexp);
3663
- }
3664
- }
3665
- }
3666
-
3667
- shouldRetry(err) {
3668
- if (!err || this.retryErrorPatterns.length === 0) return false;
3669
- const errString = util__default["default"].inspect(err);
3670
-
3671
- for (const re of this.retryErrorPatterns) {
3672
- if (errString.match(re)) return true;
3673
- }
3674
-
3675
- return false;
3676
- }
3677
-
3678
- };
3679
-
3680
3705
  const {
3681
3706
  toString,
3682
3707
  quoteRegexpString