@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
JavaScript
"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