UNPKG

botpress

Version:

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

97 lines (75 loc) 3.07 kB
'use strict'; var _lodash = require('lodash'); var _lodash2 = _interopRequireDefault(_lodash); var _socket = require('socket.io'); var _socket2 = _interopRequireDefault(_socket); var _socketioJwt = require('socketio-jwt'); var _socketioJwt2 = _interopRequireDefault(_socketioJwt); 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 => { const install = (() => { var _ref = _asyncToGenerator(function* (server) { const io = (0, _socket2.default)(server); const admin = io.of('/admin'); const guest = io.of('/guest'); if (bp.botfile.login.enabled) { admin.use(_socketioJwt2.default.authorize({ secret: yield bp.security.getJWTSecretOrCertificate(), handshake: true })); } admin.on('connection', function (socket) { const visitorId = _lodash2.default.get(socket, 'handshake.query.visitorId'); bp.stats.track('socket', 'connected'); socket.on('event', function (event) { bp.events.emit(event.name, event.data, 'client', { visitorId: visitorId, socketId: socket.id, guest: false, admin: true }); }); }); guest.on('connection', function (socket) { const visitorId = _lodash2.default.get(socket, 'handshake.query.visitorId'); bp.stats.track('socket', 'connected'); if (visitorId && visitorId.length > 0) { socket.join('visitor:' + visitorId); } socket.on('event', function (event) { bp.events.emit(event.name, event.data, 'client', { socketId: socket.id, visitorId: visitorId, guest: true, admin: false }); }); }); bp.events.onAny(function (event, data, from) { if (from === 'client') { return; // we sent this ourselves } // TODO: use more meaningful name const c = event.startsWith('guest.') ? guest : admin; if (data && (data.__socketId || data.__room)) { // Send only to this socketId or room return c.to(data.__socketId || data.__room).emit('event', { name: event, data: data }); } // broadcast event to the front-end clients c.emit('event', { name: event, data: data }); }); }); return function install(_x) { return _ref.apply(this, arguments); }; })(); return { install }; }; //# sourceMappingURL=socket.js.map