1 | "use strict";
|
2 |
|
3 | var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
4 |
|
5 | Object.defineProperty(exports, "__esModule", {
|
6 | value: true
|
7 | });
|
8 | exports["default"] = exports.BotsRouter = void 0;
|
9 |
|
10 | var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
11 |
|
12 | var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
13 |
|
14 | var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
15 |
|
16 | var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
17 |
|
18 | var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
19 |
|
20 | var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
|
21 |
|
22 | var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
23 |
|
24 | var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
25 |
|
26 | var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
27 |
|
28 | var _env = require("@lskjs/env");
|
29 |
|
30 | var _err = _interopRequireDefault(require("@lskjs/err"));
|
31 |
|
32 | var _module = _interopRequireDefault(require("@lskjs/module"));
|
33 |
|
34 | var _bluebird = _interopRequireDefault(require("bluebird"));
|
35 |
|
36 | var _querystring = _interopRequireDefault(require("querystring"));
|
37 |
|
38 | var _universalRouter = _interopRequireDefault(require("universal-router"));
|
39 |
|
40 | var _url = _interopRequireDefault(require("url"));
|
41 |
|
42 | function 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; }
|
43 |
|
44 | function _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; }
|
45 |
|
46 | function _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); }; }
|
47 |
|
48 | function _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; } }
|
49 |
|
50 | var BotsRouter = function (_Module) {
|
51 | (0, _inherits2["default"])(BotsRouter, _Module);
|
52 |
|
53 | var _super = _createSuper(BotsRouter);
|
54 |
|
55 | function BotsRouter() {
|
56 | (0, _classCallCheck2["default"])(this, BotsRouter);
|
57 | return _super.apply(this, arguments);
|
58 | }
|
59 |
|
60 | (0, _createClass2["default"])(BotsRouter, [{
|
61 | key: "init",
|
62 | value:
|
63 | function () {
|
64 | var _init = (0, _asyncToGenerator2["default"])( _regenerator["default"].mark(function _callee() {
|
65 | return _regenerator["default"].wrap(function _callee$(_context) {
|
66 | while (1) {
|
67 | switch (_context.prev = _context.next) {
|
68 | case 0:
|
69 | _context.next = 2;
|
70 | return (0, _get2["default"])((0, _getPrototypeOf2["default"])(BotsRouter.prototype), "init", this).call(this);
|
71 |
|
72 | case 2:
|
73 | if (this.routes) {
|
74 | _context.next = 5;
|
75 | break;
|
76 | }
|
77 |
|
78 | this.log.warn('!routes');
|
79 | return _context.abrupt("return");
|
80 |
|
81 | case 5:
|
82 | if (this.bot.client) {
|
83 | _context.next = 8;
|
84 | break;
|
85 | }
|
86 |
|
87 | this.log.warn('!client');
|
88 | return _context.abrupt("return");
|
89 |
|
90 | case 8:
|
91 | if (this.bot.client.use) {
|
92 | _context.next = 11;
|
93 | break;
|
94 | }
|
95 |
|
96 | this.log.warn('!client.use');
|
97 | return _context.abrupt("return");
|
98 |
|
99 | case 11:
|
100 | this.log.trace('routes', this.routes.map(function (c) {
|
101 | return c.path;
|
102 | }).filter(Boolean));
|
103 | this.router = new _universalRouter["default"](this.routes);
|
104 | this.bot.client.use(this.middleware.bind(this));
|
105 |
|
106 | case 14:
|
107 | case "end":
|
108 | return _context.stop();
|
109 | }
|
110 | }
|
111 | }, _callee, this);
|
112 | }));
|
113 |
|
114 | function init() {
|
115 | return _init.apply(this, arguments);
|
116 | }
|
117 |
|
118 | return init;
|
119 | }()
|
120 | }, {
|
121 | key: "middleware",
|
122 | value: function () {
|
123 | var _middleware = (0, _asyncToGenerator2["default"])( _regenerator["default"].mark(function _callee2(ctx, next) {
|
124 | var props, res;
|
125 | return _regenerator["default"].wrap(function _callee2$(_context2) {
|
126 | while (1) {
|
127 | switch (_context2.prev = _context2.next) {
|
128 | case 0:
|
129 |
|
130 |
|
131 | props = this.getPathFromEvent(ctx);
|
132 |
|
133 | _context2.next = 3;
|
134 | return this.resolve(_objectSpread({
|
135 | ctx: ctx
|
136 | }, props));
|
137 |
|
138 | case 3:
|
139 | res = _context2.sent;
|
140 | return _context2.abrupt("return", next(ctx));
|
141 |
|
142 | case 5:
|
143 | case "end":
|
144 | return _context2.stop();
|
145 | }
|
146 | }
|
147 | }, _callee2, this);
|
148 | }));
|
149 |
|
150 | function middleware(_x, _x2) {
|
151 | return _middleware.apply(this, arguments);
|
152 | }
|
153 |
|
154 | return middleware;
|
155 | }()
|
156 | }, {
|
157 | key: "parsePathnameAndQuery",
|
158 | value: function parsePathnameAndQuery(str) {
|
159 | var _url$parse = _url["default"].parse(str),
|
160 | pathname = _url$parse.pathname,
|
161 | queryString = _url$parse.query;
|
162 |
|
163 | var query = queryString && queryString.length ? _querystring["default"].decode(queryString) : undefined;
|
164 | return {
|
165 | pathname: pathname,
|
166 | query: query
|
167 | };
|
168 | }
|
169 | }, {
|
170 | key: "getPathFromEvent",
|
171 | value: function getPathFromEvent(ctx) {
|
172 | var _ctx$session = ctx.session,
|
173 | session = _ctx$session === void 0 ? {} : _ctx$session;
|
174 |
|
175 | if (this.bot.isMessageCallback(ctx)) {
|
176 | delete session.nextRoute;
|
177 | return this.parsePathnameAndQuery(this.bot.getMessageCallbackData(ctx));
|
178 | }
|
179 |
|
180 | if (this.bot.isMessageCommand(ctx)) {
|
181 | delete session.nextRoute;
|
182 | return this.parsePathnameAndQuery(this.bot.getMessageCommand(ctx));
|
183 | }
|
184 |
|
185 | if (session.nextRoute) {
|
186 | var nextRoute = session.nextRoute;
|
187 | delete session.nextRoute;
|
188 | if (typeof nextRoute === 'string') return this.parsePathnameAndQuery(nextRoute);
|
189 | return nextRoute;
|
190 | }
|
191 |
|
192 | if (this.bot.isMessageStartsWithEmoji(ctx)) {
|
193 | var emojies = this.bot.getMessageStartsEmojiArray(ctx);
|
194 | if (!emojies.length) return null;
|
195 | return {
|
196 | path: "/".concat(emojies.join('/'))
|
197 | };
|
198 | }
|
199 |
|
200 | return session.defaultRoute || null;
|
201 | }
|
202 |
|
203 |
|
204 |
|
205 |
|
206 | }, {
|
207 | key: "provide",
|
208 | value: function () {
|
209 | var _provide = (0, _asyncToGenerator2["default"])( _regenerator["default"].mark(function _callee3(_ref) {
|
210 | var _ref$user, locale, i18Module, i18;
|
211 |
|
212 | return _regenerator["default"].wrap(function _callee3$(_context3) {
|
213 | while (1) {
|
214 | switch (_context3.prev = _context3.next) {
|
215 | case 0:
|
216 | _ref$user = _ref.user;
|
217 | _ref$user = _ref$user === void 0 ? {} : _ref$user;
|
218 | locale = _ref$user.locale;
|
219 | _context3.next = 5;
|
220 | return this.app.module('i18');
|
221 |
|
222 | case 5:
|
223 | i18Module = _context3.sent;
|
224 | _context3.next = 8;
|
225 | return i18Module.instance(locale, {
|
226 | anyLocale: true,
|
227 | throwError: false
|
228 | });
|
229 |
|
230 | case 8:
|
231 | i18 = _context3.sent;
|
232 | return _context3.abrupt("return", {
|
233 | app: this.app,
|
234 | router: this,
|
235 | botsModule: this.app.botsModule,
|
236 | bot: this.bot,
|
237 | i18: i18,
|
238 | module: this.app.module,
|
239 | log: this.log
|
240 | });
|
241 |
|
242 | case 10:
|
243 | case "end":
|
244 | return _context3.stop();
|
245 | }
|
246 | }
|
247 | }, _callee3, this);
|
248 | }));
|
249 |
|
250 | function provide(_x3) {
|
251 | return _provide.apply(this, arguments);
|
252 | }
|
253 |
|
254 | return provide;
|
255 | }()
|
256 | }, {
|
257 | key: "resolve",
|
258 | value: function () {
|
259 | var _resolve = (0, _asyncToGenerator2["default"])( _regenerator["default"].mark(function _callee6() {
|
260 | var _this = this;
|
261 |
|
262 | var _ref2,
|
263 | pathname,
|
264 | path,
|
265 | _ref2$query,
|
266 | query,
|
267 | ctx,
|
268 | provide,
|
269 | req,
|
270 | data,
|
271 | _args6 = arguments;
|
272 |
|
273 | return _regenerator["default"].wrap(function _callee6$(_context6) {
|
274 | while (1) {
|
275 | switch (_context6.prev = _context6.next) {
|
276 | case 0:
|
277 | _ref2 = _args6.length > 0 && _args6[0] !== undefined ? _args6[0] : {}, pathname = _ref2.pathname, path = _ref2.path, _ref2$query = _ref2.query, query = _ref2$query === void 0 ? {} : _ref2$query, ctx = _ref2.ctx;
|
278 |
|
279 | if (!path && pathname) path = pathname;
|
280 |
|
281 | if (path) {
|
282 | _context6.next = 5;
|
283 | break;
|
284 | }
|
285 |
|
286 | if (this.debug) this.log.warn('!path');
|
287 | return _context6.abrupt("return", null);
|
288 |
|
289 | case 5:
|
290 | if (ctx) {
|
291 | _context6.next = 8;
|
292 | break;
|
293 | }
|
294 |
|
295 | if (this.debug) this.log.warn('!ctx');
|
296 | return _context6.abrupt("return", null);
|
297 |
|
298 | case 8:
|
299 | if (this.debug) this.log.trace('resolve', path);
|
300 |
|
301 | ctx.nextRedirect = function () {
|
302 | var _ref3 = (0, _asyncToGenerator2["default"])( _regenerator["default"].mark(function _callee4(path, query) {
|
303 | var props;
|
304 | return _regenerator["default"].wrap(function _callee4$(_context4) {
|
305 | while (1) {
|
306 | switch (_context4.prev = _context4.next) {
|
307 | case 0:
|
308 | if (path) {
|
309 | _context4.next = 2;
|
310 | break;
|
311 | }
|
312 |
|
313 | throw new _err["default"]('!path');
|
314 |
|
315 | case 2:
|
316 | props = {};
|
317 |
|
318 | if (typeof path === 'string') {
|
319 | props = {
|
320 | path: path
|
321 | };
|
322 | } else {
|
323 | props = path;
|
324 | }
|
325 |
|
326 | if (!props.query && query) props.query = query;
|
327 | if (!ctx.session) ctx.session = {};
|
328 | ctx.session.nextRoute = props;
|
329 |
|
330 | if (_env.isDev) {
|
331 | _this.log.info("nextRedirect => ".concat(JSON.stringify(props)));
|
332 |
|
333 | }
|
334 |
|
335 | return _context4.abrupt("return", props);
|
336 |
|
337 | case 9:
|
338 | case "end":
|
339 | return _context4.stop();
|
340 | }
|
341 | }
|
342 | }, _callee4);
|
343 | }));
|
344 |
|
345 | return function (_x4, _x5) {
|
346 | return _ref3.apply(this, arguments);
|
347 | };
|
348 | }();
|
349 |
|
350 | ctx.redirect = function () {
|
351 | var _ref4 = (0, _asyncToGenerator2["default"])( _regenerator["default"].mark(function _callee5(path, query) {
|
352 | var props;
|
353 | return _regenerator["default"].wrap(function _callee5$(_context5) {
|
354 | while (1) {
|
355 | switch (_context5.prev = _context5.next) {
|
356 | case 0:
|
357 | if (path) {
|
358 | _context5.next = 2;
|
359 | break;
|
360 | }
|
361 |
|
362 | throw new _err["default"]('!path');
|
363 |
|
364 | case 2:
|
365 | props = {};
|
366 |
|
367 | if (typeof path === 'string') {
|
368 | props = {
|
369 | path: path
|
370 | };
|
371 | } else {
|
372 | props = path;
|
373 | }
|
374 |
|
375 | if (!props.query && query) props.query = query;
|
376 |
|
377 | if (!_env.isDev) {
|
378 | _context5.next = 9;
|
379 | break;
|
380 | }
|
381 |
|
382 | _this.log.info("redirect => ".concat(props.path || props.pathname, " ").concat(JSON.stringify(props.query), " [delay] ", 1000));
|
383 |
|
384 | _context5.next = 9;
|
385 | return _bluebird["default"].delay(1000);
|
386 |
|
387 | case 9:
|
388 | return _context5.abrupt("return", _this.resolve(_objectSpread({
|
389 | ctx: ctx
|
390 | }, props)));
|
391 |
|
392 | case 10:
|
393 | case "end":
|
394 | return _context5.stop();
|
395 | }
|
396 | }
|
397 | }, _callee5);
|
398 | }));
|
399 |
|
400 | return function (_x6, _x7) {
|
401 | return _ref4.apply(this, arguments);
|
402 | };
|
403 | }();
|
404 |
|
405 | _context6.next = 13;
|
406 | return this.provide({});
|
407 |
|
408 | case 13:
|
409 | provide = _context6.sent;
|
410 | req = {
|
411 | path: path,
|
412 | pathname: path,
|
413 | bot: provide.bot,
|
414 | log: this.log,
|
415 | ctx: ctx,
|
416 | query: query,
|
417 | i18: provide.i18,
|
418 | t: provide.i18 && provide.i18.t
|
419 | };
|
420 | data = _objectSpread(_objectSpread({}, provide), {}, {
|
421 | req: req,
|
422 | path: path,
|
423 | pathname: path,
|
424 | query: query,
|
425 | ctx: ctx
|
426 | });
|
427 | if (this.debug) this.log.trace('context', Object.keys(data));
|
428 | return _context6.abrupt("return", this.router.resolve(data)["catch"](function (err) {
|
429 | _this.log.error('err', err);
|
430 |
|
431 | throw err;
|
432 | }));
|
433 |
|
434 | case 18:
|
435 | case "end":
|
436 | return _context6.stop();
|
437 | }
|
438 | }
|
439 | }, _callee6, this);
|
440 | }));
|
441 |
|
442 | function resolve() {
|
443 | return _resolve.apply(this, arguments);
|
444 | }
|
445 |
|
446 | return resolve;
|
447 | }()
|
448 | }]);
|
449 | return BotsRouter;
|
450 | }(_module["default"]);
|
451 |
|
452 | exports.BotsRouter = BotsRouter;
|
453 | var _default = BotsRouter;
|
454 | exports["default"] = _default;
|
455 |
|
\ | No newline at end of file |