UNPKG

25.6 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
5var _typeof = require("@babel/runtime/helpers/typeof");
6
7Object.defineProperty(exports, "__esModule", {
8 value: true
9});
10exports["default"] = exports.asyncMapValues = void 0;
11
12var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
13
14var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
15
16var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
17
18var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
19
20var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
21
22var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
23
24var _get3 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
25
26var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
27
28var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
29
30var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
31
32var _botsRouter = require("@lskjs/bots-router");
33
34var _module = require("@lskjs/module");
35
36var _createAsyncModule = require("@lskjs/module/utils/createAsyncModule");
37
38var _importFn = _interopRequireDefault(require("@lskjs/utils/importFn"));
39
40var _bluebird = _interopRequireDefault(require("bluebird"));
41
42var _flatten = _interopRequireDefault(require("lodash/flatten"));
43
44var _mapValues = _interopRequireDefault(require("lodash/mapValues"));
45
46var _pickBy = _interopRequireDefault(require("lodash/pickBy"));
47
48var _models = _interopRequireDefault(require("./models"));
49
50var _plugins = _interopRequireDefault(require("./plugins"));
51
52var _providers = _interopRequireDefault(require("./providers"));
53
54function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
55
56function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
57
58function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
59
60function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
61
62function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
63
64function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
65
66var asyncMapValues = function asyncMapValues(obj, callback) {
67 return _bluebird["default"].props((0, _mapValues["default"])(obj, callback));
68};
69
70exports.asyncMapValues = asyncMapValues;
71
72var BotsModule = /*#__PURE__*/function (_Module) {
73 (0, _inherits2["default"])(BotsModule, _Module);
74
75 var _super = _createSuper(BotsModule);
76
77 function BotsModule() {
78 var _this;
79
80 (0, _classCallCheck2["default"])(this, BotsModule);
81
82 for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
83 args[_key] = arguments[_key];
84 }
85
86 _this = _super.call.apply(_super, [this].concat(args));
87 _this.app = void 0;
88 _this.providers = _providers["default"];
89 _this.plugins = {};
90 _this.log = void 0;
91 _this.bots = void 0;
92 _this.v = void 0;
93 _this.routes = void 0;
94 _this.routers = void 0;
95 _this.config = void 0;
96 return _this;
97 }
98
99 (0, _createClass2["default"])(BotsModule, [{
100 key: "setProps",
101 value: function setProps() {
102 var _get2;
103
104 for (var _len2 = arguments.length, props = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
105 props[_key2] = arguments[_key2];
106 }
107
108 (_get2 = (0, _get3["default"])((0, _getPrototypeOf2["default"])(BotsModule.prototype), "setProps", this)).call.apply(_get2, [this].concat(props));
109
110 try {
111 // eslint-disable-next-line import/no-unresolved
112 this.v = require('./package.json').version;
113 } catch (err) {
114 // eslint-disable-next-line no-console
115 console.error('setProps err', err);
116 }
117 }
118 }, {
119 key: "getConfig",
120 value: function () {
121 var _getConfig = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
122 var config;
123 return _regenerator["default"].wrap(function _callee$(_context) {
124 while (1) {
125 switch (_context.prev = _context.next) {
126 case 0:
127 config = _objectSpread(_objectSpread(_objectSpread({}, this.config || {}), this.__config || {}), {}, {
128 providers: _objectSpread(_objectSpread({}, this.config.providers || {}), this.__config.providers || {}),
129 plugins: _objectSpread(_objectSpread({}, this.config.plugins || {}), this.__config.plugins || {})
130 });
131 return _context.abrupt("return", config);
132
133 case 2:
134 case "end":
135 return _context.stop();
136 }
137 }
138 }, _callee, this);
139 }));
140
141 function getConfig() {
142 return _getConfig.apply(this, arguments);
143 }
144
145 return getConfig;
146 }()
147 }, {
148 key: "model",
149 value: function () {
150 var _model = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
151 var modelsModule,
152 _args2 = arguments;
153 return _regenerator["default"].wrap(function _callee2$(_context2) {
154 while (1) {
155 switch (_context2.prev = _context2.next) {
156 case 0:
157 _context2.next = 2;
158 return this.module('models');
159
160 case 2:
161 modelsModule = _context2.sent;
162 return _context2.abrupt("return", modelsModule.model.apply(modelsModule, _args2));
163
164 case 4:
165 case "end":
166 return _context2.stop();
167 }
168 }
169 }, _callee2, this);
170 }));
171
172 function model() {
173 return _model.apply(this, arguments);
174 }
175
176 return model;
177 }()
178 }, {
179 key: "getPlugins",
180 value: function () {
181 var _getPlugins = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3() {
182 return _regenerator["default"].wrap(function _callee3$(_context3) {
183 while (1) {
184 switch (_context3.prev = _context3.next) {
185 case 0:
186 return _context3.abrupt("return", _objectSpread(_objectSpread({}, _plugins["default"]), this.plugins || {}));
187
188 case 1:
189 case "end":
190 return _context3.stop();
191 }
192 }
193 }, _callee3, this);
194 }));
195
196 function getPlugins() {
197 return _getPlugins.apply(this, arguments);
198 }
199
200 return getPlugins;
201 }()
202 }, {
203 key: "getProviders",
204 value: function () {
205 var _getProviders = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4() {
206 return _regenerator["default"].wrap(function _callee4$(_context4) {
207 while (1) {
208 switch (_context4.prev = _context4.next) {
209 case 0:
210 return _context4.abrupt("return", _objectSpread(_objectSpread({}, _providers["default"]), this.providers || {}));
211
212 case 1:
213 case "end":
214 return _context4.stop();
215 }
216 }
217 }, _callee4, this);
218 }));
219
220 function getProviders() {
221 return _getProviders.apply(this, arguments);
222 }
223
224 return getProviders;
225 }()
226 }, {
227 key: "getRoutes",
228 value: function () {
229 var _getRoutes = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6() {
230 var plugingRoutes;
231 return _regenerator["default"].wrap(function _callee6$(_context6) {
232 while (1) {
233 switch (_context6.prev = _context6.next) {
234 case 0:
235 _context6.next = 2;
236 return asyncMapValues(this.plugins, /*#__PURE__*/function () {
237 var _ref = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5(plugin) {
238 var routes;
239 return _regenerator["default"].wrap(function _callee5$(_context5) {
240 while (1) {
241 switch (_context5.prev = _context5.next) {
242 case 0:
243 if (!(plugin && plugin.getRoutes)) {
244 _context5.next = 7;
245 break;
246 }
247
248 _context5.next = 3;
249 return plugin.getRoutes();
250
251 case 3:
252 routes = _context5.sent;
253
254 if (Array.isArray(routes)) {
255 _context5.next = 6;
256 break;
257 }
258
259 return _context5.abrupt("return", [routes]);
260
261 case 6:
262 return _context5.abrupt("return", routes);
263
264 case 7:
265 return _context5.abrupt("return", []);
266
267 case 8:
268 case "end":
269 return _context5.stop();
270 }
271 }
272 }, _callee5);
273 }));
274
275 return function (_x) {
276 return _ref.apply(this, arguments);
277 };
278 }());
279
280 case 2:
281 plugingRoutes = _context6.sent;
282 return _context6.abrupt("return", [].concat((0, _toConsumableArray2["default"])((0, _flatten["default"])(Object.values(plugingRoutes))), [{
283 path: '/start',
284 action: this.onStart.bind(this)
285 }, {
286 path: '(.*)',
287 action: function action(_ref2) {
288 var path = _ref2.path,
289 log = _ref2.log;
290 log.error('404', path);
291 return true;
292 }
293 }]));
294
295 case 4:
296 case "end":
297 return _context6.stop();
298 }
299 }
300 }, _callee6, this);
301 }));
302
303 function getRoutes() {
304 return _getRoutes.apply(this, arguments);
305 }
306
307 return getRoutes;
308 }()
309 }, {
310 key: "onStart",
311 value: function () {
312 var _onStart = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee7(_ref3) {
313 var ctx;
314 return _regenerator["default"].wrap(function _callee7$(_context7) {
315 while (1) {
316 switch (_context7.prev = _context7.next) {
317 case 0:
318 ctx = _ref3.ctx;
319 _context7.next = 3;
320 return ctx.reply("Hello LSK world");
321
322 case 3:
323 case "end":
324 return _context7.stop();
325 }
326 }
327 }, _callee7);
328 }));
329
330 function onStart(_x2) {
331 return _onStart.apply(this, arguments);
332 }
333
334 return onStart;
335 }()
336 }, {
337 key: "getModules",
338 value: function () {
339 var _getModules = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee8() {
340 return _regenerator["default"].wrap(function _callee8$(_context8) {
341 while (1) {
342 switch (_context8.prev = _context8.next) {
343 case 0:
344 return _context8.abrupt("return", _objectSpread(_objectSpread({}, (0, _get3["default"])((0, _getPrototypeOf2["default"])(BotsModule.prototype), "getModules", this).call(this)), {}, {
345 // @ts-ignore
346 models: [function () {
347 return Promise.resolve().then(function () {
348 return _interopRequireWildcard(require('@lskjs/db/models'));
349 });
350 }, {
351 models: _models["default"]
352 }]
353 }));
354
355 case 1:
356 case "end":
357 return _context8.stop();
358 }
359 }
360 }, _callee8, this);
361 }));
362
363 function getModules() {
364 return _getModules.apply(this, arguments);
365 }
366
367 return getModules;
368 }()
369 }, {
370 key: "init",
371 value: function () {
372 var _init = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee12() {
373 var _this2 = this;
374
375 var _this$config, _this$config$assignPr, assignProviders, providersConfigs, pluginsConfig, providers, currentPlugins;
376
377 return _regenerator["default"].wrap(function _callee12$(_context12) {
378 while (1) {
379 switch (_context12.prev = _context12.next) {
380 case 0:
381 _context12.next = 2;
382 return (0, _get3["default"])((0, _getPrototypeOf2["default"])(BotsModule.prototype), "init", this).call(this);
383
384 case 2:
385 // console.log('this.app.config.bots', this.app.config.bots)
386 // console.log(this.config)
387 _this$config = this.config, _this$config$assignPr = _this$config.assignProviders, assignProviders = _this$config$assignPr === void 0 ? true : _this$config$assignPr, providersConfigs = _this$config.providers, pluginsConfig = _this$config.plugins;
388 _context12.next = 5;
389 return this.getProviders();
390
391 case 5:
392 providers = _context12.sent;
393 // eslint-disable-line no-shadow
394 this.log.debug('providers', Object.keys(providers));
395 _context12.next = 9;
396 return asyncMapValues(providersConfigs, /*#__PURE__*/function () {
397 var _ref4 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee9(config, key) {
398 var provider;
399 return _regenerator["default"].wrap(function _callee9$(_context9) {
400 while (1) {
401 switch (_context9.prev = _context9.next) {
402 case 0:
403 provider = config.provider;
404
405 if (provider) {
406 _context9.next = 4;
407 break;
408 }
409
410 _this2.log.warn("Empty provider for bot '".concat(key, "'"));
411
412 return _context9.abrupt("return", null);
413
414 case 4:
415 if (providers[provider]) {
416 _context9.next = 7;
417 break;
418 }
419
420 _this2.log.warn("Can't find provider '".concat(provider, "' for bot '").concat(key, "'"));
421
422 return _context9.abrupt("return", null);
423
424 case 7:
425 return _context9.abrupt("return", (0, _createAsyncModule.createAsyncModule)(providers[provider], {
426 __parent: _this2,
427 app: _this2.app,
428 botsModule: _this2,
429 config: config,
430 key: key
431 }));
432
433 case 8:
434 case "end":
435 return _context9.stop();
436 }
437 }
438 }, _callee9);
439 }));
440
441 return function (_x3, _x4) {
442 return _ref4.apply(this, arguments);
443 };
444 }());
445
446 case 9:
447 this.bots = _context12.sent;
448 this.log.debug('bots', Object.keys(this.bots));
449 _context12.next = 13;
450 return this.getPlugins();
451
452 case 13:
453 currentPlugins = _context12.sent;
454 _context12.next = 16;
455 return asyncMapValues(currentPlugins, /*#__PURE__*/function () {
456 var _ref5 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee10(pluginFn, name) {
457 var pluginConfig, Plugin;
458 return _regenerator["default"].wrap(function _callee10$(_context10) {
459 while (1) {
460 switch (_context10.prev = _context10.next) {
461 case 0:
462 pluginConfig = pluginsConfig && pluginsConfig[name];
463 return _context10.abrupt("return", (0, _createAsyncModule.createAsyncModule)(pluginFn, {
464 __parent: _this2,
465 app: _this2.app,
466 botsModule: _this2,
467 bots: _this2.bots,
468 config: pluginConfig || {}
469 }));
470
471 case 4:
472 Plugin = _context10.sent;
473
474 if (!(pluginConfig === false)) {
475 _context10.next = 7;
476 break;
477 }
478
479 return _context10.abrupt("return", null);
480
481 case 7:
482 return _context10.abrupt("return", Plugin.create({
483 __parent: _this2,
484 app: _this2.app,
485 botsModule: _this2,
486 bots: _this2.bots,
487 config: pluginConfig || {}
488 }));
489
490 case 8:
491 case "end":
492 return _context10.stop();
493 }
494 }
495 }, _callee10);
496 }));
497
498 return function (_x5, _x6) {
499 return _ref5.apply(this, arguments);
500 };
501 }());
502
503 case 16:
504 this.plugins = _context12.sent;
505 // @ts-ignore
506 this.plugins = (0, _pickBy["default"])(this.plugins, Boolean);
507 this.log.debug('plugins', Object.keys(this.plugins));
508 _context12.next = 21;
509 return this.getRoutes();
510
511 case 21:
512 this.routes = _context12.sent;
513 this.log.debug('Bots.routes', this.routes.map(function (c) {
514 return c.path;
515 }));
516 _context12.next = 25;
517 return asyncMapValues(this.bots, /*#__PURE__*/function () {
518 var _ref6 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee11(bot) {
519 return _regenerator["default"].wrap(function _callee11$(_context11) {
520 while (1) {
521 switch (_context11.prev = _context11.next) {
522 case 0:
523 return _context11.abrupt("return", _botsRouter.BotsRouter.create({
524 __parent: _this2,
525 app: _this2.app,
526 botsModule: _this2,
527 bots: _this2.bots,
528 bot: bot,
529 routes: _this2.routes
530 }));
531
532 case 1:
533 case "end":
534 return _context11.stop();
535 }
536 }
537 }, _callee11);
538 }));
539
540 return function (_x7) {
541 return _ref6.apply(this, arguments);
542 };
543 }());
544
545 case 25:
546 this.routers = _context12.sent;
547 if (assignProviders) Object.assign(this, this.bots);
548
549 case 27:
550 case "end":
551 return _context12.stop();
552 }
553 }
554 }, _callee12, this);
555 }));
556
557 function init() {
558 return _init.apply(this, arguments);
559 }
560
561 return init;
562 }()
563 }, {
564 key: "run",
565 value: function () {
566 var _run = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee14() {
567 return _regenerator["default"].wrap(function _callee14$(_context14) {
568 while (1) {
569 switch (_context14.prev = _context14.next) {
570 case 0:
571 _context14.next = 2;
572 return (0, _get3["default"])((0, _getPrototypeOf2["default"])(BotsModule.prototype), "run", this).call(this);
573
574 case 2:
575 if (this.config) {
576 _context14.next = 4;
577 break;
578 }
579
580 return _context14.abrupt("return");
581
582 case 4:
583 _context14.next = 6;
584 return asyncMapValues(this.bots, function (bot) {
585 return bot.__run();
586 });
587
588 case 6:
589 _context14.next = 8;
590 return asyncMapValues(this.plugins, function (plugin) {
591 return plugin.__run();
592 });
593
594 case 8:
595 _context14.t0 = this.log;
596 _context14.next = 11;
597 return asyncMapValues(this.bots, /*#__PURE__*/function () {
598 var _ref7 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee13(bot) {
599 return _regenerator["default"].wrap(function _callee13$(_context13) {
600 while (1) {
601 switch (_context13.prev = _context13.next) {
602 case 0:
603 return _context13.abrupt("return", (bot.plugins || []).map(function (plugin) {
604 return plugin.name;
605 }));
606
607 case 1:
608 case "end":
609 return _context13.stop();
610 }
611 }
612 }, _callee13);
613 }));
614
615 return function (_x8) {
616 return _ref7.apply(this, arguments);
617 };
618 }());
619
620 case 11:
621 _context14.t1 = _context14.sent;
622
623 _context14.t0.debug.call(_context14.t0, 'bots x plugins', _context14.t1);
624
625 case 13:
626 case "end":
627 return _context14.stop();
628 }
629 }
630 }, _callee14, this);
631 }));
632
633 function run() {
634 return _run.apply(this, arguments);
635 }
636
637 return run;
638 }()
639 }]);
640 return BotsModule;
641}(_module.Module);
642
643exports["default"] = BotsModule;
644//# sourceMappingURL=BotsModule.js.map
\No newline at end of file