UNPKG

@lskjs/bots-plugin-notify

Version:

LSK.js plugin for @lskjs/bots module for telegram, slack, discord, whatsapp, twitter, instagram and vk bots creation

398 lines (322 loc) 16.7 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = exports.NotifyApi = void 0; var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _get3 = _interopRequireDefault(require("@babel/runtime/helpers/get")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _err = _interopRequireDefault(require("@lskjs/err")); var _serverApi = _interopRequireDefault(require("@lskjs/server-api")); var _bluebird = _interopRequireDefault(require("bluebird")); var _cryptoJs = _interopRequireDefault(require("crypto-js")); var _find = _interopRequireDefault(require("lodash/find")); var _get4 = _interopRequireDefault(require("lodash/get")); var _groupBy2 = _interopRequireDefault(require("lodash/groupBy")); 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; } 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; } 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); }; } 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; } } var NotifyApi = /*#__PURE__*/function (_Api) { (0, _inherits2["default"])(NotifyApi, _Api); var _super = _createSuper(NotifyApi); function NotifyApi() { var _this; (0, _classCallCheck2["default"])(this, NotifyApi); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); _this.messages = []; _this.messageTimeout = 500; return _this; } (0, _createClass2["default"])(NotifyApi, [{ key: "getRoutes", value: function () { var _getRoutes = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() { return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.t0 = _objectSpread; _context.t1 = _objectSpread; _context.t2 = {}; _context.next = 5; return (0, _get3["default"])((0, _getPrototypeOf2["default"])(NotifyApi.prototype), "getRoutes", this).call(this); case 5: _context.t3 = _context.sent; _context.t4 = (0, _context.t1)(_context.t2, _context.t3); _context.t5 = {}; _context.t6 = { '/': this.notify.bind(this), '/:projectName': this.notify.bind(this) }; return _context.abrupt("return", (0, _context.t0)(_context.t4, _context.t5, _context.t6)); case 10: case "end": return _context.stop(); } } }, _callee, this); })); function getRoutes() { return _getRoutes.apply(this, arguments); } return getRoutes; }() }, { key: "init", value: function () { var _init = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() { var _yield$this$app$modul, plugins, telegram, slack, notify, sendNotification, config; return _regenerator["default"].wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: _context2.next = 2; return (0, _get3["default"])((0, _getPrototypeOf2["default"])(NotifyApi.prototype), "init", this).call(this); case 2: _context2.next = 4; return this.app.module('bots'); case 4: _yield$this$app$modul = _context2.sent; plugins = _yield$this$app$modul.plugins; telegram = _yield$this$app$modul.telegram; slack = _yield$this$app$modul.slack; notify = plugins.notify; sendNotification = notify.sendNotification, config = notify.config; this.bot = { telegram: telegram, slack: slack }; this.notifyConfig = config; this.sendNotification = sendNotification.bind(notify); case 13: case "end": return _context2.stop(); } } }, _callee2, this); })); function init() { return _init.apply(this, arguments); } return init; }() }, { key: "sendNotifications", value: function () { var _sendNotifications = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5() { var _this2 = this; var date, _groupBy, _groupBy$old, old, _groupBy$new, new2, sendTelegram, sendSlack; return _regenerator["default"].wrap(function _callee5$(_context5) { while (1) { switch (_context5.prev = _context5.next) { case 0: date = Date.now() - this.messageTimeout; _groupBy = (0, _groupBy2["default"])(this.messages, function (m) { return m.createdAt < date ? 'old' : 'new2'; }), _groupBy$old = _groupBy.old, old = _groupBy$old === void 0 ? [] : _groupBy$old, _groupBy$new = _groupBy.new2, new2 = _groupBy$new === void 0 ? [] : _groupBy$new; this.messages = new2; sendTelegram = _bluebird["default"].map(old, /*#__PURE__*/function () { var _ref = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(message) { return _regenerator["default"].wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: return _context3.abrupt("return", _this2.sendNotification({ bot: _this2.bot.telegram, message: message })); case 1: case "end": return _context3.stop(); } } }, _callee3); })); return function (_x) { return _ref.apply(this, arguments); }; }(), { concurrency: 10 }); sendSlack = _bluebird["default"].map(old, /*#__PURE__*/function () { var _ref2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4(message) { return _regenerator["default"].wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: return _context4.abrupt("return", _this2.sendNotification({ bot: _this2.bot.slack, message: message })); case 1: case "end": return _context4.stop(); } } }, _callee4); })); return function (_x2) { return _ref2.apply(this, arguments); }; }(), { concurrency: 10 }); _context5.prev = 5; _context5.next = 8; return Promise.all([sendTelegram, sendSlack]); case 8: return _context5.abrupt("return", { data: 'ok' }); case 11: _context5.prev = 11; _context5.t0 = _context5["catch"](5); throw new _err["default"](_context5.t0); case 14: case "end": return _context5.stop(); } } }, _callee5, this, [[5, 11]]); })); function sendNotifications() { return _sendNotifications.apply(this, arguments); } return sendNotifications; }() }, { key: "notify", value: function () { var _notify = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6(req) { var _req$query, _req$data; var projectName, project, token, gitlabEvent, githubEvent, isAlertManager, isGraylog, message, getBool, _message$meta, objectKind, ref, _message$meta$commits, commits, _message$meta2, _ref3, _message$meta2$commit, _commits, _get2, text, md, messageHash, parentMessage; return _regenerator["default"].wrap(function _callee6$(_context6) { while (1) { switch (_context6.prev = _context6.next) { case 0: projectName = (0, _get4["default"])(req, 'data.projectName') || (0, _get4["default"])(req, 'params.projectName') || '_default'; project = this.notifyConfig.projects[projectName]; if (!project) project = this.notifyConfig.projects._default; token = req.get('X-Gitlab-Token') || req.get('X-Access-Token') || req.get('X-Auth-Token') || req.get('token') || ((_req$query = req.query) === null || _req$query === void 0 ? void 0 : _req$query.secret) || ((_req$data = req.data) === null || _req$data === void 0 ? void 0 : _req$data.secret); gitlabEvent = req.get('X-Gitlab-Event'); githubEvent = req.get('X-Github-Event'); isAlertManager = (req.get('User-Agent') || '').includes('Alertmanager'); isGraylog = req.body && req.body.event_definition_id && req.body.job_trigger_id && req.body.job_definition_id; if (!(project.secret && token !== project.secret)) { _context6.next = 10; break; } throw new _err["default"]('!acl'); case 10: // x aceess token // Message.create() message = { _id: Date.now() + Math.random(), createdAt: new Date(), type: 'manual', projectName: projectName, sended: false }; getBool = function getBool(param, def) { return param == null ? def : +param; }; if (gitlabEvent) { message.event = gitlabEvent; message.type = 'gitlab'; message.meta = req.body; message.isMd = getBool(req.query.isMd, false); _message$meta = message.meta, objectKind = _message$meta.object_kind, ref = _message$meta.ref, _message$meta$commits = _message$meta.commits, commits = _message$meta$commits === void 0 ? [] : _message$meta$commits; if (objectKind === 'push') { message.branch = ref.slice(ref.lastIndexOf('/') + 1); message.messageHash = _cryptoJs["default"].MD5([commits.map(function (c) { return c.id; })].join('')).toString(); } } if (githubEvent) { message.event = githubEvent; message.type = 'github'; message.meta = req.body; message.isMd = getBool(req.query.isMd, false); message.isMd = true; _message$meta2 = message.meta, _ref3 = _message$meta2.ref, _message$meta2$commit = _message$meta2.commits, _commits = _message$meta2$commit === void 0 ? [] : _message$meta2$commit; if (githubEvent === 'push') { message.branch = _ref3.slice(_ref3.lastIndexOf('/') + 1); message.messageHash = _cryptoJs["default"].MD5([_commits.map(function (c) { return c.id; })].join('')).toString(); } } if (isAlertManager) { message.event = 'alert'; message.type = 'alertmanager'; message.meta = req.body; message.isMd = getBool(req.query.isMd, false); } if (isGraylog) { message.event = 'alert'; message.type = 'graylog'; message.meta = req.body; message.isMd = getBool(req.query.isMd, false); } _get2 = (0, _get4["default"])(req, 'data', {}), text = _get2.text, md = _get2.md; if (text) { message.text = text; } if (md) { message.text = md; message.isMd = getBool(req.query.isMd, true); } if (!message.messageHash) { _context6.next = 26; break; } messageHash = message.messageHash; parentMessage = (0, _find["default"])(this.messages, { messageHash: messageHash }); if (!parentMessage) { _context6.next = 26; break; } if (!parentMessage.branches) { parentMessage.branches = []; } parentMessage.branches.push(message.branch); return _context6.abrupt("return", 'duplicate'); case 26: this.messages.push(message); _context6.next = 29; return _bluebird["default"].delay(this.messageTimeout * 1.3); case 29: return _context6.abrupt("return", this.sendNotifications()); case 30: case "end": return _context6.stop(); } } }, _callee6, this); })); function notify(_x3) { return _notify.apply(this, arguments); } return notify; }() }]); return NotifyApi; }(_serverApi["default"]); exports.NotifyApi = NotifyApi; var _default = NotifyApi; exports["default"] = _default; //# sourceMappingURL=NotifyApi.js.map