botpress
Version:
The world's first CMS for bots. Easily create, manage and extend chatbots.
330 lines (265 loc) • 10.7 kB
JavaScript
;
var _lodash = require('lodash');
var _lodash2 = _interopRequireDefault(_lodash);
var _multer = require('multer');
var _multer2 = _interopRequireDefault(_multer);
var _moment = require('moment');
var _moment2 = _interopRequireDefault(_moment);
var _util = require('../util');
var _util2 = _interopRequireDefault(_util);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
module.exports = (bp, app) => {
// modules
app.secure('read', 'bot.modules.list').get('/api/modules', (req, res) => {
const modules = _lodash2.default.map(bp._loadedModules, module => {
return {
name: _util2.default.getModuleShortname(module.name),
fullName: module.name,
homepage: module.homepage,
isPlugin: module.settings.isPlugin,
menuText: module.settings.menuText || module.name,
menuIcon: module.settings.menuIcon || 'view_module',
noInterface: !!module.settings.noInterface,
moduleView: module.settings.moduleView || { stretched: false },
plugins: module.settings.plugins || []
};
});
res.send(modules);
});
app.secure('read', 'bot.modules.list.community').get('/api/module/hero', (req, res) => {
bp.modules.getRandomCommunityHero().then(hero => res.send(hero));
});
app.secure('read', 'bot.modules.list.community').get('/api/bot/contributor', (req, res) => {
res.send(bp.bot.getContributor());
});
// middleware
app.secure('read', 'bot.middleware.list').get('/api/middlewares', (req, res) => {
res.send(bp.middlewares.list());
});
app.secure('write', 'bot.middleware.customizations').post('/api/middlewares/customizations', (req, res) => {
bp.stats.track('api', 'middlewares', 'customizations');
const { middlewares } = req.body;
bp.middlewares.setCustomizations(middlewares);
bp.middlewares.load();
res.send(bp.middlewares.list());
});
app.secure('write', 'bot.middleware.customizations').delete('/api/middlewares/customizations', (req, res) => {
bp.stats.track('api', 'middlewares', 'customizations');
bp.middlewares.resetCustomizations();
bp.middlewares.load();
res.send(bp.middlewares.list());
});
// notifications
// DEPRECATED in Botpress 1.1
app.secure('read', 'bot.notifications').get('/api/notifications', (() => {
var _ref = _asyncToGenerator(function* (req, res) {
res.send((yield bp.notifications.getInbox()));
});
return function (_x, _x2) {
return _ref.apply(this, arguments);
};
})());
app.secure('read', 'bot.notifications').get('/api/notifications/inbox', (() => {
var _ref2 = _asyncToGenerator(function* (req, res) {
res.send((yield bp.notifications.getInbox()));
});
return function (_x3, _x4) {
return _ref2.apply(this, arguments);
};
})());
// bot
app.secure('read', 'bot.information').get('/api/bot/information', (req, res) => {
res.send(bp.about.getBotInformation());
});
app.secure('write', 'bot.information.license').post('/api/license', (req, res) => {
bp.stats.track('api', 'license', 'change');
bp.licensing.changeLicense(req.body.license).then(() => {
res.sendStatus(200);
}).catch(err => res.status(500).send({
message: err && err.message
}));
});
app.secure('read', 'bot.logs').get('/api/logs', (req, res) => {
bp.logger.queryDb(req.query && req.query.limit || 50).then(results => {
res.send(results);
}).catch(err => {
console.log(err);
});
});
app.secure('read', 'bot.logs.archive').get('/api/logs/archive', (req, res) => {
bp.stats.track('api', 'logs', 'archive');
bp.logger.queryDb(null, 'asc').then(results => {
res.setHeader('Content-type', 'text/plain');
res.setHeader('Content-disposition', 'attachment; filename=logs.txt');
res.send(results.map(({ timestamp, level, message }) => {
const time = (0, _moment2.default)(new Date(timestamp)).format('MMM DD HH:mm:ss');
return `${time} ${level}: ${message}`;
}).join('\n'));
}).catch(err => {
console.error(err);
res.sendStatus(500);
});
});
app.secure('read', 'bot.content').get('/api/content/categories', (() => {
var _ref3 = _asyncToGenerator(function* (req, res) {
res.send((yield bp.contentManager.listAvailableCategories()));
});
return function (_x5, _x6) {
return _ref3.apply(this, arguments);
};
})());
app.secure('read', 'bot.content').get('/api/content/items', (() => {
var _ref4 = _asyncToGenerator(function* (req, res) {
const from = req.query.from || 0;
const count = req.query.count || 50;
let { searchTerm, categoryId, orderBy } = req.query;
if (categoryId === 'all') {
categoryId = null;
}
res.send((yield bp.contentManager.listCategoryItems(categoryId, { from, count, searchTerm, orderBy })));
});
return function (_x7, _x8) {
return _ref4.apply(this, arguments);
};
})());
app.secure('read', 'bot.content').get('/api/content/items/count', (() => {
var _ref5 = _asyncToGenerator(function* (req, res) {
let { categoryId } = req.query;
if (categoryId === 'all') {
categoryId = null;
}
res.send({ count: yield bp.contentManager.categoryItemsCount(categoryId) });
});
return function (_x9, _x10) {
return _ref5.apply(this, arguments);
};
})());
app.secure('read', 'bot.content').get('/api/content/items/:id', (() => {
var _ref6 = _asyncToGenerator(function* (req, res) {
res.send((yield bp.contentManager.getItem(req.params.id)));
});
return function (_x11, _x12) {
return _ref6.apply(this, arguments);
};
})());
app.secure('read', 'bot.content').get('/api/content/items-batched/:ids', (() => {
var _ref7 = _asyncToGenerator(function* (req, res) {
res.send((yield bp.contentManager.getItems(req.params.ids)));
});
return function (_x13, _x14) {
return _ref7.apply(this, arguments);
};
})());
app.secure('write', 'bot.content').post('/api/content/categories/:id/items', (() => {
var _ref8 = _asyncToGenerator(function* (req, res) {
res.send((yield bp.contentManager.createOrUpdateCategoryItem({
formData: req.body.formData,
categoryId: req.params.id
})));
});
return function (_x15, _x16) {
return _ref8.apply(this, arguments);
};
})());
app.secure('write', 'bot.content').post('/api/content/categories/:id/items/:itemId', (() => {
var _ref9 = _asyncToGenerator(function* (req, res) {
yield bp.contentManager.createOrUpdateCategoryItem({
itemId: req.params.itemId,
formData: req.body.formData,
categoryId: req.params.id
});
res.sendStatus(200);
});
return function (_x17, _x18) {
return _ref9.apply(this, arguments);
};
})());
app.secure('write', 'bot.content').post('/api/content/categories/all/bulk_delete', (() => {
var _ref10 = _asyncToGenerator(function* (req, res) {
yield bp.contentManager.deleteCategoryItems(req.body);
res.sendStatus(200);
});
return function (_x19, _x20) {
return _ref10.apply(this, arguments);
};
})());
app.secure('read', 'bot.ghost_content').get('/api/ghost_content/status', (() => {
var _ref11 = _asyncToGenerator(function* (req, res) {
res.send((yield bp.ghostManager.getPending()));
});
return function (_x21, _x22) {
return _ref11.apply(this, arguments);
};
})());
app.secure('read', 'bot.ghost_content').get('/api/ghost_content/export', (() => {
var _ref12 = _asyncToGenerator(function* (req, res) {
res.send((yield bp.ghostManager.getPendingWithContent({ stringifyBinary: true })));
});
return function (_x23, _x24) {
return _ref12.apply(this, arguments);
};
})());
app.secure('write', 'bot.ghost_content').delete('/api/ghost_content/:folder', (() => {
var _ref13 = _asyncToGenerator(function* (req, res) {
res.send((yield bp.ghostManager.revertAllPendingChangesForFile(req.params.folder, req.query.file)));
});
return function (_x25, _x26) {
return _ref13.apply(this, arguments);
};
})());
const mediaUploadMulter = (0, _multer2.default)({
limits: {
fileSize: 1024 * 1000 * 10 // 100mb
}
});
app.secure('write', 'bot.media').post('/api/media', mediaUploadMulter.single('file'), (() => {
var _ref14 = _asyncToGenerator(function* (req, res) {
const filename = yield bp.mediaManager.saveFile(req.file.originalname, req.file.buffer);
const url = `/media/${filename}`;
return res.json({ url });
});
return function (_x27, _x28) {
return _ref14.apply(this, arguments);
};
})());
app.secure('read', 'bot.flows').get('/api/flows/all', (() => {
var _ref15 = _asyncToGenerator(function* (req, res) {
const flows = yield bp.dialogEngine.getFlows();
res.send(flows);
});
return function (_x29, _x30) {
return _ref15.apply(this, arguments);
};
})());
app.secure('read', 'bot.flows').get('/api/flows/available_actions', (() => {
var _ref16 = _asyncToGenerator(function* (req, res) {
const actions = bp.dialogEngine.getAvailableActions();
res.send(actions);
});
return function (_x31, _x32) {
return _ref16.apply(this, arguments);
};
})());
app.secure('write', 'bot.flows').post('/api/flows/save', (() => {
var _ref17 = _asyncToGenerator(function* (req, res) {
yield bp.dialogEngine.flowProvider.saveFlows(req.body);
res.sendStatus(200);
});
return function (_x33, _x34) {
return _ref17.apply(this, arguments);
};
})());
app.secure('write', 'bot.skills').post('/api/skills/:skillId/generate', (() => {
var _ref18 = _asyncToGenerator(function* (req, res) {
res.send((yield bp.skills.generateFlow(req.params.skillId, req.body)));
});
return function (_x35, _x36) {
return _ref18.apply(this, arguments);
};
})());
app.get('/api/community/hero', (req, res) => {
res.send({ hidden: _lodash2.default.get(bp, 'botfile.heroSection.hidden', false) });
});
};
//# sourceMappingURL=secured.js.map