botium-core
Version:
The Selenium for Chatbots
1,404 lines (1,388 loc) • 356 kB
JavaScript
import util from 'util';
import fs from 'fs';
import path from 'path';
import async from 'async';
import rimraf$1 from 'rimraf';
import mkdirp from 'mkdirp';
import sanitizeFilename from 'sanitize-filename';
import moment from 'moment';
import randomatic from 'randomatic';
import lodash from 'lodash';
import boolean$1 from 'boolean';
import events from 'events';
import debug$n from 'debug';
import isClass from 'is-class';
import crypto from 'crypto';
import globby from 'globby';
import promiseRetry from 'promise-retry';
import promise from 'promise.allsettled';
import uuid from 'uuid';
import jsonpath from 'jsonpath';
import isJson$1 from 'is-json';
import wordErrorRate from 'word-error-rate';
import markdownIt from 'markdown-it';
import xlsx from 'xlsx';
import sync from 'csv-parse/sync';
import yaml from 'yaml';
import child_process from 'child_process';
import socket from 'socket.io-client';
import bottleneck from 'bottleneck';
import request from 'request';
import mustache from 'mustache';
import mimeTypes from 'mime-types';
import ioredis from 'ioredis';
import express from 'express';
import bodyParser from 'body-parser';
var name = "botium-core";
var version$1 = "1.14.0";
var description = "The Selenium for Chatbots";
var main = "index.js";
var module = "dist/botium-es.js";
var engines = {
node: ">=14.0.0"
};
var scripts = {
postinstall: "node ./report.js",
build: "npm run eslint && nyc npm test && nyc check-coverage --lines 50 --functions 50 --branches 35 && rollup -c",
eslint: "eslint \"./src/**/*.js\" \"./test/**/*.js\"",
"eslint-fix": "eslint --fix \"./src/**/*.js\" \"./test/**/*.js\"",
newpatch: "npm version patch",
agent: "node ./src/grid/agent/agent.js",
"agent-jsdoc": "swagger-jsdoc -d ./src/grid/agent/swaggerDef.json -o ./src/grid/agent/swagger.json ./src/grid/agent/routes.js",
link: "npm link botium-connector-dialogflow botium-connector-webdriverio botium-connector-directline3 botium-connector-watson botium-connector-alexa-smapi botium-connector-echo",
test: "cross-env NODE_PATH=\"./test/plugins/plugindir/fromfolder:./test/plugins/plugindir/fromfile:./test/security/resources\" mocha \"./test/**/*.spec.js\"",
"coverage:report": "nyc report --reporter=lcov npm test",
"update-dependencies": "npm-check-updates --reject globby,rollup -u --timeout 120000"
};
var repository = {
type: "git",
url: "git+https://github.com/codeforequity-at/botium-core.git"
};
var author = "Florian Treml";
var license = "MIT";
var bugs = {
url: "https://github.com/codeforequity-at/botium-core/issues"
};
var homepage = "https://www.botium.ai";
var dependencies = {
"@babel/runtime": "^7.22.15",
async: "^3.2.4",
"body-parser": "^1.20.2",
boolean: "^3.2.0",
bottleneck: "^2.19.5",
"csv-parse": "^5.5.0",
debug: "^4.3.4",
express: "^4.18.2",
globby: "11.0.4",
ioredis: "^5.3.2",
"is-class": "^0.0.9",
"is-json": "^2.0.1",
jsonpath: "^1.1.1",
lodash: "^4.17.21",
"markdown-it": "^13.0.1",
"mime-types": "^2.1.35",
mkdirp: "^3.0.1",
moment: "^2.29.4",
"moment-timezone": "^0.5.43",
mustache: "^4.2.0",
"promise-retry": "^2.0.1",
"promise.allsettled": "^1.0.7",
randomatic: "^3.1.1",
request: "^2.88.2",
rimraf: "^5.0.1",
"sanitize-filename": "^1.6.3",
slugify: "^1.6.6",
"socket.io": "^4.7.2",
"socket.io-client": "^4.7.2",
"socketio-auth": "^0.1.1",
"swagger-jsdoc": "^6.2.8",
"swagger-ui-express": "^5.0.0",
uuid: "^9.0.0",
"word-error-rate": "0.0.7",
"write-yaml": "^1.0.0",
xlsx: "^0.18.5",
xregexp: "^5.1.1",
yaml: "^2.3.2"
};
var devDependencies = {
"@babel/core": "^7.22.17",
"@babel/node": "^7.22.15",
"@babel/plugin-transform-runtime": "^7.22.15",
"@babel/preset-env": "^7.22.15",
chai: "^4.3.8",
"chai-as-promised": "^7.1.1",
"cross-env": "^7.0.3",
eslint: "^8.49.0",
"eslint-config-standard": "^17.1.0",
"eslint-plugin-import": "^2.28.1",
"eslint-plugin-mocha": "^10.1.0",
"eslint-plugin-n": "^16.1.0",
"eslint-plugin-promise": "^6.1.1",
"eslint-plugin-standard": "^4.1.0",
mocha: "^10.2.0",
nock: "^13.3.3",
"npm-check-updates": "^16.13.3",
nyc: "^15.1.0",
rollup: "2.79.1",
"rollup-plugin-babel": "^4.4.0",
"rollup-plugin-commonjs": "^10.1.0",
"rollup-plugin-json": "^4.0.0",
"rollup-plugin-node-resolve": "^5.2.0"
};
var _package = {
name: name,
version: version$1,
description: description,
main: main,
module: module,
engines: engines,
scripts: scripts,
repository: repository,
author: author,
license: license,
bugs: bugs,
homepage: homepage,
dependencies: dependencies,
devDependencies: devDependencies
};
var _package$1 = /*#__PURE__*/Object.freeze({
__proto__: null,
name: name,
version: version$1,
description: description,
main: main,
module: module,
engines: engines,
scripts: scripts,
repository: repository,
author: author,
license: license,
bugs: bugs,
homepage: homepage,
dependencies: dependencies,
devDependencies: devDependencies,
'default': _package
});
var Capabilities = {
PROJECTNAME: 'PROJECTNAME',
TESTSESSIONNAME: 'TESTSESSIONNAME',
TESTCASENAME: 'TESTCASENAME',
TEMPDIR: 'TEMPDIR',
SAFEDIR: 'SAFEDIR',
CLEANUPTEMPDIR: 'CLEANUPTEMPDIR',
WAITFORBOTTIMEOUT: 'WAITFORBOTTIMEOUT',
CONTAINERMODE: 'CONTAINERMODE',
PLUGINMODULEPATH: 'PLUGINMODULEPATH',
// falsy or ms/keystroke
SIMULATE_WRITING_SPEED: 'SIMULATE_WRITING_SPEED',
BOTIUMGRIDURL: 'BOTIUMGRIDURL',
BOTIUMAPITOKEN: 'BOTIUMAPITOKEN',
BOTIUMGRIDSLOT: 'BOTIUMGRIDSLOT',
// Simple Rest Bot Settings
SIMPLEREST_PING_URL: 'SIMPLEREST_PING_URL',
SIMPLEREST_PING_VERB: 'SIMPLEREST_PING_VERB',
SIMPLEREST_PING_BODY: 'SIMPLEREST_PING_BODY',
SIMPLEREST_PING_BODY_RAW: 'SIMPLEREST_PING_BODY_RAW',
SIMPLEREST_PING_HEADERS: 'SIMPLEREST_PING_HEADERS',
SIMPLEREST_PING_REQUEST_HOOK: 'SIMPLEREST_PING_REQUEST_HOOK',
SIMPLEREST_PING_RETRIES: 'SIMPLEREST_PING_RETRIES',
SIMPLEREST_PING_TIMEOUT: 'SIMPLEREST_PING_TIMEOUT',
SIMPLEREST_PING_UPDATE_CONTEXT: 'SIMPLEREST_PING_UPDATE_CONTEXT',
SIMPLEREST_PING_PROCESS_RESPONSE: 'SIMPLEREST_PING_PROCESS_RESPONSE',
SIMPLEREST_START_URL: 'SIMPLEREST_START_URL',
SIMPLEREST_START_VERB: 'SIMPLEREST_START_VERB',
SIMPLEREST_START_BODY: 'SIMPLEREST_START_BODY',
SIMPLEREST_START_BODY_RAW: 'SIMPLEREST_START_BODY_RAW',
SIMPLEREST_START_HEADERS: 'SIMPLEREST_START_HEADERS',
SIMPLEREST_START_REQUEST_HOOK: 'SIMPLEREST_START_REQUEST_HOOK',
SIMPLEREST_START_RETRIES: 'SIMPLEREST_START_RETRIES',
SIMPLEREST_START_TIMEOUT: 'SIMPLEREST_START_TIMEOUT',
SIMPLEREST_START_UPDATE_CONTEXT: 'SIMPLEREST_START_UPDATE_CONTEXT',
SIMPLEREST_START_PROCESS_RESPONSE: 'SIMPLEREST_START_PROCESS_RESPONSE',
SIMPLEREST_STOP_URL: 'SIMPLEREST_STOP_URL',
SIMPLEREST_STOP_VERB: 'SIMPLEREST_STOP_VERB',
SIMPLEREST_STOP_BODY: 'SIMPLEREST_STOP_BODY',
SIMPLEREST_STOP_BODY_RAW: 'SIMPLEREST_STOP_BODY_RAW',
SIMPLEREST_STOP_HEADERS: 'SIMPLEREST_STOP_HEADERS',
SIMPLEREST_STOP_REQUEST_HOOK: 'SIMPLEREST_STOP_REQUEST_HOOK',
SIMPLEREST_STOP_RETRIES: 'SIMPLEREST_STOP_RETRIES',
SIMPLEREST_STOP_TIMEOUT: 'SIMPLEREST_STOP_TIMEOUT',
SIMPLEREST_INIT_CONTEXT: 'SIMPLEREST_INIT_CONTEXT',
SIMPLEREST_INIT_TEXT: 'SIMPLEREST_INIT_TEXT',
SIMPLEREST_INIT_PROCESS_RESPONSE: 'SIMPLEREST_INIT_PROCESS_RESPONSE',
SIMPLEREST_PROXY_URL: 'SIMPLEREST_PROXY_URL',
SIMPLEREST_STRICT_SSL: 'SIMPLEREST_STRICT_SSL',
SIMPLEREST_URL: 'SIMPLEREST_URL',
SIMPLEREST_EXTRA_OPTIONS: 'SIMPLEREST_EXTRA_OPTIONS',
SIMPLEREST_IGNORE_EMPTY: 'SIMPLEREST_IGNORE_EMPTY',
SIMPLEREST_TIMEOUT: 'SIMPLEREST_TIMEOUT',
SIMPLEREST_METHOD: 'SIMPLEREST_METHOD',
SIMPLEREST_VERB: 'SIMPLEREST_VERB',
SIMPLEREST_HEADERS_TEMPLATE: 'SIMPLEREST_HEADERS_TEMPLATE',
SIMPLEREST_BODY_TEMPLATE: 'SIMPLEREST_BODY_TEMPLATE',
SIMPLEREST_BODY_RAW: 'SIMPLEREST_BODY_RAW',
SIMPLEREST_START_HOOK: 'SIMPLEREST_START_HOOK',
SIMPLEREST_STOP_HOOK: 'SIMPLEREST_STOP_HOOK',
SIMPLEREST_REQUEST_HOOK: 'SIMPLEREST_REQUEST_HOOK',
SIMPLEREST_PARSER_HOOK: 'SIMPLEREST_PARSER_HOOK',
SIMPLEREST_POLL_URL: 'SIMPLEREST_POLL_URL',
SIMPLEREST_POLL_VERB: 'SIMPLEREST_POLL_VERB',
SIMPLEREST_POLL_BODY: 'SIMPLEREST_POLL_BODY',
SIMPLEREST_POLL_BODY_RAW: 'SIMPLEREST_POLL_BODY_RAW',
SIMPLEREST_POLL_HEADERS: 'SIMPLEREST_POLL_HEADERS',
SIMPLEREST_POLL_REQUEST_HOOK: 'SIMPLEREST_POLL_REQUEST_HOOK',
SIMPLEREST_POLL_INTERVAL: 'SIMPLEREST_POLL_INTERVAL',
SIMPLEREST_POLL_TIMEOUT: 'SIMPLEREST_PING_TIMEOUT',
SIMPLEREST_POLL_UPDATE_CONTEXT: 'SIMPLEREST_POLL_UPDATE_CONTEXT',
SIMPLEREST_CONTEXT_IGNORE_JSONPATH: 'SIMPLEREST_CONTEXT_IGNORE_JSONPATH',
SIMPLEREST_CONTEXT_IGNORE_MATCH: 'SIMPLEREST_CONTEXT_IGNORE_MATCH',
SIMPLEREST_CONTEXT_SKIP_JSONPATH: 'SIMPLEREST_CONTEXT_SKIP_JSONPATH',
SIMPLEREST_CONTEXT_SKIP_MATCH: 'SIMPLEREST_CONTEXT_SKIP_MATCH',
SIMPLEREST_CONTEXT_CONTINUE_JSONPATH: 'SIMPLEREST_CONTEXT_CONTINUE_JSONPATH',
SIMPLEREST_CONTEXT_CONTINUE_MATCH: 'SIMPLEREST_CONTEXT_CONTINUE_MATCH',
SIMPLEREST_BODY_JSONPATH: 'SIMPLEREST_BODY_JSONPATH',
SIMPLEREST_RESPONSE_JSONPATH: 'SIMPLEREST_RESPONSE_JSONPATH',
SIMPLEREST_RESPONSE_HOOK: 'SIMPLEREST_RESPONSE_HOOK',
SIMPLEREST_MEDIA_JSONPATH: 'SIMPLEREST_MEDIA_JSONPATH',
SIMPLEREST_BUTTONS_JSONPATH: 'SIMPLEREST_BUTTONS_JSONPATH',
SIMPLEREST_BUTTONS_TEXT_SUBJSONPATH: 'SIMPLEREST_BUTTONS_TEXT_SUBJSONPATH',
SIMPLEREST_BUTTONS_PAYLOAD_SUBJSONPATH: 'SIMPLEREST_BUTTONS_PAYLOAD_SUBJSONPATH',
SIMPLEREST_CARDS_JSONPATH: 'SIMPLEREST_CARDS_JSONPATH',
SIMPLEREST_CARD_TEXT_JSONPATH: 'SIMPLEREST_CARD_TEXT_JSONPATH',
SIMPLEREST_CARD_SUBTEXT_JSONPATH: 'SIMPLEREST_CARD_SUBTEXT_JSONPATH',
SIMPLEREST_CARD_BUTTONS_JSONPATH: 'SIMPLEREST_CARD_BUTTONS_JSONPATH',
SIMPLEREST_CARD_BUTTONS_TEXT_SUBJSONPATH: 'SIMPLEREST_CARD_BUTTONS_TEXT_SUBJSONPATH',
SIMPLEREST_CARD_BUTTONS_PAYLOAD_SUBJSONPATH: 'SIMPLEREST_CARD_BUTTONS_PAYLOAD_SUBJSONPATH',
SIMPLEREST_CARD_ATTACHMENTS_JSONPATH: 'SIMPLEREST_CARD_ATTACHMENTS_JSONPATH',
SIMPLEREST_CONTEXT_JSONPATH: 'SIMPLEREST_CONTEXT_JSONPATH',
SIMPLEREST_CONTEXT_MERGE_OR_REPLACE: 'SIMPLEREST_CONTEXT_MERGE_OR_REPLACE',
SIMPLEREST_CONVERSATION_ID_TEMPLATE: 'SIMPLEREST_CONVERSATION_ID_TEMPLATE',
SIMPLEREST_STEP_ID_TEMPLATE: 'SIMPLEREST_STEP_ID_TEMPLATE',
SIMPLEREST_INBOUND_REDISURL: 'SIMPLEREST_INBOUND_REDISURL',
SIMPLEREST_INBOUND_ENDPOINT: 'SIMPLEREST_INBOUND_ENDPOINT',
SIMPLEREST_INBOUND_PORT: 'SIMPLEREST_INBOUND_PORT',
SIMPLEREST_INBOUND_SELECTOR_JSONPATH: 'SIMPLEREST_INBOUND_SELECTOR_JSONPATH',
SIMPLEREST_INBOUND_SELECTOR_VALUE: 'SIMPLEREST_INBOUND_SELECTOR_VALUE',
SIMPLEREST_INBOUND_UPDATE_CONTEXT: 'SIMPLEREST_INBOUND_UPDATE_CONTEXT',
SIMPLEREST_REDIS_TOPIC: 'SIMPLEREST_REDIS_TOPIC',
SIMPLEREST_INBOUND_ORDER_UNSETTLED_EVENTS_JSONPATH: 'SIMPLEREST_INBOUND_ORDER_UNSETTLED_EVENTS_JSONPATH',
SIMPLEREST_INBOUND_DEBOUNCE_TIMEOUT: 'SIMPLEREST_INBOUND_DEBOUNCE_TIMEOUT',
SIMPLEREST_COOKIE_REPLICATION: 'SIMPLEREST_COOKIE_REPLICATION',
// Script Compiler
SCRIPTING_TXT_EOL: 'SCRIPTING_TXT_EOL',
// ROW_PER_MESSAGE or QUESTION_ANSWER
SCRIPTING_XLSX_MODE: 'SCRIPTING_XLSX_MODE',
SCRIPTING_XLSX_EOL_WRITE: 'SCRIPTING_XLSX_EOL_WRITE',
SCRIPTING_XLSX_STARTROW: 'SCRIPTING_XLSX_STARTROW',
SCRIPTING_XLSX_STARTCOL: 'SCRIPTING_XLSX_STARTCOL',
SCRIPTING_XLSX_HASNAMECOL: 'SCRIPTING_XLSX_HASNAMECOL',
SCRIPTING_XLSX_HASHEADERS: 'SCRIPTING_XLSX_HASHEADERS',
SCRIPTING_XLSX_SHEETNAMES: 'SCRIPTING_XLSX_SHEETNAMES',
SCRIPTING_XLSX_SHEETNAMES_PCONVOS: 'SCRIPTING_XLSX_SHEETNAMES_PCONVOS',
SCRIPTING_XLSX_SHEETNAMES_UTTERANCES: 'SCRIPTING_XLSX_SHEETNAMES_UTTERANCES',
SCRIPTING_XLSX_SHEETNAMES_SCRIPTING_MEMORY: 'SCRIPTING_XLSX_SHEETNAMES_SCRIPTING_MEMORY',
// hidden capability. All newly in Box created testsets will have this as true. CsvCompiler
// - throws less error (Box reads csv files as utterances, and convo. Compiler cant throw exception if a file is correct, but box tries to load it with incorrect script type)
// 4 or more colums are compiled just as utterances.
SCRIPTING_CSV_LEGACY_MODE_OFF: 'SCRIPTING_CSV_LEGACY_MODE_OFF',
SCRIPTING_CSV_DELIMITER: 'SCRIPTING_CSV_DELIMITER',
SCRIPTING_CSV_SKIP_HEADER: 'SCRIPTING_CSV_SKIP_HEADER',
SCRIPTING_CSV_QUOTE: 'SCRIPTING_CSV_QUOTE',
SCRIPTING_CSV_ESCAPE: 'SCRIPTING_CSV_ESCAPE',
SCRIPTING_CSV_MULTIROW_COLUMN_CONVERSATION_ID: 'SCRIPTING_CSV_MULTIROW_COLUMN_CONVERSATION_ID',
SCRIPTING_CSV_MULTIROW_COLUMN_SENDER: 'SCRIPTING_CSV_MULTIROW_COLUMN_SENDER',
SCRIPTING_CSV_MULTIROW_COLUMN_TEXT: 'SCRIPTING_CSV_MULTIROW_COLUMN_TEXT',
SCRIPTING_CSV_QA_COLUMN_QUESTION: 'SCRIPTING_CSV_QA_COLUMN_QUESTION',
SCRIPTING_CSV_QA_COLUMN_ANSWER: 'SCRIPTING_CSV_QA_COLUMN_ANSWER',
SCRIPTING_CSV_UTTERANCE_STARTROW: 'SCRIPTING_CSV_UTTERANCE_STARTROW',
SCRIPTING_CSV_UTTERANCE_STARTROW_HEADER: 'SCRIPTING_CSV_UTTERANCE_STARTROW_HEADER',
SCRIPTING_CSV_UTTERANCE_STOP_ON_EMPTY: 'SCRIPTING_CSV_UTTERANCE_STOP_ON_EMPTY',
SCRIPTING_NORMALIZE_TEXT: 'SCRIPTING_NORMALIZE_TEXT',
SCRIPTING_ENABLE_MEMORY: 'SCRIPTING_ENABLE_MEMORY',
SCRIPTING_ENABLE_MULTIPLE_ASSERT_ERRORS: 'SCRIPTING_ENABLE_MULTIPLE_ASSERT_ERRORS',
SCRIPTING_ENABLE_SKIP_ASSERT_ERRORS: 'SCRIPTING_ENABLE_SKIP_ASSERT_ERRORS',
SCRIPTING_FORCE_BOT_CONSUMED: 'SCRIPTING_FORCE_BOT_CONSUMED',
// regexp, regexpIgnoreCase, wildcard, wildcardIgnoreCase, wildcardExact, wildcardExactIgnoreCase, include, includeIgnoreCase, equals, equalsIgnoreCase, wer
SCRIPTING_MATCHING_MODE: 'SCRIPTING_MATCHING_MODE',
SCRIPTING_MATCHING_MODE_ARGS: 'SCRIPTING_MATCHING_MODE_ARGS',
// all, first, random
SCRIPTING_UTTEXPANSION_MODE: 'SCRIPTING_UTTEXPANSION_MODE',
SCRIPTING_UTTEXPANSION_RANDOM_COUNT: 'SCRIPTING_UTTEXPANSION_RANDOM_COUNT',
SCRIPTING_UTTEXPANSION_INCOMPREHENSION: 'SCRIPTING_UTTEXPANSION_INCOMPREHENSION',
SCRIPTING_UTTEXPANSION_INCOMPREHENSIONINTENTS: 'SCRIPTING_UTTEXPANSION_INCOMPREHENSIONINTENTS',
SCRIPTING_UTTEXPANSION_INCOMPREHENSIONUTTS: 'SCRIPTING_UTTEXPANSION_INCOMPREHENSIONUTTS',
SCRIPTING_UTTEXPANSION_USENAMEASINTENT: 'SCRIPTING_UTTEXPANSION_USENAMEASINTENT',
// justLineTag, utterance
SCRIPTING_UTTEXPANSION_NAMING_MODE: 'SCRIPTING_UTTEXPANSION_NAMING_MODE',
SCRIPTING_UTTEXPANSION_NAMING_UTTERANCE_MAX: 'SCRIPTING_UTTEXPANSION_NAMING_UTTERANCE_MAX',
// Del original convo or not
SCRIPTING_MEMORYEXPANSION_KEEP_ORIG: 'SCRIPTING_MEMORYEXPANSION_KEEP_ORIG',
// word, non_whitespace, joker
SCRIPTING_MEMORY_MATCHING_MODE: 'SCRIPTING_MEMORY_MATCHING_MODE',
// varnames, testcasenames
SCRIPTING_MEMORY_COLUMN_MODE: 'SCRIPTING_MEMORY_COLUMN_MODE',
// Botium Lifecycle Hooks
CUSTOMHOOK_ONBUILD: 'CUSTOMHOOK_ONBUILD',
CUSTOMHOOK_ONSTART: 'CUSTOMHOOK_ONSTART',
CUSTOMHOOK_ONUSERSAYS: 'CUSTOMHOOK_ONUSERSAYS',
CUSTOMHOOK_ONBOTRESPONSE: 'CUSTOMHOOK_ONBOTRESPONSE',
CUSTOMHOOK_ONSTOP: 'CUSTOMHOOK_ONSTOP',
CUSTOMHOOK_ONCLEAN: 'CUSTOMHOOK_ONCLEAN',
// Extension components
ASSERTERS: 'ASSERTERS',
LOGIC_HOOKS: 'LOGIC_HOOKS',
USER_INPUTS: 'USER_INPUTS',
// API Calls Rate Limiting
RATELIMIT_USERSAYS_MAXCONCURRENT: 'RATELIMIT_USERSAYS_MAXCONCURRENT',
RATELIMIT_USERSAYS_MINTIME: 'RATELIMIT_USERSAYS_MINTIME',
RATELIMIT_BOTTLENECK_FN: 'RATELIMIT_BOTTLENECK_FN',
SECURITY_ALLOW_UNSAFE: 'SECURITY_ALLOW_UNSAFE',
PRECOMPILERS: 'PRECOMPILERS'
};
Capabilities.PROJECTNAME;
Capabilities.TESTSESSIONNAME;
Capabilities.TESTCASENAME;
Capabilities.TEMPDIR;
Capabilities.SAFEDIR;
Capabilities.CLEANUPTEMPDIR;
Capabilities.WAITFORBOTTIMEOUT;
Capabilities.CONTAINERMODE;
Capabilities.PLUGINMODULEPATH;
Capabilities.SIMULATE_WRITING_SPEED;
Capabilities.BOTIUMGRIDURL;
Capabilities.BOTIUMAPITOKEN;
Capabilities.BOTIUMGRIDSLOT;
Capabilities.SIMPLEREST_PING_URL;
Capabilities.SIMPLEREST_PING_VERB;
Capabilities.SIMPLEREST_PING_BODY;
Capabilities.SIMPLEREST_PING_BODY_RAW;
Capabilities.SIMPLEREST_PING_HEADERS;
Capabilities.SIMPLEREST_PING_REQUEST_HOOK;
Capabilities.SIMPLEREST_PING_RETRIES;
Capabilities.SIMPLEREST_PING_TIMEOUT;
Capabilities.SIMPLEREST_PING_UPDATE_CONTEXT;
Capabilities.SIMPLEREST_PING_PROCESS_RESPONSE;
Capabilities.SIMPLEREST_START_URL;
Capabilities.SIMPLEREST_START_VERB;
Capabilities.SIMPLEREST_START_BODY;
Capabilities.SIMPLEREST_START_BODY_RAW;
Capabilities.SIMPLEREST_START_HEADERS;
Capabilities.SIMPLEREST_START_REQUEST_HOOK;
Capabilities.SIMPLEREST_START_RETRIES;
Capabilities.SIMPLEREST_START_TIMEOUT;
Capabilities.SIMPLEREST_START_UPDATE_CONTEXT;
Capabilities.SIMPLEREST_START_PROCESS_RESPONSE;
Capabilities.SIMPLEREST_STOP_URL;
Capabilities.SIMPLEREST_STOP_VERB;
Capabilities.SIMPLEREST_STOP_BODY;
Capabilities.SIMPLEREST_STOP_BODY_RAW;
Capabilities.SIMPLEREST_STOP_HEADERS;
Capabilities.SIMPLEREST_STOP_REQUEST_HOOK;
Capabilities.SIMPLEREST_STOP_RETRIES;
Capabilities.SIMPLEREST_STOP_TIMEOUT;
Capabilities.SIMPLEREST_INIT_CONTEXT;
Capabilities.SIMPLEREST_INIT_TEXT;
Capabilities.SIMPLEREST_INIT_PROCESS_RESPONSE;
Capabilities.SIMPLEREST_PROXY_URL;
Capabilities.SIMPLEREST_STRICT_SSL;
Capabilities.SIMPLEREST_URL;
Capabilities.SIMPLEREST_EXTRA_OPTIONS;
Capabilities.SIMPLEREST_IGNORE_EMPTY;
Capabilities.SIMPLEREST_TIMEOUT;
Capabilities.SIMPLEREST_METHOD;
Capabilities.SIMPLEREST_VERB;
Capabilities.SIMPLEREST_HEADERS_TEMPLATE;
Capabilities.SIMPLEREST_BODY_TEMPLATE;
Capabilities.SIMPLEREST_BODY_RAW;
Capabilities.SIMPLEREST_START_HOOK;
Capabilities.SIMPLEREST_STOP_HOOK;
Capabilities.SIMPLEREST_REQUEST_HOOK;
Capabilities.SIMPLEREST_PARSER_HOOK;
Capabilities.SIMPLEREST_POLL_URL;
Capabilities.SIMPLEREST_POLL_VERB;
Capabilities.SIMPLEREST_POLL_BODY;
Capabilities.SIMPLEREST_POLL_BODY_RAW;
Capabilities.SIMPLEREST_POLL_HEADERS;
Capabilities.SIMPLEREST_POLL_REQUEST_HOOK;
Capabilities.SIMPLEREST_POLL_INTERVAL;
Capabilities.SIMPLEREST_POLL_TIMEOUT;
Capabilities.SIMPLEREST_POLL_UPDATE_CONTEXT;
Capabilities.SIMPLEREST_CONTEXT_IGNORE_JSONPATH;
Capabilities.SIMPLEREST_CONTEXT_IGNORE_MATCH;
Capabilities.SIMPLEREST_CONTEXT_SKIP_JSONPATH;
Capabilities.SIMPLEREST_CONTEXT_SKIP_MATCH;
Capabilities.SIMPLEREST_CONTEXT_CONTINUE_JSONPATH;
Capabilities.SIMPLEREST_CONTEXT_CONTINUE_MATCH;
Capabilities.SIMPLEREST_BODY_JSONPATH;
Capabilities.SIMPLEREST_RESPONSE_JSONPATH;
Capabilities.SIMPLEREST_RESPONSE_HOOK;
Capabilities.SIMPLEREST_MEDIA_JSONPATH;
Capabilities.SIMPLEREST_BUTTONS_JSONPATH;
Capabilities.SIMPLEREST_BUTTONS_TEXT_SUBJSONPATH;
Capabilities.SIMPLEREST_BUTTONS_PAYLOAD_SUBJSONPATH;
Capabilities.SIMPLEREST_CARDS_JSONPATH;
Capabilities.SIMPLEREST_CARD_TEXT_JSONPATH;
Capabilities.SIMPLEREST_CARD_SUBTEXT_JSONPATH;
Capabilities.SIMPLEREST_CARD_BUTTONS_JSONPATH;
Capabilities.SIMPLEREST_CARD_BUTTONS_TEXT_SUBJSONPATH;
Capabilities.SIMPLEREST_CARD_BUTTONS_PAYLOAD_SUBJSONPATH;
Capabilities.SIMPLEREST_CARD_ATTACHMENTS_JSONPATH;
Capabilities.SIMPLEREST_CONTEXT_JSONPATH;
Capabilities.SIMPLEREST_CONTEXT_MERGE_OR_REPLACE;
Capabilities.SIMPLEREST_CONVERSATION_ID_TEMPLATE;
Capabilities.SIMPLEREST_STEP_ID_TEMPLATE;
Capabilities.SIMPLEREST_INBOUND_REDISURL;
Capabilities.SIMPLEREST_INBOUND_ENDPOINT;
Capabilities.SIMPLEREST_INBOUND_PORT;
Capabilities.SIMPLEREST_INBOUND_SELECTOR_JSONPATH;
Capabilities.SIMPLEREST_INBOUND_SELECTOR_VALUE;
Capabilities.SIMPLEREST_INBOUND_UPDATE_CONTEXT;
Capabilities.SIMPLEREST_REDIS_TOPIC;
Capabilities.SIMPLEREST_INBOUND_ORDER_UNSETTLED_EVENTS_JSONPATH;
Capabilities.SIMPLEREST_INBOUND_DEBOUNCE_TIMEOUT;
Capabilities.SIMPLEREST_COOKIE_REPLICATION;
Capabilities.SCRIPTING_TXT_EOL;
Capabilities.SCRIPTING_XLSX_MODE;
Capabilities.SCRIPTING_XLSX_EOL_WRITE;
Capabilities.SCRIPTING_XLSX_STARTROW;
Capabilities.SCRIPTING_XLSX_STARTCOL;
Capabilities.SCRIPTING_XLSX_HASNAMECOL;
Capabilities.SCRIPTING_XLSX_HASHEADERS;
Capabilities.SCRIPTING_XLSX_SHEETNAMES;
Capabilities.SCRIPTING_XLSX_SHEETNAMES_PCONVOS;
Capabilities.SCRIPTING_XLSX_SHEETNAMES_UTTERANCES;
Capabilities.SCRIPTING_XLSX_SHEETNAMES_SCRIPTING_MEMORY;
Capabilities.SCRIPTING_CSV_LEGACY_MODE_OFF;
Capabilities.SCRIPTING_CSV_DELIMITER;
Capabilities.SCRIPTING_CSV_SKIP_HEADER;
Capabilities.SCRIPTING_CSV_QUOTE;
Capabilities.SCRIPTING_CSV_ESCAPE;
Capabilities.SCRIPTING_CSV_MULTIROW_COLUMN_CONVERSATION_ID;
Capabilities.SCRIPTING_CSV_MULTIROW_COLUMN_SENDER;
Capabilities.SCRIPTING_CSV_MULTIROW_COLUMN_TEXT;
Capabilities.SCRIPTING_CSV_QA_COLUMN_QUESTION;
Capabilities.SCRIPTING_CSV_QA_COLUMN_ANSWER;
Capabilities.SCRIPTING_CSV_UTTERANCE_STARTROW;
Capabilities.SCRIPTING_CSV_UTTERANCE_STARTROW_HEADER;
Capabilities.SCRIPTING_CSV_UTTERANCE_STOP_ON_EMPTY;
Capabilities.SCRIPTING_NORMALIZE_TEXT;
Capabilities.SCRIPTING_ENABLE_MEMORY;
Capabilities.SCRIPTING_ENABLE_MULTIPLE_ASSERT_ERRORS;
Capabilities.SCRIPTING_ENABLE_SKIP_ASSERT_ERRORS;
Capabilities.SCRIPTING_FORCE_BOT_CONSUMED;
Capabilities.SCRIPTING_MATCHING_MODE;
Capabilities.SCRIPTING_MATCHING_MODE_ARGS;
Capabilities.SCRIPTING_UTTEXPANSION_MODE;
Capabilities.SCRIPTING_UTTEXPANSION_RANDOM_COUNT;
Capabilities.SCRIPTING_UTTEXPANSION_INCOMPREHENSION;
Capabilities.SCRIPTING_UTTEXPANSION_INCOMPREHENSIONINTENTS;
Capabilities.SCRIPTING_UTTEXPANSION_INCOMPREHENSIONUTTS;
Capabilities.SCRIPTING_UTTEXPANSION_USENAMEASINTENT;
Capabilities.SCRIPTING_UTTEXPANSION_NAMING_MODE;
Capabilities.SCRIPTING_UTTEXPANSION_NAMING_UTTERANCE_MAX;
Capabilities.SCRIPTING_MEMORYEXPANSION_KEEP_ORIG;
Capabilities.SCRIPTING_MEMORY_MATCHING_MODE;
Capabilities.SCRIPTING_MEMORY_COLUMN_MODE;
Capabilities.CUSTOMHOOK_ONBUILD;
Capabilities.CUSTOMHOOK_ONSTART;
Capabilities.CUSTOMHOOK_ONUSERSAYS;
Capabilities.CUSTOMHOOK_ONBOTRESPONSE;
Capabilities.CUSTOMHOOK_ONSTOP;
Capabilities.CUSTOMHOOK_ONCLEAN;
Capabilities.ASSERTERS;
Capabilities.LOGIC_HOOKS;
Capabilities.USER_INPUTS;
Capabilities.RATELIMIT_USERSAYS_MAXCONCURRENT;
Capabilities.RATELIMIT_USERSAYS_MINTIME;
Capabilities.RATELIMIT_BOTTLENECK_FN;
Capabilities.SECURITY_ALLOW_UNSAFE;
Capabilities.PRECOMPILERS;
var Source = {
LOCALPATH: 'LOCALPATH',
GITPATH: 'GITPATH',
GITURL: 'GITURL',
GITBRANCH: 'GITBRANCH',
GITDIR: 'GITDIR',
GITPREPARECMD: 'GITPREPARECMD'
};
Source.LOCALPATH;
Source.GITPATH;
Source.GITURL;
Source.GITBRANCH;
Source.GITDIR;
Source.GITPREPARECMD;
var Defaults$1 = {
Capabilities: {
[Capabilities.PROJECTNAME]: 'Botium Project',
[Capabilities.TESTSESSIONNAME]: 'Botium Test Session',
[Capabilities.TESTCASENAME]: 'Botium Test Case',
[Capabilities.TEMPDIR]: 'botiumwork',
[Capabilities.CLEANUPTEMPDIR]: true,
[Capabilities.WAITFORBOTTIMEOUT]: 10000,
[Capabilities.SIMPLEREST_PING_RETRIES]: 6,
[Capabilities.SIMPLEREST_PING_TIMEOUT]: 10000,
[Capabilities.SIMPLEREST_PING_VERB]: 'GET',
[Capabilities.SIMPLEREST_PING_UPDATE_CONTEXT]: true,
[Capabilities.SIMPLEREST_PING_PROCESS_RESPONSE]: false,
[Capabilities.SIMPLEREST_INIT_PROCESS_RESPONSE]: false,
[Capabilities.SIMPLEREST_STOP_RETRIES]: 6,
[Capabilities.SIMPLEREST_STOP_TIMEOUT]: 10000,
[Capabilities.SIMPLEREST_STOP_VERB]: 'GET',
[Capabilities.SIMPLEREST_START_RETRIES]: 6,
[Capabilities.SIMPLEREST_START_TIMEOUT]: 10000,
[Capabilities.SIMPLEREST_START_UPDATE_CONTEXT]: true,
[Capabilities.SIMPLEREST_START_PROCESS_RESPONSE]: true,
[Capabilities.SIMPLEREST_START_VERB]: 'GET',
[Capabilities.SIMPLEREST_POLL_VERB]: 'GET',
[Capabilities.SIMPLEREST_POLL_INTERVAL]: 1000,
[Capabilities.SIMPLEREST_POLL_TIMEOUT]: 10000,
[Capabilities.SIMPLEREST_POLL_UPDATE_CONTEXT]: true,
[Capabilities.SIMPLEREST_METHOD]: 'GET',
[Capabilities.SIMPLEREST_IGNORE_EMPTY]: true,
[Capabilities.SIMPLEREST_TIMEOUT]: 10000,
[Capabilities.SIMPLEREST_STRICT_SSL]: true,
[Capabilities.SIMPLEREST_INBOUND_UPDATE_CONTEXT]: true,
[Capabilities.SIMPLEREST_CONTEXT_MERGE_OR_REPLACE]: 'MERGE',
[Capabilities.SIMPLEREST_COOKIE_REPLICATION]: true,
[Capabilities.SCRIPTING_TXT_EOL]: '\n',
[Capabilities.SCRIPTING_XLSX_EOL_WRITE]: '\r\n',
[Capabilities.SCRIPTING_XLSX_HASHEADERS]: true,
[Capabilities.SCRIPTING_CSV_SKIP_HEADER]: true,
[Capabilities.SCRIPTING_CSV_QUOTE]: '"',
[Capabilities.SCRIPTING_CSV_ESCAPE]: '"',
[Capabilities.SCRIPTING_NORMALIZE_TEXT]: true,
[Capabilities.SCRIPTING_ENABLE_MEMORY]: false,
[Capabilities.SCRIPTING_ENABLE_MULTIPLE_ASSERT_ERRORS]: false,
[Capabilities.SCRIPTING_MATCHING_MODE]: 'wildcardIgnoreCase',
[Capabilities.SCRIPTING_UTTEXPANSION_MODE]: 'all',
[Capabilities.SCRIPTING_UTTEXPANSION_RANDOM_COUNT]: 1,
[Capabilities.SCRIPTING_UTTEXPANSION_NAMING_MODE]: 'justLineTag',
[Capabilities.SCRIPTING_UTTEXPANSION_NAMING_UTTERANCE_MAX]: '16',
[Capabilities.SCRIPTING_UTTEXPANSION_INCOMPREHENSION]: null,
[Capabilities.SCRIPTING_UTTEXPANSION_INCOMPREHENSIONINTENTS]: [],
[Capabilities.SCRIPTING_UTTEXPANSION_INCOMPREHENSIONUTTS]: [],
[Capabilities.SCRIPTING_UTTEXPANSION_USENAMEASINTENT]: false,
[Capabilities.SCRIPTING_MEMORYEXPANSION_KEEP_ORIG]: false,
[Capabilities.SCRIPTING_ENABLE_SKIP_ASSERT_ERRORS]: false,
[Capabilities.SCRIPTING_FORCE_BOT_CONSUMED]: false,
[Capabilities.ASSERTERS]: [],
[Capabilities.LOGIC_HOOKS]: [],
[Capabilities.USER_INPUTS]: [],
[Capabilities.SECURITY_ALLOW_UNSAFE]: true
},
Sources: {
[Source.LOCALPATH]: '.',
[Source.GITPATH]: 'git',
[Source.GITBRANCH]: 'master',
[Source.GITDIR]: '.'
},
Envs: {
IS_BOTIUM_CONTAINER: true
}
};
Defaults$1.Capabilities;
Defaults$1.Sources;
Defaults$1.Envs;
var Fluent_1 = class Fluent {
constructor(driver) {
this.driver = driver;
this.compiler = null;
this.container = null;
this.currentChannel = null;
this.tasks = [];
this.tasks.push(() => {
return new Promise((resolve, reject) => {
this.driver.Build().then(container => {
this.container = container;
resolve();
}).catch(err => {
reject(err);
});
});
});
}
Exec() {
return new Promise((resolve, reject) => {
async.eachSeries(this.tasks, (task, cb) => {
try {
const taskResult = task();
if (taskResult && taskResult.then) {
taskResult.then(() => cb()).catch(cb);
} else {
cb();
}
} catch (err) {
cb(err);
}
}, err => {
if (err) return reject(err);
resolve();
});
});
}
Start() {
this.tasks.push(() => {
return this.container.Start();
});
return this;
}
SwitchChannel(channel) {
this.tasks.push(() => {
this.currentChannel = channel;
return Promise.resolve();
});
return this;
}
ReadScripts(convoDir, globFilter) {
this.tasks.push(() => {
return new Promise((resolve, reject) => {
if (this.compiler == null) {
try {
this.compiler = this.driver.BuildCompiler();
} catch (err) {
return reject(err);
}
}
try {
this.compiler.ReadScriptsFromDirectory(convoDir, globFilter);
resolve();
} catch (err) {
reject(err);
}
});
});
return this;
}
Compile(scriptBuffer, scriptFormat, scriptType) {
this.tasks.push(() => {
return new Promise((resolve, reject) => {
if (this.compiler == null) {
try {
this.compiler = this.driver.BuildCompiler();
} catch (err) {
return reject(err);
}
}
try {
this.compiler.Compile(scriptBuffer, scriptFormat, scriptType);
resolve();
} catch (err) {
reject(err);
}
});
});
return this;
}
RunScripts(assertCb, failCb) {
this.tasks.push(() => {
return new Promise((resolve, reject) => {
if (assertCb) {
this.compiler.scriptingEvents.assertBotResponse = assertCb.bind(this.compiler);
}
if (failCb) {
this.compiler.scriptingEvents.fail = failCb.bind(this.compiler);
}
this.compiler.ExpandConvos();
async.eachSeries(this.compiler.convos, (convo, convoDone) => {
this.container.Start().then(() => convo.Run(this.container)).then(() => this.container.Stop()).then(() => convoDone()).catch(convoDone);
}, err => {
if (err) return reject(err);else resolve();
});
});
});
return this;
}
UserSaysText(msg) {
this.tasks.push(() => {
if (lodash.isFunction(msg)) {
msg = msg();
}
if (this.currentChannel) {
return this.container.UserSays({
messageText: msg,
channel: this.currentChannel
});
} else {
return this.container.UserSaysText(msg);
}
});
return this;
}
UserSays(msg) {
this.tasks.push(() => {
if (lodash.isFunction(msg)) {
msg = msg();
}
if (this.currentChannel && !msg.channel) {
msg = Object.assign({}, msg);
msg.channel = this.currentChannel;
}
return this.container.UserSays(msg);
});
return this;
}
WaitBotSays(channel = null, timeoutMillis = null, callback = null) {
if (!callback) {
if (timeoutMillis && lodash.isFunction(timeoutMillis)) {
callback = timeoutMillis;
timeoutMillis = null;
} else if (!timeoutMillis && channel && lodash.isFunction(channel)) {
callback = channel;
timeoutMillis = null;
channel = null;
}
}
this.tasks.push(() => {
return new Promise((resolve, reject) => {
if (this.currentChannel && !channel) {
channel = this.currentChannel;
}
this.container.WaitBotSays(channel, timeoutMillis).then(botMsg => {
if (callback) callback(botMsg);
resolve();
}).catch(err => {
reject(err);
});
});
});
return this;
}
WaitBotSaysText(channel = null, timeoutMillis = null, callback = null) {
if (!callback) {
if (timeoutMillis && lodash.isFunction(timeoutMillis)) {
callback = timeoutMillis;
timeoutMillis = null;
} else if (!timeoutMillis && channel && lodash.isFunction(channel)) {
callback = channel;
timeoutMillis = null;
channel = null;
}
}
this.tasks.push(() => {
return new Promise((resolve, reject) => {
if (this.currentChannel && !channel) {
channel = this.currentChannel;
}
this.container.WaitBotSaysText(channel, timeoutMillis).then(text => {
if (callback) callback(text);
resolve();
}).catch(err => {
reject(err);
});
});
});
return this;
}
Restart() {
this.tasks.push(() => {
return this.container.Restart();
});
return this;
}
Stop() {
this.tasks.push(() => {
return this.container.Stop();
});
return this;
}
Clean() {
this.tasks.push(() => {
return this.container.Clean();
});
return this;
}
Call(customFunction) {
this.tasks.push(() => {
return customFunction(this) || Promise.resolve();
});
return this;
}
};
var Events = {
// Botium Events
CONTAINER_BUILDING: 'CONTAINER_BUILDING',
CONTAINER_BUILT: 'CONTAINER_BUILT',
CONTAINER_BUILD_ERROR: 'CONTAINER_BUILD_ERROR',
CONTAINER_STARTING: 'CONTAINER_STARTING',
CONTAINER_STARTED: 'CONTAINER_STARTED',
CONTAINER_START_ERROR: 'CONTAINER_START_ERROR',
CONTAINER_STOPPING: 'CONTAINER_STOPPING',
CONTAINER_STOPPED: 'CONTAINER_STOPPED',
CONTAINER_STOP_ERROR: 'CONTAINER_STOP_ERROR',
CONTAINER_CLEANING: 'CONTAINER_CLEANING',
CONTAINER_CLEANED: 'CONTAINER_CLEANED',
CONTAINER_CLEAN_ERROR: 'CONTAINER_CLEAN_ERROR',
BOT_CONNECTED: 'BOT_CONNECTED',
CONVO_STEP_NEXT: 'CONVO_STEP_NEXT',
// Chatbot Events
MESSAGE_SENTTOBOT: 'MESSAGE_SENTTOBOT',
MESSAGE_SENDTOBOT_ERROR: 'MESSAGE_SENDTOBOT_ERROR',
MESSAGE_RECEIVEDFROMBOT: 'MESSAGE_RECEIVEDFROMBOT',
MESSAGE_RECEIVEFROMBOT_ERROR: 'MESSAGE_RECEIVEFROMBOT_ERROR',
MESSAGE_ATTACHMENT: 'MESSAGE_ATTACHMENT',
MESSAGE_TRANSCRIPT: 'MESSAGE_TRANSCRIPT',
// Botium Agent Events
TOOMUCHWORKERS_ERROR: 'TOOMUCHWORKERS_ERROR'
};
Events.CONTAINER_BUILDING;
Events.CONTAINER_BUILT;
Events.CONTAINER_BUILD_ERROR;
Events.CONTAINER_STARTING;
Events.CONTAINER_STARTED;
Events.CONTAINER_START_ERROR;
Events.CONTAINER_STOPPING;
Events.CONTAINER_STOPPED;
Events.CONTAINER_STOP_ERROR;
Events.CONTAINER_CLEANING;
Events.CONTAINER_CLEANED;
Events.CONTAINER_CLEAN_ERROR;
Events.BOT_CONNECTED;
Events.CONVO_STEP_NEXT;
Events.MESSAGE_SENTTOBOT;
Events.MESSAGE_SENDTOBOT_ERROR;
Events.MESSAGE_RECEIVEDFROMBOT;
Events.MESSAGE_RECEIVEFROMBOT_ERROR;
Events.MESSAGE_ATTACHMENT;
Events.MESSAGE_TRANSCRIPT;
Events.TOOMUCHWORKERS_ERROR;
function commonjsRequire () {
throw new Error('Dynamic requires are not currently supported by rollup-plugin-commonjs');
}
function createCommonjsModule(fn, module) {
return module = { exports: {} }, fn(module, module.exports), module.exports;
}
function getCjsExportFromNamespace (n) {
return n && n['default'] || n;
}
const LOGIC_HOOK_INCLUDE$1 = 'INCLUDE';
var LogicHookConsts = {
LOGIC_HOOK_INCLUDE: LOGIC_HOOK_INCLUDE$1,
DEFAULT_ASSERTERS: [{
name: 'BUTTONS',
className: 'ButtonsAsserter'
}, {
name: 'BUTTONS_COUNT',
className: 'ButtonsCountAsserter'
}, {
name: 'BUTTONS_COUNT_REC',
className: 'ButtonsCountRecAsserter'
}, {
name: 'MEDIA',
className: 'MediaAsserter'
}, {
name: 'MEDIA_COUNT',
className: 'MediaCountAsserter'
}, {
name: 'MEDIA_COUNT_REC',
className: 'MediaCountRecAsserter'
}, {
name: 'CARDS',
className: 'CardsAsserter'
}, {
name: 'CARDS_COUNT',
className: 'CardsCountAsserter'
}, {
name: 'CARDS_COUNT_REC',
className: 'CardsCountRecAsserter'
}, {
name: 'PAUSE_ASSERTER',
className: 'PauseAsserter'
}, {
name: 'JSON_PATH',
className: 'JsonPathAsserter'
}, {
name: 'JSON_PATH_COUNT',
className: 'JsonPathCountAsserter'
}, {
name: 'RESPONSE_LENGTH',
className: 'ResponseLengthAsserter'
}, {
name: 'FORMS',
className: 'FormsAsserter'
}, {
name: 'ENTITIES',
className: 'EntitiesAsserter'
}, {
name: 'ENTITY_VALUES',
className: 'EntityValuesAsserter'
}, {
name: 'ENTITY_CONTENT',
className: 'EntityContentAsserter'
}, {
name: 'INTENT',
className: 'IntentAsserter'
}, {
name: 'INTENT_UNIQUE',
className: 'IntentUniqueAsserter'
}, {
name: 'INTENT_CONFIDENCE',
className: 'IntentConfidenceAsserter'
}, {
name: 'TEXT_CONTAINS_ANY',
className: 'TextContainsAnyAsserter'
}, {
name: 'TEXT_CONTAINS_ANY_IC',
className: 'TextContainsAnyICAsserter'
}, {
name: 'TEXT_CONTAINS_ALL',
className: 'TextContainsAllAsserter'
}, {
name: 'TEXT_CONTAINS_ALL_IC',
className: 'TextContainsAllICAsserter'
}, {
name: 'TEXT_WILDCARD_ANY',
className: 'TextWildcardAnyAsserter'
}, {
name: 'TEXT_WILDCARD_ANY_IC',
className: 'TextWildcardAnyICAsserter'
}, {
name: 'TEXT_WILDCARD_ALL',
className: 'TextWildcardAllAsserter'
}, {
name: 'TEXT_WILDCARD_ALL_IC',
className: 'TextWildcardAllICAsserter'
}, {
name: 'TEXT_WILDCARDEXACT_ANY',
className: 'TextWildcardExactAnyAsserter'
}, {
name: 'TEXT_WILDCARDEXACT_ANY_IC',
className: 'TextWildcardExactAnyICAsserter'
}, {
name: 'TEXT_WILDCARDEXACT_ALL',
className: 'TextWildcardExactAllAsserter'
}, {
name: 'TEXT_WILDCARDEXACT_ALL_IC',
className: 'TextWildcardExactAllICAsserter'
}, {
name: 'TEXT_REGEXP_ANY',
className: 'TextRegexpAnyAsserter'
}, {
name: 'TEXT_REGEXP_ANY_IC',
className: 'TextRegexpAnyICAsserter'
}, {
name: 'TEXT_REGEXP_ALL',
className: 'TextRegexpAllAsserter'
}, {
name: 'TEXT_REGEXP_ALL_IC',
className: 'TextRegexpAllICAsserter'
}, {
name: 'TEXT_EQUALS',
className: 'TextEqualsAnyAsserter'
}, {
name: 'TEXT_EQUALS_IC',
className: 'TextEqualsAnyICAsserter'
}, {
name: 'TEXT',
className: 'TextEqualsAnyAsserter'
}, {
name: 'TEXT_IC',
className: 'TextEqualsAnyICAsserter'
}, {
name: 'TEXT_WER',
className: 'WerAsserter'
}, {
name: 'BOT_CONSUMED',
className: 'BotRepliesConsumedAsserter'
}, {
name: 'BOT_UNCONSUMED_COUNT',
className: 'BotRepliesUnconsumedCountAsserter'
}],
DEFAULT_LOGIC_HOOKS: [{
name: 'PAUSE',
className: 'PauseLogicHook'
}, {
name: 'WAITFORBOT',
className: 'WaitForBotLogicHook'
}, {
name: 'SET_SCRIPTING_MEMORY',
className: 'SetScriptingMemoryLogicHook'
}, {
name: 'CLEAR_SCRIPTING_MEMORY',
className: 'ClearScriptingMemoryLogicHook'
}, {
name: 'ASSIGN_SCRIPTING_MEMORY',
className: 'AssignScriptingMemoryLogicHook'
}, {
name: 'UPDATE_CUSTOM',
className: 'UpdateCustomLogicHook'
}, {
name: 'SKIP_BOT_UNCONSUMED',
className: 'ClearQueueLogicHook'
}, {
name: LOGIC_HOOK_INCLUDE$1,
className: 'IncludeLogicHook'
}, {
name: 'CONDITIONAL_STEP_TIME_BASED',
className: 'ConditionalTimeBasedLogicHook'
}, {
name: 'CONDITIONAL_STEP_BUSINESS_HOURS',
className: 'ConditionalBusinessHoursLogicHook'
}, {
name: 'CONDITIONAL_STEP_CAPABILITY_VALUE_BASED',
className: 'ConditionalCapabilityValueBasedLogicHook'
}, {
name: 'CONDITIONAL_STEP_JSON_PATH_BASED',
className: 'ConditionalJsonPathBasedLogicHook.js'
}],
DEFAULT_USER_INPUTS: [{
name: 'BUTTON',
className: 'ButtonInput'
}, {
name: 'MEDIA',
className: 'MediaInput'
}, {
name: 'FORM',
className: 'FormInput'
}]
};
LogicHookConsts.LOGIC_HOOK_INCLUDE;
LogicHookConsts.DEFAULT_ASSERTERS;
LogicHookConsts.DEFAULT_LOGIC_HOOKS;
LogicHookConsts.DEFAULT_USER_INPUTS;
const debug$m = debug$n('botium-core-asserterUtils');
const {
DEFAULT_ASSERTERS,
DEFAULT_LOGIC_HOOKS,
DEFAULT_USER_INPUTS
} = LogicHookConsts;
DEFAULT_ASSERTERS.forEach(asserter => {
asserter.Class = commonjsRequire(`./asserter/${asserter.className}`);
});
DEFAULT_LOGIC_HOOKS.forEach(logicHook => {
logicHook.Class = commonjsRequire(`./logichooks/${logicHook.className}`);
});
DEFAULT_USER_INPUTS.forEach(userInput => {
userInput.Class = commonjsRequire(`./userinput/${userInput.className}`);
});
var LogicHookUtils_1 = class LogicHookUtils {
constructor({
buildScriptContext,
caps
}) {
this.asserters = {};
this.globalAsserters = [];
this.logicHooks = {};
this.globalLogicHooks = [];
this.userInputs = {};
this.buildScriptContext = buildScriptContext;
this.caps = caps;
this._setDefaultAsserters();
this._setDefaultLogicHooks();
this._setDefaultUserInputs();
this._fetchAsserters();
this._fetchLogicHooks();
this._fetchUserInputs();
}
_setDefaultAsserters() {
DEFAULT_ASSERTERS.forEach(asserter => {
this.asserters[asserter.name] = new asserter.Class(this.buildScriptContext, this.caps);
});
}
_setDefaultLogicHooks() {
DEFAULT_LOGIC_HOOKS.forEach(lh => {
this.logicHooks[lh.name] = new lh.Class(this.buildScriptContext, this.caps);
});
}
_setDefaultUserInputs() {
DEFAULT_USER_INPUTS.forEach(ui => {
this.userInputs[ui.name] = new ui.Class(this.buildScriptContext, this.caps);
});
}
_fetchAsserters() {
this.caps[Capabilities.ASSERTERS].forEach(asserter => {
if (this.asserters[asserter.ref]) {
debug$m(`${asserter.ref} asserter already exists, overwriting.`);
}
this.asserters[asserter.ref] = this._loadClass(asserter, 'asserter');
if (asserter.global) {
this.globalAsserters.push(asserter.ref);
}
});
}
_fetchLogicHooks() {
this.caps[Capabilities.LOGIC_HOOKS].forEach(logicHook => {
if (this.logicHooks[logicHook.ref]) {
debug$m(`${logicHook.ref} logic hook already exists, overwriting.`);
}
this.logicHooks[logicHook.ref] = this._loadClass(logicHook, 'logichook');
if (logicHook.global) {
this.globalLogicHooks.push(logicHook.ref);
}
});
}
_fetchUserInputs() {
this.caps[Capabilities.USER_INPUTS].forEach(userInput => {
if (this.userInputs[userInput.ref]) {
debug$m(`${userInput.ref} userinput already exists, overwriting.`);
}
this.userInputs[userInput.ref] = this._loadClass(userInput, 'userinput');
});
}
getGlobalAsserter() {
return this.globalAsserters.map(name => this.asserters[name]);
}
getGlobalLogicHook() {
return this.globalLogicHooks.map(name => this.logicHooks[name]);
}
_loadClass({
src,
ref,
args
}, hookType) {
if (hookType !== 'asserter' && hookType !== 'logichook' && hookType !== 'userinput') {
throw Error(`Unknown hookType ${hookType}`);
}
// 1 gives possibility to use default asserter as global asserter
if (hookType === 'asserter') {
const asserter = DEFAULT_ASSERTERS.find(asserter => src === asserter.className || src === asserter.name);
if (asserter) {
return new asserter.Class({
ref,
...this.buildScriptContext
}, this.caps, args);
}
}
if (hookType === 'logichook') {
const lh = DEFAULT_LOGIC_HOOKS.find(lh => src === lh.className || src === lh.name);
if (lh) {
return new lh.Class({
ref,
...this.buildScriptContext
}, this.caps, args);
}
}
if (hookType === 'userinput') {
const ui = DEFAULT_USER_INPUTS.find(ui => src === ui.className || src === ui.name);
if (ui) {
return new ui.Class({
ref,
...this.buildScriptContext
}, this.caps, args);
}
}
const allowUnsafe = !!this.caps[Capabilities.SECURITY_ALLOW_UNSAFE];
if (!src) {
const packageName = `botium-${hookType}-${ref}`;
try {
const CheckClass = commonjsRequire(packageName);
if (isClass(CheckClass)) {
return new CheckClass({
ref,
...this.buildScriptContext
}, this.caps, args);
} else if (lodash.isFunction(CheckClass)) {
return CheckClass({
ref,
...this.buildScriptContext
}, this.caps, args);
} else if (isClass(CheckClass.PluginClass)) {
return new CheckClass.PluginClass({
ref,
...this.buildScriptContext
}, this.caps, args);
} else {
throw new Error('Either class or function or PluginClass field expected');
}
} catch (err) {
throw new Error(`Logic Hook specification ${ref} ${hookType} (${packageName}) invalid: ${err.message}`);
}
}
if (isClass(src)) {
try {
const CheckClass = src;
return new CheckClass({
ref,
...this.buildScriptContext
}, this.caps, args);
} catch (err) {
throw new Error(`Logic Hook specification ${ref} from class invalid: ${err.message}`);
}
}
if (lodash.isFunction(src)) {
try {
return src({
ref,
...this.buildScriptContext
}, this.caps, args);
} catch (err) {
throw new Error(`Logic Hook specification ${ref} from function invalid: ${err.message}`);
}
}
if (lodash.isObject(src) && !lodash.isString(src)) {
try {
const hookObject = Object.keys(src).reduce((result, key) => {
result[key] = args => {
const script = src[key];
if (lodash.isFunction(script)) {
return script(args);
} else {
throw new Error(`Script ${key} is not valid - only functions accepted`);
}
};
return result;
}, {});
return hookObject;
} catch (err) {
throw new Error(`Logic Hook specification ${ref} ${hookType} from provided src (${util.inspect(src)}) invalid: ${err.message}`);
}
}
if (lodash.isString(src)) {
const loadErr = [];
const tryLoads = [{
tryLoadPackageName: src,
tryLoadAsserterByName: null
}];
if (src.indexOf('/') >= 0) {
tryLoads.push({
tryLoadPackageName: src.substring(0, src.lastIndexOf('/')),
tryLoadAsserterByName: src.substring(src.lastIndexOf('/') + 1)
});
}
const tryLoadFromSource = (tryRequire, tryAsserterName) => {
let CheckClass = commonjsRequire();
if (CheckClass.default) {
CheckClass = CheckClass.default;
}
if (tryAsserterName) {
if (hookType === 'asserter' && CheckClass.PluginAsserters && CheckClass.PluginAsserters[tryAsserterName]) {
CheckClass = CheckClass.PluginAsserters[tryAsserterName];
} else if (hookType === 'logichook' && CheckClass.PluginLogicHooks && CheckClass.PluginLogicHooks[tryAsserterName]) {
CheckClass = CheckClass.PluginLogicHooks[tryAsserterName];
} else {
throw new Error(`Loaded ${tryRequire}, but ${tryAsserterName} ${hookType} not found.`);
}
}
if (isClass(CheckClass)) {
return new CheckClass({
ref,
...this.buildScriptContext
}, this.caps, args);
} else if (lodash.isFunction(CheckClass)) {
return CheckClass({
ref,
...this.buildScriptContext
}, this.caps, args);
} else if (isClass(CheckClass.PluginClass)) {
return new CheckClass.PluginClass({
ref,
...this.buildScriptContext
}, this.caps, args);
} else if (lodash.isFunction(CheckClass.PluginClass)) {
return CheckClass.PluginClass({
ref,
...this.buildScriptContext
}, this.caps, args);
} else {
throw new Error('Expected class or function');
}
};
for (const tryLoad of tryLoads) {
if (this.caps.SAFEDIR) {
const tryLoadFile = path.resolve(this.caps.SAFEDIR, tryLoad.tryLoadPackageName);
if (tryLoadFile.startsWith(path.resolve(this.caps.SAFEDIR))) {
if (fs.existsSync(tryLoadFile)) {
try {
return tryLoadFromSource(tryLoadFile, tryLoad.tryLoadAsserterByName);
} catch (err) {
loadErr.push(`Logic Hook specification ${ref} ${hookType} from "${src}" invalid: ${err.message} `);
}
}
}
}
if (allowUnsafe || tryLoad.tryLoadPackageName.startsWith('botium-')) {
try {
return tryLoadFromSource(tryLoad.tryLoadPackageName, tryLoad.tryLoadAsserterByName);
} catch (err) {
loadErr.push(`Logic Hook specification ${ref} ${hookType} from "${src}" invalid: ${err.message} `);
}
}
}
loadErr.forEach(debug$m);
}
throw new Error(`Logic Hook specification ${ref} ${hookType} from "${util.inspect(src)}" invalid : no loader available`);
}
};
var Constants = {
SCRIPTING_FORMAT_XSLX: 'SCRIPTING_FORMAT_XSLX',
SCRIPTING_FORMAT_TXT: 'SCRIPTING_FORMAT_TXT',
SCRIPTING_FORMAT_YAML: 'SCRIPTING_FORMAT_YAML',
SCRIPTING_FORMAT_JSON: 'SCRIPTING_FORMAT_JSON',
SCRIPTING_FORMAT_CSV: 'SCRIPTING_FORMAT_CSV',
SCRIPTING_FORMAT_MARKDOWN: 'SCRIPTING_FORMAT_MARKDOWN',
SCRIPTING_TYPE_CONVO: 'SCRIPTING_TYPE_CONVO',
SCRIPTING_TYPE_PCONVO: 'SCRIPTING_TYPE_PCONVO',
SCRIPTING_TYPE_UTTERANCES: 'SCRIPTING_TYPE_UTTERANCES',
SCRIPTING_TYPE_SCRIPTING_MEMORY: 'SCRIPTING_TYPE_SCRIPTING_MEMORY'
};
Constants.SCRIPTING_FORMAT_XSLX;
Constants.SCRIPTING_FORMAT_TXT;
Constants.SCRIPTING_FORMAT_YAML;
Constants.SCRIPTING_FORMAT_JSON;
Constants.SCRIPTING_FORMAT_CSV;
Constants.SCRIPTING_FORMAT_MARKDOWN;
Constants.SCRIPTING_TYPE_CONVO;
Constants.SCRIPTING_TYPE_PCONVO;
Constants.SCRIPTING_TYPE_UTTERANCES;
Constants.SCRIPTING_TYPE_SCRIPTING_MEMORY;
var BotiumMockAttachment_1 = class BotiumMockAttachment {
constructor(fromJson = {}) {
this.name = fromJson.name;
this.mimeType = fromJson.mimeType;
this.base64 = fromJson.base64;
this.href = fromJson.href;
}
};
class BotiumMockMedia$1 {
constructor(fromJson = {}) {
this.mediaUri = fromJson.mediaUri;
this.mimeType = fromJson.mimeType;
this.altText = fromJson.altText;
this.downloadUri = fromJson.downloadUri;
this.buffer = fromJson.buffer;
}
prettify(indent = 0) {
const sections = [];
if (this.mediaUri) sections.push(lodash.truncate(this.mediaUri, {
length: 200
}));
if (this.mimeType) sections.push(this.mimeType);
if (this.altText) sections.push(this.altText);
return `${' '.repeat(indent)}MEDIA(${sections.join(' | ')})`;
}
}
class BotiumMockButton$1 {
constructor(fromJson = {}) {
this.text = fromJson.text;
this.payload = fromJson.payload;
this.imageUri = fromJson.imageUri;
}
prettify(indent = 0) {
const sections = [];
if (this.text) sections.push(this.text);
if (this.payload) sections.push(lodash.isObject(this.payload) ? JSON.stringify(this.payload) : this.payload);
if (this.imageUri) sections.push(lodash.truncate(this.imageUri, {
length: 200
}));
return `${' '.repeat(indent)}BUTTON(${sections.join(' | ')})`;
}
}
class BotiumMockCard$1 {
constructor(fromJson = {}) {
this.text = fromJson.text;
this.subtext = fromJson.subtext;
this.content = fromJson.content;
this.sourceData = fromJson.sourceData;
this.image = fromJson.image ? new BotiumMockMedia$1(fromJson.image) : null;
this.buttons = fromJson.buttons ? fromJson.buttons.map(a => new BotiumMockButton$1(a)) : null;
this.media = fromJson.media ? fromJson.media.map(a => new BotiumMockMedia$1(a)) : null;
this.forms = fromJson.forms ? fromJson.forms.map(a => new BotiumMockForm$1(a)) : null;
this.cards = fromJson.cards ? fromJson.cards.map(a => new BotiumMockCard$1(a)) : null;
this.sourceData = fromJson.sourceData;
}
prettify(indent = 0) {
return this._prettifyLines(this, indent).join('\n');
}
_prettifyLines(card, indent) {
const prettifySafe = (entry, indent) => entry.prettify ? entry.prettify(2) : `${' '.repeat(indent)}<No botium object!>${JSON.stringify(entry)}`;
const sections = [];
i