botpress
Version:
The world's first CMS for bots. Easily create, manage and extend chatbots.
171 lines (131 loc) • 4.9 kB
JavaScript
;
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