ringcentral-personal-chatbot
Version:
RingCentral personal chatbot framework
99 lines (76 loc) • 3.42 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _get2 = _interopRequireDefault(require("lodash/get"));
var _ringcentral = require("../models/ringcentral");
var _onAddPost = _interopRequireDefault(require("../handlers/on-add-post"));
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
async function run(props, conf, funcName) {
const {
skills
} = conf;
let handled = false;
for (const skill of skills) {
if (skill[funcName]) {
const prev = await skill[funcName](_objectSpread(_objectSpread({}, props), {}, {
shouldUseSignature: conf.shouldUseSignature,
handled
}));
handled = handled || prev;
}
}
await conf[funcName](_objectSpread(_objectSpread({}, props), {}, {
handled
}));
}
var _default = conf => {
return async (req, res) => {
const message = req.body;
if (process.env.DEBUG_ON) {
console.log('get rc webhook', JSON.stringify(message, null, 2));
}
const isRenewEvent = (0, _get2.default)(message, 'event') === (0, _ringcentral.subscribeInterval)();
const userId = ((0, _get2.default)(message, 'body.extensionId') || (0, _get2.default)(message, 'ownerId') || '').toString();
if (!userId) {
res.set({
'validation-token': req.get('validation-token') || req.get('Validation-Token')
});
return res.send('ok');
}
const user = await _ringcentral.User.findByPk(userId);
if (isRenewEvent && user) {
// console.log(new Date().toString(), 'receive renew event, user id', userId)
await user.ensureWebHook();
return;
}
const eventType = (0, _get2.default)(message, 'body.eventType');
const shouldUseSignature = !!(0, _get2.default)(user, 'signed');
const currentConf = _objectSpread(_objectSpread({}, conf), {}, {
user,
shouldUseSignature
});
if (eventType === 'PostAdded') {
const result = await (0, _onAddPost.default)(message, currentConf);
if (result) {
await run(_objectSpread({
type: 'Message4Bot'
}, result), currentConf, 'onPostAdd');
}
}
await run({
eventType,
message,
user
}, currentConf, 'onEvent');
res.set({
'validation-token': req.get('validation-token') || req.get('Validation-Token')
});
res.send('WebHook got');
};
};
exports.default = _default;