UNPKG

botpress

Version:

The world's first CMS for bots. Easily create, manage and extend chatbots.

171 lines (131 loc) 4.9 kB
'use strict'; var _fs = require('fs'); var _fs2 = _interopRequireDefault(_fs); var _path = require('path'); var _path2 = _interopRequireDefault(_path); var _axios = require('axios'); var _axios2 = _interopRequireDefault(_axios); var _ms = require('ms'); var _ms2 = _interopRequireDefault(_ms); var _lodash = require('lodash'); var _lodash2 = _interopRequireDefault(_lodash); 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 = ({ projectLocation, botfile, logger }) => { let _getWellKnownRSACert = (() => { var _ref = _asyncToGenerator(function* () { if (certificate) { return certificate; } const endpoint = getCloudEndpoint(); const { data } = yield _axios2.default.get(endpoint + '/api/.well-known/public.key'); if (data && data.length) { certificate = data; } logger.debug('[Cloud] Updated certificates'); return data; }); return function _getWellKnownRSACert() { return _ref.apply(this, arguments); }; })(); let updateRemoteEnv = (() => { var _ref2 = _asyncToGenerator(function* () { if (!isPaired()) { return; } const { token, endpoint } = getPairingInfo(); const { env, botUrl } = botfile; yield _axios2.default.put(endpoint + '/api/pairing/env', { botUrl, token, env }).then(function () { logger.debug('[Cloud] Updated environment: ' + env); }).catch(function (err) { const message = _lodash2.default.get(err, 'response.data.message') || err.message || 'Unknown error'; logger.error('[Cloud] Could not update environment: ' + message); }); }); return function updateRemoteEnv() { return _ref2.apply(this, arguments); }; })(); let _getRemoteRoles = (() => { var _ref3 = _asyncToGenerator(function* () { if (!isPaired()) { return; } if (rolesPromise) { return rolesPromise; } const { endpoint, token, botId } = getPairingInfo(); rolesPromise = _axios2.default.get(`${endpoint}/api/bots/${botId}/roles`, { headers: { Authorization: `Bearer bot__${token}` } }).then(function ({ data: { payload: data } }) { logger.debug('[Cloud] Received roles: ', data); return data; }).catch(function (err) { const message = _lodash2.default.get(err, 'response.data.message') || err.message || 'Unknown error'; logger.error('[Cloud] Error receiving roles: ' + message); return null; }); return rolesPromise; }); return function _getRemoteRoles() { return _ref3.apply(this, arguments); }; })(); let getUserRoles = (() => { var _ref4 = _asyncToGenerator(function* (roleNames) { if (!isPaired()) { return null; } const roles = yield _getRemoteRoles(); return roleNames.reduce(function (acc, roleName) { const role = _lodash2.default.find(roles, { name: roleName }); acc[roleName] = role && role.rules; return acc; }, {}); }); return function getUserRoles(_x) { return _ref4.apply(this, arguments); }; })(); let certificate = null; let rolesPromise = null; setInterval(() => certificate = null, (0, _ms2.default)('5 minutes')); setInterval(() => rolesPromise = null, (0, _ms2.default)('5 minutes')); function _readCloudfile() { const filePath = _path2.default.resolve(projectLocation, 'bp-cloud.json'); if (!_fs2.default.existsSync(filePath)) { throw new Error('Could not find `bp-cloud.json` file at project root. Have you run "botpress cloud-pair" command?'); } return JSON.parse(_fs2.default.readFileSync(filePath, 'utf8')); } function getCloudEndpoint() { return _readCloudfile().endpoint; } function getPairingInfo() { return _lodash2.default.pick(_readCloudfile(), ['botId', 'endpoint', 'token', 'teamId']); } function isPaired() { const filePath = _path2.default.resolve(projectLocation, 'bp-cloud.json'); return _fs2.default.existsSync(filePath); } function getBotEnv() { return botfile.env; } return { getCloudEndpoint, getBotEnv, getUserRoles, getCertificate: _getWellKnownRSACert, isPaired, getPairingInfo, updateRemoteEnv }; }; //# sourceMappingURL=index.js.map