wingbot
Version:
Enterprise Messaging Bot Conversation Engine
81 lines (73 loc) • 2.31 kB
JavaScript
/*
* @author David Menger
*/
;
const path = require('path');
const { pathToRegexp } = require('path-to-regexp');
function makeAbsolute (action, contextPath = '') {
const isAbsolute = !action || action.match(/^\//);
return isAbsolute ? action : (path.posix || path).join(contextPath, action);
}
function actionMatches (route, requestedPath) {
const isAbsolute = requestedPath.match(/^\//);
if (route === requestedPath) {
return true;
}
if (isAbsolute) {
return !!pathToRegexp(route.replace(/\*/g, '(.*)'))
.exec(requestedPath);
}
const expectedPos = route.length - requestedPath.length;
return route.lastIndexOf(requestedPath) === expectedPos && expectedPos !== -1;
}
function parseActionPayload (object, needRawData = false) {
let action;
let data = {};
let setState = null;
let _aiKeys;
if (typeof object === 'string') {
action = object;
} else if (typeof object.action === 'string') {
action = object.action; // eslint-disable-line prefer-destructuring
data = object.data || data;
if (typeof object.setState === 'object') {
setState = object.setState || null;
}
if (object._aiKeys) {
({ _aiKeys } = object);
}
} else {
let payload = object.payload || object;
let isObject = typeof payload === 'object' && payload !== null;
if (typeof payload === 'string' && payload.match(/^\s*\{.*\}\s*$/)) {
payload = JSON.parse(payload);
isObject = true;
}
if (isObject) {
data = payload.data || payload;
action = payload.action; // eslint-disable-line prefer-destructuring
if (typeof payload.setState === 'object') {
setState = payload.setState || null;
}
if (object._aiKeys) {
({ _aiKeys } = object);
}
} else {
action = payload;
}
}
if (action && !`${action}`.match(/^[A-Za-z0-9\-/_]+$/)) {
action = null;
}
if (!action && !needRawData) {
return null;
}
return {
action, data, setState, _aiKeys
};
}
module.exports = {
makeAbsolute,
actionMatches,
parseActionPayload
};